summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-06 21:17:07 -0600
committerAdam <[email protected]>2026-01-06 21:18:29 -0600
commit7672b722cacf9951cafbf2509958601d66b9e220 (patch)
treebfd2c7f004bd31ac4e6cd2df763e326d6729ad8c
parent488c3502a71a7aa767cc142182f182a2b0dc7d23 (diff)
downloadopencode-7672b722cacf9951cafbf2509958601d66b9e220.tar.gz
opencode-7672b722cacf9951cafbf2509958601d66b9e220.zip
fix(app): permission auto-accept should hide when not needed
-rw-r--r--packages/app/src/context/permission.tsx33
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(