Sandeep Somavarapu
sasomava@microsoft.com
90d · built 2026-05-28
90-day totals
- Commits
- 220
- Grow
- 22.1
- Maintenance
- 19.3
- Fixes
- 7.0
- Total ETV
- 48.4
Where this dev ranks
Percentile against the global top-100 leaderboard (all-time totals).
- By commits
- Top 24 %
- By Growth share
- Top 29 %
30-day trajectory
Last 30 days vs. the 30 days before. Up arrows on Growth and ETV mean improvement; up arrow on Fixes share means more time on fixes (worse).
Daily performance
Daily ETV, stacked by Growth, Maintenance and Fixes.
Work-mix over time
Share of Growth / Maintenance / Fixes over a rolling 7-day window. Reads as 'where is effort flowing right now'.
Bug flow over time
Monthly bug flow attributed to this developer. The left bar (red) is bug impact this dev authored that was addressed in the given month — combining bugs others fixed for them and bugs they fixed themselves. The right bar is fixes they personally shipped that month, split between self-fixes (overlap with the red bar) and fixes done for someone else. X-axis is fix-time, not introduction-time — the Navigara API attributes bugs backward to the author at the moment the fix lands.
- Self-fix share
- 71%
- Bugs you introduced
- 34.4
- Bugs you fixed
- 28.5
Repository spread
Where this developer's commits land. Concentrated work (top1 > 80%) vs polymath spread (top1 < 30%).
Most impactful commits
Top 20 by ETV in the 90-day window.
- 3.5ETVmerge to main (#299794) * sessions - fix chat input shrinking at narrow widths (#299498) style - set width to 100% for `interactive-input-part` * modal - force focus into first modal editor always * fix: update precondition for FixDiagnosticsAction and hide input widget on command execution (#299499) fixes https://github.com/microsoft/vscode/issues/299251 * refactor: remove workspace context service dependency from FolderPicker * Add logging for agent feedback actions * modal - some fixes to actions and layout * modal - surface some editor actions in a new toolbar (#299582) * modal - surface some editor actions in a new toolbar * ccr * keybindings - remove "Edit as JSON" as its now available from the title menu * settings - remove "Edit as JSON" as its now available from the title menu * update hover fixes * terminal fixes * terminal improvements * Sessions: fix auth scopes of gh FSP * sessions customizations: make it easier to scan mcp/plugin marketplac… (#299636) sessions customizations: make it easier to scan mcp/plugin marketplace list * sessions: add built-in prompt files with override support (#299629) * sessions: add built-in prompt files with override support Ship bundled .prompt.md files with the Sessions app that appear as slash commands out of the box. Built-in prompts use a BUILTIN_STORAGE constant (cast as PromptsStorage) defined in the aiCustomization layer, avoiding changes to the core PromptsStorage enum and prompt service types. - AgenticPromptsService discovers prompts from vs/sessions/prompts/ at runtime via FileAccess and injects them into the listing pipeline - Override logic: user/workspace prompts with matching names take precedence over built-in ones - Built-in prompts open as read-only in the management editor - Sessions tree view, workspace service, and counts handle BUILTIN_STORAGE - Add /create-pr as the first built-in prompt - Bundle prompt files via gulpfile resource includes Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Update src/vs/workbench/contrib/chat/browser/aiCustomization/aiCustomizationManagement.ts Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * sessions: use AICustomizationPromptsStorage type for builtin storage Adopt the new AICustomizationPromptsStorage union type in the sessions tree view method signature. Use string-keyed Records and targeted casts at the PromptsStorage boundary to stay type-safe. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: remove PromptsStorage casts, widen IStorageSourceFilter Use AICustomizationPromptsStorage in sessions-local interfaces (IAICustomizationGroupItem, IAICustomizationFileItem) and widen IStorageSourceFilter.sources to readonly string[] so BUILTIN_STORAGE flows through without casts. The only remaining cast is at the IPromptPath creation boundary in AgenticPromptsService. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: move BUILTIN_STORAGE to sessions common layer Move AICustomizationPromptsStorage type and BUILTIN_STORAGE constant from the workbench browser UI module to sessions/contrib/chat/common so that AgenticPromptsService (a service) does not depend on UI code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * sessions: fix ESLint dangerous type assertion in builtin prompts (#299663) Replace the `as IPromptPath` cast in discoverBuiltinPrompts with a createBuiltinPromptPath factory function that contains the type narrowing in one place, satisfying the code-no-dangerous-type-assertions ESLint rule. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Enhance Agent Sessions Control and Renderer with observable active session resource * fix terminal * Enable model management in NewChatWidget * review feedback * different competion settings for copilot markdown and plaintext --------- Co-authored-by: Benjamin Pasero <benjamin.pasero@gmail.com> Co-authored-by: Benjamin Pasero <benjamin.pasero@microsoft.com> Co-authored-by: Johannes Rieken <johannes.rieken@gmail.com> Co-authored-by: BeniBenj <besimmonds@microsoft.com> Co-authored-by: Osvaldo Ortega <osortega@microsoft.com> Co-authored-by: Josh Spicer <23246594+joshspicer@users.noreply.github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 2b32258b · 2026-03-06
- 1.9ETVAdd `APPLICATION_SHARED` storage scope for cross-app state sharing (#311317) * shared application storage * add tests * fix tests Co-authored-by: Copilot <copilot@github.com> * add logging and address feedback * Add application shared storage scope Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add fallback migration for APPLICATION_SHARED storage VS Code: AbstractStorageService.get() falls back from APPLICATION_SHARED to APPLICATION scope transparently, enabling lazy per-key migration without a registry. Agents App: SharedSQLiteStorageDatabase reads the host (VS Code) app's application storage DB as a fallback during getItems(), merging missing keys so shared data is available even before VS Code runs with new scope code. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Move storage fallback into Storage class with auto-migration Move the APPLICATION → APPLICATION_SHARED fallback logic from AbstractStorageService into the base Storage class via the new fallbackStorage property on IStorage. When a key is not found, the fallback is checked and the value is automatically written through to persist the migration. This eliminates duplicated fallback code in get/getBoolean/ getNumber and ensures write-through happens for all access patterns. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Make fallbackStorage an implementation detail of Storage Remove fallbackStorage from IStorage interface. It is now a property on the Storage class only, set directly by callers that have access to the concrete type. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Pass fallback storage via ApplicationSharedStorageMain constructor Wire up the application storage as fallback during doCreate() instead of post-init. The ApplicationStorageMain is created first and passed to ApplicationSharedStorageMain's constructor. The fallback is set on the Storage instance when the shared database is created, so it's ready by the time reads happen. Removes setFallbackStorage() method and post-init wiring. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove fallbackDatabasePath - use fallbackStorage only The in-memory fallbackStorage (application storage) makes the DB-level fallback (reading VS Code's DB from disk) redundant. Both VS Code and Agents App now use the same mechanism: the Storage.fallbackStorage property that reads from application storage and auto-migrates on hit. Removes getHostUserDataPath, IProductService dependency, and INativeEnvironmentService from StorageMainService. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add MigratingStorage with persisted migration tracking Introduce MigratingStorage that migrates keys from a fallback storage on first access. Migrated keys are tracked via a persisted marker key (__$__migratedStorageMarker) in the DB so deleted keys are never resurrected from the fallback. - VS Code windows: MigratingStorage falls back to own APPLICATION storage for transparent key migration - Sessions windows: MigratingStorage falls back to host (VS Code) application storage loaded via IPC - Main process: ApplicationSharedStorageMain uses HostApplicationStorageMain for embedded app fallback - sharedDataFolderName added to product configuration - Workspace trust migration simplified (handled by MigratingStorage automatically) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix compilation * minimise changes * some fixes Co-authored-by: Copilot <copilot@github.com> * fixes * fix * delete migrated key * fix removing migrated key * update distro * feedback * Fix MigratingStorage: persist marker only on actual migration Add key to migratedKeys immediately before checking fallback to prevent redundant lookups. Only persist the MIGRATED_KEY marker when a value was actually found and migrated, avoiding unnecessary writes when the key doesn't exist in the fallback. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * feedback * fix tests Co-authored-by: Copilot <copilot@github.com> * fix application storage path * fix compilation --------- Co-authored-by: Copilot <copilot@github.com> Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 717e8538 · 2026-04-22
- 1.7ETVsessions: move session grouping from management service to providers (#307198) * Move session grouping from management service to providers Sessions providers now own chat-to-session grouping and return ISession[] directly. The management service becomes a thin pass-through that tracks the active session and active chat. Key changes: - ISessionsProvider returns ISession[] from getSessions() with capabilities - CopilotChatSessionsProvider owns SessionsGroupModel and chat grouping - IChat slimmed to resource, title, status, and reactive properties - ISession gains mainChat; IActiveSession adds activeChat (management layer) - Unified sendAndCreateChat replaces separate sendRequest/sendAndCreateChat - Provider capabilities (multipleChatsPerSession) gate multi-chat UI - ISessionWorkspace.repositories renamed to folders - ISessionRepository renamed to ISessionFolder Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix compilation --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · ffa6b689 · 2026-04-01
- 1.6ETVextract chat input widget (#309895)github.com-microsoft-vscode · 45aeec81 · 2026-04-14
- 1.4ETVsessions: workspace picker emits folder URI, session type picker spans providers (#317525) * sessions: workspace picker emits folder URI, session type picker spans providers Refactor the new-session workspace picker so it selects only a folder URI instead of a (providerId, workspace) pair. The session management service resolves the provider from the URI at session-creation time. The session type picker now queries the management service for all session types every registered provider can serve for the folder, grouped by provider with a separator between groups. Highlights: - ISessionsManagementService gains: - getSessionTypesForFolder(folderUri): returns one entry per provider x sessionType supported for the URI. - resolveWorkspaceForFolder(folderUri): finds the first provider that can resolve the URI. - createNewSession(folderUri, options?): iterates providers and picks the first matching one when no providerId is supplied. - WorkspacePicker: - Emits URI | undefined; selectedFolderUri / setSelectedWorkspace(uri). - Drops the up-front quick-pick that asked the user to choose between multiple local providers when browsing. - Recents storage stores URI only (with backward-compat reads of old {uri, providerId} entries); recents resolution prefers the stored providerId hint so a re-picked folder stays with the same provider. - SessionTypePicker: - Reads getSessionTypesForFolder; groups items by provider with a separator between groups and the provider label as a header. - Emits IPickedSessionType = { providerId, sessionTypeId } so the same sessionType id (e.g. 'copilot-cli') from different providers is disambiguated. - Recomputes types at open time as a safety net for late-registering providers. - SessionsManagementService._updateSessionTypes now fires onDidChangeSessionTypes unconditionally; the previous dedup check skipped the event when a new provider contributed an overlapping sessionType id, leaving the per-folder list stale. - LocalAgentHostSessionsProvider drops the `[Local]` suffix from workspace labels so its sessions for a folder share the workspace group with other providers' sessions for the same folder. - NewChatViewPane is rewired to the URI flow and uses the picker's selectedResolved.providerId as the createNewSession fallback when the session type picker has no explicit pick yet, preserving the user's historical provider association for recently-picked folders. 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> * sessions: address CCR feedback — providerId hint + legacy session type pref - selectWorkspace(folderUri, providerId?) plumbs an explicit providerId hint from "New Session" in a workspace section down through the workspace picker so the created session matches the section's provider. - setSelectedWorkspace accepts an options bag with { fireEvent?, providerId? }. - _readStoredPick now honors legacy storage shapes (raw string sessionTypeId and JSON without providerId) as a deferred preference; the provider is resolved lazily once the active folder is known. - New IPreferredSessionType type for stored / restored preferences where providerId may be missing; IPickedSessionType remains required-providerId for picker emissions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * sessions: rename IFolderSessionType → IProviderSessionType and getSessionTypes → getSessionTypesForFolder - IFolderSessionType was misleading (implied 'a type for a folder'; it's really a provider × session-type pair) - ISessionsManagementService.getSessionTypes() collided in name with ISessionsProvider.getSessionTypes() but returned a different type - Rename to IProviderSessionType and getSessionTypesForFolder() for clarity Co-authored-by: Copilot <223556219+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>github.com-microsoft-vscode · 1e7597c9 · 2026-05-20
- 1.4ETVsessions: extract local chat sessions into standalone provider (#317979) Extract local chat sessions into standalone provider Move the local harness (in-process VS Code chat sessions) from CopilotChatSessionsProvider into its own LocalChatSessionsProvider under contrib/providers/localChatSessions/. The new provider uses IChatService directly instead of the agent sessions model: - startNewLocalSession() for creating chat models - sendRequest() for sending messages - IGitService for git state resolution Changes: - New LocalChatSessionsProvider implementing ISessionsProvider - New localChatSessions.contribution.ts with setting registration and ForkConversationAction override - Removed LocalNewSession class from copilotChatSessionsProvider - Removed LOCAL_SESSION_ENABLED_SETTING from copilot provider - Updated copilotChatSessionsActions to import LocalSessionType from new provider - Updated sessions.common.main.ts entry point Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · db199eea · 2026-05-22
- 1.3ETVsessions: refactor ISession workspace model — ISessionFolder, ISessionGitRepository (#315990) * refactor: ISession file structure - ISessionRepository → ISessionGitRepository, folders, optional gitRepository 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> * 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>github.com-microsoft-vscode · 1e8d5efd · 2026-05-12
- 1.3ETVsessions: clean up ISessionsProvider chat API (#317875) * sessions: clean up ISessionsProvider chat API Simplify the provider contract and remove provider access to the chat widget service so widget opening is owned exclusively by the management service. Provider API - Remove `sendAndCreateChat` and `addChat` from `ISessionsProvider`. - Add `createNewChat(sessionId)` returning the committed `IChat` so the management service can open the widget on the real backend resource before sending. - `sendRequest(sessionId, chatResource, options)` now handles both the first-send (new session) and subsequent-send paths; providers dispatch internally based on `_currentNewSession`. - For multi-chat sessions, `createNewChat` on an existing session gates on `_isMultiChatEnabled()` and creates a fresh chat in the group. Session model - `ISession.mainChat` changes from `IChat` to `IObservable<IChat>` so providers can swap the chat when an untitled new session commits to a real backend resource (e.g. Claude). - `ICopilotChatSession` owns its own `ISettableObservable<IChat>` `mainChat` field; the provider no longer maintains a parallel map. Management service - `sendNewChatRequest` (renamed from `sendAndCreateChat`) calls `createNewChat`, opens the widget on the returned chat resource, then calls `sendRequest`. - `openNewChatInSession` is now async and opens the widget after `createNewChat` returns. Copilot provider - Drops the `IChatWidgetService` injection; the provider never opens widgets directly. - Drops `userSelectedTools` from the local send path (no widget available there). Spec - `SESSIONS.md`: document that `ISessionsProvider` must not have optional methods and that every addition to `ISession` or `ISessionsProvider` must be consumed by the agents-window core workbench (outside `contrib/providers/`). - `COPILOT_CHAT_SESSIONS_PROVIDER.md`: update the send-flow section to describe the new `createNewChat` + `sendRequest` two-step contract. 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> * address review comments - sessionsManagementService.sendNewChatRequest: open the chat widget with ChatViewPaneTarget so it lands in the chat view (matches the other openSession call sites in this service). - copilotChatSessionsProvider.createNewChat & _createNewSubsequentChat: dispose the IDisposable returned by _createChatSession so the model reference acquired via acquireOrLoadSession is not leaked. - copilotChatSessionsProvider._sendExistingChat: capture the disposable from _updateChatSessionState and release it in a finally so the model reference does not leak on every send. - copilotChatSessionsProvider._sendFirstChat: when chatService.sendRequest returns kind 'rejected', clean up the temp session (cache, group cache, current-new-session, fire removed event, dispose) before throwing so the UI does not keep showing a stuck InProgress session. Co-authored-by: Copilot <223556219+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>github.com-microsoft-vscode · de1cfec1 · 2026-05-21
- 1.2ETVSessions: Unified project picker and target mode picker (#302375) * Refactor NewChatWidget to use ProjectPicker for unified project selection * Enhance project picker to migrate legacy storage for recently picked projects and last selected project * Fix separator visibility for extension pickers in NewChatWidget toolbar * Remove unused separator for extension pickers in NewChatWidget * Enhance IsolationModePicker to support cloud mode and update visibility logic in NewChatWidget * Refactor IsolationModePicker to TargetPicker and update related logic for session target selection * Add padding to chat-full-welcome pickers container for improved layout * Update hover styles for project picker action label to improve visibility * Refactor project listing in ProjectPicker to deduplicate and sort projects by type * Add extension toolbar pickers for remote sessions in NewChatWidget * Add checked property to project items in ProjectPicker for selection indication * Set repo URI from project picker on session initialization * Update visibility of branch and sync indicators based on repository selection in NewChatWidget * Update target mode labels in TargetPicker for clarity * Improve styling of project picker button for better visibility * fix: correct isolation option logic in TargetPicker initialization * fix: update isolation option logic to treat false as disabled * fix: add cancellation support for project selection in NewChatWidget * fix: add fireEvent parameter to setSelectedFolder and setSelectedRepo methods in ProjectPicker * Address PR feedback: fix trust revert, use GITHUB_REMOTE_FILE_SCHEME, fix setRepository behavior - Fix trust denial to revert to previous project selection (folder or repo) instead of assuming previous URI is always a local folder - Replace hardcoded 'github-remote-file' with GITHUB_REMOTE_FILE_SCHEME constant - Keep worktree mode when repository is undefined (disable instead of switching) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback on projectPicker.ts - Rename storage keys to sessions.* namespace - Remove repoId from IProjectSelection (URI encodes identity) - Store URIs as UriComponents instead of strings - Consolidate setSelectedFolder/setSelectedRepo into single setSelectedProject API - Generalize removeFromRecents to work with any project URI - Extract command string constants (COMMAND_BROWSE_FOLDERS/REPOS) - Add legacy key migration for renamed storage keys Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Address PR feedback: remove label from IProjectSelection, use IUriIdentityService - Remove label from IProjectSelection; compute it internally via _getProjectLabel() - Use IUriIdentityService for URI equality checks instead of string comparison - Remove unused isEqual import Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Unify IsolationMode and TargetMode, replace setRepository with setProject - Remove IsolationMode type; use TargetMode everywhere - Replace isolationMode getter with isWorktree/isFolder/isCloud booleans - Replace setRepository + setCloudMode with single setProject(ITargetPickerProject) - Rename setPreferredIsolationMode → setPreferredMode, setIsolationMode → setMode - Rename isolationMode field in draft state to targetMode - Update newSession.ts to use TargetMode Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Extract ISessionProject to shared types file - Create src/vs/sessions/contrib/sessions/common/types.ts with ISessionProject - ISessionProject has kind, optional uri, optional repository — a global concept - IProjectSelection (exported from projectPicker.ts) narrows it with required uri - TargetPicker.setProject accepts ISessionProject (uri optional for state updates) - Remove ITargetPickerProject — replaced by ISessionProject Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refactor ISessionProject to SessionProject class - Convert ISessionProject interface to SessionProject class with constructor(uri, repository?) - Derive isFolder/isRepo from URI scheme instead of explicit kind field - Add withRepository() for creating copies with updated repository - Remove kind from IStoredProject and IDraftState (derived from URI) - Update all consumers to use new SessionProject(uri) constructor Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Export GITHUB_REMOTE_FILE_SCHEME from sessionProject.ts, rename types.ts - Rename types.ts → sessionProject.ts - Export GITHUB_REMOTE_FILE_SCHEME from the common layer - Update all imports across sessions codebase to use the new canonical location - githubFileSystemProvider.ts now re-exports from sessionProject.ts Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Remove important from project picker CSS * Fix RemoteNewSession.targetMode to return 'cloud' instead of 'worktree' * Remove label from IStoredProject, compute from URI on demand * Remove setPreferredMode/setMode, use preferredMode parameter on setProject * Remove GITHUB_REMOTE_FILE_SCHEME re-export from githubFileSystemProvider * Remove unused setVisible from TargetPicker * Add SessionProject to INewSession interface - Add project property and setProject method to INewSession - Implement in LocalNewSession and RemoteNewSession - setRepoUri now delegates to setProject internally - Update NewChatWidget to use setProject instead of setRepoUri * Remove repoUri and setRepoUri from INewSession, use project instead * Remove redundant target from draft state, derive from target picker - Remove target (AgentSessionProviders) from IDraftState — redundant with targetMode - Replace _currentTarget field with getter derived from _targetPicker.isCloud - Simplify _onProjectSelected to use target picker state directly * Unify session creation through _onProjectSelected - _createNewSession is now a simple session factory (no trust handling) - Initial session creation routes through _onProjectSelected when a project was restored, ensuring trust is handled consistently - _onProjectSelected always creates a new session and sets the project - Removes duplicate trust handling from _createNewSession * Remove redundant repoUri change listener from _setNewSession * Only store targetMode in draft state for local sessions * Use session.project as source of truth instead of projectPicker.selectedProject - Read project from _newSession.value?.project throughout the widget - Update session project when repository is resolved in _openRepository - _updateTargetPickerState prefers session project over picker selection - Reduces coupling to the picker's internal state * Pass SessionProject as parameter to _createNewSession * Rename ModePicker.setRepository to reset() * Remove redundant targetMode session listener The branch picker visibility is already handled by TargetPicker.onDidChange. Keep the disabled listener — needed for async extension-driven state changes. * Only open repository for folder projects, not repos * Clean up _openRepository: read session at resolve time, remove defensive fallbacks * Fix URI.revive error for legacy string URIs in stored projects Add _reviveUri helper that handles both UriComponents (new) and plain string (legacy) formats from storage. * Migrate string URIs to UriComponents on load, remove _reviveUri Convert legacy string URI format to UriComponents during deserialization and re-persist. All runtime code now uses URI.revive safely. * Remove all legacy storage migration code from ProjectPicker * Restore legacy folder/repo picker migration, only remove string→UriComponents migration * Only recreate session when project type changes (folder↔repo) * Revert: always create new session when project changes * Pass project to _updateTargetPickerState to avoid stale session state * Inline _updateTargetPickerState and remove method * Force Folder mode for non-git projects, disable picker when no repo * Fix target mode restore: use _createNewSession for restored projects Don't route restored projects through _onProjectSelected — the target picker was already correctly configured by _restoreState with the preferred mode. Calling _onProjectSelected would re-call setProject without the preferred mode, losing the restored state. * Remove early return in setProject, always update trigger label * Default to worktree on project change, simplify setProject Remove _preferredLocalMode — target always resets to worktree when a new folder with git is selected, forced to folder when no git. * Route restored projects through _onProjectSelected, remove preferredMode - Initial session creation always goes through _onProjectSelected - Remove preferredMode parameter from TargetPicker.setProject - Remove targetMode from IDraftState (derived from project) * Restore targetMode from draft state via _openRepository preferredMode Store targetMode in draft, pass it through _openRepository to _targetPicker.setProject when the git repo resolves. * Reset target mode only on user project change, retain on repo resolve - setProject takes resetMode flag instead of preferredMode - _onProjectSelected passes resetMode=true (user action → reset to worktree) - _openRepository passes resetMode=false (repo resolving → keep current mode) - Remove targetMode from draft state — no longer needed for restore - Simplify _openRepository signature * Fix resetMode: persist flag until repo resolves When resetMode=true is passed but the project has no repo yet, store _pendingReset so the mode resets to worktree when the repo resolves in a subsequent setProject call. * Simplify: never reset target mode on project change Target mode is retained across project changes. Only forced transitions: - repo → cloud - folder without git → workspace - cloud → folder with git → worktree (switching back from cloud) User's explicit dropdown choice (worktree/folder) is always respected. * Don't force workspace for non-git folders, keep current mode disabled Only forced transitions: repo→cloud, cloud→folder=worktree. Non-git folders show current mode as disabled until repo resolves. * Show Folder mode for non-git folders when isolation option is enabled * Default to worktree always for folder projects * Refactor TargetPicker: extract _updateMode, simplify disabled state - Extract mode logic into _updateMode(), called from setProject and config change - Folder with git → worktree, folder without git → workspace, repo → cloud - Picker only enabled when folder has git repo and isolation option is enabled --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · ea5ef753 · 2026-03-18
- 1.1ETVshare recent folders between apps (#311963) Co-authored-by: Copilot <copilot@github.com>github.com-microsoft-vscode · e65f99d7 · 2026-04-22
- 1.1ETVAgents welcome: preview/import API for VS Code theme importer (#313454) * agents welcome: add theme selection step after sign-in After signing in (or for first-launch signed-in users after clicking Get Started), show a theme selection step with 4 theme preview cards (Dark 2026, Dark HC, Light 2026, Light HC). Theme is applied live on card click. Continue button dismisses the overlay. External sign-in via onDidChangeDefaultAccount now transitions to the theme step instead of auto-completing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents welcome: theme importer restructure and environment improvements - Rename vsCodeThemeImporter folder to vscode, merge interface and service - Rename hostExtensionsPath to hostExtensionsHome returning URI - Move host environment paths to common environmentService Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents welcome: address PR review feedback - Compare both id and label in theme extension matching - Move VS Code theme radio inside the radiogroup for accessibility - Add touch/tap support (Gesture.addTarget + TouchEventType.Tap) - Add touch-action: manipulation to theme cards and VS Code theme radio - Fix JSDoc for hostUserHome and importVSCodeTheme Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents welcome: preview/import API for VS Code theme importer - Add previewVSCodeTheme() that installs from host location temporarily and returns IDisposable to uninstall on dispose - importVSCodeTheme() now: installs from host (preview), copies extension to agents app extensions dir, then replaces install from copied location - Walkthrough uses preview on select, import on Continue, dispose on Escape - Address PR feedback: touch support, accessibility, theme matching Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * address PR feedback: fix preview flow and use INativeEnvironmentService - Apply theme in preview even when no extension install is needed - Return no-op disposable when theme is already available - Use @INativeEnvironmentService decorator matching the type Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * restore reverted PR changes and polish theme picker - Restore hostUserHome, hostExtensionsHome in common environmentService - Restore showThemeStep() calls in welcome.contribution - Restore vsCodeThemeImporter import in sessions.common.main - Fix preview flow: apply theme even when no install needed - Use @INativeEnvironmentService decorator - Increase theme picker card width to 1000px - Scale up theme preview thumbnails with min-height - Add spacing between tiles and VS Code Theme button Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix compilation error * fix compilation * fix compilations * enhance transition effects in sessions walkthrough overlay * update button styling in sessions walkthrough to include border Co-authored-by: Copilot <copilot@github.com> * refine padding and border styles in sessions walkthrough theme card Co-authored-by: Copilot <copilot@github.com> * feat: update theme previews and paths for sessions walkthrough - Updated the image source paths for theme previews in sessionsWalkthroughOverlay. - Added new SVG files for dark, high contrast dark, high contrast light, and light themes for 2026. * refine theme card dimensions and improve responsive styles in sessions walkthrough Co-authored-by: Copilot <copilot@github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Co-authored-by: mrleemurray <mrleemurray@users.noreply.github.com> Co-authored-by: Copilot <copilot@github.com>github.com-microsoft-vscode · f2ccb575 · 2026-04-30
- 0.9ETVimplement new chat ui for mulit chat sessions (#310031) implement new chat view for multiple chat sessionsgithub.com-microsoft-vscode · 0580e735 · 2026-04-15
- 0.9ETVAdd submenu support to ActionList and model picker configuration UI (#302976) * Update chatProvider version to 5 and add configuration schema support for per-model options * Revert version number in chatProvider declaration from 5 to 4 * Refactor chat request options to use ILanguageModelChatRequestOptions interface and revert chatProvider version to 4 * Add per-model configuration actions and update LanguageModelsService methods * Improve label generation for model configuration actions by using propSchema.title and enhancing formatting * Enhance model configuration action labels to indicate default values in LanguageModelsService * Add languageModelsService to model action creation for enhanced toolbar actions * Integrate languageModelsService into model action creation for improved model picker functionality * Add configuration toolbar actions for models in chat model picker * Refactor model configuration action handling to utilize languageModelsService for toolbar actions * Add toolbar actions to model item creation in chat model picker * Refactor action item rendering to flatten SubmenuActions into a single gear button for context menu access * Enhance toolbar action interaction by preventing selection on click and updating visibility styles * Refactor ActionItemRenderer to use a gear button for context menu access and improve toolbar action handling * Refactor ActionItemRenderer to use inline menu for SubmenuActions and improve context menu handling * Refactor ActionItemRenderer to use defaultMenuStyles for menu configuration * Refactor ActionItemRenderer to display a gear button for SubmenuActions that opens an inline menu * Add submenu support to ActionListItem and update styles for submenu indicator * Enhance submenu handling in ActionItemRenderer with improved mouse event management and layout adjustments * Refactor ActionItemRenderer to streamline submenu handling and improve hover interactions * Prevent hover display for items with submenu actions to avoid conflicts * Add hardcoded submenu actions for debugging in createModelItem function * Refactor submenu positioning in ActionList to improve layout and visibility * Fix submenu positioning to prevent overflow clipping and ensure visibility * Refactor submenu positioning to append within action list's DOM context and adjust for transform offsets * Refactor submenu positioning to append within row element and adjust layout for transform offsets * Enhance submenu structure by adding rowElement to support fixed-position rendering and adjust overflow handling * Refactor submenu handling to remove rowElement from submenu state and adjust positioning logic for improved layout * Refactor submenu positioning to use bounding rectangles for accurate placement relative to the row element * Refactor submenu positioning to append within action list's DOM context for improved layout * Refactor submenu positioning to append within action-widget container and use fixed coordinates for accurate placement * Refactor submenu positioning to append directly to the action list's DOM node and adjust placement logic for improved layout * Refactor ActionList to set position of domNode to relative for accurate submenu positioning * Remove hardcoded submenu actions from createModelItem and use action's toolbarActions instead * Prevent hiding submenu when hovering over it to improve user interaction * Add submenu indicator visibility handling and CSS class for submenu items * Prevent hiding action widget when focus moves to a submenu * Always render submenu indicator icon for consistent width and alignment * Improve focus handling in ActionWidgetService to prevent premature hiding * Refactor focus handling in ActionWidgetService to improve submenu interaction * Prevent submenu from being focusable to maintain action widget focus * Adjust submenu positioning logic to display correctly based on available space * Add hasActiveSubmenu method to ActionList and update focus handling in ActionWidgetService * Update hasActiveSubmenu method to account for scheduled submenu visibility * Adjust submenu positioning to prevent overflow above the action list * Remove scheduled submenu visibility check from hasActiveSubmenu method * Enhance submenu positioning logic to dynamically determine expand direction based on available space * Implement cleanupSubmenu method and update focus handling to ensure proper submenu cleanup on focus loss * Refactor submenu handling: remove Menu widget and implement direct DOM rendering for submenu items * Add check icon to submenu items and adjust styling for improved layout * Immediately clean up submenu on hover change to enhance user experience * Update submenu styles: increase min-width and adjust padding for better layout * Refactor hover handling in ActionList: avoid showing hover for submenu items and adjust submenu display logic on hover * Enhance submenu item rendering: add group label display and adjust styles for improved layout * Refactor hover handling in ActionList: improve logic to skip re-rendering for active submenus * Update submenu min-width: increase from 160px to 220px for improved layout * Update submenu styles: change min-width to max-content for better adaptability * Update action widget styles: set min-width to 200px for improved layout * Improve submenu hover handling: prevent hiding when hovering over the same row or submenu * Update submenu item hover styles: change background and text colors for better visibility * Fix submenu selector handling: update class name for submenu detection and prevent default mouse down event * Hide submenu after action execution to improve user experience * Update submenu item hover styles: change background and text colors for improved visibility * Refactor LanguageModelsService: update group retrieval logic to use configuration service as the source of truth * Refactor LanguageModelsService: enhance model configuration handling by removing default properties and managing group updates * Add model configuration description retrieval to LanguageModelsService * Refactor LanguageModelsService: update property schema handling to use showInPicker and enhance description formatting * Add showInPicker property to IJSONSchema and update LanguageModelsService to utilize it * Refactor LanguageModelsService: update showInPicker handling to improve type safety and simplify value retrieval * Add showInPicker property to ILanguageModelConfigurationSchemaProperty and update configurationSchema type in ILanguageModelChatMetadata * Enhance model hover content: include configuration properties marked with showInPicker * Refactor buildModelPickerItems: pass languageModelsService to createModelItem for improved functionality * Refactor submenu handling in ActionList: add delay for hiding submenu to improve user experience * Refactor language model options: rename configuration to modelConfiguration for consistency * Refactor language model options: rename modelConfiguration to configuration for consistency * Enhance language model settings management: implement model settings update mechanism and extend interfaces for configuration handling * Enhance language model integration: add model configuration handling in chat agent requests and update type definitions * Refactor language model settings handling: remove unused model settings methods and update model configuration retrieval in chat requests * Refactor language model configuration handling: rename configuration to modelConfiguration for consistency * Refactor language model configuration: rename 'models' to 'settings' for consistency * Enhance ActionList: prevent hover display when a submenu is active and adjust submenu positioning to avoid scrollbar overlap * Enhance ActionList: add description text element and style submenu indicator for better interaction * Enhance ActionItemRenderer and CSS: adjust submenu indicator positioning and improve hover feedback for submenu items * Enhance ActionItemRenderer and CSS: wrap description and submenu indicator for improved hover feedback * Enhance ActionWidget CSS: adjust description group visibility and padding for submenu items * Refactor ActionItemRenderer: rearrange description group and toolbar for improved layout and hover feedback * Enhance ActionWidget CSS: adjust padding for submenu indicator for improved layout * Enhance ActionList hover behavior: update submenu display logic to trigger on description group hover * Enhance ActionWidget CSS: update submenu indicator visibility on row hover for improved user interaction * Refactor ActionList: remove submenu check from hover display logic for improved user experience * Refactor ActionList hover logic: improve submenu visibility handling during mouse movement * Enhance LanguageModel configuration: add support for enum item labels and descriptions in model picker * Enhance ActionList submenu rendering: add group headers and descriptions for improved clarity * Enhance ModelPicker: update label rendering to include model configuration descriptions and re-render on model changes * Enhance ActionList hover functionality: show hover content in submenu when no submenu actions are present and add CSS styles for hover section * Enhance ActionList submenu hover styles: adjust padding, font size, and colors for improved readability * Refactor ActionList submenu rendering: improve separator logic and remove unused header styles * Enhance ActionList submenu rendering: add group headers with labels and separators for improved organization * Enhance ActionList submenu hover styles: adjust padding for improved layout * Refactor ActionList rendering: remove unused description group and submenu indicator styles for cleaner layout * Enhance ActionList submenu hover styles: adjust padding, font size, and line height for improved readability * Enhance action list submenu hover styles: adjust padding, font size, and line height for improved readability and layout * Enhance action list submenu styles: adjust padding for improved layout * Enhance action list submenu group label styles: increase font size for better visibility * Update action list submenu group label color for improved visibility * Enhance ActionList submenu positioning and overflow handling for improved layout and visibility * Enhance action list item layout: add right padding for improved spacing * Refactor ActionList submenu: simplify styles and remove unused properties * Enhance ActionList hover behavior: switch to instant hover display for improved responsiveness * Enhance ActionList hover behavior: implement hover delay for improved user experience * Refactor ActionList hover behavior: switch to delayed hover display for improved user experience * Enhance ModelPickerActionItem: re-render label on model configuration changes * Enhance ModelPickerWidget: re-register label rendering on language model changes * Refactor ILanguageModelConfigurationSchemaProperty: rename showInPicker to isVisible for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename isVisible to isPrimary for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename isPrimary to showInDescription for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename showInDescription to showInModelPicker for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename showInModelPicker to pinToModelPicker for clarity * Refactor ILanguageModelConfigurationSchemaProperty: change pinToModelPicker to group for improved clarity * Refactor ILanguageModelsService: enhance documentation for getModelConfigurationDescription to clarify its purpose and usage * Refactor language model configuration handling: replace direct service method calls with utility function for improved clarity and maintainability * Refactor ActionItemRenderer: remove unused descriptionText property and streamline description handling * Refactor ActionItemRenderer: streamline description element creation by removing redundant code * Refactor ActionList: enhance hover content rendering and streamline submenu actions handling * Refactor ActionListHoverContent: extract group rendering logic into ActionListHoverGroup class * Refactor ActionListHoverContent and ActionListHoverGroup: enhance event handling and streamline disposables management * Refactor ActionListHoverGroup and ActionListHoverContent: integrate Menu widget for submenu actions and remove unused CSS styles * Refactor ActionListHoverGroup and ActionListHoverContent: remove unused Menu widget and enhance submenu item styling * Enhance ActionList keyboard navigation and accessibility: add support for submenu actions with arrow keys and improve focus handling for submenu items * Add OpenModelConfigPickerAction and model configuration picker UI component * Refactor ModelConfigPickerActionItem render method: streamline DOM node creation and class assignment * Enhance ModelConfigPickerActionItem: add disabled state handling for navigation actions * Enhance ModelConfigPickerActionItem: add header for submenu actions with group label * Enhance ModelConfigPickerActionItem: update submenu header to use action label as group title * Refactor ModelConfigPickerActionItem and ModelPickerActionItem: simplify navigation properties handling and remove unused language models service references * Enhance ModelConfigPickerActionItem: add navigation-group configuration values display in model picker * Enhance ModelConfigPickerActionItem and language model interfaces: add support for enum icons in model configuration * Refactor ModelConfigPickerActionItem and language model interfaces: replace enumIcons with a single icon property for configuration * Refactor ModelConfigPickerActionItem and language model interfaces: remove icon property from configuration schema * Refactor ActionList and ActionWidgetService: remove unused submenu actions and related hover logic * Clarify comment in OpenModelConfigPickerAction: specify that the picker is opened by the ModelConfigPickerActionItem view item on click * Remove model config picker UI: delete ModelConfigPickerActionItem, remove OpenModelConfigPickerAction and chatModelHasNavigationConfig context key The config picker dropdown button in the chat input has been removed while keeping the underlying per-model configuration API, settings support, and model management editor intact. Also fix ILanguageModelConfigurationSchema to not include boolean in properties type (incompatible with IJSONSchema), and add showUnavailableFeatured/showFeatured to IModelPickerDelegate. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refactor LanguageModelsService: merge configuration options and simplify default checks * Revert newChatViewPane changes and fix code review issues - Make showUnavailableFeatured/showFeatured optional on IModelPickerDelegate (defaults to true), removing the need to change newChatViewPane.ts - Fix sendChatRequest merge order: caller's configuration takes precedence over stored model config - Remove dead typeof propSchema !== 'boolean' checks after type cleanup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert unrelated changes to chatModelPicker and modelPickerActionItem These files were modified to add showUnavailableFeatured/showFeatured which already landed on main separately. Revert to merge-base versions to keep the diff clean. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert unrelated changes to chatInputPart.ts Revert to merge-base version — the diff was from main changes (delegation picker, showUnavailableFeatured/showFeatured) that will come in on merge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Store raw per-model config to prevent secret leakage Previously, _resolveModelConfiguration was called when collecting per-model configs, which resolved secret references into plaintext. The resolved values were then cached in _modelConfigurations, and setModelConfiguration could inadvertently persist plaintext secrets back into chatLanguageModels.json. Now store raw config (with secret references intact) and remove the unused _resolveModelConfiguration method. Per-model config properties don't use secrets in practice (they're for temperature, reasoning effort, etc.), but this prevents any future secret leakage. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add submenu support to model picker for per-model configuration - Re-add submenu rendering to ActionList: ActionListHoverContent and ActionListHoverGroup classes for interactive hover with config options - Show config description (navigation-group values) in model picker item description and label - Pass toolbarActions from getModelConfigurationActions to model items - Add getModelConfigurationDescription to ILanguageModelsService - ArrowRight keyboard shortcut opens submenu with focus - CSS for submenu layout, group headers, check icons, descriptions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Add debug logging for submenu actions in ActionListWidget * Prevent selection when clicking on submenu indicator in ActionListWidget --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · bf56017b · 2026-03-18
- 0.9ETVAdd per-model configuration support for language models (#302771) * Add per-model configuration support to LanguageModelsService * Update chatProvider version to 5 and add configuration schema support for per-model options * Add per-model configuration support to chat request options * Revert version number in chatProvider declaration from 5 to 4 * Refactor chat request options to use ILanguageModelChatRequestOptions interface and revert chatProvider version to 4 * Add per-model configuration support in LanguageModelsService and update ActionsColumnRenderer * Enhance per-model configuration support by merging schema defaults with user config in sendChatRequest * Add per-model configuration actions and update LanguageModelsService methods * Optimize model resolution for default vendors by applying per-model configurations directly to resolved models * Add per-model configuration actions for single model selection in ChatModelsWidget * Improve label generation for model configuration actions by using propSchema.title and enhancing formatting * Enhance model configuration action labels to indicate default values in LanguageModelsService * Add languageModelsService to model action creation for enhanced toolbar actions * Integrate languageModelsService into model action creation for improved model picker functionality * Add configuration toolbar actions for models in chat model picker * Refactor model configuration action handling to utilize languageModelsService for toolbar actions * Add toolbar actions to model item creation in chat model picker * Refactor action item rendering to flatten SubmenuActions into a single gear button for context menu access * Enhance toolbar action interaction by preventing selection on click and updating visibility styles * Refactor ActionItemRenderer to use a gear button for context menu access and improve toolbar action handling * Refactor ActionItemRenderer to use inline menu for SubmenuActions and improve context menu handling * Refactor ActionItemRenderer to use defaultMenuStyles for menu configuration * Refactor ActionItemRenderer to display a gear button for SubmenuActions that opens an inline menu * Add submenu support to ActionListItem and update styles for submenu indicator * Enhance submenu handling in ActionItemRenderer with improved mouse event management and layout adjustments * Refactor ActionItemRenderer to streamline submenu handling and improve hover interactions * Prevent hover display for items with submenu actions to avoid conflicts * Add hardcoded submenu actions for debugging in createModelItem function * Refactor submenu positioning in ActionList to improve layout and visibility * Fix submenu positioning to prevent overflow clipping and ensure visibility * Refactor submenu positioning to append within action list's DOM context and adjust for transform offsets * Refactor submenu positioning to append within row element and adjust layout for transform offsets * Enhance submenu structure by adding rowElement to support fixed-position rendering and adjust overflow handling * Refactor submenu handling to remove rowElement from submenu state and adjust positioning logic for improved layout * Refactor submenu positioning to use bounding rectangles for accurate placement relative to the row element * Refactor submenu positioning to append within action list's DOM context for improved layout * Refactor submenu positioning to append within action-widget container and use fixed coordinates for accurate placement * Refactor submenu positioning to append directly to the action list's DOM node and adjust placement logic for improved layout * Refactor ActionList to set position of domNode to relative for accurate submenu positioning * Remove hardcoded submenu actions from createModelItem and use action's toolbarActions instead * Prevent hiding submenu when hovering over it to improve user interaction * Add submenu indicator visibility handling and CSS class for submenu items * Prevent hiding action widget when focus moves to a submenu * Always render submenu indicator icon for consistent width and alignment * Improve focus handling in ActionWidgetService to prevent premature hiding * Refactor focus handling in ActionWidgetService to improve submenu interaction * Prevent submenu from being focusable to maintain action widget focus * Adjust submenu positioning logic to display correctly based on available space * Add hasActiveSubmenu method to ActionList and update focus handling in ActionWidgetService * Update hasActiveSubmenu method to account for scheduled submenu visibility * Adjust submenu positioning to prevent overflow above the action list * Remove scheduled submenu visibility check from hasActiveSubmenu method * Enhance submenu positioning logic to dynamically determine expand direction based on available space * Implement cleanupSubmenu method and update focus handling to ensure proper submenu cleanup on focus loss * Refactor submenu handling: remove Menu widget and implement direct DOM rendering for submenu items * Add check icon to submenu items and adjust styling for improved layout * Immediately clean up submenu on hover change to enhance user experience * Update submenu styles: increase min-width and adjust padding for better layout * Refactor hover handling in ActionList: avoid showing hover for submenu items and adjust submenu display logic on hover * Enhance submenu item rendering: add group label display and adjust styles for improved layout * Refactor hover handling in ActionList: improve logic to skip re-rendering for active submenus * Update submenu min-width: increase from 160px to 220px for improved layout * Update submenu styles: change min-width to max-content for better adaptability * Update action widget styles: set min-width to 200px for improved layout * Improve submenu hover handling: prevent hiding when hovering over the same row or submenu * Update submenu item hover styles: change background and text colors for better visibility * Fix submenu selector handling: update class name for submenu detection and prevent default mouse down event * Hide submenu after action execution to improve user experience * Update submenu item hover styles: change background and text colors for improved visibility * Refactor LanguageModelsService: update group retrieval logic to use configuration service as the source of truth * Refactor LanguageModelsService: enhance model configuration handling by removing default properties and managing group updates * Add model configuration description retrieval to LanguageModelsService * Refactor LanguageModelsService: update property schema handling to use showInPicker and enhance description formatting * Add showInPicker property to IJSONSchema and update LanguageModelsService to utilize it * Refactor LanguageModelsService: update showInPicker handling to improve type safety and simplify value retrieval * Add showInPicker property to ILanguageModelConfigurationSchemaProperty and update configurationSchema type in ILanguageModelChatMetadata * Enhance model hover content: include configuration properties marked with showInPicker * Refactor buildModelPickerItems: pass languageModelsService to createModelItem for improved functionality * Refactor submenu handling in ActionList: add delay for hiding submenu to improve user experience * Refactor language model options: rename configuration to modelConfiguration for consistency * Refactor language model options: rename modelConfiguration to configuration for consistency * Enhance ChatLanguageModelsDataContribution: add per-model configuration schemas for improved schema validation * Enhance language model settings management: implement model settings update mechanism and extend interfaces for configuration handling * Enhance language model integration: add model configuration handling in chat agent requests and update type definitions * Refactor language model settings handling: remove unused model settings methods and update model configuration retrieval in chat requests * Refactor language model configuration handling: rename configuration to modelConfiguration for consistency * Enhance RunSubagentTool: add model configuration retrieval for user-selected model * Refactor language model configuration: rename 'models' to 'settings' for consistency * Enhance ActionList: prevent hover display when a submenu is active and adjust submenu positioning to avoid scrollbar overlap * Enhance ActionList: add description text element and style submenu indicator for better interaction * Enhance ActionItemRenderer and CSS: adjust submenu indicator positioning and improve hover feedback for submenu items * Enhance ActionItemRenderer and CSS: wrap description and submenu indicator for improved hover feedback * Enhance ActionWidget CSS: adjust description group visibility and padding for submenu items * Refactor ActionItemRenderer: rearrange description group and toolbar for improved layout and hover feedback * Enhance ActionWidget CSS: adjust padding for submenu indicator for improved layout * Enhance ActionList hover behavior: update submenu display logic to trigger on description group hover * Enhance ActionWidget CSS: update submenu indicator visibility on row hover for improved user interaction * Refactor ActionList: remove submenu check from hover display logic for improved user experience * Refactor ActionList hover logic: improve submenu visibility handling during mouse movement * Enhance LanguageModel configuration: add support for enum item labels and descriptions in model picker * Enhance ActionList submenu rendering: add group headers and descriptions for improved clarity * Enhance ModelPicker: update label rendering to include model configuration descriptions and re-render on model changes * Enhance ActionList hover functionality: show hover content in submenu when no submenu actions are present and add CSS styles for hover section * Enhance ActionList submenu hover styles: adjust padding, font size, and colors for improved readability * Refactor ActionList submenu rendering: improve separator logic and remove unused header styles * Enhance ActionList submenu rendering: add group headers with labels and separators for improved organization * Enhance ActionList submenu hover styles: adjust padding for improved layout * Refactor ActionList rendering: remove unused description group and submenu indicator styles for cleaner layout * Enhance ActionList submenu hover styles: adjust padding, font size, and line height for improved readability * Enhance action list submenu hover styles: adjust padding, font size, and line height for improved readability and layout * Enhance action list submenu styles: adjust padding for improved layout * Enhance action list submenu group label styles: increase font size for better visibility * Update action list submenu group label color for improved visibility * Enhance ActionList submenu positioning and overflow handling for improved layout and visibility * Enhance action list item layout: add right padding for improved spacing * Refactor ActionList submenu: simplify styles and remove unused properties * Enhance ActionList hover behavior: switch to instant hover display for improved responsiveness * Enhance ActionList hover behavior: implement hover delay for improved user experience * Refactor ActionList hover behavior: switch to delayed hover display for improved user experience * Enhance ModelPickerActionItem: re-render label on model configuration changes * Enhance ModelPickerWidget: re-register label rendering on language model changes * Refactor ILanguageModelConfigurationSchemaProperty: rename showInPicker to isVisible for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename isVisible to isPrimary for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename isPrimary to showInDescription for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename showInDescription to showInModelPicker for clarity * Refactor ILanguageModelConfigurationSchemaProperty: rename showInModelPicker to pinToModelPicker for clarity * Refactor ILanguageModelConfigurationSchemaProperty: change pinToModelPicker to group for improved clarity * Refactor LanguageModelConfigurationSchemaProperty and LanguageModelConfigurationSchema: update configurationSchema type and add detailed property definitions * Refactor LanguageModelConfigurationSchema: simplify schema property definition and enhance documentation * Refactor LanguageModelConfigurationSchema: enhance documentation for properties and clarify enumItemLabels and group usage * Refactor ILanguageModelConfigurationSchema: inline schema property definition and enhance documentation for group and enumItemLabels * Refactor ILanguageModelsService: enhance documentation for getModelConfigurationDescription to clarify its purpose and usage * Refactor language model configuration handling: replace direct service method calls with utility function for improved clarity and maintainability * Refactor ActionItemRenderer: remove unused descriptionText property and streamline description handling * Refactor ActionItemRenderer: streamline description element creation by removing redundant code * Refactor ActionList: enhance hover content rendering and streamline submenu actions handling * Refactor ActionListHoverContent: extract group rendering logic into ActionListHoverGroup class * Refactor ActionListHoverContent and ActionListHoverGroup: enhance event handling and streamline disposables management * Refactor ActionListHoverGroup and ActionListHoverContent: integrate Menu widget for submenu actions and remove unused CSS styles * Refactor ActionListHoverGroup and ActionListHoverContent: remove unused Menu widget and enhance submenu item styling * Enhance ActionList keyboard navigation and accessibility: add support for submenu actions with arrow keys and improve focus handling for submenu items * Add OpenModelConfigPickerAction and model configuration picker UI component * Refactor ModelConfigPickerActionItem render method: streamline DOM node creation and class assignment * Enhance ModelConfigPickerActionItem: add disabled state handling for navigation actions * Enhance ModelConfigPickerActionItem: add header for submenu actions with group label * Enhance ModelConfigPickerActionItem: update submenu header to use action label as group title * Refactor ModelConfigPickerActionItem and ModelPickerActionItem: simplify navigation properties handling and remove unused language models service references * Enhance ModelConfigPickerActionItem: add navigation-group configuration values display in model picker * Enhance ModelConfigPickerActionItem and language model interfaces: add support for enum icons in model configuration * Refactor ModelConfigPickerActionItem and language model interfaces: replace enumIcons with a single icon property for configuration * Refactor ModelConfigPickerActionItem and language model interfaces: remove icon property from configuration schema * Refactor ActionList and ActionWidgetService: remove unused submenu actions and related hover logic * Clarify comment in OpenModelConfigPickerAction: specify that the picker is opened by the ModelConfigPickerActionItem view item on click * Remove model config picker UI: delete ModelConfigPickerActionItem, remove OpenModelConfigPickerAction and chatModelHasNavigationConfig context key The config picker dropdown button in the chat input has been removed while keeping the underlying per-model configuration API, settings support, and model management editor intact. Also fix ILanguageModelConfigurationSchema to not include boolean in properties type (incompatible with IJSONSchema), and add showUnavailableFeatured/showFeatured to IModelPickerDelegate. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Refactor LanguageModelConfigurationSchema: adjust properties type definition for clarity * Refactor LanguageModelsService: merge configuration options and simplify default checks * Revert newChatViewPane changes and fix code review issues - Make showUnavailableFeatured/showFeatured optional on IModelPickerDelegate (defaults to true), removing the need to change newChatViewPane.ts - Fix sendChatRequest merge order: caller's configuration takes precedence over stored model config - Remove dead typeof propSchema !== 'boolean' checks after type cleanup Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert unrelated changes to chatModelPicker and modelPickerActionItem These files were modified to add showUnavailableFeatured/showFeatured which already landed on main separately. Revert to merge-base versions to keep the diff clean. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * Revert unrelated changes to chatInputPart.ts Revert to merge-base version — the diff was from main changes (delegation picker, showUnavailableFeatured/showFeatured) that will come in on merge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · e8df0398 · 2026-03-18
- 0.8ETVagents: add smoke test for Agents Window with mocked LLM server (#317545) * agents: add smoke test for Agents Window with mocked LLM server Adds a smoke test that opens the Agents Window, creates a new session on a workspace folder, sends a 'hello world' prompt, and verifies the request reaches a local mock LLM server that returns a canned response. The test exercises two session types: Copilot CLI and Claude Code. A third Local-session test is included but marked `it.skip` for now. Key pieces: * `test/smoke/src/areas/agents/agents.test.ts` — new smoke suite. Starts `scripts/chat-simulation/common/mock-llm-server.js` on a random port, registers a per-test scenario with a distinct reply, and injects `VSCODE_COPILOT_CHAT_TOKEN` / `GITHUB_PAT` / `IS_SCENARIO_AUTOMATION` env vars so the Copilot extension's token manager picks up a fake token whose endpoints.api/proxy point at the mock server. * `test/automation/src/agents.ts` — new `Agents` workbench helper with `openCurrentFolderInAgentsWindow`, `switchToAgentsWindow`, `startNewSession`, `selectSessionType`, `submitNewSessionPrompt`, `waitForAssistantText`. * `test/automation/src/code.ts` + `electron.ts` — `LaunchOptions` now accepts an `extraEnv` map that is merged on top of `process.env` when spawning the Electron child, so tests can inject env-based mocks without going through a custom launcher. * `src/vs/sessions/browser/sessionsSetUpService.ts` — `shouldSkipSessionsWelcome` now returns `true` whenever `enableSmokeTestDriver` is set, so the welcome/auth dialog does not block smoke runs. * `scripts/chat-simulation/common/mock-llm-server.js` — adds two models to `EXTRA_MODELS` (`gpt-5.3-codex` for Copilot CLI default, `claude-sonnet-4.5` for Claude Code), and routes `/v1/messages` to a new `handleMessagesApi` that streams Anthropic-format SSE (`message_start` / `content_block_delta` / `message_stop`) which the Claude Code session type's messages-API parser expects. 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> * fix copilot cli test * skip claude test * sessions: fix new-session removal regression and rename smoke test 1. Revert the `_refreshSessionCache` filter change from d5747b31c42 back to `adapter instanceof AgentSessionAdapter`. The broadened `adapter !== this._currentNewSession` check raced with the unconditional `this._currentNewSession = undefined` in the `_sendFirstChat*` paths: a late callback from a previous session's commit would wipe the pointer and the next refresh would evict the new session's temp adapter, navigating the Agents Window back to the homepage mid-request. 2. Rename the Agents Window smoke test infrastructure for clarity: - `test/automation/src/agents.ts` -> `agentsWindow.ts` (class `Agents` -> `AgentsWindow`, `workbench.agents` -> `workbench.agentsWindow`) - `test/smoke/src/areas/agents/agents.test.ts` -> `areas/agentsWindow/agentsWindow.test.ts` Verified with 10 consecutive smoke-test loops: 8/10 fully green (Copilot CLI + Claude + Local), 2 intermittent UI timing flakes unrelated to the navigation regression. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents smoke: address PR #317545 review feedback - switchToAgentsWindow: replace fixed 2s sleep with waitForElement on the Agents workbench DOM (`.agent-sessions-workbench`) so the helper returns as soon as the new window is interactable. - resolveElectronConfiguration: apply `extraEnv` last, after the TESTRESOLVER_* assignments in the remote branch, so caller-provided env vars truly have final precedence. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents smoke: skip Agents Window tests for OSS quality The Copilot extension is not built in OSS CI (it's in excludedExtensions and its dist/extension.js is only produced by its own esbuild pipeline). Without it all three session-type providers fail to activate, causing every Agents Window test to time out. Skip the suite when quality is OSS, matching the pattern used by setupExtensionTests and setupLocalizationTests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * copilotcli: add proxy endpoint to getAuthInfo for mock server routing Without `endpoints.proxy`, the SDK's model-fetch calls (`/models/session`, `/copilot_internal/v2/token`) fall back to the real GitHub API which rejects the fake HMAC with a 401. This caused intermittent smoke test failures (1 in 10) because the Copilot CLI language models never registered, making the chat-setup readiness gate depend on Claude's model registration timing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * copilotcli: don't cache failed model fetches When `getAvailableModels` throws (e.g. transient network failure or HMAC validation error with a proxy), the empty result was permanently cached in `_availableModels`. Subsequent calls to `getModels()` would return the cached empty array without retrying, leaving the Copilot CLI language model provider with zero models for the rest of the session. Clear `_availableModels` on error so the next call retries the fetch. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents smoke: reset workspace before opening Agents Window Earlier smoke test suites (e.g. Tasks) modify .vscode/tasks.json and leave uncommitted changes. A dirty workspace prevents worktree creation and triggers the uncommitted-changes confirmation flow which aborts the Copilot CLI session on builds. Reset via `git checkout . --quiet` in the before hook, matching the pattern used by notebook and search smoke tests. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Sandeep Somavarapu <sandy081@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>github.com-microsoft-vscode · 2e8b995a · 2026-05-20
- 0.8ETVadd enable/disable ai features actions (#308988) * support disabling AI features at workspace level * add enable/disable ai features actionsgithub.com-microsoft-vscode · 17c0b4f6 · 2026-04-10
- 0.8ETVAgents welcome: theme selection step (#313333) * agents welcome: add theme selection step after sign-in After signing in (or for first-launch signed-in users after clicking Get Started), show a theme selection step with 4 theme preview cards (Dark 2026, Dark HC, Light 2026, Light HC). Theme is applied live on card click. Continue button dismisses the overlay. External sign-in via onDidChangeDefaultAccount now transitions to the theme step instead of auto-completing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * agents welcome: theme importer restructure and environment improvements - Rename vsCodeThemeImporter folder to vscode, merge interface and service - Rename hostExtensionsPath to hostExtensionsHome returning URI - Move host environment paths to common environmentService Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · 6cacf81c · 2026-04-30
- 0.8ETVsessions: add multi-chat support to Copilot provider (#preview) (#307258) * sessions: add multi-chat support to Copilot provider (#preview) Add support for multiple chats within a single session in the Copilot Chat sessions provider, gated behind the preview setting `sessions.github.copilot.multiChatSessions`. Key changes: - Integrate SessionsGroupModel into CopilotChatSessionsProvider for chat-to-session grouping with storage persistence - Add _sendSubsequentChat() for creating new chats in existing sessions with workspace isolation mode - _chatToSession() builds multi-chat observable from group model with aggregated status, updatedAt, isRead, lastTurnEnd across all chats - Session title and properties always come from the primary (first) chat - getSessions() deduplicates by group ID when multi-chat is enabled - deleteSession() removes all chats in the group - deleteChat() removes individual chats; delegates to deleteSession when only one chat remains - _refreshSessionCacheMultiChat() handles removed chats that belong to groups with siblings as changed events on the parent session - Management service tracks active chat via autorun on chats observable - All multi-chat code paths fall back to single-chat behavior when the setting is disabled - Comprehensive unit tests for the provider * address feedbackgithub.com-microsoft-vscode · c3ae78ec · 2026-04-01
- 0.7ETVfix deleting/renaming multi chat sessions (#310174) * fix deleting multi chat sessions * fix multi chat session issues * fix testsgithub.com-microsoft-vscode · 5ba065d9 · 2026-04-15
- 0.7ETVsessions: persist layout state per session and across reloads (#315696) * sessions: persist layout state per session and across reloads - Consolidate layoutController and workingSet into a unified sessionLayoutController that manages per-session view state (auxiliary bar visibility, active view container) and editor working sets, persisted to storage - Restore auxiliary bar, sidebar, and editor part visibility across window reloads via workbench-level storage (workbench.sessions.partVisibility) - Remove the old layout.contribution and workingSet.contribution modules that are superseded by sessionLayoutController Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * fix tests --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>github.com-microsoft-vscode · e6142fae · 2026-05-11