Commit Graph

54 Commits

Author SHA1 Message Date
Jarrod Watts
63f5ae41b0 chore: Remove CI workflow file 2026-01-03 07:50:39 +11:00
Jarrod Watts
2142dd0229 test: Add AgentList edge case tests
- Test for filename-only tool targets
- Test for long tool target truncation
- Test for empty tool targets

Coverage: 93.92% (215 tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:50:33 +11:00
Jarrod Watts
61385f6b7b chore: Remove CI workflow (requires workflow scope) 2026-01-03 07:49:36 +11:00
Jarrod Watts
1e8becf0d3 test: Add transcript-reader invalidate test
Coverage now at 93.92% (212 tests).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:49:21 +11:00
Jarrod Watts
c00e36299b test: Add SessionStats hours format test
Cover the previously uncovered formatDuration branch for durations >= 1 hour (lines 17-19).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:48:19 +11:00
Jarrod Watts
0888b169f9 fix: Complete SettingsData mock in StatusBar tests
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:44:56 +11:00
Jarrod Watts
8a75989229 docs: Update CHANGELOG and bump version to 2.0.3
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:44:16 +11:00
Jarrod Watts
5ccce81acc test: Add StatusBar and ToolStream edge case tests
- Add StatusBar.test.tsx with tests for truncatePath helper
- Add ToolStream edge case tests for path truncation
- Coverage improved to 93.64% (210 tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:43:42 +11:00
Jarrod Watts
44c0fe512c test: Add tests for addMessageTokens and getContextState
- Add context-tracker tests for uncovered methods
- Simplify logger tests (DEBUG branch is environmental)
- Coverage improved to 92.83%

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:42:13 +11:00
Jarrod Watts
5de5dc8f20 docs: Improve TROUBLESHOOTING debug mode section
Add CLAUDE_HUD_DEBUG=1 as the recommended debug method with examples
and description of what the debug output includes.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:37:57 +11:00
Jarrod Watts
024da6e3ec docs: Update CHANGELOG and bump version to 2.0.2
- Document test coverage improvements (92%+)
- Document React.memo additions to remaining components
- Document GitStatus removal

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:36:59 +11:00
Jarrod Watts
3dad05ad5d test: Improve test coverage to 92%
- Add ErrorBoundary tests for error rendering
- Add usage-reader tests for invalidate() and edge cases
- Add event-reader tests for getLastEventTime() and switchFifo()

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:35:27 +11:00
Jarrod Watts
439f34aaba chore: Add missing dev dependencies
- @eslint/js for eslint config
- @vitest/coverage-v8 for test coverage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:30:36 +11:00
Jarrod Watts
ff3ae24320 docs: Update README with debug mode and remove Git Status
- Add CLAUDE_HUD_DEBUG=1 documentation
- Add lint & typecheck commands to development section
- Remove Git Status section (component was deleted)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:29:40 +11:00
Jarrod Watts
2c1bddbc1a chore: Remove unused GitStatus component
Component was not imported anywhere in the codebase.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:28:42 +11:00
Jarrod Watts
e6c3f64aad perf: Add React.memo to remaining components
- TodoList, Sparkline, AgentList (+ AgentItem), StatusBar, ContextInfo
- Move truncatePath function outside StatusBar component body

All components now use memo to prevent unnecessary re-renders.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:28:23 +11:00
Jarrod Watts
541a543811 docs: Update changelog with v2.0.1 improvements
- Debug logging with CLAUDE_HUD_DEBUG=1
- Test coverage 82% → 90%+
- React.memo performance improvements
- Removed unused code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:26:20 +11:00
Jarrod Watts
b6173ff5b9 ci: Temporarily remove workflow (needs token scope)
The GitHub Actions workflow requires the 'workflow' OAuth scope
to push. Saving the file locally for later addition.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:25:49 +11:00
Jarrod Watts
4a87490c6c chore: Remove unused code and exports
- Delete unused components: Edits.tsx, RateLimitMeter.tsx
- Delete unused hooks/index.ts barrel file
- Remove unused AppState interface from types.ts
- Make readStats() internal-only (remove export)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:25:24 +11:00
Jarrod Watts
0cf7af2af3 perf: Add React.memo to prevent unnecessary re-renders
- Wrap ContextMeter, ToolStream, CostDisplay with React.memo
- Move helper functions outside component bodies
- Move STATUS_COLORS constant outside ContextMeter

These changes reduce re-renders when parent state changes
but props to child components remain the same.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:23:59 +11:00
Jarrod Watts
4df09e6582 test: Increase test coverage from 82% to 90%+
- Add logger.test.ts with method verification tests
- Add ContextInfo.test.tsx with 8 UI tests
- Add useElapsedTime.test.ts with formatDuration tests
- Expand stats-reader.test.ts with StatsReader class tests
- Export formatDuration from useElapsedTime for testability

Coverage: 82.15% → 90.29% (31 new tests)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:22:12 +11:00
Jarrod Watts
1d725a7735 feat: Add debug logging to replace silent catches
- Create logger utility with debug/warn/error levels
- Enabled via CLAUDE_HUD_DEBUG=1 environment variable
- Add logging to all catch blocks across 10 files:
  - event-reader.ts, unified-context-tracker.ts
  - settings-reader.ts, context-detector.ts
  - transcript-reader.ts, stats-reader.ts
  - usage-reader.ts, GitStatus.tsx, index.tsx

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:19:06 +11:00
Jarrod Watts
efbb5a5443 docs: Update changelog for v2.0.1
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:15:18 +11:00
Jarrod Watts
f1d97988ca fix: Track tool calls for running agents
- Agent tools array now populates correctly when subagents run
- Tools are tracked per-agent and limited to last 5
- Excludes Task tool itself from tracking

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:14:54 +11:00
Jarrod Watts
5d01f9ce77 ci: Add GitHub Actions CI workflow
- Lint, typecheck, and test on push/PR to main
- Validate plugin structure (plugin.json, hooks.json, scripts)
- Build verification

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-03 07:14:22 +11:00
Jarrod Watts
e1b8d313f0 docs: Update CHANGELOG and bump version to 2.0.0
Phase 7 - Documentation:
- Update CHANGELOG with all v2.0.0 changes
- Document unified context tracking, cost display, hooks architecture
- List all fixes: flickering, session handling, test reliability
- Reference ADRs and research documents
- Bump version to 2.0.0

All phases complete:
- Phase 1: Research
- Phase 2: Architecture decisions
- Phase 3: Foundation (ESLint, Prettier, hooks)
- Phase 4: Context system rewrite
- Phase 5: Architecture refactor
- Phase 6: Polish & features
- Phase 7: Documentation

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:25:07 +11:00
Jarrod Watts
b398e85cab feat: Add cost tracking display to HUD
Phase 6 - Polish & Features:
- Add CostTracker integration to useHudState hook
- Create CostDisplay component showing model, tokens, and estimated cost
- Track input/output tokens from tool calls and user prompts
- Detect model from transcript for accurate pricing
- Format costs and token counts for readability
- Add 6 new tests for CostDisplay component

All 152 tests passing, lint clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:24:08 +11:00
Jarrod Watts
96a249f442 refactor: Extract state management into custom hooks
Phase 5 - Architecture Refactor:
- Create useHudState hook for all event processing and state management
- Create useElapsedTime hook for session timer
- Reduce app.tsx from 329 lines to 136 lines (59% reduction)
- App component now focused purely on rendering
- Follows ADR 001: Custom hooks + useReducer pattern
- All state logic now testable independently

All 146 tests passing, lint clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:22:04 +11:00
Jarrod Watts
b2709fec9e feat: Unified context tracking to fix flickering
Phase 4 - Context System Rewrite:
- Create UnifiedContextTracker that combines transcript reading and estimation
- Eliminates dual-source flickering by making transcript the single source of truth
- Only reads transcript on Stop events (when Claude finishes responding)
- Falls back to estimation when transcript isn't available
- Removes 5-second polling interval that caused context jumps
- Maintains burn rate calculation from token history
- Tracks compaction events from PreCompact hook
- Add comprehensive tests for unified tracker (13 new tests)

All 146 tests passing, lint clean.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:20:11 +11:00
Jarrod Watts
efabc82b5b feat: Add ESLint, Prettier, and pre-commit hooks
Phase 3 Foundation:
- Add ESLint with TypeScript, React, React Hooks, and Prettier config
- Add Prettier with project-standard settings
- Set up Husky pre-commit hooks with lint-staged
- Fix all ESLint errors and warnings in codebase
- Format all files with Prettier
- Fix type errors in usage-reader.test.ts

All 133 tests passing, lint clean, builds successfully.

Note: GitHub Actions CI workflow saved locally but requires
manual push with workflow scope or direct upload to GitHub.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:17:31 +11:00
Jarrod Watts
2e55e5802d fix: Resolve smoke test race condition in FIFO cleanup
The test was deleting the temp directory immediately after unmount,
but the EventReader had pending reconnection timers that would fire
and try to access the deleted FIFO.

Fix:
- Move cleanup to afterEach hook
- Add sleep delays to allow timers to clear
- Wrap cleanup in try/catch to ignore errors

All 133 tests now pass with 0 errors.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:12:05 +11:00
Jarrod Watts
6bb9c675f2 docs: Add changelog for v2 development
Tracks all changes being made during the architecture overhaul.
Users can read this to understand what's changing and why.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:10:43 +11:00
Jarrod Watts
e39933fac2 docs: Add architecture decision records for v2
ADR 001: State Management - Custom hooks + useReducer
- Extract state logic from app.tsx into domain-specific hooks
- useReducer for predictable state transitions
- Each hook independently testable

ADR 002: Data Flow - Event-driven with minimal polling
- Primary: Hook events via FIFO (real-time)
- Secondary: Single consolidated poll (git/mcp only)
- Eliminate redundant polling sources that cause flickering

ADR 003: Shell vs TypeScript - Minimal shell, logic in TS
- Hooks must be shell scripts (Claude Code requirement)
- Keep shell scripts minimal (extract data, write FIFO)
- Complex logic moves to testable TypeScript

ADR 004: Session Handling - Track session ID, graceful reset
- Session ID in all events for change detection
- Reset state on session change (/new, /exit, /resume)
- Exponential backoff reconnection strategy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:10:26 +11:00
Jarrod Watts
07e6584e5f docs: Add research findings for claude-hud v2 architecture
Research covers:
- Claude Code plugin best practices from Anthropic
- TUI design principles from lazygit, btop, and awesome-tuis
- Ink/React terminal UI performance patterns
- Current architecture problems analysis
- Architecture recommendations

Key findings:
- Event-driven over polling for real-time updates
- Use <Static> component for stable UI sections
- Custom hooks + useReducer for state management
- Keep bash hooks minimal, move logic to TypeScript

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 23:08:30 +11:00
Jarrod Watts
a85cdc5d40 wip kinda broken 2026-01-02 22:08:34 +11:00
Jarrod Watts
48ba04953b feat: Security hardening and expanded test coverage
Scripts:
- Add set -uo pipefail to all shell scripts
- Add jq existence check before processing
- Add JSON validation before parsing
- Add session_id regex validation (alphanumeric, dash, underscore)

hooks.json:
- Remove empty matcher fields (follows spec)

Tests:
- Add ToolStream component tests (14 tests)
- Add TodoList component tests (10 tests)
- Add AgentList component tests (13 tests)
- Add SessionStats component tests (8 tests)
- Add ModifiedFiles component tests (10 tests)
- Add McpStatus component tests (14 tests)
- Add stats-reader formatTokens tests (5 tests)

Docs:
- Update README paths for marketplace installs
- Update CLAUDE.md with current architecture

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:09:39 +11:00
Jarrod Watts
44e5afdd02 feat: Developer Intelligence Dashboard (v0.1.0)
Surface real data from Claude Code internals instead of estimates:

- Add settings-reader.ts: Parse ~/.claude/settings.json for model, plugins, MCP
- Add stats-reader.ts: Parse ~/.claude/stats-cache.json for real token counts
- Add context-detector.ts: Detect global and project CLAUDE.md files
- Add StatusBar component: Show model, idle state, plugin/MCP counts, cwd
- Add ContextInfo component: Display loaded context files
- Enhance ContextMeter: Show real token data (today's usage, cache stats)
- Enhance McpStatus: Renamed to Connections, shows MCP servers AND plugins

Version corrected from 2.0.0 to 0.1.0 (proper semver for early development)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 17:00:21 +11:00
Jarrod Watts
51c07bef2f chore: Release v2.0.0 with changelog
Phase 7 - Final release:
- Bump version to 2.0.0 in package.json and plugin.json
- Add comprehensive CHANGELOG.md documenting all v2 features
- 90 tests passing
- Plugin validation passing
- All documentation updated

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:22:52 +11:00
Jarrod Watts
ae490fae2f feat: Add git status panel with branch and change tracking
Phase 6 of v2 upgrade:
- Add GitStatus component showing current branch
- Display ahead/behind commit counts
- Show staged, modified, and untracked file counts
- Auto-refresh git status every 30 seconds
- Uses cwd from hook events for accurate git info
- Update README to document git status feature

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:22:03 +11:00
Jarrod Watts
c8d235ead9 docs: Comprehensive CONTRIBUTING guide with architecture docs
Phase 5 of v2 upgrade:
- Add detailed architecture overview with data flow diagram
- Document key components (EventReader, ContextTracker, CostTracker)
- Add guide for adding new panels
- Add guide for adding new hooks
- Include PR checklist and code style guidelines
- List contribution areas (features, improvements, testing, docs)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:20:57 +11:00
Jarrod Watts
0d96ec71f6 test: Add comprehensive tests for event parsing and Sparkline
Phase 4 of v2 upgrade:
- Add event-parser.test.ts with edge cases for all event types
- Add Sparkline.test.tsx for component testing
- Add ink-testing-library for component tests
- Test malformed JSON, unicode, long paths, special characters
- 65 tests total, all passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:20:05 +11:00
Jarrod Watts
b4a2e8d53b docs: Add troubleshooting guide and installation verification
Phase 3 of v2 upgrade:
- Add comprehensive TROUBLESHOOTING.md
- Add verify-install.sh script for checking installation
- Update README with new features and troubleshooting section
- Document all 8 hook events
- Add verification instructions

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 15:18:54 +11:00
Jarrod Watts
d370b16100 feat: UI enhancements with sparkline, cost tracking, and tests
Phase 2 of v2 upgrade:
- Token sparkline visualization showing usage history
- Cost estimation panel with input/output breakdown
- Session status bar with idle indicator
- Last user prompt preview
- Add comprehensive tests for CostTracker

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 14:11:44 +11:00
Jarrod Watts
bb77dd7cc3 feat: Enhanced data capture with new hooks and session tracking
Phase 1 of v2 upgrade:
- Add PreToolUse hook for true "running" state before tool execution
- Add UserPromptSubmit hook to track user prompts and idle state
- Add Stop hook for idle detection when Claude finishes responding
- Add PreCompact hook to track context compaction events
- Enrich capture-event.sh with permission_mode, transcript_path, cwd
- Add CostTracker for session cost estimation
- Add SessionInfo type for tracking session state
- Show idle indicator (💤/) and permission mode in header
- Show cost estimate when significant
- Show compaction count warning
- Show last user prompt preview

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 14:10:21 +11:00
Jarrod Watts
617c90df3a chore: Bump version to 1.0.0
- Update tui/package.json to 1.0.0
- Update plugin.json to 1.0.0
- All 18 tests passing
- TypeScript strict mode verified
- No console.log statements

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:38:52 +11:00
Jarrod Watts
f082f5fcff docs: Comprehensive documentation update
- Rewrite README with clear feature descriptions
- Add prominent installation command
- Document all features: context health, tool stream, agents, stats
- Add supported terminals table with checkmarks
- Add keyboard shortcuts section
- Create CONTRIBUTING.md with project structure
- Update plugin.json with better metadata and author info

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:36:53 +11:00
Jarrod Watts
c51e054066 feat: Add vitest testing infrastructure with context tracker tests
- Add vitest and @testing-library/react
- Create vitest.config.ts
- Add test scripts to package.json
- Write comprehensive tests for ContextTracker:
  - Token estimation
  - Event processing
  - Health status calculation
  - Reset functionality

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:35:37 +11:00
Jarrod Watts
340fe5d2ef feat: Improve cross-terminal support with better detection
- Add node fallback when bun is unavailable
- Better command availability checking
- Support macOS Terminal.app (Apple_Terminal)
- Add xterm support for Linux desktops
- Adjust tmux split width to 50 for better fit
- Reduce WezTerm/Windows Terminal split to 25%
- Improve error handling with && return 0 pattern
- Add LOG_FILE variable for cleaner code

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:34:07 +11:00
Jarrod Watts
7a7c497efc feat: Add robustness with error boundaries and connection status
- Add ErrorBoundary component to gracefully handle component crashes
- Improve EventReader with connection status tracking
- Add exponential backoff for reconnection attempts
- Show connection status indicator in HUD header (●/◐/○/✗)
- Check FIFO existence before connecting
- Wrap all HUD sections in error boundaries
- Widen HUD to 48 chars for better content fit

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:33:20 +11:00
Jarrod Watts
4ab459610b feat: Add session stats with tool counts, file changes, and duration
- New SessionStats component showing:
  - Live session duration timer
  - Tool usage counts (top 4 tools)
  - File change statistics (+additions/-deletions)
  - Completed agent count
- Reorder HUD sections for better information hierarchy

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-02 13:31:37 +11:00