When working on the Agent Sessions workbench layout, always follow these guidelines:
- Read the Specification First
The authoritative specification for the Agent Sessions layout lives at:
src/vs/sessions/LAYOUT.md
Before making any changes to the layout code, read and understand the current spec. It defines:
-
The fixed layout structure (grid tree, part positions, default sizes)
-
Which parts are included/excluded and their visibility defaults
-
Titlebar configuration and custom menu IDs
-
Editor modal overlay behavior and sizing
-
Part visibility API and events
-
Agent session part classes and storage keys
-
Workbench contributions and lifecycle
-
CSS classes and file structure
- Keep the Spec in Sync
If you modify the layout implementation, you must update LAYOUT.md to reflect those changes. The spec should always match the code. This includes:
-
Adding/removing parts or changing their positions
-
Changing default visibility or sizing
-
Adding new actions, menus, or contributions
-
Modifying the grid structure
-
Changing titlebar configuration
-
Adding new CSS classes or file structure changes
Update the Revision History table at the bottom of LAYOUT.md with a dated entry describing what changed.
- Implementation Principles
When proposing or implementing changes, follow these rules from the spec:
-
Maintain fixed positions — Do not add settings-based position customization
-
Panel must span the right section width — The grid structure places the panel below Chat Bar and Auxiliary Bar only
-
Sidebar spans full height — Sidebar is in the main content branch, spanning from top to bottom
-
New parts go in the right section — Any new parts should be added to the horizontal branch alongside Chat Bar and Auxiliary Bar
-
Preserve no-op methods — Unsupported features (zen mode, centered layout, etc.) should remain as no-ops, not throw errors
-
Handle pane composite lifecycle — When hiding/showing parts, manage the associated pane composites
-
Use agent session parts — New part functionality goes in the agent session part classes (SidebarPart , AuxiliaryBarPart , PanelPart , ChatBarPart , ProjectBarPart ), not the standard workbench parts
-
Use separate storage keys — Agent session parts use their own storage keys (prefixed with workbench.agentsession. or workbench.chatbar. ) to avoid conflicts with regular workbench state
-
Use agent session menu IDs — Actions should use Menus.* menu IDs (from sessions/browser/menus.ts ), not shared MenuId.* constants
- Key Files
File Purpose
sessions/LAYOUT.md
Authoritative layout specification
sessions/browser/workbench.ts
Main layout implementation (Workbench class)
sessions/browser/menus.ts
Agent sessions menu IDs (Menus export)
sessions/browser/layoutActions.ts
Layout actions (toggle sidebar, panel, secondary sidebar)
sessions/browser/paneCompositePartService.ts
AgenticPaneCompositePartService
sessions/browser/media/style.css
Layout-specific styles
sessions/browser/parts/parts.ts
AgenticParts enum
sessions/browser/parts/titlebarPart.ts
Titlebar part, MainTitlebarPart, AuxiliaryTitlebarPart, TitleService
sessions/browser/parts/sidebarPart.ts
Sidebar part (with footer and macOS traffic light spacer)
sessions/browser/parts/chatBarPart.ts
Chat Bar part
sessions/browser/parts/auxiliaryBarPart.ts
Auxiliary Bar part (with run script dropdown)
sessions/browser/parts/panelPart.ts
Panel part
sessions/browser/parts/projectBarPart.ts
Project Bar part (folder entries, icon customization)
sessions/contrib/configuration/browser/configuration.contribution.ts
Sets workbench.editor.useModal to 'all' for modal editor overlay
sessions/contrib/sessions/browser/sessionsTitleBarWidget.ts
Title bar widget and session picker
sessions/contrib/chat/browser/runScriptAction.ts
Run script split button for titlebar
sessions/contrib/accountMenu/browser/account.contribution.ts
Account widget for sidebar footer
sessions/electron-browser/parts/titlebarPart.ts
Desktop (Electron) titlebar part
- Testing Changes
After modifying layout code:
-
Verify the build compiles without errors via the VS Code - Build task
-
Ensure the grid structure matches the spec's visual representation
-
Confirm part visibility toggling works correctly (show/hide/maximize)
-
Test that editors open in the ModalEditorPart overlay and that it closes properly
-
Verify sidebar footer renders with account widget