"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 (
{item.body}
Learn more