diff --git a/docs/web-ui/agent.md b/docs/web-ui/agent.md index 5f46df80..ff51a5d9 100644 --- a/docs/web-ui/agent.md +++ b/docs/web-ui/agent.md @@ -147,34 +147,42 @@ newlines, Tab-completes slash commands (see "Terminal-embedded prompt" below). **Side panel** (slide-in from right): singleton shared with the -dashboard's side panel shape. Carries inbox and loose-ends flyouts -(opened via the header pills) as well as long content (file previews, -diffs, journald logs). Inbox flyout: unread messages addressed to -this agent (`acked_at IS NULL`, newest-first, up to 30); reply -messages indented with `↳ reply ·` in amber. A `✓ mark all read` -button appears in the flyout header when the inbox is non-empty; -clicking it confirms then POSTs cross-origin to the core -dashboard's `POST /api/agent/{name}/mark-all-read` — all pending -messages for this agent are acked, the harness won't receive -wake-prompts for them. A `{ marked: N }` pill surfaces the count. -After the drain the inbox list empties on reload (the filter is -`acked_at IS NULL`, so drained messages disappear). Loose-ends flyout: questions, -approvals, reminders, pending inbox messages, and unread matrix -notifications pending against this agent (`GET /api/loose-ends`); -question rows carry an inline answer form that POSTs cross-origin to -the core dashboard's `POST /api/answer-question/{id}` so the operator answers -*as operator* (see `docs/boundary.md`). Pending inbox messages (`✉ inbox -— N pending message(s)`) and unread matrix rooms appear informational -only (not cancellable from the flyout — drain with `recv` / `mark_read` -in-turn). Tasks flyout: in-flight bash -tasks (`GET /api/bash-tasks`); each row shows status (`▶ running` / -`◷ queued`), the task id, elapsed time, and a truncated one-line -command preview. Read-only — kill/inspect lives in the harness, not -the page. +dashboard's side panel shape. Carries inbox and todos flyouts (opened +via the header pills) as well as long content (file previews, diffs, +journald logs). Inbox flyout: unread messages addressed to this agent +(`acked_at IS NULL`, newest-first, up to 30); reply messages indented +with `↳ reply ·` in amber. A `✓ mark all read` button appears in the +flyout header when the inbox is non-empty; clicking it confirms then +POSTs cross-origin to the core dashboard's `POST +/api/agent/{name}/mark-all-read` — all pending messages for this agent +are acked, the harness won't receive wake-prompts for them. A `{ +marked: N }` pill surfaces the count. After the drain the inbox list +empties on reload (the filter is `acked_at IS NULL`, so drained +messages disappear). Todos flyout ("loose-ends v2"): the harness-local +todos other subsystems (matrix, forge, bash) push at this agent +(`GET /api/todos`) — each row shows the producing subsystem, an +optional source label, a summary, and age. A checkbox per row plus a +select-all / select-none / `✓ mark done` bulk row above the list POSTs +the checked ids to `POST /api/todos/mark-done`, which dismisses them +from the harness-local store (same effect as `cancel_loose_end(kind: +"todo")`, just from the web UI instead of the agent's own tool calls). -**Ask → operator inline-answer binding.** When the agent emits -`mcp__hyperhive__ask(to: "operator", ...)`, the tool_use renderer -mounts an empty slot (`