noa-receipt
Version:
NOA Agent Action Receipt — open, offline-verifiable provenance for AI-agent actions. The governance/receipt organ only; the NOA brain is separate and proprietary.
36 lines (35 loc) • 1.17 kB
JavaScript
import { canonicalize } from "../jcs.js";
import { sha256Prefixed } from "../hash.js";
import { isArray, setToArray, setAdd, newSet, arraySort, publishArray } from "../intrinsics.js";
export const POLICY_SPEC = "noa.policy/0.2";
export const DEFAULT_VERDICT = "DENY";
export function policyHash(p) {
return sha256Prefixed(canonicalize(p));
}
function readSetInert(p) {
const s = newSet(isArray(p.requiredPaths) ? p.requiredPaths : []);
const walk = (c) => {
if ("clauses" in c) {
for (let i = 0; i < c.clauses.length; i++)
walk(c.clauses[i]);
}
else if ("clause" in c)
walk(c.clause);
else if (typeof c.path === "string")
setAdd(s, c.path);
};
if (isArray(p.rules)) {
for (let i = 0; i < p.rules.length; i++) {
const r = p.rules[i];
if (r && typeof r === "object" && "when" in r)
walk(r.when);
}
}
return arraySort(setToArray(s));
}
export function readSet(p) {
return publishArray(readSetInert(p));
}
export function readSetHash(p) {
return sha256Prefixed(canonicalize(readSetInert(p)));
}