diff --git a/packages/kilo-vscode/webview-ui/src/components/settings/AutoApproveTab.tsx b/packages/kilo-vscode/webview-ui/src/components/settings/AutoApproveTab.tsx index ef989fcf327..f12ef0f053a 100644 --- a/packages/kilo-vscode/webview-ui/src/components/settings/AutoApproveTab.tsx +++ b/packages/kilo-vscode/webview-ui/src/components/settings/AutoApproveTab.tsx @@ -1,29 +1,176 @@ -import { Component } from "solid-js" +import { Component, For, createMemo } from "solid-js" +import { useConfig } from "../../context/config" +import type { PermissionLevel } from "../../types/messages" + +const TOOLS = [ + "read", + "edit", + "glob", + "grep", + "list", + "bash", + "task", + "skill", + "lsp", + "todoread", + "todowrite", + "webfetch", + "websearch", + "codesearch", + "external_directory", + "doom_loop", +] as const + +const LEVELS: PermissionLevel[] = ["allow", "ask", "deny"] + +const TOOL_DESCRIPTIONS: Record = { + read: "Read file contents", + edit: "Edit or create files", + glob: "Find files by pattern", + grep: "Search file contents", + list: "List directory contents", + bash: "Execute shell commands", + task: "Create sub-agent tasks", + skill: "Execute skills", + lsp: "Language server operations", + todoread: "Read todo lists", + todowrite: "Write todo lists", + webfetch: "Fetch web pages", + websearch: "Search the web", + codesearch: "Search codebase", + external_directory: "Access files outside workspace", + doom_loop: "Continue after repeated failures", +} + +const selectStyle = { + padding: "4px 8px", + "border-radius": "4px", + border: "1px solid var(--vscode-dropdown-border, var(--vscode-panel-border))", + background: "var(--vscode-dropdown-background)", + color: "var(--vscode-dropdown-foreground)", + "font-size": "12px", + "font-family": "var(--vscode-font-family)", + cursor: "pointer", + outline: "none", + "min-width": "80px", +} const AutoApproveTab: Component = () => { + const { config, updateConfig } = useConfig() + + const permissions = createMemo(() => config().permission ?? {}) + + const getLevel = (tool: string): PermissionLevel => { + return permissions()[tool] ?? permissions()["*"] ?? "ask" + } + + const setPermission = (tool: string, level: PermissionLevel) => { + updateConfig({ + permission: { ...permissions(), [tool]: level }, + }) + } + + const setAll = (level: PermissionLevel) => { + const updated: Record = {} + for (const tool of TOOLS) { + updated[tool] = level + } + updateConfig({ permission: updated }) + } + return (
+ {/* Set All control */}
-

+ Set all permissions + + +

+ + {/* Tool permission list */} +
+ + {(tool, index) => ( +
+
+
+ {tool} +
+
+ {TOOL_DESCRIPTIONS[tool] ?? tool} +
+
+ +
+ )} +
)