Commit Graph
2188 Commits
Author SHA1 Message Date
24be8b3cb4 chore: npm audit fix (#326903)
Co-authored-by: Dmitriy Vasyura <dmitriv@microsoft.com>
2026-07-22 09:23:06 -07:00
Alex RossandGitHub 7ceb4a5584 Try fix macOS test flake (#326798)
* Try fix macOS test flake

* try again

* Platform agnostic preseed
2026-07-22 11:44:42 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
6fd173d3ae build(deps): bump shell-quote from 1.8.4 to 1.10.0 in /test/smoke (#326745)
Bumps [shell-quote](https://github.com/ljharb/shell-quote) from 1.8.4 to 1.10.0.
- [Changelog](https://github.com/ljharb/shell-quote/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/shell-quote/compare/v1.8.4...v1.10.0)

---
updated-dependencies:
- dependency-name: shell-quote
  dependency-version: 1.10.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 02:07:50 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
acb35ed96a build(deps): bump body-parser from 2.2.1 to 2.3.0 in /test/mcp (#326743)
Bumps [body-parser](https://github.com/expressjs/body-parser) from 2.2.1 to 2.3.0.
- [Release notes](https://github.com/expressjs/body-parser/releases)
- [Changelog](https://github.com/expressjs/body-parser/blob/master/HISTORY.md)
- [Commits](https://github.com/expressjs/body-parser/compare/v2.2.1...v2.3.0)

---
updated-dependencies:
- dependency-name: body-parser
  dependency-version: 2.3.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-20 18:44:26 -07:00
Alex RossandGitHub 7c5402a958 Fix macOS test flake (#326325)
* Fix for flaky  Test Claude session run in terminal

* Skill for diagnosing flaky smoke tests
2026-07-17 14:35:07 +00:00
505665aeb5 Default editor and panel chat to Agent Host Copilot when the agent host is enabled (#326086)
* Default editor and panel chat to Agent Host Copilot when the agent host is enabled

Builds on the chat.editor.preferCopilotHarness behavior to make Agent Host
Copilot the computed default chat provider for both editor and panel chat
whenever the agent host is enabled, so first-time users land on Copilot instead
of Local. chat.editor.preferCopilotHarness stays scoped to the one-time
Local -> Copilot migration only.

- Thread an agentHostEnabled flag (from IAgentHostEnablementService) through the
  default-session-type resolution and its callers.
- Keep Local visible and selectable; honor explicit and remembered selections.
- New Local Chat opens a local session directly: it cancels the in-flight
  default-provider resolution (which would otherwise block on agent host
  activation) so the local request wins immediately.
- Open a Local chat first in all chat participant API tests, since chat
  participants are a Local-harness feature.
- Add a smoketest.openLocalChat command for Local panel smoke scenarios; the
  sandbox reopen path reveals the existing local session to avoid a focus race.
- Register an IAgentHostEnablementService stub in the component fixtures.

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

* chat: honor resolved session type when starting a new chat

Fixes the New Chat drop bug (review comment #2 on #326086): when the
agent host is enabled the computed default is a non-local harness, so the
editor clear path recomputed that default and dropped explicit or
preserved local requests.

- clearChatSessionPreservingType now branches on the resolved session
  type for the sidebar (non-local -> loadSession, local ->
  startNewLocalSession) so a generic New Chat from a Local panel
  preserves Local, consistent with contributed panels.
- The resolved type is threaded through IChatWidget.clear ->
  viewOptions.clear -> chatEditor.clear -> clearChatEditor so the editor
  opens a session of that type instead of recomputing the default. This
  restores explicit "New Local Chat" from a non-local editor.
- clearChatEditor applies an explicit target type directly and keeps its
  swap-aware default only for direct (untargeted) calls.

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

* chat: cancel the previous applyModel resolution before replacing it

Assigning a new CancellationTokenSource to the MutableDisposable only
disposes the previous source, and disposing a CancellationTokenSource
does not cancel it. So a re-entrant applyModel() (view render, switch
session) left the prior in-flight resolution running, racing to call
showModel with a stale result. Cancel the previous source explicitly
before replacing it.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-17 00:15:19 +00:00
Logan RamosandGitHub f38816eb09 Refactor model picker architecture (#326052)
* Refactor model picker

* Some linters and formatters

* Cleanup some old tests

* Simplify model picker state and configuration

* format stuff

* Address model picker review feedback

* Update blocks-ci screenshot hashes

* Simplify model picker architecture terms
2026-07-16 16:10:47 +00:00
Dileep YavanmandhaandGitHub f7b500c0e0 flakytest: skip sandbox test causing build failure (#326009)
test: skip terminal sandbox smoke test
2026-07-15 17:43:31 +00:00
be91eb5f91 Updated sandbox tests (#325161)
* Cherry picking MSRC [115444] to main

* Add chat terminal sandbox smoke tests

* Potential fix for pull request finding

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

* Expand chat terminal sandbox smoke coverage

* Test terminal sandbox temp directory isolation

* Run chat sandbox smoke tests remotely

* Repeat chat sandbox smoke tests

* merging changes

* smoke test investigation

* test: stabilize chat sandbox smoke tests

* test: stabilize sandbox UI assertions

* test: stabilize repeated chat sandbox smoke tests

* test: remove repeated chat sandbox runs

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-15 09:00:00 -07:00
Christof MartiandGitHub 23e52847b7 Proxy test with isolated process on macOS (#325774) 2026-07-15 16:44:32 +02:00
Alex RossandGitHub c344fb62c1 More resilient session finding (#325794) 2026-07-14 13:49:04 +00:00
Dirk BäumerandGitHub 7e4e91cab4 Adapt to TypeScript 7 (#325757)
* Adapt TypeScript 7

* Ensure that we always call TS7 from spawnTsgo

* Fix package lock file

* tsc - tsc6

* More tsc -> tsc6

* More TSGO conversion

* More moves from tsgo -> tsc

* Fix tsgo resolving in extension folder

* Call TS7 compiler directly

* Update package-lock.json

* Remove tsc:version again
2026-07-14 12:34:04 +02:00
vs-code-engineering[bot]GitHubvs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>
7830970d5c [cherry-pick] test: skip flaky chat sandbox home-read smoke test (#325584)
Co-authored-by: vs-code-engineering[bot] <vs-code-engineering[bot]@users.noreply.github.com>
2026-07-13 10:10:25 +00:00
f50ecf404d fix: sandbox smoke test configuration race (#325532)
Restart the application after updating sandbox settings so
configuration changes are loaded before running the allowRead
and allowNetwork probes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-13 05:32:44 +00:00
RoboandGitHub dc7db07400 chore: update electron@42.6.0 (#325428)
* chore: update electron@42.6.0

* chore: update node.js build

* temp: bump distro

* chore: update deb dependencies

* chore: update rpm dependencies

* chore: add missing platform dep to allow-scripts

* chore: bump distro
2026-07-12 20:30:31 +00:00
Martin AeschlimannandGitHub 61b8df11ad add 'migrate prompt files' to customization UI (#325155)
* add 'migrate prompt files' to customization UI

* update

* update

* add setting

* add migrate label

* update

* update

* update screenshots

* update

* update

* update

* update

* update

* update screenshots
2026-07-11 15:12:57 +00:00
Alexandru DimaandGitHub 087d49e2a7 Skip flaky test (see #325266) (#325343) 2026-07-10 18:44:50 +00:00
Sandeep SomavarapuandGitHub 72705f01d9 disable the flaky test (#325101) 2026-07-09 09:57:50 +00:00
1dc485dd0c Add chat terminal sandbox smoke tests (#324848)
* Add chat terminal sandbox smoke tests

* Potential fix for pull request finding

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

* Expand chat terminal sandbox smoke coverage

* Test terminal sandbox temp directory isolation

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-09 01:05:43 +00:00
Alex RossandGitHub 76819ce3c8 Add terminal test to chat scenario tests (#322940)
* Add terminal test to chat scenario tests

* More terminal test

* Try fix mac and linux

* Remove flakiness probe
2026-07-08 10:24:43 +00:00
Justin ChenGitHubcopilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>Copilot
0cd1884c6a rehaul chat input padding and spacing and icons (#323977)
* rehaul chat input padding and spacing and icons

* some more fixes on collapsing

* address comments, fix claude

* fix auto not having copilot icon

* fix component fixtures

* fix: implement getModelConfiguration in chat fixture model service mock

Co-authored-by: justschen <54879025+justschen@users.noreply.github.com>

* fix tests

* Expand panel chat model picker before driving inline config in smoke test

The chat model-picker rehaul added a width-driven compact layout that hides
the inline model-config button (and model-name text) when the panel is narrow.
The panel chat's auxiliary bar defaults below the collapse threshold, so the
Chat Model Configuration smoke test could not find the config button.

Widen the auxiliary bar via its leading sash until the picker leaves compact
mode before interacting with the inline config UI.

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

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-08 02:17:31 +00:00
e656eb8d42 sessions: single-pane layout as a sibling controller with composed strategies (#324657)
* sessions: fix base-controller single-pane leak via Template Method hooks (R1)

Move the single-pane branches out of BaseLayoutController into
SinglePaneDesktopSessionLayoutController via three protected hooks
(_suppressEditorVisibilityDuringRestore, _shouldRevealEditorPartOnApply,
_shouldRevealEditorPartForEmptyWorkingSet). The base controller no longer
reads isSinglePaneLayoutEnabled.

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

* sessions: segregate docked-editor layout concerns into IDockedEditorLayout (R3)

Extract handleDockedEditorPartLayout and isEditorRevealedExplicitly into a
focused IDockedEditorLayout interface that IAgentWorkbenchLayoutService extends,
keeping the cross-cutting isSinglePaneLayoutEnabled and
suppressEditorPartAutoVisibility on the main contract. Fix stale typo comment.

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

* sessions: extract side-pane presentation Strategy from workbench (R2/R4)

Replace the 26 scattered _dockDetailPanel branches in workbench.ts with an
ISidePaneLayoutStrategy (GridSidePaneStrategy + DockedSidePaneStrategy),
selected once at initLayout. DockedSidePaneStrategy owns the docked width,
the DockedAuxiliaryBarController lifecycle, the reveal-sync, and a
DockedEditorSizeMemento for the docked size bookkeeping (R4). Workbench
implements ISidePaneLayoutHost and delegates geometry, grid-descriptor,
visibility-mutator, and reveal-sync work to the strategy. Behaviour is
unchanged in both layouts; the only remaining _dockDetailPanel reference is
the strategy selection point.

Rewrites workbench.test.ts to drive the real strategy through a host harness.

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

* sessions: replace side-pane Strategy with Workbench subclass (R5)

Convert the composition-based ISidePaneLayoutStrategy into inheritance,
matching the layout-controller Template Method pattern. The base Workbench
now carries the classic (grid) layout as protected _-prefixed hooks;
SinglePaneWorkbench overrides them for the docked detail-panel layout and
owns the docked width, DockedAuxiliaryBarController, reveal-sync, and
DockedEditorSizeMemento. A createSessionsWorkbench factory picks the subclass
from the setting at construction; web.main.ts and sessions.main.ts use it.

Removes sidePaneLayoutStrategy.ts and the ISidePaneLayoutHost callback
interface. No behaviour change in either layout.

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

* sessions: single-pane editor part owns the auxiliary bar (R6)

Make editor + auxiliary bar a single unit in the single-pane (new) layout by
having the editor part create and own the auxiliary bar instead of the
workbench/pane-composite service:

- New SinglePaneMainEditorPart extends MainEditorPart; lazily creates the
  SinglePaneAuxiliaryBarPart via a getter and owns the DockedAuxiliaryBarController
  (created in create(), calling setContentRightInset directly).
- EditorParts.createMainEditorPart() returns SinglePaneMainEditorPart when the
  shared shouldUseSinglePaneLayout(config) predicate is true.
- AgenticPaneCompositePartService retrieves the same aux bar instance from the
  editor part in single-pane; classic/mobile create it as before.
- SinglePaneWorkbench drops DockedAuxiliaryBarController ownership; keeps the
  docked width (exposed via getDockedAuxiliaryBarWidth/setDockedAuxiliaryBarWidth
  on IDockedEditorLayout) and reveal-sync, delegating layout to the editor part.
- workbenchFactory, EditorParts, and the pane-composite service all select via
  the single shouldUseSinglePaneLayout predicate so the workbench, editor part,
  and aux bar are always chosen together (fixes a phone-viewport + setting-on
  mismatch that would pair SinglePaneWorkbench with a plain MainEditorPart).

Classic (default) and mobile layouts are unchanged.

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

* sessions: make isSinglePaneLayoutEnabled class-based, not a config read

Address review feedback: since the workbench subclass is selected at construction
(Workbench vs SinglePaneWorkbench), isSinglePaneLayoutEnabled is now a class-level
constant — false in the base, overridden to true in SinglePaneWorkbench — instead
of reading DOCK_DETAIL_PANEL_SETTING at runtime. Removes the _configurationServiceForLayout
field. This also aligns the flag with the phone-aware workbench selection, so it no
longer reports single-pane on a phone viewport where the classic workbench is used.

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

* sessions: single-pane editor-group header menus, docked aux bar, and header styling

- Make the full-width Changes header a group-level editor concept: the editor
  part configures header menu ids via IEditorGroupViewOptions.headerMenuIds and
  the editor opts in via IEditorPane.getHeaderActions(); EditorGroupView renders
  the menus (no concrete menu points leak into core).
- Docked aux bar: top border connecting to the sash, and hide editor/aux when
  their sash collapses them.
- Changes pill and file-diff open reveal the editor explicitly
  (revealEditorPartExplicitly), and close the Files tab when a real file opens.
- Header styling: re-scope diff-stats/picker CSS via marker classes, restore
  inter-action spacing, and shrink the right toolbar buttons to 24px.
- Fix setHeaderContent wiping freshly-rendered content on re-render; tie per-group
  header listeners to group removal.

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

* sessions: reparent single-pane layout to a sibling controller with composed strategies

Make `SinglePaneLayoutController` a sibling of the classic desktop
`LayoutController` (both extend `BaseLayoutController`) instead of extending it,
so the desktop controller can be deprecated/deleted without affecting
single-pane. Its behaviour is composed from focused strategy objects under
`contrib/layout/browser/singlePane/`:

- Detail (aux bar) ownership split in two — `SinglePaneDetailVisibilityStrategy`
  owns per-session shown/hidden memory (D1-D4); `SinglePaneDetailPanelStrategy`
  owns container selection (Changes/Files), maximize, browser-hide, and the
  nothing-to-show hide. Removed the overlapping `EmptyAuxCleanup` (D10) strategy
  and desktop's redundant saved-container machinery.
- `SinglePaneManagedTabsStrategy` + `SinglePaneEditorAreaCollapseStrategy` share a
  `SinglePaneDockedTabsCoordinator`; plus `SinglePaneResponsiveSidebarStrategy`
  (Toggle Details), `SinglePaneNewSessionRulesStrategy` (R1), and
  `SinglePaneQuickChatEditorHideStrategy`.
- Strategies coordinate through the controller via `ISinglePaneLayoutContext`.
- Fresh per-session storage keys (`sessions.singlePane.*`) so single-pane never
  shares state with the classic controller.

Fix a chain of new-session-submit / Detail-only bugs (all verified in-app):

- New-session submit no longer reveals the docked editor or hides the just-opened
  detail. `onDidReplaceSession` fires before the controller's later-registered
  listener, so submit is detected intrinsically from the reactive transition
  (`!previousIsCreated && isCreated`); D3c leaves the detail as-is when a session
  has no saved state; the empty-editor-group hide is skipped during a layout
  restore.
- Detail-only sessions no longer flicker the editor open on switch or reload: the
  editor-part grid view (which hosts the docked aux bar) no longer maps its
  visibility to `setEditorHidden`, the width-based reveal-sync bails while
  editor-part auto-visibility is suppressed, and the persisted editor width uses
  the node's real visibility so a reload restores the collapsed node width.

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

* Fix component fixture screenshot CI

Add the missing workbench layout service mock needed by the changes view fixtures and update blocks-ci screenshot hashes to the expected CI output.

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

* sessions: fix cramped Changes actions bar in the single-pane editor header

The `ChangesActionsBar` marker (`.changes-actions-bar`) only carried a height
rule in the single-pane editor-group header; the classic
`.session-changes-editor-header-right` normalization does not reach that header,
so the primary split-button and the trailing secondary icon actions rendered
cramped together with no spacing or button chrome.

Add the container flex/gap layout and the secondary icon-button chrome (padding,
corner radius, secondary background/border + hover) keyed off `.changes-actions-bar`,
using design tokens, so it applies in the single-pane editor-group header while
staying idempotent for the classic internal changes-editor header (whose element
also carries `.session-changes-editor-header-right` with the same values).

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

* sessions: match classic Changes actions bar chrome in single-pane editor header

The single-pane editor-group header renders the Changes actions bar
(`.changes-actions-bar`) inside `.editor-group-header-secondary`, where the
high-specificity `editorgroupview.css` rules stretched the primary split-button
but gave the trailing secondary icon actions (Mark as Done, Run Code Review) no
inter-button gap and no button chrome, so they rendered flat and cramped against
the dropdown chevron.

Add, at matching specificity in `editorgroupview.css`, the container flex/gap and
the secondary icon-button chrome (padding, corner radius, secondary
background/border + hover) mirroring the classic `.chat-editing-session-actions`
actions bar. Drop the equivalent low-specificity rules from
`sessionChangesEditor.css`, which lost the cascade to the editor-group-header
selectors.

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

* sessions: fix single-pane Changes actions bar and move its styles out of core

In the single-pane editor-group header the Changes actions bar renders as a
toolbar action item inside a `.monaco-action-bar`, where the generic rule
`.monaco-action-bar .action-item .codicon { width: 16px; height: 16px }` clamped
every codicon — including the button elements themselves (which carry the
`codicon` class), squashing the secondary icon buttons and detaching the
split-button chevron.

- Un-clamp the codicons and lay out the bar (primary split-button grows, trailing
  secondary icons stay natural size) scoped to `.monaco-action-bar
  .action-item.changes-actions-bar`, so the classic internal changes-editor header
  and the aux-bar Changes view are left untouched.
- Move all `.changes-actions-bar`-specific rules OUT of core
  `editorgroupview.css` into the contributing component's
  `sessionChangesEditor.css`; core keeps only the generic header/toolbar layout.

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

* sessions: draw the single-pane header divider under the editor header/tab bar

Move the single-pane detail-panel separator from the auxiliary bar's top border
to a bottom divider on the editor header (spanning the editor content and docked
detail), so the line runs the full header width. When the active editor has no
header toolbars (e.g. Files), the divider is drawn under the tab bar instead so a
separator is always present below the header row.

The docked auxiliary bar is absolutely positioned over the right of the editor
part with a solid background, so it would overlay the divider. Rather than fight
it with z-index, start the aux bar one divider-thickness below the header/tab bar
(new `DockedAuxiliaryBarController.DIVIDER` offset applied to the aux top/height
and the resize sash), so its background sits just beneath the line.

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

* sessions: update docked aux geometry tests for the header-divider offset

The docked auxiliary bar now starts one divider-thickness below the header/tab
bar (`DockedAuxiliaryBarController.DIVIDER`), so its top and height shift by 1px
(top 34->35, height 566->565). Update the two workbench geometry snapshot tests
to the new expected values. Fixes the CI unit-test failures on the PR.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-07 07:40:30 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
eb7c3a31d4 build(deps-dev): bump tmp from 0.2.6 to 0.2.7 in /test/integration/browser (#324128)
build(deps-dev): bump tmp in /test/integration/browser

Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.6 to 0.2.7.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.6...v0.2.7)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.7
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-06 17:55:45 +00:00
Henning DieterichsandHenning Dieterichs f6a4e0843f updates rspack
* reduces memory usage
* loads fixtures from source instead of out
2026-07-03 17:48:37 +02:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
7e7f9505b9 build(deps): bump tmp from 0.2.6 to 0.2.7 in /test/automation (#323938)
Bumps [tmp](https://github.com/raszi/node-tmp) from 0.2.6 to 0.2.7.
- [Changelog](https://github.com/raszi/node-tmp/blob/master/CHANGELOG.md)
- [Commits](https://github.com/raszi/node-tmp/compare/v0.2.6...v0.2.7)

---
updated-dependencies:
- dependency-name: tmp
  dependency-version: 0.2.7
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-01 21:13:46 +00:00
Giuseppe CianciandCopilot b3e2c11c91 Re-enable Codex smoke test + add a fast-fail native-binary pre-check
Re-enables the 'Test Codex session' smoke test (skipped in #323867).

The native Codex binary ships as a per-platform *optional* dependency of the
`@openai/codex` launcher shim; npm silently ignores an optional dep that fails
to install, so a node_modules cache built during such a hiccup keeps the shim
(which makes Codex report as "available") but loses the binary — the session
then fails at spawn time and the test only times out after 5 minutes.

Add a from-source pre-check that fails fast with an actionable message when the
shim is present but the native binary is missing. No cache change is needed
here (main's lockfile has since rolled to a healthy cache); if it recurs,
bumping build/.cachesalt forces a fresh npm ci that reinstalls the binary.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-01 17:37:07 +02:00
a3eb26a351 Skip Codex session smoke test (#323867)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-07-01 12:24:33 +00:00
4b6f5e55bb chore: bump electron@42.5.0 (#321629)
* chore: bump electron@42.4.0

* chore: apply temp dir workaround for short paths

* chore: use 24.15.x for CI node

* chore: update nodejs build

* chore: bump electron@42.5.0

* fix: unblock playwright install on node 24.17

Node 24.16+ made Readable pause()/resume() a no-op on destroyed streams
which makes yauzl 2.x / extract-zip 2.x and older playwright extraction
hang forever.

- extensions/copilot: add "yauzl": "^3.3.1" override (was missed by #318682)
  so electron and @vscode/vsce no longer resolve the broken yauzl 2.10, fixing the
  hung `npm ci` in the Copilot and Extract chat-lib pipelines.
- extensions/copilot: bump electron ^39.8.5 -> ^42.5.0 so its install
  script uses the native @electron-internal/extract-zip instead of extract-zip.
- bump @playwright/test ^1.56.1 -> ^1.61.1 so `playwright install`
  uses the fixed extractor, unblocking the "Download Electron and
  Playwright" step in all electron test pipelines.

* chore: update build

* agentHost: fix macOS sandbox smoke sentinel parsing

On macOS CI, the AgentHost sandbox smoke test resolves the shell to
/bin/sh, which uses the sentinel-based completion path. In that path, the
parser could consume the echoed sentinel command text
(`<<<COPILOT_SENTINEL_..._EXIT_$?>>>`) before the real numeric marker
arrived, causing a false `Exit code: -1` failure even though the command
later completed successfully.

Harden the sentinel parser to ignore echoed/non-numeric sentinel text
and use the latest complete numeric marker instead. Also force the
macOS AgentHost sandbox smoke test to use /bin/sh and assert that in the
suite log so local runs exercise the same path as CI.

Adds a regression test for echoed sentinel command text.

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

* chore: update screenshot baseline after playwright bump

* chore: bump distro

* chore: fix typecheck

* chore: bump distro

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-29 13:53:48 +00:00
PaulandGitHub 12149dcfef Fix model config smoke test flake (#323304) 2026-06-28 02:51:22 +00:00
PaulandGitHub da4387232c Add smoke tests for model configs (#323205) 2026-06-27 17:51:29 +00:00
f3176866ad test: always log failed requests and console errors in web smoke tests (#323020)
Move `requestfailed` (context + page) and console error/warning logging out
of the `--verbose` block in the Playwright browser driver so they are always
captured. Without this, a stalled or aborted module fetch during web workbench
bootstrap can prevent `.monaco-workbench` from rendering without producing a
page error, crash or HTTP error response, leaving the failure (a 20s timeout)
impossible to root cause from CI logs. The chatty lifecycle events stay gated
behind `--verbose`.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-25 22:35:05 +00:00
18a52c8a29 smoke: fail fast with actionable error when Electron crashes during launch (#322905)
* smoke: fail fast with actionable error when Electron crashes during launch

The per-suite `before all` hook launches Electron via Playwright's
`_electron.launch`. This was called with `timeout: 0`, so when the
Electron process crashed during startup (e.g. a native SIGSEGV in the
Chromium browser-process/sandbox init path, which leaves a minidump),
the launch promise never resolved or rejected. It simply hung until
Mocha's 120s `before all` hook timeout fired, producing an opaque
"Timeout of 120000ms exceeded" with no hint that a native crash had
occurred.

Give the launch (and the first-window wait) a finite timeout well below
the Mocha hook timeout and wrap them so a failure is re-thrown as an
actionable error pointing at the crash-dump directory and Playwright
trace. This turns a 120s opaque hang into a faster, clearly-diagnosable
failure.

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>
2026-06-25 14:15:01 +00:00
Alex RossandGitHub 71292ea46e Try fix Copilot CLI editor flake (#322722)
* Try fix Copilot CLI editor flake

* Smoke test probes

* Remove probe
2026-06-24 08:56:43 -07:00
de07516770 smoke: add remote server process exit diagnostics (#322697)
Remote smoke tests intermittently fail with "Cannot reconnect. Please reload
the window." The root cause is the remote server process exiting unexpectedly
shortly after a client connects; because the server logs nothing on the way out,
the client reconnects against a freshly spawned server with a new connection
token and hits "Unknown reconnection token (never seen)".

Add best-effort process exit diagnostics in server-main.ts that distinguish a
self-exit (beforeExit), an external kill (signal) and a crash
(uncaughtExceptionMonitor), and log the test resolver child's exit/close signal.
Gated behind the VSCODE_SERVER_EXIT_DIAGNOSTICS env var, which the remote smoke
launcher sets, so it adds no product noise.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-24 12:47:37 +02:00
Alex RossandGitHub 4b76d6bca6 Enable second reply on chat session smoke test (#322690)
* Unskip second round of chat session Copilot CLI

* Add flakiness probe for chat session Copilot CLI second reply

* Remove the probe
2026-06-24 12:26:12 +02:00
Giuseppe CianciandGitHub 1283825f3b Merge pull request #322366 from microsoft/codex-node-modules-dev-fallback
agentHost: resolve Codex SDK from node_modules in dev
2026-06-23 16:25:15 +02:00
Alex RossandGitHub 6577439bdf Reenable 2nd turn of Copilot CLI test (#322056)
* Reenable 2nd turn of Copilot CLI test

* test running on azure dev ops

* Restore title change guard

* Run even if failure

* Try fix missing chat session

* Try to prevent session from getting disposed

* Try to fix another flake

* Remove flake probe
2026-06-23 18:37:41 +05:00
Giuseppe CianciandCopilot ea6bc378f9 smoke: use VSCODE_DEV (not Quality.Dev) to detect from-source Codex run
`app.quality === Quality.Dev` is not a precise "running from source" signal:
`parseQuality()` also returns `Quality.Dev` for a `--build` product when
`VSCODE_QUALITY` is unset, which would wrongly hard-fail a packaged build that
legitimately lacks Codex. Use `process.env.VSCODE_DEV === '1'` instead — the
smoke runner sets it deterministically only in the no-`--build` (dev electron)
branch, mirroring the agent host's `isBuilt === false` that gates the
node_modules fallback. This matches existing dev-detection in main.ts and the
diagnostics already logged in this file.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-22 16:21:56 +02:00
Giuseppe CianciandCopilot 6f10471d3e smoke: also require Codex session test on publish builds
Previously the Codex smoke test was a hard requirement only in dev and skipped
on all built products. But publish builds stamp `product.agentSdks.codex`
(only when VSCODE_PUBLISH=true) and resolve the SDK from the CDN, so Codex
should be available there too — skipping would hide a CDN-resolution
regression.

Fail when the build is supposed to resolve Codex (dev OR VSCODE_PUBLISH=true),
and skip only on built non-publish CI builds where the SDK is neither shipped
nor stamped. VSCODE_PUBLISH is an Azure pipeline variable auto-injected into
the smoke step env; it is absent in dev (GitHub Actions) runs, which the
`Quality.Dev` branch already covers.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-22 16:19:16 +02:00
Giuseppe CianciandCopilot fcf74c4a1e smoke: require Codex session test in dev, skip only in built products
Now that Codex resolves from the repo's `node_modules` in dev, the Codex
smoke test must always run when running from source instead of skipping when
the session type is unavailable. Make it a hard requirement in `Quality.Dev`
(throw if Codex is unexpectedly unavailable) and keep the graceful skip only
for built products, where the SDK is not shipped (devDependencies are
stripped) and is fetched from `product.agentSdks.codex` on publish builds
only — so non-publish CI builds legitimately have no Codex.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-22 15:50:06 +02:00
767e9e56b4 sessions: hide session picker groups when no duplicate session names (#322307)
* sessions: hide session picker groups when no duplicate session names

Section headers in the session type picker exist to disambiguate session
types that share a label across providers (e.g. two providers both
offering "Claude"). When every type's label is unique there is nothing
to disambiguate, so render a flat list without group headers even when
multiple providers contribute.

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

* sessions: rename Copilot CLI session type label to "Copilot"

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

* test: update Agents Window smoke test for renamed Copilot label

The Copilot CLI session type label was renamed to "Copilot" (shared
CopilotCLISessionType used by the Copilot Chat provider), so the picker
no longer exposes a "Copilot CLI" entry. Select "Copilot" instead.

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

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-22 00:23:00 +02:00
f7bc66f118 smoke: fix flaky Chat Sessions copilot-chat activation race (#322187)
The Chat Sessions smoke test runs right after the Chat Disabled suite,
which disables AI features. When the suite re-enables them, there is a
brief window where copilot-chat is still disabled and its commands are
not yet registered. The smoke helper invoked
'github.copilot.debug.extensionState' to force-activate copilot-chat,
but that executeCommand rejected with 'command not found' during this
window, aborting the handler before it could open the chat editor and
causing a 60s timeout on '.editor-instance .interactive-session'.

Wait for the diagnostic command to be registered (via the existing
waitForCommand helper) before invoking it, so the handler no longer
races copilot-chat enablement/activation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-20 23:14:01 +02:00
16c0598ca1 smoke: fix flaky Agents Window Copilot CLI session activation (#322170)
The "Agents Window > Test Copilot CLI session" smoke test flakily timed
out at `activateSessionByLabel`, which located the just-completed session
row by its title and expected it to equal the mocked reply
`MOCKED_COPILOT_RESPONSE`. That title is set asynchronously by a utility
model after the first turn and races the untitled->committed session
swap, so it is non-deterministically either the user's prompt (the
synchronous fallback) or the generated reply. The test passed on macOS
(title-gen landed) and failed on Linux (it didn't) in the same run.

Decouple row identification from response verification:
`activateSessionByLabel` now accepts one or several row substrings and
matches a row containing ANY of them, while a separate `responseLabel`
is verified against the active session's response bubble. The smoke test
passes both the first prompt and the reply, so activation is
deterministic regardless of when title generation completes.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-20 01:15:46 +02:00
Giuseppe CianciandCopilot 469ad3d433 sessions: match new agent-host session by type, not just novelty
The local agent host runs a single sessions provider whose session cache
holds every agent-host session type (codex, claude, copilot). When a new
session is sent, the provider identifies the freshly-committed backend
session in `_waitForNewSession` purely by novelty — the first cached
session whose raw id was not present before the send. The session's
type/scheme was never checked.

That is wrong when a session of a *different* type appears in the cache
during the send. A slow Codex session (which cold-starts a native
app-server before its first /responses turn) sent while a Claude session
from an earlier run is present would latch onto the Claude session and
return it as the Codex commit. `sendRequest` then reports an
"active session replaced: codex -> claude", the workbench swaps the
active slot to the wrong session, removes the Codex one, and the Codex
reply renders nowhere. A claude harness that is suppressed in the current
window (preferAgentHost=false) additionally throws "Agent host targets
must have an item provider" when activated. This is exactly why the
Codex smoke test timed out on the Windows CI runner (where the cold-start
race is widest), failing build 449022.

Filter `_waitForNewSession` by the `chatResource` scheme so a send only
ever commits a session of its own type, in both the immediate cache scan
and the onDidChangeSessions wait. Re-enable the Codex smoke test that was
disabled in #321983 to keep the build green.

Verified: a new unit test reproduces the cross-type latch (fails before,
passes after); live launch with stale claude sessions present shows the
Codex session stays active with no wrong swap; and the (re-enabled) Codex
smoke test passes locally end-to-end.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-06-19 11:20:58 +02:00
Alexandru DimaandGitHub f37a46fa1b Skip the second reply for the Copilot CLI smoke test also in the Agents Window and skip the Codex smoke test too (#321983)
* Skip the second reply for the Copilot CLI smoke test also in the Agents Window

* Skip also the Codex smoke test
2026-06-18 19:31:51 +00:00
Alexandru DimaandGitHub 18ab318cd2 Skip the second reply for the Copilot CLI smoke test (#321968) 2026-06-18 17:31:19 +00:00
Alex RossandGitHub d00a7238ac Try to fix another Copilot CLI bug (#321935) 2026-06-18 16:51:01 +02:00
Alex RossandGitHub 193b1196d8 Add a second turn to the chat smoke tests (#319942)
* Reduce duplicate code

* Add a second turn to the chat smoke tests

* Fix tests

* "fix" sandbox test

* Make things work

* Get tests passing

* CCR feedback

* Simplify diff

* Undo chatView.ts changes

* Missing Claude warm up
2026-06-18 12:22:13 +02:00
Dmitriy VasyuraandGitHub 13a3f8011b Remove dismissing of the trust dialog since workspace is now untrusted by default (#321854) 2026-06-17 18:19:30 -07:00
Giuseppe CianciandGitHub 71969046d4 Merge pull request #321796 from microsoft/agents/codex-harness-improvement-plan
Codex agent-host harness: feature parity + smoke coverage
2026-06-17 23:19:16 +02:00