Repository navigation
Conversation
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>
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  ## After  ## 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.
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
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.
See Commits and Changes for more details.
Created by
pull[bot]
Can you help keep this open source service alive? 💖 Please sponsor : )