fix: compress linear tree chains to prevent JSON.stringify stack overflow#66
Open
fallleave001 wants to merge 3 commits into
Open
fix: compress linear tree chains to prevent JSON.stringify stack overflow#66fallleave001 wants to merge 3 commits into
fallleave001 wants to merge 3 commits into
Conversation
…event JSON.stringify stack overflow Previous attempt removed the `tree` field entirely, which broke BranchNavigator. This new approach keeps `tree` but compresses linear chains (single-child nodes are collapsed into their parent) before serialization, reducing depth from 2000+ to the number of branching points — well within V8's ~3000 recursion limit. Branching points (nodes with >1 children) are preserved as-is, so users with branched sessions retain full in-session branch navigation.
Open
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Problem
On long linear sessions (2000+ messages), JSON.stringify(tree) in the session detail API throws Maximum call stack size exceeded because each message is a single-child node forming a deep linear chain.
Simply removing the tree field breaks BranchNavigator branch navigation.
Solution
Add a generic compressTree function that contracts linear single-child chains while preserving branch points and terminal leaves:
Before: Msg_1 → Msg_2 → ... → Msg_3400 (depth 3400 → stack overflow)
After: Msg_1 → Msg_3400 (depth 2 → safe)
Branch tree shape preserved:
Testing
Notes
Supersedes PR #38 and PR #48 following reviewer feedback: