From 04a04511325ab3b830765f68bc38ef4d17fb503a Mon Sep 17 00:00:00 2001 From: Br1an67 <932039080@qq.com> Date: Mon, 2 Mar 2026 00:42:57 +0800 Subject: [PATCH] fix: warn on unrecognized permission keys in opencode.json The permission block used .catchall(PermissionRule) which silently accepted unknown keys. Users migrating from Claude Code (PascalCase keys like "Bash") got no signal that their permissions had no effect. Now logs a warning for each unrecognized key, with a suggestion if the lowercase version is a known key. --- packages/opencode/src/config/config.ts | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/packages/opencode/src/config/config.ts b/packages/opencode/src/config/config.ts index 141f6156985..364a30735ba 100644 --- a/packages/opencode/src/config/config.ts +++ b/packages/opencode/src/config/config.ts @@ -599,6 +599,26 @@ export namespace Config { return val } + const KNOWN_PERMISSION_KEYS = new Set([ + "read", + "edit", + "glob", + "grep", + "list", + "bash", + "task", + "external_directory", + "todowrite", + "todoread", + "question", + "webfetch", + "websearch", + "codesearch", + "lsp", + "doom_loop", + "skill", + ]) + const permissionTransform = (x: unknown): Record => { if (typeof x === "string") return { "*": x as PermissionAction } const obj = x as { __originalKeys?: string[] } & Record @@ -607,6 +627,11 @@ export namespace Config { const result: Record = {} for (const key of __originalKeys) { if (key in rest) result[key] = rest[key] as PermissionRule + if (!KNOWN_PERMISSION_KEYS.has(key)) { + const lower = key.toLowerCase() + const hint = KNOWN_PERMISSION_KEYS.has(lower) ? ` — did you mean "${lower}"?` : "" + log.warn("unrecognized permission key, permission not applied", { key, hint }) + } } return result }