From ad545d0cc9152675549f878f258aeff37f9e17e8 Mon Sep 17 00:00:00 2001 From: Dax Raad Date: Sat, 7 Feb 2026 19:52:53 -0500 Subject: [PATCH] tui: allow auto-accepting only edit permissions instead of all permissions --- packages/opencode/src/agent/agent.ts | 1 + .../src/cli/cmd/tui/component/prompt/index.tsx | 10 +++++----- packages/opencode/src/cli/cmd/tui/context/sync.tsx | 4 ++-- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/packages/opencode/src/agent/agent.ts b/packages/opencode/src/agent/agent.ts index e338559be7..a091484f15 100644 --- a/packages/opencode/src/agent/agent.ts +++ b/packages/opencode/src/agent/agent.ts @@ -63,6 +63,7 @@ export namespace Agent { question: "deny", plan_enter: "deny", plan_exit: "deny", + edit: "ask", // mirrors github.com/github/gitignore Node.gitignore pattern for .env files read: { "*": "allow", diff --git a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx index 362a6c0b5f..a78ef11022 100644 --- a/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx +++ b/packages/opencode/src/cli/cmd/tui/component/prompt/index.tsx @@ -74,7 +74,7 @@ export function Prompt(props: PromptProps) { const renderer = useRenderer() const { theme, syntax } = useTheme() const kv = useKV() - const [autoaccept, setAutoaccept] = kv.signal("permission_auto_accept", false) + const [autoaccept, setAutoaccept] = kv.signal<"none" | "edit">("permission_auto_accept", "edit") function promptModelWarning() { toast.show({ @@ -159,13 +159,13 @@ export function Prompt(props: PromptProps) { command.register(() => { return [ { - title: autoaccept() ? "Disable permissions" : "Enable permissions", + title: autoaccept() === "none" ? "Enable autoedit" : "Disable autoedit", value: "permission.auto_accept.toggle", search: "toggle permissions", keybind: "permission_auto_accept_toggle", category: "Agent", onSelect: (dialog) => { - setAutoaccept(!autoaccept() as any) + setAutoaccept(() => (autoaccept() === "none" ? "edit" : "none")) dialog.clear() }, }, @@ -1005,9 +1005,9 @@ export function Prompt(props: PromptProps) { - + - auto-accept + auto-edit diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index 2ad41d3482..a514611258 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -105,7 +105,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ const sdk = useSDK() const kv = useKV() - const [autoaccept] = kv.signal("permission_auto_accept", false) + const [autoaccept] = kv.signal<"none" | "edit">("permission_auto_accept", "edit") sdk.event.listen((e) => { const event = e.details @@ -130,7 +130,7 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ case "permission.asked": { const request = event.properties - if (autoaccept()) { + if (autoaccept() === "edit" && request.permission === "edit") { sdk.client.permission.reply({ reply: "once", requestID: request.id,