UNPKG

@sema-agent/core

Version:

Stateless, task-oriented AI agent core

56 lines (55 loc) • 2.47 kB
const FACE_LIST_FIELDS = ["allowTools", "excludeTools", "deferTools", "alwaysLoadTools"]; export function describeBaselineValue(v) { return v === null ? "null" : Array.isArray(v) ? "an array" : `a ${typeof v}`; } function isSpecObject(v) { return v !== null && v !== undefined && typeof v === "object" && !Array.isArray(v); } function faceListProblem(slot, where) { for (const field of FACE_LIST_FIELDS) { const v = slot[field]; if (v === undefined || v === null) continue; if (!Array.isArray(v)) { return { where: `${where}.${field}`, found: describeBaselineValue(v), code: "config.invalid_tool_name_set" }; } for (const [i, entry] of v.entries()) { if (typeof entry !== "string") { return { where: `${where}.${field}`, found: `entry ${i} is ${describeBaselineValue(entry)}`, code: "config.invalid_tool_name_set", }; } } } return null; } export function governanceBaselineProblem(baseline) { if (!isSpecObject(baseline)) { return { where: "workflowGovernanceBaseline", found: describeBaselineValue(baseline), code: "config.invalid_governance_baseline" }; } const base = baseline.base; if (!isSpecObject(base)) { return { where: "base", found: describeBaselineValue(base), code: "config.invalid_governance_baseline" }; } const baseFaces = faceListProblem(base, "base"); if (baseFaces !== null) return baseFaces; const wt = baseline.worktreeBase; if (wt === null || wt === undefined) return null; if (!isSpecObject(wt)) { return { where: "worktreeBase", found: describeBaselineValue(wt), code: "config.invalid_governance_baseline" }; } return faceListProblem(wt, "worktreeBase"); } export function governanceBaselineError(p) { const detail = p.code === "config.invalid_tool_name_set" ? `must be an array of tool names (got ${p.found}) — refusing to mount rather than govern children with a roster nobody can read.` : `is ${p.found}, not a spec object — refusing to mount rather than launch children under no governance ` + `(to run ungoverned, leave workflowGovernanceBaseline unconfigured).`; const e = new Error(`createRunWorkflowTool: the workflow governance baseline's ${p.where} ${detail}`); e.code = p.code; return e; }