Commit Graph

7 Commits

Author SHA1 Message Date
matevip
aecc619bef fix(chat): clarify running and stopped states 2026-08-19 22:42:12 -04:00
matevip
41ffe38699 fix(team): harden readonly run interactions (#596) 2026-08-15 00:54:19 -04:00
matevip
9a3b95df53 fix(team): unify Team Run delivery experience (#596) 2026-08-15 00:37:08 -04:00
matevip
dc3506f748 feat(team): unify team run experience (#596) 2026-08-13 07:00:24 -04:00
matevip
04a61fda19 fix(chat): preserve large ids in JSON detail viewer 2026-08-13 04:00:47 -04:00
matevip
d5eb3507b6 fix(ui): show superseded content inline 2026-08-10 06:00:05 -04:00
倪程伟
97a040aa89
fix(chat): dedupe tool-call segments by toolCallId, not name+args
A tool/MCP call could render 2+ times in the timeline (issue #521). The
tool is invoked once — this is a display artifact. The segment de-dup in
MessageBubble keyed on `toolName::toolArgs`, which fails two ways:

- The same logical call rendered on both the live SSE stream and the
  reloaded/persisted path can carry differing toolArgs strings
  (whitespace / key-order from re-serialization), so the two are NOT
  de-duplicated and both survive → the reported duplicate.
- Genuine repeated calls of the same tool with identical args (e.g. shell
  / python retries) share the key and get wrongly collapsed to one.

Prefer the LLM-provided toolCallId (carried end-to-end on both live and
persisted segments, stable across serialization) and fall back to
toolName::toolArgs only for legacy segments without an id. This fixes
both the visible duplication and the over-collapse.

Adds pure-function tests for the de-dup logic.
2026-07-15 14:53:22 +08:00