Skip to content

sessions: Add inline remote management actions - #344228

Merged
Christof Marti (chrmarti) merged 5 commits into
mainfrom
chrmarti/remotes-inline-management-actions
Oct 26, 2026
Merged

Christof Marti (chrmarti) merged 5 commits into
mainfrom
chrmarti/remotes-inline-management-actions

Conversation

@chrmarti

@chrmarti Christof Marti (chrmarti) commented Oct 26, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Bring the Remote Environments editor closer to the Environment picker's Manage action picker:

  • Add inline Copy Address to every remote row, including offline and busy rows. Copy the connection address, not the display name, without connecting.
  • Add inline Change Preferred Agent Location to SSH and tunnel rows. Reuse the existing prompt, preference storage, reconnect, cancellation, and notification behavior. SSH preferences use the stable host identity rather than a forwarded port, including when no provider is currently available. Disable this action during an existing connection or management operation.
  • Add inline Update Server for incompatible hosts advertising an upgrade method. Reuse the existing progress, restart delay, reconnect, and notification flow; revalidate the capability on invocation, prevent duplicate requests, and restore keyboard focus when the action disappears.
  • Add inline Delete for supported tunnel rows, including discovered/offline tunnels. Share the confirmation dialog with the Tunnels picker and delete the service-side registration through the existing service, not the local Remove action. Protect the tunnel currently hosted by this application, revalidate after confirmation, retain rows on failure, and prevent stale discovery from restoring a deleted row.
  • Prefer fresh tunnel discovery metadata over cached records and stale provider labels in Remotes, while preserving explicit local display-name overrides.
  • Preserve keyboard navigation, focus restoration, and shared toolbar hover behavior; update accessibility help and add regression tests and four-theme action fixtures.

Created from freshly pulled main at ff05b50d4ef; this is not stacked on the previous Remotes PR.

Related functional test plan: #344161.

Remaining Manage-action parity gaps

These are reported, not implemented in this PR:

  • Remove Remote for removable non-environment hosts. This is distinct from the Environment and tunnel rows' service-side Delete operations.
  • Exact per-row Open Settings / Open SSH Configuration access. Section-level configuration actions cover much of this, but do not reproduce every host-specific route (notably WSL and explicit-credential SSH).

WebSocket hosts remain outside this editor and retain their existing Manage route.

Validation

Passed:

  • npm run gulp compile-client - initial client compilation and type-check, zero errors.
  • npm run typecheck-client - final client type-check including confirmed tunnel deletion, passed.
  • npm run build-fast -- --client-only - refreshed client output after the final test and fixture changes.
  • The following Electron selection - 245 passing:
.\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\remoteAgentHostActions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\remotesEditor.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\tunnelAgentHostServiceImpl.test.ts --reporter dot
  • Browser tests - 389 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\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\remoteAgentHostActions.test.ts --reporter dot
  • Changed-file ESLint and hygiene - 10 files passed; git diff --check passed. Commands were run before committing:
$files = @(git diff --name-only -- '*.ts')
npm run eslint -- $files
node build\hygiene.ts $files
git diff --check
  • Component Explorer: all 64 Remotes fixtures rendered and disposed without errors. Inspected the initial inline actions in all four themes and the final six-action layout in Dark and Light High Contrast.
  • Browser keyboard check reached all six tunnel actions and verified they fit without clipping. Tests verify confirmation/cancellation, duplicate protection, backend failure, post-confirmation state changes, stale discovery, and focus restoration after deletion.

Automated validation did not delete real tunnels or perform a live server upgrade. Clipboard values, preference persistence, cancellation, missing-provider behavior, reconnect failures, duplicate actions, advertised upgrade methods, restart delays, stale capabilities, and error notifications are covered by tests. The maintainer exercised live upgrades and identified separate existing startup-timeout/duplicate-supervisor and reconnect-target issues; those are not fixed by this PR. Custom-hover display could not be verified in the isolated fixture; the actions use the existing shared toolbar hover delegate unchanged.

Manual checks

  • Open Remote Environments and copy an SSH, tunnel, WSL, and offline Environment address.
  • On SSH and tunnels, cancel Change Preferred Agent Location and confirm no preference or connection change.
  • Choose either preferred location and confirm it is saved and the host reconnects; verify a reconnect failure is reported without losing the preference.
  • Confirm Update Server appears only for incompatible hosts advertising an upgrade method; verify progress, restart/reconnect, and failures on a suitable test host.
  • Cancel Delete on a test tunnel and confirm it remains; confirm deletion and verify its service-side registration and local row are removed.
  • Confirm a tunnel hosted by this application cannot be deleted until hosting stops.
  • Reach the new actions using the keyboard; confirm Copy Address remains available during a pending connection or update.

Add Copy Address for all Remotes rows and reuse the existing Preferred Agent Location flow for tunnels. Keep copying available offline and during pending operations, with keyboard, accessibility, and fixture coverage.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Copilot AI balanced review requested due to automatic review settings October 26, 2026 08:38
@github-actions

github-actions Bot commented Oct 26, 2026 •

Copy link
Copy Markdown
Contributor

Screenshot Changes

Base: 9dc0872e Current: e3c4b304

Changed (18)

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/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/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/Empty/Light
Before After
before after
sessions/remotes/remotesWidget/EmptyWindows/Light
Before After
before after
sessions/remotes/remotesWidget/RefreshWarnings/Light
Before After
before after
sessions/remotes/remotesWidget/EmptyRefreshWarnings/Light
Before After
before after

Added (1)

sessions/remotes/remotesWidget/InlineActions/Light

current

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.

🟢 Approval recommended

The scoped changes reuse established management behavior, include focused regression coverage, and have no identified blocking defects.

No open issues 🎉

What changed in this PR

Adds inline management actions to the Remote Environments editor, bringing it closer to the Environment picker’s Manage menu while reusing existing connection and preference behavior.

Changes:

  • Adds Copy Address to all remote rows, including offline and busy rows.
  • Adds Change Preferred Agent Location to tunnel rows, with busy-state guards and existing persistence and reconnect handling.
  • Updates accessibility help, regression tests, and four-theme fixtures.
File Description
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​electron-browser/​remotesEditor.test.ts Updates the test model for the new actions.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesWidget.test.ts Tests action availability, keyboard navigation, focus, and failures.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesWidget.fixture.ts Adds inline-action fixtures across four themes.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​test/​browser/​remotesModel.test.ts Tests address copying, preference persistence, cancellation, and reconnect errors.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​electron-browser/​remotes.contribution.ts Documents the new actions in accessibility help.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesWidget.ts Routes new actions and widens the action column.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesTable.ts Adds toolbar actions, labels, and enablement rules.
src/​vs/​sessions/​contrib/​providers/​remoteAgentHost/​browser/​remotesModel.ts Implements copying and delegates preference changes to the existing helper.

Review effort: Balanced

Expose server upgrades only for incompatible hosts advertising an update method, and reuse the existing upgrade flow. Extend agent location actions to SSH with stable preference keys and cover capability changes, duplicate requests, and keyboard focus.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Keep fresh discovery ahead of cached tunnel records and stale provider labels while preserving explicit local renames. Cover metadata precedence, rename reset, offline cache fallback, and canceled discovery.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Reuse the service-side tunnel deletion flow with a shared confirmation dialog. Guard hosted tunnels and stale confirmation state, invalidate in-flight discovery after deletion, and preserve keyboard focus and error recovery.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@chrmarti
Christof Marti (chrmarti) marked this pull request as ready for review October 26, 2026 12:37
@chrmarti Christof Marti (chrmarti) added the ~release-cherry-pick Trigger: cherry-pick this PR to the latest release branch label Oct 26, 2026
@vs-code-engineering

Copy link
Copy Markdown
Contributor

This PR will be automatically cherry-picked to release/1.144 when merged.

@chrmarti
Christof Marti (chrmarti) merged commit 3865740 into main Oct 26, 2026
44 checks passed
@chrmarti
Christof Marti (chrmarti) deleted the chrmarti/remotes-inline-management-actions branch October 26, 2026 12:53
@vs-code-engineering vs-code-engineering Bot added this to the 1.144.0 milestone Oct 26, 2026
@vs-code-engineering vs-code-engineering Bot added release-cherry-pick Automated cherry-pick between release and main branches and removed ~release-cherry-pick Trigger: cherry-pick this PR to the latest release branch labels Oct 26, 2026
Christof Marti (chrmarti) added a commit that referenced this pull request Oct 26, 2026
Cherry-pick of #344228 from `main`.

<!-- 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

Bring the Remote Environments editor closer to the Environment picker's
Manage action picker:

- Add inline **Copy Address** to every remote row, including offline and
busy rows. Copy the connection address, not the display name, without
connecting.
- Add inline **Change Preferred Agent Location** to SSH and tunnel rows.
Reuse the existing prompt, preference storage, reconnect, cancellation,
and notification behavior. SSH preferences use the stable host identity
rather than a forwarded port, including when no provider is currently
available. Disable this action during an existing connection or
management operation.
- Add inline **Update Server** for incompatible hosts advertising an
upgrade method. Reuse the existing progress, restart delay, reconnect,
and notification flow; revalidate the capability on invocation, prevent
duplicate requests, and restore keyboard focus when the action
disappears.
- Add inline **Delete** for supported tunnel rows, including
discovered/offline tunnels. Share the confirmation dialog with the
Tunnels picker and delete the service-side registration through the
existing service, not the local Remove action. Protect the tunnel
currently hosted by this application, revalidate after confirmation,
retain rows on failure, and prevent stale discovery from restoring a
deleted row.
- Prefer fresh tunnel discovery metadata over cached records and stale
provider labels in Remotes, while preserving explicit local display-name
overrides.
- Preserve keyboard navigation, focus restoration, and shared toolbar
hover behavior; update accessibility help and add regression tests and
four-theme action fixtures.

Created from freshly pulled `main` at `ff05b50d4ef`; this is not stacked
on the previous Remotes PR.

Related functional test plan: #344161.

## Remaining Manage-action parity gaps

These are reported, not implemented in this PR:

- **Remove Remote** for removable non-environment hosts. This is
distinct from the Environment and tunnel rows' service-side **Delete**
operations.
- Exact per-row **Open Settings / Open SSH Configuration** access.
Section-level configuration actions cover much of this, but do not
reproduce every host-specific route (notably WSL and explicit-credential
SSH).

WebSocket hosts remain outside this editor and retain their existing
Manage route.

## Validation

Passed:

- `npm run gulp compile-client` - initial client compilation and
type-check, zero errors.
- `npm run typecheck-client` - final client type-check including
confirmed tunnel deletion, passed.
- `npm run build-fast -- --client-only` - refreshed client output after
the final test and fixture changes.
- The following Electron selection - **245 passing**:

```powershell
.\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\remoteAgentHostActions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\remotesEditor.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\electron-browser\tunnelAgentHostServiceImpl.test.ts --reporter dot
```

- Browser tests - **389 passing** across WebKit and Edge:

```powershell
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\remoteHostOptions.test.ts --run src\vs\sessions\contrib\providers\remoteAgentHost\test\browser\remoteAgentHostActions.test.ts --reporter dot
```

- Changed-file ESLint and hygiene - **10 files passed**; `git diff
--check` passed. Commands were run before committing:

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

- Component Explorer: all **64 Remotes fixtures** rendered and disposed
without errors. Inspected the initial inline actions in all four themes
and the final six-action layout in Dark and Light High Contrast.
- Browser keyboard check reached all six tunnel actions and verified
they fit without clipping. Tests verify confirmation/cancellation,
duplicate protection, backend failure, post-confirmation state changes,
stale discovery, and focus restoration after deletion.

Automated validation did not delete real tunnels or perform a live
server upgrade. Clipboard values, preference persistence, cancellation,
missing-provider behavior, reconnect failures, duplicate actions,
advertised upgrade methods, restart delays, stale capabilities, and
error notifications are covered by tests. The maintainer exercised live
upgrades and identified separate existing
startup-timeout/duplicate-supervisor and reconnect-target issues; those
are not fixed by this PR. Custom-hover display could not be verified in
the isolated fixture; the actions use the existing shared toolbar hover
delegate unchanged.

## Manual checks

- Open Remote Environments and copy an SSH, tunnel, WSL, and offline
Environment address.
- On SSH and tunnels, cancel Change Preferred Agent Location and confirm
no preference or connection change.
- Choose either preferred location and confirm it is saved and the host
reconnects; verify a reconnect failure is reported without losing the
preference.
- Confirm Update Server appears only for incompatible hosts advertising
an upgrade method; verify progress, restart/reconnect, and failures on a
suitable test host.
- Cancel Delete on a test tunnel and confirm it remains; confirm
deletion and verify its service-side registration and local row are
removed.
- Confirm a tunnel hosted by this application cannot be deleted until
hosting stops.
- Reach the new actions using the keyboard; confirm Copy Address remains
available during a pending connection or update.
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 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**:

```powershell
.\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:

```powershell
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:

```powershell
$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:

```powershell
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:

```powershell
.\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:

```powershell
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.
Christof Marti (chrmarti) added a commit that referenced this pull request Oct 26, 2026
… cleanup (#344313)

Cherry-pick of #344273 from `main`.

<!-- 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 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**:

```powershell
.\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:

```powershell
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:

```powershell
$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:

```powershell
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:

```powershell
.\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:

```powershell
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

release-cherry-pick Automated cherry-pick between release and main branches

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants