Buckets:
| import { describe, expect, test } from "bun:test" | |
| import type { PermissionRequest, Session } from "@opencode-ai/sdk/v2/client" | |
| import { base64Encode } from "@opencode-ai/core/util/encode" | |
| import { autoRespondsPermission, isDirectoryAutoAccepting } from "./permission-auto-respond" | |
| const session = (input: { id: string; parentID?: string }) => | |
| ({ | |
| id: input.id, | |
| parentID: input.parentID, | |
| }) as Session | |
| const permission = (sessionID: string) => | |
| ({ | |
| sessionID, | |
| }) as Pick<PermissionRequest, "sessionID"> | |
| describe("autoRespondsPermission", () => { | |
| test("uses a parent session's directory-scoped auto-accept", () => { | |
| const directory = "/tmp/project" | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const autoAccept = { | |
| [`${base64Encode(directory)}/root`]: true, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("child"), directory)).toBe(true) | |
| }) | |
| test("uses a parent session's legacy auto-accept key", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| expect(autoRespondsPermission({ root: true }, sessions, permission("child"), "/tmp/project")).toBe(true) | |
| }) | |
| test("defaults to requiring approval when no lineage override exists", () => { | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" }), session({ id: "other" })] | |
| const autoAccept = { | |
| other: true, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("child"), "/tmp/project")).toBe(false) | |
| }) | |
| test("inherits a parent session's false override", () => { | |
| const directory = "/tmp/project" | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const autoAccept = { | |
| [`${base64Encode(directory)}/root`]: false, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("child"), directory)).toBe(false) | |
| }) | |
| test("prefers a child override over parent override", () => { | |
| const directory = "/tmp/project" | |
| const sessions = [session({ id: "root" }), session({ id: "child", parentID: "root" })] | |
| const autoAccept = { | |
| [`${base64Encode(directory)}/root`]: false, | |
| [`${base64Encode(directory)}/child`]: true, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("child"), directory)).toBe(true) | |
| }) | |
| test("falls back to directory-level auto-accept", () => { | |
| const directory = "/tmp/project" | |
| const sessions = [session({ id: "root" })] | |
| const autoAccept = { | |
| [`${base64Encode(directory)}/*`]: true, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("root"), directory)).toBe(true) | |
| }) | |
| test("session-level override takes precedence over directory-level", () => { | |
| const directory = "/tmp/project" | |
| const sessions = [session({ id: "root" })] | |
| const autoAccept = { | |
| [`${base64Encode(directory)}/*`]: true, | |
| [`${base64Encode(directory)}/root`]: false, | |
| } | |
| expect(autoRespondsPermission(autoAccept, sessions, permission("root"), directory)).toBe(false) | |
| }) | |
| }) | |
| describe("isDirectoryAutoAccepting", () => { | |
| test("returns true when directory key is set", () => { | |
| const directory = "/tmp/project" | |
| const autoAccept = { [`${base64Encode(directory)}/*`]: true } | |
| expect(isDirectoryAutoAccepting(autoAccept, directory)).toBe(true) | |
| }) | |
| test("returns false when directory key is not set", () => { | |
| expect(isDirectoryAutoAccepting({}, "/tmp/project")).toBe(false) | |
| }) | |
| test("returns false when directory key is explicitly false", () => { | |
| const directory = "/tmp/project" | |
| const autoAccept = { [`${base64Encode(directory)}/*`]: false } | |
| expect(isDirectoryAutoAccepting(autoAccept, directory)).toBe(false) | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 3.79 kB
- Xet hash:
- e11101093eafc743eec047b088ee1ff8a464f513761248594f02a4cfe199bd45
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.