@mneme-ai/core 2.22.1 → 2.22.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/agent_manifest.d.ts +1 -1
  2. package/dist/agent_manifest.d.ts.map +1 -1
  3. package/dist/agent_manifest.js +14 -1
  4. package/dist/agent_manifest.js.map +1 -1
  5. package/dist/challenger_librarian/catalog.d.ts +43 -0
  6. package/dist/challenger_librarian/catalog.d.ts.map +1 -0
  7. package/dist/challenger_librarian/catalog.js +120 -0
  8. package/dist/challenger_librarian/catalog.js.map +1 -0
  9. package/dist/challenger_librarian/challenger_librarian.test.d.ts +2 -0
  10. package/dist/challenger_librarian/challenger_librarian.test.d.ts.map +1 -0
  11. package/dist/challenger_librarian/challenger_librarian.test.js +87 -0
  12. package/dist/challenger_librarian/challenger_librarian.test.js.map +1 -0
  13. package/dist/challenger_librarian/index.d.ts +49 -0
  14. package/dist/challenger_librarian/index.d.ts.map +1 -0
  15. package/dist/challenger_librarian/index.js +182 -0
  16. package/dist/challenger_librarian/index.js.map +1 -0
  17. package/dist/dimensional_oracle/dimensional_oracle.test.d.ts +2 -0
  18. package/dist/dimensional_oracle/dimensional_oracle.test.d.ts.map +1 -0
  19. package/dist/dimensional_oracle/dimensional_oracle.test.js +100 -0
  20. package/dist/dimensional_oracle/dimensional_oracle.test.js.map +1 -0
  21. package/dist/dimensional_oracle/index.d.ts +62 -0
  22. package/dist/dimensional_oracle/index.d.ts.map +1 -0
  23. package/dist/dimensional_oracle/index.js +182 -0
  24. package/dist/dimensional_oracle/index.js.map +1 -0
  25. package/dist/index.d.ts +4 -0
  26. package/dist/index.d.ts.map +1 -1
  27. package/dist/index.js +29 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/integration_v22_2.test.d.ts +2 -0
  30. package/dist/integration_v22_2.test.d.ts.map +1 -0
  31. package/dist/integration_v22_2.test.js +95 -0
  32. package/dist/integration_v22_2.test.js.map +1 -0
  33. package/dist/mission_recorder/index.d.ts +91 -0
  34. package/dist/mission_recorder/index.d.ts.map +1 -0
  35. package/dist/mission_recorder/index.js +184 -0
  36. package/dist/mission_recorder/index.js.map +1 -0
  37. package/dist/mission_recorder/mission_recorder.test.d.ts +2 -0
  38. package/dist/mission_recorder/mission_recorder.test.d.ts.map +1 -0
  39. package/dist/mission_recorder/mission_recorder.test.js +109 -0
  40. package/dist/mission_recorder/mission_recorder.test.js.map +1 -0
  41. package/dist/overshoot_tracer/index.d.ts +59 -0
  42. package/dist/overshoot_tracer/index.d.ts.map +1 -0
  43. package/dist/overshoot_tracer/index.js +104 -0
  44. package/dist/overshoot_tracer/index.js.map +1 -0
  45. package/dist/overshoot_tracer/overshoot_tracer.test.d.ts +2 -0
  46. package/dist/overshoot_tracer/overshoot_tracer.test.d.ts.map +1 -0
  47. package/dist/overshoot_tracer/overshoot_tracer.test.js +69 -0
  48. package/dist/overshoot_tracer/overshoot_tracer.test.js.map +1 -0
  49. package/package.json +1 -1
  50. package/dist/cosmic/aurelian.bench.d.ts +0 -25
  51. package/dist/cosmic/aurelian.bench.d.ts.map +0 -1
  52. package/dist/cosmic/aurelian.bench.js +0 -127
  53. package/dist/cosmic/aurelian.bench.js.map +0 -1
@@ -0,0 +1,91 @@
1
+ /**
2
+ * v2.22.2 — MISSION RECORDER.
3
+ *
4
+ * Black-box for AI-agent decision flows. Every recorded event is:
5
+ * - Monotonically time-stamped (Lamport counter as fallback; NTP
6
+ * timestamps when caller supplies them)
7
+ * - HMAC-chain-linked (`prev` references the previous event's sig)
8
+ * - Causal-DAG-linked (`causedBy[]` references parent event IDs;
9
+ * forms a directed acyclic graph across logical chains)
10
+ * - Tamper-evident (chain verification surfaces broken indices)
11
+ *
12
+ * Replay engine: given a starting event ID, walk forward through the
13
+ * causal DAG, returning the ordered chain. For verbs whose contract
14
+ * is `read-only`, the replay engine can re-execute deterministically
15
+ * (caller supplies the executor function).
16
+ *
17
+ * Composes with:
18
+ * - conductor (extends conductor receipts with causal links)
19
+ * - consent_fabric (events log as Consent Fabric receipts too)
20
+ * - overshoot_tracer (compares planned plan to recorded trace)
21
+ */
22
+ export interface MissionEvent {
23
+ v: 1;
24
+ /** Stable id. */
25
+ id: string;
26
+ /** ISO timestamp. */
27
+ ts: string;
28
+ /** Monotonic Lamport counter. */
29
+ lamport: number;
30
+ /** Optional NTP-anchored unix nanos. */
31
+ ntpNanos?: string;
32
+ /** Event kind. */
33
+ kind: string;
34
+ /** Optional verb / actor / surface. */
35
+ verb?: string;
36
+ actor?: string;
37
+ /** Free-form metadata (already privacy-redacted by caller). */
38
+ meta?: Record<string, unknown>;
39
+ /** Parent event IDs this event was caused by. */
40
+ causedBy: string[];
41
+ /** Previous event sig in this file (chain). */
42
+ prev: string;
43
+ /** HMAC sig. */
44
+ sig: string;
45
+ }
46
+ export interface RecordOptions {
47
+ kind: string;
48
+ verb?: string;
49
+ actor?: string;
50
+ meta?: Record<string, unknown>;
51
+ /** Parent event IDs (forms the causal DAG). */
52
+ causedBy?: string[];
53
+ /** Optional NTP anchor; format: unix nanoseconds as decimal string. */
54
+ ntpNanos?: string;
55
+ }
56
+ /** Record one event. Monotonic via Lamport counter; HMAC-chained via
57
+ * `prev`; causal-DAG via `causedBy`. */
58
+ export declare function recordEvent(repoRoot: string, opts: RecordOptions): MissionEvent;
59
+ export declare function listEvents(repoRoot: string): MissionEvent[];
60
+ export declare function findEvent(repoRoot: string, id: string): MissionEvent | null;
61
+ /** Walk forward through the causal DAG from a starting event, returning
62
+ * the ordered chain (BFS). Each event is included at most once even
63
+ * if it has multiple predecessors. */
64
+ export declare function traceCausalChain(repoRoot: string, fromId: string, maxDepth?: number): MissionEvent[];
65
+ /** Verify the chain integrity end-to-end. Returns `{ok}` or first
66
+ * broken index + reason. */
67
+ export declare function verifyChain(repoRoot: string): {
68
+ ok: boolean;
69
+ brokenAt?: number;
70
+ reason?: string;
71
+ };
72
+ /** Replay a causal chain by re-invoking the caller-supplied executor
73
+ * for each event in order. The executor receives the original event
74
+ * and may produce a synthetic outcome. Suitable only for verbs whose
75
+ * effects are deterministic from `meta`. Caller is responsible for
76
+ * enforcing that constraint. */
77
+ export interface ReplayOutcome {
78
+ eventId: string;
79
+ ok: boolean;
80
+ detail?: string;
81
+ }
82
+ export type ReplayExecutor = (ev: MissionEvent) => Promise<{
83
+ ok: boolean;
84
+ detail?: string;
85
+ }> | {
86
+ ok: boolean;
87
+ detail?: string;
88
+ };
89
+ export declare function replayFrom(repoRoot: string, fromId: string, exec: ReplayExecutor): Promise<ReplayOutcome[]>;
90
+ export declare function formatChain(events: MissionEvent[]): string;
91
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/mission_recorder/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAWH,MAAM,WAAW,YAAY;IAC3B,CAAC,EAAE,CAAC,CAAC;IACL,iBAAiB;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+DAA+D;IAC/D,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,iDAAiD;IACjD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAiCD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;yCACyC;AACzC,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,YAAY,CAqB/E;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAM3D;AAED,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAE3E;AAED;;uCAEuC;AACvC,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,SAAK,GAAG,YAAY,EAAE,CAyBhG;AAED;6BAC6B;AAC7B,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiBjG;AAED;;;;iCAIiC;AACjC,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,cAAc,GAAG,CAAC,EAAE,EAAE,YAAY,KAAK,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhI,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CASjH;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAQ1D"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * v2.22.2 — MISSION RECORDER.
3
+ *
4
+ * Black-box for AI-agent decision flows. Every recorded event is:
5
+ * - Monotonically time-stamped (Lamport counter as fallback; NTP
6
+ * timestamps when caller supplies them)
7
+ * - HMAC-chain-linked (`prev` references the previous event's sig)
8
+ * - Causal-DAG-linked (`causedBy[]` references parent event IDs;
9
+ * forms a directed acyclic graph across logical chains)
10
+ * - Tamper-evident (chain verification surfaces broken indices)
11
+ *
12
+ * Replay engine: given a starting event ID, walk forward through the
13
+ * causal DAG, returning the ordered chain. For verbs whose contract
14
+ * is `read-only`, the replay engine can re-execute deterministically
15
+ * (caller supplies the executor function).
16
+ *
17
+ * Composes with:
18
+ * - conductor (extends conductor receipts with causal links)
19
+ * - consent_fabric (events log as Consent Fabric receipts too)
20
+ * - overshoot_tracer (compares planned plan to recorded trace)
21
+ */
22
+ import { existsSync, readFileSync, appendFileSync, mkdirSync, writeFileSync } from "node:fs";
23
+ import { join } from "node:path";
24
+ import { createHmac, randomBytes } from "node:crypto";
25
+ const DIR = ".mneme/mission_recorder";
26
+ const LOG = "events.jsonl";
27
+ const KEY_FILE = "recorder.key";
28
+ const CLOCK_FILE = "lamport.json";
29
+ function dir(repoRoot) {
30
+ const d = join(repoRoot, DIR);
31
+ if (!existsSync(d))
32
+ mkdirSync(d, { recursive: true });
33
+ return d;
34
+ }
35
+ function key(repoRoot) {
36
+ const p = join(dir(repoRoot), KEY_FILE);
37
+ if (existsSync(p))
38
+ return readFileSync(p, "utf8").trim();
39
+ const k = randomBytes(32).toString("base64url");
40
+ writeFileSync(p, k, "utf8");
41
+ return k;
42
+ }
43
+ function sign(payload, k) {
44
+ return createHmac("sha256", k).update(payload).digest("base64url").slice(0, 22);
45
+ }
46
+ function logPath(repoRoot) { return join(dir(repoRoot), LOG); }
47
+ function clockPath(repoRoot) { return join(dir(repoRoot), CLOCK_FILE); }
48
+ function readLamport(repoRoot) {
49
+ const p = clockPath(repoRoot);
50
+ if (!existsSync(p))
51
+ return 0;
52
+ try {
53
+ return JSON.parse(readFileSync(p, "utf8")).c ?? 0;
54
+ }
55
+ catch {
56
+ return 0;
57
+ }
58
+ }
59
+ function writeLamport(repoRoot, c) {
60
+ writeFileSync(clockPath(repoRoot), JSON.stringify({ c }), "utf8");
61
+ }
62
+ /** Record one event. Monotonic via Lamport counter; HMAC-chained via
63
+ * `prev`; causal-DAG via `causedBy`. */
64
+ export function recordEvent(repoRoot, opts) {
65
+ const k = key(repoRoot);
66
+ const all = listEvents(repoRoot);
67
+ const lamport = Math.max(readLamport(repoRoot), all.length > 0 ? all[all.length - 1].lamport : 0) + 1;
68
+ writeLamport(repoRoot, lamport);
69
+ const ts = new Date().toISOString();
70
+ const id = "ev_" + randomBytes(4).toString("hex");
71
+ const causedBy = opts.causedBy ?? [];
72
+ const prev = all.length > 0 ? all[all.length - 1].sig : "genesis";
73
+ const metaJson = opts.meta ? JSON.stringify(opts.meta) : "";
74
+ const canonical = `${ts}|${lamport}|${opts.kind}|${opts.verb ?? ""}|${opts.actor ?? ""}|${metaJson}|${causedBy.join(",")}|${prev}`;
75
+ const sig = sign(canonical, k);
76
+ const ev = {
77
+ v: 1, id, ts, lamport, kind: opts.kind, causedBy, prev, sig,
78
+ ...(opts.verb ? { verb: opts.verb } : {}),
79
+ ...(opts.actor ? { actor: opts.actor } : {}),
80
+ ...(opts.meta ? { meta: opts.meta } : {}),
81
+ ...(opts.ntpNanos ? { ntpNanos: opts.ntpNanos } : {}),
82
+ };
83
+ appendFileSync(logPath(repoRoot), JSON.stringify(ev) + "\n", "utf8");
84
+ return ev;
85
+ }
86
+ export function listEvents(repoRoot) {
87
+ const p = logPath(repoRoot);
88
+ if (!existsSync(p))
89
+ return [];
90
+ try {
91
+ return readFileSync(p, "utf8").trim().split("\n").map((l) => { try {
92
+ return JSON.parse(l);
93
+ }
94
+ catch {
95
+ return null;
96
+ } }).filter((e) => !!e);
97
+ }
98
+ catch {
99
+ return [];
100
+ }
101
+ }
102
+ export function findEvent(repoRoot, id) {
103
+ return listEvents(repoRoot).find((e) => e.id === id) ?? null;
104
+ }
105
+ /** Walk forward through the causal DAG from a starting event, returning
106
+ * the ordered chain (BFS). Each event is included at most once even
107
+ * if it has multiple predecessors. */
108
+ export function traceCausalChain(repoRoot, fromId, maxDepth = 32) {
109
+ const all = listEvents(repoRoot);
110
+ const byId = new Map(all.map((e) => [e.id, e]));
111
+ const visited = new Set();
112
+ const out = [];
113
+ const seedById = new Map(); // id → list of children
114
+ for (const e of all) {
115
+ for (const parent of e.causedBy) {
116
+ if (!seedById.has(parent))
117
+ seedById.set(parent, []);
118
+ seedById.get(parent).push(e.id);
119
+ }
120
+ }
121
+ const queue = [{ id: fromId, depth: 0 }];
122
+ while (queue.length > 0) {
123
+ const { id, depth } = queue.shift();
124
+ if (visited.has(id))
125
+ continue;
126
+ visited.add(id);
127
+ const ev = byId.get(id);
128
+ if (!ev)
129
+ continue;
130
+ out.push(ev);
131
+ if (depth >= maxDepth)
132
+ continue;
133
+ const children = seedById.get(id) ?? [];
134
+ for (const c of children)
135
+ queue.push({ id: c, depth: depth + 1 });
136
+ }
137
+ return out;
138
+ }
139
+ /** Verify the chain integrity end-to-end. Returns `{ok}` or first
140
+ * broken index + reason. */
141
+ export function verifyChain(repoRoot) {
142
+ const all = listEvents(repoRoot);
143
+ if (all.length === 0)
144
+ return { ok: true };
145
+ const k = key(repoRoot);
146
+ let lastSig = "genesis";
147
+ let lastLamport = 0;
148
+ for (let i = 0; i < all.length; i++) {
149
+ const e = all[i];
150
+ if (e.prev !== lastSig)
151
+ return { ok: false, brokenAt: i, reason: `event ${i} prev=${e.prev.slice(0, 8)} expected ${lastSig.slice(0, 8)}` };
152
+ if (e.lamport <= lastLamport)
153
+ return { ok: false, brokenAt: i, reason: `event ${i} lamport=${e.lamport} did not advance past ${lastLamport}` };
154
+ const metaJson = e.meta ? JSON.stringify(e.meta) : "";
155
+ const canonical = `${e.ts}|${e.lamport}|${e.kind}|${e.verb ?? ""}|${e.actor ?? ""}|${metaJson}|${e.causedBy.join(",")}|${e.prev}`;
156
+ if (sign(canonical, k) !== e.sig)
157
+ return { ok: false, brokenAt: i, reason: `event ${i} signature mismatch` };
158
+ lastSig = e.sig;
159
+ lastLamport = e.lamport;
160
+ }
161
+ return { ok: true };
162
+ }
163
+ export async function replayFrom(repoRoot, fromId, exec) {
164
+ const chain = traceCausalChain(repoRoot, fromId);
165
+ const out = [];
166
+ for (const ev of chain) {
167
+ const r = await exec(ev);
168
+ out.push({ eventId: ev.id, ok: r.ok, ...(r.detail ? { detail: r.detail } : {}) });
169
+ if (!r.ok)
170
+ break;
171
+ }
172
+ return out;
173
+ }
174
+ export function formatChain(events) {
175
+ if (events.length === 0)
176
+ return "🛰 MISSION RECORDER — empty chain";
177
+ const lines = [`🛰 MISSION RECORDER — ${events.length} event(s)`, ""];
178
+ for (const e of events) {
179
+ const causes = e.causedBy.length > 0 ? `←${e.causedBy.map((c) => c.slice(-4)).join(",")}` : "";
180
+ lines.push(` L${e.lamport.toString().padStart(4)} ${e.id} ${e.kind.padEnd(20)} ${e.verb ?? ""} ${causes}`);
181
+ }
182
+ return lines.join("\n");
183
+ }
184
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mission_recorder/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=mission_recorder.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission_recorder.test.d.ts","sourceRoot":"","sources":["../../src/mission_recorder/mission_recorder.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,109 @@
1
+ import { describe, expect, it, beforeEach, afterEach } from "vitest";
2
+ import { mkdtempSync, rmSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { tmpdir } from "node:os";
4
+ import { join } from "node:path";
5
+ import { recordEvent, listEvents, findEvent, traceCausalChain, verifyChain, replayFrom, formatChain } from "./index.js";
6
+ describe("mission recorder (v2.22.2)", () => {
7
+ let repo;
8
+ beforeEach(() => { repo = mkdtempSync(join(tmpdir(), "mneme-mr-")); });
9
+ afterEach(() => { try {
10
+ rmSync(repo, { recursive: true, force: true });
11
+ }
12
+ catch { /* */ } });
13
+ describe("recordEvent + chain integrity", () => {
14
+ it("first event has prev=genesis and lamport=1", () => {
15
+ const e = recordEvent(repo, { kind: "test" });
16
+ expect(e.prev).toBe("genesis");
17
+ expect(e.lamport).toBe(1);
18
+ });
19
+ it("subsequent events chain by prev sig + advance lamport", () => {
20
+ const e1 = recordEvent(repo, { kind: "a" });
21
+ const e2 = recordEvent(repo, { kind: "b" });
22
+ expect(e2.prev).toBe(e1.sig);
23
+ expect(e2.lamport).toBeGreaterThan(e1.lamport);
24
+ });
25
+ it("verifyChain returns ok on untouched ledger", () => {
26
+ recordEvent(repo, { kind: "a" });
27
+ recordEvent(repo, { kind: "b" });
28
+ recordEvent(repo, { kind: "c" });
29
+ expect(verifyChain(repo).ok).toBe(true);
30
+ });
31
+ it("verifyChain detects tamper at correct index", () => {
32
+ recordEvent(repo, { kind: "a" });
33
+ recordEvent(repo, { kind: "b" });
34
+ recordEvent(repo, { kind: "c" });
35
+ const p = join(repo, ".mneme/mission_recorder/events.jsonl");
36
+ const lines = readFileSync(p, "utf8").split("\n");
37
+ const j = JSON.parse(lines[1]);
38
+ j.kind = "TAMPERED";
39
+ lines[1] = JSON.stringify(j);
40
+ writeFileSync(p, lines.join("\n"), "utf8");
41
+ const v = verifyChain(repo);
42
+ expect(v.ok).toBe(false);
43
+ expect(v.brokenAt).toBe(1);
44
+ });
45
+ });
46
+ describe("causal DAG", () => {
47
+ it("causedBy + traceCausalChain walks forward through DAG", () => {
48
+ const root = recordEvent(repo, { kind: "root" });
49
+ const a = recordEvent(repo, { kind: "a", causedBy: [root.id] });
50
+ const b = recordEvent(repo, { kind: "b", causedBy: [a.id] });
51
+ const c = recordEvent(repo, { kind: "c", causedBy: [a.id] });
52
+ const chain = traceCausalChain(repo, root.id);
53
+ const ids = chain.map((e) => e.id);
54
+ expect(ids).toContain(root.id);
55
+ expect(ids).toContain(a.id);
56
+ expect(ids).toContain(b.id);
57
+ expect(ids).toContain(c.id);
58
+ });
59
+ it("traceCausalChain doesn't double-visit on diamond-shape DAG", () => {
60
+ const root = recordEvent(repo, { kind: "root" });
61
+ const a = recordEvent(repo, { kind: "a", causedBy: [root.id] });
62
+ const b = recordEvent(repo, { kind: "b", causedBy: [root.id] });
63
+ const join_ = recordEvent(repo, { kind: "join", causedBy: [a.id, b.id] });
64
+ const chain = traceCausalChain(repo, root.id);
65
+ // join should appear once even though it has two parents.
66
+ const joins = chain.filter((e) => e.id === join_.id);
67
+ expect(joins.length).toBe(1);
68
+ });
69
+ });
70
+ describe("findEvent + formatters", () => {
71
+ it("findEvent returns the event by id", () => {
72
+ const e = recordEvent(repo, { kind: "a" });
73
+ expect(findEvent(repo, e.id)?.kind).toBe("a");
74
+ expect(findEvent(repo, "nope")).toBeNull();
75
+ });
76
+ it("listEvents returns all + formatChain renders Lamport + verb + causes", () => {
77
+ const a = recordEvent(repo, { kind: "a", verb: "verify-self" });
78
+ const b = recordEvent(repo, { kind: "b", verb: "earthquake", causedBy: [a.id] });
79
+ const out = formatChain(listEvents(repo));
80
+ expect(out).toContain("MISSION RECORDER");
81
+ expect(out).toContain("verify-self");
82
+ expect(out).toContain("earthquake");
83
+ void b;
84
+ });
85
+ });
86
+ describe("replay", () => {
87
+ it("replayFrom invokes executor for each event in chain", async () => {
88
+ const root = recordEvent(repo, { kind: "root" });
89
+ const a = recordEvent(repo, { kind: "a", causedBy: [root.id] });
90
+ const b = recordEvent(repo, { kind: "b", causedBy: [a.id] });
91
+ let seen = 0;
92
+ const out = await replayFrom(repo, root.id, async () => { seen++; return { ok: true }; });
93
+ expect(out.length).toBe(3);
94
+ expect(seen).toBe(3);
95
+ void b;
96
+ });
97
+ it("replayFrom stops on first executor failure", async () => {
98
+ const root = recordEvent(repo, { kind: "root" });
99
+ const a = recordEvent(repo, { kind: "a", causedBy: [root.id] });
100
+ const b = recordEvent(repo, { kind: "b", causedBy: [a.id] });
101
+ const out = await replayFrom(repo, root.id, async (ev) => ev.kind === "a" ? { ok: false, detail: "boom" } : { ok: true });
102
+ expect(out[out.length - 1]?.ok).toBe(false);
103
+ // Should not have visited the third event.
104
+ expect(out.length).toBeLessThanOrEqual(2);
105
+ void b;
106
+ });
107
+ });
108
+ });
109
+ //# sourceMappingURL=mission_recorder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission_recorder.test.js","sourceRoot":"","sources":["../../src/mission_recorder/mission_recorder.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * v2.22.2 — OVERSHOOT TRACER.
3
+ *
4
+ * Compare what an AI agent PLANNED to do (output of conductor.plan)
5
+ * versus what it ACTUALLY did (sequence of mission-recorder events).
6
+ * Surfaces:
7
+ * - Verbs invoked that were not in the plan (scope creep)
8
+ * - Verbs invoked with extra/changed args (silent mutation)
9
+ * - Sequence length overrun (more steps than planned)
10
+ *
11
+ * Returns an overshoot score 0-1 + a per-step diff. AI agents that
12
+ * cross a configurable threshold can be auto-killed by the caller
13
+ * (the tracer never kills; that's policy at the caller).
14
+ *
15
+ * Composes:
16
+ * - conductor.plan (the planned sequence)
17
+ * - mission_recorder (the actual trace)
18
+ */
19
+ export interface PlanStepLite {
20
+ verb: string;
21
+ args?: Record<string, unknown>;
22
+ }
23
+ export interface ActualStepLite {
24
+ verb: string;
25
+ args?: Record<string, unknown>;
26
+ eventId?: string;
27
+ }
28
+ export interface OvershootEntry {
29
+ index: number;
30
+ verb: string;
31
+ kind: "extra-step" | "verb-mismatch" | "arg-mismatch" | "missing-step" | "ok";
32
+ detail: string;
33
+ }
34
+ export interface OvershootReport {
35
+ v: 1;
36
+ /** Number of planned steps. */
37
+ plannedCount: number;
38
+ /** Number of actually executed steps. */
39
+ actualCount: number;
40
+ /** Per-step alignment outcomes. */
41
+ entries: OvershootEntry[];
42
+ /** Aggregate overshoot score 0-1. 0 = fully aligned, 1 = fully diverged. */
43
+ score: number;
44
+ /** Caller-facing band. */
45
+ band: "ALIGNED" | "WANDER" | "OVERSHOOT" | "RUNAWAY";
46
+ /** Whether the caller's kill-switch threshold has been crossed. */
47
+ killSwitch: boolean;
48
+ /** Plain-English summary. */
49
+ rationale: string;
50
+ }
51
+ export interface TraceOptions {
52
+ /** Score threshold above which `killSwitch=true`. Default 0.5. */
53
+ killThreshold?: number;
54
+ /** Whether to require args to match too. Default true. */
55
+ strictArgs?: boolean;
56
+ }
57
+ export declare function traceOvershoot(planned: PlanStepLite[], actual: ActualStepLite[], opts?: TraceOptions): OvershootReport;
58
+ export declare function formatReport(r: OvershootReport): string;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/overshoot_tracer/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,GAAG,IAAI,CAAC;IAC9E,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,EAAE,CAAC,CAAC;IACL,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,mCAAmC;IACnC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAC;IACd,0BAA0B;IAC1B,IAAI,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;IACrD,mEAAmE;IACnE,UAAU,EAAE,OAAO,CAAC;IACpB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,kEAAkE;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0DAA0D;IAC1D,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAaD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,IAAI,GAAE,YAAiB,GAAG,eAAe,CAkD1H;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAqBvD"}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * v2.22.2 — OVERSHOOT TRACER.
3
+ *
4
+ * Compare what an AI agent PLANNED to do (output of conductor.plan)
5
+ * versus what it ACTUALLY did (sequence of mission-recorder events).
6
+ * Surfaces:
7
+ * - Verbs invoked that were not in the plan (scope creep)
8
+ * - Verbs invoked with extra/changed args (silent mutation)
9
+ * - Sequence length overrun (more steps than planned)
10
+ *
11
+ * Returns an overshoot score 0-1 + a per-step diff. AI agents that
12
+ * cross a configurable threshold can be auto-killed by the caller
13
+ * (the tracer never kills; that's policy at the caller).
14
+ *
15
+ * Composes:
16
+ * - conductor.plan (the planned sequence)
17
+ * - mission_recorder (the actual trace)
18
+ */
19
+ function argsEqual(a, b) {
20
+ const ka = Object.keys(a ?? {}).sort();
21
+ const kb = Object.keys(b ?? {}).sort();
22
+ if (ka.length !== kb.length)
23
+ return false;
24
+ for (let i = 0; i < ka.length; i++) {
25
+ if (ka[i] !== kb[i])
26
+ return false;
27
+ if ((a ?? {})[ka[i]] !== (b ?? {})[kb[i]])
28
+ return false;
29
+ }
30
+ return true;
31
+ }
32
+ export function traceOvershoot(planned, actual, opts = {}) {
33
+ const killThreshold = opts.killThreshold ?? 0.5;
34
+ const strictArgs = opts.strictArgs !== false;
35
+ const entries = [];
36
+ const n = Math.max(planned.length, actual.length);
37
+ let mismatch = 0;
38
+ for (let i = 0; i < n; i++) {
39
+ const p = planned[i];
40
+ const a = actual[i];
41
+ if (!p && a) {
42
+ entries.push({ index: i, verb: a.verb, kind: "extra-step", detail: `actual step ${i} (${a.verb}) was not in the plan` });
43
+ mismatch++;
44
+ continue;
45
+ }
46
+ if (p && !a) {
47
+ entries.push({ index: i, verb: p.verb, kind: "missing-step", detail: `planned step ${i} (${p.verb}) was not executed` });
48
+ mismatch++;
49
+ continue;
50
+ }
51
+ if (p.verb !== a.verb) {
52
+ entries.push({ index: i, verb: a.verb, kind: "verb-mismatch", detail: `planned ${p.verb}, actual ${a.verb}` });
53
+ mismatch++;
54
+ continue;
55
+ }
56
+ if (strictArgs && !argsEqual(p.args, a.args)) {
57
+ entries.push({ index: i, verb: a.verb, kind: "arg-mismatch", detail: `planned args ${JSON.stringify(p.args ?? {})}, actual ${JSON.stringify(a.args ?? {})}` });
58
+ mismatch++;
59
+ continue;
60
+ }
61
+ entries.push({ index: i, verb: a.verb, kind: "ok", detail: "exact match" });
62
+ }
63
+ const score = n === 0 ? 0 : mismatch / n;
64
+ const band = score === 0 ? "ALIGNED"
65
+ : score < 0.25 ? "WANDER"
66
+ : score < 0.75 ? "OVERSHOOT"
67
+ : "RUNAWAY";
68
+ const killSwitch = score >= killThreshold;
69
+ return {
70
+ v: 1,
71
+ plannedCount: planned.length,
72
+ actualCount: actual.length,
73
+ entries,
74
+ score,
75
+ band,
76
+ killSwitch,
77
+ rationale: band === "ALIGNED"
78
+ ? `Actual execution matches the plan exactly (${planned.length} steps).`
79
+ : `${mismatch}/${n} step mismatch (score=${score.toFixed(2)}, band=${band}${killSwitch ? ", kill-switch armed" : ""}).`,
80
+ };
81
+ }
82
+ export function formatReport(r) {
83
+ const badge = r.band === "ALIGNED" ? "✓" : r.band === "WANDER" ? "⚠" : r.band === "OVERSHOOT" ? "✗" : "🚨";
84
+ const lines = [
85
+ `🛑 OVERSHOOT TRACER — ${badge} ${r.band}`,
86
+ "",
87
+ ` ${r.rationale}`,
88
+ "",
89
+ ` Plan steps: ${r.plannedCount}`,
90
+ ` Actual steps: ${r.actualCount}`,
91
+ ` Score: ${r.score.toFixed(3)} (0=aligned, 1=fully diverged)`,
92
+ ` Kill-switch: ${r.killSwitch ? "ARMED" : "off"}`,
93
+ ];
94
+ if (r.entries.length > 0) {
95
+ lines.push("");
96
+ lines.push(" Per-step:");
97
+ for (const e of r.entries) {
98
+ const sym = e.kind === "ok" ? "✓" : "✗";
99
+ lines.push(` ${sym} step ${e.index}: ${e.kind} — ${e.detail}`);
100
+ }
101
+ }
102
+ return lines.join("\n");
103
+ }
104
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/overshoot_tracer/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=overshoot_tracer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overshoot_tracer.test.d.ts","sourceRoot":"","sources":["../../src/overshoot_tracer/overshoot_tracer.test.ts"],"names":[],"mappings":""}