Watch
0
0
Fork
You've already forked hyperhive
0

swarm-ui: a schedules page, one card per scheduled prompt

/schedules lists the controller's scheduled prompts as cards: name as the
title, the agents it fires for, the message, its cadence and next fire.
Edit turns a card into its own form; pause, resume and remove act in place,
and + schedule opens an empty form. The form sends only what changed, so a
rename never moves the fire times, and warns when the start or the repeat
does. Filters reuse the shared card filter bar.

Adds a TextAreaField to the ui kit, and an upcoming mode on RelativeTime so
a next-fire time reads "in 5m". Needs the controller's /api/schedules
routes.
This commit is contained in:
iris 2026-10-04 17:03:33 +02:00 • committed by mara
commit 63ee6d12be
14 changed files with 931 additions and 3 deletions

View file

@ -13,6 +13,17 @@ const RTF = new Intl.RelativeTimeFormat("en", {
style: "narrow",
});
// The same coarsening for an instant still ahead ("in 5m"). A separate
// function rather than a negative `fmtAgo`: that one clamps to zero so a
// clock a little ahead of the server never reads as "-3s ago".
export function fmtUntil(secondsAhead: number): string {
const ahead = Math.max(0, Math.floor(secondsAhead));
if (ahead < 60) return RTF.format(ahead, "second");
if (ahead < 3600) return RTF.format(Math.floor(ahead / 60), "minute");
if (ahead < 86400) return RTF.format(Math.floor(ahead / 3600), "hour");
return RTF.format(Math.floor(ahead / 86400), "day");
}
export function fmtAgo(ageSeconds: number): string {
const age = Math.max(0, Math.floor(ageSeconds));
if (age < 60) return RTF.format(-age, "second");