Skip to content
3 changes: 3 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ export default tseslint.config(
menuSkills: "writable",
menuSkillsCheck: "writable",
menuToggle: "writable",
menuWorkspace: "writable",
menuWorkspaceCheck: "writable",
messagesEl: "writable",
newSessionButton: "writable",
onMenuClick: "writable",
Expand Down Expand Up @@ -143,6 +145,7 @@ export default tseslint.config(
toolIcon: "writable",
updateCommandMenu: "writable",
vscode: "writable",
workspaceEnabled: "writable",
},
},
rules: {
Expand Down
3 changes: 3 additions & 0 deletions media/dom.js
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down Expand Up @@ -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 = "";
Expand Down
3 changes: 3 additions & 0 deletions media/menu.js
Original file line number Diff line number Diff line change
Expand Up @@ -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" }));
Expand All @@ -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 || "";
Expand All @@ -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();
}
Expand Down
7 changes: 7 additions & 0 deletions src/features/settings/settings.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -342,6 +343,12 @@ export class SettingsController {
this.reload();
}

async toggleWorkspace(next: boolean): Promise<void> {
await updateSetting("workspace", next);
await this.postSettings();
this.reload();
}

async manageMcpServers(): Promise<void> {
const servers = readSettings().mcpServers;

Expand Down
3 changes: 3 additions & 0 deletions src/vscode/sidebar/chatSidebarProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions src/vscode/webview/html.ts
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ export function renderChatHtml(options: ChatHtmlOptions): string {
<button id="menu-memory" class="menu-item">
<span id="menu-memory-check" class="check-box"></span> Project memory
</button>
<button id="menu-workspace" class="menu-item">
<span id="menu-workspace-check" class="check-box"></span> Workspace jail
</button>
<button id="menu-mcp" class="menu-item">MCP Servers</button>
<button id="menu-reload" class="menu-item">Reload Connection</button>
<button id="menu-settings" class="menu-item">Open Settings</button>
Expand Down
1 change: 1 addition & 0 deletions src/vscode/webview/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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" }
Expand Down
Loading