github / github/copilot-cli

Extension startup fails on large session histories

Open
#4,717 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

area:plugins area:sessions
Dominant language
Shell
Stars
11.2k
Forks
1.9k
Avg merge
14h 16m
Merged PRs (30d)
6

Description

Describe the bug

Extensions fail to load in a long-running session when the serialized event history exceeds V8's maximum string length. Each affected extension imports successfully, but its joinSession() call fails:

[extension-bootstrap] importing extension: <path>
[extension-bootstrap] Failed to load extension: Error: Request session.resume failed with message: Invalid string length

The failure affects multiple locally configured extensions. In one session, two extensions failed identically. That session's events.jsonl was 1,664,072,585 bytes. Both extensions loaded successfully in smaller sessions using the same installation. The largest session log with a successful extension startup was 97,568,545 bytes. These file sizes do not establish the exact threshold on the serialized event array.

The packaged 1.0.82 bundle shows this call path:

  1. handleSessionResumeCore() handles the extension's session.resume request and calls initializeSession() with replayEvents: false.
  2. The host initialization path ignores that flag and passes session.getEvents() to seamHost.initializeSession().
  3. seamHost.initializeSession() calls JSON.stringify(events).
  4. V8 throws Invalid string length because the result would exceed its maximum string length of 536,870,888 code units.

handleSessionResumeCore() requests no historical replay. Respecting replayEvents: false throughout the initialization path would avoid serializing the event array during extension attachment.

Affected version

GitHub Copilot CLI 1.0.82

Steps to reproduce the behavior
  1. Configure an extension whose entry point calls joinSession().
  2. Open or resume a session whose serialized event history exceeds V8's maximum string length.
  3. Start or reload the extension.
  4. Inspect the extension log.

The session.resume request fails with Invalid string length. The extension process then exits before reporting ready.

Expected behavior

Extension startup should not depend on the total size of the session history. joinSession() should complete without materializing unrequested historical events as a single JavaScript string.

Additional context

Environment: Linux x86_64.

#4325 reported the same engine limit for CLI session resume and was closed as completed. Extension attachment still fails.

#4670 tracks stale registrations and hanging tool calls after a startup failure. Reproducing it surfaced this attachment failure, which #4670 records as a separate defect.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at handleSessionResumeCore() and trace how replayEvents: false moves through initializeSession() to seamHost.initializeSession(). Verify the extension attachment path no longer serializes the full event history when historical replay is not requested, and reproduce with a session whose serialized history exceeds V8's string limit.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript
Domain
cli
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Active
Clarity
Clearly specified
Newbie friendliness
70/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.