* Update @vscode/codicons to version 0.0.46-13 in package.json and package-lock.json
* Add 'developer-tools' icon to codicons library
---------
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
* launch: build copilot in compile; wait for CDP in launch.sh
Two related improvements to the agent dev-loop workflow:
- npm run compile now builds the Copilot extension in parallel with the
rest of the client, mirroring the structure of npm run watch. Previously
only the watch path included extensions/copilot, so a one-shot build
left the Copilot extension stale.
- .agents/skills/launch/scripts/launch.sh now runs preLaunch.ts in the
foreground (surfacing any failure synchronously with a log tail), then
launches Code OSS with VSCODE_SKIP_PRELAUNCH=1 and blocks until the
renderer's CDP endpoint responds (90s timeout) before printing the JSON.
Previously the script returned in ~1s while Electron was still mid-
bootstrap, which made it racy for agents driving the workbench via
@playwright/cli and could let an early-dying child go unnoticed.
SKILL.md updated to drop the now-unnecessary attach retry loop and to
document the new error-surfacing behavior.
(Written by Copilot)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* launch: clarify launcher's actual external deps in SKILL.md
Per code review, `launch.sh` does not invoke `lsof` or `jq` itself
those are used only by the example caller snippets. Reword the
prerequisites bullet so it reflects what the script actually requires
(`rsync`, `curl`, `nohup`, Node) and notes `jq` / `lsof` as optional
for the caller-side examples.
(Written by Copilot)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Bump Agent host Copilot CLI to 1.0.48
* Copilot Cli to 1.0.48 sdk to 1.0.0-beta.4
* Exclude pvrecorder, foundry-local-sdk, mxc-bin
* Parity for copilot/sharp
* Add back missing binary
* Update dependencies for public copilot cli sdk
* remove icu-native.node for now
* Remove win32-native.node, icu-native.node
* Bump both internal and public to 1.0.49
* Only copy required Copilot SDK prebuilds
* Fix Copilot SDK native binary handling
* draft version
* draft version
* adding mxc for windows sandboxing
* Potential fix for pull request finding
Merging readwritePaths
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* cleaning up PR
* cleaning up
* Run Windows MXC commands directly
* Pin MXC SDK lockfiles
* fixing tests and cleaning up env variables
* adding a flag for windows sandboxing as its experimental
* adding a flag for windows sandboxing as its experimental
* adding a flag for windows sandboxing as its experimental
---------
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* feat(copilot): opt-in HTTP cache for the Node fetch fetcher
Adds an opportunistic cache support to the Copilot Node fetch path. The cache
is strictly opt-in per request and composes with the existing VSCode proxy
and CA-injection patch.
- `__vscodeCreateFetchPatch({ interceptors })` lets the extension host
build a second proxy-aware `fetch` with extra undici interceptors. The
default `__vscodePatchedFetch` is unchanged.
- `NodeFetchFetcher` builds an undici cache interceptor once at
construction time and uses the factory to produce a `cachedFetch` that
routes through both the proxy patch and the cache. Requests are tagged
with an internal `__copilotCachePatch` marker (stripped before fetch);
unmarked requests keep going through the regular patched fetch. When
the host lacks the factory, caching is silently disabled so requests
never bypass the proxy patch.
- `FetchOptions.cache?: boolean` — opportunistic hint. Fetchers without
cache support ignore it; fallback to other fetchers is unaffected.
- `Response.cacheStatus` and `FetchTelemetryEvent.cacheStatus`:
`'hit' | 'stale-hit' | 'revalidated' | 'miss' | 'bypass'`.
- New setting `github.copilot.advanced.debug.nodeFetchCache`:
`'off' | 'memory' | 'persistent'` (default `'memory'`). `'persistent'`
uses undici's SQLite store under the extension's global storage
(`undici-cache.v1.sqlite`) when available, otherwise falls back to
memory.
- New `taggedCacheInterceptor` wraps `undici.interceptors.cache` and
stamps a private `VSCODE_CACHE_STATUS_HEADER` on the response so the
base fetcher can read the outcome without parsing undici internals.
- `BaseFetchFetcher` exposes an overridable `_buildRequestInit` hook and
reports `cacheStatus` on `Response` and `fetchTelemetry`.
Notes
- No behavior change for callers that don't set `cache: true`.
- The cache interceptor is constructed once per fetcher instance; the
composed dispatcher chain is reused so connection pooling is preserved.
- Depends on https://github.com/microsoft/vscode-proxy-agent/pull/100
For https://github.com/microsoft/vscode/issues/308310
* fix: undici integration tests
- drop the `age` header gate from classify(): undici's cache interceptor
only adds if-modified-since / if-none-match when revalidating a stored
entry, so `state.conditional` alone is a sufficient signal. The age header
is not guaranteed on a revalidated 200, which caused 'revalidated' to be
misreported as 'miss'.
- the etag integration test used
`cache-control: max-age=0, must-revalidate`, which undici treats as
already-stale on arrival and refuses to store (cache-handler.js bails when
`now >= absoluteStaleAt`), so there was nothing to revalidate on the second
call. Switch the origin to `public, max-age=60` and pass
`cache-control: no-cache` on the second request to drive undici's
needsRevalidation() path, which dispatches with if-none-match and serves
the cached body on 304.
* chore: fix lint
* chore: cleanup cache marker in favor of function arg
chore: update @vscode/codicons to version 0.0.46-11 in package.json and package-lock.json
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Replace @vscode/ripgrep with @vscode/ripgrep-universal which bundles all platform binaries in a single package. Non-target platform binaries are stripped at packaging time via getRipgrepExcludeFilter.
- Add shared rgDiskPath() helper in src/vs/base/node/ripgrep.ts
- Convert all ripgrep consumers to use the async helper
- Add getRipgrepExcludeFilter for build packaging
- Update prepareBuiltInCopilotRipgrepShim for new bin layout
- Update eslint allowed-modules and require-interceptor aliases
- Fix platform mapping for Alpine + armhf
- Handle arch-specific binaries in macOS universal build / verify-macho
chore: update @vscode/codicons version to 0.0.46-10 in package.json and package-lock.json
Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
* build: bump @vscode/gulp-electron to 1.41.3
Brings in microsoft/vscode-gulp-electron#42 which adds retry-with-backoff
around transient network errors when downloading Electron, fixing build
breaks like getaddrinfo ENOTFOUND release-assets.githubusercontent.com.
NOTE: package-lock.json will be regenerated once 1.41.3 is published.
Do not merge until then.
* Sync package-lock.json with package.json after updating @vscode/gulp-electron to 1.41.3.
* agentHost/claude: post-Phase-4 cleanup
- roadmap.md: mark Phase 4 as DONE, link merged PR #313780.
- phase4-plan.md: record live-system smoke completion in §7.8;
disabled-gate run skipped (covered by unit tests + env-var guard).
- claudeAgent.test.ts: drop gratuitous 'as unknown as' cast in the
CCAModel fixture (literal already matches CCAModelBilling exactly;
plan §7.4 forbids unsafe casts in tests).
* agentHost/claude: lock Phase 5 implementation plan
Handoff plan for Phase 5 (replace 7 throwing stubs in claudeAgent.ts).
Locked against post-PR-#313841 reality (provisional sessions,
onDidMaterializeSession, 30s empty-session GC) and the IAgent contract
on origin/main.
Decisions captured:
- Non-fork createSession is synchronous and in-memory; fork deferred
to Phase 6 (throws TODO).
- IClaudeAgentSdkService surface mirrors IAgent (no dir parameter on
listSessions); SDK loader caches resolved module, retries on
failure, logs once.
- listSessions joins SDK enumeration with workbench session DB
metadata via ISessionDataService; per-entry try/catch resilience.
- shutdown() routes per-session teardown through the same
SequencerByKey<string> used by disposeSession() so concurrent
shutdown/disposeSession cannot double-dispose a wrapper in Phase 6.
- 14 unit tests defined (12 lifecycle + 2 resolved-config), including
log-once contract and shutdown/disposeSession race guard.
* agentHost/claude: Phase 5 — IAgent provider skeleton
Lands the ClaudeAgent IAgent provider behind the
'chat.agentHost.claudeAgent.enabled' setting (env gate
VSCODE_AGENT_HOST_ENABLE_CLAUDE=1). Pins
@anthropic-ai/claude-agent-sdk@0.2.112 in workspace + remote/.
Implemented in this phase:
* createSession - non-fork, in-memory wrapper only. Honors
config.session for restore. The fork path and SDK session
creation are deferred to Phase 6.
* listSessions - SDK is source of truth; per-session DB read
is a best-effort overlay (failure never excludes an entry).
* disposeSession / shutdown - routed through a per-session
SequencerByKey to serialize teardown.
* getDescriptor, getProtectedResources, models,
onDidSessionProgress, setClientCustomizations,
setClientTools, onClientToolCallComplete,
setCustomizationEnabled, authenticate, respondTo*Request -
minimal Phase-5 wiring.
Stubbed for Phase 6 (throw async 'TODO: Phase 6'):
sendMessage, abortSession, changeModel, getSessionMessages,
plus the createSession fork path.
Tests: 29 unit tests in claudeAgent.test.ts cover the
createSession restore-id path, listSessions overlay resilience,
dispose serialization, and stub surfaces.
Note: provisional / onDidMaterializeSession is intentionally
omitted in Phase 5 (see plan section 3.3.1) - the workbench needs
an immediate sessionAdded until the agent has real materialization
work, which arrives in Phase 6 alongside SDK query() startup.
* agentHost/claude: Phase 6 — sendMessage, single-turn, no tools
Implements the Phase 6 plan: provisional sessions materialize on first sendMessage, route a single-turn prompt through the Anthropic Claude Agent SDK's WarmQuery, and stream SDKMessages back as protocol AgentSignals via a pure mapSDKMessageToAgentSignals reducer.
Tools remain denied (canUseTool: 'deny'); fork moves to Phase 6.5; Plan Mode UI moves to Phase 7.
Highlights:
- ClaudeAgent.sendMessage routes through _sessionSequencer to collapse concurrent first sends into one materialize + N ordered sends.
- _materializeProvisional has two abort gates (post-startup + post-customizationDirectory write) so disposeSession landing mid-materialize cannot leak a WarmQuery subprocess.
- ClaudeAgentSession owns the prompt iterator + per-turn deferreds; mapSDKMessageToAgentSignals is a pure reducer with state owned by the session.
- IClaudeAgentSdkService gains startup() alongside listSessions().
Tests: 43 unit + 2 proxy-backed integration. Council-review fixes (C1 dispose race, C2 missing integration test, S1 cwd-less ratification) included.
* agentHost/claude: address PR review (listSessions resilience, dispose abort)
Two Copilot-reviewer comments on #314216:
1. listSessions: wrap _sdkService.listSessions() in try/catch. AgentService.listSessions fans out across providers via Promise.all; an SDK dynamic-import failure would otherwise nuke every other provider's session list. Now logs and returns [].
2. dispose: abort _provisionalSessions AbortControllers before super.dispose(). Previously a racing first sendMessage parked inside _writeCustomizationDirectory could pass the materialize abort gates and call _sessions.set on a disposed DisposableMap, orphaning the WarmQuery. Aborting first triggers the existing post-customization-write abort gate, which asyncDisposes the WarmQuery.
Tests: 2 new regressions (listSessions empty on SDK throw; agent.dispose() during racing materialize disposes the WarmQuery). 45/45 unit + 2/2 integration pass.
Picks up xterm.js commit 08ae141 (xtermjs/xterm.js#5826) which adds dispose / hasRenderer guards in OverviewRulerRenderer and cancels its pending requestAnimationFrame on dispose. This addresses the long-standing 'Cannot read properties of undefined (reading ''dimensions'')' crash tracked in microsoft/vscode#303546.
* Add CopilotAPI service & plan for Claude
This service can be used to send requests to CAPI which we will need as we shim requests from agents to CAPI.
* Add CopilotAPI service & plan for Claude
This service can be used to send requests to CAPI which we will need as we shim requests from agents to CAPI.
* Clarify signal propagation behavior in ICopilotApiServiceRequestOptions documentation