diff --git a/docs/web-ui/agent.md b/docs/web-ui/agent.md index bfe13b62..f37869e5 100644 --- a/docs/web-ui/agent.md +++ b/docs/web-ui/agent.md @@ -142,17 +142,16 @@ 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: last 30 messages addressed to -this agent (`AgentRequest::Recent { limit: 30 }`); reply messages -indented with `↳ reply ·` in amber. A `✓ mark all read` button -appears in the flyout header when the inbox is non-empty; +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. -The displayed message list stays put (it shows the most-recent N -regardless of ack state); the unread badge on the next turn-start -will reflect zero. Loose-ends flyout: questions, +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, and reminders pending against this agent (`GET /api/loose-ends`); question rows carry an inline answer form that POSTs cross-origin to the core dashboard's `/answer-question/{id}` so the operator answers