🤖 fix: make compaction crash-safe and recover via resume manager #1255
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Make history compaction crash-safe and recoverable across restart/crash, while ensuring user-cancelled compactions (Ctrl+C) do not auto-retry.
Changes
HistoryService.replaceHistoryWithSummary()(atomicwriteFileAtomicofchat.jsonl) and use it from:CompactionHandler.performCompaction()WorkspaceService.replaceHistory()useResumeManagerto detect interrupted compaction-request messages and retry compaction viaexecuteCompaction(...)(instead ofresumeStream()), preserving parsed options (model/maxOutputTokens/continueMessage).getCancelledCompactionKey(workspaceId)marker on Ctrl+C compaction cancel and skip auto-retry when the marker matches the compaction request message.useAbortedCompactionRetry, schema/type guards, replay emission).Validation
make static-checkbun test src/node/services/historyService.test.ts src/node/services/compactionHandler.test.tsGenerated with
mux• Model:openai:gpt-5.2• Thinking:high