feat(cli): v0.1.5 — live peer discovery + summaries (Step 16)
Some checks failed
CI / Typecheck (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled
Release / Publish multi-arch images (push) Has been cancelled

Wire list_peers and set_summary MCP tools to the broker's WS
protocol instead of returning stubs. Peers can now discover each
other, see status/summary, and route messages by display name.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-06 09:37:40 +01:00
parent 7d51f101d7
commit 4c52ee236c
12 changed files with 144 additions and 162 deletions

View File

@@ -121,13 +121,6 @@ export interface MeshStreamProps {
emptyLabel?: string;
/** footer content (stats / progress bar / timers) */
footer?: React.ReactNode;
/**
* When true (live dashboard), the message list gets a fixed viewport
* with overflow-y-auto — standard chat UI. When false (landing demo),
* the list grows intrinsically so wheel events pass through to the
* page scroll instead of being captured by the list.
*/
scrollable?: boolean;
}
export const MeshStream = ({
@@ -137,7 +130,6 @@ export const MeshStream = ({
peersHint,
emptyLabel = "Waiting for messages…",
footer,
scrollable = false,
}: MeshStreamProps) => {
const [focusedPeer, setFocusedPeer] = useState<string | null>(null);
const [hoveredKey, setHoveredKey] = useState<string | null>(null);
@@ -148,12 +140,7 @@ export const MeshStream = ({
: messages;
return (
<div
className={
"grid grid-cols-1 md:grid-cols-[220px_1fr] " +
(scrollable ? "min-h-[480px]" : "")
}
>
<div className="grid min-h-[480px] grid-cols-1 md:grid-cols-[220px_1fr]">
{/* peers sidebar */}
<aside
className="border-b border-[var(--cm-border)] bg-[var(--cm-bg-elevated)]/20 p-4 md:border-b-0 md:border-r"
@@ -252,12 +239,7 @@ export const MeshStream = ({
: "all peers · E2E encrypted"}
</span>
</div>
<ol
className={
"space-y-3 p-4 " +
(scrollable ? "flex-1 overflow-y-auto" : "")
}
>
<ol className="flex-1 space-y-3 overflow-y-auto p-4">
{filtered.length === 0 && (
<li
className="py-8 text-center text-[13px] text-[var(--cm-fg-tertiary)]"