"use client"; import { useState } from "react"; import Link from "next/link"; const NEWS = [ { tag: "Today", title: "Kick refuses control-plane", body: "v1.34.15 — broker now skips control-plane peers on kick and acks the skip. Use ban for hard removal, or take the daemon down for transient cases.", href: "/changelog", }, { tag: "This week", title: "Multi-session correctness", body: "1.34.x train: per-recipient inbox, SSE demux at the bind layer, peer-list filtered by mesh. Multiple sessions on one machine no longer cross-talk.", href: "/changelog", }, { tag: "Shipped", title: "Per-session presence", body: "v1.30.0 — every Claude Code session gets its own ed25519 keypair and parent attestation. The broker tracks sessions, not machines.", href: "/changelog", }, { tag: "Shipped", title: "Multi-mesh daemon", body: "v1.26.0 — one daemon, every mesh you've joined. Switch context with a flag. Self-host the broker in your VPC; same CLI, your URL.", href: "/changelog", }, ]; export const LatestNewsToaster = () => { const [index, setIndex] = useState(0); const [hidden, setHidden] = useState(false); if (hidden) return null; const item = NEWS[index]; if (!item) return null; return (
{/* head */}
Latest news
{/* body */}

{item.title}

{item.body}

Learn more
{/* illustration tile */}
{/* pager */}
{String(index + 1).padStart(2, "0")} / {String(NEWS.length).padStart(2, "0")}
); };