Skip to content

Sync upstream/main + Copilot v0.57.0 release#10

Merged
damnthonyy merged 661 commits into
mainfrom
sync/upstream-1.129
Jul 8, 2026
Merged

Sync upstream/main + Copilot v0.57.0 release#10
damnthonyy merged 661 commits into
mainfrom
sync/upstream-1.129

Conversation

@damnthonyy

@damnthonyy damnthonyy commented Jul 8, 2026

Copy link
Copy Markdown
Owner

Sync upstream/main + Copilot v0.57.0

Periodic sync of microsoft/vscode upstream into the fork, preserving the Headroom proxy integration and install tooling.

Upstream sync

  • Merges 660 upstream commits (VS Code editor 1.127.01.129.0).
  • Bundled Copilot Chat extension: 0.56.00.57.0.
  • 1232 files changed. Only conflict was extensions/copilot/package.json, resolved manually.

Conflict resolution (extensions/copilot/package.json)

  • version: took upstream 0.57.0 (new release version).
  • engines.vscode: kept the fork's ^1.125.0 (deliberate "broader compatibility" choice from bd6c147), instead of upstream's ^1.129.0.

Fork customizations preserved

  • Headroom proxy integration (11 refs across 8 files, incl. custom proxyUtils.ts, fetcher service, HTTP-transport forcing when HeadroomProxyUrl is set).
  • Dockerfile.build-vsix, scripts/install-wsl.sh, scripts/install-macos.sh.

Marketplace override

  • Marketplace GitHub.copilot-chat stable is 0.48.1; VSIX at 0.57.0 overrides it.

Verification

  • Dockerfile.build-vsix build succeeds end-to-end (postinstall + esbuild + vsce package) → copilot-proxy.vsix packaged (87 files, ~39 MB), no build errors.
  • VSIX metadata confirmed: name=copilot-chat, publisher=GitHub, version=0.57.0, engines.vscode=^1.125.0.

roblourens and others added 30 commits July 4, 2026 21:37
* agentHost: link file references in responses

Teach Copilot Agent Host models to emit absolute-path Markdown links and resolve them at render time so streaming responses retain native link labels and remote filesystem routing.

Fixes microsoft#315183

(Written by Copilot)

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

* agentHost: link folder references in responses

Extend the Agent Host response-formatting prompt so existing workspace folders are linked consistently alongside files and symbols.

(Written by Copilot)

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

* agentHost: refine workspace link instructions

Clarify folder and symbol link examples in the Agent Host response-formatting prompt.

(Written by Copilot)

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…t#324328)

Share startup session caching across local and remote agent hosts

Hoist the session-summary persistence layer from RemoteAgentHostSessionsProvider
into BaseAgentHostSessionsProvider so the local agent host also shows its
sessions immediately on Agents-window startup, before the in-process agent host
has started and the first listSessions() round-trip returns.

- Base now owns serialize/deserialize, _metaByRawId/_cacheDirty bookkeeping, and
  _loadCachedSessions()/_persistCache(), gated behind an explicit
  _enableSessionCachePersistence(storageKey) opt-in that subclasses call at the
  end of their constructor (once identity fields needed by createAdapter are set).
- A _shouldTrackSessionCacheChanges() hook preserves the remote provider's
  offline (_unpublished) gate.
- Remote provider drops the migrated code and just supplies its per-authority
  key; local provider supplies the fixed key localAgentHost.cachedSessions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* agentHost: add stalled tool call telemetry

Track tool calls that remain blocked for five minutes and report when they later complete, including blocker and tool source metadata.

(Written by Copilot)

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

* agentHost: measure time after stall accurately

Start a dedicated stopwatch when the stall event is emitted so confirmation latency is not included in the recovery duration.

(Written by Copilot)

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: single-pane detail-panel layout for the Agents window

Add an experimental `sessions.layout.singlePaneDetailPanel` setting (default off) that docks the detail panel (auxiliary bar) inside the editor part, so a single editor tab bar spans the editor content and the docked panel. Introduces a custom Changes (multi-diff) editor, Files/Browser tabs, and a "+" add-tab menu, with the Changes view and diff-stats split into standard vs single-pane subclasses chosen at startup.

The redesign uses a mode-based architecture: all single-pane parts, editors, serializers, actions and views are registered/gated behind the setting via `IAgentWorkbenchLayoutService.isSinglePaneLayoutEnabled` (the single source of truth), so the standard Agents-window layout is unchanged when the setting is off.

Core editor support: `EditorPart.setContentRightInset` (concrete class, not the public `IEditorPart` interface) insets only right-edge groups so the tab bar stays full-width; a generic `MenuId.EditorTabsBarAddTab` renders a core-owned "+" dropdown at the end of the tab strip.

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

* sessions: address CCR feedback on single-pane layout

- empty-file editor: register a touch Gesture target and handle Tap (iOS) in addition to click, and set `touch-action: manipulation` to avoid the tap delay.

- docked detail panel border: use `var(--vscode-strokeThickness)` instead of a hardcoded 1px.

- drop the internal `[Option A]` design-discussion marker from comments across workbench.ts / style.css / sessionConfig.ts.

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

* sessions: fix use-before-init in DetailPanelController

The _activeEditorObs / _auxBarVisibleObs field initializers referenced the constructor-injected _editorService / _layoutService, which run before the parameter properties are assigned (TS2729, caught by tsc in CI but not by the tsgo typechecker). Move their initialization into the constructor body.

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

* test: update blocks-ci screenshot hashes

Refresh the committed blocks-ci-screenshots.md to the current CI-rendered image hashes (CodeEditor / InlineChatZoneWidget fixtures). These are bare editor-widget fixtures not affected by this PR's editor-tab changes; the drift is from the screenshot service re-render.

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

* sessions: make SessionChangesService resolvable without the workbench layout service

SessionChangesService is a DI singleton also instantiated in component fixtures / unit tests, which do not register IAgentWorkbenchLayoutService. Read the single-pane setting via IConfigurationService (available everywhere) instead, so resolving ISessionChangesService no longer fails with 'depends on layoutService which is NOT registered'. The layout service remains the single source of truth for contributions that run only in the real Agents window.

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

* test: re-sync blocks-ci screenshot hashes

Update the committed hashes to the current CI render (the 6 CodeEditor / InlineChatZoneWidget fixtures shifted with the merged upstream editor changes).

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

* sessions: fix single-pane layout bugs from layout audit

Grid/sizing: persist the logical editor width (excluding the docked panel) so the Sessions Part no longer shrinks by the panel width on every reload; clamp the stored docked width to its minimum and yield to the editor's minimum in narrow windows; keep the editor grid leaf visible when only the docked aux bar toggles.

Editor content inset: recompute on group maximize/restore so a maximized non-right group is not rendered under the docked panel, and re-layout the docked panel after the un-maximize resize.

Controllers: DetailPanelController shows Changes while the editor is maximized (agreeing with the D5 rule) and classifies editor types (file/empty-file -> Files, Changes -> Changes, Browser -> hidden, other -> preserve); the LayoutController no longer auto-reveals the Changes view on editor open in single-pane, so existing sessions keep the 'never auto-open' rule. Docs: fix stale method references in LAYOUT.md.

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

* sessions: single-pane detail panel refinements and controller merge

Merge the single-pane detail/tab controllers into the layout controller,
add a dedicated Toggle Details command, refine R1 (transition-triggered
editor hide), default a created session to the Changes editor with the
detail closed, reveal the docked editor part for created sessions, and
remove the docked reveal-sync suppression mechanism.

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

---------

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

Follow-up to microsoft#324348 (which auto-merged before the review fixes landed):

- remove dead singlePaneEditorTitleAuxiliaryBarOrder const + void statement
- remove the unused ICommandService dependency from the base layout
  controller (and its now-dead test-harness stub)
- update SINGLE_PANE_SCENARIOS.md and desktopSessionLayoutController.md for
  the merged controller, transition-triggered R1, and Toggle Details command

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

The Copilot shell tools (bash/powershell) carry a `description` argument
describing why the command is being run. Surface it as the tool call's
`intention` in the Agent Host Protocol and render it on terminal tool cards.

- Producer: `getShellIntention()` reads the shell tool's `description` arg and
  sets `ChatToolCallStart.intention` on both the live path
  (copilotAgentSession) and history replay (mapSessionEvents). Scoped to shell
  tools so the `task` tool's own `description` is not mistaken for an intention.
- Protocol/adapter: new optional `IChatTerminalToolInvocationData.intention`,
  threaded from `tc.intention` in `buildTerminalToolSpecificData`.
- UI: the collapsed terminal tool row shows "<intention> `command`" instead of
  "Ran `command`", laid out so the intention and command stay inline and only
  divide/truncate the space on overflow.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…el-picker-implementation-69c82b16

Group agent-host models by provider in the picker
…324411)

Gate the blocked-sessions titlebar widget indicator (the 'N sessions require input' pill and dropdown) on productService.quality !== 'stable' so the feature stays disabled in stable/public builds. The underlying BlockedSessions model uses lazy observables, so no GitHub CI/PR work runs when the feature is off.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Connects the Automations feature to existing VS Code surfaces:
- AI Customizations sidebar entry gated on ChatAutomationsEnabledContext
- Overview tile with automation count badge
- Deep-link: sidebar click navigates directly to Automations tab
- Feature gate when-clauses on all entry points
- Allow a way to set model without persisting globally
* sessions: single-pane layout controller cleanup (no workbench.ts)

Base/single-pane layout controller changes assembled without the
workbench.ts side-pane Strategy extraction:
- R1: remove the base-controller single-pane leak via Template Method hooks
  and override them in SinglePaneDesktopSessionLayoutController.
- Additional single-pane controller / editor contribution refinements and
  spec updates (LAYOUT.md, SINGLE_PANE_SCENARIOS.md, sessions SKILL.md).

Excludes workbench.ts, sidePaneLayoutStrategy.ts and workbench.test.ts by design.

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

* sessions: capture editor-part hidden state eagerly to fix side-pane restore race

The per-session editor-part hidden state was captured lazily in
_saveWorkingSet by reading live editor visibility at switch-away time.
That races the switch derive (activeSessionForWorkingSet lags the raw
active session), so the incoming session's layout could flip the outgoing
session's recorded state to visible — reopening a side pane the user had
closed when switching back to it.

Capture it eagerly via a [B2] onDidChangePartVisibility(EDITOR_PART)
listener (mirroring the [B1] panel capture), guarded by single-session
and not-restoring, and drop the racy lazy read.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: add turn status pills for agent sessions

Adds 'changes' and 'preview' pills that surface a turn's file changes and previewable Markdown/HTML files. They float above the chat input while a turn streams and move into the completed response. Agent-host sessions only, gated by the new 'chat.turnStatusPills' object setting (both pills off by default).

* fix component fixture typecheck: use invokeFunction to access config service

* chat: vertically center the preview pill resource label
Removes the command registration and its dead telemetry helper.
Code blocks in chat markdown only carry a bottom margin and rely on the
previous element's bottom margin for the space above them. Inside lists,
that margin is collapsed away to keep list items tight, so a code block
following list content ended up with no space above it (cramped above,
loose below).

Add a matching top margin to code blocks that follow a list or are nested
in a list item. Margin collapsing leaves the other cases (after a
paragraph, first child, etc.) unchanged.

Also add a CodeBlockInList chat widget fixture covering both DOM shapes,
and register IChatOutputRendererService + IAiEditTelemetryService in the
chat fixture services so markdown code blocks can render in fixtures.

(Written by Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ication assertions) (microsoft#324291)

fix flaky Copilot customizations integration test

The "session/customizationsChanged" exact-count assertion raced against
the eventually-consistent customization discovery. A pre-discovery empty
snapshot (customizations: []) can be delivered after clearReceived(),
inflating the count to 2. Match/count only settled (non-empty)
notifications instead.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…tive-deps

Guard agent-SDK release build against missing native optional-dep packages
* Only show completion feedback command for paid users

The 'Send Copilot Completion Feedback' command is attached to every
inline completion list, which surfaces the feedback button for all
users including free and unauthenticated ones. This has been a source
of low-signal issue-tracker spam.

Gate the command so it is only offered when the Copilot token belongs
to a paid user (not free and not no-auth).

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

* Fix completion feedback token shadowing

Rename the Copilot auth token local so it does not shadow the cancellation token used by inline completion generation.

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

---------

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
…tomations-experiment-setting

add exp prop for chat.automations.enabled
…rosoft#324480)

* fix: adjust bottom panel margin behavior and improve layout consistency

Co-authored-by: Copilot <copilot@github.com>

* fix: improve bottom panel height calculation and update comment for clarity

Co-authored-by: Copilot <copilot@github.com>

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
meganrogge and others added 29 commits July 8, 2026 18:06
…e setting private (microsoft#325001)

* agentHost: move IAgentHostEnablementService to platform layer and make setting private

- Moves IAgentHostEnablementService interface and implementation from
  sessions/ to platform/agentHost/common and platform/agentHost/browser
- Merges the two agentHost config contribution files into the service
  files, making AgentHostEnabledSettingId an unexported module-private
  constant (only the service reads the config value at runtime)
- Removes the isAgentHostEnabled() helper from agentService.ts
- Adds AGENT_HOST_ENABLED_CONTEXT_KEY (RawContextKey) set eagerly by
  the service, replacing ad-hoc ContextKeyExpr.equals('config.xxx')
  expressions in when clauses
- All consumers (localAgentHostService, editorRemoteAgentHostServiceClient,
  workbench contributions, sessions providers) now inject and use
  IAgentHostEnablementService instead of reading the config directly

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

* agentHost: stub IAgentHostEnablementService in agentHostChatContribution tests

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
AgentIntent: add final background todo pass and model eligibility guard
…ons (microsoft#324968)

Fix padding on tabs with left action positioning
Mirror the Copilot extension's restricted `toolCallDetailsExternal` /
`toolCallDetailsInternal` events from the agent-host process. The per-turn
tool-call aggregate (toolCounts, totalToolCalls, parallel-round counts,
availableTools, model, responseType, numRequests, turnIndex) is accumulated
across the turn's `assistant.message` rounds and emitted on turn completion,
main-agent only, via the rt-gated restricted telemetry surface.

Fields not surfaced at the agent-host turn boundary (tool-definition token
count, per-round token/char counts, invalid-round count, session/turn
durations) are omitted. Continues the "entire trajectory" restricted
telemetry migration (microsoft/vscode-internalbacklog#8247).
* Catch up to ahp 31139a6

* tests

* adpt for fetch turns related changes

* Update from shellExit to terminalComplete

* use chat uri for fetchturns integration test
…icrosoft#324858)

* Import local chat history into agent host session as editable turns

* Feedback fixes

* handle cancel

* test fix
…icrosoft#324923)

editor: fix NES insertion overlay negative height at the source

InlineEditsInsertionView built the overlay Rect height by subtracting the
model-derived vertical trims (topTrim/bottomTrim, computed synchronously from the
inserted text) from the ghost-text view-zone height, which is measured
asynchronously (onComputedHeight). Right after a suggestion is triggered / while
the view zone is (re)created the measured height is transiently just a single line
while the trims already reflect the full multi-line insertion, so height went
negative and new Rect(...) threw "Vertically offset by N".

Compute the overlay height synchronously from the model instead, using the same
line height and leading/trailing blank-line accounting as the trims (content lines
* line height). This keeps top/height/bottom consistent and makes the height
structurally positive, so the transient negative-height case can no longer occur
and no guard is needed.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
- Omit `turnIndex`: agent-host turn ids are UUIDs (`generateUuid()`), so
  `Number(turnId)` was always NaN and the measurement was silently dropped.
  No turn ordinal is available at this boundary, so omit it like the other
  unavailable fields (it does not land for the extension either).
- Count every main-agent `assistant.message` round for `numRequests`, not
  only rounds that carried tool requests, to match the extension's
  `numRequests = toolCallRounds.length` (which includes the final tool-free
  response round).
- Use a realistic UUID turn id in the unit test.
…t#324756)

* Enhance count badge styles for consistency across workbench components

* Fix missing semicolon in count badge wrapper style

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
Change the default `agents.voice.voice` from Victoria to Maya, and align
the `_getVoice()` fallback accordingly.

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

Make file explorer title respect associated folder casing
…lDetails cardinality

Two parity gaps found while auditing the AHP restricted telemetry against the
extension (`sendToolCallingTelemetry` and the `conversation.messageText`
emitters) and the CTS column mapping:

- `conversation.messageText` sent the SDK turn UUID in `turnIndex`, but the
  extension emits a numeric turn ordinal (`conversation.turns.length`) and CTS
  parses `turn_index` with `parseInt`, so our UUID landed empty. Plumb a
  monotonic 0-based turn ordinal through the session and emit it (stringified)
  so `turn_index` populates like the extension's.
- `toolCallDetails` no-op'd when the turn made no tool calls, but the extension
  emits it for every turn that had tools available (empty `toolCounts`).
  Gate on `availableTools.length` to match its row cardinality.
Wire AHP-backed MCP server start and stop through agent host sessions, surface session-aware controls in MCP UI, and update MCP editor affordances to reflect active agent-host state.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add credits used to quota snapshot

* fix tests
…ration in agents window (microsoft#325022)

- SessionsDefaultConfiguration now extends the workbench DefaultConfiguration
  (with caching) instead of the base platform one, so experiment-driven default
  overrides for settings like chat.agentHost.enabled are persisted to disk and
  read back immediately on subsequent startups - same as the editor window
- Pass IConfigurationCache and IBrowserWorkbenchEnvironmentService through to
  the ConfigurationService constructor in both desktop and web sessions mains
- hasCachedConfigurationDefaultsOverrides() now delegates to
  defaultConfiguration instead of hardcoding false
- reloadConfiguration() now always reloads defaults first via a new
  reloadDefaultConfiguration() helper; when called with
  ConfigurationTarget.DEFAULT it returns after that, matching the editor
  window's behaviour

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

* Add open/close motion to picker menus in chat input area

* Ensure changes are gated behind modern UI setting and respect reduced motion preferences

* Address PR feedback
* enable settings as experiment

* update
Ensure MCP list context menu actions filtered out for active session servers are still registered for disposal.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Drop the temporary ToolResultShellExitContent restoration and rely on upstream TerminalComplete content for shell command completion metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
agentHost: emit restricted toolCallDetails per-turn aggregate telemetry
Adjust collapsible view chevron positioning
* Fix auto-approve flicker in agent host sessions list

When the agent host provider auto-approves a client tool call (bypass
approvals / auto-approve setting), the invocation briefly entered the
WaitingForConfirmation state, flipping the session's needs-input state
and flickering "Input needed" in the sessions list before reverting.

Add an out-of-band `preApproved` reason on IToolInvocation that the
agent host sets when a call is already auto-approved, so the invocation
transitions straight to executing without ever surfacing a pending
confirmation. A preToolUse hook that returns `ask` still forces
confirmation and is never overridden by `preApproved`.

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

* Make preApproved test observe publish-time state

The recorder autorun was attached after invokeTool had already resolved,
so it only ever saw the terminal state and could not detect a transient
WaitingForConfirmation. Snapshot the invocation's state at publish time
(before awaiting completion) so the assertion actually guards against the
flicker regression, and confirm-to-unblock if it regresses so the failure
is a clean assertion rather than a timeout.

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

---------

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

Add AHP MCP server lifecycle controls
…open (microsoft#325024)

* sessions: dismiss blocked-sessions dropdown on Escape and quick pick open

The blocked-sessions dropdown in the Agents window titlebar was hard to
dismiss: its only Escape handling lived in the context view's onDOMEvent,
which fires only when focus is inside the dropdown.

- Add a SessionsBlockedSessionsVisibleContext context key, toggled while
  the dropdown is open, and register a high-weight Escape keybinding
  scoped to it so Escape closes the dropdown regardless of focus
  (mirrors how the quick pick scopes its dismiss keybinding).
- Close the dropdown when a quick pick opens on top of it via
  IQuickInputService.onShow.
- Close the specific context view through IOpenContextView.close()
  everywhere instead of the global hideContextView(), so an unrelated
  context view can never be torn down.

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

* sessions: register IQuickInputService stub in titlebar widget fixture

The widget now depends on IQuickInputService; the component fixture's
strict TestInstantiationService failed with "UNKNOWN service
quickInputService". Register a mock exposing onShow.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
# Conflicts:
#	extensions/copilot/package.json
@damnthonyy damnthonyy merged commit 1ad1ce3 into main Jul 8, 2026
10 of 26 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.