@sema-agent/core
Version:
Stateless, task-oriented AI agent core
39 lines (38 loc) • 1.77 kB
JavaScript
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) ?? [])]);
}