/tree crashes with RangeError: Maximum call stack size exceeded on sessions deeper than ~2k entries
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Anfängerfreundlichkeit
- 70/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- javascript
- Bereich
- cli
Rechercherichtung
Reproduziere den Fehler mit einer Sitzung, die deutlich mehr als ungefähr 2.000 Einträge enthält, und untersuche anschließend die im Issue genannten Walker, beginnend mit SessionStoreV3.getTree() und buildNode in dist/cli.mjs. Überprüfe ebenfalls die Besucher des Tree-Navigators und die Helper für sichtbare Knoten. Als erledigt gilt die Aufgabe, wenn /tree für tiefe Sitzungen ohne einen RangeError geöffnet wird und dabei die gemeldete Traversierungsausgabe sowie das Navigationsverhalten erhalten bleiben.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Summary
Running /tree on a session with a long history crashes the CLI. The tree never opens: the TUI prints an unhandled promise rejection (RangeError: Maximum call stack size exceeded) and the process exits back to the shell. Long-running sessions therefore cannot use /tree at all — the longer the session, the more certain the crash.
Expected Behavior
/tree opens the session-tree navigator for any session, regardless of how many entries it has.
Actual Behavior
The navigator never renders; the CLI prints the standard crash block and exits:
✖ CRITICAL: Unhandled Promise Rejection!
This is an unexpected error. Please file a bug report at https://github.com/CommandCodeAI/command-code/issues/new
✖ ERROR → RangeError
ℹ REASON → Maximum call stack size exceeded
ℹ ERROR STACK ↓
RangeError: Maximum call stack size exceeded
at buildNode (file:///…/command-code/dist/cli.mjs:2:537086)
at Array.map (<anonymous>)
at buildNode (file:///…/command-code/dist/cli.mjs:2:537120)
at Array.map (<anonymous>)
at buildNode (file:///…/command-code/dist/cli.mjs:2:537120)
...
Steps to reproduce the issue
- Use a session whose tree is deeper than roughly 2–3k entries — a long linear conversation (depth == number of entries) is enough; heavy rewinding/forking also builds depth.
- Run
/tree. - The CLI crashes instead of opening the navigator.
Observed with a 12 MB transcript: 4,275 entries, tree depth 4,266, 3 roots, no cycles and nothing corrupt. For contrast, an empty session correctly shows "No session entries yet." without crashing, and a 700-entry session (depth 687) opens fine.
Isolated measurements of the shipped buildNode on synthetic linear chains: depth 2,000 → OK, depth 3,000 → RangeError.
Command Code Version
1.54.1 (latest on npm at the time of writing, so there is no newer release to upgrade to)
Operating System
Linux
Terminal/IDE
tmux 3.x
Shell
fish
Session file (optional)
Not attached — the repro transcript is 12 MB. Happy to share it privately, or run anything you'd like against it.
Fix prompt (optional)
The session-tree walkers recurse once per tree level, so stack depth is proportional to session depth. Convert them to explicit-stack iteration:
SessionStoreV3.getTree()→buildNode(cli.mjs≈ 2:537086):const r=(e.get(n.id)??[]).slice().sort(t).map(buildNode)- the tree navigator's
entryByIdvisitor andbuildToolCallMap's innervisit buildVisibleNodes,containsId,reorderActiveFirst,flattenVisibleTree's innervisit
These are all pure traversals with no depth-dependent behavior, so the output should be identical.
Additional context
I patched all seven walkers locally to explicit-stack iteration and verified:
- the walkers return byte-identical output (JSON, key order included) versus the recursive originals across linear / branchy / wide (13.5k nodes) / deep trees;
- rendering a 700-entry and a 338-entry session via
cmd --session <copy>, captured with tmux, is pixel-identical before and after the change; /treenow opens and navigates the 4,266-deep session (filters, fold/unfold, Esc all work), plus a synthetic 30k-deep one, with no crash.
That patch is a local edit to the minified dist/cli.mjs (it is overwritten on upgrade), so it is not a fix to ship — but the approach may save someone time. I can send the patch script if useful.
Note: the investigation, reproduction and patch above were produced by an AI coding agent (Command Code itself) working against the shipped bundle.
- Vorherrschende Sprache
- Keine Sprachdaten
- Sterne
- 4k
- Forks
- 350
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beitragsleitfaden
Für dieses Repository ist kein Beitragsleitfaden indexiert
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus CommandCodeAI/command-code
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
CommandCodeAI/command-code#855 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
CommandCodeAI/command-code#841 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
CommandCodeAI/command-code#655 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
CommandCodeAI/command-code#608 ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 70/100
CommandCodeAI/command-code#893 ·
Alle Issues in CommandCodeAI/command-code
Ähnliche Issues
-
area: compat bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
-
area: dogs bug priority: P3 silent failure test-code
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 88/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
phoenixframework/phoenix#6847 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
hust-open-atom-club/hustmirror-cli#52 · 1 Kommentar ·