2.3 KiB
2.3 KiB
Story 4.2: WebSocket-Agent-Events integrieren
Status: done
Story
Als Frontend, möchte ich WebSocket-Events vom Backend, so dass der aktive Node im Canvas in Echtzeit pulsiert.
Acceptance Criteria
- Backend sendet
{"event": "node_active", "node": "master_agent", ...}bei Node-Eintritt - Backend sendet
{"event": "run_complete", "final_draft": "..."}nach Abschluss - Backend sendet
{"event": "run_paused", "next_nodes": [...]}bei God-Mode-Pause - Frontend
useCouncilWebSocketHook verbindet sich mitWS /ws/council/{run_id} markNodeActive(nodeName)setztisActive = truefür den entsprechenden Canvas-Node- Bei WS-Verbindungsabbruch: Graceful-Handling ohne Crash
Tasks / Subtasks
- Task 1:
api/websocket.pyWebSocket-Endpoint (AC: 1–3)- Subtask 1.1:
_connectionsDict für aktive WS-Sessions - Subtask 1.2:
broadcast_event(run_id, event)Funktion - Subtask 1.3:
WS /ws/council/{run_id}Route
- Subtask 1.1:
- Task 2:
hooks/useCouncilWebSocket.ts(AC: 4–6)- Subtask 2.1:
onComplete,onError,onPaused,onResumedCallbacks - Subtask 2.2: Event-Dispatching per
event.type - Subtask 2.3: Cleanup bei Unmount / Verbindungsabbruch
- Subtask 2.1:
- Task 3: Store-Integration:
markNodeActive(nodeName)(AC: 5) - Task 4: WS-Router in
main.pyregistrieren (AC: 1)
Dev Notes
broadcast_event()bereinigt tote Verbindungen automatisch (disconnected-Liste)- Frontend:
useRef(null)für WS-Instanz → sicheres Cleanup in useEffect-Return - Event-Typen:
node_active,run_complete,run_paused,run_failed
Project Structure Notes
backend/api/websocket.pyfrontend/app/hooks/useCouncilWebSocket.ts
References
- [Source: _bmad-output/planning-artifacts/architecture.md#ADR-003]
- [Source: _bmad-output/planning-artifacts/architecture.md#WebSocket]
Dev Agent Record
Agent Model Used
Amelia (💻 BMAD Dev Agent)
Completion Notes List
- WebSocket-Verbindungen werden per
run_idisoliert — kein Cross-Event zwischen Runs. try/exceptinbroadcast_event()verhindert, dass ein einzelner WS-Fehler alle Clients betrifft.
File List
backend/api/websocket.pyfrontend/app/hooks/useCouncilWebSocket.ts