@sema-agent/core
Version:
Stateless, task-oriented AI agent core
56 lines (55 loc) • 2.46 kB
JavaScript
const FACE_LIST_FIELDS = ["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;
}