Agents: Add experimental tabbed workspace picker#312773
Agents: Add experimental tabbed workspace picker#312773mrleemurray wants to merge 11 commits intomainfrom
Conversation
…e actions Co-authored-by: Copilot <copilot@github.com>
…ection descriptions
… and auto-tab behavior
…l services and reset user tab selection on workspace change
… active tab during session
There was a problem hiding this comment.
Pull request overview
Introduces an experimental tabbed workspace picker for the Sessions window’s “new session” flow, enabling users to choose workspaces via separate Local/GitHub/Remote tabs and related UI enhancements behind a new configuration setting.
Changes:
- Add
sessions.experimental.tabbedWorkspacePickersetting and wire it into the Sessions window new chat view. - Implement
TabbedWorkspacePickerwith tab UI, category-based filtering, and inline browse actions. - Extend the action widget/action list to support an optional header element and a max-width cap used by the picker.
Reviewed changes
Copilot reviewed 9 out of 9 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| src/vs/sessions/contrib/copilotChatSessions/browser/copilotChatSessionsProvider.ts | Assign browse action grouping/icon updates to support tab categorization (e.g. repositories). |
| src/vs/sessions/contrib/configuration/browser/configuration.contribution.ts | Register the new experimental setting for enabling the tabbed picker. |
| src/vs/sessions/contrib/chat/browser/tabbedWorkspacePicker.ts | New tabbed picker implementation (tabs + workspace/browse-action categorization). |
| src/vs/sessions/contrib/chat/browser/sessionWorkspacePicker.ts | Add extensibility hooks (header/min/max width) and filtering logic used by the tabbed picker. |
| src/vs/sessions/contrib/chat/browser/newChatViewPane.ts | Select the appropriate picker implementation based on platform and the new setting. |
| src/vs/sessions/contrib/chat/browser/media/chatWidget.css | Styles for the tab bar and inline browse-action rows. |
| src/vs/sessions/common/configuration.ts | Define the new setting ID constant. |
| src/vs/platform/actionWidget/browser/actionWidget.ts | Allow callers to pass an optional header element rendered above the action list/filter. |
| src/vs/platform/actionWidget/browser/actionList.ts | Add maxWidth option and clamp computed list width accordingly. |
Comments suppressed due to low confidence (1)
src/vs/sessions/contrib/chat/browser/sessionWorkspacePicker.ts:564
- Ungrouped browse actions are now rendered without
description: action.description, soISessionWorkspaceBrowseAction.descriptionis effectively ignored in this path despite being intended for display in the workspace picker. Consider restoring the description here (or only suppressing it in the specific tabbed/inline UI variant).
items.push({
kind: ActionListItemKind.Action,
label: localize('workspacePicker.browseSelectAction', "Select {0}...", action.label),
group: { title: '', icon: action.icon },
disabled: isUnavailable,
item: { browseActionIndex: index },
});
blocks-ci screenshots changedReplace the contents of Updated blocks-ci-screenshots.md<!-- auto-generated by CI — do not edit manually -->
#### editor/codeEditor/CodeEditor/Dark

#### editor/codeEditor/CodeEditor/Light

#### editor/inlineChatZoneWidget/InlineChatZoneWidget/Dark

#### editor/inlineChatZoneWidget/InlineChatZoneWidget/Light

#### editor/inlineChatZoneWidget/InlineChatZoneWidgetTerminated/Dark

#### editor/inlineChatZoneWidget/InlineChatZoneWidgetTerminated/Light
 |
|
A few architecture concerns: 1. Avoid extending The tab bar UI is specific to the session workspace picker — 2. No need for a new setting If grouped workspace picker is the right UX direction, it should just be the behavior — no need for 3. Groups should be provider-contributable, not hardcoded The Local / GitHub / Remote grouping is currently hardcoded in Instead, the groups should come from the providers themselves. One approach: extend |
…workspace picker action
…ization - Updated IActionWidgetService to include an onPopupRendered callback for improved rendering control. - Modified ActionWidgetService to handle the new onPopupRendered parameter in show method. - Added category property to IAgentHostSessionWorkspaceOptions for workspace categorization. - Updated buildAgentHostSessionWorkspace to utilize the new category property. - Enhanced LocalAgentHostSessionsProvider to categorize workspaces as 'local'. - Updated CopilotChatSessionsProvider to categorize workspaces as 'local' or 'cloud' based on their source. - Enhanced RemoteAgentHostSessionsProvider to categorize workspaces as 'remote'. - Introduced SessionWorkspaceCategory type to standardize workspace categorization across providers. - Removed the experimental tabbed workspace picker as it is no longer needed. - Updated WorkspacePicker to support tabbed navigation based on workspace categories (local, cloud, remote). Co-authored-by: Copilot <copilot@github.com>
|
@sandy081 I've made some updates - please review |
This pull request introduces a new experimental "Tabbed Workspace Picker" feature for the chat session workspace picker, along with several extensibility and usability improvements to the action widget infrastructure. The main changes include support for rendering a custom header (such as a tab bar) above the action list, new options for constraining the action widget's width, and extensibility hooks in the workspace picker to support filtering and custom layouts. There are also related styling updates and configuration wiring for the new tabbed picker.
Screen.Recording.2026-04-27.at.14.41.36.mov
Tabbed Workspace Picker and Extensibility:
sessions.experimental.tabbedWorkspacePickerand implemented theTabbedWorkspacePickerclass, enabling a tabbed interface for selecting workspaces in chat sessions. The picker is conditionally enabled based on the configuration setting. [1] [2] [3]WorkspacePickerto support subclassing, including extensibility hooks for filtering workspaces and browse actions, customizing the header, and controlling minimum/maximum width. [1] [2] [3] [4] [5]Action Widget Infrastructure Improvements:
maxWidthtoIActionListOptions, and updated the action list widget to clamp its width betweenminWidthandmaxWidth, ensuring long items are truncated rather than expanding the popup. [1] [2] [3] [4] [5]Styling Updates:
These changes collectively enable a more flexible and user-friendly workspace picker experience, laying the groundwork for further UI enhancements and customization.