db75f7c4b86dc645acb4f31bb1a03b186796772e
The streaming progress seam grows from a bare output callback to ToolProgress: output chunks as before, plus an optional ToolStatus — the phase a tool's inner work is in and, when the tool runs model calls of its own, their cumulative spend and the model they ran on. The engine stamps the call's id on it and the sink receives it as an ephemeral ToolStatus event, replacing any earlier one for the call; status is screen-facing, never history. The subagent tool is the first emitter: its inner turn's lifecycle becomes phase transitions (thinking, running, writing output) and a running token total. Every sink decides what a status is worth: the cloud wire forwards it, ACP and the claw have no slot and drop it.
Languages
Rust
74.9%
Kotlin
13.8%
Vue
7.1%
TypeScript
3%
Dockerfile
0.5%
Other
0.6%