Merge branch 'code-mode-ui/dispatch-spill' into code-mode-ui/shiki

This commit is contained in:
Tianyi Cui
2026-07-26 14:07:05 +08:00
2 changed files with 7 additions and 2 deletions

View File

@@ -661,8 +661,10 @@ export class Session implements ObservableSnapshot<ConversationSnapshot> {
kind: 'tool-result', seq: event.seq, time: event.time,
callId: data.subCallId,
call: { name: data.name, argsRaw: JSON.stringify(data.arguments) },
// Duration source: the paired start's time when observed.
callTime: started === undefined ? event.time : started.time,
// Duration source: the paired start's time when observed; null =
// unknown (settle-only window), matching the native tool-result
// contract so views never present a fabricated zero duration.
callTime: started === undefined ? null : started.time,
content: data.content, isError: data.isError,
callView: null, resultView: null,
}

View File

@@ -688,6 +688,9 @@ describe('run_code sub-dispatch indexing', () => {
isError: false, content: [{ type: 'text', text: 'demo.txt' }],
})
expect(subs?.[1]).toMatchObject({ callId: 'p1:code:2', isError: true })
// No paired start in the window: duration is UNKNOWN (null), never a
// fabricated zero-duration span.
expect(subs?.[0]).toMatchObject({ callTime: null })
// Sub-dispatches never join the surface flow.
expect(session.getSnapshot().nodes.some(n => n.kind === 'tool-result' && n.callId.includes(':code:'))).toBe(false)
})