docs(web-ui): describe new single-table schedules layout (#124#535)

This commit is contained in:
damocles 2026-05-28 15:25:32 +02:00
commit 2d9109d1bd

View file

@ -241,33 +241,52 @@ reminders surface at the bottom as a sibling list (#460 —
they share enough conceptual ground to live together). they share enough conceptual ground to live together).
**N3W SCH3DUL3 / QU3U3D SCH3DUL3S** — operator-managed **N3W SCH3DUL3 / QU3U3D SCH3DUL3S** — operator-managed
scheduled prompts (#444 / #459). Lists every schedule with scheduled prompts (#444 / #459). **Single-table layout**
its description, targets, body, recurrence interval, next-fire (#535): each schedule is one `<tr>`; columns are
time, and per-target last-result. Per-row controls: a `# | src | next | every | owner | body | …agents… | actions`.
`↯ fire now` button sends an out-of-band manual pulse to Agent columns are dynamic — `operator` + `manager` + every
every active target (#467 — recurring schedules keep their live container + any extra name that appears as a target on
cadence; one-shots are consumed after the manual fire), an some schedule but isn't a current container (same
`✎ edit` button opens an inline edit form (#474 — body / `buildTargetChips` membership rule the new/edit forms use,
description / interval / next-fire / targets all editable; so table and forms agree on what's addressable). Column
targets are a multi-select diff'd against the original active headers tilt -45° via CSS so each column reads as a narrow
set so unchecked-was-active = `targets_remove`, checked-not- ~28px strip; per-agent cells render as:
originally-active = `targets_add`; submit PATCHes
`/api/schedules/{id}`), and a - **active target**`<button>✓</button>` that cancels just
`CANC3L` button cancels the whole schedule that one target on click (replaces the per-row ✕ from the
(`POST /api/schedules/{id}/cancel`). Individual target chips pre-#535 targets sub-table)
have their own cancel links. An inline creation form lets - **cancelled target** → muted `✕` glyph (no button —
the operator queue a new schedule directly: re-adding goes through the edit form's targets multi-select)
targets (multi-select checkboxes drawn from live container - **not a target** → empty cell
names + `operator` + `manager`), prompt body (textarea),
first-fire datetime-local (pre-filled to 5 minutes from now), Per-schedule action column: a `↯ fire now` button sends an
an interval composer (#466 — preset chips for common out-of-band manual pulse to every active target (#467
durations + separate d/h/m/s number fields with a live recurring schedules keep their cadence; one-shots are
"↻ every …" preview; all-zero = one-shot), consumed after the manual fire), an `✎ edit` button expands
and an optional human-readable description. On submit the an inline edit form as a colspan'd row directly under the
form POSTs to `/api/schedules` as JSON; the tab pill shows schedule's row (#474 — body / description / interval /
the count of active schedules (at least one live target not next-fire / targets all editable; targets are a multi-select
yet cancelled). Refreshed on tab activation and after each diff'd against the original active set so unchecked-was-
submit/cancel. Backed by `GET /api/schedules`. active = `targets_remove`, checked-not-originally-active =
`targets_add`; submit PATCHes `/api/schedules/{id}`), and a
`✕` button cancels the whole schedule
(`POST /api/schedules/{id}/cancel`).
An inline creation form above the table 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), an interval composer
(#466 — preset chips for common durations + separate
d/h/m/s number fields with a live "↻ every …" preview;
all-zero = one-shot), and an optional human-readable
description. On submit the form POSTs to `/api/schedules` as
JSON; the tab pill shows 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`. No backend changes for the table layout
— it renders entirely from existing `schedulesState` +
`containersState`.
**QU3U3D R3M1ND3RS** — reminders agents have scheduled for **QU3U3D R3M1ND3RS** — reminders agents have scheduled for
themselves (via the `remind` tool) but not yet delivered. themselves (via the `remind` tool) but not yet delivered.