Report a backgrounded command into the card that launched it
A backgrounded command has no subagent, so there is no second transcript for its report to live in and its own tool card is the only record of it anywhere -- and until the task notification arrives that card is showing the launch result, which says the command is running. It was left saying that for ever. The report now updates the call's own row (`Event::ToolUpdate` against its tool_use id), so the card ends up holding what became of the command instead of a claim nothing was ever going to correct. That includes the endings that carry no summary: those are exactly the ones that went wrong, and a stale "running in background" reads worst on them, so they say the status word rather than nothing. A task with a subagent behind it is untouched and its report stays where it was, in that subagent's own transcript. Echo grew `/background [seconds]` for the shape end to end: the Bash call, the launch result, a turn that ends `waiting`, and the completion arriving later to correct the card and start a second turn. Verified on the emulator: the card reads `Background command "sleep 5 && echo done" completed (exit code 0)` where it had said "Command running in background with ID: ...". 172 server tests, ktfmt, clippy, rustfmt, Android lint and the JVM unit tests clean. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
1bbb642973
commit
9cc52beb09
5 files changed
+199
-15
No files matched your search
@@ -247,11 +247,16 @@ written, and the fold uses that same predicate to decide a reply is settled.
|
||||
screenful of dividers about work nobody was asking after, one of them a whole
|
||||
shell command. A subagent's report is its own transcript's closing text and
|
||||
is read in the subcard.
|
||||
- **A backgrounded command has no subagent, so its report lands in the tool
|
||||
card that launched it** — a `ToolUpdate` against the call's own id, replacing
|
||||
the launch result that says it is still running. `/background [seconds]` in
|
||||
an echo session is that shape end to end.
|
||||
- **Two replies that meet are separated by a `TurnBreak`** — a hairline, no
|
||||
words. The reply that follows a turn boundary is a **new** message: the fold
|
||||
refuses to grow a settled reply, and without that the two ran together
|
||||
mid-sentence. `./ui-sandbox.sh` plus `/subagent 3` in an echo session is the
|
||||
whole rig; the helpers stagger a second apart so each reply is its own.
|
||||
mid-sentence. `./ui-sandbox.sh` plus `/subagent 3` or `/background 5` in an
|
||||
echo session is the whole rig; the helpers stagger a second apart so each
|
||||
reply is its own.
|
||||
- **Whether work is outstanding has two sources and needs both.** The
|
||||
translator's `open_tasks` is what it watched start — the only thing that
|
||||
knows about a backgrounded command — and `Subagents::any_open` reads the
|
||||
|
||||
Reference in new issue
Block a user