Files
hermes-agent/apps
Siddharth Balyan 5dc1c084e9 fix(desktop): a reused tool call id no longer overwrites a finished tool row (#128009)
* fix(desktop): a reused tool call id no longer claims a finished tool row

A tool.start whose id repeats a call that already completed in the same
message was merged into that finished row: the args and error of the new
call overwrote the successful one, so a loaded skill rendered as a failed
one. The stable-id match now claims only an unresolved part, as
toolCallOwnerMessageId and applyStoredToolResultToParts already do. A
completion with no unresolved same-id part still lands on the finished
part when it repeats that part's result or carries none, so replayed and
metadata-only completions add no phantom row.

Refs NS-1029 B3.

* fix(desktop): a tool row shows only its own diff

The desktop kept a side store of inline diffs keyed by the raw tool call
id, and a tool row preferred that diff over the one on its own part. With
a reused id, the newest patch was stored under the shared id, so every row
that still carried that id showed the newest diff. Now that a reused id
gets its own row, that wrong diff became visible on the first row.

Every live completion already writes inline_diff into the part's
toolResultMetadata, and cold hydration never filled the side store. The
row now reads the diff from its own part, and the side store is removed.

Refs NS-1029 B3.
2026-09-30 01:49:32 +00:00
..