@sema-agent/core
Version:
Stateless, task-oriented AI agent core
172 lines (171 loc) • 6.59 kB
JavaScript
import { createHash } from "node:crypto";
export function canonical(node) {
if (Array.isArray(node))
return `[${node.map(canonical).join(",")}]`;
if (node === null || typeof node !== "object")
return JSON.stringify(node);
const keys = Object.keys(node).sort();
return `{${keys.map((k) => `${JSON.stringify(k)}:${canonical(node[k])}`).join(",")}}`;
}
const PROBE_FACTS_OFF = {
policyEnabled: false,
hooksEnabled: false,
isolationEnabled: false,
withinTaskCompactionEnabled: false,
supervisorEnabled: false,
orchestrationEnabled: false,
awarenessEnabled: false,
goalEnabled: false,
worktreeIsolated: false,
teammateEnabled: false,
orchestrationDeferred: false,
isSubagent: false,
promptProfile: "simple",
fableMitigations: false,
readFaceOpen: false,
writeFaceOpen: false,
reminderMark: undefined,
};
const PROBE_FACTS_ON = {
policyEnabled: true,
hooksEnabled: true,
isolationEnabled: true,
withinTaskCompactionEnabled: true,
supervisorEnabled: true,
orchestrationEnabled: true,
awarenessEnabled: true,
goalEnabled: true,
worktreeIsolated: true,
teammateEnabled: true,
orchestrationDeferred: true,
isSubagent: true,
promptProfile: "classic",
fableMitigations: true,
readFaceOpen: true,
writeFaceOpen: true,
reminderMark: "PROBE-FIXED-MARK-AXIS0",
};
const PROBE_VECTORS = [
PROBE_FACTS_OFF,
PROBE_FACTS_ON,
...Object.keys(PROBE_FACTS_OFF).map((k) => ({ ...PROBE_FACTS_OFF, [k]: PROBE_FACTS_ON[k] })),
];
const PROBE_INPUTS_BASE = {
roleBase: "\u0000probe-role\u0000",
roleAppend: "\u0000probe-append\u0000",
mcpInstructionsBlock: "\u0000probe-mcp\u0000",
environmentBlock: "\u0000probe-env@2\u0000",
memoryBlock: "\u0000probe-memory\u0000",
modelGuidance: "\u0000probe-guidance\u0000",
};
export function computeBundledArtifactDigest(pack, declared) {
const probeSection = (s) => PROBE_VECTORS.map((facts) => {
const inputs = { ...PROBE_INPUTS_BASE, facts };
try {
if (s.admit && !s.admit(inputs))
return null;
return s.content(inputs) ?? null;
}
catch {
return " probe-threw ";
}
});
const payload = {
packId: pack.packId,
assemblyApi: pack.assemblyApi,
...(declared !== undefined && declared.length > 0
? { declaredSections: declared.map((d) => ({ id: d.id, slot: d.slot, chars: d.chars, ...(d.contentHash !== undefined ? { contentHash: d.contentHash } : {}) })) }
: {}),
sections: [...pack.sections].sort((a, b) => a.rank - b.rank).map((s) => ({
id: s.id,
slot: s.slot,
rank: s.rank,
owner: s.owner,
trust: s.trust,
mutability: s.mutability,
cadence: s.cadence,
cacheClass: s.cacheClass,
carrier: s.carrier,
legacyBlockId: s.blockId,
probes: probeSection(s),
})),
};
return `sha256:${createHash("sha256").update(canonical(payload)).digest("hex")}`;
}
export function mintSessionStartEpoch(pack, declared) {
return {
epoch: 1,
artifactDigest: computeBundledArtifactDigest(pack, declared),
packId: pack.packId,
assemblyApi: pack.assemblyApi,
activatedBy: "session_start",
};
}
export function selectCompactionEpoch(current, pack, declared, centerAdoption) {
const digest = computeBundledArtifactDigest(pack, declared);
if (centerAdoption === undefined && current && current.artifactDigest === digest) {
return { ...current, activatedBy: "compaction" };
}
return {
epoch: (current?.epoch ?? 0) + 1,
artifactDigest: digest,
packId: pack.packId,
assemblyApi: pack.assemblyApi,
activatedBy: "compaction",
...(centerAdoption !== undefined
? "clear" in centerAdoption
? {}
: {
centerArtifactDigest: centerAdoption.centerArtifactDigest,
...(centerAdoption.sourceRevision !== undefined ? { sourceRevision: centerAdoption.sourceRevision } : {}),
}
: current?.centerArtifactDigest !== undefined
? {
centerArtifactDigest: current.centerArtifactDigest,
...(current.sourceRevision !== undefined ? { sourceRevision: current.sourceRevision } : {}),
}
: {}),
};
}
export function resolveEpochAgainstBundled(pinned, pack, declared) {
const digest = computeBundledArtifactDigest(pack, declared);
if (pinned && pinned.artifactDigest === digest && pinned.packId === pack.packId && pinned.assemblyApi === pack.assemblyApi) {
return { descriptor: pinned, migrated: false };
}
return {
descriptor: {
epoch: (pinned?.epoch ?? 0) + 1,
artifactDigest: digest,
packId: pack.packId,
assemblyApi: pack.assemblyApi,
activatedBy: "legacy_migration",
},
migrated: true,
};
}
export function normalizePromptEpoch(raw) {
if (raw === null || typeof raw !== "object")
return undefined;
const r = raw;
if (typeof r.epoch !== "number" || !Number.isInteger(r.epoch) || r.epoch < 1 || r.epoch > 1_000_000_000)
return undefined;
if (typeof r.artifactDigest !== "string" || !/^sha256:[0-9a-f]{64}$/.test(r.artifactDigest))
return undefined;
if (typeof r.packId !== "string" || !r.packId.trim() || r.packId.length > 200)
return undefined;
if (r.assemblyApi !== 1)
return undefined;
if (r.activatedBy !== "session_start" && r.activatedBy !== "compaction" && r.activatedBy !== "legacy_migration")
return undefined;
const centerArtifactDigest = typeof r.centerArtifactDigest === "string" && /^sha256:[0-9a-f]{64}$/.test(r.centerArtifactDigest) ? r.centerArtifactDigest : undefined;
const sourceRevision = typeof r.sourceRevision === "string" && r.sourceRevision.length > 0 && r.sourceRevision.length <= 500 ? r.sourceRevision : undefined;
return {
epoch: r.epoch,
artifactDigest: r.artifactDigest,
packId: r.packId,
assemblyApi: 1,
activatedBy: r.activatedBy,
...(centerArtifactDigest !== undefined ? { centerArtifactDigest } : {}),
...(centerArtifactDigest !== undefined && sourceRevision !== undefined ? { sourceRevision } : {}),
};
}