Skip to content

network: align URL trust and IDN domain policies - #336960

Merged
Dmitriy Vasyura (dmitrivMS) merged 6 commits into
mainfrom
fix/url-destination-trust
Sep 21, 2026
Merged

Dmitriy Vasyura (dmitrivMS) merged 6 commits into
mainfrom
fix/url-destination-trust

Conversation

@dmitrivMS

@dmitrivMS Dmitriy Vasyura (dmitrivMS) commented Sep 20, 2026

Copy link
Copy Markdown
Collaborator

URL trust and approval matching

  • Resolve effective HTTP(S) authority/path boundaries and dot segments consistently across trusted domains, chat URL approvals, explicit prompt references, and web-page fetching.
  • Preserve the actual serialized destination, query/fragment contents, hostname case behavior, and existing userinfo/authorityless trust restrictions.
  • Compare escaped resource and glob paths consistently, so specific exclusions cannot fall through to broader approvals. Preserve literal escaped data when generated approval patterns are saved and parsed again.
  • Canonicalize equivalent Unicode/Punycode literal hostname labels while preserving wildcard, scheme, port, and path semantics.

The shared matcher keeps two clearly named stages: normalizeURLAuthorityAndPath establishes effective URL structure before path normalization; normalizeAuthorityForMatching canonicalizes literal DNS labels for matching. These are composed rather than treated as interchangeable helpers.

Network and sandbox policies

  • Canonicalize Unicode wildcard domain suffixes for agent network allow/deny rules.
  • Canonicalize sandbox allow/deny policies and URL hosts used by command preflight checks.
  • Log a warning and use a deny-all network policy for invalid sandbox domain entries, keeping tool registration and offline sandboxed commands available.

Performance and validation

  • Replace the recursive eager URL-by-pattern memo table with iterative deduplicated states. Preserve matching semantics while avoiding Unicode-path allocation spikes and long-path stack overflow.
  • Normalize configured approval patterns as well as request URLs. Preserve effective userinfo guards, unreserved-path equivalence, escaped-pattern round trips, and Unicode GitHub case folding. HTTP(S) drive-like paths keep their case; file/untitled/remote drive behavior is unchanged.
  • 591 tests pass, with 3 pre-existing skips; targeted typecheck, hygiene, and normal commit hooks pass. 559,585 old/new matcher comparisons preserve existing boolean semantics.
  • Real-renderer comparison including all follow-up fixes: one 128-character Unicode path approval 44.5 ms -> 0.5 ms; ten same-host long-path rules 500.9 ms -> 2 ms.
  • Code OSS 1.139.0 Dev, Windows x64: expanded core 48/48 steps (45 workflow cases, one setup check, two diagnostic-only GitHub checks); native sandbox 6/6 steps. The core run observed 28 actual loopback extractions; 11 declined fetches and two network-policy blocks produced zero extraction requests. Both native MXC marker commands ran successfully.
  • The 1,024-character Unicode UI flow stayed below the 500 ms renderer-gap budget (95.8 ms maximum). Source/output hashes and the exact validated patch were verified before committing as 85224b354e3.

Evidence is retained locally with screenshots, raw uncaptioned videos, Playwright traces, request ledgers, and runtime provenance. The two GitHub-specific checks are live-service diagnostics, not real-GitHub fetch tests. Windows native validation covers overall outbound policy, not per-host sandbox enforcement; Linux/macOS native execution is not claimed.

Normalize wildcard suffixes with the URL-aware authority helper before validating the pattern. Add matching, policy, and fetch-tool regression coverage while preserving existing domain handling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Canonicalize sandbox domain policies and preflight URL hosts, rejecting patterns that cannot be normalized. Match equivalent Unicode and Punycode literal host labels in URL trust and approval rules while preserving existing glob semantics.

Partial Unicode wildcard labels remain outside this change.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Normalize authority separators and resolved paths consistently across trusted domains, URL approval rules, and web-page fetching. Preserve hostname case semantics, escaped path data, and actual request destinations, with regression coverage for approvals, exclusions, and declined tool calls.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings September 20, 2026 22:33

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Security-sensitive URL normalization spans trust, enterprise filtering, confirmation, and network execution boundaries.

Review effort: Balanced
Findings: None

What changed in this PR

Aligns URL trust, approval, prompt-reference, and fetch behavior with effective HTTP(S) destinations.

Changes:

  • Normalizes authority separators and path traversal consistently.
  • Preserves escaped paths across approval-pattern round trips.
  • Adds regression coverage for malformed authorities, encoded paths, and declined fetches.
File Description
src/​vs/​platform/​url/​common/​urlGlob.ts Normalizes HTTP authorities and paths for matching.
src/​vs/​platform/​url/​common/​trustedDomains.ts Applies effective URL normalization to trust checks.
src/​vs/​workbench/​contrib/​chat/​common/​tools/​builtinTools/​chatUrlFetchingPatterns.ts Aligns approvals and generated patterns with normalized destinations.
src/​vs/​workbench/​contrib/​chat/​electron-browser/​builtInTools/​fetchPageTool.ts Uses normalized destinations for policy, confirmation, and fetching.
src/​vs/​platform/​url/​test/​common/​urlGlob.test.ts Tests backslash authority matching.
src/​vs/​platform/​url/​test/​common/​urlPathNormalization.test.ts Covers effective path and authority normalization.
src/​vs/​workbench/​contrib/​chat/​test/​common/​tools/​builtinTools/​chatUrlFetchingPatterns.test.ts Tests approval patterns for malformed authorities.
src/​vs/​workbench/​contrib/​chat/​test/​common/​tools/​builtinTools/​chatUrlFetchingPaths.test.ts Tests encoded paths, exclusions, and traversal.
src/​vs/​workbench/​contrib/​chat/​test/​electron-browser/​tools/​builtinTools/​fetchPageTool.test.ts Verifies consistent fetch destinations.
src/​vs/​workbench/​contrib/​chat/​test/​electron-browser/​tools/​builtinTools/​fetchPageToolPaths.test.ts Exercises complete confirmation and fetch orchestration.
src/​vs/​workbench/​contrib/​chat/​test/​browser/​tools/​languageModelToolsService.test.ts Verifies declined URLs cause no fetch effects.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Merge the IDN network-filter and sandbox changes with effective URL destination normalization. Preserve both normalization stages and their regression coverage, and add combined IDN plus effective-path approval and exclusion tests.

Consolidates #336944 into #336960.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@dmitrivMS Dmitriy Vasyura (dmitrivMS) changed the title url: align trust and approvals with effective HTTP destinations network: align URL trust and IDN domain policies Sep 20, 2026
@dmitrivMS Dmitriy Vasyura (dmitrivMS) added security chat fetch-tool Issues concerning the fetch internal tool and web extracting service agent-sandbox labels Sep 20, 2026
Keep shell-tool registration and offline sandboxed commands available when domain patterns cannot be normalized. Log a warning and use a deny-all policy instead of throwing, with regression coverage for both lists and recovery after settings are corrected.

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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🟡 Changes recommended

Dot-segment denial patterns can still miss and fall through to broader URL approvals.

Get a fresh assessment by requesting another Copilot review.

Review effort: Balanced
Findings: 1 High severity

Open (1)

Comment thread src/vs/platform/url/common/urlGlob.ts
Comment thread src/vs/platform/url/common/urlGlob.ts Outdated
Comment thread src/vs/platform/url/common/urlGlob.ts
Comment thread src/vs/platform/url/common/urlGlob.ts Outdated
Comment thread src/vs/platform/url/common/trustedDomains.ts Outdated
Comment thread src/vs/platform/url/common/trustedDomains.ts
Comment thread src/vs/platform/url/common/urlGlob.ts
Replace the eager recursive matcher with iterative deduplicated states to avoid Unicode path allocation spikes and stack growth. Normalize configured patterns consistently, preserve effective authority and path semantics, and retain HTTP path case without changing non-HTTP drive normalization.

Add regression coverage for the PR feedback and verify real Code OSS trust, approval, fetch, and sandbox workflows.

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

Copy link
Copy Markdown
Contributor

📬 CODENOTIFY

The following users are being notified based on files changed in this PR:

TylerLeonhardt

Matched files:

  • src/vs/workbench/contrib/chat/electron-browser/builtInTools/fetchPageTool.ts

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The broad security-sensitive changes to shared URL matching and sandbox policy enforcement warrant final human review.

Review effort: Balanced
Findings: None

Resolved since last review (1)

@dmitrivMS
Dmitriy Vasyura (dmitrivMS) merged commit 36351b5 into main Sep 21, 2026
34 checks passed
@dmitrivMS
Dmitriy Vasyura (dmitrivMS) deleted the fix/url-destination-trust branch September 21, 2026 19:50
@vs-code-engineering vs-code-engineering Bot added this to the 1.140.0 milestone Sep 21, 2026
homecoc pushed a commit to homecoc/ticode that referenced this pull request Sep 21, 2026
* network: normalize Unicode wildcard domain patterns

Normalize wildcard suffixes with the URL-aware authority helper before validating the pattern. Add matching, policy, and fetch-tool regression coverage while preserving existing domain handling.

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

* network: normalize sandbox domains and IDN URL approvals

Canonicalize sandbox domain policies and preflight URL hosts, rejecting patterns that cannot be normalized. Match equivalent Unicode and Punycode literal host labels in URL trust and approval rules while preserving existing glob semantics.

Partial Unicode wildcard labels remain outside this change.

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

* url: align trust checks with effective HTTP destinations

Normalize authority separators and resolved paths consistently across trusted domains, URL approval rules, and web-page fetching. Preserve hostname case semantics, escaped path data, and actual request destinations, with regression coverage for approvals, exclusions, and declined tool calls.

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

* sandbox: warn and deny network for invalid domain patterns

Keep shell-tool registration and offline sandboxed commands available when domain patterns cannot be normalized. Log a warning and use a deny-all policy instead of throwing, with regression coverage for both lists and recovery after settings are corrected.

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

* url: bound glob matching and preserve effective URL semantics

Replace the eager recursive matcher with iterative deduplicated states to avoid Unicode path allocation spikes and stack growth. Normalize configured patterns consistently, preserve effective authority and path semantics, and retain HTTP path case without changing non-HTTP drive normalization.

Add regression coverage for the PR feedback and verify real Code OSS trust, approval, fetch, and sandbox workflows.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
homecoc added a commit to homecoc/ticode that referenced this pull request Sep 21, 2026
* chat: add a render-only Permissions area to the Customizations editor

Adds Terminal, Files and Network permission sections to the Chat
Customizations editor, behind the off-by-default
`chat.customizations.permissions.enabled` setting, so users can see which
rules govern an agent.

The Copilot runtime is the source of truth for permissions: it owns the
rule DSL, the matcher, and the precedence between managed policy,
configured rules, location grants and session grants. Nothing here
recomputes any of that -- the rule syntax helper only splits
`Kind(argument)` for display, and domains exist only for the four rule
families the runtime actually accepts.

The runtime exposes no read API for its resolved rule set yet, so the
snapshot reports only the managed scope and names the layers it could not
read. An empty list would claim "nothing governs this agent", which is the
opposite of the truth under `failClosed`. Tracked upstream in
github/copilot-sdk-internal#244.

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

* chat: cross-reference the managed rule builder from the display parser

Upstream added `ManagedRuleFamily` for the rules VS Code sends. Note the
relationship from the read-side parser, including why it accepts the
`Bash`/`PowerShell`/`Edit` aliases the builder never emits, so the two
family sets do not drift.

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

* chat: align the Permissions sections with the customization design language

The permission sections were visibly foreign next to the customization
sections: an inline icon+title+filter strip, no panel chrome, uppercase
scope labels, and the description stranded in a bottom footer.

Reuse the existing chrome instead of approximating it. The sections now
join the shared selector lists for the content panel, the section title
header (title, description, inline learn-more) and the search row, and
render scope groups with the same collapsible `ai-customization-group-header`
markup, so consistency holds by construction rather than by copied values.

What stays different is what a row means: a permission rule is a read-only
statement of what the runtime enforces, not something authored here, so
there is no create button, uneditable rows carry a lock, and each row ends
in an allow/ask/deny pill.

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

* chat: fix staleness, partial provider failures and focus in the Permissions sections

Addresses PR review findings:

- Disabling the agent host mid-probe left the in-flight generation valid,
  so a late result could overwrite the disabled state. Bump the generation
  on the transition.
- Provider failures arrive in-band as `{ error }` rather than thrown, and
  were being skipped. A timeout then looked like "not supported", and a
  mixed result could present one provider's rules as the whole policy.
  Failures are now carried on the snapshot and shown as a warning, and an
  all-failed probe reports an error instead of a capability gap.
- Selecting a permission section focused the hidden prompts search box.
  Route contributed sections through their own `focus()` via one shared
  helper used by both the selection path and the editor's `focus()`.
- An empty group while filtering said "No rules", implying no policy
  exists. Say "No matching rules" when a filter is active.
- The snapshot only refreshed on construction or enablement change, so the
  view could not recover from a stale read. Add a Refresh action in the
  slot the customization sections use for their primary action, and
  re-read when a section is opened unless a probe is already running.

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

* chat: add a Permissions section fixture and polish its states

Writing the fixture surfaced that the panel chrome was scoped to the
management editor, so the widget could not render standalone. Scope it to
`.chat-permissions-section` instead — the class belongs to the widget, so
it now carries its own chrome while staying in the shared rule.

Visual fixes found by looking at it:
- Drop the group-header icon. The shared header hides `.group-icon`, so it
  was dead DOM; the scope icon now appears in the override badge instead,
  where it explains which layer won.
- Dim the effect pill on an overridden rule. Its verdict does not apply, so
  showing it at full strength misrepresented it.
- Replace the bare status line with the customization sections' centered
  empty state, keeping the honest detail ("Rules may still be enforced").

Four fixtures cover managed-only, all scopes with a shadowed rule, partial
provider failure, and unavailable — each in Dark and Light.

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

* chat: complete the Permissions fixture coverage

Expands the fixtures from 4 to 13 (26 with themes) so every state the
widget can render has a screenshot baseline, and labels them
`kind: 'screenshot'` so CI treats them as such.

Adds coverage for: all three domains (Files exercises every path anchor,
Network its own argument shape), a family-wide rule, long arguments that
must ellipsize, a filtered view with no matches, fail-closed, loading,
error, and all three unavailable reasons. Fixtures build on the real
domain definitions rather than copies, so a label or docs-link change is
reflected instead of drifting.

Two problems the fixtures exposed, fixed here:
- A family-wide rule rendered as a bare kind and looked truncated. Domains
  now supply an `allRequestsLabel` ("All commands"), shown in its place.
- `splitPermissionPathArgument` was unused while the UI showed the raw
  anchors, so `//etc` versus `/src` was unexplained. Domains can now
  contribute `describeArgument`, used for the row tooltip and — more
  importantly — the accessible name, so a screen reader hears "in the
  workspace" rather than a leading slash.

Rendering a filtered view needed the filter to be set at construction, so
the widget takes an optional `initialFilter`.

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

* chat: render managed permissions from VS Code's own channels while the agent is asked

VS Code receives the same admin-authored managed-settings documents the
agent does, through the server and file channels, and retains them raw —
`IDefaultAccountService.managedSettingsRawResponse` and
`IFileManagedSettingsService.rawManagedSettings`. The Permissions sections
therefore no longer have to sit blank for seconds waiting on the
diagnostics probe.

The agent stays authoritative: it runs its own resolution, composes layers
this client cannot see, and applies fail-closed. The local read is a
labelled stand-in that is always superseded, and if the probe fails the
stand-in is kept but marked unconfirmed rather than collapsing to a bare
error — the admin-authored policy is still the best available description
of what governs the user.

Two things this must not become:
- It never merges channels. VS Code resolves managed settings by per-key
  precedence, but the agent composes `deny`/`ask` as a union and `allow` as
  an intersection; applying VS Code's precedence would show only the
  winning channel and under-report the restrictions in force. Channels are
  read independently and concatenated, and two declared allow lists set
  `allowIntersected` rather than being flattened.
- It omits native MDM. That watcher only reports keys a configuration
  policy declares, and `permissions.*` is runtime-owned with no VS Code
  setting behind it; declaring one purely to read it is what the
  managed-settings guidance warns against. The agent's answer covers it.

Extraction is shared with the probe path, so both produce identical rows.
Also registers `NullFileManagedSettingsService` in web so the service is
injectable everywhere, mirroring the existing native MDM registration.

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

* Update DevSkim workflow trigger to include Docs

* Modify DevSkim workflow triggers and branches

Updated workflow triggers for DevSkim to use 'MacOS' and changed branches from 'main' to 'master'.

* Update CodeNotify for automations (microsoft#337118)

* automations: add Ben to CodeNotify

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

* signing commit

---------

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

* test: isolate CopilotAgent proxy environment (microsoft#337119)

Clear ambient proxy variables for every CopilotAgent test and restore the original environment after each test so 1ES Network Isolation cannot bypass the mocked proxy resolver.

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

* [cherry-pick] sessions: make harness bootstrap authentication provider-neutral (microsoft#337111)

Co-authored-by: vs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>

* chat: Configure keybindings for voice control actions (microsoft#337115)

Make each segmented Voice Mode control configure the command it currently invokes, including start/disconnect, listen, and mute actions. Add regression coverage for the state-aware mappings.\n\nFixes microsoft#337067\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Revert CSS changes from PR microsoft#336770 to fix hover regression (microsoft#337107)

* network: align URL trust and IDN domain policies (microsoft#336960)

* network: normalize Unicode wildcard domain patterns

Normalize wildcard suffixes with the URL-aware authority helper before validating the pattern. Add matching, policy, and fetch-tool regression coverage while preserving existing domain handling.

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

* network: normalize sandbox domains and IDN URL approvals

Canonicalize sandbox domain policies and preflight URL hosts, rejecting patterns that cannot be normalized. Match equivalent Unicode and Punycode literal host labels in URL trust and approval rules while preserving existing glob semantics.

Partial Unicode wildcard labels remain outside this change.

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

* url: align trust checks with effective HTTP destinations

Normalize authority separators and resolved paths consistently across trusted domains, URL approval rules, and web-page fetching. Preserve hostname case semantics, escaped path data, and actual request destinations, with regression coverage for approvals, exclusions, and declined tool calls.

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

* sandbox: warn and deny network for invalid domain patterns

Keep shell-tool registration and offline sandboxed commands available when domain patterns cannot be normalized. Log a warning and use a deny-all policy instead of throwing, with regression coverage for both lists and recovery after settings are corrected.

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

* url: bound glob matching and preserve effective URL semantics

Replace the eager recursive matcher with iterative deduplicated states to avoid Unicode path allocation spikes and stack growth. Normalize configured patterns consistently, preserve effective authority and path semantics, and retain HTTP path case without changing non-HTTP drive normalization.

Add regression coverage for the PR feedback and verify real Code OSS trust, approval, fetch, and sandbox workflows.

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

---------

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

* agentHost: stabilize concurrent subagent replay (microsoft#337102)

* agentHost: stabilize concurrent subagent replay

Match opted-in concurrent parent and child model requests by their normalized projections, and canonicalize only cross-channel completion interleaving in the affected AHP snapshot. (Written by Copilot)

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

* agentHost: preserve per-chat snapshot order

Canonicalize the complete action sequence for each participating chat so cross-channel normalization cannot move a completion ahead of an earlier response. Extend the regression test with interleaved response actions. (Written by Copilot)

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

---------

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

* Make subagent model guidance the default (microsoft#337116)

* Make subagent model guidance the default

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

* Update Copilot system message expectation

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

---------

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

* Fix migration activity persistence after reverting a customization (microsoft#336828)

Agent Host changes for agents/customization-migration-revert-fix

* Agents - remember isolation per workspace (microsoft#337125)

* Agents - remember isolation per workspace

* Pull request feedback

* sessions: cap unified picker recent folders (microsoft#337132)

Keep Remote actions visible by limiting the unified workspace picker to ten recent workspaces. Add regression coverage for the cap.\n\nFixes microsoft#337129\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: clean up Windows agent-host descendants after shutdown (microsoft#337080)

* test: clean up Windows agent-host descendants after shutdown

Record the test server's descendants before graceful shutdown and await cleanup of survivors before removing temporary directories. Keep product provider shutdown and timeout budgets unchanged. Add a Windows regression proving that a clean parent exit does not imply descendant exit.

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

* test: bound descendant snapshots by the shutdown deadline

Share the existing shutdown budget between descendant enumeration and graceful exit. Preserve EOF and forced cleanup when enumeration stalls, report the timeout afterward, and cover that path with a real-process regression.

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

---------

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

* sessions: fix unified workspace picker edge cases (microsoft#337095)

* sessions: clarify remote chat target

Show the selected remote host for workspace-less chats and align workspace picker submenu affordances with the row edge.\n\nFixes microsoft#336544\nFixes microsoft#336582\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* sessions: align workspace picker submenu indicator

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

* git: ignore deleted cached repository paths

Validate the repository path when callers request it from git.clone so a surviving workspace cache entry cannot resurrect a deleted clone.\n\nFixes microsoft#335672\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

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

* Update CodeNotify for automations (microsoft#337118)

* automations: add Ben to CodeNotify

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

* signing commit

---------

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

* test: isolate CopilotAgent proxy environment (microsoft#337119)

Clear ambient proxy variables for every CopilotAgent test and restore the original environment after each test so 1ES Network Isolation cannot bypass the mocked proxy resolver.

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

* [cherry-pick] sessions: make harness bootstrap authentication provider-neutral (microsoft#337111)

Co-authored-by: vs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>

* chat: Configure keybindings for voice control actions (microsoft#337115)

Make each segmented Voice Mode control configure the command it currently invokes, including start/disconnect, listen, and mute actions. Add regression coverage for the state-aware mappings.\n\nFixes microsoft#337067\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* Revert CSS changes from PR microsoft#336770 to fix hover regression (microsoft#337107)

* network: align URL trust and IDN domain policies (microsoft#336960)

* network: normalize Unicode wildcard domain patterns

Normalize wildcard suffixes with the URL-aware authority helper before validating the pattern. Add matching, policy, and fetch-tool regression coverage while preserving existing domain handling.

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

* network: normalize sandbox domains and IDN URL approvals

Canonicalize sandbox domain policies and preflight URL hosts, rejecting patterns that cannot be normalized. Match equivalent Unicode and Punycode literal host labels in URL trust and approval rules while preserving existing glob semantics.

Partial Unicode wildcard labels remain outside this change.

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

* url: align trust checks with effective HTTP destinations

Normalize authority separators and resolved paths consistently across trusted domains, URL approval rules, and web-page fetching. Preserve hostname case semantics, escaped path data, and actual request destinations, with regression coverage for approvals, exclusions, and declined tool calls.

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

* sandbox: warn and deny network for invalid domain patterns

Keep shell-tool registration and offline sandboxed commands available when domain patterns cannot be normalized. Log a warning and use a deny-all policy instead of throwing, with regression coverage for both lists and recovery after settings are corrected.

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

* url: bound glob matching and preserve effective URL semantics

Replace the eager recursive matcher with iterative deduplicated states to avoid Unicode path allocation spikes and stack growth. Normalize configured patterns consistently, preserve effective authority and path semantics, and retain HTTP path case without changing non-HTTP drive normalization.

Add regression coverage for the PR feedback and verify real Code OSS trust, approval, fetch, and sandbox workflows.

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

---------

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

* agentHost: stabilize concurrent subagent replay (microsoft#337102)

* agentHost: stabilize concurrent subagent replay

Match opted-in concurrent parent and child model requests by their normalized projections, and canonicalize only cross-channel completion interleaving in the affected AHP snapshot. (Written by Copilot)

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

* agentHost: preserve per-chat snapshot order

Canonicalize the complete action sequence for each participating chat so cross-channel normalization cannot move a completion ahead of an earlier response. Extend the regression test with interleaved response actions. (Written by Copilot)

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

---------

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

* Make subagent model guidance the default (microsoft#337116)

* Make subagent model guidance the default

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

* Update Copilot system message expectation

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

---------

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

* Fix migration activity persistence after reverting a customization (microsoft#336828)

Agent Host changes for agents/customization-migration-revert-fix

* Agents - remember isolation per workspace (microsoft#337125)

* Agents - remember isolation per workspace

* Pull request feedback

* sessions: cap unified picker recent folders (microsoft#337132)

Keep Remote actions visible by limiting the unified workspace picker to ten recent workspaces. Add regression coverage for the cap.\n\nFixes microsoft#337129\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test: clean up Windows agent-host descendants after shutdown (microsoft#337080)

* test: clean up Windows agent-host descendants after shutdown

Record the test server's descendants before graceful shutdown and await cleanup of survivors before removing temporary directories. Keep product provider shutdown and timeout budgets unchanged. Add a Windows regression proving that a clean parent exit does not imply descendant exit.

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

* test: bound descendant snapshots by the shutdown deadline

Share the existing shutdown budget between descendant enumeration and graceful exit. Preserve EOF and forced cleanup when enumeration stalls, report the timeout afterward, and cover that path with a real-process regression.

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

---------

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

---------

Co-authored-by: Josh Spicer <23246594+joshspicer@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Ben Villalobos <bevillal@microsoft.com>
Co-authored-by: Joaquín Ruales <1588988+jruales@users.noreply.github.com>
Co-authored-by: vs-code-engineering[bot] <122617954+vs-code-engineering[bot]@users.noreply.github.com>
Co-authored-by: vs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>
Co-authored-by: Megan Rogge <merogge@microsoft.com>
Co-authored-by: Ladislau Szomoru <3372902+lszomoru@users.noreply.github.com>
Co-authored-by: Dmitriy Vasyura <dmitriv@microsoft.com>
Co-authored-by: roblourens <roblourens@gmail.com>
Co-authored-by: Bhavya U <bhavyau@microsoft.com>
Co-authored-by: Hawk Ticehurst <39639992+hawkticehurst@users.noreply.github.com>
Co-authored-by: Christof Marti <chrmarti@microsoft.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-sandbox chat fetch-tool Issues concerning the fetch internal tool and web extracting service network Network related issues security

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants