Skip to content

[pull] main from microsoft:main#1188

Merged
pull[bot] merged 9 commits intocode:mainfrom
microsoft:main
Apr 27, 2026
Merged

[pull] main from microsoft:main#1188
pull[bot] merged 9 commits intocode:mainfrom
microsoft:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 27, 2026

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 : )

sandy081 and others added 9 commits April 26, 2026 23:33
…312627)

- Show a personalized welcome greeting with 'Get Started' button for
  first-launch users who are already signed in
- Show enhanced sign-in screen with welcome content for first-launch
  users who are not yet signed in
- Show plain sign-in screen for returning users who are not signed in
- Add 'Happy Agentic Coding!' tagline to all welcome screens
- Update 'Sign in with GitHub' button label
- Add `isFirstLaunch` parameter to `SessionsWalkthroughOverlay`
- Guard autorun auto-dismiss with `isShowingWelcome` to prevent race
  condition where overlay is dismissed before welcome renders
- Fix developer reset command to simulate first-launch experience

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

Targeted fix. Seems a bit suspicious the editor layout logic upstream doesn't do this for us
Co-authored-by: Copilot <copilot@github.com>
* plan widget fixes

* Update extensions/copilot/src/extension/chatSessions/copilotcli/node/exitPlanModeHandler.ts

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

* Update plan review action label tests to match new labels

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
sessions: ensure account/update widgets render with icons after IntersectionObserver fires

actionViewItemService.register() does not fire onDidChange when a factory
is  it only fires when the optional `event` argument fires.registered
This caused a race: if the toolbar's IntersectionObserver fired its first
visible callback (and called _updateToolbar()) before AccountWidgetContribution
registered its view item factories, the toolbar rendered text-label fallbacks
and was never notified to re-render with the custom widgets.

Fix by passing a shared Emitter to both register() calls and firing it once
after both factories are in place. This triggers IActionViewItemService.onDidChange
for Menus.TitleBarRightLayout regardless of ordering, so the toolbar always
re-renders with TitleBarAccountWidget / TitleBarUpdateWidget.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Agents: enhance SSH and remote agent host management

- Rewrite the 'Connect via SSH' picker to mirror the remote-ssh
  extension UX: configured aliases at the top, dynamic
  'user@host' synthetic entry, plus '+ Add New SSH Host...' and
  'Configure SSH Hosts...' footer items.
- Add 'Add New SSH Host...' command that ensures ~/.ssh/config
  exists (mode 0700/0600 on POSIX) and inserts a Host snippet
  with tabstops via SnippetController2.
- Add 'Configure SSH Hosts...' command that lists known SSH
  configuration files (user + system) and opens the picked one.
- Add 'Manage Remote Agent Hosts...' F1 command that shows the
  same actions as the workspace picker's Manage submenu, with
  inline X buttons to remove non-tunnel remotes.
- Show inline X (remove) buttons next to non-tunnel remote
  entries in the workspace picker Manage submenu, by propagating
  onRemove from child IActions through actionList.
- Extract the per-remote management options popup into a shared
  showRemoteHostOptions(accessor, provider) helper and consume
  it from both the workspace picker and the new manage command.
- Centralize all action/command IDs on a RemoteAgentHostCommandIds
  const block.
- Add listSSHConfigFiles() to ISSHRemoteAgentHostService (user
  config always; system config when present) and update all
  impls + test mocks.

(Written by Copilot)

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

* Agents: add back button navigation to remote host management pickers

- remoteHostOptions: add showBackButton option to showRemoteHostOptions();
  now returns 'back' when the back button is pressed; picker is created with
  createQuickPick for full button support
- remoteAgentHostActions: add showBackButton option to promptToConnectViaSSH();
  the ConnectViaSSH action's run() accepts an optional onBack callback and
  calls it when the back button is pressed
- manageRemoteAgentHosts: extract showManagePicker() inner function so it can
  be called recursively on back; pass showManagePicker as onBack callback to
  both the per-remote options picker and SSH sub-flow actions

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

* Add back buttons to all SSH/tunnel sub-pickers

- Configure SSH Hosts file picker now shows back button when launched
  from SSH picker, returning to SSH picker on click
- Tunnel picker now shows back button when launched from manage picker,
  returning to manage picker on click
- Both pickers fix leaked disposables by wrapping in DisposableStore
- Remove leftover setTimeout from manage picker onDidAccept
- Add comment explaining legitimate setTimeout in workspace picker

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

* Address Copilot review: rename header + rethrow SSH config errors

- Rename 'Connected' separator to 'Remote Agent Hosts' since items
  are not filtered by connection status
- Rethrow errors from ensureUserSSHConfig so callers can surface
  real failures to the user instead of silently opening a bad path

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Workaround zero size layouts of webview elements
* agent-host: report git-driven session file diffs (Written by Copilot)

Adds an alternative diff source for agent sessions that derives changes
from the working-tree git state instead of from edit-tool emissions, so
edits made via terminal/shell commands also show up in the Changes view.

Approach
--------
* IAgentHostGitService gains computeSessionFileDiffs() and showBlob().
* gitDiffContent.ts encodes 'git-blob:' content URIs that pin a blob to
  a session + sha + repo-relative path.
* AgentService routes 'git-blob:' resourceRead requests to
  gitService.showBlob(); AgentHostFileSystemProvider.stat() short-
  circuits 'git-blob:' alongside 'session-db:' so the diff editor's
  stat-then-read flow works end-to-end.
* AgentSideEffects._tryComputeGitDiffs runs after each turn (debounced
  with the existing diff scheduler) and overrides edit-tool diffs when
  git is available.

Tests
-----
Unit + integration coverage in src/vs/platform/agentHost/test/node/.

* agent-host: regression tests for git-blob: stat fast-path

Adds five tests against AgentHostFileSystemProvider covering the
synthetic content scheme fast-path in stat(): git-blob: and
session-db: URIs must return a File stat directly without trying
to list a parent directory that doesn't exist.

Verified by reverting the git-blob: branch of the  theallowlist
new 'git-blob: stat' and 'full stat-then-read round-trip' tests
fail with EntryNotFound, which is exactly the error the diff
editor surfaced when opening a diff of a new file.

(Written by Copilot)

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

* agent-host: address Copilot review feedback

- agentHostGitService: bump default execFile maxBuffer to 32MB so
  diff output in large repos doesn't fail with ENOBUFS and silently
  drop terminal-driven diffs.
- agentHostGitService.showBlob: validate sha is a hex object name
  before passing it to git, so a malformed git-blob: URI can't
  inject options or resolve to surprising refs.
- mockAgent terminal-edit branch: void+catch the async IIFE so a
  filesystem failure surfaces as a chat delta instead of an
  unhandled rejection (test flake source).
- agentSideEffects.test: replace setTimeout(100) with awaiting the
  SessionDiffsChanged envelope event for both new diff-computation
   deterministic and immune to slow CI.tests
- sessionDiffsRealSdk integrationTest: shell-quote the target file
  path so temp dirs containing spaces don't break the prompt.

(Written by Copilot)

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

* agent-host: use IFileService and INativeEnvironmentService in AgentHostGitService

Replace direct fs/promises and os.tmpdir usage with platform services so
the temp-index dance in computeSessionFileDiffs goes through the same
file system abstraction as the rest of the workbench. (Written by Copilot)

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

* agent-host: set COMMAND_HOOK_LOCK=1 in temp-index env for GVFS repos

Mirrors the extension's buildTempIndexEnv which sets this flag to avoid
holding the GVFS command hook lock during temp-index git operations.
(Written by Copilot)

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

* agent-host: inject IAgentHostGitService via DI into AgentSideEffects

Instead of threading gitService through IAgentSideEffectsOptions, register
it in the local ServiceCollection and inject it via @IAgentHostGitService
decorator, which is the normal pattern everywhere else. (Written by Copilot)

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

* Fix deleted file diffs: use IChatSessionFileChange2 with undefined modifiedUri for deletions

For deleted files, the 'modified' side of the diff editor must be absent.
The renderer detects deletions via `change.modifiedUri === undefined`, so
producing `IChatSessionFileChange2` (which carries a `uri` key alongside
optional `modifiedUri`) is the right shape.

Previously diffsToChanges returned IChatSessionFileChange (required
modifiedUri) and fell back to the deleted file's pre-deletion path as
modifiedUri, causing the diff editor to try to read a nonexistent file.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@pull pull Bot locked and limited conversation to collaborators Apr 27, 2026
@pull pull Bot added the ⤵️ pull label Apr 27, 2026
@pull pull Bot merged commit 8ae0d8e into code:main Apr 27, 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.

6 participants