Repository navigation
fix: stop per-launch terminal listeners accumulating on the extension context (v0.2.10) - #13
Merged
Merged
Conversation
… the context Every launch registered its shell-integration listener, fallback timer, and shell-execution listener on `context.subscriptions`, which VS Code drains only at deactivate. Repeated toolbar clicks therefore appended entries that were never removed, and each entry kept its launch's closure — including up to 64 KiB of captured terminal output — reachable for the rest of the session. Launch-scoped disposables now go through a registry that drops each entry as soon as it is disposed, with a single aggregate disposable on `context.subscriptions` guaranteeing cleanup at shutdown. Closing the launcher terminal before its command is sent also cancels that launch's pending wait, timer, and listener instead of letting them fire against a terminal that no longer exists. The registry lives in `command-utils.ts` as a pure helper with focused unit tests, per the repository guardrail for reusable decision logic. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Bump the patch version across package.json, package-lock.json, CITATION.cff, the metadata test assertion, and the Publish Open VSX workflow default tag, and record the release in CHANGELOG.md. Add a metadata regression test asserting that `extension.ts` keeps exactly one `context.subscriptions.push` call, so per-launch listeners cannot drift back onto the array VS Code drains only at deactivate. Expand AGENTS.md with the stack, runtime, package manager, generated files, asset rules, compatibility contract, secret handling, branch protection, versioning and publishing channels, and the mandatory validation gate. Correct the version synchronization list in docs/RELEASING.md. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
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.
Summary
Fixes unbounded growth of per-launch terminal disposables, adds lifecycle regressions, hardens release-tool install-script approval, and prepares the backward-compatible
v0.2.10patch release.Runtime fix
createDisposableRegistry()tracks launch-scoped listeners and timers outsidecontext.subscriptions, dropping entries as soon as they are disposed while preserving aggregate shutdown cleanup.Tests and release safety
package.json, both lockfile version entries,CITATION.cff, the dated changelog section, and the Open VSX workflow default tag synchronized.allowScripts:@vscode/vsce-sign@2.0.9andkeytar@7.9.0. Any dependency update requires a new review.Documentation and versioning
AGENTS.mdwith project architecture, package manager/runtime, generated files, compatibility, asset protection, security boundaries, required checks, install-script policy, and release channels.docs/RELEASING.mdandCHANGELOG.mdwith the real 0.2.10 process and changes.0.2.9->0.2.10across all tracked release references.Validation
npm ci— 318 packages, zero vulnerabilities, no pendingallowScriptswarningout/npm audit --audit-level=moderate— zero vulnerabilitiesvsce lspackage-content validationCoverage for the pure command/lifecycle helpers is 98.27% lines, 91.30% branches, and 100% functions; no threshold is configured.
Artifact:
vscode-copilot-cli-launcher-0.2.10.vsix79EC90C0DAB9872FA4EA894C700367E448751AAFAAF1994F87D69A553119BF52mikesoft.vscode-copilot-cli-launcher@0.2.10media/icon.png, manifest, licence and public root documentation only; no source, tests, maps, lockfile,.env, credentials or local toolingmikesoft.vscode-copilot-cli-launcher@0.2.10in isolated user-data/extensions directories; temporary profile removedSecurity and privacy
The extension remains local-only: no telemetry, installers, automatic downloads, filesystem scanning, secret storage, or background network behavior. The machine-scoped command continues to ignore workspace-controlled values, and untrusted workspaces cannot launch it. Current CodeQL, Dependabot and secret-scanning alert counts are zero.
Release boundary
The
v0.2.10tag, GitHub Release and registries intentionally follow protected-branch approval and merge. Visual Studio Marketplace and Open VSX are currently at 0.2.9. Marketplace/Open VSX publishing remains owner-controlled;VSCE_PATandOVSX_PATare absent from both the environment and repository Actions secrets, so no publication was attempted.Risk
Low. The runtime change is confined to disposal bookkeeping and terminal-close cancellation, with focused and integration coverage.
media/icon.pngremains the dominant part of the VSIX but is within the documented 256 KiB budget and was deliberately left unchanged.