UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

39 lines (38 loc) • 1.77 kB
import { compileReadDeny, readDenyBuiltinConfigOf } from "../tools/fs/index.js"; export function assertStringArraySeat(value, seat, entryLaw) { if (value === undefined) return; if (!Array.isArray(value)) { const e = new Error(`${seat} must be an array or absent (got ${value === null ? "null" : typeof value}) — a non-array here would be iterated character by character, so it refuses loudly instead.`); e.code = "config.read_face_seat"; throw e; } if (entryLaw !== "strings") return; const entries = value; for (const entry of entries) { if (typeof entry !== "string") { const e = new Error(`${seat} entries must be strings (got ${entry === null ? "null" : typeof entry}).`); e.code = "config.read_face_seat"; throw e; } } } export const READ_DENY_DEPLOYMENT_SEATS = Object.freeze(["readDenyPatterns", "readDenyBuiltinTiers", "readDenyBuiltinExclude"]); export function copyReadDenySeat(value) { if (!Array.isArray(value)) return value; return Object.freeze(value.map((e) => (e !== null && typeof e === "object" ? Object.freeze({ ...e }) : e))); } export function screenReadDenySeat(seat, value) { if (value === undefined) return undefined; if (seat === "readDenyPatterns") { assertStringArraySeat(value, `RunnerDeps.${seat}`, "compiler-owned"); const entries = copyReadDenySeat(value); compileReadDeny(entries, seat, { tiers: [] }); return entries; } const config = readDenyBuiltinConfigOf(seat === "readDenyBuiltinTiers" ? { tiers: value } : { exclude: value }); return Object.freeze([...((seat === "readDenyBuiltinTiers" ? config.tiers : config.exclude) ?? [])]); }