mirror of
https://github.com/anomalyco/opencode.git
synced 2026-04-24 23:04:55 +00:00
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
import { base64Encode } from "@opencode-ai/util/encode"
|
|
|
|
export function acceptKey(sessionID: string, directory?: string) {
|
|
if (!directory) return sessionID
|
|
return `${base64Encode(directory)}/${sessionID}`
|
|
}
|
|
|
|
function accepted(autoAccept: Record<string, boolean>, sessionID: string, directory?: string) {
|
|
const key = acceptKey(sessionID, directory)
|
|
return autoAccept[key] ?? autoAccept[sessionID]
|
|
}
|
|
|
|
function sessionLineage(session: { id: string; parentID?: string }[], sessionID: string) {
|
|
const parent = session.reduce((acc, item) => {
|
|
if (item.parentID) acc.set(item.id, item.parentID)
|
|
return acc
|
|
}, new Map<string, string>())
|
|
const seen = new Set([sessionID])
|
|
const ids = [sessionID]
|
|
|
|
for (const id of ids) {
|
|
const parentID = parent.get(id)
|
|
if (!parentID || seen.has(parentID)) continue
|
|
seen.add(parentID)
|
|
ids.push(parentID)
|
|
}
|
|
|
|
return ids
|
|
}
|
|
|
|
export function autoRespondsPermission(
|
|
autoAccept: Record<string, boolean>,
|
|
session: { id: string; parentID?: string }[],
|
|
permission: { sessionID: string },
|
|
directory?: string,
|
|
) {
|
|
const value = sessionLineage(session, permission.sessionID)
|
|
.map((id) => accepted(autoAccept, id, directory))
|
|
.find((item): item is boolean => item !== undefined)
|
|
return value ?? true
|
|
}
|