mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-11 19:28:33 +00:00
52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import { base64Encode } from "@opencode-ai/util/encode"
|
|
|
|
export function acceptKey(sessionID: string, directory?: string) {
|
|
if (!directory) return sessionID
|
|
return `${base64Encode(directory)}/${sessionID}`
|
|
}
|
|
|
|
export function directoryAcceptKey(directory: string) {
|
|
return `${base64Encode(directory)}/*`
|
|
}
|
|
|
|
function accepted(autoAccept: Record<string, boolean>, sessionID: string, directory?: string) {
|
|
const key = acceptKey(sessionID, directory)
|
|
const directoryKey = directory ? directoryAcceptKey(directory) : undefined
|
|
return autoAccept[key] ?? autoAccept[sessionID] ?? (directoryKey ? autoAccept[directoryKey] : undefined)
|
|
}
|
|
|
|
export function isDirectoryAutoAccepting(autoAccept: Record<string, boolean>, directory: string) {
|
|
const key = directoryAcceptKey(directory)
|
|
return autoAccept[key] ?? false
|
|
}
|
|
|
|
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 ?? false
|
|
}
|