CodeFRAME currently supports one-way execution monitoring via SSE: the user watches the agent run, but cannot steer it mid-flight except through the blocker Q&A (which pauses the whole run). This issue tracks the full work needed to close the bidirectional agent chat gap — persistent, interactive sessions where users can send messages to a running agent and receive streaming token-by-token responses.
#501 (DB/API)
└─→ #502 (WS endpoint)
└─→ #503 (streaming adapter) ← backend complete
#504 (hook) ← requires #502 running
└─→ #505 (chat panel)
#506 (terminal)
#507 (split pane)
#508 (list page) ← requires #501 running
└─→ #509 (detail page) ← requires #504, #505, #506, #507
Overview
CodeFRAME currently supports one-way execution monitoring via SSE: the user watches the agent run, but cannot steer it mid-flight except through the blocker Q&A (which pauses the whole run). This issue tracks the full work needed to close the bidirectional agent chat gap — persistent, interactive sessions where users can send messages to a running agent and receive streaming token-by-token responses.
Problem
POST /api/projects/{id}/chatendpoint returns complete responses and is wired to the Lead Agent only, not to a running coding agent/wsWebSocket handles project status updates (subscribe/broadcast), not interactive message exchangeWhat "Done" Looks Like
/sessionspage and start a new interactive agent session against any workspace/sessions; past sessions can be resumedSub-issues (Atomic, Single-session Work)
Backend
/ws/sessions/{id}/chat)Frontend
useAgentChathook (WebSocket connection, message accumulation, streaming)AgentChatPanelcomponent (messages, tool calls, thinking blocks, input bar)AgentTerminalcomponent (XTerm.js interactive terminal)SplitPanelayout component (draggable, collapsible, localStorage persistence)/sessionslist page + sidebar nav entry/sessions/[id]detail page (wires everything together)Dependency Graph
Existing Infrastructure
codeframe/ui/routers/websocket.pycodeframe/ui/routers/chat.pycodeframe/ui/routers/session.pycodeframe/core/streaming.py+useEventSource.tsweb-ui/src/components/prd/DiscoveryPanel.tsx