fix(sequentialthinking): prevent unbounded memory growth in thought history #3321
+131
−1
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
Fixes #2912 — The
SequentialThinkingServerstores all thoughts in memory arrays (thoughtHistoryandbranches) that grow without bound across the server process lifetime. In long-running sessions (6-8+ hours of frequent use), this can lead to 10GB+ RAM consumption.Root Cause
thoughtHistory: ThoughtData[]andbranches: Record<string, ThoughtData[]>are append-only — thoughts are pushed but never removed or trimmed. Since the server is a long-lived stdio process, memory accumulates indefinitely.Changes
1. Configurable max history with auto-trimming (
lib.ts)SEQUENTIAL_THINKING_MAX_HISTORYenvironment variable (default:1000)splice()2. Explicit
clearHistory()method (lib.ts)thoughtHistoryandbranchesto empty3. New
sequentialthinking_cleartool (index.ts)4. Documentation (
README.md)DISABLE_THOUGHT_LOGGINGand the newSEQUENTIAL_THINKING_MAX_HISTORY5. Tests (
lib.test.ts)clearHistory— verifies thoughts and branches are fully resetSEQUENTIAL_THINKING_MAX_HISTORYis respectedTesting
All 17 tests pass:
Design Decisions