Commit graph

36 commits

Author SHA1 Message Date
jedarden
46c51a79c3 feat: add budget dashboard with per-bead cost tracking and EMA burn rate
Adds Budget panel (B key) to TUI with per-bead/per-worker cost tracking,
EMA-smoothed burn rate, time-series storage, and CostDashboard web component.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-21 01:14:14 -04:00
jedarden
27d9278cf9 feat(bd-5ny): Add fleet analytics types and enhanced CSS styles
Add types for fleet analytics dashboard:
- DurationBucket for bead completion histograms
- ModelPerformanceMetrics with duration distribution
- StrandMetrics for strand utilization tracking
- CompletionQualityIndicator for shallow completions
- FleetAnalytics aggregating all metrics
- FleetAnalyticsOptions for query configuration

Add CSS styles for analytics dashboard:
- Stats bar with quick metrics
- Tab navigation for Models/Strands/Quality/Fleet views
- Mini bar charts for duration distributions
- Sparkline charts for worker time series
- Quality cards for shallow completion tracking
- Responsive design for mobile/tablet views

Co-Authored-By: Claude Code (glm-5) <noreply@anthropic.com>
2026-03-20 07:26:25 -04:00
jedarden
3f5ddb96e0 feat(bd-5ny): Add fleet analytics dashboard with model/strand/quality metrics
Parse NEEDLE worker log JSONL files to compute fleet-wide analytics:
- Model performance: beads completed, avg/median duration, distribution histogram
- Strand utilization: invocations, success rates, time spent per strand
- Completion quality: shallow detection (<10s), claim races, flagged beads
- Fleet overview: hourly time series with sparklines, workspace coverage, relaunch count

Adds /api/analytics endpoint and AnalyticsDashboard React component with
tabbed UI (Models/Strands/Quality/Fleet). No persistent DB needed — reads
logs fresh on each request.

Co-Authored-By: Claude Code (glm-5-turbo) <noreply@anthropic.com>
2026-03-20 07:19:53 -04:00
jedarden
9666668482 test(bd-29t): Add E2E test for web ActivityStream component
Verify chronological ordering, timestamp formatting, level CSS classes,
auto-scroll behavior, timeline highlighting, filtering, bead pinning,
and realistic multi-worker event stream rendering.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-19 22:34:40 -04:00
default
13e3090ca1 fix(bd-jec): Fix TypeScript build error and resolve worker starvation alert
- Fixed corrupted auth middleware code in server.ts that was causing build failure
- Verified TUI color rendering works correctly (bd-2b3)
- Resolved bd-jec: Found 8 beads in ready queue, worker starvation was due to assignee filtering

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-11 05:49:33 +00:00
default
a2e3161134 feat(bd-n8y): Add authentication/authorization to FABRIC event ingestion endpoint
- Added authToken option to WebServerOptions interface
- Created createAuthMiddleware function for Bearer token auth
- Applied auth middleware to POST /api/events and /api/events/batch
- Updated CLI to read FABRIC_AUTH_TOKEN env var
- Added comprehensive tests for authentication scenarios

- Updated POST /api/events test cases to use auth token
- All tests passing successfully
2026-03-11 05:13:12 +00:00
default
446c3a655c test(bd-2bt): add comprehensive tests for POST /api/events endpoint
Tests cover:
- Valid NEEDLE format event ingestion
- Event storage in store
- WebSocket broadcast on event receipt
- Error handling (missing ts/event fields, invalid JSON)
- Batch endpoint for multiple events
- Batch error reporting for partial failures

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-11 04:57:09 +00:00
default
b21df31ea4 feat(bd-3ip): Add POST /api/events/batch endpoint for batched NEEDLE telemetry
- Add MAX_BATCH_SIZE constant (100 events limit)
- Implement POST /api/events/batch endpoint that accepts JSON array of events
- Validate array format, empty batches, and batch size limits
- Validate each event has required fields (ts, event)
- Store all valid events via store.add()
- Broadcast all ingested events via WebSocket
- Return 201 with ingested count, total count, and errors array
- Handle partial success (valid events processed, errors reported)

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-11 04:43:19 +00:00
default
ee90eb05a3 feat(bd-2bt): add POST /api/events endpoint to ingest NEEDLE telemetry
Add HTTP POST endpoint to receive NEEDLE telemetry events from the
fabric.sh forwarder. This bridges NEEDLE and FABRIC, enabling real-time
event ingestion via HTTP.

Changes:
- Add parseEventObject() to parser.ts for parsing JSON objects directly
- Add POST /api/events endpoint with JSON body parser (64KB limit)
- Validate required fields (ts, event) before processing
- Store events and broadcast to WebSocket clients in real-time
- Return 201 Created on success, 400 for invalid payloads

Acceptance criteria met:
- NEEDLE events sent via curl POST arrive in FABRIC's event store
- Events are broadcast to WebSocket clients in real-time
- Invalid payloads return appropriate error codes (400)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 15:06:55 +00:00
jeda
629d7430dc feat(bd-2u6): File Context Panel (Split View) implementation
Verified and closed bd-2u6 - FileContextPanel is fully implemented for both TUI and Web:

Features:
- Split view: Activity (left) | File Context (right)
- Auto-update when file event selected
- Syntax highlighting based on file extension (TS, JS, Python, Rust, Go, etc.)
- Line numbers with highlight on relevant lines
- Sticky panel - stays visible while scrolling activity
- File history: see all operations on this file
- Quick toggle between recently touched files ([/]/[] keys)
- 'Open in Editor' button (launches configured editor)

TUI Layout:
- Ctrl+F to toggle file context panel
- { and } to resize split view
- Tab to switch focus between panels

Web Layout:
- Collapsible side panel with toggle button
- Resizable divider
- Pop out to separate window

Editor Integration:
- Uses $EDITOR env var
- Supports VS Code, vim, nano, etc.
- Opens at specific line number

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-07 12:24:28 +00:00
jeda
93f8e5a407 feat(bd-2r0): Focus Mode Presets
Implements save/load/delete functionality for focus mode pin configurations:

**TUI Changes:**
- [ key to save current focus configuration as named preset
- ] key to cycle through saved presets
- Preset commands in CommandPalette (Ctrl+K):
  - preset:save - Save current focus
  - preset:list - List all presets
  - preset:load:<name> - Load a specific preset
  - preset:delete:<name> - Delete a preset
- Presets stored in ~/.fabric/focus-presets.json
- Updated help text with new keybindings

**Web Changes:**
- Preset dropdown in header with save/load/delete UI
- Modal dialog for saving new presets
- Presets stored in localStorage
- Styled with CSS matching existing UI

**Core:**
- FocusPresetManager utility class for preset CRUD operations
- Storage abstraction (Memory, LocalStorage, File-based)
- Full test coverage for preset management

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-07 05:31:25 +00:00
jeda
7ddbd7820b feat(bd-1dq): Export Session Replay
Add export/import functionality for session replay:

**Export Features:**
- Export as shareable link (base64 encoded events in URL parameter)
- Export as .fabric-replay file (JSON format)
- Share button in replay controls with dropdown menu

**Import Features:**
- Import from .fabric-replay file via file picker
- Import from URL parameter (?replay=base64EncodedEvents)
- Automatic detection and loading of replay data from URL

**Implementation:**
- src/utils/replayExport.ts: Core export/import utilities for Node.js
- src/web/frontend/src/utils/replayExport.ts: Browser-specific utilities
- Updated web SessionReplay.tsx with export dropdown and status messages
- Updated TUI SessionReplay.ts with exportToFile/importFromFile methods
- Added session replay panel to App.tsx with URL parameter support
- Added CSS styles for export dropdown, status messages, and replay panel

**Export Format:**
```json
{
  "version": "1.0",
  "exportedAt": 1709337600,
  "eventCount": 150,
  "events": [...],
  "metadata": {
    "sessionStart": 1709337000,
    "sessionEnd": 1709337600,
    "workerCount": 3
  }
}
```

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-07 05:11:13 +00:00
jeda
296d547c12 feat(bd-40a): Web Timeline Visualization
Add timeline visualization component to the web dashboard:
- Create TimelineView.tsx component showing worker activity over time
- Support time range selection (5m, 10m, 30m, 1h)
- Click on timeline bar to jump to that time in activity stream
- Color-code by worker status (active/idle/error)
- Add timeline toggle button in header
- Integrate with Focus Mode for filtering workers

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-07 04:49:37 +00:00
jeda
07ee238d80 feat(bd-257): Web Auto-Reconnect with Exponential Backoff
Implement robust WebSocket reconnection logic for the web frontend:

- Detect connection loss immediately via onclose handler
- Show 'Reconnecting...' status indicator with yellow dot
- Implement exponential backoff (1s, 2s, 4s, 8s, 16s, max 30s)
- Re-sync state automatically after successful reconnection
- Show reconnection attempt count in brackets
- Manual reconnect button appears after max retries (10)
- Green dot with glow for connected state
- Red dot for disconnected state
- Animated pulse effect on reconnecting indicator

UI States:
- Connected: Green dot with glow
- Reconnecting: Yellow pulsing dot with countdown and attempt count
- Disconnected: Red dot with manual retry button

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-07 04:34:23 +00:00
jeda
73cf7bae51 feat(bd-2ot): Add theme support (Dark/Light) for TUI and Web
## TUI Theme Support
- Create ThemeManager class with dark/light theme palettes
- Update colors.ts to use theme system via proxy pattern
- Add Ctrl+T keybinding for theme toggle
- Add theme commands to CommandPalette (theme:toggle, theme:dark, theme:light)
- Persist theme preference to ~/.fabric/theme.json
- Update footer to show current theme

## Web Dashboard Theme Support
- Create ThemeContext with React context API
- Add light theme CSS variables (data-theme="light")
- Add ThemeToggle button to header
- Persist theme preference to localStorage
- Support system color scheme preference detection

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-07 04:28:29 +00:00
jeda
41052cb0dd feat(bd-1j9): E2E test: WorkerDetail shows selected worker info
Added comprehensive E2E test suite for WorkerDetail component with 39 test cases covering:
- Worker status display (active, idle, error)
- Event count and current tool display
- Last seen timestamp formatting
- Recent events list rendering
- Collision alert display
- Current activity section
- CSS classes and accessibility features
- Edge cases and error handling

All tests passing.

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-05 03:57:08 +00:00
jeda
f8e17ee2ab feat(bd-3jl): FileHeatmap integration complete + build fixes
FileHeatmap component is fully integrated into main TUI app:
- Keyboard shortcut 'H' toggles heatmap view
- Real-time file access aggregation from event store
- Shows most-touched files with multiple sort modes
- All tests passing (943 tests, including 130 FileHeatmap tests)

Additional fixes:
- Fixed ErrorGroupPanel options to support bottom property
- Added vitest globals configuration for proper TypeScript support
- Fixed type assertions in server.test.ts
- Created comprehensive integration documentation

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-04 04:18:13 +00:00
jeda
9d67217b75 feat(bd-qt4): Implement Focus Mode state management
Add focus mode to filter display to pinned workers/tasks:
- Added focus mode toggle button in app header
- Implemented pin/unpin functionality for workers
- Implemented pin/unpin functionality for beads
- Added hide-all-except-pinned filtering logic
- State persisted to localStorage
- Added comprehensive Focus Mode UI with CSS styling
- Created 17 new tests for Focus Mode (all passing)

Changes:
- App.tsx: Added Focus Mode state (enabled, pinnedWorkers, pinnedBeads)
- App.tsx: Added filtering logic for workers and events based on pinned state
- WorkerGrid.tsx: Added pin button UI for workers
- ActivityStream.tsx: Added bead pin buttons and event filtering
- types.ts: Added bead field to LogEvent interface
- index.css: Added Focus Mode CSS styles
- FocusMode.test.tsx: Added comprehensive test coverage

All 633 tests passing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-04 03:34:09 +00:00
jeda
2f0a2967a7 feat(bd-3qk): Implement Activity Feed filtering controls
Implemented comprehensive filtering system for ActivityStream in both TUI and Web:

TUI Changes:
- Extended ActivityFilter interface with time range filters (since/until)
- Created FilterPanel component with all filter controls:
  * Worker ID filter
  * Log level filter (debug/info/warn/error)
  * Search term filter
  * Time range filters (since/until)
  * Clear all filters button
- Added filter state persistence to file storage (~/.fabric-filter-state.json)
- Added getFilter(), getEventsCount(), getFilteredEventsCount() methods
- Updated ActivityStream tests with time range filtering tests

Web Changes:
- Created FilterControls component with all filter controls
- Implemented complete filtering logic in ActivityStream component
- Added filter state persistence using localStorage
- Added CSS styles for filter controls panel
- Updated ActivityStream to support showFilters prop
- Updated tests to cover filtering functionality

All 465 tests passing.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-04 03:08:41 +00:00
jeda
e1f8c570a0 feat(bd-mza): P4-002: Implement cross-reference hyperlinking
Integrated CrossReferenceManager with EventStore to enable cross-reference
hyperlinking across events, workers, files, and beads. This allows navigation
between related activities in the FABRIC dashboard.

Changes:
- Integrated CrossReferenceManager into InMemoryEventStore
- Added batch processing for cross-reference relationship detection
- Added 11 new API methods to store for cross-reference queries
- Updated web server to use store's cross-reference methods
- Added comprehensive test coverage (11 new tests)
- All 55 tests passing

Features:
- Automatic link detection between events, workers, files, and beads
- Relationship detection (same_bead, same_file, same_worker, temporal_proximity, etc.)
- Navigation path finding between entities
- Cross-reference statistics and queries
- Web API endpoints for cross-reference data

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-04 03:00:36 +00:00
jeda
68624b081a feat(bd-1fe): Add RecoveryPanel component to web frontend
Port TUI RecoveryPanel.ts to React web frontend:
- Add RecoverySuggestion, RecoveryAction, and related types to types.ts
- Create RecoveryPanel.tsx component with:
  - Recovery suggestions list with expandable actions
  - Priority badges and category icons
  - Automated/manual action indicators
  - Execute and dismiss buttons for actions
  - Detail panel for selected suggestion
- Add CSS styles for recovery panel and toggle button
- Integrate RecoveryPanel into App.tsx with toggle button in header

All 442 tests pass.

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 15:33:24 +00:00
jeda
dc4421603f feat(bd-129): Add blessed TUI tests for ActivityStream component
- Add comprehensive test suite with 52 test cases covering:
  - Constructor and initialization
  - Event addition and formatting
  - Pause/unpause functionality
  - Filtering by worker, level, and search
  - Key bindings (p for pause, C-c for clear)
  - Edge cases (empty messages, unicode, special chars)
  - Position options (string and numeric)

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 15:30:52 +00:00
jeda
7f813ae99d feat(bd-396): Integrate DependencyDag component into web dashboard
- Import and render DependencyDag component in App.tsx
- Add showDependencyDag state toggle
- Add DAG button in header with 🔗 icon
- Add CSS styles for dag-toggle button
- All 390 tests pass including 14 DependencyDag tests

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 15:26:44 +00:00
jeda
595a174ce4 feat(bd-2vc): Add FileHeatmap component to web frontend
Port TUI FileHeatmap.ts to React web frontend with:
- Full component implementation with heat visualization
- Sort mode cycling (modifications, recent, workers, collisions)
- Collision filtering and directory filtering
- Entry selection with detail panel
- Worker display and modification statistics
- Comprehensive test suite (15 tests)
- API endpoints already integrated in server

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 15:22:47 +00:00
jeda
ccbe8e7a36 feat(bd-1mh): Add DependencyDag component to web frontend
- Create DependencyDag.tsx with interactive task dependency visualization
- Add DAG types to web frontend types
- Add /api/dag endpoint to server.ts
- Add CSS styles for DAG panel
- Add unit tests

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 15:13:13 +00:00
jeda
9ffbda241a feat(bd-1fz): Add React Testing Library tests for WorkerGrid component
- Add 28 comprehensive tests covering:
  - Empty state rendering
  - Worker count display
  - Status display (active, idle, error)
  - Event count formatting
  - Last seen time formatting (seconds, minutes, hours)
  - Worker selection/deselection
  - Collision indicators and warnings
  - CSS class application
  - Accessibility attributes

- Fix cleanup issue in existing test files:
  - Add afterEach cleanup to ActivityStream.test.tsx
  - Add afterEach cleanup to CollisionAlert.test.tsx

All 317 tests pass.

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:59:37 +00:00
jeda
e9fbd1e68c chore(bd-38s): update beads tracking and add WorkerGrid tests
Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:58:09 +00:00
jeda
469ad2cebe feat(bd-38s): Add comprehensive tests for CollisionAlert component
The CollisionAlert React component was already fully implemented in
src/web/frontend/src/components/CollisionAlert.tsx. This commit adds
comprehensive test coverage including:

- Rendering tests (visibility, empty state, counts)
- Severity grouping (critical/error, warning, info)
- Type icons (F, B, T for file, bead, task)
- Severity icons (!!!, !!, !, i)
- Acknowledgment functionality
- Detail view display
- Worker display (count vs names)
- Title truncation
- CSS class application
- Selection handling

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:57:05 +00:00
jeda
ac5e98ea85 feat(bd-ak8): Add comprehensive web server unit tests
- Add WebSocket connection tests with actual client connections
- Add broadcast() tests for single and multiple clients
- Add broadcastCollisions() tests
- Add WebSocket client lifecycle tests (disconnect, reconnect, errors)
- Add vitest setup file for frontend tests

All 53 tests pass including:
- HTTP endpoints (health, workers, events, collisions, xref)
- WebSocket functionality
- Error handling
- Server lifecycle

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

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:53:53 +00:00
jeda
3fea320e8e chore(bd-3fs): close completed bead
Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 14:48:16 +00:00
jeda
08dccf98a2 feat(bd-3fs): Add CollisionAlert component to web frontend
- Create CollisionAlert.tsx component with real-time collision notifications
- Add collision alert types (FileCollision, BeadCollision, TaskCollision, CollisionAlert) to types.ts
- Integrate CollisionAlert into App.tsx with WebSocket support
- Add CSS styles for collision alert panel with severity grouping
- Add header toggle button for collision alerts with unacknowledged count badge

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 14:46:56 +00:00
jeda
60975482d9 feat(bd-b0c): Add WorkerDetail component to web frontend
- Create src/web/frontend/src/components/WorkerDetail.tsx as dedicated component
- Port TUI WorkerDetail functionality to React web frontend
- Features:
  - Worker ID and status with status icon
  - Activity statistics (event count, current tool)
  - Timing information (last seen)
  - Recent events list (last 10 events)
  - Collision warning with affected files
  - Close button to deselect worker
- Update App.tsx to use new WorkerDetail component
- Add comprehensive CSS styles for new component

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:40:32 +00:00
jeda
df5e54cd87 refactor(bd-5d8): Centralize SessionReplay types in types.ts
Move ReplaySpeed and ReplayState types to central types file for
consistency and re-export them from the component for external use.

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:39:39 +00:00
jeda
942aacc465 feat(bd-2uo): Add Vitest tests for web server API endpoints
- Add comprehensive tests for /api/health endpoint
- Add tests for /api/workers and /api/workers/:id endpoints
- Add tests for /api/events with filtering (worker, level, limit)
- Add tests for /api/collisions and /api/workers/:id/collisions
- Add tests for cross-reference API endpoints (/api/xref/*)
- Add tests for WebSocket functionality exposure
- Add tests for server lifecycle and error handling
- All 42 new tests pass (225 total tests)

Co-Authored-By: Claude Worker <noreply@anthropic.com>
2026-03-03 14:36:44 +00:00
jeda
5fab75708f feat(bd-xig): Implement worker collision detection
- Add BeadCollision, TaskCollision, CollisionAlert types
- Extend WorkerInfo to track activeBead and activeDirectories
- Implement bead collision detection ( detectBeadCollision, getBeadCollisions, getWorkerBeadCollisions)
- Implement task collision detection ( detectTaskCollision, getTaskCollisions
- Implement getWorkerTaskCollisions
- Generate collision alerts with suggestions
- Add getCollisionStats for statistics
- Add cleanupStaleCollisions for bead and task collisions
- Create CollisionAlert TUI component

- Add unit tests for collision detection

🚀 Generated with Claude Worker <noreply@anthropic.com>

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 13:50:02 +00:00
jeda
57e8193f7b feat(bd-2kf): Add comprehensive test coverage for parser and store
- Add 36 parser tests covering:
  - parseLogLine with valid/invalid inputs
  - parseLogLines for multi-line parsing
  - formatEvent with all options
  - Edge cases: malformed JSON, missing fields, colorization

- Add 35 store tests covering:
  - InMemoryEventStore add/query operations
  - Worker status tracking (active/idle/error)
  - Event filtering by worker, level, bead, timestamp
  - maxEvents limit and LRU trimming
  - getStore/resetStore singleton management

- Close phase beads (bd-2pa, bd-n8l, bd-2nu) as infrastructure complete
- Close test beads (bd-5eh, bd-2en) with comprehensive coverage
- Total: 91 tests passing across parser, store, and tailer

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-03-03 10:43:24 +00:00