Skip to content

[cherry-pick] sessions: Refine remote management labels and saved SSH cleanup - #344313

Merged
Christof Marti (chrmarti) merged 1 commit into
release/1.144from
cherry-pick/344273
Oct 26, 2026
Merged

Christof Marti (chrmarti) merged 1 commit into
release/1.144from
cherry-pick/344273

Conversation

@vs-code-engineering

Copy link
Copy Markdown
Contributor

Cherry-pick of #344273 from main.

Summary

  • Rename Environments to GitHub Environments and Tunnels to Dev Tunnels in the Environment picker and Remotes management.
  • Rename the Remotes connection column to Status, including its accessible labels and help.
  • Put Compact View / Collapse All Groups before Manage Remote Environments / Open Worktree Cleanup in the Sessions overflow menu, preserving the order within each group.
  • Keep the Remotes management setting's Experimental badge, existing key, default, gates, experiment control, and trigger events unchanged.
  • Update setup guidance, settings-action labels, accessibility help, and regression tests to match.
  • Offer confirmed Delete only for saved SSH connections absent from SSH config, including disconnected entries with no active provider. Recheck config before and after confirmation, forget the saved connection, and disconnect without editing SSH config or remote files.
  • Fix the CI compiler error in the accessibility-help test by opening an input and narrowing the active editor to the visible-editor contract.

Remotes uses the same section order as the Environment picker's connection entries: GitHub Environments, Dev Tunnels, WSL, SSH, omitting unavailable sections. A regression test compares the sections against the actual registered picker menu.

Created from freshly fetched origin/main at d2e7f610b88, not stacked on the previous branch. Follow-up to #344228; related to #344263.

Validation

  • npm run build-fast -- --client-only - passed.
  • npm run typecheck-client - passed.
  • Focused Electron tests - 249 passing:
.\scripts\test.bat --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\missionControlAgentHostContribution.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\remotesEditor.test.ts --run src\vs\sessions\contrib\sessions\test\browser\sessionsViewMenu.test.ts --run src\vs\sessions\contrib\chat\test\browser\newSessionComposerLayout.test.ts --run src\vs\sessions\contrib\chat\test\browser\sessionsChatAccessibilityHelp.test.ts --run src\vs\sessions\contrib\chat\test\browser\sessionEnvironmentPicker.test.ts --reporter dot
  • Browser tests - 408 passing across WebKit and Edge:
npm run test-browser-no-install -- --browser webkit --browser chromium-msedge --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts --run src\vs\sessions\contrib\sessions\test\browser\sessionsViewMenu.test.ts --run src\vs\sessions\contrib\chat\test\browser\newSessionComposerLayout.test.ts --run src\vs\sessions\contrib\chat\test\browser\sessionsChatAccessibilityHelp.test.ts --run src\vs\sessions\contrib\chat\test\browser\sessionEnvironmentPicker.test.ts --reporter dot
  • Changed-file lint and hygiene - 16 files passed; git diff --check passed. Commands were run before committing, with a targeted recheck after the final test adjustment:
$files = @(git diff --name-only -- '*.ts')
npm run eslint -- $files
node build\hygiene.ts $files
git diff --check
npm run eslint -- src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts
node build\hygiene.ts src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts
  • Component Explorer - 64 Remotes fixtures rendered and disposed without errors; inspected the renamed sections and Status column in Dark and Light High Contrast.

After restoring the Experimental badge, the client build passed again, the focused schema test passed (1 passing), and hygiene passed for both affected files:

npm run build-fast -- --client-only
.\scripts\test.bat --run src\vs\sessions\contrib\chat\test\browser\newSessionComposerLayout.test.ts --grep 'Manage Remotes is' --reporter dot
node build\hygiene.ts src\vs\sessions\contrib\chat\browser\chat.contribution.ts src\vs\sessions\contrib\chat\test\browser\newSessionComposerLayout.test.ts

The accessibility review fix passed all 10 Remotes editor tests and changed-file ESLint. Final section-order validation passed 162 Electron tests, 166 browser tests, lint/hygiene for all three changed files, and a refreshed Dark fixture inspection:

.\scripts\test.bat --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\remotesEditor.test.ts --reporter dot
npm run build-fast -- --client-only
.\scripts\test.bat --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesModel.test.ts --reporter dot
npm run test-browser-no-install -- --browser webkit --browser chromium-msedge --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts --reporter dot
npm run eslint -- src\vs\sessions\contrib\providers\remoteAgentHost\browser\remotesModel.ts src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts
node build\hygiene.ts src\vs\sessions\contrib\providers\remoteAgentHost\browser\remotesModel.ts src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts

SSH cleanup and CI-fix validation passed 215 Electron tests, 337 browser tests, the client type-check, lint/hygiene for 11 changed files, and all 64 Remotes fixtures. Tests cover configured/unknown hosts, confirmation cancellation, config changes during confirmation, stale discovery, forwarded SSH addresses, and shared teardown ordering:

npm run build-fast -- --client-only
npm run typecheck-client
.\scripts\test.bat --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesModel.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteHostOptions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\sshAgentHost.contribution.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\remotesEditor.test.ts --reporter dot
npm run test-browser-no-install -- --browser webkit --browser chromium-msedge --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesModel.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remotesWidget.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\sshAgentHost.contribution.test.ts --reporter dot
$files = @(git diff --name-only -- '*.ts')
npm run eslint -- $files
node build\hygiene.ts $files
git diff --check

The failing CI job reported TS2322 for assigning RemotesEditor without a known input to IVisibleEditorPane; the corrected test now sets the input and verifies it rather than casting away the mismatch.

No live remote connections or destructive operations were performed. Full smoke/integration suites were not run locally.

Manual checks

  • Open the Environment picker and verify GitHub Environments and Dev Tunnels.
  • Open Remotes and verify the section order matches the picker, along with the Status column, setup links, and accessibility help.
  • Open the Sessions overflow menu and verify the view-actions group comes before management.
  • Find the Remotes management setting and verify its Experimental badge and existing saved values remain unchanged.
  • Verify configured SSH hosts have no Delete action, while previously saved hosts removed from SSH config offer Delete after successful discovery.
  • Cancel SSH Delete and verify the saved host remains; confirm it and verify the saved entry disappears without changing SSH config or remote files.

Copilot AI balanced review requested due to automatic review settings October 26, 2026 15:21
@vs-code-engineering vs-code-engineering Bot added the cherry-pick-artifact Auto-generated cherry-pick PR label Oct 26, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Screenshot Changes

Base: 07bebfea Current: 80030afb

Changed (24)

sessions/remotes/remotesWidget/InlineActions/Light
Before After
before after
sessions/remotes/remotesWidget/ConnectionError/Light
Before After
before after
sessions/remotes/remotesWidget/ConnectionRetry/Light
Before After
before after
sessions/remotes/remotesWidget/ShortEmpty/Light
Before After
before after
sessions/remotes/remotesWidget/ShortEmptyNarrow/Light
Before After
before after
sessions/remotes/remotesWidget/Environments/Light
Before After
before after
sessions/remotes/remotesWidget/EnvironmentActions/Light
Before After
before after
sessions/remotes/remotesWidget/RefreshingTunnels/Light
Before After
before after
sessions/remotes/remotesWidget/TunnelDiscoveryFailure/Light
Before After
before after
sessions/remotes/remotesWidget/TunnelSignIn/Light
Before After
before after
sessions/remotes/remotesWidget/TunnelSigningIn/Light
Before After
before after
sessions/remotes/remotesWidget/TunnelSignInNarrow/Light
Before After
before after
sessions/remotes/remotesWidget/EnvironmentsNarrow/Light
Before After
before after
sessions/remotes/remotesWidget/EnvironmentsEmpty/Light
Before After
before after
sessions/remotes/remotesWidget/EnvironmentsWarning/Light
Before After
before after
sessions/remotes/remotesWidget/Table/Light
Before After
before after
sessions/remotes/remotesWidget/Wide/Light
Before After
before after
sessions/remotes/remotesWidget/Windows/Light
Before After
before after
sessions/remotes/remotesWidget/Narrow/Light
Before After
before after
sessions/remotes/remotesWidget/Empty/Light
Before After
before after
sessions/remotes/remotesWidget/EmptyWindows/Light
Before After
before after
sessions/remotes/remotesWidget/EmptyNarrow/Light
Before After
before after
sessions/remotes/remotesWidget/RefreshWarnings/Light
Before After
before after
sessions/remotes/remotesWidget/EmptyRefreshWarnings/Light
Before After
before after

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.

🟡 Changes recommended

SSH deletion can mistake unreadable configuration for absence, and an in-flight connection can restore a deleted saved entry.

2 open issues
What changed in this PR

This cherry-pick refines remote management in the Agents Window and adds confirmed cleanup of saved SSH connections absent from SSH configuration, extending the inline management actions from #344228.

Changes:

  • Align remote labels, section ordering, Status text, and accessibility guidance.
  • Add saved SSH deletion with configuration rechecks and shared disconnect handling.
  • Update regression tests, fixtures, and Sessions overflow ordering.
File Description
src/​vs/​sessions/​contrib/​sessions/​test/​browser/​sessionsViewMenu.test.ts Tests view actions preceding management actions.
src/​vs/​sessions/​contrib/​sessions/​browser/​views/​sessionsViewActions.ts Orders the view-actions overflow group.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​electron-browser/​remotesEditor.test.ts Tests updated help and narrows the visible editor type.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​sshAgentHost.contribution.test.ts Updates shared SSH helper imports.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesWidget.test.ts Tests labels, ordering, and keyboard-accessible SSH deletion.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesWidget.fixture.ts Adds a deletable saved SSH fixture.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesModel.test.ts Tests SSH deletion eligibility, confirmation, and revalidation.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remoteAgentHostActions.test.ts Checks labels and section order against registered picker actions.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​missionControlAgentHostContribution.test.ts Verifies the GitHub Environments picker label.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​electron-browser/​remotes.contribution.ts Updates accessibility help and management menu grouping.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​sshAgentHost.contribution.ts Reuses the relocated SSH disconnect helper.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesWidget.ts Updates display text and routes SSH deletion.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesTable.ts Displays eligible SSH Delete actions and revised settings labels.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesModel.ts Implements section ordering and saved SSH deletion.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remoteHostOptions.ts Houses shared SSH identity and disconnect helpers.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remoteAgentHostActions.ts Renames environment and tunnel picker actions.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​missionControlAgentHostContribution.ts Renames the registered environment picker entry.
src/​vs/​sessions/​contrib/​chat/​test/​browser/​sessionsChatAccessibilityHelp.test.ts Updates accessibility-help expectations.
src/​vs/​sessions/​contrib/​chat/​browser/​sessionsChatAccessibilityHelp.ts Uses GitHub Environments in navigation guidance.
src/​vs/​sessions/​contrib/​chat/​browser/​chat.contribution.ts Places worktree cleanup in the management overflow group.

Review effort: Balanced

Comment on lines +459 to +462
removeSSHRemoteAgentHostEntry(this.storageService, id);
this.sshDiscoveryVersion++;
try {
await disconnectSSHEntry(current, this.remoteAgentHostService, this.sshService);
if (!this.enabled || this._store.isDisposed) {
throw new CancellationError();
}
const hosts = await this.sshService.listSSHConfigHosts();

@connor4312 Connor Peet (connor4312) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

No actionable P1/P2 findings in the reviewed changes. Inspected the diff, surrounding SSH deletion/disconnection code, and relevant regression tests. Tests were not executed during this read-only review.

Written by Connor's agent running GPT-6.1 Sol

@chrmarti
Christof Marti (chrmarti) merged commit 6262011 into release/1.144 Oct 26, 2026
45 checks passed
@chrmarti
Christof Marti (chrmarti) deleted the cherry-pick/344273 branch October 26, 2026 16:13
@vs-code-engineering vs-code-engineering Bot added this to the 1.144.0 milestone Oct 26, 2026
Christof Marti (chrmarti) added a commit that referenced this pull request Oct 26, 2026
<!-- 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

- Rename **Manage...** in the Environment picker to **Manage Remote
Environments...**.
- Align the setting description and chat/Remotes accessibility help with
the new label.
- Preserve the command, visibility gates, selected environment, and
per-host Manage submenus.

Rebased onto `origin/release/1.144` at `62620115296` to avoid the
unrelated chat-move test regression introduced on main by #344057
(`13832cc4487`). The diff remains the same six-file label-only change.
Follow-up to the release backports #344266 and #344313; related to
#344263.

## Validation

- `npm run build-fast -- --client-only` - passed after rebasing onto
release/1.144.
- Focused picker and accessibility tests on release/1.144 - **79
passing**:

```powershell
.\scripts\test.bat --run src\vs\sessions\contrib\chat\test\browser\sessionEnvironmentPicker.test.ts --run src\vs\sessions\contrib\chat\test\browser\sessionsChatAccessibilityHelp.test.ts --reporter dot
```

- Release-diff ESLint and hygiene - **6 files passed**; whitespace check
passed:

```powershell
$files = @(git diff --name-only origin/release/1.144...HEAD -- '*.ts')
npm run eslint -- $files
node build\hygiene.ts $files
git diff --check origin/release/1.144...HEAD
```

This is a string-only change; full type-check and smoke/integration
suites were not run.

## Manual check

Open the Environment picker, select **Manage Remote Environments...**,
and verify Remotes management opens without changing the selected
environment.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

cherry-pick-artifact Auto-generated cherry-pick PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants