bfbebc7b80abbc482a6a3ee445ab5cadd3820d47
Force quitting during a tool batch produced a conversation that could not be continued at all, only deleted: `failed to stream request: error: No tool output found for function call call_…`. The assistant turn is persisted as soon as it arrives, its results only when the run next saves a snapshot, so a process that dies in between restores a turn whose calls nothing answers — and every provider rejects that outright rather than degrading. It is the exact mirror of the orphaned result this codebase already repaired, and the same class of fatal. Recorded results come back first. `toolFinished` is durable and lands as each tool finishes, so in the common case the output is sitting in the database while the transcript claims to know nothing about it; `loadConversations` now materializes any result whose transcript row was never written. In a batch of three killed during the third, the first two come back with the output they actually produced. `AgentUnansweredToolCallRepair` answers whatever storage cannot, at the model boundary and at the snapshot seed — the same two places the orphan repair runs, and for the same reason: repairing at the seed writes the fix forward instead of re-deriving it on every future turn. What it says matters as much as that it says something. It does not claim the tool did not run. The process died after the command was dispatched, so whether the remote side executed it is genuinely unknown, and a model told "this never ran" will cheerfully run it again — which is a data-loss bug the first time the call was `rm`. It says the outcome is unknown and to check before repeating. A card caught mid-flight also came back spinning. Every unfinished run is marked interrupted at launch, so `running` is not a state a restored card can legitimately be in, and nothing was ever going to stop that spinner. Worth noting against the previous commit: batching the snapshot save to once per turn rather than once per tool widened this window, and the recovery above is what closes it — results are still recorded one at a time, so nothing a tool produced is lost, only deferred. 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%