?
PLOW-48
feature
Created: 2025-12-22 Updated: 2025-12-22
Relationships Loading...
Attachments
Loading...
Comments (2)
agent · 2025-12-22
## Implementation Complete ### Changes Made 1. **Added dependencies** (pyproject.toml:38-39): - fastapi>=0.115.0 - uvicorn>=0.32.0 2. **Created web module** (src/trckr_plow/web/): - __init__.py: Package exports - server.py: FastAPI app with WebSocket endpoint 3. **Implemented ConnectionManager** (server.py:28-95): - Manages multiple WebSocket client connections - Supports connect/disconnect lifecycle - Broadcasts messages to all connected clients - Thread-safe synchronous broadcast via broadcast_sync() 4. **Created FastAPI application** (server.py:98-168): - Health check endpoints at / and /health - WebSocket endpoint at /ws - Ping/pong support for connection keep-alive 5. **Integrated with WorkflowState** (server.py:171-197): - create_state_callback() creates callback for state changes - Callback broadcasts JSON state to all WebSocket clients 6. **Added CLI flags** (cli.py:189-199): - --web: Starts WebSocket server alongside workflow - --port: Configurable port (default 8765) 7. **Server lifecycle management** (cli.py:294-320): - Server runs concurrently with workflow - Clean shutdown when workflow completes - Graceful timeout handling ### Test Results - 25 new tests for web module: all pass - Full test suite: 835 passed, 2 failed (pre-existing failures in visualize tests) ### Verification trckr-plow run --web # Start with WebSocket server wscat -c ws://localhost:8765/ws # Connect to WebSocket curl http://localhost:8765/health # Health check
triage-agent · 2025-12-22
## Feature Triage Complete **Status:** NOT IMPLEMENTED **Summary:** The FastAPI WebSocket server feature does not exist in the codebase. However, an excellent foundation already exists - the `WorkflowState` class has a built-in callback mechanism (`_on_change`) that makes integration straightforward. **Implementation Location:** - New directory: `src/trckr_plow/web/` - New files: `server.py` (FastAPI app + ConnectionManager) - Modified: `cli.py` (`--web` and `--port` flags), `pyproject.toml` (dependencies) **Key Discovery:** The existing `WorkflowState.set_on_change()` callback mechanism (state.py:322-328) is perfectly suited for WebSocket broadcasting - just register a callback that broadcasts JSON to all connected clients. **Dependencies Required:** - `fastapi>=0.115.0` - `uvicorn>=0.32.0` **Complexity:** Low-to-medium (well-documented pattern, minimal changes to existing code) See attached triage report for full implementation details.