dashboard: move queued reminders into SCH3DUL3S tab (closes #460)
mara wanted one place for everything that fires at a future time. The QU3U3D R3M1ND3RS section moves out of the SYST3M tab and lands at the bottom of the SCH3DUL3S tab, below QU3U3D SCH3DUL3S. Pure layout change — refreshReminders() and /api/reminders unchanged; the section just lives under a different parent now. Reminders don't contribute to the SCH3DUL3S pill count (kept as "active schedules" only — reminders are self-scheduled and high cardinality; adding them would make the pill noisy). docs/web-ui.md picks up a SCH3DUL3S tab section (the previous docs lumped the schedules subsection under SYST3M, but the tab has been separate since #459); reminders subsection follows schedules in the same tab.
This commit is contained in:
parent
0b92d597f8
commit
4fdc061c9d
2 changed files with 53 additions and 35 deletions
|
|
@ -122,15 +122,16 @@ the previous process's socket release resolves itself.
|
||||||
|
|
||||||
The dashboard (`/`) has a fixed chrome header at the top and a
|
The dashboard (`/`) has a fixed chrome header at the top and a
|
||||||
`<main>` that shows exactly one tab pane at a time. The URL hash
|
`<main>` that shows exactly one tab pane at a time. The URL hash
|
||||||
(`#swarm`, `#call`, `#system`) drives which pane is active; hash
|
(`#swarm`, `#call`, `#system`, `#schedules`) drives which pane is
|
||||||
changes don't reload the page. FL0W is a separate full-page
|
active; hash changes don't reload the page. FL0W is a separate
|
||||||
terminal at `/flow.html` — its tab-strip entry is a cross-page
|
full-page terminal at `/flow.html` — its tab-strip entry is a
|
||||||
link (`◆ FL0W ◆ →`), not a pane swap.
|
cross-page link (`◆ FL0W ◆ →`), not a pane swap.
|
||||||
|
|
||||||
**Chrome header** (fixed, overlays the active tab pane):
|
**Chrome header** (fixed, overlays the active tab pane):
|
||||||
- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ SYST3M ◆`, and
|
- **Tab strip**: `◆ SW4RM ◆`, `◆ Y3R C4LL ◆`, `◆ SYST3M ◆`,
|
||||||
`◆ FL0W ◆ →` (page link). Count pills on SW4RM (container count)
|
`◆ SCH3DUL3S ◆`, and `◆ FL0W ◆ →` (page link). Count pills on
|
||||||
and Y3R C4LL (pending approvals + questions); FL0W pill mirrors
|
SW4RM (container count), Y3R C4LL (pending approvals +
|
||||||
|
questions), and SCH3DUL3S (active schedules); FL0W pill mirrors
|
||||||
the operator inbox length (hidden when zero).
|
the operator inbox length (hidden when zero).
|
||||||
- **Notification controls**: `🔔 enable notifications` when
|
- **Notification controls**: `🔔 enable notifications` when
|
||||||
permission ungranted; `🔕 mute / 🔔 unmute` toggle once granted.
|
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`
|
`/api/state.rebuild_queue`; live updates via `rebuild_queue_changed`
|
||||||
snapshot event.
|
snapshot event.
|
||||||
|
|
||||||
**QU3U3D R3M1ND3RS** — reminders agents have scheduled for
|
**K3PT ST4T3** — destroyed-but-state-kept tombstones (size +
|
||||||
themselves (via the `remind` tool) but not yet delivered.
|
age + claude-creds badge). Two actions: `⊕ R3V1V3` (queues a
|
||||||
Each row shows the owner, due time, and message; a `CANC3L`
|
Spawn approval; existing state is reused), `PURG3` (wipes
|
||||||
button hard-deletes (`POST /cancel-reminder/{id}`) and a
|
state + applied dirs; `POST /purge-tombstone/{name}`).
|
||||||
`R3TRY` button re-arms one whose delivery failed
|
|
||||||
(`POST /retry-reminder/{id}`). Backed by `GET /api/reminders`.
|
|
||||||
|
|
||||||
**SCH3DUL3D PR0MPTS** — operator-managed scheduled prompts
|
### SCH3DUL3S tab
|
||||||
(#444 / #459). Lists every schedule with its description,
|
|
||||||
targets, body, recurrence interval, next-fire time, and
|
Anything that fires at a future time. Operator-set schedules
|
||||||
per-target last-result; a `CANC3L` button cancels the whole
|
go through the creation form at the top; agent self-paced
|
||||||
schedule (`POST /api/schedules/{id}/cancel`), and individual
|
reminders surface at the bottom as a sibling list (#460 —
|
||||||
target chips have their own cancel links. An inline creation
|
they share enough conceptual ground to live together).
|
||||||
form lets the operator queue a new schedule directly:
|
|
||||||
|
**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
|
targets (multi-select checkboxes drawn from live container
|
||||||
names + `operator` + `manager`), prompt body (textarea),
|
names + `operator` + `manager`), prompt body (textarea),
|
||||||
first-fire datetime-local (pre-filled to 5 minutes from now),
|
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
|
yet cancelled). Refreshed on tab activation and after each
|
||||||
submit/cancel. Backed by `GET /api/schedules`.
|
submit/cancel. Backed by `GET /api/schedules`.
|
||||||
|
|
||||||
**K3PT ST4T3** — destroyed-but-state-kept tombstones (size +
|
**QU3U3D R3M1ND3RS** — reminders agents have scheduled for
|
||||||
age + claude-creds badge). Two actions: `⊕ R3V1V3` (queues a
|
themselves (via the `remind` tool) but not yet delivered.
|
||||||
Spawn approval; existing state is reused), `PURG3` (wipes
|
Each row shows the owner, due time, and message; a `CANC3L`
|
||||||
state + applied dirs; `POST /purge-tombstone/{name}`).
|
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`)
|
### FL0W page (`/flow.html`)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -104,10 +104,12 @@
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- SYST3M: passive / rare-interaction state. Meta inputs (lock
|
<!-- SYST3M: passive / rare-interaction state. Meta inputs (lock
|
||||||
bumps), rebuild queue (watch only), queued reminders, kept
|
bumps), rebuild queue (watch only), kept state from previous
|
||||||
state from previous tombstoned agents. Headings stay; the
|
tombstoned agents. Queued reminders moved to the SCH3DUL3S
|
||||||
per-section content auto-compresses to a one-line summary
|
tab in #460 — they're conceptually "fire X at time Y" too,
|
||||||
when empty (separate JS toggle). -->
|
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). -->
|
||||||
<section class="tab-pane" id="tab-pane-system"
|
<section class="tab-pane" id="tab-pane-system"
|
||||||
role="tabpanel" aria-labelledby="tab-system">
|
role="tabpanel" aria-labelledby="tab-system">
|
||||||
<h2>◆ M3T4 1NPUTS ◆</h2>
|
<h2>◆ M3T4 1NPUTS ◆</h2>
|
||||||
|
|
@ -124,13 +126,6 @@
|
||||||
<p class="meta">loading…</p>
|
<p class="meta">loading…</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2>◆ QU3U3D R3M1ND3RS ◆</h2>
|
|
||||||
<div class="divider">══════════════════════════════════════════════════════════════</div>
|
|
||||||
<p class="meta">reminders agents have queued for themselves but not yet delivered. cancel to drop a stuck or unwanted entry.</p>
|
|
||||||
<div id="reminders-section">
|
|
||||||
<p class="meta">loading…</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<h2>◆ K3PT ST4T3 ◆</h2>
|
<h2>◆ K3PT ST4T3 ◆</h2>
|
||||||
<div class="divider">══════════════════════════════════════════════════════════════</div>
|
<div class="divider">══════════════════════════════════════════════════════════════</div>
|
||||||
<div id="tombstones-section">
|
<div id="tombstones-section">
|
||||||
|
|
@ -161,6 +156,19 @@
|
||||||
<div id="schedules-section">
|
<div id="schedules-section">
|
||||||
<p class="meta">loading…</p>
|
<p class="meta">loading…</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- QU3U3D R3M1ND3RS (#460): self-scheduled agent reminders.
|
||||||
|
Moved here from the SYST3M tab so the operator has one
|
||||||
|
place for everything that fires at a future time —
|
||||||
|
operator-set schedules above, agent-self reminders here.
|
||||||
|
Backed by GET /api/reminders; refresh handled by
|
||||||
|
refreshReminders() (called from refreshState). -->
|
||||||
|
<h2>◆ QU3U3D R3M1ND3RS ◆</h2>
|
||||||
|
<div class="divider">══════════════════════════════════════════════════════════════</div>
|
||||||
|
<p class="meta">reminders agents have queued for themselves but not yet delivered. cancel to drop a stuck or unwanted entry.</p>
|
||||||
|
<div id="reminders-section">
|
||||||
|
<p class="meta">loading…</p>
|
||||||
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- FL0W: lives on its own page now (`/flow.html`). The
|
<!-- FL0W: lives on its own page now (`/flow.html`). The
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue