fix: 修复内存溢出问题,compact 时清理持久增长数据结构

- compact 时清理 contentReplacementState(seenIds/replacements)
- logError() 使用 shortErrorStack 替代完整 err.stack,减少 GC 压力
- permissionDenials 每次 submitMessage 清空,防止无限增长
- SSE 缓冲区添加 1MB 上限,防止畸形数据无限累积

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
claude-code-best
2026-05-01 22:24:18 +08:00
parent a81995052f
commit ab0bbbc4b5
5 changed files with 35 additions and 3 deletions

View File

@@ -305,8 +305,9 @@ import {
import { deserializeMessages } from '../utils/conversationRecovery.js';
import { extractReadFilesFromMessages, extractBashToolsFromMessages } from '../utils/queryHelpers.js';
import { resetMicrocompactState } from '../services/compact/microCompact.js';
import { runPostCompactCleanup } from '../services/compact/postCompactCleanup.js';
import { runPostCompactCleanup, registerCompactCleanup } from '../services/compact/postCompactCleanup.js';
import {
createContentReplacementState,
provisionContentReplacementState,
reconstructContentReplacementState,
type ContentReplacementRecord,
@@ -1778,6 +1779,9 @@ export function REPL({
const [contentReplacementStateRef] = useState(() => ({
current: provisionContentReplacementState(initialMessages, initialContentReplacements),
}));
registerCompactCleanup(() => {
contentReplacementStateRef.current = createContentReplacementState();
});
const [haveShownCostDialog, setHaveShownCostDialog] = useState(getGlobalConfig().hasAcknowledgedCostThreshold);
const [vimMode, setVimMode] = useState<VimMode>('INSERT');