Skip to content

[pull] main from microsoft:main - #1604

Merged
pull[bot] merged 6 commits into
code:mainfrom
microsoft:main
Aug 18, 2026
Merged

[pull] main from microsoft:main#1604
pull[bot] merged 6 commits into
code:mainfrom
microsoft:main

Conversation

@pull

@pull pull Bot commented Aug 18, 2026

Copy link
Copy Markdown

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

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

benibenj and others added 6 commits August 18, 2026 08:45
Agent Merge never evaluated CI failures or PR feedback because its gate could
never become determinate. Two independent bugs in the GitHub platform layer:

1. The capability probe selected `__Type.fields` three times, but GitHub caps
   introspection at two. It answered HTTP 200 with INTROSPECTION_LIMIT_EXCEEDED,
   so every capability was reported unavailable - even for api.github.com. That
   forced reviewThreads/checks/mergeability onto fallbacks hardcoded to
   `complete: false`, and evaluateAgentMerge requires all three complete, so the
   gate could only ever return "Pull request state is incomplete or stale".
   The error was not a schema-validation error, so it was never cached and the
   probe repeated indefinitely.

   `RequirableByPullRequest` now gets an existence check instead, which is exact
   because `isRequired` is that interface's only field.

2. Conditional REST GETs threw on every 304. GitHub may answer a conditional
   request with a reissued validator (notably weak/strong forms of the same
   entity), and the literal comparison treated that as a protocol violation.
   This was self-perpetuating: the stored validator was never updated, so each
   later revalidation resent the stale one and failed identically until the
   cache was evicted, breaking refresh of checks and submittedReviews.

   A 304 with a cached entry is now accepted, and the reissued validator and
   Link are adopted so the next revalidation sends what GitHub last handed out.

Also log when a probe error disables GraphQL, since `graphql=false` is otherwise
indistinguishable from a legitimately old GitHub Enterprise host and hid the
root cause entirely.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* list: batch dynamic height measurements

Improves dynamic-height list rendering by batching DOM writes and reads and by
reusing measured rows that enter the final render range.

- Groups height preparation, measurement, and publication into separate phases.
- Promotes compatible measured rows instead of rendering the same element twice.
- Releases unpromoted rows when rendering fails or the final range changes.
- Validates row identity before promotion after reentrant list updates.
- Adds tests for batching, row reuse, error cleanup, and reentrant splices.
- Reduces median conversation-switch latency by 31.1% for a small chat and 31.6%
  for a large chat across repeated alternating swaps.

(Commit message generated by Copilot)

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

* list: handle reentrant dynamic height probes

Restart batched height measurement when renderer callbacks mutate the list, and cover multi-row batching and remove-all reentrancy.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* list: preserve reentrant height measurements

Keep surviving delegated measurements synchronized with the range map and prevent stale tree render cleanup from removing newer node mappings.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* list: fix dynamic height test delegate

Return null for unmeasured delegated heights to satisfy the virtual delegate contract in CI type checking.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Preserve session type when splitting a Chat Editor (#331422)

Splitting a Chat Editor called `ChatEditorInput.copy()`, which returned a
generic `vscode-chat-editor:` placeholder with no session type. `ChatEditor.
setInput()` reads the session type before resolving the input, saw `local`,
and unlocked the widget from the coding agent. The input then resolved into a
new agent-host session, but the widget lock was never recomputed, so
`chatIsAgentHostSession` stayed false and the Agent Mode ("Interactive")
picker and related agent-host controls were filtered out.

Make `copy()` mint a new untitled URI of the source pane's own session type
(local or agent-host), so a split reproduces the source harness (Claude ->
Claude, Copilot -> Copilot, Codex -> Codex) and `setInput()` locks the widget
correctly before rendering. Falls back to the previous generic URI when the
source type is unknown or cannot start a new session.

Extract a shared `getNewChatSessionResource(sessionType)` helper into chatUri
and reuse it from `clearChatEditor` (the New Chat path) and the default
session-resource helpers in constants, removing duplicated URI construction.

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

* agentHost: reselect new-chat folder when its workspace folder is removed

In a multi-root Editor Window, a new (untitled) agent-host chat pins a primary working directory. When that folder was removed from the workspace, the Folder chip kept showing the removed folder (and could disable), and the provisional session — and first Send — stayed rooted there.

Invalidate the stale selection in the two services that own it: the new-session folder service clears an explicit selection whose folder was removed (keeping the sticky default so it resurfaces on re-add) and exposes resolveNewSessionPrimary(); the untitled provisional service reselects that primary and recreates the draft when its own primary is removed. Started/rebound sessions are excluded so they keep their immutable primary. The folder chip no longer mutates state while rendering and sets its ARIA label after the visible text.

Fixes #331200

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

* agentHost: use provider-aware comparator and honor cleared draft primary

Address PR review feedback on the new-chat folder reselection:

- Use IUriIdentityService.extUri (provider-aware) instead of extUriBiasedIgnorePathCase for reselection removal/membership checks in both the folder service and the provisional service, so a case-distinct sibling on a case-sensitive remote (e.g. /work/repo remaining after /work/Repo is removed) no longer masks the removed folder. getDefaultFolder now uses the same comparator so all checks agree.

- Track whether a draft's primary was explicitly cleared (last workspace folder removed) versus never initialized. tryRebind no longer falls back to the stale send-time argument for an explicitly cleared primary, so a folder removed during first Send is not resurrected as the started session's root or active-client scope.

Adds a case-sensitive-remote regression test and a zero-folder first-Send race test.

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

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* agentHost: drop vestigial tryRebind working-directory fallback and param

The provisional draft's own primary is authoritative for rebind: the backend
working directories already derive from oldEntry.workingDirectory via
_computeEntryWorkingDirectories, so the scalar targetWorkingDirectory now simply
mirrors it (no "?? workingDirectory" fallback). This removes the scalar/array
skew that could record a just-removed folder in the new entry and active-client
scope, so the workingDirectoryCleared flag is no longer needed and is deleted.

The tryRebind "workingDirectory" parameter became vestigial once createSession
switched to the entry-derived working-directories array; it no longer influences
the backend cwd (the handler resolves a started session's directory from
getFolder, set via setFolder on the real resource). Remove it from the
interface, implementation, and the newChatSessionItem caller.

Re-point the two contribution tests that asserted the tryRebind argument to
assert the real carry mechanism (getFolder on the real resource); update
provisional tests to the 3-arg signature.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* agentHost: Exclude subagent chats from billed credit telemetry

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

* Potential fix for pull request finding

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
* Adjust status bar padding and add test for modern UI layout constraints

* Adjust notification center and toasts positioning for Modern UI layout

* Remove linkPresentationProviders from extension points

---------

Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com>
@pull pull Bot locked and limited conversation to collaborators Aug 18, 2026
@pull pull Bot added the ⤵️ pull label Aug 18, 2026
@pull
pull Bot merged commit 4d9c292 into code:main Aug 18, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants