* CI: speed up node_modules cache with zstd + shared scripts
Switch the Linux/macOS node_modules cache from single-threaded gzip
(tar -czf) to multi-threaded zstd. The "Create node_modules archive"
step was spending ~5min of single-core gzip on a multi-GB tree on every
cache miss; zstd -T0 uses all cores and decompresses much faster, so
cache-hit jobs benefit too. Windows stays on 7-Zip (already threaded).
Extract the archive/extract commands into shared per-platform scripts
under .github/workflows/node_modules_cache/ (cache.sh / cache.ps1, each
dispatching on an archive|extract argument) so the format and flags live
in one place instead of being duplicated across ~8 workflows. Bump
build/.cachesalt to invalidate existing gzip caches.
Also remove the obsolete extensions/copilot CI workflows
(copilot-setup-steps.yml, ensure-node-modules-cache.yml, pr.yml) and the
unused build/listBuildCacheFiles.js, and drop their now-stale entries
(plus lit-html and signals-core) from .eslint-allowed-javascript-files.
* ci: seed copilot node_modules cache on main and rename cache keys
Add copilot-linux and copilot-windows jobs to pr-node-modules.yml so the
copilot node_modules cache is populated on main. Rename the copilot cache
keys to copilot-node_modules-linux / copilot-node_modules-windows in pr.yml.
* ci: extract node_modules cache into composite actions
Factor the repeated node_modules cache plumbing into two local composite
actions, restore-node-modules and save-node-modules, and migrate all
workflows that used the cache.sh/cache.ps1 archive flow (pr, pr-node-modules,
pr-{linux,darwin,win32}-test, copilot-setup-steps, component-fixtures,
css-order-scan).
- restore-node-modules computes the key, restores the cache, optionally
extracts on a hit, and exports the resolved key via $GITHUB_ENV.
- save-node-modules archives node_modules and saves it to the cache, reusing
the key exported by restore so callers don't repeat the prefix.
- Bespoke install steps stay in the workflows, so per-job env/secrets never
cross the action boundary.
- Only seed the cache on branch pushes (component-fixtures skips PRs, whose
caches aren't shared).
* save the node_modules cache for now to test it
* ci: fix node_modules cache save dropping the archive
cache.sh wrote its archive as cache.tzst, but actions/cache reserves that
name for its own tarball and passes --exclude cache.tzst, so our archive was
excluded and an empty (~200 B) cache was saved on Linux/macOS. Rename the
archive to node-modules.tzst and bump build/.cachesalt to invalidate the
broken cache entries.
* empty commit
* Remove again saving to the node modules cache from PR steps
* ci: restore chat pipeline to windows-latest
* chore: remove node-gyp override
* chore: restore node-gyp override with comment
* refactor: rm dependency on key:sqlite
The module locks the node-gyp dependency to 8.x due to
its transitive sqlite3 native module dependency this in turn
blocks using newer windows CI, refs https://github.com/microsoft/vscode/issues/321267
The module can be replaced with built-in sqlite support
from Node.js without losing the on-disk cache format has
already been committed.
* chore: restore minimist
* chore: set sqlite busy timeout
* fix: decode json-buffer values for keyv cache compat
This prevents this annoying warning from getting printed all the time
```
[watch-copilot ] [watch:esbuild ] (node:12319) [MODULE_TYPELESS_PACKAGE_JSON] Warning: Module type of file:///Users/matb/projects/vscode/extensions/copilot/.esbuild.ts is not specified and it doesn't parse as CommonJS.
[watch-copilot ] [watch:esbuild ] Reparsing as ES module because module syntax was detected. This incurs a performance overhead.
[watch-copilot ] [watch:esbuild ] To eliminate this warning, add "type": "module" to /Users/matb/projects/vscode/extensions/copilot/package.json.
[watch-copilot ] [watch:esbuild ] (Use `node --trace-warnings ...` to show where the warning was created)
```
Co-authored-by: Copilot <copilot@github.com>
* The reckoning: Update all the vscode.proposed.*.d.ts files
and run the update on post install
* Improve proposed update and check
- Pin it to a commit
- Require that update be run manually, not as post install
- Add PR check
---------
Co-authored-by: João Moreno <joaomoreno@users.noreply.github.com>
* Update Anthropic SDK packages
### `@anthropic-ai/sdk` (0.71.2 → 0.72.1)
#### Features
- Structured Outputs support in Messages API
- MCP SDK helper functions
#### Breaking Changes
- `output_format` → `output_config` parameter migration
### `@anthropic-ai/claude-agent-sdk` (0.2.5 → 0.2.31)
#### Features
- **Query interface:** Added `close()` method, `reconnectMcpServer()`, `toggleMcpServer()` methods
- **Sessions:** Added `listSessions()` function for discovering resumable sessions
- **MCP:** Added `config`, `scope`, `tools` fields and `disabled` status to `McpServerStatus`
- **PDF support:** Added `pages` field for reading specific page ranges
- **Debugging:** Added `debug` and `debugFile` options
- **Results:** Added `stop_reason` field to `SDKResultSuccess` and `SDKResultError`
- **Hooks:** Added notification hook support
#### Bug Fixes
- Fixed `mcpServerStatus()` to include tools from SDK and dynamically-added MCP servers
- Fixed PermissionRequest hooks in SDK mode
- Fixed structured output validation errors and empty assistant message handling
#### Breaking Changes
- `KillShellInput` → `TaskStopInput`: Updated type mapping in claudeTools.ts
Also improved upgrade documentation in AGENTS.md with GitHub release URLs
and consolidated summary format guidance.
Co-Authored-By: Claude <noreply@anthropic.com>
* Fix erroring out by deleting the base's value of temperature & top_p, honoring the request.
---------
Co-authored-by: Claude <noreply@anthropic.com>
* Initial plan
* Use IFileSystemService instead of vscode.workspace.fs in trajectory export
Co-authored-by: zhichli <57812115+zhichli@users.noreply.github.com>
* Use subAgentInvocationId to determine agent name for trajectories
Changed the trajectory agent name logic to use subAgentInvocationId presence
instead of subAgentName fallback. Now uses 'subagent' when subAgentInvocationId
is defined, and 'GitHub Copilot Chat' for the main agent.
* Revert "Use subAgentInvocationId to determine agent name for trajectories"
This reverts commit d045a1de6fc25a8e9abebf08bfdb607d4c9014b9.
* docs: Clarify service preference over extension APIs in copilot-instructions
Added guidance to prefer internal services (IFileSystemService, ILogService)
over VS Code extension APIs, with reasoning for testability and cross-platform
support.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: zhichli <57812115+zhichli@users.noreply.github.com>
Co-authored-by: Zhichao Li <zhichli@microsoft.com>
* Run local eslint rules directly as typescript
Remove the need to use `tsx`
* Bump required node version
Matches the version we use in vscode repo
* Align node versions
* Always use `/`
* Try fixing windows
* Try another fix for windows
* Fix new rule after merge
* Include completions core test during PR build
* Implement a FakeCopilotTokenManager to run completions core test without a GitHub token
* Small naming fix
* Run tests also under Windows
* Fix running Windows tests
* Extract server.json from NuGet package during assisted install
* Use .NET CLI as much as possible
* Add tests, use GitHub Actions for .NET setup
* Localize user facing strings
* Update src/extension/mcp/vscode-node/nuget.ts
* Update src/extension/mcp/vscode-node/commands.ts
* switch to enum
* Use IFetcherService for npm, PyPI, and Docker Hub, use local package source for NuGet
* split up PR and CI builds:
- PR should only attempt to restore cache
- CI should only ensure node_modules
* also mkdir -Force
* pr workflow should still run on merge queue