diff --git a/.agents/skills/launch/SKILL.md b/.agents/skills/launch/SKILL.md index 20f207907ac..2b564d812bb 100644 --- a/.agents/skills/launch/SKILL.md +++ b/.agents/skills/launch/SKILL.md @@ -111,19 +111,19 @@ agent-browser snapshot -i - Code OSS uses the default user data directory. Unlike VS Code Insiders, you don't typically need `--user-data-dir` since there's usually only one Code OSS instance running. - If you see "Sent env to running instance. Terminating..." it means Code OSS is already running and forwarded your args to the existing instance. Quit Code OSS and relaunch with the flag, or use `--user-data-dir=/tmp/code-oss-debug` to force a new instance. -## Launching the Sessions App (Agent Sessions Window) +## Launching the Agents App (Agents Window) -The Sessions app is a separate workbench mode launched with the `--sessions` flag. It uses a dedicated user data directory to avoid conflicts with the main Code OSS instance. +The Agents app is a separate workbench mode launched with the `--agents` flag. It uses a dedicated user data directory to avoid conflicts with the main Code OSS instance. ```bash cd # the root of your VS Code checkout -./scripts/code.sh --sessions --remote-debugging-port=9224 +./scripts/code.sh --agents --remote-debugging-port=9224 ``` Wait for the window to fully initialize, then connect: ```bash -# Wait for Sessions app to start, retry until connected +# Wait for Agents app to start, retry until connected for i in 1 2 3 4 5; do agent-browser connect 9224 2>/dev/null && break || sleep 3; done # Verify you're connected to the right target (not about:blank) @@ -132,7 +132,7 @@ agent-browser snapshot -i ``` **Tips:** -- The `--sessions` flag launches the Agent Sessions workbench instead of the standard VS Code workbench. +- The `--agents` flag launches the Agents workbench instead of the standard VS Code workbench. - Set `VSCODE_SKIP_PRELAUNCH=1` to skip the compile step if you've already built. ## Launching VS Code Extensions for Debugging diff --git a/.github/agents/sessions.md b/.github/agents/sessions.md index 1bd1d3986c3..19bd7cb3c18 100644 --- a/.github/agents/sessions.md +++ b/.github/agents/sessions.md @@ -1,15 +1,15 @@ --- -name: Sessions Window Developer -description: Specialist in developing the Agent Sessions Window +name: Agents Window Developer +description: Specialist in developing the Agents Window --- # Role and Objective -You are a developer working on the 'sessions window'. Your goal is to make changes to the sessions window (`src/vs/sessions`), minimally editing outside of that directory. +You are a developer working on the 'agents window'. Your goal is to make changes to the agents window (`src/vs/sessions`), minimally editing outside of that directory. # Instructions 1. **Always read the `sessions` skill first.** This is your primary source of truth for the sessions architecture. - Invoke `skill: "sessions"`. 2. Focus your work on `src/vs/sessions/`. -3. Avoid making changes to core VS Code files (`src/vs/workbench/`, `src/vs/platform/`, etc.) unless absolutely necessary for the sessions window functionality. +3. Avoid making changes to core VS Code files (`src/vs/workbench/`, `src/vs/platform/`, etc.) unless absolutely necessary for the agents window functionality. diff --git a/.github/instructions/sessions.instructions.md b/.github/instructions/sessions.instructions.md index dc3f187e96c..ef9dd0066c7 100644 --- a/.github/instructions/sessions.instructions.md +++ b/.github/instructions/sessions.instructions.md @@ -1,11 +1,11 @@ --- -description: Architecture documentation for the Agent Sessions window — a sessions-first app built as a new top-level layer alongside vs/workbench. Covers layout, parts, chat widget, contributions, entry points, and development guidelines. Use when working in `src/vs/sessions` +description: Architecture documentation for the Agents window — an agents-first app built as a new top-level layer alongside vs/workbench. Covers layout, parts, chat widget, contributions, entry points, and development guidelines. Use when working in `src/vs/sessions` applyTo: src/vs/sessions/** --- -# Agent Sessions Window +# Agents Window -The Agent Sessions window is a **standalone application** built as a new top-level layer (`vs/sessions`) in the VS Code architecture. It provides a sessions-first experience optimized for agent workflows — a simplified, fixed-layout workbench where chat is the primary interaction surface and editors appear as modal overlays. +The Agents window is a **standalone application** built as a new top-level layer (`vs/sessions`) in the VS Code architecture. It provides an agents-first experience optimized for agent workflows — a simplified, fixed-layout workbench where chat is the primary interaction surface and editors appear as modal overlays. When working on files under `src/vs/sessions/`, use these skills for detailed guidance: diff --git a/.github/skills/agent-sessions-layout/SKILL.md b/.github/skills/agent-sessions-layout/SKILL.md index af4f03a3f60..c9bd30c5824 100644 --- a/.github/skills/agent-sessions-layout/SKILL.md +++ b/.github/skills/agent-sessions-layout/SKILL.md @@ -1,13 +1,13 @@ --- name: agent-sessions-layout -description: Agent Sessions workbench layout — covers the fixed layout structure, grid configuration, part visibility, editor modal, titlebar, sidebar footer, and implementation requirements. Use when implementing features or fixing issues in the Agent Sessions workbench layout. +description: Agents workbench layout — covers the fixed layout structure, grid configuration, part visibility, editor modal, titlebar, sidebar footer, and implementation requirements. Use when implementing features or fixing issues in the Agents workbench layout. --- -When working on the Agent Sessions workbench layout, always follow these guidelines: +When working on the Agents workbench layout, always follow these guidelines: ## 1. Read the Specification First -The authoritative specification for the Agent Sessions layout lives at: +The authoritative specification for the Agents layout lives at: **`src/vs/sessions/LAYOUT.md`** @@ -55,7 +55,7 @@ When proposing or implementing changes, follow these rules from the spec: |------|---------| | `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/menus.ts` | Agents 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 | @@ -67,7 +67,7 @@ When proposing or implementing changes, follow these rules from the spec: | `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/sessions/browser/sessionsTitleBarWidget.ts` | Title bar widget and agent 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 | diff --git a/.github/skills/sessions/SKILL.md b/.github/skills/sessions/SKILL.md index e39957e5f66..87669ba6a19 100644 --- a/.github/skills/sessions/SKILL.md +++ b/.github/skills/sessions/SKILL.md @@ -1,9 +1,9 @@ --- name: sessions -description: Agent Sessions window architecture — covers the sessions-first app, layering, folder structure, chat widget, menus, contributions, entry points, and development guidelines. Use when implementing features or fixing issues in the Agent Sessions window. +description: Agents window architecture — covers the agents-first app, layering, folder structure, chat widget, menus, contributions, entry points, and development guidelines. Use when implementing features or fixing issues in the Agents window. --- -When working on the Agent Sessions window (`src/vs/sessions/`), always follow these guidelines: +When working on the Agents window (`src/vs/sessions/`), always follow these guidelines: ## 1. Read the Specification Documents First @@ -41,13 +41,13 @@ vs/sessions ← Agent Sessions window (this layer) ### 2.3 How It Differs from VS Code -| Aspect | VS Code Workbench | Agent Sessions Window | +| Aspect | VS Code Workbench | Agents Window | |--------|-------------------|----------------------| | Layout | Configurable part positions | Fixed layout, no settings customization | | Chrome | Activity bar, status bar, banner | Simplified — none of these | | Primary UX | Editor-centric | Chat-first (Chat Bar is a primary part) | | Editors | In the grid layout | Modal overlay above the workbench | -| Titlebar | Menubar, editor actions, layout controls | Session picker, run script, toggle sidebar/panel | +| Titlebar | Menubar, editor actions, layout controls | Agent picker, run script, toggle sidebar/panel | | Navigation | Activity bar with viewlets | Sidebar (views) + sidebar footer (account) | | Entry point | `vs/workbench` workbench class | `vs/sessions/browser/workbench.ts` `Workbench` class | @@ -154,7 +154,7 @@ The main editor part is hidden (`display:none`). All editors open via `MODAL_GRO ## 5. Chat Widget -The Agent Sessions chat experience is built around `AgentSessionsChatWidget` — a wrapper around the core `ChatWidget` that adds: +The Agents chat experience is built around `AgentSessionsChatWidget` — a wrapper around the core `ChatWidget` that adds: - **Deferred session creation** — the UI is interactive before any session resource exists; sessions are created on first message send - **Target configuration** — observable state tracking which agent provider (Local, Cloud) is selected @@ -172,17 +172,17 @@ Read `browser/widget/AGENTS_CHAT_WIDGET.md` for the full architecture. ## 6. Menus -The agent sessions window uses **its own menu IDs** defined in `browser/menus.ts` via the `Menus` export. **Never use shared `MenuId.*` constants** from `vs/platform/actions` for agent sessions UI — use the `Menus.*` equivalents instead. +The agents window uses **its own menu IDs** defined in `browser/menus.ts` via the `Menus` export. **Never use shared `MenuId.*` constants** from `vs/platform/actions` for agents window UI — use the `Menus.*` equivalents instead. | Menu ID | Purpose | |---------|---------| | `Menus.ChatBarTitle` | Chat bar title actions | -| `Menus.CommandCenter` | Center toolbar with session picker widget | +| `Menus.CommandCenter` | Center toolbar with agent picker widget | | `Menus.CommandCenterCenter` | Center section of command center | | `Menus.TitleBarContext` | Titlebar context menu | | `Menus.TitleBarLeftLayout` | Left layout toolbar | -| `Menus.TitleBarSessionTitle` | Session title in titlebar | -| `Menus.TitleBarSessionMenu` | Session menu in titlebar | +| `Menus.TitleBarSessionTitle` | Agent title in titlebar | +| `Menus.TitleBarSessionMenu` | Agent menu in titlebar | | `Menus.TitleBarRightLayout` | Right layout toolbar | | `Menus.PanelTitle` | Panel title bar actions | | `Menus.SidebarTitle` | Sidebar title bar actions | @@ -201,7 +201,7 @@ Defined in `common/contextkeys.ts`: | `activeChatBar` | `string` | ID of the active chat bar panel | | `chatBarFocus` | `boolean` | Whether chat bar has keyboard focus | | `chatBarVisible` | `boolean` | Whether chat bar is visible | -| `sessionsWelcomeVisible` | `boolean` | Whether the sessions welcome overlay is visible | +| `sessionsWelcomeVisible` | `boolean` | Whether the agents welcome overlay is visible | ## 8. Contributions Feature contributions live under `contrib//browser/` and are registered via imports in `sessions.desktop.main.ts` (desktop) or `sessions.common.main.ts` (browser-compatible). @@ -210,8 +210,8 @@ Feature contributions live under `contrib//browser/` and are regist | Contribution | Location | Purpose | |-------------|----------|---------| -| **Sessions View** | `contrib/sessions/browser/` | Sessions list in sidebar, session picker, active session service | -| **Title Bar Widget** | `contrib/sessions/browser/sessionsTitleBarWidget.ts` | Session picker in titlebar center | +| **Sessions View** | `contrib/sessions/browser/` | Agents list in sidebar, agent picker, active session service | +| **Title Bar Widget** | `contrib/sessions/browser/sessionsTitleBarWidget.ts` | Agent picker in titlebar center | | **Account Widget** | `contrib/accountMenu/browser/` | Account button in sidebar footer | | **Chat Actions** | `contrib/chat/browser/` | Chat actions (run script, branch, prompts, customizations debug log) | | **Changes View** | `contrib/changesView/browser/` | File changes in auxiliary bar | @@ -229,7 +229,7 @@ Feature contributions live under `contrib//browser/` and are regist ### 8.2 Service Overrides -The agent sessions window registers its own implementations for: +The agents window registers its own implementations for: - `IPaneCompositePartService` → `AgenticPaneCompositePartService` (creates agent-specific parts) - `IPromptsService` → `AgenticPromptsService` (scopes prompt discovery to active session worktree) @@ -241,7 +241,7 @@ Service overrides also live under `services/`: ### 8.3 `WindowVisibility.Sessions` -Views and contributions that should only appear in the agent sessions window (not in regular VS Code) use `WindowVisibility.Sessions` in their registration. +Views and contributions that should only appear in the agents window (not in regular VS Code) use `WindowVisibility.Sessions` in their registration. ## 9. Entry Points diff --git a/.vscode/launch.json b/.vscode/launch.json index 24c1abde456..9ad9ef5e1c4 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -316,7 +316,7 @@ // for general runtime freezes: https://github.com/microsoft/vscode/issues/127861#issuecomment-904144910 "--disable-features=CalculateNativeWinOcclusion", "--disable-extension=vscode.vscode-api-tests", - "--sessions" + "--agents" ], "userDataDir": "${userHome}/.vscode-oss-sessions-dev", "webRoot": "${workspaceFolder}", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e0b2a048d9a..2748b2d1216 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -235,7 +235,7 @@ "command": ".\\scripts\\code.bat" }, "args": [ - "--sessions", + "--agents", "--user-data-dir=${userHome}/.vscode-oss-sessions-dev", "--extensions-dir=${userHome}/.vscode-oss-sessions-dev/extensions" ], diff --git a/src/vs/code/electron-main/app.ts b/src/vs/code/electron-main/app.ts index d0f85d850bd..7ea93f3824d 100644 --- a/src/vs/code/electron-main/app.ts +++ b/src/vs/code/electron-main/app.ts @@ -412,8 +412,8 @@ export class CodeApplication extends Disposable { // Mac only event: open new window when we get activated if (!hasVisibleWindows) { - if ((process as INodeProcess).isEmbeddedApp || (this.environmentMainService.args['sessions'] && this.productService.quality !== 'stable')) { - await this.windowsMainService?.openSessionsWindow({ context: OpenContext.DOCK }); + if ((process as INodeProcess).isEmbeddedApp || (this.environmentMainService.args['agents'] && this.productService.quality !== 'stable')) { + await this.windowsMainService?.openAgentsWindow({ context: OpenContext.DOCK }); } else { await this.windowsMainService?.openEmptyWindow({ context: OpenContext.DOCK }); } @@ -753,9 +753,9 @@ export class CodeApplication extends Disposable { const windowOpenable = this.getWindowOpenableFromProtocolUrl(protocolUrl.uri); if (windowOpenable) { - // Sessions app: skip all window openables (file/folder/workspace) + // Agents app: skip all window openables (file/folder/workspace) if ((process as INodeProcess).isEmbeddedApp) { - this.logService.trace('app#resolveInitialProtocolUrls() sessions app skipping window openable:', protocolUrl.uri.toString(true)); + this.logService.trace('app#resolveInitialProtocolUrls() agents app skipping window openable:', protocolUrl.uri.toString(true)); continue; } @@ -904,19 +904,19 @@ export class CodeApplication extends Disposable { private async handleProtocolUrl(windowsMainService: IWindowsMainService, dialogMainService: IDialogMainService, urlService: IURLService, uri: URI, options?: IOpenURLOptions): Promise { this.logService.trace('app#handleProtocolUrl():', uri.toString(true), options); - // Sessions app: ensure the sessions window is open, then let other handlers process the URL. + // Agents app: ensure the agents window is open, then let other handlers process the URL. if ((process as INodeProcess).isEmbeddedApp) { - this.logService.trace('app#handleProtocolUrl() sessions app handling protocol URL:', uri.toString(true)); + this.logService.trace('app#handleProtocolUrl() agents app handling protocol URL:', uri.toString(true)); // Skip window openables (file/folder/workspace) for security const windowOpenable = this.getWindowOpenableFromProtocolUrl(uri); if (windowOpenable) { - this.logService.trace('app#handleProtocolUrl() sessions app skipping window openable:', uri.toString(true)); + this.logService.trace('app#handleProtocolUrl() agents app skipping window openable:', uri.toString(true)); return true; } - // Ensure sessions window is open to receive the URL - const windows = await windowsMainService.openSessionsWindow({ context: OpenContext.LINK, contextWindowId: undefined }); + // Ensure agents window is open to receive the URL + const windows = await windowsMainService.openAgentsWindow({ context: OpenContext.LINK, contextWindowId: undefined }); const window = windows.at(0); window?.focus(); await window?.ready(); @@ -1358,9 +1358,9 @@ export class CodeApplication extends Disposable { const context = isLaunchedFromCli(process.env) ? OpenContext.CLI : OpenContext.DESKTOP; const args = this.environmentMainService.args; - // Handle sessions window first based on context - if ((process as INodeProcess).isEmbeddedApp || (args['sessions'] && this.productService.quality !== 'stable')) { - return windowsMainService.openSessionsWindow({ context, contextWindowId: undefined }); + // Handle agents window first based on context + if ((process as INodeProcess).isEmbeddedApp || (args['agents'] && this.productService.quality !== 'stable')) { + return windowsMainService.openAgentsWindow({ context, contextWindowId: undefined }); } // Then check for windows from protocol links to open diff --git a/src/vs/code/node/cli.ts b/src/vs/code/node/cli.ts index 5f50659ff46..d3a89db8cb0 100644 --- a/src/vs/code/node/cli.ts +++ b/src/vs/code/node/cli.ts @@ -500,9 +500,9 @@ export async function main(argv: string[]): Promise { // focusing issues when the new instance only sends data to a previous instance and then closes. const spawnArgs = ['-n', '-g']; - // Figure out the app to launch: with --sessions we try to launch the embedded app + // Figure out the app to launch: with --agents we try to launch the embedded app let appToLaunch = process.execPath; - if (args.sessions) { + if (args.agents) { // process.execPath is e.g. /Applications/Code.app/Contents/MacOS/Electron // Embedded app is at /Applications/Code.app/Contents/Applications/.app const contentsPath = dirname(dirname(process.execPath)); @@ -512,7 +512,7 @@ export async function main(argv: string[]): Promise { const embeddedApp = files.find(file => file.endsWith('.app')); if (embeddedApp) { appToLaunch = join(applicationsPath, embeddedApp); - argv = argv.filter(arg => arg !== '--sessions'); + argv = argv.filter(arg => arg !== '--agents'); } } catch (error) { /* may not exist on disk */ diff --git a/src/vs/platform/agentHost/test/node/testRemoteAgentHost.sh b/src/vs/platform/agentHost/test/node/testRemoteAgentHost.sh index c56157e3540..e6808f7e96f 100755 --- a/src/vs/platform/agentHost/test/node/testRemoteAgentHost.sh +++ b/src/vs/platform/agentHost/test/node/testRemoteAgentHost.sh @@ -221,7 +221,7 @@ echo "=== Step 3: Launching Sessions app ===" >&2 cd "$ROOT" # Unset ELECTRON_RUN_AS_NODE to ensure the app launches as Electron, not Node. VSCODE_SKIP_PRELAUNCH=1 ELECTRON_RUN_AS_NODE= ./scripts/code.sh \ - --sessions \ + --agents \ --skip-sessions-welcome \ --remote-debugging-port="$CDP_PORT" \ --user-data-dir="$USERDATA_DIR" \ diff --git a/src/vs/platform/environment/common/argv.ts b/src/vs/platform/environment/common/argv.ts index b391d4e6a91..69d15c95307 100644 --- a/src/vs/platform/environment/common/argv.ts +++ b/src/vs/platform/environment/common/argv.ts @@ -54,7 +54,7 @@ export interface NativeParsedArgs { goto?: boolean; 'new-window'?: boolean; 'reuse-window'?: boolean; - 'sessions'?: boolean; + 'agents'?: boolean; locale?: string; 'user-data-dir'?: string; 'prof-startup'?: boolean; diff --git a/src/vs/platform/environment/node/argv.ts b/src/vs/platform/environment/node/argv.ts index dcb2b33a1f2..0a78893bfc1 100644 --- a/src/vs/platform/environment/node/argv.ts +++ b/src/vs/platform/environment/node/argv.ts @@ -108,7 +108,7 @@ export const OPTIONS: OptionDescriptions> = { 'goto': { type: 'boolean', cat: 'o', alias: 'g', args: 'file:line[:character]', description: localize('goto', "Open a file at the path on the specified line and character position.") }, 'new-window': { type: 'boolean', cat: 'o', alias: 'n', description: localize('newWindow', "Force to open a new window.") }, 'reuse-window': { type: 'boolean', cat: 'o', alias: 'r', description: localize('reuseWindow', "Force to open a file or folder in an already opened window.") }, - 'sessions': { type: 'boolean', cat: 'o', description: localize('sessions', "Opens the sessions window.") }, + 'agents': { type: 'boolean', cat: 'o', deprecates: ['sessions'], description: localize('agents', "Opens the agents window.") }, 'wait': { type: 'boolean', cat: 'o', alias: 'w', description: localize('wait', "Wait for the files to be closed before returning.") }, 'waitMarkerFilePath': { type: 'string' }, 'locale': { type: 'string', cat: 'o', args: 'locale', description: localize('locale', "The locale to use (e.g. en-US or zh-TW).") }, diff --git a/src/vs/platform/launch/electron-main/launchMainService.ts b/src/vs/platform/launch/electron-main/launchMainService.ts index 274600742e4..bce49e9de48 100644 --- a/src/vs/platform/launch/electron-main/launchMainService.ts +++ b/src/vs/platform/launch/electron-main/launchMainService.ts @@ -145,9 +145,9 @@ export class LaunchMainService implements ILaunchMainService { await this.windowsMainService.openExtensionDevelopmentHostWindow(args.extensionDevelopmentPath, baseConfig); } - // Sessions window - else if (args['sessions'] && this.productService.quality !== 'stable') { - usedWindows = await this.windowsMainService.openSessionsWindow({ context, contextWindowId: undefined }); + // Agents window + else if (args['agents'] && this.productService.quality !== 'stable') { + usedWindows = await this.windowsMainService.openAgentsWindow({ context, contextWindowId: undefined }); } // Start without file/folder arguments diff --git a/src/vs/platform/native/common/native.ts b/src/vs/platform/native/common/native.ts index aa73a7c63c4..dbcd0f1dfd1 100644 --- a/src/vs/platform/native/common/native.ts +++ b/src/vs/platform/native/common/native.ts @@ -129,7 +129,7 @@ export interface ICommonNativeHostService { openWindow(options?: IOpenEmptyWindowOptions): Promise; openWindow(toOpen: IWindowOpenable[], options?: IOpenWindowOptions): Promise; - openSessionsWindow(): Promise; + openAgentsWindow(): Promise; isFullScreen(options?: INativeHostOptions): Promise; toggleFullScreen(options?: INativeHostOptions): Promise; diff --git a/src/vs/platform/native/electron-main/nativeHostMainService.ts b/src/vs/platform/native/electron-main/nativeHostMainService.ts index 3edc2ef195d..22cdfbe2fa4 100644 --- a/src/vs/platform/native/electron-main/nativeHostMainService.ts +++ b/src/vs/platform/native/electron-main/nativeHostMainService.ts @@ -304,8 +304,8 @@ export class NativeHostMainService extends Disposable implements INativeHostMain }, options); } - async openSessionsWindow(windowId: number | undefined): Promise { - await this.windowsMainService.openSessionsWindow({ + async openAgentsWindow(windowId: number | undefined): Promise { + await this.windowsMainService.openAgentsWindow({ context: OpenContext.API, contextWindowId: windowId, }); diff --git a/src/vs/platform/windows/electron-main/windows.ts b/src/vs/platform/windows/electron-main/windows.ts index 75bcee0c678..c4d37c7cc97 100644 --- a/src/vs/platform/windows/electron-main/windows.ts +++ b/src/vs/platform/windows/electron-main/windows.ts @@ -41,7 +41,7 @@ export interface IWindowsMainService { openExtensionDevelopmentHostWindow(extensionDevelopmentPath: string[], openConfig: IOpenConfiguration): Promise; openExistingWindow(window: ICodeWindow, openConfig: IOpenConfiguration): void; - openSessionsWindow(openConfig: IBaseOpenConfiguration): Promise; + openAgentsWindow(openConfig: IBaseOpenConfiguration): Promise; sendToFocused(channel: string, ...args: unknown[]): void; sendToOpeningWindow(channel: string, ...args: unknown[]): void; diff --git a/src/vs/platform/windows/electron-main/windowsMainService.ts b/src/vs/platform/windows/electron-main/windowsMainService.ts index ec4b29a101b..404a61a6736 100644 --- a/src/vs/platform/windows/electron-main/windowsMainService.ts +++ b/src/vs/platform/windows/electron-main/windowsMainService.ts @@ -292,12 +292,12 @@ export class WindowsMainService extends Disposable implements IWindowsMainServic this.handleChatRequest(openConfig, [window]); } - async openSessionsWindow(openConfig: IBaseOpenConfiguration): Promise { - this.logService.trace('windowsManager#openSessionsWindow'); + async openAgentsWindow(openConfig: IBaseOpenConfiguration): Promise { + this.logService.trace('windowsManager#openAgentsWindow'); const agentSessionsWorkspaceUri = this.environmentMainService.agentSessionsWorkspace; if (!agentSessionsWorkspaceUri) { - throw new Error('Sessions workspace is not configured'); + throw new Error('Agents workspace is not configured'); } // Ensure the workspace file exists diff --git a/src/vs/sessions/AI_CUSTOMIZATIONS.md b/src/vs/sessions/AI_CUSTOMIZATIONS.md index 2a7bddb5a7a..0edfdbbbf78 100644 --- a/src/vs/sessions/AI_CUSTOMIZATIONS.md +++ b/src/vs/sessions/AI_CUSTOMIZATIONS.md @@ -32,7 +32,7 @@ src/vs/workbench/contrib/chat/common/ └── customizationHarnessService.ts # ICustomizationHarnessService + ISectionOverride + helpers ``` -The tree view and overview live in `vs/sessions` (sessions window only): +The tree view and overview live in `vs/sessions` (agent sessions window only): ``` src/vs/sessions/contrib/aiCustomizationTreeView/browser/ @@ -61,7 +61,7 @@ src/vs/sessions/contrib/sessions/browser/ The `IAICustomizationWorkspaceService` interface controls per-window behavior: -| Property / Method | Core VS Code | Sessions Window | +| Property / Method | Core VS Code | Agent Sessions Window | |----------|-------------|----------| | `managementSections` | All sections except Models | All sections except Models | | `getStorageSourceFilter(type)` | Delegates to `ICustomizationHarnessService` | Delegates to `ICustomizationHarnessService` | diff --git a/src/vs/sessions/LAYOUT.md b/src/vs/sessions/LAYOUT.md index 65d9f05cb3e..494b6e0059b 100644 --- a/src/vs/sessions/LAYOUT.md +++ b/src/vs/sessions/LAYOUT.md @@ -199,7 +199,7 @@ When the setting is `'all'`: The setting `workbench.editor.useModal` is an enum with three values: - `'off'`: Editors never open in a modal overlay - `'some'`: Certain editors (e.g. Settings, Keyboard Shortcuts) may open in a modal overlay when requested via `MODAL_GROUP` -- `'all'`: All editors open in a modal overlay (used by sessions window) +- `'all'`: All editors open in a modal overlay (used by agent sessions window) --- diff --git a/src/vs/sessions/README.md b/src/vs/sessions/README.md index 9e8d73a6e36..5903e497d3a 100644 --- a/src/vs/sessions/README.md +++ b/src/vs/sessions/README.md @@ -114,7 +114,7 @@ See [LAYOUT.md](LAYOUT.md) for the detailed layout specification. ## Sessions Provider Architecture -The sessions window uses an extensible provider model to manage sessions. Instead of hardcoding session type logic (CLI, Cloud, Agent Host) throughout the codebase, all session behavior is encapsulated in **sessions providers** that register with a central registry. +The agent sessions window uses an extensible provider model to manage sessions. Instead of hardcoding session type logic (CLI, Cloud, Agent Host) throughout the codebase, all session behavior is encapsulated in **sessions providers** that register with a central registry. ### Overview Diagram diff --git a/src/vs/sessions/SESSIONS_PROVIDER.md b/src/vs/sessions/SESSIONS_PROVIDER.md index 1db3330f1ae..de8969d629c 100644 --- a/src/vs/sessions/SESSIONS_PROVIDER.md +++ b/src/vs/sessions/SESSIONS_PROVIDER.md @@ -2,7 +2,7 @@ ## Overview -The Sessions Provider architecture introduces an **extensible provider model** for managing agent sessions in the Sessions window. Instead of hardcoding session types and backends, multiple providers register with a central registry (`ISessionsProvidersService`), which aggregates sessions from all providers and routes actions to the correct one. +The Sessions Provider architecture introduces an **extensible provider model** for managing agent sessions in the Agent Sessions window. Instead of hardcoding session types and backends, multiple providers register with a central registry (`ISessionsProvidersService`), which aggregates sessions from all providers and routes actions to the correct one. This design allows new compute environments (remote agent hosts, cloud backends, third-party agents) to plug in without modifying core session management code. diff --git a/src/vs/sessions/browser/workbench.ts b/src/vs/sessions/browser/workbench.ts index 3ebbfbf7da0..291f1ac9789 100644 --- a/src/vs/sessions/browser/workbench.ts +++ b/src/vs/sessions/browser/workbench.ts @@ -896,7 +896,7 @@ export class Workbench extends Disposable implements IWorkbenchLayoutService { !this.partVisibility.panel ? LayoutClasses.PANEL_HIDDEN : undefined, !this.partVisibility.auxiliaryBar ? LayoutClasses.AUXILIARYBAR_HIDDEN : undefined, !this.partVisibility.chatBar ? LayoutClasses.CHATBAR_HIDDEN : undefined, - LayoutClasses.STATUSBAR_HIDDEN, // sessions window never has a status bar + LayoutClasses.STATUSBAR_HIDDEN, // agents window never has a status bar this.mainWindowFullscreen ? LayoutClasses.FULLSCREEN : undefined ]); } diff --git a/src/vs/sessions/common/categories.ts b/src/vs/sessions/common/categories.ts index 6b5ac08a433..4645c05dc61 100644 --- a/src/vs/sessions/common/categories.ts +++ b/src/vs/sessions/common/categories.ts @@ -6,5 +6,5 @@ import { localize2 } from '../../nls.js'; export const SessionsCategories = Object.freeze({ - Sessions: localize2('sessions', "Sessions"), + Sessions: localize2('agents', "Agents"), }); diff --git a/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts b/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts index c4d28d53385..70c8b3793e8 100644 --- a/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts +++ b/src/vs/sessions/contrib/accountMenu/browser/account.contribution.ts @@ -263,7 +263,7 @@ export class AccountWidget extends ActionViewItem { if (state.type === StateType.AvailableForDownload && state.canInstall === false) { const { confirmed } = await this.dialogService.confirm({ message: localize('updateFromVSCode.title', "Update from VS Code"), - detail: localize('updateFromVSCode.detail', "This will close the Sessions app and open VS Code so you can install the update.\n\nLaunch Sessions again after the update is complete."), + detail: localize('updateFromVSCode.detail', "This will close the Agents app and open VS Code so you can install the update.\n\nLaunch Agents again after the update is complete."), primaryButton: localize('updateFromVSCode.open', "Close and Open VS Code"), }); if (confirmed) { @@ -311,7 +311,7 @@ class AccountWidgetContribution extends Disposable implements IWorkbenchContribu constructor() { super({ id: sessionsAccountWidgetAction, - title: localize2('sessionsAccountWidget', 'Sessions Account'), + title: localize2('agentsAccountWidget', 'Agents Account'), menu: { id: Menus.SidebarFooter, group: 'navigation', diff --git a/src/vs/sessions/contrib/accountMenu/test/browser/accountWidget.fixture.ts b/src/vs/sessions/contrib/accountMenu/test/browser/accountWidget.fixture.ts index 293c26b7f91..53601b4d7de 100644 --- a/src/vs/sessions/contrib/accountMenu/test/browser/accountWidget.fixture.ts +++ b/src/vs/sessions/contrib/accountMenu/test/browser/accountWidget.fixture.ts @@ -80,7 +80,7 @@ function renderAccountWidget(ctx: ComponentFixtureContext, state: State, account additionalServices: registerWorkbenchServices, }); - const action = ctx.disposableStore.add(new Action('sessions.action.accountWidget', 'Sessions Account')); + const action = ctx.disposableStore.add(new Action('sessions.action.accountWidget', 'Agents Account')); const contextMenuService = instantiationService.get(IContextMenuService); const menuService = instantiationService.get(IMenuService); const contextKeyService = instantiationService.get(IContextKeyService); diff --git a/src/vs/sessions/contrib/chat/browser/promptsService.ts b/src/vs/sessions/contrib/chat/browser/promptsService.ts index b77212599ea..13e2ef24d76 100644 --- a/src/vs/sessions/contrib/chat/browser/promptsService.ts +++ b/src/vs/sessions/contrib/chat/browser/promptsService.ts @@ -25,7 +25,7 @@ import { IUserDataProfileService } from '../../../../workbench/services/userData import { IAICustomizationWorkspaceService } from '../../../../workbench/contrib/chat/common/aiCustomizationWorkspaceService.js'; import { IWorkspaceTrustManagementService } from '../../../../platform/workspace/common/workspaceTrust.js'; -/** URI root for built-in skills bundled with the Sessions app. */ +/** URI root for built-in skills bundled with the Agents app. */ export const BUILTIN_SKILLS_URI = FileAccess.asFileUri('vs/sessions/skills'); export class AgenticPromptsService extends PromptsService { diff --git a/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.ts b/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.ts index 08e4c451613..dd6a9f74779 100644 --- a/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.ts +++ b/src/vs/sessions/contrib/chat/browser/runScriptCustomTaskWidget.ts @@ -222,7 +222,7 @@ export class RunScriptCustomTaskWidget extends Disposable { private _getSubmitLabel(): string { if (this._isAddExistingTask) { - return localize('confirmAddToSessions', "Add to Sessions Window"); + return localize('confirmAddToAgents', "Add to Agents Window"); } if (!this._isExistingTask) { return localize('confirmAddTask', "Add Task"); diff --git a/src/vs/sessions/contrib/chat/common/builtinPromptsStorage.ts b/src/vs/sessions/contrib/chat/common/builtinPromptsStorage.ts index a4eb5afd410..d6b0fb72fd0 100644 --- a/src/vs/sessions/contrib/chat/common/builtinPromptsStorage.ts +++ b/src/vs/sessions/contrib/chat/common/builtinPromptsStorage.ts @@ -12,7 +12,7 @@ export type { AICustomizationPromptsStorage } from '../../../../workbench/contri export { BUILTIN_STORAGE } from '../../../../workbench/contrib/chat/common/aiCustomizationWorkspaceService.js'; /** - * Prompt path for built-in prompts bundled with the Sessions app. + * Prompt path for built-in prompts bundled with the Agents app. */ export interface IBuiltinPromptPath { readonly uri: URI; diff --git a/src/vs/sessions/contrib/welcome/browser/welcome.contribution.ts b/src/vs/sessions/contrib/welcome/browser/welcome.contribution.ts index bdf5cb8a0e4..cb73c3044e6 100644 --- a/src/vs/sessions/contrib/welcome/browser/welcome.contribution.ts +++ b/src/vs/sessions/contrib/welcome/browser/welcome.contribution.ts @@ -48,7 +48,7 @@ class SessionsWelcomeOverlay extends Disposable { this.overlay = append(container, $('.sessions-welcome-overlay')); this.overlay.setAttribute('role', 'dialog'); this.overlay.setAttribute('aria-modal', 'true'); - this.overlay.setAttribute('aria-label', localize('welcomeOverlay.aria', "Sign in to use Sessions")); + this.overlay.setAttribute('aria-label', localize('welcomeOverlay.aria', "Sign in to use Agents")); this._register(toDisposable(() => this.overlay.remove())); const card = append(this.overlay, $('.sessions-welcome-card')); @@ -57,7 +57,7 @@ class SessionsWelcomeOverlay extends Disposable { const header = append(card, $('.sessions-welcome-header')); const iconEl = append(header, $('span.sessions-welcome-icon')); iconEl.appendChild(renderIcon(Codicon.agent)); - append(header, $('h2', undefined, localize('welcomeTitle', "Sign in to use Sessions"))); + append(header, $('h2', undefined, localize('welcomeTitle', "Sign in to use Agents"))); append(header, $('p.sessions-welcome-subtitle', undefined, localize('welcomeSubtitle', "Agent-powered development"))); // Action area @@ -93,8 +93,8 @@ class SessionsWelcomeOverlay extends Disposable { const success = await this.commandService.executeCommand(CHAT_SETUP_SUPPORT_ANONYMOUS_ACTION_ID, { dialogIcon: Codicon.agent, dialogTitle: this.chatEntitlementService.anonymous ? - localize('sessions.startUsingSessions', "Start using Sessions") : - localize('sessions.signinRequired', "Sign in to use Sessions"), + localize('agents.startUsingAgents', "Start using Agents") : + localize('agents.signinRequired', "Sign in to use Agents"), }); if (success) { @@ -259,7 +259,7 @@ registerAction2(class extends Action2 { constructor() { super({ id: 'workbench.action.resetSessionsWelcome', - title: localize2('resetSessionsWelcome', "Reset Sessions Welcome"), + title: localize2('resetSessionsWelcome', "Reset Agents Welcome"), category: Categories.Developer, f1: true, }); diff --git a/src/vs/sessions/copilot-customizations-spec.md b/src/vs/sessions/copilot-customizations-spec.md index 2b392966180..4f92903ef7b 100644 --- a/src/vs/sessions/copilot-customizations-spec.md +++ b/src/vs/sessions/copilot-customizations-spec.md @@ -4,7 +4,7 @@ > > **Source:** `github/copilot-agent-runtime` codebase as of 2026-02-25. -> Some information has been removed by the human compiling this spec, scoping to what is deemed most relevant for the sessions window implementation. For the full details, see the source code (for maintainers likely checked out side-by-side). +> Some information has been removed by the human compiling this spec, scoping to what is deemed most relevant for the agent sessions window implementation. For the full details, see the source code (for maintainers likely checked out side-by-side). --- diff --git a/src/vs/workbench/common/contextkeys.ts b/src/vs/workbench/common/contextkeys.ts index f7e31e40bff..73e207b85d3 100644 --- a/src/vs/workbench/common/contextkeys.ts +++ b/src/vs/workbench/common/contextkeys.ts @@ -33,7 +33,7 @@ export const RemoteNameContext = new RawContextKey('remoteName', '', loc export const VirtualWorkspaceContext = new RawContextKey('virtualWorkspace', '', localize('virtualWorkspace', "The scheme of the current workspace is from a virtual file system or an empty string.")); export const TemporaryWorkspaceContext = new RawContextKey('temporaryWorkspace', false, localize('temporaryWorkspace', "The scheme of the current workspace is from a temporary file system.")); -export const IsSessionsWindowContext = new RawContextKey('isSessionsWindow', false, localize('isSessionsWindow', "Whether the current window is a sessions window.")); +export const IsSessionsWindowContext = new RawContextKey('isSessionsWindow', false, localize('isSessionsWindow', "Whether the current window is a agent sessions window.")); export const HasWebFileSystemAccess = new RawContextKey('hasWebFileSystemAccess', false, true); // Support for FileSystemAccess web APIs (https://wicg.github.io/file-system-access) diff --git a/src/vs/workbench/common/views.ts b/src/vs/workbench/common/views.ts index b439e870035..cdd58916539 100644 --- a/src/vs/workbench/common/views.ts +++ b/src/vs/workbench/common/views.ts @@ -69,11 +69,11 @@ export const enum WindowVisibility { */ Editor = 1, /** - * Visible only in sessions window + * Visible only in agent sessions window */ Sessions = 2, /** - * Visible in both editor and sessions windows + * Visible in both editor and agent sessions windows */ Both = 3, } diff --git a/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts b/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts index 0134980d2c0..d86957ebb8c 100644 --- a/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts +++ b/src/vs/workbench/contrib/chat/browser/chatTipCatalog.ts @@ -413,13 +413,13 @@ export const TIP_CATALOG: readonly ITipDefinition[] = [ excludeWhenToolsInvoked: ['listDebugEvents'], }, { - id: 'tip.openSessionsWindow', + id: 'tip.openAgentsWindow', tier: ChatTipTier.Qol, buildMessage() { return new MarkdownString( localize( - 'tip.openSessionsWindow', - "Try the [Sessions Window](command:workbench.action.openSessionsWindow \"Open Sessions Window\") to run multiple agents simultaneously and manage your coding sessions." + 'tip.openAgentsWindow', + "Try the [Agents Application](command:workbench.action.openAgentsWindow \"Open Agents Application\") to run multiple agents simultaneously and manage your coding sessions." ) ); }, @@ -428,7 +428,7 @@ export const TIP_CATALOG: readonly ITipDefinition[] = [ IsSessionsWindowContext.negate(), ChatContextKeys.chatModeKind.isEqualTo(ChatModeKind.Agent), ), - excludeWhenCommandsExecuted: ['workbench.action.openSessionsWindow'], - dismissWhenCommandsClicked: ['workbench.action.openSessionsWindow'], + excludeWhenCommandsExecuted: ['workbench.action.openAgentsWindow'], + dismissWhenCommandsClicked: ['workbench.action.openAgentsWindow'], }, ]; diff --git a/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts b/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts index 25bed8ecd2e..ee9d0eb3206 100644 --- a/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts +++ b/src/vs/workbench/contrib/chat/electron-browser/agentSessions/agentSessionsActions.ts @@ -18,11 +18,11 @@ import { isMacintosh, isWindows } from '../../../../../base/common/platform.js'; import { IWorkbenchEnvironmentService } from '../../../../services/environment/common/environmentService.js'; import { Schemas } from '../../../../../base/common/network.js'; -export class OpenSessionsWindowAction extends Action2 { +export class OpenAgentsWindowAction extends Action2 { constructor() { super({ - id: 'workbench.action.openSessionsWindow', - title: localize2('openSessionsWindow', "Open Sessions Window"), + id: 'workbench.action.openAgentsWindow', + title: localize2('openAgentsWindow', "Open Agents Application"), category: CHAT_CATEGORY, precondition: ContextKeyExpr.and(ProductQualityContext.notEqualsTo('stable'), ChatEntitlementContextKeys.Setup.hidden.negate(), IsSessionsWindowContext.negate()), f1: true, @@ -50,7 +50,7 @@ export class OpenSessionsWindowAction extends Action2 { await openerService.open(URI.from({ scheme, authority: Schemas.file }), { openExternal: true }); } else { const nativeHostService = accessor.get(INativeHostService); - await nativeHostService.openSessionsWindow(); + await nativeHostService.openAgentsWindow(); } } } diff --git a/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts b/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts index 6fddb201f36..bb636f37e61 100644 --- a/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts +++ b/src/vs/workbench/contrib/chat/electron-browser/chat.contribution.ts @@ -42,7 +42,7 @@ import { registerChatDeveloperActions } from './actions/chatDeveloperActions.js' import { registerChatExportZipAction } from './actions/chatExportZip.js'; import { HoldToVoiceChatInChatViewAction, InlineVoiceChatAction, KeywordActivationContribution, QuickVoiceChatAction, ReadChatResponseAloud, StartVoiceChatAction, StopListeningAction, StopListeningAndSubmitAction, StopReadAloud, StopReadChatItemAloud, VoiceChatInChatViewAction } from './actions/voiceChatActions.js'; import { NativeBuiltinToolsContribution } from './builtInTools/tools.js'; -import { OpenSessionsWindowAction } from './agentSessions/agentSessionsActions.js'; +import { OpenAgentsWindowAction } from './agentSessions/agentSessionsActions.js'; class ChatCommandLineHandler extends Disposable { @@ -217,7 +217,7 @@ class ChatLifecycleHandler extends Disposable { } } -registerAction2(OpenSessionsWindowAction); +registerAction2(OpenAgentsWindowAction); registerAction2(StartVoiceChatAction); registerAction2(VoiceChatInChatViewAction); diff --git a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts index 74ce76f240d..62e4132a1a7 100644 --- a/src/vs/workbench/test/electron-browser/workbenchTestServices.ts +++ b/src/vs/workbench/test/electron-browser/workbenchTestServices.ts @@ -103,7 +103,7 @@ export class TestNativeHostService implements INativeHostService { throw new Error('Method not implemented.'); } - async openSessionsWindow(): Promise { } + async openAgentsWindow(): Promise { } async toggleFullScreen(): Promise { } async isMaximized(): Promise { return true; }