diff options
| author | Adam <[email protected]> | 2026-01-06 21:17:07 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2026-01-06 21:18:29 -0600 |
| commit | 7672b722cacf9951cafbf2509958601d66b9e220 (patch) | |
| tree | bfd2c7f004bd31ac4e6cd2df763e326d6729ad8c | |
| parent | 488c3502a71a7aa767cc142182f182a2b0dc7d23 (diff) | |
| download | opencode-7672b722cacf9951cafbf2509958601d66b9e220.tar.gz opencode-7672b722cacf9951cafbf2509958601d66b9e220.zip | |
fix(app): permission auto-accept should hide when not needed
| -rw-r--r-- | packages/app/src/context/permission.tsx | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/packages/app/src/context/permission.tsx b/packages/app/src/context/permission.tsx index d47d850b9..dc75553c7 100644 --- a/packages/app/src/context/permission.tsx +++ b/packages/app/src/context/permission.tsx @@ -19,6 +19,32 @@ function shouldAutoAccept(perm: PermissionRequest) { return perm.permission === "edit" } +function isNonAllowRule(rule: unknown) { + if (!rule) return false + if (typeof rule === "string") return rule !== "allow" + if (typeof rule !== "object") return false + if (Array.isArray(rule)) return false + + for (const action of Object.values(rule)) { + if (action !== "allow") return true + } + + return false +} + +function hasAutoAcceptPermissionConfig(permission: unknown) { + if (!permission) return false + if (typeof permission === "string") return permission !== "allow" + if (typeof permission !== "object") return false + if (Array.isArray(permission)) return false + + const config = permission as Record<string, unknown> + if (isNonAllowRule(config.edit)) return true + if (isNonAllowRule(config.write)) return true + + return false +} + export const { use: usePermission, provider: PermissionProvider } = createSimpleContext({ name: "Permission", init: () => { @@ -27,9 +53,10 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple const globalSync = useGlobalSync() const permissionsEnabled = createMemo(() => { - if (!params.dir || !base64Decode(params.dir)) return false - const [store] = globalSync.child(base64Decode(params.dir)) - return store.config.permission !== undefined + const directory = params.dir ? base64Decode(params.dir) : undefined + if (!directory) return false + const [store] = globalSync.child(directory) + return hasAutoAcceptPermissionConfig(store.config.permission) }) const [store, setStore, _, ready] = persisted( |
