diff --git a/docs/swarm/ui.md b/docs/swarm/ui.md index dc0e0ce7..f563729a 100644 --- a/docs/swarm/ui.md +++ b/docs/swarm/ui.md @@ -27,11 +27,10 @@ shut. A dropdown inside a dialog opens above the dialog and the dialog doesn't c | `/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, and under it the swarm builder's recent builds of agent config PRs, with what nix printed when one failed | +| `/jobs` | the controller's job graph, where agent creation and credential mints show progress, and under it the swarm builder's recent builds of agent config PRs, with what nix printed when one failed, and the review classifier's recent runs, a try-out on a real PR, and its settings | | `/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 more than one agent at once, and a folded **schedules** card holds the scheduled prompts: add, edit, pause, resume and remove | | `/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 | 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 @@ -115,11 +114,13 @@ its agent's details. ### Review -`/review` is the one page for the [review classifier](review-classifier.md), -with three sections in a column. **try a classification** and **classifier +The **review** card on the **jobs** tab is the one place for the +[review classifier](review-classifier.md), with three sections in a column. The +card starts shut and reads nothing until you open it; the old `/review` address +redirects to the jobs tab. **try a classification** and **classifier settings** come first, each folded to a single bar: the bar of the settings says what they're now, and what you typed in a section stays when you fold it. -**recent runs** is under them and always open. The sections share nothing and +**recent runs** is under them and is open with the card. The sections share nothing and ask for their own data. #### Recent runs diff --git a/frontend/packages/swarm-ui/src/App.tsx b/frontend/packages/swarm-ui/src/App.tsx index f524005f..d27f9a81 100644 --- a/frontend/packages/swarm-ui/src/App.tsx +++ b/frontend/packages/swarm-ui/src/App.tsx @@ -14,7 +14,6 @@ import { NotificationsPage } from "./pages/notifications/NotificationsPage.js"; import { ComponentsPage } from "./pages/ComponentsPage.js"; import { JobsPage } from "./pages/JobsPage.js"; import { IssueReportPage } from "./pages/IssueReportPage.js"; -import { ReviewPage } from "./pages/review/ReviewPage.js"; import { StartPage } from "./pages/StartPage.js"; import { Panel } from "./ui/panel/Panel.js"; @@ -58,7 +57,9 @@ export function App() { - + + + diff --git a/frontend/packages/swarm-ui/src/pages/JobsPage.tsx b/frontend/packages/swarm-ui/src/pages/JobsPage.tsx index b0c08dd9..3a5df7f2 100644 --- a/frontend/packages/swarm-ui/src/pages/JobsPage.tsx +++ b/frontend/packages/swarm-ui/src/pages/JobsPage.tsx @@ -23,6 +23,7 @@ import { JobqGraph } from "@hive/shared/jobq-graph.js"; import { JobqRollup } from "@hive/shared/jobq-rollup.js"; import { LazyDisclosure } from "../ui/disclosure/LazyDisclosure.js"; import { BuildsCard } from "./builds/BuildsPage.js"; +import { ReviewPage } from "./review/ReviewPage.js"; import { RefreshIntervalPicker, useRefreshInterval, @@ -65,8 +66,9 @@ function JobsBody() { ); } -// The jobs tab holds two folded cards: the controller's job graph, and the swarm -// builder's recent builds under it. Neither reads anything until it is opened. +// The jobs tab holds three folded cards: the controller's job graph, the swarm +// builder's recent builds, and the review classifier's page. None reads +// anything until it is opened. export function JobsPage() { return (
@@ -78,6 +80,13 @@ export function JobsPage() { + + +
); } diff --git a/frontend/packages/swarm-ui/src/pages/review/ReviewPage.tsx b/frontend/packages/swarm-ui/src/pages/review/ReviewPage.tsx index 5c148e7c..a55d86a9 100644 --- a/frontend/packages/swarm-ui/src/pages/review/ReviewPage.tsx +++ b/frontend/packages/swarm-ui/src/pages/review/ReviewPage.tsx @@ -1,4 +1,4 @@ -// — the review classifier on one page (`docs/swarm/ui.md`, +// — the review classifier, one card of the jobs tab (`docs/swarm/ui.md`, // "Review"): the way to try a classification on a PR, the classifier's own // settings, and the runs it has done. The first two fold, since they are // used now and then and a folded header says what is in them; the runs are diff --git a/frontend/packages/swarm-ui/src/shell/Shell.tsx b/frontend/packages/swarm-ui/src/shell/Shell.tsx index a1ab0373..a42d8339 100644 --- a/frontend/packages/swarm-ui/src/shell/Shell.tsx +++ b/frontend/packages/swarm-ui/src/shell/Shell.tsx @@ -56,7 +56,6 @@ const NAV_ITEMS: { href: string; label: string; accent: string }[] = [ { href: "/messages", label: "messages", accent: "var(--purple)" }, { href: "/notifications", label: "notifications", accent: "var(--yellow)" }, { href: "/issues", label: "issues", accent: "var(--yellow)" }, - { href: "/review", label: "review", accent: "var(--amber)" }, { href: "/components", label: "components", accent: "var(--blue)" }, ];