summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-02-26 15:23:20 -0600
committerAdam <[email protected]>2026-02-26 15:23:26 -0600
commit7e6a007c351fa86a3a38973489b47d79ea32c877 (patch)
tree545b34f6fb77eaf7928339c89525b310fc769783 /packages/app/src/context
parent5745ee87ba9847e32c07fd364c52a6fad23bb55e (diff)
downloadopencode-7e6a007c351fa86a3a38973489b47d79ea32c877.tar.gz
opencode-7e6a007c351fa86a3a38973489b47d79ea32c877.zip
feat(app): auto-accept all permissions mode
Diffstat (limited to 'packages/app/src/context')
-rw-r--r--packages/app/src/context/permission.tsx43
1 files changed, 25 insertions, 18 deletions
diff --git a/packages/app/src/context/permission.tsx b/packages/app/src/context/permission.tsx
index 988723834..ccfda5e69 100644
--- a/packages/app/src/context/permission.tsx
+++ b/packages/app/src/context/permission.tsx
@@ -16,10 +16,6 @@ type PermissionRespondFn = (input: {
directory?: string
}) => void
-function shouldAutoAccept(perm: PermissionRequest) {
- return perm.permission === "edit"
-}
-
function isNonAllowRule(rule: unknown) {
if (!rule) return false
if (typeof rule === "string") return rule !== "allow"
@@ -40,10 +36,7 @@ function hasPermissionPromptRules(permission: unknown) {
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
+ return Object.values(config).some(isNonAllowRule)
}
export const { use: usePermission, provider: PermissionProvider } = createSimpleContext({
@@ -61,9 +54,25 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
})
const [store, setStore, _, ready] = persisted(
- Persist.global("permission", ["permission.v3"]),
+ {
+ ...Persist.global("permission", ["permission.v3"]),
+ migrate(value) {
+ if (!value || typeof value !== "object" || Array.isArray(value)) return value
+
+ const data = value as Record<string, unknown>
+ if (data.autoAccept) return value
+
+ return {
+ ...data,
+ autoAccept:
+ typeof data.autoAcceptEdits === "object" && data.autoAcceptEdits && !Array.isArray(data.autoAcceptEdits)
+ ? data.autoAcceptEdits
+ : {},
+ }
+ },
+ },
createStore({
- autoAcceptEdits: {} as Record<string, boolean>,
+ autoAccept: {} as Record<string, boolean>,
}),
)
@@ -112,7 +121,7 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
function isAutoAccepting(sessionID: string, directory?: string) {
const key = acceptKey(sessionID, directory)
- return store.autoAcceptEdits[key] ?? store.autoAcceptEdits[sessionID] ?? false
+ return store.autoAccept[key] ?? store.autoAccept[sessionID] ?? false
}
function bumpEnableVersion(sessionID: string, directory?: string) {
@@ -128,7 +137,6 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
const perm = event.properties
if (!isAutoAccepting(perm.sessionID, e.name)) return
- if (!shouldAutoAccept(perm)) return
respondOnce(perm, e.name)
})
@@ -139,8 +147,8 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
const version = bumpEnableVersion(sessionID, directory)
setStore(
produce((draft) => {
- draft.autoAcceptEdits[key] = true
- delete draft.autoAcceptEdits[sessionID]
+ draft.autoAccept[key] = true
+ delete draft.autoAccept[sessionID]
}),
)
@@ -152,7 +160,6 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
for (const perm of x.data ?? []) {
if (!perm?.id) continue
if (perm.sessionID !== sessionID) continue
- if (!shouldAutoAccept(perm)) continue
respondOnce(perm, directory)
}
})
@@ -164,8 +171,8 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
const key = directory ? acceptKey(sessionID, directory) : undefined
setStore(
produce((draft) => {
- if (key) delete draft.autoAcceptEdits[key]
- delete draft.autoAcceptEdits[sessionID]
+ if (key) delete draft.autoAccept[key]
+ delete draft.autoAccept[sessionID]
}),
)
}
@@ -174,7 +181,7 @@ export const { use: usePermission, provider: PermissionProvider } = createSimple
ready,
respond,
autoResponds(permission: PermissionRequest, directory?: string) {
- return isAutoAccepting(permission.sessionID, directory) && shouldAutoAccept(permission)
+ return isAutoAccepting(permission.sessionID, directory)
},
isAutoAccepting,
toggleAutoAccept(sessionID: string, directory: string) {