35d8cb5de6
feat: tui.js — live ANSI terminal dashboard (B.A. objective)
...
Implements token-monitor#3 objective 3:
node tui.js starts a live terminal dashboard:
- Full layout: Anthropic Teams (severity-colored) + xAI section
- 60s auto-refresh with 1s countdown
- Flicker-free via cursor-home (not clear-screen)
- [r] forces immediate refresh
- [q] or Ctrl-C exits cleanly, restores terminal + cursor
- Severity coloring: green=ok, yellow=warning, red=critical/maxed
- xAI section hidden when XAI_MANAGEMENT_KEY not set (graceful degradation)
- Budget decision: recommended provider + avoid list prominently displayed
- Alerts section (up to 3, warning/critical only)
- No external npm dependencies — pure Node stdlib + project analyze.js
Data source: spawns analyze.js --budget-json internally (reuses cached probe
data if fresh, avoids double-probe on each TUI refresh)
Co-authored-by: Hannibal Smith <hannibal@a-team>
2026-04-08 08:29:40 +00:00
8daa396549
feat: --budget-json and --mission cost tracking (Face + Murdock objectives)
...
Implements token-monitor#3 objectives 1 and 2:
--budget-json: structured agent-consumable budget decision schema
- budget_decision with recommended_provider, avoid list, reason
- providers: all Teams with utilization, USD estimates, severity
- xai: per-key spend breakdown from management API (if XAI_MANAGEMENT_KEY set)
- alerts: warnings/critical for maxed providers + low xAI prepaid balance
- config from ~/.config/token-monitor/config.json (default .50/week/seat)
--mission <ref>: mission cost attribution via Forgejo issue time windows
- resolves start/end timestamps from Forgejo issue comments
- requires FORGEJO_TOKEN env var + ~/.config/token-monitor/mission-repos.json
- repo mapping: { 'bookmarko': 'trentuna/bookmarko', ... }
--mission-window <iso-start> <iso-end>: same without Forgejo dep
Both: utilization delta × weekly seat cost = estimated Anthropic spend
Both: exact xAI spend via management API for time window (if key set)
Existing --json flag unchanged (backward compat preserved)
Co-authored-by: Hannibal Smith <hannibal@a-team>
2026-04-08 08:28:18 +00:00
ab9c60b67c
Handle policy_rejected status (Anthropic April 4 billing change)
...
- anthropic-teams.js: detect HTTP 400 extra-usage policy blocks, return
status='policy_rejected' with quota headers still readable
- report.js: display policy_rejected as CRITICAL with 'POLICY BLOCKED' label
- getSeverity: treat policy_rejected as critical
Currently the direct API (used by monitor) returns 200; pi's OAuth path
returns 400. This fix future-proofs against the block extending to direct
API calls, and correctly classifies the status if it does.
Refs: trentuna/commons#17 , trentuna/token-monitor#4
2026-04-08 05:38:46 +00:00