diff options
| author | Adam Malczewski <[email protected]> | 2026-06-22 14:07:30 +0900 |
|---|---|---|
| committer | Adam Malczewski <[email protected]> | 2026-06-22 14:07:30 +0900 |
| commit | d35462646f9f7ecbbdb0df8af564e668c7bcfe7c (patch) | |
| tree | 84fffaa3e75259e48e46f26a25d89ea8031a063c /src/features/chat | |
| parent | ed12e30ad53ce53a928d891ba5a7b951d505eebc (diff) | |
| download | dispatch-web-d35462646f9f7ecbbdb0df8af564e668c7bcfe7c.tar.gz dispatch-web-d35462646f9f7ecbbdb0df8af564e668c7bcfe7c.zip | |
feat: trim chunks during generation via step-complete syncTail (CR-6)
The backend now persists chunks at step boundaries during generation
(CR-6). The FE calls syncTail on each step-complete event to fetch
the newly committed chunks. applyHistory clears the provisional array
when new committed chunks arrive mid-generation (they're duplicates
of what was folded from live events). The accumulating chunk (current
in-progress step) is kept.
This means trimTranscript can now drop oldest committed chunks
uniformly during a long turn — no unbounded provisional growth. The
browser never holds more than chatLimit chunks, even mid-generation.
3 new tests: clears provisional on new committed during generation,
keeps provisional when no new chunks, keeps accumulating when clearing.
689 tests green.
Diffstat (limited to 'src/features/chat')
| -rw-r--r-- | src/features/chat/store.svelte.ts | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/features/chat/store.svelte.ts b/src/features/chat/store.svelte.ts index 9beabfc..f6c23fc 100644 --- a/src/features/chat/store.svelte.ts +++ b/src/features/chat/store.svelte.ts @@ -284,6 +284,11 @@ export function createChatStore(deps: ChatStoreDependencies): ChatStore { if (transcript.sealedTurnId !== null) { void syncTail(); void syncMetrics(); + } else if (msg.event.type === "step-complete") { + // CR-6: backend persists chunks at step boundaries. Fetch them + // as committed so trimTranscript can unload oldest chunks + // uniformly — no unbounded provisional growth during long turns. + void syncTail(); } }, |
