swarm-ui: the review classifier is a folded card on the jobs tab
The review tab is gone from the nav. Its page, unchanged inside, is a card on /jobs that starts shut and reads nothing until opened; /review redirects to /jobs. Docs follow.
This commit is contained in:
parent
bdef828df3
commit
9ffd537aa2
5 changed files with 21 additions and 11 deletions
|
|
@ -27,11 +27,10 @@ shut. A dropdown inside a dialog opens above the dialog and the dialog doesn't c
|
||||||
| `/agents/<name>/terminal` | one agent's live terminal |
|
| `/agents/<name>/terminal` | one agent's live terminal |
|
||||||
| `/agents/<name>/subagents/<subagent>/terminal` | one of that agent's subagents' live terminal |
|
| `/agents/<name>/subagents/<subagent>/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 |
|
| `/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 |
|
| `/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 |
|
| `/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 |
|
| `/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).
|
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
|
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
|
||||||
|
|
||||||
`/review` is the one page for the [review classifier](review-classifier.md),
|
The **review** card on the **jobs** tab is the one place for the
|
||||||
with three sections in a column. **try a classification** and **classifier
|
[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
|
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.
|
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.
|
ask for their own data.
|
||||||
|
|
||||||
#### Recent runs
|
#### Recent runs
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import { NotificationsPage } from "./pages/notifications/NotificationsPage.js";
|
||||||
import { ComponentsPage } from "./pages/ComponentsPage.js";
|
import { ComponentsPage } from "./pages/ComponentsPage.js";
|
||||||
import { JobsPage } from "./pages/JobsPage.js";
|
import { JobsPage } from "./pages/JobsPage.js";
|
||||||
import { IssueReportPage } from "./pages/IssueReportPage.js";
|
import { IssueReportPage } from "./pages/IssueReportPage.js";
|
||||||
import { ReviewPage } from "./pages/review/ReviewPage.js";
|
|
||||||
import { StartPage } from "./pages/StartPage.js";
|
import { StartPage } from "./pages/StartPage.js";
|
||||||
import { Panel } from "./ui/panel/Panel.js";
|
import { Panel } from "./ui/panel/Panel.js";
|
||||||
|
|
||||||
|
|
@ -58,7 +57,9 @@ export function App() {
|
||||||
</Route>
|
</Route>
|
||||||
<Route path="/notifications/:flowId" component={FlowEditorPage} />
|
<Route path="/notifications/:flowId" component={FlowEditorPage} />
|
||||||
<Route path="/issues" component={IssueReportPage} />
|
<Route path="/issues" component={IssueReportPage} />
|
||||||
<Route path="/review" component={ReviewPage} />
|
<Route path="/review">
|
||||||
|
<Redirect to="/jobs" replace />
|
||||||
|
</Route>
|
||||||
<Route path="/components" component={ComponentsPage} />
|
<Route path="/components" component={ComponentsPage} />
|
||||||
<Route component={NotFound} />
|
<Route component={NotFound} />
|
||||||
</Switch>
|
</Switch>
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import { JobqGraph } from "@hive/shared/jobq-graph.js";
|
||||||
import { JobqRollup } from "@hive/shared/jobq-rollup.js";
|
import { JobqRollup } from "@hive/shared/jobq-rollup.js";
|
||||||
import { LazyDisclosure } from "../ui/disclosure/LazyDisclosure.js";
|
import { LazyDisclosure } from "../ui/disclosure/LazyDisclosure.js";
|
||||||
import { BuildsCard } from "./builds/BuildsPage.js";
|
import { BuildsCard } from "./builds/BuildsPage.js";
|
||||||
|
import { ReviewPage } from "./review/ReviewPage.js";
|
||||||
import {
|
import {
|
||||||
RefreshIntervalPicker,
|
RefreshIntervalPicker,
|
||||||
useRefreshInterval,
|
useRefreshInterval,
|
||||||
|
|
@ -65,8 +66,9 @@ function JobsBody() {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// The jobs tab holds two folded cards: the controller's job graph, and the swarm
|
// The jobs tab holds three folded cards: the controller's job graph, the swarm
|
||||||
// builder's recent builds under it. Neither reads anything until it is opened.
|
// builder's recent builds, and the review classifier's page. None reads
|
||||||
|
// anything until it is opened.
|
||||||
export function JobsPage() {
|
export function JobsPage() {
|
||||||
return (
|
return (
|
||||||
<div class="ui-jobs-page">
|
<div class="ui-jobs-page">
|
||||||
|
|
@ -78,6 +80,13 @@ export function JobsPage() {
|
||||||
<JobsBody />
|
<JobsBody />
|
||||||
</LazyDisclosure>
|
</LazyDisclosure>
|
||||||
<BuildsCard />
|
<BuildsCard />
|
||||||
|
<LazyDisclosure
|
||||||
|
title="review"
|
||||||
|
icon="🔍"
|
||||||
|
hint="the review classifier: its recent runs, a try-out, its settings"
|
||||||
|
>
|
||||||
|
<ReviewPage />
|
||||||
|
</LazyDisclosure>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
// <ReviewPage> — the review classifier on one page (`docs/swarm/ui.md`,
|
// <ReviewPage> — 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
|
// "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
|
// 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
|
// used now and then and a folded header says what is in them; the runs are
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,6 @@ const NAV_ITEMS: { href: string; label: string; accent: string }[] = [
|
||||||
{ href: "/messages", label: "messages", accent: "var(--purple)" },
|
{ href: "/messages", label: "messages", accent: "var(--purple)" },
|
||||||
{ href: "/notifications", label: "notifications", accent: "var(--yellow)" },
|
{ href: "/notifications", label: "notifications", accent: "var(--yellow)" },
|
||||||
{ href: "/issues", label: "issues", accent: "var(--yellow)" },
|
{ href: "/issues", label: "issues", accent: "var(--yellow)" },
|
||||||
{ href: "/review", label: "review", accent: "var(--amber)" },
|
|
||||||
{ href: "/components", label: "components", accent: "var(--blue)" },
|
{ href: "/components", label: "components", accent: "var(--blue)" },
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue