Sync upstream/main + Copilot v0.57.0 release#10
Merged
Conversation
* 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.
…ding fallback options (microsoft#324426)
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
…r dark a…" This reverts commit 066d17a.
* 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>
…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
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.
Sync upstream/main + Copilot v0.57.0
Periodic sync of
microsoft/vscodeupstream into the fork, preserving the Headroom proxy integration and install tooling.Upstream sync
1.127.0→1.129.0).0.56.0→0.57.0.1232 files changed. Only conflict wasextensions/copilot/package.json, resolved manually.Conflict resolution (
extensions/copilot/package.json)version: took upstream0.57.0(new release version).engines.vscode: kept the fork's^1.125.0(deliberate "broader compatibility" choice frombd6c147), instead of upstream's^1.129.0.Fork customizations preserved
proxyUtils.ts, fetcher service, HTTP-transport forcing whenHeadroomProxyUrlis set).Dockerfile.build-vsix,scripts/install-wsl.sh,scripts/install-macos.sh.Marketplace override
GitHub.copilot-chatstable is0.48.1; VSIX at0.57.0overrides it.Verification
Dockerfile.build-vsixbuild succeeds end-to-end (postinstall + esbuild +vsce package) →copilot-proxy.vsixpackaged (87 files, ~39 MB), no build errors.name=copilot-chat,publisher=GitHub,version=0.57.0,engines.vscode=^1.125.0.