From 70917b7dd07d3f507399e19134292d005e176e83 Mon Sep 17 00:00:00 2001 From: iris Date: Mon, 26 Oct 2026 16:39:39 +0100 Subject: [PATCH] swarm-ui: hives are a folded card on the agents page, and hide developer details also hides the components tab The hives nav tab and route go, with no redirect; the roster is a card above the agents panel that starts folded and is read on the first open. The settings toggle is renamed from hide debug output to hide developer details, as it now also drops the components tab (the page still answers at /components); the stored preference keeps its key. --- docs/swarm/ui.md | 34 ++++++------- docs/web-ui/terminal-rendering.md | 2 +- .../shared/src/settings/HideDebugSetting.tsx | 4 +- frontend/packages/shared/src/terminal/Row.tsx | 4 +- frontend/packages/swarm-ui/src/App.tsx | 2 - .../packages/swarm-ui/src/pages/StartPage.tsx | 3 +- .../swarm-ui/src/pages/agents/AgentsPage.css | 11 ++++ .../swarm-ui/src/pages/agents/AgentsPage.tsx | 4 ++ .../{HivesPage.tsx => agents/HivesCard.tsx} | 51 +++++++++++++------ .../packages/swarm-ui/src/shell/Shell.tsx | 25 ++++++--- .../swarm-ui/src/shell/useHideDebug.ts | 17 +++++++ .../packages/swarm-ui/test/routes.test.mjs | 2 +- 12 files changed, 110 insertions(+), 49 deletions(-) rename frontend/packages/swarm-ui/src/pages/{HivesPage.tsx => agents/HivesCard.tsx} (79%) create mode 100644 frontend/packages/swarm-ui/src/shell/useHideDebug.ts diff --git a/docs/swarm/ui.md b/docs/swarm/ui.md index 054b04b0..164989b3 100644 --- a/docs/swarm/ui.md +++ b/docs/swarm/ui.md @@ -20,21 +20,20 @@ the highlighted one. **Escape**, **Tab** or a click elsewhere shut the list with changing anything. Typing the start of an option's name picks it, also with the list shut. A dropdown inside a dialog opens above the dialog and the dialog doesn't cut it off. -| route | what | -| ---------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `/` | the start page: the swarm's name over a digital-rain backdrop, plus a paperclip offering to set up an agent while no `ruth` exists (it opens the create form with `ruth` filled in); the swarm name in the header links here | -| `/hives` | the hive directory, each hive with its last reported status | -| `/agents` | every agent: status, config PR, wanted state, inference settings, resource caps, permissions; create agents (with their permissions, optionally from an [archetype](archetypes.md)), link forge, matrix and GitHub accounts | -| `/agents//terminal` | one agent's live terminal | -| `/agents//subagents//terminal` | one of that agent's subagents' live terminal | -| `/alerts` | the alerts the swarm's Grafana holds now: the firing ones, with a button for the pending, no-data and error ones and a link to Grafana's own alert list; read through the controller with a Viewer service-account token | -| `/jobs` | the controller's job graph — where agent creation and credential mints show progress | -| `/schedules` | the scheduled prompts: add, edit, pause, resume and remove | -| `/messages` | the swarm-wide message feed: every message between agents, and to them from the operator, reminders and compaction, with a history window and a filter on sender or recipient; a folded **broadcast** card above the feed sends one message to several agents at once | -| `/notifications` | the notification router's flows: a switch for each built-in, every flow drawn as a graph, and an editor for custom flows | -| `/issues` | a cross-repo issue report | -| `/review` | the review classifier: its recent runs, a try-out on a real PR, and its settings | -| `/builds` | the swarm builder's recent builds of agent config PRs, with what nix printed when one failed | +| route | what | +| ---------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `/` | the start page: the swarm's name over a digital-rain backdrop, plus a paperclip offering to set up an agent while no `ruth` exists (it opens the create form with `ruth` filled in); the swarm name in the header links here | +| `/agents` | every agent, under a folded **hives** card with the hive directory and each hive's last reported status: status, config PR, wanted state, inference settings, resource caps, permissions; create agents (with their permissions, optionally from an [archetype](archetypes.md)), link forge, matrix and GitHub accounts | +| `/agents//terminal` | one agent's live terminal | +| `/agents//subagents//terminal` | one of that agent's subagents' live terminal | +| `/alerts` | the alerts the swarm's Grafana holds now: the firing ones, with a button for the pending, no-data and error ones and a link to Grafana's own alert list; read through the controller with a Viewer service-account token | +| `/jobs` | the controller's job graph — where agent creation and credential mints show progress | +| `/schedules` | the scheduled prompts: add, edit, pause, resume and remove | +| `/messages` | the swarm-wide message feed: every message between agents, and to them from the operator, reminders and compaction, with a history window and a filter on sender or recipient; a folded **broadcast** card above the feed sends one message to several agents at once | +| `/notifications` | the notification router's flows: a switch for each built-in, every flow drawn as a graph, and an editor for custom flows | +| `/issues` | a cross-repo issue report | +| `/review` | the review classifier: its recent runs, a try-out on a real PR, and its settings | +| `/builds` | the swarm builder's recent builds of agent config PRs, with what nix printed when one failed | Everything it shows comes from [`swarm-controller`](../../swarm-controller/README.md). Pages that refresh on a timer share one polling rule: the page sends no new @@ -95,10 +94,11 @@ stream with an error status, the browser gives up and the badge reads **disconnected**. The **reconnect** button beside it opens the stream again, and the stream replays the rows. The messages page works the same way. -The settings menu in the header has a **hide debug output** toggle. It drops +The settings menu in the header has a **hide developer details** toggle. It drops the muted debug rows (thinking, coalesced ticks, harness chatter) from every terminal, the preview and the tabs, and rows already on screen hide or show as -you flip it. The browser keeps the choice for the swarm UI, apart from the +you flip it. It also hides the **components** tab, a page for developers, which +still answers at `/components`. The browser keeps the choice for the swarm UI, apart from the per-agent pages'. A terminal's own tab takes the agent's icon as its browser-tab icon, so tabs of diff --git a/docs/web-ui/terminal-rendering.md b/docs/web-ui/terminal-rendering.md index 85762198..ba8dabb3 100644 --- a/docs/web-ui/terminal-rendering.md +++ b/docs/web-ui/terminal-rendering.md @@ -51,7 +51,7 @@ that motivated the change. | `warn` | amber, left rule | stderr, an unrecognised event shape, API retries | | `error` | red, left rule | turn failed, a tool result with `is_error: true` | -The settings menu's "hide debug output" toggle (`getHideDebugPref()`, +The settings menu's "hide developer details" toggle (`getHideDebugPref()`, `@hive/shared/prefs.js`) skips `debug`-level rows entirely rather than muting them further — client-side only, no reload. The per-agent page and the swarm UI both have the toggle, as one shared row diff --git a/frontend/packages/shared/src/settings/HideDebugSetting.tsx b/frontend/packages/shared/src/settings/HideDebugSetting.tsx index b0c98025..b04208b1 100644 --- a/frontend/packages/shared/src/settings/HideDebugSetting.tsx +++ b/frontend/packages/shared/src/settings/HideDebugSetting.tsx @@ -1,4 +1,4 @@ -// Settings-menu row: "hide debug output". Rendered as a `` +// Settings-menu row: "hide developer details". Rendered as a `` // child (`./SettingsMenu.js`) by each page that has a terminal, the // per-agent page and the swarm UI, rather than as a prop on the menu: the // caller owns its row. Both read the same preference (`../prefs.js`), which @@ -11,7 +11,7 @@ export function HideDebugSetting() { const [hideDebug, setHideDebugState] = useState(() => getHideDebugPref()); return (