diff --git a/eslint.config.mjs b/eslint.config.mjs index 0f7fb55..1828f22 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -86,6 +86,8 @@ export default tseslint.config( menuSkills: "writable", menuSkillsCheck: "writable", menuToggle: "writable", + menuWorkspace: "writable", + menuWorkspaceCheck: "writable", messagesEl: "writable", newSessionButton: "writable", onMenuClick: "writable", @@ -143,6 +145,7 @@ export default tseslint.config( toolIcon: "writable", updateCommandMenu: "writable", vscode: "writable", + workspaceEnabled: "writable", }, }, rules: { diff --git a/media/dom.js b/media/dom.js index b07ba02..1bc77bb 100644 --- a/media/dom.js +++ b/media/dom.js @@ -33,6 +33,8 @@ const menuDelegation = document.getElementById("menu-delegation"); const menuDelegationCheck = document.getElementById("menu-delegation-check"); const menuMemory = document.getElementById("menu-memory"); const menuMemoryCheck = document.getElementById("menu-memory-check"); +const menuWorkspace = document.getElementById("menu-workspace"); +const menuWorkspaceCheck = document.getElementById("menu-workspace-check"); const menuMcp = document.getElementById("menu-mcp"); const menuReload = document.getElementById("menu-reload"); const menuSettings = document.getElementById("menu-settings"); @@ -61,6 +63,7 @@ let autoApprove = false; let skillsEnabled = true; let delegationEnabled = false; let memoryEnabled = true; +let workspaceEnabled = true; let hasApiKey = false; let apiKeyEnv = ""; let authHeader = ""; diff --git a/media/menu.js b/media/menu.js index dfd1fe0..13e2802 100644 --- a/media/menu.js +++ b/media/menu.js @@ -24,6 +24,7 @@ onMenuClick(menuAutoApprove, () => vscode.postMessage({ type: "toggleAutoApprove onMenuClick(menuSkills, () => vscode.postMessage({ type: "toggleSkills", next: !skillsEnabled })); onMenuClick(menuDelegation, () => vscode.postMessage({ type: "toggleDelegation", next: !delegationEnabled })); onMenuClick(menuMemory, () => vscode.postMessage({ type: "toggleMemory", next: !memoryEnabled })); +onMenuClick(menuWorkspace, () => vscode.postMessage({ type: "toggleWorkspace", next: !workspaceEnabled })); onMenuClick(menuMcp, () => vscode.postMessage({ type: "manageMcpServers" })); onMenuClick(menuReload, () => vscode.postMessage({ type: "reload" })); onMenuClick(menuSettings, () => vscode.postMessage({ type: "openSettings" })); @@ -34,6 +35,7 @@ function applySettings(message) { skillsEnabled = message.skills !== false; delegationEnabled = !!message.delegation; memoryEnabled = message.memory !== false; + workspaceEnabled = message.workspace !== false; hasApiKey = !!message.hasApiKey; apiKeyEnv = message.apiKeyEnv || ""; authHeader = message.authHeader || ""; @@ -42,6 +44,7 @@ function applySettings(message) { menuSkillsCheck.classList.toggle("checked", skillsEnabled); menuDelegationCheck.classList.toggle("checked", delegationEnabled); menuMemoryCheck.classList.toggle("checked", memoryEnabled); + menuWorkspaceCheck.classList.toggle("checked", workspaceEnabled); if (!hasApiKey && apiKeyEnv && !apiKeyCard && !apiKeyPromptHidden) { renderApiKeyCard(); } diff --git a/src/features/settings/settings.controller.ts b/src/features/settings/settings.controller.ts index 916f95f..9aae407 100644 --- a/src/features/settings/settings.controller.ts +++ b/src/features/settings/settings.controller.ts @@ -31,6 +31,7 @@ export class SettingsController { skills: settings.skills, delegation: settings.delegation, memory: settings.memory, + workspace: settings.workspace, mcpServers: settings.mcpServers, hasApiKey: Boolean(apiKey), apiKeyEnv: auth.apiKeyEnv, @@ -342,6 +343,12 @@ export class SettingsController { this.reload(); } + async toggleWorkspace(next: boolean): Promise { + await updateSetting("workspace", next); + await this.postSettings(); + this.reload(); + } + async manageMcpServers(): Promise { const servers = readSettings().mcpServers; diff --git a/src/vscode/sidebar/chatSidebarProvider.ts b/src/vscode/sidebar/chatSidebarProvider.ts index 124047a..bf2ad04 100644 --- a/src/vscode/sidebar/chatSidebarProvider.ts +++ b/src/vscode/sidebar/chatSidebarProvider.ts @@ -135,6 +135,9 @@ export class ChatViewProvider implements vscode.WebviewViewProvider { case "toggleMemory": this.settings.toggleMemory(!!message.next); break; + case "toggleWorkspace": + this.settings.toggleWorkspace(!!message.next); + break; case "manageMcpServers": this.settings.manageMcpServers(); break; diff --git a/src/vscode/webview/html.ts b/src/vscode/webview/html.ts index 38f6983..a524dda 100644 --- a/src/vscode/webview/html.ts +++ b/src/vscode/webview/html.ts @@ -50,6 +50,9 @@ export function renderChatHtml(options: ChatHtmlOptions): string { + diff --git a/src/vscode/webview/messages.ts b/src/vscode/webview/messages.ts index 498bed0..e673b79 100644 --- a/src/vscode/webview/messages.ts +++ b/src/vscode/webview/messages.ts @@ -18,6 +18,7 @@ export type WebviewMessage = | { type: "toggleSkills"; next: boolean } | { type: "toggleDelegation"; next: boolean } | { type: "toggleMemory"; next: boolean } + | { type: "toggleWorkspace"; next: boolean } | { type: "manageMcpServers" } | { type: "reload" } | { type: "installCli" }