agent: wire Header/StatusChips to real /api/state polling
- useAgentState hook: polls GET /api/state (4s interval for now — see its file comment for why this isn't yet the SSE-triggered + login- only-timer cadence the old page used; that lands with the live stream + term-input commit, which is when clobbering the operator's in-progress input actually becomes a risk). - format.ts: fmtTokens/fmtAge, same output shapes as app.js's. - modelEffort.ts: POST /api/model + /api/effort (same-origin, plain fetch). - dashboardBase.ts + pauseAction.ts: pause/resume POST to the *dashboard's* origin via a real <form> submit, kept unchanged from app.js — a cross-origin fetch needs CORS headers hive-c0re doesn't send, a form submit sidesteps that same as it already did. - Root.tsx: wires it all together, including app.js's "any non-online status forces the turn-state badge to offline" behavior. Screenshot-verified against a mock GET /api/state (real fetch, not hardcoded props) + the real agent.css/theme.css/colors.css. Builds + tsc --noEmit clean.
This commit is contained in:
parent
93b34ebb9b
commit
908f479372
6 changed files with 239 additions and 26 deletions
17
frontend/packages/agent/src/lib/format.ts
Normal file
17
frontend/packages/agent/src/lib/format.ts
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
// Formatting helpers ported from app.js's `fmtTokens`/`fmtAge` (same
|
||||
// output shapes — this page's operators are used to reading them).
|
||||
|
||||
export function fmtTokens(n: number): string {
|
||||
if (n >= 1_000_000) return (n / 1_000_000).toFixed(1) + 'M';
|
||||
if (n >= 1_000) return Math.round(n / 1000) + 'k';
|
||||
return String(n);
|
||||
}
|
||||
|
||||
export function fmtAge(ms: number): string {
|
||||
const s = Math.floor(ms / 1000);
|
||||
if (s < 60) return s + 's';
|
||||
const m = Math.floor(s / 60);
|
||||
if (m < 60) return m + 'm ' + (s % 60) + 's';
|
||||
const h = Math.floor(m / 60);
|
||||
return h + 'h ' + (m % 60) + 'm';
|
||||
}
|
||||
Loading…
Reference in a new issue