Skip to content

[pull] main from microsoft:main#1281

Merged
pull[bot] merged 33 commits into
code:mainfrom
microsoft:main
May 21, 2026
Merged

[pull] main from microsoft:main#1281
pull[bot] merged 33 commits into
code:mainfrom
microsoft:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented May 21, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

connor4312 and others added 30 commits May 21, 2026 09:14
…317791)

When a terminal is being disposed, _resizeDebouncer is set to undefined
before the dispose sequence completes. If a configuration change event
fires during disposal (e.g. from terminalSuggestConfiguration
registration), setVisible -> _resize is called and crashes trying to
call .resize() on undefined.

Add _resizeDebouncer to the early-return check at the top of _resize
and replace the non-null assertion with optional chaining as a safety
net.

Co-authored-by: vs-code-engineering[bot] <122617954+vs-code-engineering[bot]@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
More robust css rules for issue reporter
…317803)

* build: persist ADO buildId/definitionId on published build records

Adds Build.BuildId and System.DefinitionId from the ADO build run to the per-build document upserted into the Cosmos DB builds container (one per quality). Consumed by microsoft/vscode-release-server to render direct 'Open build pipeline in Azure DevOps' links per release without relying on a runtime ADO REST lookup by sourceVersion.

Both fields are validated to be positive integers; if missing (e.g. local dev runs) they are omitted from the document. The dashboard handles missing fields gracefully via its existing fallback lookup, so this is non-breaking.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* build: simplify - read env vars directly, drop test/package.json changes

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* build: persist ADO buildId/definitionId on published build records

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…messages (#317812)

Revert terminal steering utility model

This reverts PR #317389.

(Written by Copilot)

Co-authored-by: Copilot <223556219+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 microsoft/vscode-proxy-agent#100

For #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
…ty-bare-dir-entry

cli: skip bare top-level directory entries when extracting archives
* feat: enhance session customization handling and state management across agents

* refactor: simplify customization sync logic in CopilotAgent

* fix: guard initial customization publish for disposed sessions

Co-authored-by: DonJayamanne <1948812+DonJayamanne@users.noreply.github.com>

* feat: improve initial customization handling during session creation

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Our current implementation has some bugs that can hide changes. However even after fixing these, I'm not 100% confident a unexpected change wont sneak through. Best to make users aware of this while also trying to prevent this
feat(debug): add 'Copy All' action to Watch view context menu
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* 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>
Co-authored-by: vs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>
Show a warning when showing the rendered markdown diff
* Chronicle: Add cost-tips command

* feedback updates
* Browser: support element selection in subframes

* feedback

* graceful handling after frame disposal
* Long context pricing

* Fix
…t sessions (#316907)

Fix duplicate terminal tool render from pastTenseMessage

For agent host sessions, terminal tool calls were having pastTenseMessage
set on the serialized history invocation, which the renderer then displays
alongside the terminal command — causing the past-tense message to appear
to duplicate the main message.

The live finalize path already suppressed pastTenseMessage for terminal
tools using a broader check (terminal content URI OR tool kind). The
history replay path (completedToolCallToSerialized) was only checking the
terminal content URI. Align them so pastTenseMessage is suppressed for
terminal tools detected either way.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* refactor and add tests for agentCustomizationContentExpander

* fix tests
connor4312 and others added 3 commits May 21, 2026 15:10
Long lines in read_file output were getting pruned by the token-budget
prompt renderer, so the agent saw an empty result and looped — adding
unbounded session log size each retry. Truncate any line over 2000
characters at the source with a `[truncated]` marker, and append a
notice when any line was truncated so the model knows the data is
abbreviated rather than missing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…versationid-to-tool-usage

Add GHCP telemetry correlation fields for tool responses and response turns
…317856)

* agent-host: stop config pickers flashing during resolveSessionConfig

When a user changed a session-config picker (isolation, branch, autoApprove,
mode, claude permission mode), all schema-driven pickers visually disappeared
and reappeared while the async resolveSessionConfig round-trip ran.

Root cause: NewSession.setConfigValue wiped the cached schema to
{ properties: {} } during the optimistic update, so every well-known
mode/autoApprove guard returned false and hid its picker until the new
schema arrived ~200-500 ms later.

Fix:

- Preserve the existing schema in NewSession.setConfigValue.
- Introduce an observable isResolvingConfig on NewSession, owned by
  resolveConfig's finally, with begin/endResolveConfigSync helpers for
  the synchronous-set-before-event path and the no-connection early-
  return path.
- Expose IObservable<boolean> isSessionConfigResolving(sessionId) on
  IAgentHostSessionsProvider; constObservable(false) for any session
  that isn't the in-flight new session.
- Distinct from session.loading: the latter also stays true while config
  is complete-but-required-values-missing, where pickers must remain
  interactive.

Every picker that mutates session config now disables on this observable:
generic per-property chips, the mode/claude permission mode enum
pickers, the autoApprove permission action item, the mobile bottom-sheet
mode picker, and the mobile combined Mode+Model new-session chip.

The autoApprove permission picker also gates the delegate's
setPermissionLevel on the same observable, because ActionWidgetDropdown
opens via Enter/Space directly on its label and CSS pointer-events: none
does not block keyboard activation.

A defense-in-depth bail in setSessionConfigValue drops second-arrival
changes on a new session while a resolve is already in flight.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* agent-host: update FakeProvider mocks for isSessionConfigResolving

Two unit-test FakeProvider mocks were missing the new isSessionConfigResolving
method that the production AgentHostPermissionPickerDelegate and
AgentHostSessionEnumPicker (claude permission mode) now call. Add a
no-op constObservable(false) implementation to both so the rendered
delegate / picker code paths don't TypeError.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* agent-host: address Copilot review feedback on PR #317856

Move _isResolvingActiveSessionConfig derived initialization into the
constructor so its body safely closes over parameter-property service
references (avoids depending on class-field/parameter-property
initialization ordering).

Split the picker trigger's read-only (permanent: <span> + aria-readonly)
state from the resolving state (transient: <a> stays focusable, slot
gets .disabled class, aria-disabled is set). Click is blocked at the
picker level by an in-flight resolve check in _showPicker.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pull pull Bot locked and limited conversation to collaborators May 21, 2026
@pull pull Bot added the ⤵️ pull label May 21, 2026
@pull pull Bot merged commit 650352e into code:main May 21, 2026
10 of 23 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.