Problem
Connected clients currently do not receive per-tool execution progress for session-initiated tools in real time. They typically see only session-level chat events (partial / final) after the agent loop resumes.
Impact
For workflows with long-running tools (especially node/native async tools like future window/render flows), the user has no immediate visibility into:
- tool invocation started
- tool in progress
- intermediate tool results/errors
- completion state until final assistant turn
Current behavior reference
gateway routes client-driven tool.invoke via pending route kind: "client" and can respond directly with tool.result.
- session-driven tool calls (
tool.request) use kind: "session" and feed result into session.toolResult, then LLM continuation.
chat stream comes from Session.broadcastToClients states.
Request
Add explicit streaming of tool lifecycle events for session sessions, e.g.:
- Emit
tool.started when tool call is dispatched.
- Emit
tool.result / tool.error updates.
- Optionally emit aggregate
tool.phase events for queued/parallel tool batches.
- Keep
tool.request path unchanged for internal logic so behavior remains backward compatible.
Notes
This is intentionally separate from protocol routing/pending-op refactor work currently in progress.
Problem
Connected clients currently do not receive per-tool execution progress for session-initiated tools in real time. They typically see only session-level
chatevents (partial/final) after the agent loop resumes.Impact
For workflows with long-running tools (especially node/native async tools like future window/render flows), the user has no immediate visibility into:
Current behavior reference
gatewayroutes client-driventool.invokevia pending routekind: "client"and can respond directly withtool.result.tool.request) usekind: "session"and feed result intosession.toolResult, then LLM continuation.chatstream comes fromSession.broadcastToClientsstates.Request
Add explicit streaming of tool lifecycle events for session sessions, e.g.:
tool.startedwhen tool call is dispatched.tool.result/tool.errorupdates.tool.phaseevents for queued/parallel tool batches.tool.requestpath unchanged for internal logic so behavior remains backward compatible.Notes
This is intentionally separate from protocol routing/pending-op refactor work currently in progress.