22543c2a564a3e8c6799cecde7186b5bb2f91f04
`ssh_exec` reports at fifteen seconds and hands back a handle, which left the model two bad options for a three-minute build: block a long `ssh_wait` — the turn occupancy this whole line of work exists to remove — or poll in short ones at a full round trip each. Neither is good, and the first quietly undoes the fix. So a wait can now be ended by the user typing. `ssh_wait` races three things instead of two: the command finishing, its own deadline, and the user interjecting. An interjection is reported exactly as a deadline is — not finished, ask again — because to the caller it is the same answer. This is offered to tools rather than done to them, and the distinction is the whole reason it is safe. Ending a *wait* costs nothing: the command keeps running, its session stays, its handle stays valid, and the only thing lost is the waiting. Ending `ssh_exec` would strand a half-finished command on a host, which is why an interrupt was wrong there and is right here. A tool asks `whenUserInterjects` when it is about to wait on purpose; nothing is cancelled behind any tool's back. The signal is stateful rather than a plain broadcast. A wait that began a moment *after* the user typed would otherwise sit out its whole deadline with a message already queued behind it, which is the exact failure it is meant to prevent. It is armed when steering is queued and disarmed when the queue drains into the turn about to start, so "is anyone waiting to be heard" is asked of the queue rather than of a past event. What this buys, end to end: the model can ask for a long `timeout_seconds` without that being a decision about how long the user has to wait. A message typed two seconds into a five-minute wait is answered at the boundary that follows it rather than five minutes later. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Description
AI-driven remote workspace for Mac, iPhone, and iPad.
https://termind.akinokaede.com
23 MiB
0 Stars
1 Watchers
0 Forks
Languages
Swift
98.9%
Python
0.8%
Ruby
0.3%