From 99da10cba340eaee9e4678b613c47304ef980364 Mon Sep 17 00:00:00 2001 From: Alex Alecu Date: Tue, 7 Apr 2026 12:15:55 +0300 Subject: [PATCH] fix(cli): read allow-everything state from config instead of local KV store The ctrl+p auto-approve toggle was tracking state in a local KV file that was never initialized from the actual config, causing the label to be out of sync. Now reads directly from sync.data.config.permission and listens for global.config.updated SSE events to stay reactive. --- packages/opencode/src/cli/cmd/tui/app.tsx | 22 ++++++++++++++----- .../opencode/src/cli/cmd/tui/context/sync.tsx | 9 ++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/packages/opencode/src/cli/cmd/tui/app.tsx b/packages/opencode/src/cli/cmd/tui/app.tsx index f38ec371c0f..61b64d1a789 100644 --- a/packages/opencode/src/cli/cmd/tui/app.tsx +++ b/packages/opencode/src/cli/cmd/tui/app.tsx @@ -48,6 +48,16 @@ import { initializeTUIDependencies } from "@kilocode/kilo-gateway/tui" // kiloco import { TuiConfigProvider } from "./context/tui-config" import { TuiConfig } from "@/config/tui" +// kilocode_change start +function isAllowEverything(permission: unknown): boolean { + if (typeof permission !== "object" || permission === null) return false + const wildcard = (permission as Record)["*"] + if (typeof wildcard === "string") return wildcard === "allow" + if (typeof wildcard === "object" && wildcard !== null) return (wildcard as Record)["*"] === "allow" + return false +} +// kilocode_change end + async function getTerminalBackgroundColor(): Promise<"dark" | "light"> { // can't set raw mode if not a TTY if (!process.stdin.isTTY) return "dark" @@ -711,21 +721,21 @@ function App() { }, // kilocode_change start { - title: kv.get("allow_everything_global") ? "Disable auto-approve mode" : "Enable auto-approve mode", + get title() { + return isAllowEverything(sync.data.config.permission) ? "Disable auto-approve mode" : "Enable auto-approve mode" + }, value: "permission.allow_everything", category: "System", onSelect: async (dialog) => { - const enabled = kv.get("allow_everything_global") - const next = !enabled - const result = await sdk.client.permission.allowEverything({ enable: next }) + const enabled = isAllowEverything(sync.data.config.permission) + const result = await sdk.client.permission.allowEverything({ enable: !enabled }) if (result.error) { toast.show({ variant: "error", - message: `Failed to ${next ? "enable" : "disable"} auto-approve mode`, + message: `Failed to ${!enabled ? "enable" : "disable"} auto-approve mode`, }) return } - kv.set("allow_everything_global", next) dialog.clear() }, }, diff --git a/packages/opencode/src/cli/cmd/tui/context/sync.tsx b/packages/opencode/src/cli/cmd/tui/context/sync.tsx index e7049fcbe4e..985bc7a4d75 100644 --- a/packages/opencode/src/cli/cmd/tui/context/sync.tsx +++ b/packages/opencode/src/cli/cmd/tui/context/sync.tsx @@ -390,6 +390,15 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({ setStore("vcs", { branch: event.properties.branch }) break } + + // kilocode_change start + case "global.config.updated": { + sdk.client.config.get().then((x) => { + if (x.data) setStore("config", reconcile(x.data)) + }) + break + } + // kilocode_change end } })