Scheduled prompts live at swarm level (swarm-controller's /api/schedules, `swarmctl schedule`, the swarm UI's /schedules page). The hive dashboard's SCH3DUL3S tab only listed the rows left in hive-c0re's `scheduled_prompts` table so operators could copy them over; the operator confirmed everything is migrated. Removed: - the SCH3DUL3S tab, its pane, schedules.js, its CSS (including the `.rqe-source*` rules, whose only emitter was schedules.js) and the hub tile's "schedules" entry - hive-c0re's GET /api/schedules and the `scheduled_prompts` store (with its v1 column migration and test) - hive-sh4re's `schedule` wire types, which only that route used - docs describing the tab, the route and the two tables The rebuild-queue cancel route that shared the module moves to dashboard/rebuild_queue.rs under an OpenAPI tag of its own. The two sqlite tables are not dropped: nothing opens them any more, and persistence.md says they can be dropped by hand. Closes #4916
25 lines
1.2 KiB
JavaScript
25 lines
1.2 KiB
JavaScript
// Shared dashboard state — the one piece of cross-domain state in the
|
|
// dashboard SPA: the live agent roster.
|
|
//
|
|
// The roster is read by nearly every tab (the container tree, the
|
|
// capabilities + tool-group matrices, the
|
|
// container-load poll, and the selection bar), so
|
|
// it lives here as a single source of truth that each domain module
|
|
// imports rather than threading through call signatures. Everything
|
|
// else in the dashboard is domain-local and lives with its own module.
|
|
//
|
|
// `containersState` is keyed by `ContainerView.name` so a lifecycle
|
|
// form's POST → 200 → matching SSE event can flip a single row without
|
|
// a full snapshot refetch. Mutated in place (`set` / `delete` / `clear`)
|
|
// by the container apply-handlers; consumers read it by reference, so
|
|
// the imported binding always reflects the latest roster.
|
|
|
|
export const containersState = new Map();
|
|
|
|
// Replace the whole roster from a fresh `/api/state` snapshot. Called by
|
|
// the entry's `refreshState` on cold load and after async-form submits;
|
|
// live single-row updates go through the container apply-handlers.
|
|
export function syncContainersFromSnapshot(s) {
|
|
containersState.clear();
|
|
for (const c of s.containers || []) containersState.set(c.name, c);
|
|
}
|