summaryrefslogtreecommitdiffhomepage
path: root/packages
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2026-01-05 01:21:45 -0500
committerDax Raad <[email protected]>2026-01-05 01:21:49 -0500
commit2f5b2b23d5aa4bcc80f5172339732d1f2d5b626c (patch)
tree353ec9b0552dc8bb3e6302b4f33bee599d745a5b /packages
parent035baa4b38c3b08ae09e8c0e9d66bb74ea9c93ce (diff)
downloadopencode-2f5b2b23d5aa4bcc80f5172339732d1f2d5b626c.tar.gz
opencode-2f5b2b23d5aa4bcc80f5172339732d1f2d5b626c.zip
core: fix permission rule matching to use permission field instead of pattern field
Diffstat (limited to 'packages')
-rw-r--r--packages/opencode/src/permission/next.ts2
-rw-r--r--packages/opencode/test/permission/next.test.ts8
2 files changed, 5 insertions, 5 deletions
diff --git a/packages/opencode/src/permission/next.ts b/packages/opencode/src/permission/next.ts
index 3f8e7c648..9a0395fa1 100644
--- a/packages/opencode/src/permission/next.ts
+++ b/packages/opencode/src/permission/next.ts
@@ -232,7 +232,7 @@ export namespace PermissionNext {
const result = new Set<string>()
for (const tool of tools) {
const permission = EDIT_TOOLS.includes(tool) ? "edit" : tool
- const rule = ruleset.findLast((r) => Wildcard.match(permission, r.pattern))
+ const rule = ruleset.findLast((r) => Wildcard.match(permission, r.permission))
if (!rule) continue
if (rule.pattern === "*" && rule.action === "deny") result.add(tool)
}
diff --git a/packages/opencode/test/permission/next.test.ts b/packages/opencode/test/permission/next.test.ts
index 04754e761..68dc653de 100644
--- a/packages/opencode/test/permission/next.test.ts
+++ b/packages/opencode/test/permission/next.test.ts
@@ -359,9 +359,9 @@ test("disabled - does not disable when action is ask", () => {
expect(result.size).toBe(0)
})
-test("disabled - disables when wildcard deny even with specific allow", () => {
- // Tool is disabled because evaluate("bash", "*", ...) returns "deny"
- // The "echo *" allow rule doesn't match the "*" pattern we're checking
+test("disabled - does not disable when specific allow after wildcard deny", () => {
+ // Tool is NOT disabled because a specific allow after wildcard deny means
+ // there's at least some usage allowed
const result = PermissionNext.disabled(
["bash"],
[
@@ -369,7 +369,7 @@ test("disabled - disables when wildcard deny even with specific allow", () => {
{ permission: "bash", pattern: "echo *", action: "allow" },
],
)
- expect(result.has("bash")).toBe(true)
+ expect(result.has("bash")).toBe(false)
})
test("disabled - does not disable when wildcard allow after deny", () => {