Files
npub1mn7jgtj4w2pd0g0zeuhxsa6jy6p0rewxz4kujt98my82ahfmp72sxjexk7andWill Pfleger 4d18b8630a feat(desktop): add Agent Usage UI backed by the NIP-AM local archive
Adds a rolling token/cost usage view for agents, sourced from the local
NIP-AM metrics archive. Covers the Agents overview and a focused
per-agent subview in the profile panel, with the per-agent breakdown
grouped by (harness, model) so the same model under two harnesses
renders as two distinct rows.

Backend:
- get_agent_usage_series Tauri command (archive/agent_usage.rs): reads
  the local SQLite archive over a sliding 7/30-day window, aggregates
  by (agent_pubkey, session_id, harness, model), and returns a
  serialized AgentUsageSeries response.
- archive/metric_store.rs: MetricIndexRow + insert_metric_index_row
  with turn/cumulative token + cost + cache-read fields; query layer
  produces AgentMetricRow slices.
- store_migrations.rs: M1 (harness column + index rebuild) and M2
  (cache-read columns: turn_cache_read_tokens,
  cumulative_cache_read_tokens). M2 runs before M1 so the rebuild
  always operates against the full schema. All migrations are
  idempotent via marker guard.
- archive/mod.rs: pipeline integration — AgentMetricRow ingestion,
  persistedAgentMetrics notifier, archiveSyncManager wiring.
- tauriArchive.ts: wire types + Tauri command bridge.
- archiveSyncManager.ts: persistedAgentMetrics notifier.

Agent-side first-turn accounting (buzz-acp):
- UsageTracker::seed_zero_baseline() seeds a zero baseline for
  sessions this process just spawned, so the first turn of a fresh
  session reports reliable deltas. Re-attached sessions are not seeded;
  their true prior cumulative is unknown. Seeding is idempotent via
  entry().or_insert(). acp.rs call sites are immediately after
  create_session_and_apply_model() on both channel and heartbeat paths.

UI:
- desktop/src/features/agent-usage/: AgentUsageDailyBars (recharts),
  AgentUsageRangeTabs (7/30-day preset + custom), AgentUsageFocusedView
  (per-agent breakdown by harness/model), AgentUsageSection (wires
  overview + focused view). hooks.ts: data fetch and memoised series.
  lib/agentUsage.ts: bucket math, formatter, caveat detection,
  DisplayTotal, sortModelsByKnownTotal.
- Profile panel: canViewUsage/onOpenUsage threaded; BarChart3 ingress
  row in the Info tab. AgentsView/AgentsScreen reordered.
- ProfilePanelContext: usage navigation state.
- e2eBridge.ts + tests/helpers/bridge.ts: get_agent_usage_series mock
  handler + fixture types.
- agent-usage.spec.ts: 19-test Playwright spec (loading, empty, bars,
  range switch, error/retry, focused view, caveats, cache-invalidation).
- agent-usage-screenshots.spec.ts: 3-test screenshot spec.
- playwright.config.ts: agent-usage specs added to suite.
- package.json: recharts dependency.

Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>
2026-07-31 20:19:31 -04:00
..
2026-07-27 14:18:24 -04:00