-
Notifications
You must be signed in to change notification settings - Fork 1
Closed
Labels
enhancementNew feature or requestNew feature or request
Description
Part of epic: #1007
Problem
AcpShellExecutor blocks until the command completes, then returns the full output. IDEs receive terminal output only after execution finishes — no real-time streaming visible in the tool card.
Solution
Introduce a per-call streaming output sink. For each shell tool call, emit:
ToolCallwith_meta.terminal_info = { terminal_id }on startToolCallUpdatewith_meta.terminal_output = { terminal_id, data }per stdout/stderr chunkToolCallUpdatewith_meta.terminal_exit = { terminal_id, exit_code, signal }on finish
Protocol shape (from Zed claude-agent-acp):
// ToolCall
{ "_meta": { "terminal_info": { "terminal_id": "<uuid>" } } }
// ToolCallUpdate (streaming)
{ "_meta": { "terminal_output": { "terminal_id": "<uuid>", "data": "chunk" } } }
// ToolCallUpdate (final)
{ "_meta": { "terminal_exit": { "terminal_id": "<uuid>", "exit_code": 0, "signal": null } } }Tasks
- Generate
terminal_id(UUID) inagent.rsbefore shell tool dispatch - Refactor
AcpShellExecutor::execute()to acceptoutput_sink: impl Fn(String) + Sendcallback incrates/zeph-acp/src/terminal.rs - Sink emits
ToolCallUpdate { _meta: terminal_output { data } }via ACP client per chunk - On command exit: emit
ToolCallUpdate { _meta: terminal_exit }with exit code - Integration test: verify
terminal_outputchunks arrive before finalToolCallUpdate
Files
crates/zeph-acp/src/terminal.rs— AcpShellExecutor streaming refactorcrates/zeph-acp/src/agent.rs— terminal_id generation + _meta serialization in prompt()
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
enhancementNew feature or requestNew feature or request