mirror of
https://github.com/microsoft/vscode.git
synced 2026-05-08 09:08:48 +01:00
fc734bd35b809a58d9161c7dbe7e80c6e35787d9
6450 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d11c632ba8 |
chore: update electron@39.8.5 (#306292)
* chore: update electron@39.8.5 * chore: bump distro |
||
|
|
4927766313 |
chore: add srt sandbox dependencies to deb and rpm (#297819)
* chore: add srt sandbox dependencies to deb and rpm * fix: move the depedency to recommends |
||
|
|
1bff585f1a | debt - fix regression with layer checker and DOM (#306119) | ||
|
|
a086290082 |
Merge pull request #305297 from microsoft/benibenj/automatic-tapir
Multi chat support |
||
|
|
ca702223ea |
Bump picomatch from 4.0.2 to 4.0.4 in /build/npm/gyp (#304913)
Bumps [picomatch](https://github.com/micromatch/picomatch) from 4.0.2 to 4.0.4. - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/4.0.2...4.0.4) --- updated-dependencies: - dependency-name: picomatch dependency-version: 4.0.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Raymond Zhao <7199958+rzhao271@users.noreply.github.com> |
||
|
|
c09783b1e0 | multi chat support | ||
|
|
d466d7d67b |
sessions: Extensible sessions provider architecture and ISessionData migration (#304626)
* Add session provider interfaces and menu contributions for new session management
* Add DefaultCopilotChatSessionsProvider implementation
Implements ISessionsProvider for the default Copilot session types (CLI and Cloud).
Wraps existing IAgentSessionsService with AgentSessionAdapter that maps
IAgentSession to the new ISessionData interface with observables.
Includes workspace browsing (folder dialog + repo command), session listing,
and session actions (archive, delete, rename) that delegate to underlying services.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Migrate WorkspacePicker to use sessions provider registry
Browse actions (Browse Folders, Browse Repositories, Browse Remotes) are now
sourced from registered ISessionsProvider instances instead of being hardcoded.
Removed direct dependencies on IFileDialogService, ICommandService,
IRemoteAgentHostService, and IQuickInputService — those are now encapsulated
in the provider's browseActions.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Migrate NewChatWidget to use sessions provider registry
Replace hardcoded session type inference (isFolder→Background, isRepo→Cloud,
isRemoteAgentHost→dynamic) with provider registry lookup via
ISessionsProvidersService.getProvidersForWorkspace().
Removed dependencies on IRemoteAgentHostService and
getRemoteAgentHostSessionTarget — target resolution is now the provider's
responsibility.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Replace instanceof picker rendering with declarative pickerVisibility
Add INewSessionPickerVisibility to INewSession interface — each session
implementation declares which pickers should be visible (localModel,
cloudModel, mode, permission, isolation, branch, hasToolbarOptionGroups).
NewChatWidget._setNewSession() now calls a single _renderSessionPickers()
that reads pickerVisibility instead of using instanceof checks against
AgentHostNewSession/RemoteNewSession/CopilotCLISession.
Removed the three type-specific methods:
- _renderAgentHostSessionPickers()
- _renderLocalSessionPickers()
- _renderRemoteSessionPickers()
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Migrate SessionsManagementService factory to use provider registry
Replace hardcoded if/else chain in createNewSessionForTarget() with a
provider registry lookup. The service now finds the provider that handles
the requested target type and delegates session creation to it.
Removed direct imports of CopilotCLISession, RemoteNewSession, and
AgentHostNewSession — the factory no longer needs to know about concrete
session implementations.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Register isolation and branch pickers as menu actions via IActionViewItemService
DefaultCopilotChatSessionsProvider.registerMenuContributions() now:
- Registers Action2 entries for isolation and branch pickers into
Menus.NewSessionRepositoryConfig with when: IsActiveSessionBackgroundProviderContext
- Registers IActionViewItemService factories that create the picker widgets
as BaseActionViewItem wrappers
This enables a MenuWorkbenchToolBar to render the pickers automatically,
with visibility controlled by context keys rather than instanceof checks.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove empty leftover files from previous refactoring
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Make IsolationPicker session-aware via ISessionsManagementService
IsolationPicker now observes the active session to determine git repo
availability instead of relying on the widget to call setHasGitRepo().
Removed setVisible() — visibility is self-managed based on internal state
(hasGitRepo + isolationOptionEnabled). The picker still fires onDidChange
for the widget to push isolation mode to INewSession.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove widget orchestration of IsolationPicker visibility
IsolationPicker now self-manages visibility by observing the active session.
Removed all setVisible() and setHasGitRepo() calls from NewChatWidget —
the picker handles these internally.
The picker still fires onDidChange so the widget can push isolation mode
to INewSession.setIsolationMode().
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Make BranchPicker session-aware via ISessionsManagementService
BranchPicker now observes the active session to get the project's repository
and loads branches automatically. Self-manages visibility based on repository
availability. Removed setRepository() and setVisible() — the picker handles
these internally.
Removed all setRepository/setVisible calls from NewChatWidget for both
isolation and branch pickers. The widget only listens to their onDidChange
events to push state to INewSession.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Make Mode and Permission pickers session-aware
ModePicker and PermissionPicker now observe ISessionsManagementService.newSession
to self-manage visibility based on the session's pickerVisibility.
ModePicker pushes mode to the session directly via its autorun.
Added newSession observable to ISessionsManagementService so pickers can
observe the current new session being configured.
Updated IsolationPicker and BranchPicker to use the new newSession observable
instead of the previous hack with private field access.
Removed all setVisible() calls for mode and permission pickers from
NewChatWidget — they are now fully self-managing.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Make model pickers session-aware
CloudModelPicker now observes ISessionsManagementService.newSession to
self-manage visibility and session binding. Removed setVisible() and
manual setSession() calls from NewChatWidget.
Local model picker container visibility now driven by autorun observing
newSession.pickerVisibility.localModel instead of _renderSessionPickers.
_renderSessionPickers is now minimal — only handles extension-driven
toolbar pickers and git repo opening.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Move git repo resolution to DefaultCopilotChatSessionsProvider
Git repository opening is now the provider's responsibility. When creating
a CLI session with a folder workspace, the provider resolves the git repo
and attaches it to the session's project. Pickers observe the session and
react automatically.
Removed _openRepository(), _repositoryLoading, _openRepositoryCts, and
IGitService dependency from NewChatWidget.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Unify session interface: ISessionData replaces INewSession on public surface
ISessionsProvider.createNewSession() now returns ISessionData instead of
INewSession. Added setSessionOption(sessionId, key, value) for pickers
to write through the provider.
Extended ISessionData with:
- SessionStatus.Configuring for pre-send phase
- ISessionPickerVisibility for UI picker control
- workspace as IObservable (changes during configuration)
INewSession becomes provider-internal — not exposed on any service interface.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Implement ISessionData in DefaultCopilotChatSessionsProvider
createNewSession() now returns ISessionData via NewSessionDataAdapter
which wraps INewSession internally. setSessionOption() routes option
changes to the underlying INewSession.
AgentSessionAdapter updated to match new ISessionData interface
(workspace as observable, pickerVisibility).
INewSession is now fully internal to the provider — not exposed
on any public interface.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Switch all pickers to ISessionsProvidersService
All pickers now observe ISessionsProvidersService.activeSession (ISessionData)
instead of ISessionsManagementService.newSession (INewSession).
ModePicker uses sessionsProvidersService.setSessionOption() to push mode.
IsolationPicker reads workspace.repositories from ISessionData.
PermissionPicker and CloudModelPicker observe activeSession.pickerVisibility.
Removed newSession observable from ISessionsManagementService interface.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add new session provider service interfaces
* Move extension toolbar pickers to self-contained ExtensionToolbarPickers
Created ExtensionToolbarPickers class that observes ISessionsProvidersService
activeSession and dynamically renders extension-driven option group pickers
(ChatSessionPickerActionItem / SearchableOptionPickerActionItem) for Cloud
sessions.
Removed ~120 lines from NewChatWidget:
- _renderSessionPickers(), _renderToolbarPickers(), _renderToolbarPickerWidget()
- _clearToolbarPickers(), _clearAllPickers()
- _updateOptionContextKey(), _getOrCreateOptionEmitter()
- _toolbarPickerWidgets, _toolbarPickerDisposables, _optionEmitters, _optionContextKeys
NewChatWidget now has zero picker rendering logic — all pickers are
self-managing via session observation.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Refine interfaces: remove pickerVisibility, canHandle, setSessionOption
Addressed design feedback:
- SessionStatus: renamed Configuring→Untitled, added InProgress and NeedsInput
- Removed ISessionPickerVisibility from ISessionData — pickers use menu
when-clauses, not session-declared visibility
- Removed canHandle() from ISessionsProvider — workspace→provider mapping
is implicit via browse actions
- Removed setSessionOption() — provider-internal wiring, not public API
- Removed registerMenuContributions() — providers register contributions
statically via workbench contributions
- Removed NewSessions.WorkspaceMenu — workspace picker is a fixed widget
- Added getSessionTypesForWorkspace() to ISessionsProvidersService — the
session type selector is a fixed picker that queries this
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Migrate sidebar and title bar to use ISessionsProvidersService
Title bar:
- Added ISessionsProvidersService injection
- _getActiveSessionLabel() prefers ISessionData.title from providers service
- _getActiveSessionIcon() prefers ISessionData.icon from providers service
- _getRepositoryLabel() prefers ISessionData.workspace.label from providers service
- Added autorun on sessionsProvidersService.activeSession for re-rendering
- Falls back to legacy ISessionsManagementService path when ISessionData unavailable
Sidebar:
- Added ISessionsProvidersService injection
- allowedProviders now derived from registered providers' session types
instead of hardcoded [Background, Cloud]
- Removed hardcoded overrideExclude and providerLabelOverrides
- Removed AgentSessionProviders and isAgentHostTarget imports
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Move activeSession to ISessionsManagementService, remove from ISessionsProvidersService
Added activeSessionData: IObservable<ISessionData> to ISessionsManagementService.
Deprecated activeSession (IActiveSessionItem) — use activeSessionData instead.
Removed activeSession and openSession from ISessionsProvidersService — it's
a registry/aggregator, not a session state manager.
Title bar now reads from activeSessionService.activeSessionData instead of
sessionsProvidersService.activeSession. Removed ISessionsProvidersService
dependency from title bar.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove visibility management from all pickers
Pickers are now dumb widgets — they render and handle interaction only.
Visibility is controlled by context keys and menu when-clauses, not by
autorun blocks toggling display:none.
Removed from all pickers:
- autorun blocks observing activeSession/newSession for visibility
- _updateVisibility() methods
- ISessionsProvidersService dependencies (no longer needed)
Pickers affected: ModePicker, PermissionPicker, IsolationPicker,
BranchPicker, CloudModelPicker, local model picker container.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Move menu registrations to static scope, clean up empty files
Action2 registrations (isolation/branch pickers) are now at module scope
instead of inside registerMenuContributions(). IActionViewItemService
registrations moved to the provider's constructor.
Removed registerMenuContributions() method — it was no longer on the
ISessionsProvider interface and wasn't called.
Deleted recreated empty files.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add new sessions provider and service interfaces
* Implement ISessionsProvider for RemoteAgentHost
Created RemoteAgentHostSessionsProvider that implements ISessionsProvider
for each agent on a remote agent host connection. Provides:
- Session type: remote-{authority}-{provider}
- Browse action: remote FS folder dialog
- Session creation returning ISessionData
RemoteAgentHostContribution now registers a RemoteAgentHostSessionsProvider
per-agent via ISessionsProvidersService.registerProvider(), alongside the
existing IChatSessionsService registrations. Provider lifecycle is managed
by the agent store — automatically disposed when the agent disconnects.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix all TypeScript compilation errors
Fixed across 9 files:
- Removed unused imports, fields, and methods
- Fixed SessionStatus enum references (Configuring→Untitled, Active→InProgress)
- Fixed ISessionsProvidersService.activeSession removal (use ISessionsManagementService)
- Fixed getProvidersForWorkspace→getSessionTypesForWorkspace
- Removed ISessionData.setProject call (provider-internal)
- Cast allowedProviders to AgentSessionProviders[]
- Removed ISessionPickerVisibility references
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Register DefaultCopilotChatSessionsProvider via workbench contribution
The provider was defined but never registered with ISessionsProvidersService.
Added DefaultSessionsProviderContribution that instantiates and registers
the provider at WorkbenchPhase.AfterRestored.
This fixes the missing browse actions in the workspace picker.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix model picker visibility: local and cloud are mutually exclusive
Both model pickers were visible because visibility management was removed
but they aren't menu-contributed yet. Added autorun in NewChatWidget that
observes the active session's pickerVisibility to toggle local vs cloud
model picker. Restored setVisible() on CloudModelPicker.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Register model pickers as menu actions with context-key visibility
Local model picker and cloud model picker are now registered as Action2
entries in NewSessions.SessionConfigMenu with when-clauses:
- Local model: when isActiveSessionBackgroundProvider
IActionViewItemService factories registered for the cloud model picker.
Model picker visibility in NewChatWidget now driven by sessionType check
instead of pickerVisibility.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix model picker visibility: use sessionsManagementService for session creation
_createNewSession now routes through sessionsManagementService.createNewSessionForTarget
which properly sets activeSessionData, context keys (isActiveSessionBackgroundProvider),
and the _newSession observable. This fixes the model picker not showing because
activeSessionData was never set.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix model picker not showing on reload
Default to showing local model picker when activeSessionData is undefined
(startup/reload). The default session type is CLI, so local model picker
should be visible until a Cloud session is explicitly created.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix session type resolution for different workspace types
Repo workspaces should create Cloud sessions, local folders should create
CLI sessions. The previous getSessionTypesForWorkspace returned all types
without filtering by workspace. Restored workspace-type-based inference
in _createNewSession until workspace picker stores providerId.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Hide permissions picker for Cloud sessions
Permissions picker visibility now tied to session type — only shown for
CLI (Background) sessions. Added autorun and menu action registration
with when: IsActiveSessionBackgroundProviderContext.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix permissions picker: use autorun on activeSessionData for visibility
Permissions picker is still widget-owned (needed for reading permissionLevel
at send time). Visibility controlled by observing activeSessionData.sessionType
— only shown for CLI (Background) sessions.
Menu action + IActionViewItemService registration added for future transition
to fully menu-driven rendering once permission state is on ISessionData.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Move permissionLevel to ISessionData, render via MenuWorkbenchToolBar
permissionLevel is now on ISessionData as an IObservable<ChatPermissionLevel>.
NewChatPermissionPicker writes to activeSessionData.permissionLevel when
the user changes the level. sendRequestForNewSession reads it from
activeSessionData instead of a widget-owned picker.
Permissions picker is now rendered via MenuWorkbenchToolBar for
NewSessions.SessionControlMenu — visibility controlled by
IsActiveSessionBackgroundProviderContext context key.
Removed _permissionPicker from NewChatWidget entirely.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix permissions picker: use 'navigation' group for inline rendering
MenuWorkbenchToolBar only renders items in the 'navigation' group inline.
Items in other groups go to the overflow menu. Changed permissions picker
action from group 'permissions' to group 'navigation'.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix startup race: wait for providers before creating initial session
On reload, the widget renders before DefaultCopilotChatSessionsProvider
is registered (AfterRestored phase). The initial session creation now
waits for onDidChangeProviders if no providers are available yet.
This fixes wrong pickers showing on reload (CLI pickers for a Cloud
session because the provider wasn't found).
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Hide mode picker for Cloud sessions
Mode picker visibility now tied to activeSessionData.sessionType —
only shown for CLI (Background) sessions, hidden for Cloud.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Render mode and model pickers via MenuWorkbenchToolBar
Mode, local model, and cloud model pickers are now rendered via
MenuWorkbenchToolBar for NewSessions.SessionConfigMenu. Visibility
controlled by context keys:
- Mode + local model: when isActiveSessionBackgroundProvider
All registered with 'navigation' group for inline rendering.
IActionViewItemService factories create the picker widgets with
full DI (ILanguageModelsService for model list, etc.).
Removed autoruns for model/mode visibility from NewChatWidget.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove dead model/mode picker code from newChatViewPane
Mode and model pickers are now created by the sessions provider's
IActionViewItemService factory and rendered by a MenuWorkbenchToolBar.
The widget no longer needs to own these pickers.
Removed:
- _currentLanguageModel, _modelPickerDisposable, _localModelPickerContainer fields
- _cloudModelPicker, _modePicker fields and their instantiation
- _modePicker.onDidChange listener
- _initDefaultModel() calls
- _currentLanguageModel.read(reader) autorun
- Model set block in _setNewSession
- Model restoration block in _restoreState
- Unused imports: IModelPickerDelegate, EnhancedModelPickerActionItem,
IChatInputPickerOptions, CloudModelPicker, ModePicker,
ILanguageModelChatMetadataAndIdentifier, ILanguageModelsService,
observableValue, autorun
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Fix model picker showing 'Auto': initialize with default model on load
The IActionViewItemService factory creates the model picker with an empty
currentModel observable. If models aren't loaded yet, it shows 'Auto'.
Now listens for onDidChangeLanguageModels and sets the first available
model as default when models become available.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Remove setVisible from CloudModelPicker — visibility is menu-driven
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Align model picker styling with other session pickers
Updated .sessions-chat-model-picker CSS to match .sessions-chat-picker-slot:
- font-size: 12px → 13px
- padding: 3px 6px → 3px 3px 3px 6px
- codicon: 12px → 14px (with flex-shrink: 0)
- Added chevron-down specific sizing (12px, margin-left: 6px)
- Added hover color change, overflow handling, white-space: nowrap
All pickers now share the same visual treatment.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Style config toolbar to match session picker visuals
Updated CSS to target .sessions-chat-config-toolbar (the MenuWorkbenchToolBar
container for mode + model pickers) instead of .sessions-chat-model-picker.
Styles match .sessions-chat-picker-slot for consistent look across all pickers.
Also styles the .monaco-toolbar and .action-item within the config toolbar
to align properly.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Disable model picker until models are available
The model picker action starts with enabled=false if no models are loaded
yet. When onDidChangeLanguageModels fires and models become available,
it sets enabled=true and selects the first model.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Revert "Disable model picker until models are available"
This reverts commit
|
||
|
|
ce19b8e0e9 |
Refactor theme and layout for sidebar, panel, and auxiliary components (#304447)
* refactor: update theme colors for sidebar, panel, and auxiliary bar components Co-authored-by: Copilot <copilot@github.com> * refactor: update sidebar and panel styles to remove right borders and adjust colors * refactor: adjust margin values for chatbar, auxiliary bar, and panel components Co-authored-by: Copilot <copilot@github.com> * refactor: adjust layout margins for chatbar, panel, and sidebar components Co-authored-by: Copilot <copilot@github.com> * refactor: update padding for account widget and agent sessions viewer components Co-authored-by: Copilot <copilot@github.com> * refactor: adjust footer margins and add bottom margin for sessions view pane Co-authored-by: Copilot <copilot@github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Apply suggestion from @Copilot Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * refactor: remove unused imports in sidebarPart.ts Co-authored-by: Copilot <copilot@github.com> * refactor: update theme colors for sessions components and adjust background properties Co-authored-by: Copilot <copilot@github.com> --------- Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com> Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
fc6b2053dd |
fix: trigger stable build instead of insider build on release branches (#304406)
Co-authored-by: Copilot <copilot@github.com> |
||
|
|
bb77888173 |
Fix Windows agent harness links in postinstall (#304392)
* Fix Windows agent harness links in postinstall * Update build/npm/postinstall.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
8978366531 |
Move .claude creation for testing agent harness to postinstall (#304283)
* Move .claude creation for testing agent harness to postinstall title says it all * rest |
||
|
|
6c52b71c9a |
Bump copilot-sdk (#304267)
Co-authored-by: Copilot <copilot@github.com> |
||
|
|
551308fdbc | Remove automated trigger for sanity tests pipeline (#304168) | ||
|
|
56498ab932 |
fix: correct file extension check in update-localization-extension script (#303930)
this should fix loc process now. |
||
|
|
be95b65d71 |
Fix terminal output capture: strip command echo/prompt, fix premature idle detection, improve sandbox failure detection, force bash over sh (#303754)
* fix: strip command echo and prompt from terminal output (#303531) Prevent sandbox-wrapped command lines from leaking as output when commands produce no actual output. Adds stripCommandEchoAndPrompt() to isolate real output from marker-based terminal buffer captures. Also adds configurable idle poll interval and shell integration timeout=0 support for faster test execution. * Fix compilation errors * fix: tighten trailing prompt stripping to avoid dropping legitimate output Anchor prompt-detection regexes to specific prompt shapes instead of broadly matching any line ending with $, #, %, or >. This prevents stripping real command output like "100%", "<div>", or "item #". * Review feedback * fix: skip stale prompt fragments before command echo in stripping In CI, ^C cancellations leave stale prompt fragments before the actual command echo line. The leading-strip loop now continues scanning past unmatched lines until it finds the command echo, instead of breaking on the first non-matching line. * fix: handle macOS CI prompt format and add stripping to rich strategy - Add trailing prompt patterns for hostname:path user$ (no @ sign) - Handle wrapped prompt fragments like "er$" at line boundaries - Add stripCommandEchoAndPrompt to RichExecuteStrategy marker fallback - Context-aware wrapped prompt continuation detection * fix: Linux CI sandbox prereqs, platform-aware tests, broader prompt stripping - Add bubblewrap and socat to Linux CI apt-get install - Make sandbox test assertions platform-aware (macFileSystem vs linuxFileSystem) - Make /etc/shells test accept both macOS and Linux first-line format - Broaden wrapped prompt fragment regex to handle path chars (ts/testWorkspace$) - Fix continuation pattern to match user@host:path wrapped lines - Apply stripCommandEchoAndPrompt to getOutput() in BasicExecuteStrategy (basic shell integration lacks reliable 133;C markers so getOutput() can include command echo) - Keep RichExecuteStrategy getOutput() unstripped (rich integration has reliable markers) * fix: detect sandbox failures heuristically when exit code is unavailable * Relax some tests when shell integration is off * refactor: extract findCommandEcho and use prompt evidence to narrow trailing prompt regex matching * Cover case where the command is duplicated in `stripCommandEchoAndPrompt` * Fix sandbox tests for Linux: handle different shell path and error message - Handle /usr/bin/bash (Linux) vs /bin/bash (macOS) in /tmp write test - Handle 'Read-only file system' (Linux) vs 'Operation not permitted' (macOS) - Add 'Read-only file system' to outputLooksSandboxBlocked heuristic - Replace newlines with spaces (not empty) to handle terminal wrapping - Extract outputLooksSandboxBlocked as exported function with unit tests * Fix slash history test * Fix sandbox execPath resolution for remote environments Add execPath to IRemoteAgentEnvironment so the server sends its actual process.execPath to the client. The sandbox service now uses this instead of hardcoding appRoot + '/node', which only works in production builds. * Fix terminal output capture: prevent premature idle detection and handle partial command echoes - setupRecreatingStartMarker returns IDisposable to stop marker recreation before sending commands (prevents marker jumping on PSReadLine re-renders) - noneExecuteStrategy waits for cursor to move past start line after sendText before starting idle detection (prevents end marker at same line as start) - findCommandEcho supports suffix matching for partial command echoes from wrapped getOutput() results (shell integration ON with long commands) - Suffix matching requires mid-word split to avoid false positives on output that happens to be a suffix of the command (e.g. echo output) - Integration tests: use ; separator on Windows, add && conversion test, handle Windows exit code quirks with cmd /c * Fix mock in unit test * Address PR feedback: logging, performance, timeout, and docs - Strip sensitive data from debug logs (log metadata only) - Use array join instead of O(n^2) string concat in stripNewLinesAndBuildMapping - Add 5s timeout to cursor-move wait to prevent indefinite hangs - Align shellIntegrationTimeout descriptions (0 = skip the wait) * Install bubblewrap and socat in Linux CI pipelines These are required for terminal sandbox integration tests. * Force /bin/bash over /bin/sh for copilot terminal profile Shell integration cannot be injected into /bin/sh, causing loss of exit code detection. This matches the existing cmd.exe -> powershell override pattern. * Fix bracketed prompt without @ and cap trailing prompt stripping at 2 lines - Extend bracketed prompt patterns from isUnixAt to isUnix so prompts like [W007DV9PF9-1:~/path] are recognized (CI macOS prompt format) - Cap trailing prompt stripping at 2 non-empty lines to prevent over-stripping legitimate output - Add unit tests for bracketed prompt without @ format * Distinguish complete vs fragment prompts to prevent false stripping Split trailing prompt patterns into two categories: - Complete prompts (user@host:~ $, PS C:\>, etc.) stop stripping immediately — anything above is command output, not a wrapped prompt - Fragment patterns (er$, ] $, [host:~/path...) allow continued stripping to reassemble wrapped prompts This prevents falsely stripping output lines that happen to end with $ or # when a real complete prompt sits below them. Added adversarial tests verifying correct behavior for output containing prompt-like characters. * Attempt to cover up the `run_in_terminal` tool not being registered quickly |
||
|
|
30c0bd03a4 |
chore: bump electron@39.8.3 (#303738)
* chore: bump electron@39.8.3 * chore: update build * chore: bump distro |
||
|
|
f0a7531832 |
Install bubblewrap and socat in Linux CI pipelines
These are required for terminal sandbox integration tests. |
||
|
|
a7fffd156c |
Enable starting sessions on remote agent hosts in sessions app (#303631)
* Enable starting sessions on remote agent hosts in sessions app Co-authored-by: Copilot <copilot@github.com> * Fix Co-authored-by: Copilot <copilot@github.com> * fix Co-authored-by: Copilot <copilot@github.com> * fix Co-authored-by: Copilot <copilot@github.com> * fix test Co-authored-by: Copilot <copilot@github.com> --------- Co-authored-by: Copilot <copilot@github.com> |
||
|
|
a4b2a1610d | chore: bump flatted (#303340) | ||
|
|
c9335c2873 | node_modules is stale -> ignore node-version changes | ||
|
|
b7462b4a00 |
Merge pull request #303597 from microsoft/connor4312/agent-host-server-fixups
agentHost: fixup build for server |
||
|
|
702949b935 |
Bump fast-xml-parser from 5.5.6 to 5.5.7 in /build (#303324)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.5.6 to 5.5.7. - [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases) - [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.5.6...v5.5.7) --- updated-dependencies: - dependency-name: fast-xml-parser dependency-version: 5.5.7 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
31ed44d62d |
fix: support protocol handling for sessions app on windows (#303398)
* fix: support protocol handling for sessions app on windows * chore: always use HKCU for protocol registration |
||
|
|
4315cca958 |
Revert "chore: bump electron@39.8.3" (#303369)
* Revert "chore: bump electron@39.8.3 (#302875)"
This reverts commit
|
||
|
|
5c9a7c6e04 |
Adding chat debug view in Sessions window (#303172)
show chat debug view in sessions app |
||
|
|
1bd8567766 | chore: run npm audit fix (#302988) | ||
|
|
d4f7ac5014 |
chore: bump electron@39.8.3 (#302875)
* chore: bump electron@39.8.3 * chore: bump distro |
||
|
|
5b771fc25e |
Also handle copilot native deps in remote server build (#302603)
* Remote server copilot build fixes * Don't strip copilot from stable builds * Handle all platforms for copilot |
||
|
|
9de7db1a5c | Sanity tests improvements (#302917) | ||
|
|
a727b5577c |
build(deps-dev): bump fast-xml-parser from 5.4.1 to 5.5.6 in /build (#302610)
Bumps [fast-xml-parser](https://github.com/NaturalIntelligence/fast-xml-parser) from 5.4.1 to 5.5.6. - [Release notes](https://github.com/NaturalIntelligence/fast-xml-parser/releases) - [Changelog](https://github.com/NaturalIntelligence/fast-xml-parser/blob/master/CHANGELOG.md) - [Commits](https://github.com/NaturalIntelligence/fast-xml-parser/compare/v5.4.1...v5.5.6) --- updated-dependencies: - dependency-name: fast-xml-parser dependency-version: 5.5.6 dependency-type: indirect ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> |
||
|
|
77c1d46b28 | Merge remote-tracking branch 'origin/main' into connor4312/agent-host-server | ||
|
|
8f136419bb |
chore: disallow node version untested for development (#302550)
* chore: disallow node version untested for development * chore: wording feedback Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> |
||
|
|
1c035e8297 | Merge branch 'main' into connor4312/agent-host-server | ||
|
|
c58fd111b2 | fix: rename pipeline (#302543) | ||
|
|
6076e772e8 | Clean up dead code | ||
|
|
927a0932fc | fix | ||
|
|
2944e51725 | Copilot using vscode's ripgrep (#302323) | ||
|
|
19daf4d536 |
feat: rename pipeline and fix esm script (#302466)
Co-authored-by: Copilot <copilot@github.com> |
||
|
|
e3b4bdb925 |
allow terrapin checks to by manually triggered and report results back to GitHub (#302451)
* initial terrapin check poc * bump terrapin timeout, remove trigger * allow terrapin checks to by manually triggered and report results back to GitHub Co-authored-by: Copilot <copilot@github.com> --------- Co-authored-by: Copilot <copilot@github.com> |
||
|
|
817d225857 |
Change Terrapin checks to be manual dispatches, increase timeouts (#302398)
* initial terrapin check poc * bump terrapin timeout, remove trigger |
||
|
|
f8fd37feb6 | chore: bump electron@39.8.2 (#302204) | ||
|
|
555f6469c6 | ci: fix universal build for fs-copyfile usage in git extension (#302332) | ||
|
|
2a5a1757fd |
build(next): include sessions built-in skills in desktop resources (#302297)
Enhance AI Customization: Add support for plugin skills in data source |
||
|
|
3da382383e | Merge remote-tracking branch 'origin/main' into connor4312/agent-host-server | ||
|
|
98f15b55ea |
Implement agentHost process (#296627)
* agent host init * Agent host: Copilot SDK integration with chat UI * Agent host: direct MessagePort, logging, SDK wrapper, env fix * Refactoring and cleanup * Copilot-authored message: Agent-host tool rendering, protocol, and session fixes Tool invocation rendering: - Emit tool_start/tool_complete as ChatToolInvocation (not progressMessage) - Shell tools (bash/powershell) render as terminal command blocks with IChatTerminalToolInvocationData, output, and exit codes - Non-shell tools render via invocationMessage/pastTenseMessage (markdown) - Filter out report_intent (hidden internal tool) Agent-agnostic protocol: - IPC events carry display-ready fields (displayName, invocationMessage, pastTenseMessage, toolInput, toolOutput, toolKind, language) - All Copilot CLI-specific logic in copilotToolDisplay.ts with typed interfaces for known tools (CopilotToolName enum, parameter types) - Renderer never references specific SDK tool names Session fixes: - Resumed sessions show tool invocations in history (getSessionMessages now returns tool events alongside messages) - Fixed 'already has a pending request' on resumed sessions by conditionally providing interruptActiveResponseCallback - Fixed event filtering for resumed sessions (sessionId override in _trackSession) Documentation: - Split parity.md into design.md (decisions) and backlog.md (tasks) - Updated architecture.md, sessions.md with cross-references - Added maintenance notes to all docs * Copilot-authored message: Model picker, session class, DI and test cleanup * Cleanups * stuff * add diagram * Add claude agent * Clean up * Copy some build script changes from #295817 * Simplify * Update docs * Register agent-host via chatSessions contribution API, reduce peripheral diff * Cleanup * Don't ship stuff in stable * Dynamic agent discovery via listAgents() IPC Replace hardcoded per-provider contributions with a single AgentHostContribution that discovers available agents from the agent host process at startup. Each IAgent backend now exposes an IAgentDescriptor with display metadata and auth requirements. - Add IAgentDescriptor interface and listAgents() to IPC contract - CopilotAgent/ClaudeAgent return descriptors via getDescriptor() - Single AgentHostContribution discovers + registers dynamically - Remove agentHostConstants.ts (no more hardcoded session types) - AgentHostSessionListController/LMProvider take params instead - Rename AgentSessionProviders.AgentHost -> AgentHostCopilot - Update architecture.md, sessions.md, backlog.md (Written by Copilot) * Fix review findings: proxy, disposal, filtering, tests - Add listAgents() forwarding to AgentHostServiceClient - Guard async discovery against disposal race - Add provider field to IAgentModelInfo for per-provider filtering - Filter models and sessions by provider in LM provider and list controller - Update tests for new dynamic API and agent-host-copilot scheme (Written by Copilot) * Use DI for AgentHostLanguageModelProvider (Written by Copilot) * Strip @img/sharp native binaries from builds sharp is a transitive dependency of the Claude Agent SDK used for image processing. Its native .node binaries cause dpkg-shlibdeps errors during Debian packaging due to $ORIGIN RPATH references. Strip all @img/sharp-* platform packages since the agent host doesn't need image processing at runtime. (Written by Copilot) * Strip Claude SDK vendored ripgrep binaries The Claude Agent SDK bundles ripgrep binaries for all platforms under vendor/ripgrep/. Wrong-architecture binaries cause macOS Mach-O verification to fail. Strip them entirely via .moduleignore (VS Code has its own ripgrep) and add to verify-macho skip list. (Written by Copilot) * Add tests for AgentSession, AgentService dispatcher, and workbench agent host components (Written by Copilot) * Add trace logging, IPC output channel, tool permissions, and attachment context - Add Agent Host IPC output channel (only registered at trace log level) that logs all IPC method calls, results, and progress events with full JSON payloads - Add trace-level logging in AgentService dispatcher for all method calls - Add trace-level logging in session handler for all progress events and session resolution - Wire up onPermissionRequest handler on CopilotClient.createSession and resumeSession to auto-approve tool permission requests - Add IAgentAttachment type to IPC contract and thread attachments from chat variables (file, directory, selection) through sendMessage to the Copilot SDK (Written by Copilot) * Add tests for attachment context conversion and threading (Written by Copilot) * Add gap analysis docs for Copilot and Claude SDK implementations (Written by Copilot) * Sanitize env vars for Copilot CLI subprocess Strip VSCODE_*, ELECTRON_* (except ELECTRON_RUN_AS_NODE), NODE_OPTIONS, and other debug-related env vars that can interfere with the Node.js process the SDK spawns. Matches the env sanitization from the extension implementation. Also set useStdio and autoStart for proper CLI communication. (Written by Copilot) * Add error, usage, and title_changed event types to IPC contract Add IAgentErrorEvent, IAgentUsageEvent, and IAgentTitleChangedEvent to the progress event union. Wire up session.error and assistant.usage events from the Copilot SDK to fire as IPC events instead of only logging. Handle error events in the renderer session handler by rendering the error message. Usage and title_changed events are logged at trace level. (Written by Copilot) * Add abortSession IPC method for proper cancellation Add abortSession(session) to the IPC contract, implemented across AgentService, CopilotAgent (calls session.abort()), ClaudeAgent (no-op, uses AbortController), and the renderer proxy. Wire up cancellation in the session handler to call abortSession before finishing, so the SDK actually stops processing. (Written by Copilot) * Address reviewer feedback: error finishes request, Claude abort, tests - Error events now call finish() so the request doesn't hang if the SDK doesn't send idle after an error - ClaudeAgent.abortSession calls ClaudeSession.abort() which signals the AbortController and creates a new one for future turns - Add test: cancellation calls abortSession on the agent host service - Add test: error event renders message and finishes the request - Remove stale TODO in interruptActiveResponseCallback - Use timeout() helper instead of raw setTimeout in test - Update gap docs to reflect completed work (Written by Copilot) * Add permission request IPC round-trip (Written by Copilot) * Remove Claude agent from agent-host process Strip the Claude Agent SDK integration from the agent-host utility process to focus on the Copilot SDK path. - Delete src/vs/platform/agent/node/claude/ (claudeAgent, claudeSession, claudeToolDisplay) - Remove @anthropic-ai/claude-agent-sdk from package.json - Remove AgentHostClaude enum member and all switch cases - Remove Claude command registration in electron-browser chat.contribution - Clean up build scripts (.moduleignore, verify-macho, gulpfile.vscode) - Narrow AgentProvider type to just 'copilot' - Update tests and documentation (Written by Copilot) * Wire up permission confirmation UI with ChatToolInvocation (Written by Copilot) * Fix reviewer feedback: safe permission serialization, deny on abort/dispose (Written by Copilot) * Forward reasoning events as thinking blocks (Written by Copilot) * Pass workspace folder as workingDirectory to Copilot SDK (Written by Copilot) * Store and pass workingDirectory on session resume, update gap docs (Written by Copilot) * Fix permission rendering, session-scoped permissions, and test gaps (Written by Copilot) * Auto-approve read permissions inside workspace folder (Written by Copilot) * Move read auto-approve into CopilotAgent where permission policy belongs (Written by Copilot) * Update gap docs (Written by Copilot) * Use log language for IPC output channel, add trace prefix (Written by Copilot) * Add tool rendering gaps to docs (Written by Copilot) * Stringify URIs in IPC output channel for readability (Written by Copilot) * Fix IPC output channel: use log languageId with non-log channel for proper append + syntax highlighting (Written by Copilot) * Fix build errors: add URI import, fix test mock types (Written by Copilot) * Don't localize agent host provider strings (Written by Copilot) * Remove claude-agent-sdk from eslint allowed imports (Written by Copilot) * fix test * initial thoughts * Rename folder to agentHost * Fix paths * Fixes * Fixes for copilot * Fix moduleignore * first working protocol version align more closely with protocol json rpc and some gaps * cleanup * Fix copilot pty.node packaging * Fix test * prebuild packaging * Agenthost server fixes * Update monaco.d.ts * Update docs * Fixes * Build fix * Fix build issues * reduce duplication in side effecting code * fix model switching not working * reduce mock duplication * Build fixes * Copy vscode's node.pty * And ripgrep * And thsi * Ripgrep goes to non-SDK * Skip copy for stable build * Remove outdated script * Build fixes for asar * fix * Add some logging * Fix for windows * Fix * Logs * build: add glob diagnostic for copyCopilotNativeDeps * build: check both node_modules/ and .asar.unpacked/ for source binaries * Fix * Remove excalidraw --------- Co-authored-by: Connor Peet <connor@peet.io> Co-authored-by: Connor Peet <copeet@microsoft.com> |
||
|
|
c3eb7f8453 |
chore: bump electron@39.8.1 (#302053)
* chore: bump electron@39.8.1 * chore: update node.js build * chore: bump distro * chore: bump .nvmrc |
||
|
|
c3b9417517 |
Git - second attempt to adopt the @vscode/fs-copyfile package (#301443)
* Reapply "Git - adopt the new package to use copy-on-write for the worktree include files (#299583)" (#300448)
This reverts commit
|
||
|
|
95e71c6873 |
fix: enhance release approval condition to include main and release branches (#302057)
Co-authored-by: Copilot <copilot@github.com> |
||
|
|
4bf76cd10b |
feat: add job to trigger insider builds for release branches (#302047)
Co-authored-by: Copilot <copilot@github.com> |
||
|
|
50334e7e1d | chore: revert compiled assets for macos 26 icon support (#302029) |