diff --git a/docs/web-ui.md b/docs/web-ui.md index 30b10853..77e7bfde 100644 --- a/docs/web-ui.md +++ b/docs/web-ui.md @@ -122,15 +122,16 @@ the previous process's socket release resolves itself. The dashboard (`/`) has a fixed chrome header at the top and a `
` that shows exactly one tab pane at a time. The URL hash -(`#swarm`, `#call`, `#system`) drives which pane is active; hash -changes don't reload the page. FL0W is a separate full-page -terminal at `/flow.html` — its tab-strip entry is a cross-page -link (`◆ FL0W ◆ →`), not a pane swap. +(`#swarm`, `#call`, `#system`, `#schedules`) drives which pane is +active; hash changes don't reload the page. FL0W is a separate +full-page terminal at `/flow.html` — its tab-strip entry is a +cross-page link (`◆ FL0W ◆ →`), not a pane swap. **Chrome header** (fixed, overlays the active tab pane): -- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ SYST3M ◆`, and - `◆ FL0W ◆ →` (page link). Count pills on SW4RM (container count) - and Y3R C4LL (pending approvals + questions); FL0W pill mirrors +- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ SYST3M ◆`, + `◆ SCH3DUL3S ◆`, and `◆ FL0W ◆ →` (page link). Count pills on + SW4RM (container count), Y3R C4LL (pending approvals + + questions), and SCH3DUL3S (active schedules); FL0W pill mirrors the operator inbox length (hidden when zero). - **Notification controls**: `🔔 enable notifications` when permission ungranted; `🔕 mute / 🔔 unmute` toggle once granted. @@ -211,20 +212,25 @@ entries tick elapsed seconds live. Cold-loaded from `/api/state.rebuild_queue`; live updates via `rebuild_queue_changed` snapshot event. -**QU3U3D R3M1ND3RS** — reminders agents have scheduled for -themselves (via the `remind` tool) but not yet delivered. -Each row shows the owner, due time, and message; a `CANC3L` -button hard-deletes (`POST /cancel-reminder/{id}`) and a -`R3TRY` button re-arms one whose delivery failed -(`POST /retry-reminder/{id}`). Backed by `GET /api/reminders`. +**K3PT ST4T3** — destroyed-but-state-kept tombstones (size + +age + claude-creds badge). Two actions: `⊕ R3V1V3` (queues a +Spawn approval; existing state is reused), `PURG3` (wipes +state + applied dirs; `POST /purge-tombstone/{name}`). -**SCH3DUL3D PR0MPTS** — operator-managed scheduled prompts -(#444 / #459). Lists every schedule with its description, -targets, body, recurrence interval, next-fire time, and -per-target last-result; a `CANC3L` button cancels the whole -schedule (`POST /api/schedules/{id}/cancel`), and individual -target chips have their own cancel links. An inline creation -form lets the operator queue a new schedule directly: +### SCH3DUL3S tab + +Anything that fires at a future time. Operator-set schedules +go through the creation form at the top; agent self-paced +reminders surface at the bottom as a sibling list (#460 — +they share enough conceptual ground to live together). + +**N3W SCH3DUL3 / QU3U3D SCH3DUL3S** — operator-managed +scheduled prompts (#444 / #459). Lists every schedule with +its description, targets, body, recurrence interval, next-fire +time, and per-target last-result; a `CANC3L` button cancels +the whole schedule (`POST /api/schedules/{id}/cancel`), and +individual target chips have their own cancel links. An inline +creation form lets the operator queue a new schedule directly: targets (multi-select checkboxes drawn from live container names + `operator` + `manager`), prompt body (textarea), first-fire datetime-local (pre-filled to 5 minutes from now), @@ -235,10 +241,14 @@ the count of active schedules (at least one live target not yet cancelled). Refreshed on tab activation and after each submit/cancel. Backed by `GET /api/schedules`. -**K3PT ST4T3** — destroyed-but-state-kept tombstones (size + -age + claude-creds badge). Two actions: `⊕ R3V1V3` (queues a -Spawn approval; existing state is reused), `PURG3` (wipes -state + applied dirs; `POST /purge-tombstone/{name}`). +**QU3U3D R3M1ND3RS** — reminders agents have scheduled for +themselves (via the `remind` tool) but not yet delivered. +Each row shows the owner, due time, and message; a `CANC3L` +button hard-deletes (`POST /cancel-reminder/{id}`) and a +`R3TRY` button re-arms one whose delivery failed +(`POST /retry-reminder/{id}`). Backed by `GET /api/reminders`. +Lives in the SCH3DUL3S tab alongside operator schedules so the +operator has one place for everything time-fired (#460). ### FL0W page (`/flow.html`) diff --git a/frontend/packages/dashboard/src/index.html b/frontend/packages/dashboard/src/index.html index 315b35b6..834ca0b5 100644 --- a/frontend/packages/dashboard/src/index.html +++ b/frontend/packages/dashboard/src/index.html @@ -104,10 +104,12 @@ + bumps), rebuild queue (watch only), kept state from previous + tombstoned agents. Queued reminders moved to the SCH3DUL3S + tab in #460 — they're conceptually "fire X at time Y" too, + just self-scheduled by agents instead of operator-set. + Headings stay; the per-section content auto-compresses to a + one-line summary when empty (separate JS toggle). -->

◆ M3T4 1NPUTS ◆

@@ -124,13 +126,6 @@

loading…

-

◆ QU3U3D R3M1ND3RS ◆

-
══════════════════════════════════════════════════════════════
-

reminders agents have queued for themselves but not yet delivered. cancel to drop a stuck or unwanted entry.

-
-

loading…

-
-

◆ K3PT ST4T3 ◆

══════════════════════════════════════════════════════════════
@@ -161,6 +156,19 @@

loading…

+ + +

◆ QU3U3D R3M1ND3RS ◆

+
══════════════════════════════════════════════════════════════
+

reminders agents have queued for themselves but not yet delivered. cancel to drop a stuck or unwanted entry.

+
+

loading…

+