Skip to content

[pull] main from microsoft:main - #70

Open
pull[bot] wants to merge 10000 commits into
AppInitio:mainfrom
microsoft:main
Open

pull[bot] wants to merge 10000 commits into
AppInitio:mainfrom
microsoft:main

Conversation

@pull

@pull pull Bot commented Aug 11, 2021 •

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot]

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

Christof Marti and others added 28 commits October 9, 2026 10:46
Remove the additional Docker explanation from the permission-level hover and its redundant wrapper, retaining the sandbox toggle explanation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Synchronize per-panel selection and source ranges over HubRPC, preserve preview view state, and opt into customTextEditorNavigation. Add CRLF, readiness, cancellation, and split-panel regressions.

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

Agent Host changes for lramos15/agents/test-flakiness-investigation

Co-authored-by: Alex Ross <38270282+alexr00@users.noreply.github.com>
Keep all changed ranges for editor gutters while restricting classic preview indicators to deletions and modifications. Cover the provider-to-marker path with regression tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve custom-editor navigation alongside rich-link subscriptions.

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

Fix missing gutter indicators for insertion-only changes in the rich
Markdown diff editor. Previously, the editor consumed a range collection
filtered for classic preview deletion/modification indicators, which
omitted pure additions.

- Retain all changed ranges for Markdown editor gutter markers.
- Apply the original deletion/modification filter only when building
classic preview indicators, preserving existing preview behavior.
- Add regression tests through the real diff provider and gutter-marker
converter, covering start/middle/end insertions, CRLF, deletion,
modification, and unchanged content.

## Validation

- 8 focused Markdown editor diff tests passed in the extension host.
- Markdown extension compilation/type-check, targeted ESLint, and
targeted hygiene passed.
- Cherry-picked the exact tested fix onto current main; changed
source/tests are identical, and diff API/config plus the consumer gutter
path are unchanged. Validation reused rather than installing
dependencies in the new worktree.
- `git diff --check` passed on the new branch.

Follow-up to #340505.
Closes #328567

Adds native Outline and heading breadcrumbs to the rich Markdown editor,
reusing the document's existing symbol providers and the workbench
Outline model rather than creating another parser or a hidden code
editor.

- Introduces the proposed `customTextEditorNavigation` API for per-panel
selection, reveal, and opaque view-state capture/restore.
- Connects the Markdown renderer through its existing HubRPC bridge,
with synchronized source offsets, CRLF mapping, and stale-document
checks.
- Supports live heading updates, follow-cursor, preview without taking
focus, and opening symbols to the side while retaining the rich editor.
- Prevents delayed preview restoration from overwriting newer navigation
and cleans up per-panel navigation on disposal.

### Validation
- 34 targeted core Outline/custom-editor navigation tests passed.
- 76 Markdown editor integration tests passed against published
`@vscode/markdown-editor@0.0.2-114` (excluding orphaned compiled tests
whose source is not in this branch).
- Markdown extension host, renderer, and browser typechecks passed;
renderer and host bundles built; generated manifest check and commit
hygiene passed.
- Outline was exercised in Code OSS. Full core build/typecheck remains
affected by the checkout's pre-existing Copilot SDK version mismatch;
targeted core outputs and tests were validated separately.

This PR excludes local package overrides and unrelated task-progress,
highlighting, theme, and image-paste work.
Preserve Compose discovery and legacy file versions, respect actual AppArmor confinement, keep requested startup enablement separate from inspected support across reconnects and restoration, and refresh sandbox menu presentation.

User securityOpt precedence remains unchanged; the UNC Compose override limitation is deferred.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reuse custom-editor navigation for per-panel source ranges, handle navigation readiness and removal, and cancel superseded context updates.

Fixes #326726

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Give default-density session panels consistent framed gutters while keeping compact layouts flush. Keep chats within a session joined by one-stroke dividers, preserve custom backgrounds, and align sash grippers and side-pane spacing.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep frame compensation aligned across desktop and tablet layouts, and relayout the bottom panel when Sessions visibility changes. Remove abandoned related-chat inset plumbing and hide disabled sash grippers, with lifecycle and geometry coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Let the shared connected-tab frame own the top edge after rebasing onto the latest main branch, avoiding a duplicate tab-fill border.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reproduce the macOS-only CI failure with the existing platform-aware fixture and assert its intended /usr/local/bin PATH fallback, alongside unchanged Linux and Windows behavior. Keep strict Compose and environment assertions; production code is unchanged.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Include visual gap insets in leaf constraints and refresh them when grid density or topology changes. Keep fixture checks focused on the visible session frame and production behavior.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add registered canvases to Add Tab menu

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

Copilot-Session: ecdd3824-368c-4bfe-bbb8-a747a2a3f811

* Address registered canvas review feedback

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

Copilot-Session: ecdd3824-368c-4bfe-bbb8-a747a2a3f811

* Keep Add Tab visible for empty editor groups

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

Copilot-Session: ecdd3824-368c-4bfe-bbb8-a747a2a3f811

* Separate Add Tab visibility changes

Keep the registered canvas change independent from the empty-group Add Tab visibility fix in #340616.

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

Copilot-Session: ecdd3824-368c-4bfe-bbb8-a747a2a3f811

* Harden registered canvas discovery

Require exact-chat routing, exclude canvas types that need input, and preserve registry refresh signals when live membership is unchanged.

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

Copilot-Session: 0a6aa762-4b80-4e33-be5d-68d9f3398af2

* Align canvas input requirements

Treat only non-empty JSON Schema required fields as needing an input flow, so optional-input canvases remain available from Add Tab.

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

Copilot-Session: 0a6aa762-4b80-4e33-be5d-68d9f3398af2

* Tighten canvas registry tests

Remove the test-only refresh API, wait on real registry events, and trim redundant provider assertions.

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

Copilot-Session: 0a6aa762-4b80-4e33-be5d-68d9f3398af2

---------

Copilot-Session: ecdd3824-368c-4bfe-bbb8-a747a2a3f811
Copilot-Session: 0a6aa762-4b80-4e33-be5d-68d9f3398af2
…y notifications (#339987)

* Initial plan

* Fix redundant readonly notifications causing prompt discovery feedback loop

Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>
Co-authored-by: Martin Aeschlimann <martinae@microsoft.com>
* Initial plan

* Align nested AGENTS.md discovery with core search exclusions

Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>

* Preserve promise return type in instruction search test mock

Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: aeschli <6461412+aeschli@users.noreply.github.com>
* sessions: Enable terminal sandboxing in Dev Containers

Configure Dev Containers for nested terminal sandboxing without modifying workspace configuration. Inspect the running container before allowing sandbox enablement and explain the startup configuration in the session UI.

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

* sessions: Fix Dev Container sandbox capability state

Preserve requested sandbox choices and allow policy-permitted opt-outs for unsupported containers. Publish inspected support before failed startup through local IPC and remote notifications, preserve UNC authorities, and avoid inheriting source-container support for worktree drafts. Refresh mode-picker guidance reactively and add regression coverage for the review findings.

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

* sessions: Accept Dev Container CLI file-host configuration URIs

The pinned Dev Containers CLI returns vscode-fileHost URIs from read-configuration. Accept that local-file scheme alongside file and normalize it for native path conversion, preserving UNC authorities. Cover the actual CLI output shape and reject non-local URI schemes.

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

* sessions: Continue attaching to containers without sandbox options

Do not reject Dev Container session startup or reuse solely because required Docker security options are missing. Preserve the requested sandbox setting and observed support so existing SDK sandbox status and diagnostics report the missing configuration. Keep other connection failures and managed policy handling unchanged.

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

* chat: Deduplicate sandbox warning reasons

Display identical sandbox diagnostics once while retaining distinct reasons and their order. Compare normalized reasons so duplicate-only updates do not republish the warning.

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

* sessions: Make Dev Container sandbox guidance less intrusive

Replace the sandbox-ready wording with an information icon beside the Dev Container sandbox toggle, retaining the existing explanatory hover.

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

* sessions: Distinguish unavailable sandbox guidance by requested state

Explain how to enable sandboxing when it is already off, and distinguish requested sandboxing in a container missing the required Docker options. Refresh the hover after opting out.

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

* sessions: Center the sandbox information icon with its label

Align the label and information icon in a flex row, preserving label truncation and spacing. Cover alignment at multiple font sizes.

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

* sessions: Keep container sandbox guidance on the sandbox toggle

Remove the additional Docker explanation from the permission-level hover and its redundant wrapper, retaining the sandbox toggle explanation.

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

* sessions: Fix container sandbox preparation and lifecycle

Preserve Compose discovery and legacy file versions, respect actual AppArmor confinement, keep requested startup enablement separate from inspected support across reconnects and restoration, and refresh sandbox menu presentation.

User securityOpt precedence remains unchanged; the UNC Compose override limitation is deferred.

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

* sessions: Cover Compose launcher environments on every platform

Reproduce the macOS-only CI failure with the existing platform-aware fixture and assert its intended /usr/local/bin PATH fallback, alongside unchanged Linux and Windows behavior. Keep strict Compose and environment assertions; production code is unchanged.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Debounce custom editor events together and refresh existing widgets when registration supersedes pending work. Cover both review findings with regression tests.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
<!-- Thank you for submitting a Pull Request. Please:
* Read our Pull Request guidelines:

https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests
* Associate an issue with the Pull Request.
* Ensure that the code is up-to-date with the `main` branch.
* Include a description of the proposed changes and how to test them.
-->

## Summary

- add the standard 4px gap between independent Agents window panels at
default density
- preserve complete panel frames and consistent spacing across desktop,
tablet, connected side-pane, and justified bottom-panel layouts
- keep related chats as one continuous surface with a single divider and
no internal sash or gripper
- add focused geometry, lifecycle, constrained-layout, and component
fixture coverage

## Before

![Before: independent chat panels are flush
together](https://github.com/user-attachments/assets/f84d1c86-2382-4a90-80ef-a48c6c332552)

## After

![After: independent chat panels have a clear gap with complete
borders](https://github.com/user-attachments/assets/269d2252-7cc0-428f-8470-7081702876a1)

## Validation

- `npm run build-fast -- --client-only` — passed
- `npm run typecheck-client` — passed
- `./scripts/test.sh --reporter dot --run
src/vs/sessions/test/browser/agentsPartCard.test.ts --run
src/vs/sessions/test/browser/chatCompositeBar.test.ts --run
src/vs/sessions/test/browser/chatGroupsView.test.ts --run
src/vs/sessions/test/browser/editorPart.test.ts --run
src/vs/sessions/test/browser/parts/panelPart.test.ts --run
src/vs/sessions/test/browser/sessionGridLayout.test.ts --run
src/vs/sessions/test/browser/sessionsPart.test.ts --run
src/vs/sessions/test/browser/workbench.test.ts` — 343 passing
- `git diff --name-only --diff-filter=ACM origin/main -- '*.ts' | xargs
npm run eslint --` — passed
- `git diff --name-only --diff-filter=ACM origin/main -- '*.css' | xargs
npm run stylelint --` — passed
- Component Explorer `sessions/grid/sessionsGrid/SideBySide/Dark` —
baseline and branch rendered successfully at 1440×900
- `./scripts/test.sh --reporter dot --runGlob
'**/sessions/test/browser/**/*.test.js'` — 1717 passing, 2 pending, with
one existing failure in `AutomationsCardsWidget` (`accessible view
summarizes templates without reading full prompts`); this branch has no
diff in that feature or test area
<!-- Thank you for submitting a Pull Request. Please:
* Read our Pull Request guidelines:
  https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests
* Associate an issue with the Pull Request.
* Ensure that the code is up-to-date with the `main` branch.
* Include a description of the proposed changes and how to test them.
-->

## Summary

- add a default-off, experiment-controlled `sessions.list.externalApplicationBadge` setting with `off`, `title`, and `details` placements
- add an advanced, experiment-controlled `sessions.list.externalApplicationBadge.showFrom` setting for the optional `From` prefix
- show badges only for external sessions created outside VS Code
- emit the shared `experimentTrigger` event when the first eligible row renders; emit the prefix trigger only while a visible badge mode is active
- hide title badges whenever row actions appear on hover, keyboard focus, onboarding, or phone layouts
- preserve row height across badge, hover, and focus states
- include the creating application in the accessible row label whenever either visible badge mode is enabled
- cover title, details, prefix, hover, focus, light, dark, and high-contrast states with component fixtures

## Testing

- `npm run compile` — passed
- `npm run typecheck-client` — passed
- targeted ESLint and stylelint — passed (stylelint reports three pre-existing design-token suggestions)
- sessions contribution tests — 8 passing
- focused sessions-list placement, hover, and trigger tests — 3 passing
- Component Explorer screenshots — visually approved for title, details, no-prefix, hover, focus, long-label truncation, light, dark, and high-contrast states; all 16 previously failing Automations and Blocked Sessions fixtures render cleanly
- `npm run hygiene` — blocked before source checks by the existing Windows URL-path issue resolving `remote/package.json` as `C:\C:\...\remote\package.json`
* Add viewColumn to external uri opener
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Use the custom-text-editor navigation infrastructure from #340695 to
include rich Markdown selections as implicit chat context, including in
the Agents window.

- Attach the active panel's document URI and Markdown source range
instead of a previously active code editor's selection.
- Handle navigation readiness/removal, panel switching, and cleared
selections without adding a renderer RPC or extension API.
- Cancel superseded context updates and preserve existing context
settings, ignored-file checks, and additional context providers.
- Add regression tests and contributor documentation.

Validation: 27 targeted tests passed, including 8 new selection-context
tests. Full client typecheck, changed-file lint, module layering, and
commit hygiene passed.

Closes #326726
Update @vscode/markdown-editor to 0.0.2-118 and forward the plain-text flag through the host clipboard strategy so plain paste bypasses URL-to-link conversion.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add a resource-scoped setting with live renderer updates and initial-state validation, retain centered scrollbar gutters, and cover configuration notifications.

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

Integrate smart URL paste and configurable active-block highlighting in
the rich Markdown editor.

This PR contains two commits:

1. **Preserve plain-text paste when linking selected Markdown text**
- Update `@vscode/markdown-editor` from `0.0.2-114` to published
`0.0.2-118`, which includes URL-over-selection paste and the
highlighting API.
- Forward the plain-text flag through the VS Code clipboard wrapper so
plain-text paste bypasses URL-to-link conversion.
2. **Make rich Markdown active-block highlighting configurable**
- Add resource-scoped `markdown.editor.highlightActiveBlock` (default:
enabled).
- Synchronize initial and live configuration without reloading the
document or changing source-marker visibility.
- Keep the document centered with symmetric scrollbar gutters and add
RPC coverage and contributor documentation.

Validation:
- Host and renderer typechecks passed in the original checkout before
moving the changes (using the local development package).
- Verified the published `0.0.2-118` artifact exports the required
clipboard/highlighting APIs and includes the smart-paste implementation.
- Verified moved feature hunks against the exact safety stash and
checked patch whitespace.
- Per request, no node_modules were installed and no tests were run in
the PR worktree. Only the lockfile was regenerated; dependency-requiring
commit hooks were skipped. CI must validate the final branch against the
published dependency.

The local file dependency override is not included.
Logan Ramos and others added 30 commits October 13, 2026 10:46
Agent Host changes for lramos15/agents/model-picker-remember-expanded-state
A `${config:}` reference without a setting name now migrates to an empty
`MCP_CONFIG` environment variable instead of excluding the server. With that,
every setting reference migrates, so the `unsupportedSettingValue` exclusion
reason is removed.

Refs #340161

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The client never resolves user servers, so a setting it can't resolve only
means a `.vscode/mcp.json` server is projected as written. Also stop exporting
`getSettingVariableName`, which is only used in its module.

Refs #340161

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
agentHost: cap Mission Control archives (Written by Copilot)

Limit Mission Control session listings to the 100 most recently modified archived sessions while retaining all non-archived sessions. Keep the policy in a listener-owned adapter so local, SSH, and tunnel catalogs remain unchanged, and older archived sessions remain directly accessible.

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

The chip looked the referenced chat up on the local host first and then on
each remote. When two hosts list the same session, for example a remote agent
host that shares the Copilot home of the local machine, both list the same
deterministic default-chat URI, and a remote chat's chip opened the local copy.

A chat reference never crosses agent hosts, so attachment widget factories
now receive the session of the chat that shows the attachment. The chip
resolves that session's connection and looks the owner up only there, and
links with that connection's authority. When the chat has no agent host
connection, the chip builds no link and still renders.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
A workspace server moves to `<root>/.mcp.json`, which is usually committed.
A `${config:}` setting's value is now only written there if it comes from the
workspace or folder settings, which are already in the repository. A value
from the user's settings, a policy or memory becomes an empty environment
variable instead. User servers, which move to the user's own configuration,
keep every value.

Refs #340161

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve archived permissions when extracting Linux compilation artifacts.
The split compile/package pipeline lost chrome-sandbox's setuid bit during
non-root extraction, causing DEB installations to fail when user namespaces
were unavailable.

Add a separate DEB/RPM sanity pass that runs as non-root, validates the
installed helper's ownership and mode, and disables the namespace sandbox
to exercise the setuid fallback.
* marketplace management in agent host

* sources dropdown to contain all marketplaces

* Fix provider marketplace policy and refresh handling

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

* refactor: enhance provider marketplace source handling and add tests for unavailable sources

* refactor: streamline marketplace management provider documentation

* fix: update marketplace source test label

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Write a setting's value directly in a stdio server's `env` values, since
  those are expanded from the host's environment, not from the other `env`
  entries. Only settings that `command` or `args` read are declared in `env`.
- Accept variables that the client keeps as text when it resolves a setting's
  value, such as an `${input:}`, instead of rejecting the workspace server.
  Like the client, treat a setting whose resolution leaves a variable
  unresolved as one it can't resolve.
- Only say that configs are set to their current values when a value is
  copied, and explain when they become empty instead.

Refs #340161

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
chat: center subagent activity hooks on tool calls

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: render input attachments for the input model's session

Restoring a draft renders its attachments while the widget's view model is
still unset or the outgoing session, so a restored #chat chip resolved its
host from the wrong session. Pass the session of the input model that holds
the attachments instead.

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

* chat: fall back to the widget session for unbound input attachments

The inline request-edit input part never binds an input model, so its
restored attachments had no session and an edited request's #chat chip lost
its link. Prefer the bound input model's session and fall back to the
widget's session.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Merged PR 780: MSRC fixes

Co-authored-by: Kyle Cutler <Kyle.Cutler@microsoft.com>
* fix: prevent terminal spawn after disposal

* test: shorten terminal cleanup workaround comment

* test: cover terminal disposal during spawn throttling

* test: make terminal startup shutdown ordering deterministic
Translate legacy enterprise network allowlists
(`ChatAgentAllowedNetworkDomains`, enabled by `ChatAgentNetworkFilter`)
into runtime `permissions.limitTo` for local Copilot Agent Host
sessions, so surfaces that enforce the runtime policy honor existing
admin configuration.

This does **not** integrate `limitTo` into VS Code's Integrated Browser.
That will be a follow up. Legacy Policy controls will continue to be
respected for Integrated Browser as is.

Given the following legacy snippet:

```json
{
  "ChatAgentNetworkFilter": true,
  "ChatAgentAllowedNetworkDomains": ["example.com"]
}
```

it will be translated to:

```json
{
   "permissions": { "limitTo": ["Domain("example.com")"] } 
}
```

And given the prompt:

> Use native `web_fetch` to fetch `https://example.com`. Then use it to
fetch `https://example.org`. Do not use browser, shell, MCP, or other
fetch tools.

`https://example.com` will work, but `https://example.org` will be
denied.

Part of microsoft/vscode-internalbacklog#8067.

*🤖 Authored with GitHub Copilot on behalf of @rwoll.*
…1227)

agentHost: preserve archived worktree roots (Written by Copilot)

Keep repository-root history fallbacks out of persistent working-directory metadata. Cover archive, history restore, unarchive and continuation for native and legacy sessions and multi-root workspaces.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Expose accessible machine filesystem roots for opt-in GitHub environment sharing, start browsing at home, and retain the existing project catalogue. Use standard AHP browsing without new picker UI or filesystem-root metadata.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* extensions: restore installed MCP and plugin sections

Keep Extensions filters in the Extensions view while routing Browse MCP Servers to Customizations discovery.

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

* extensions: address installed customization feedback

Reset the Extensions search before showing installed MCP servers and hide Agent Plugins views when workspace AI setup is disabled.

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

* chat: compact customization star counts

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: consolidate Connected tab spacing and wrapped controls

Restore the latest chat and detail-tab visuals from #340823, combine editor toolbars and final-row reservations from #340834, and retain the wrapped-cap contour from #340835. Preserve fit-label truncation, fixed-tab scrolling, RTL and high-contrast behavior, with production regression coverage and ready-state fixtures.

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

* editor: anchor wrapped Add backing and avoid smoke hover interception

Keep wrapped Add Tab in flex flow while anchoring its rounded backing in a local stacking context. Use positioned actionability-checked clicks for editor-focus automation so lingering terminal Close hovers cannot intercept the settings-editor click. Preserve the line-start position and cover backing bounds and the hover transition.

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

---------

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

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

Empty environment variable rows showed `API_KEY` and `your-api-key`, which
suggested an API key even for unrelated variables, such as the empty ones the
MCP customization migration creates. They now show `Key` and `Value`.

Refs #340161

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

Combining child patterns that each match the parent file itself, such as `${basename}.*` and `${basename}*.${extname}`, made the parent appear as its own ancestor more than once. Root-ancestor resolution treated that as a cycle and stopped nesting every affected file. Deduplicate a file's ancestors and drop the file itself before resolving roots.

Fixes #152910

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* chat: keep Agent Host Ask available when Agent is disabled

- Identify the built-in read-only Ask agent through typed host metadata.
- Show Ask with the standard icon and built-in picker group.
- Keep Ask selectable and select it by default when chat.agent.enabled is false.
- Preserve the host agent identity in restored selections, drafts, and requests.
- Add regression tests for mode availability, policy, routing, and draft sync.

Fixes #340921

(Commit message generated by Copilot)

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

* chat: handle Agent Host Ask mode refresh safely

- Replace cached mode instances when their semantic kind changes.
- Reselect the refreshed mode so observers receive its new kind and presentation.
- Reject new turns without an identified read-only Ask agent when Agent is disabled.
- Cover cached upgrades and absent or malformed host metadata in regression tests.

(Commit message generated by Copilot)

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Compare the current contributed files instead of extension ID deltas.
This removes old extension files after an update without a window reload.

- Keep registrations for files with the same version, URI, and contribution metadata.
- Add, remove, or replace only the file registrations that changed.
- Remove old registrations before adding replacements at the same URI.
- Dispose registration maps and extension-point handlers with the contribution.
- Add tests for version updates, per-file changes, cache refresh, and uninstall cleanup.

Fixes #341372

(Commit message generated by Copilot)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* sessions: improve large chat restoration performance

Coalesce session artifact replay, avoid transcript-wide response identity scans, and cache immutable Agent Host file-edit conversions to reduce repeated work when restoring and scrolling large chats.

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

* test: fix session artifact event types

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

* sessions: cache customization path resolution

Memoize CustomizationIndex path resolution, including misses, per
immutable index. An exact-session trace showed ~4.24s spent in
_resolvePath across nine ~0.5s renderer tasks.

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

* sessions: restore large remote chat history cooperatively

Return and attach the model after the first history slice and restore
the remaining operations in cooperative 25-operation / 8ms slices,
including live-history refreshes. Historical replay is quiet, history
and server-request events are buffered until replay completes,
concurrent loads share a single restore, and partial state is cleaned
up on cancellation or error.

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

* test: cover chat list latest-response marker updates

Verify the latest-response marker moves when responses are appended or
removed while each response's dataId remains stable.

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

* sessions: restore large remote history off-screen and attach once

Replay large remote histories cooperatively into an unpublished model,
using time-budgeted idle slices of up to 40ms that count only
mutations. Publish the model and attach the widget exactly once after
restore completes.

Restored turns never set requestInProgress; a live final turn is
reapplied after publish. Sends wait on the restore and refresh
barriers.

Also fix cancellation leaks, shared-session disposal, editing-session
readiness, anonymous live-turn ids, and internal reference handoff,
and add trace marks around publish.

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

* sessions: extract remote chat session restorer and fix restore races

Extract RemoteChatSessionRestorer, with an explicit RestoreState, and
the CooperativeMutationBudget helper. loadRemoteSession shrinks from
about 900 lines to 65.

- Group turns from the pre-replay history snapshot so history changes
  during replay are no longer dropped or failing.
- Route untitled materialization through the shared load; publishing an
  already-published model now raises an assertion.
- Yield to a fresh task before publish.
- Defer abandonment of a cancelled load by a microtask so an immediate
  re-acquire joins it.
- Cap pre-publish history deferrals at 3.
- Remove the unused quiet parameter.
- Add an injectable history scheduler so tests are deterministic.

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

* sessions: cancel remote loads on dispose and revalidate refresh insertions

Disposing ChatService now cancels in-flight remote session loads so an unpublished cooperative replay never publishes into the disposed model store. A sliced history refresh resolves insertion indices against the live model after each yield, treating requests removed while it waited as removed before the refresh.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Prefer live sessions for marketplace operations

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

* Use advertised chat identity for marketplace operations

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Deprecate remaining user-facing legacy Copilot CLI settings

* feedback update

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
agentHost: fix MC permission reports (Written by Copilot)

Translate available and effective approval modes alongside the Mission Control approval preference so Manual and Allow All remain selectable. Cover schema projection, report-only updates, snapshots and reconnect replay while preserving native clients and policy restrictions.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…, Ports and Timeline (#341374)

* Unify inline edit input box across Explorer, terminal tabs and Ports

Extract the duplicated inline rename InputBox logic into a shared InlineEditInputBox widget that handles validation messages, Enter/Escape, blur (including open context menus) and the initial selection, and adopt it in the Explorer, terminal tabs and Ports views. Terminal tabs now keep their icon next to the input while renaming, matching the Explorer.

Fixes #149641

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

* Rename local history entries inline in the Timeline view

Add inline editing support to the Timeline view through ITimelineService.setEditable and use the shared InlineEditInputBox to rename local history entries in place instead of through quick input. Refreshes of the Timeline view are deferred while an item is edited so that typed text is not lost, and quick input remains as the fallback when the command is not invoked on a Timeline item.

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

* Refresh inline edit messages on input and test blur handling

Refresh non-error validation messages on every input event instead of on key up so that pasted, dropped or composed values update them, and check for an open context menu before the window focus when the input box loses focus. Add tests for message refreshing, accepting and cancelling on blur, and keeping the input open while a context menu is shown.

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

---------

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

<!-- Thank you for submitting a Pull Request. Please:
* Read our Pull Request guidelines:

https://github.com/microsoft/vscode/wiki/How-to-Contribute#pull-requests
* Associate an issue with the Pull Request.
* Ensure that the code is up-to-date with the `main` branch.
* Include a description of the proposed changes and how to test them.
-->

Part of #340161 (case B3). Follows #341224, which did the same for
`${input:}`.

The MCP customization migrator used to exclude any server that uses
`${config:key}`. It now migrates the reference to an environment
variable set to the setting's current value, the same way inputs are
migrated.

## What changed

- **Name:** derived from the setting key with `getVariableName`, e.g.
`mcp.command` → `MCP_COMMAND`, with the existing `MCP_` prefix for
reserved names. A `${config:}` with no key becomes `MCP_CONFIG`. A
setting used several times maps to one variable.
- **Rewrite:** same fields as inputs (stdio `command`, `args` and `env`
values; remote URL and header values). Stdio servers get `${NAME}` and
an `env` entry with the value. Remote servers get `${NAME:-value}`, or
`${NAME}` when the value is empty. Remote values are written without a
round-trip check, so a rare value containing `}` is written as is.
- **Value:** read in the folder scope VS Code resolves the server in.
Strings and numbers are kept, numbers as text. These become an empty
variable instead of excluding the server:
  - unset, unnamed, structured or boolean settings;
  - values that contain a variable;
- for workspace servers, values that don't come from the workspace or
folder settings.

The last rule exists because `<root>/.mcp.json` is usually committed,
and a value from the user's settings could be private, such as a token.
User servers move to the user's own configuration and keep every value.
- **Exclusions:** the existing collision checks now cover setting names
too, against inputs, `${env:}` names, other settings and existing `env`
keys. A server is still excluded when a setting reference is in an `env`
or header name, `cwd`, or a URL position the destination rejects, or
when the value makes it too long. No new exclusion reason was needed.
- **Projection:** VS Code resolves `${config:}` for `.vscode/mcp.json`
servers before forwarding them, so the projection holds the value. When
VS Code can't resolve a setting, it forwards the server as written, and
the planner compares against that. User servers are always forwarded
unresolved.
- **Revalidation:** the candidate records each setting's key, name and
value (`settingVariables`). If a value changes between planning and
writing, the migration fails with `SourceChanged`.
- **Migration view:** a new localized warning: "Configs will become
environment variables set to their current values. Later changes to the
configs won't apply." The collision and name-position exclusion messages
now mention settings.

## Known limitation (tracked separately)

VS Code's own chat expands `${NAME}` in stdio `command`/`args` only from
its process environment, not from the server's `env`. A migrated
reference there stays literal in VS Code's chat; Copilot fills it from
`env`.

## Open questions for review

- Workspace servers leave extension defaults empty too, because those
values aren't in the repo. They aren't private, so writing them may be
preferable.
- In multi-root workspaces, values from a `.code-workspace` file count
as workspace settings, even though the file may be outside the repo.
- The warning says "set to their current values" even when a workspace
server's value is left empty.

## How to test

1. Add a server that uses `${config:...}` to `.vscode/mcp.json` or the
user `mcp.json`, e.g. `"args": ["--port=${config:mcp.port}"]`, and set
the setting in workspace or user settings.
2. Open the customization migration view for an Agent Host Copilot
session. The server is offered with the new warning.
3. Migrate it. The destination contains `${MCP_PORT}` with `"env": {
"MCP_PORT": "<value>" }` for stdio, or `${MCP_PORT:-<value>}` for
remote. The value is empty for a workspace server whose setting is only
in user settings.

## Validation

- `npm run typecheck-client`: passed
- `npm run build-fast -- --client-only`: passed
- `./scripts/test.sh --reporter dot --run
src/vs/workbench/contrib/chat/test/browser/aiCustomization/mcpServerCustomizationMigration.test.ts
--run
src/vs/workbench/contrib/chat/test/browser/aiCustomization/customizationMigrationServiceImpl.test.ts
--run
src/vs/workbench/contrib/chat/test/browser/aiCustomization/customizationMigration.test.ts
--run
src/vs/workbench/contrib/chat/test/browser/aiCustomization/aiCustomizationManagementEditor.test.ts`:
207 passing
- `npm run eslint -- <changed files>`: passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.