- Sessions page tabs: Sessions · Events · Agents. QueryExplorer.tsx became
AgentsTable.tsx (agents only — sessions and events already had tabs);
/query redirects to /sessions?view=agents and leaves the sidebar.
GET /api/query is unchanged and still answers all three entities.
- Windows picker opens in front: -EncodedCommand script spends the hidden
first ShowWindow that windowsHide gives the process, then brings the TopMost
owner forward via AttachThreadInput (v2.5.3's owner was itself hidden).
- Session page Resume/Fork/Open pane: owningLane and sessionWorktreeName
match Windows folders (either separator), with a test.
Analytics parity phases 2–7 (docs/plans/analytics-parity/), built on
138e706 and ported onto v2.3.1:
- Cost by AI tool (?tool= on cost/analytics/stats/workflows, by_tool,
Codex fast/priority and flex tiers, agenthub_cost_usd_total{tool,model})
- Date ranges (from/to) on cost/analytics/workflows; Analytics range select
with Today / This week (Monday) / This month (1st) / 7d / 30d / 90d / All /
Custom; workflow filters carried into workflow-stats.js (read worker)
- Budgets and cost alerts as alert rule types (alert_rules rebuilt without
its rule_type CHECK), GET /api/budgets/status, rule preview, spend pace,
status-bar budget chip; rules stay editable in place
- Query Explorer (/query, allowlisted sort, CSV/JSON export) and scheduled
reports (report_definitions/report_runs, Settings → Reports)
- Session Replay tab and immutable snapshots (session_snapshots, /snapshot/:token)
- Remote Codex sync, push ingest with a hashed token, privacy redaction and
ignored folders (Settings → Data), Cursor sessions (no cost)
- Read-only MCP server, statusline, Grafana/Prometheus files
Also: resizable sidebar, pet run/wave animations, the workspace home keeps a
half-typed prompt, and the pre-commit hook runs only the related tests for a
small commit.
- Workspace, SettingsHub, SessionDetail and the Workflow sub-tab are lazy
(main bundle 2,166 kB -> ~920 kB), wrapped in RouteErrorBoundary: a stale
chunk after a self-update reloads once (vite:preloadError too), any other
error shows a Reload panel instead of a blank page.
- Live refresh: lib/throttle.ts + hooks/useLiveRefresh.ts replace trailing
debounces that froze under a steady event stream; refresh skips hidden
tabs and refetches after a WebSocket reconnect. Monitor loads only while
shown, with one batched GET /api/agents?session_ids= instead of N+1; a
failing endpoint is an inline error, not a blank Dashboard.
- NeedsYouStrip on Monitor and above Analytics. Tabs, filters, page, sort
and search live in the URL (Dashboard, Sessions, Activity, SessionDetail).
- Sessions: tool / workspace / date-range filters, CSV/JSON export
(formula-neutralised), focusable row links, Open in workspace (the dead
/run links are gone), stale responses dropped, error + Retry.
- Fixes: "NaNs" durations, 30/7-day charts skipping idle days, weekday
labels west of UTC (now averages), cache hit rate denominator, billable
tokens vs cache reads, exact tool-call counts, "To" date = end of day,
invalid ?from= no longer throws, recent list no longer shrinks to 15,
stable message keys, transcript switch races.
- Light-theme-unreadable bg-black code panels and dark-only DAG fills use
tokens; status configs and chart colours use theme tokens; Health tab
and other literals translated.
- Server (additive): GET /api/agents?session_ids=, GET /api/sessions
awaiting=1&from=&to=, stats tool_call_count/distinct_tool_count, event
rows carry session/agent labels.
Internal SmartGift build of a Claude Code monitoring dashboard.
Lanes: a durable unit of parallel agent work, one per working directory,
tracked across session restarts. Managed lanes are git worktrees the
dashboard provisions and can reset or remove behind a three-check destroy
guard and a counted preflight; adopted lanes are directories you already
own and are never destroyable.
Pipelines: a lane moves through pipeline stages. A stage the agent declares
with evidence renders green; a stage inferred from the tool-event stream
renders dashed amber and never counts as done. Detection is forward-only
within a 30-minute window, and never writes the declared stage.
Workspace: one page at /run with a lane grid, the selected lane's pipeline,
and a full Claude console behind a disclosure.