@mneme-ai/core 2.66.0 โ†’ 2.67.0

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 (75) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +5 -0
  4. package/dist/index.js.map +1 -1
  5. package/dist/protoplasm/auto_wrap.d.ts +33 -0
  6. package/dist/protoplasm/auto_wrap.d.ts.map +1 -0
  7. package/dist/protoplasm/auto_wrap.js +72 -0
  8. package/dist/protoplasm/auto_wrap.js.map +1 -0
  9. package/dist/protoplasm/crawl_planner.d.ts +14 -0
  10. package/dist/protoplasm/crawl_planner.d.ts.map +1 -0
  11. package/dist/protoplasm/crawl_planner.js +50 -0
  12. package/dist/protoplasm/crawl_planner.js.map +1 -0
  13. package/dist/protoplasm/findings_ledger.d.ts +19 -0
  14. package/dist/protoplasm/findings_ledger.d.ts.map +1 -0
  15. package/dist/protoplasm/findings_ledger.js +81 -0
  16. package/dist/protoplasm/findings_ledger.js.map +1 -0
  17. package/dist/protoplasm/ghost_cell.d.ts +30 -0
  18. package/dist/protoplasm/ghost_cell.d.ts.map +1 -0
  19. package/dist/protoplasm/ghost_cell.js +95 -0
  20. package/dist/protoplasm/ghost_cell.js.map +1 -0
  21. package/dist/protoplasm/immortal.test.d.ts +12 -0
  22. package/dist/protoplasm/immortal.test.d.ts.map +1 -0
  23. package/dist/protoplasm/immortal.test.js +118 -0
  24. package/dist/protoplasm/immortal.test.js.map +1 -0
  25. package/dist/protoplasm/index.d.ts +42 -0
  26. package/dist/protoplasm/index.d.ts.map +1 -0
  27. package/dist/protoplasm/index.js +42 -0
  28. package/dist/protoplasm/index.js.map +1 -0
  29. package/dist/protoplasm/orchestrator.d.ts +29 -0
  30. package/dist/protoplasm/orchestrator.d.ts.map +1 -0
  31. package/dist/protoplasm/orchestrator.js +60 -0
  32. package/dist/protoplasm/orchestrator.js.map +1 -0
  33. package/dist/protoplasm/parasite.d.ts +42 -0
  34. package/dist/protoplasm/parasite.d.ts.map +1 -0
  35. package/dist/protoplasm/parasite.js +69 -0
  36. package/dist/protoplasm/parasite.js.map +1 -0
  37. package/dist/protoplasm/phoenix_hook.d.ts +49 -0
  38. package/dist/protoplasm/phoenix_hook.d.ts.map +1 -0
  39. package/dist/protoplasm/phoenix_hook.js +64 -0
  40. package/dist/protoplasm/phoenix_hook.js.map +1 -0
  41. package/dist/protoplasm/protoplasm.test.d.ts +13 -0
  42. package/dist/protoplasm/protoplasm.test.d.ts.map +1 -0
  43. package/dist/protoplasm/protoplasm.test.js +142 -0
  44. package/dist/protoplasm/protoplasm.test.js.map +1 -0
  45. package/dist/protoplasm/quantum_probe.d.ts +21 -0
  46. package/dist/protoplasm/quantum_probe.d.ts.map +1 -0
  47. package/dist/protoplasm/quantum_probe.js +118 -0
  48. package/dist/protoplasm/quantum_probe.js.map +1 -0
  49. package/dist/protoplasm/seamless_boot.d.ts +28 -0
  50. package/dist/protoplasm/seamless_boot.d.ts.map +1 -0
  51. package/dist/protoplasm/seamless_boot.js +106 -0
  52. package/dist/protoplasm/seamless_boot.js.map +1 -0
  53. package/dist/protoplasm/super_quan_probe.d.ts +24 -0
  54. package/dist/protoplasm/super_quan_probe.d.ts.map +1 -0
  55. package/dist/protoplasm/super_quan_probe.js +132 -0
  56. package/dist/protoplasm/super_quan_probe.js.map +1 -0
  57. package/dist/protoplasm/types.d.ts +84 -0
  58. package/dist/protoplasm/types.d.ts.map +1 -0
  59. package/dist/protoplasm/types.js +9 -0
  60. package/dist/protoplasm/types.js.map +1 -0
  61. package/dist/protoplasm/wal.d.ts +46 -0
  62. package/dist/protoplasm/wal.d.ts.map +1 -0
  63. package/dist/protoplasm/wal.js +145 -0
  64. package/dist/protoplasm/wal.js.map +1 -0
  65. package/dist/protoplasm/wisdom_space.d.ts +30 -0
  66. package/dist/protoplasm/wisdom_space.d.ts.map +1 -0
  67. package/dist/protoplasm/wisdom_space.js +77 -0
  68. package/dist/protoplasm/wisdom_space.js.map +1 -0
  69. package/dist/truth_gate/claims.d.ts.map +1 -1
  70. package/dist/truth_gate/claims.js +18 -0
  71. package/dist/truth_gate/claims.js.map +1 -1
  72. package/dist/truth_gate/probes.d.ts.map +1 -1
  73. package/dist/truth_gate/probes.js +42 -0
  74. package/dist/truth_gate/probes.js.map +1 -1
  75. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ /**
2
+ * ๐Ÿฆ  PROTOPLASM โ€” super_quan_probe decorator
3
+ *
4
+ * The "live atom" that gets embedded in every function:
5
+ * const wrapped = withSuperQuanProbe("module.fn", fn);
6
+ *
7
+ * On every call:
8
+ * - records InvocationSnapshot to in-memory rolling buffer
9
+ * - if buffer reaches probe interval โ†’ run quantum probe โ†’ emit finding
10
+ *
11
+ * Zero behavioral change to wrapped fn. Sync + async supported.
12
+ * Hot-path overhead target: <50ยตs per call (only timing + shape).
13
+ */
14
+ import { buildBaseline, runQuantumProbe } from "./quantum_probe.js";
15
+ import { appendFinding } from "./findings_ledger.js";
16
+ /** Cheap structural fingerprint โ€” count + top-level type pattern, no values. */
17
+ function argShape(args) {
18
+ return Array.from(args, (a) => {
19
+ if (a === null)
20
+ return "null";
21
+ if (a === undefined)
22
+ return "undef";
23
+ if (Array.isArray(a))
24
+ return `arr[${a.length}]`;
25
+ const t = typeof a;
26
+ if (t === "object")
27
+ return `obj{${Object.keys(a).length}}`;
28
+ return t;
29
+ }).join(",");
30
+ }
31
+ function outputShape(value) {
32
+ if (value === null)
33
+ return "null";
34
+ if (value === undefined)
35
+ return "undef";
36
+ if (Array.isArray(value))
37
+ return `arr[${value.length}]`;
38
+ if (typeof value === "object")
39
+ return `obj{${Object.keys(value).length}}`;
40
+ return typeof value;
41
+ }
42
+ const REGISTRY = new Map();
43
+ const PROBE_LISTENERS = [];
44
+ export function onFinding(listener) {
45
+ PROBE_LISTENERS.push(listener);
46
+ return () => { const i = PROBE_LISTENERS.indexOf(listener); if (i >= 0)
47
+ PROBE_LISTENERS.splice(i, 1); };
48
+ }
49
+ function ensureState(fnId) {
50
+ let s = REGISTRY.get(fnId);
51
+ if (!s) {
52
+ s = { buffer: [], baseline: null, callsSinceLastProbe: 0, bufferLimit: 200, probeEveryNCalls: 25 };
53
+ REGISTRY.set(fnId, s);
54
+ }
55
+ return s;
56
+ }
57
+ function record(state, snapshot, cfg) {
58
+ state.buffer.push(snapshot);
59
+ if (state.buffer.length > state.bufferLimit)
60
+ state.buffer.shift();
61
+ state.callsSinceLastProbe++;
62
+ // Rebuild baseline when enough samples; refresh slowly.
63
+ if (state.baseline === null && state.buffer.length >= 5)
64
+ state.baseline = buildBaseline(snapshot.fnId, state.buffer);
65
+ else if (state.baseline !== null && state.buffer.length % 50 === 0)
66
+ state.baseline = buildBaseline(snapshot.fnId, state.buffer);
67
+ if (state.callsSinceLastProbe >= state.probeEveryNCalls && state.baseline && cfg) {
68
+ state.callsSinceLastProbe = 0;
69
+ const recentWindow = state.buffer.slice(-state.probeEveryNCalls);
70
+ const partial = runQuantumProbe(snapshot.fnId, recentWindow, state.baseline, cfg);
71
+ try {
72
+ const finding = appendFinding(cfg.ledgerDir + "/findings.jsonl", partial, cfg.hmacKey);
73
+ PROBE_LISTENERS.forEach((l) => { try {
74
+ l(finding);
75
+ }
76
+ catch { /* ignore */ } });
77
+ }
78
+ catch { /* ledger optional โ€” never block hot path */ }
79
+ }
80
+ }
81
+ export function withSuperQuanProbe(fnId, fn, cfg) {
82
+ const state = ensureState(fnId);
83
+ const wrapped = function (...args) {
84
+ const t0 = performance.now();
85
+ let result;
86
+ let threwClass;
87
+ try {
88
+ result = fn.apply(this, args);
89
+ }
90
+ catch (e) {
91
+ threwClass = e?.constructor?.name ?? "Error";
92
+ record(state, {
93
+ fnId, ts: new Date().toISOString(), durationMs: performance.now() - t0,
94
+ args: { count: args.length, shape: argShape(args) },
95
+ output: { kind: "throw", errorClass: threwClass },
96
+ }, cfg);
97
+ throw e;
98
+ }
99
+ // async case
100
+ if (result && typeof result.then === "function") {
101
+ return result.then((v) => {
102
+ record(state, {
103
+ fnId, ts: new Date().toISOString(), durationMs: performance.now() - t0,
104
+ args: { count: args.length, shape: argShape(args) },
105
+ output: { kind: "ok", shape: outputShape(v) },
106
+ }, cfg);
107
+ return v;
108
+ }, (e) => {
109
+ record(state, {
110
+ fnId, ts: new Date().toISOString(), durationMs: performance.now() - t0,
111
+ args: { count: args.length, shape: argShape(args) },
112
+ output: { kind: "throw", errorClass: e?.constructor?.name ?? "Error" },
113
+ }, cfg);
114
+ throw e;
115
+ });
116
+ }
117
+ // sync case
118
+ record(state, {
119
+ fnId, ts: new Date().toISOString(), durationMs: performance.now() - t0,
120
+ args: { count: args.length, shape: argShape(args) },
121
+ output: { kind: "ok", shape: outputShape(result) },
122
+ }, cfg);
123
+ return result;
124
+ };
125
+ return wrapped;
126
+ }
127
+ /** Snapshot of the registry โ€” for orchestrator / wisdom_space inspection. */
128
+ export function snapshotRegistry() {
129
+ return [...REGISTRY.entries()].map(([fnId, s]) => ({ fnId, samples: s.buffer.length, recent: s.buffer.slice(-25) }));
130
+ }
131
+ export function clearRegistry() { REGISTRY.clear(); }
132
+ //# sourceMappingURL=super_quan_probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"super_quan_probe.js","sourceRoot":"","sources":["../../src/protoplasm/super_quan_probe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * ๐Ÿฆ  PROTOPLASM โ€” types
3
+ *
4
+ * Live atom embedded in every function. Reports super_quan findings to
5
+ * orchestrator. Orchestrator decides: HEALTHY โ†’ crawl-and-learn,
6
+ * BROKEN โ†’ wisdom-space root-cause + heal.
7
+ */
8
+ export type ProbeOutcome = "healthy" | "warn" | "broken";
9
+ /** A single recorded invocation snapshot. */
10
+ export interface InvocationSnapshot {
11
+ fnId: string;
12
+ ts: string;
13
+ durationMs: number;
14
+ args: {
15
+ count: number;
16
+ shape: string;
17
+ };
18
+ output: {
19
+ kind: "ok" | "throw";
20
+ shape?: string;
21
+ errorClass?: string;
22
+ };
23
+ }
24
+ /** Statistical baseline for a single function (rolling). */
25
+ export interface FunctionBaseline {
26
+ fnId: string;
27
+ samples: number;
28
+ durationMean: number;
29
+ durationStdev: number;
30
+ errorRate: number;
31
+ argShapeEntropy: number;
32
+ outputShapeEntropy: number;
33
+ lastUpdate: string;
34
+ }
35
+ /** Result of a single super_quan probe run. */
36
+ export interface SuperQuanFinding {
37
+ fnId: string;
38
+ at: string;
39
+ outcome: ProbeOutcome;
40
+ zScores: Record<string, number>;
41
+ quantumSignals: QuantumSignals;
42
+ rootCauseHints: string[];
43
+ evidence: string;
44
+ hmac: string;
45
+ prev: string;
46
+ }
47
+ /** Quantum-inspired signals (analogues, not literal QM). */
48
+ export interface QuantumSignals {
49
+ /** Shannon entropy of output distribution. Low = collapse to single state. High = decoherence. */
50
+ outputEntropy: number;
51
+ /** Chaos-input divergence โ€” how much the function's output varies given structured perturbation. */
52
+ chaosDivergence: number;
53
+ /** Cross-function correlation โ€” does this function's broken state coincide w/ neighbors? */
54
+ neighborCorrelation: number;
55
+ /** Superposition collapse score โ€” proportion of calls that produce typed output vs throw. */
56
+ collapseStability: number;
57
+ }
58
+ export interface WisdomRootCause {
59
+ fnId: string;
60
+ hypothesis: string;
61
+ upstreamSuspects: string[];
62
+ confidence: number;
63
+ proposedHeal: HealAction[];
64
+ }
65
+ export interface HealAction {
66
+ kind: "retry-with-backoff" | "fallback-to-cached" | "request-supernova-restart" | "raise-truth-gate-block" | "noop";
67
+ rationale: string;
68
+ }
69
+ export interface CrawlPlan {
70
+ trigger: "healthy-burst" | "scheduled" | "manual";
71
+ fnId: string;
72
+ searchTopics: string[];
73
+ budgetMs: number;
74
+ estimatedROI: number;
75
+ }
76
+ export interface ProtoplasmConfig {
77
+ baselineSamplesMin: number;
78
+ zScoreWarn: number;
79
+ zScoreBroken: number;
80
+ ledgerDir: string;
81
+ hmacKey: string;
82
+ crawlOnHealthyEvery: number;
83
+ }
84
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/protoplasm/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzD,6CAA6C;AAC7C,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACvC,MAAM,EAAE;QAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,YAAY,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,cAAc,EAAE,cAAc,CAAC;IAC/B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,4DAA4D;AAC5D,MAAM,WAAW,cAAc;IAC7B,kGAAkG;IAClG,aAAa,EAAE,MAAM,CAAC;IACtB,oGAAoG;IACpG,eAAe,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,mBAAmB,EAAE,MAAM,CAAC;IAC5B,6FAA6F;IAC7F,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,UAAU,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,oBAAoB,GAAG,oBAAoB,GAAG,2BAA2B,GAAG,wBAAwB,GAAG,MAAM,CAAC;IACpH,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,eAAe,GAAG,WAAW,GAAG,QAAQ,CAAC;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,mBAAmB,EAAE,MAAM,CAAC;CAC7B"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * ๐Ÿฆ  PROTOPLASM โ€” types
3
+ *
4
+ * Live atom embedded in every function. Reports super_quan findings to
5
+ * orchestrator. Orchestrator decides: HEALTHY โ†’ crawl-and-learn,
6
+ * BROKEN โ†’ wisdom-space root-cause + heal.
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/protoplasm/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * ๐Ÿฉธ PROTOPLASM โ€” WAL (Write-Ahead Log)
3
+ *
4
+ * Survives uncatchable kills (SIGKILL, SIGSEGV, OS reboot).
5
+ *
6
+ * Strategy: every baseline mutation persists to disk BEFORE RAM update.
7
+ * Process death = baseline survives. Next start reads WAL โ†’ reconstructs.
8
+ *
9
+ * WAL format: append-only JSONL at .mneme/protoplasm/wal.jsonl
10
+ * Each row = { ts, fnId, op, payload, prevHmac, hmac }
11
+ *
12
+ * Compaction: when WAL exceeds 5MB, snapshot baselines to baselines.json
13
+ * + truncate WAL to entries since snapshot.
14
+ */
15
+ import type { FunctionBaseline } from "./types.js";
16
+ export type WalOp = "baseline_set" | "buffer_evict" | "config_set";
17
+ export interface WalRow {
18
+ ts: string;
19
+ fnId: string;
20
+ op: WalOp;
21
+ payload: unknown;
22
+ prevHmac: string;
23
+ hmac: string;
24
+ }
25
+ export declare class Wal {
26
+ private path;
27
+ private secret;
28
+ private lastHmac;
29
+ private compactionThresholdBytes;
30
+ constructor(walDir: string, secret: string);
31
+ private computeLastHmac;
32
+ /** Append op to WAL. Synchronous + flush โ€” survives unexpected death. */
33
+ append(op: WalOp, fnId: string, payload: unknown): WalRow;
34
+ /** Replay WAL โ†’ reconstruct baseline map. Idempotent. */
35
+ replay(): Map<string, FunctionBaseline>;
36
+ /** Verify chain integrity (chain HMAC continuity). */
37
+ verify(): {
38
+ ok: boolean;
39
+ rows: number;
40
+ brokenAt?: number;
41
+ };
42
+ /** Compact WAL โ†’ snapshot if file exceeds threshold. */
43
+ private maybeCompact;
44
+ path_for_test(): string;
45
+ }
46
+ //# sourceMappingURL=wal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../../src/protoplasm/wal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,MAAM,KAAK,GAAG,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC;AAEnE,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,KAAK,CAAC;IACV,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAmBD,qBAAa,GAAG;IACd,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,wBAAwB,CAAmB;gBAEvC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAO1C,OAAO,CAAC,eAAe;IAWvB,yEAAyE;IACzE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM;IAUzD,yDAAyD;IACzD,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAsBvC,sDAAsD;IACtD,MAAM,IAAI;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAiB1D,wDAAwD;IACxD,OAAO,CAAC,YAAY;IAiBpB,aAAa,IAAI,MAAM;CACxB"}
@@ -0,0 +1,145 @@
1
+ /**
2
+ * ๐Ÿฉธ PROTOPLASM โ€” WAL (Write-Ahead Log)
3
+ *
4
+ * Survives uncatchable kills (SIGKILL, SIGSEGV, OS reboot).
5
+ *
6
+ * Strategy: every baseline mutation persists to disk BEFORE RAM update.
7
+ * Process death = baseline survives. Next start reads WAL โ†’ reconstructs.
8
+ *
9
+ * WAL format: append-only JSONL at .mneme/protoplasm/wal.jsonl
10
+ * Each row = { ts, fnId, op, payload, prevHmac, hmac }
11
+ *
12
+ * Compaction: when WAL exceeds 5MB, snapshot baselines to baselines.json
13
+ * + truncate WAL to entries since snapshot.
14
+ */
15
+ import { existsSync, statSync, readFileSync, appendFileSync, writeFileSync, mkdirSync, renameSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ import { createHmac } from "node:crypto";
18
+ /** Recursive canonical JSON: sort all keys at every depth, drop undefined. */
19
+ function canonical(v) {
20
+ if (v === null || typeof v !== "object")
21
+ return v;
22
+ if (Array.isArray(v))
23
+ return v.map(canonical);
24
+ const out = {};
25
+ for (const k of Object.keys(v).sort()) {
26
+ const val = v[k];
27
+ if (val !== undefined)
28
+ out[k] = canonical(val);
29
+ }
30
+ return out;
31
+ }
32
+ function hmacRow(prev, body, secret) {
33
+ const canon = JSON.stringify(canonical(body));
34
+ return createHmac("sha256", secret).update(prev + "::" + canon).digest("hex").slice(0, 16);
35
+ }
36
+ export class Wal {
37
+ path;
38
+ secret;
39
+ lastHmac = "0".repeat(16);
40
+ compactionThresholdBytes = 5 * 1024 * 1024; // 5MB
41
+ constructor(walDir, secret) {
42
+ mkdirSync(walDir, { recursive: true });
43
+ this.path = join(walDir, "wal.jsonl");
44
+ this.secret = secret;
45
+ this.lastHmac = this.computeLastHmac();
46
+ }
47
+ computeLastHmac() {
48
+ if (!existsSync(this.path))
49
+ return "0".repeat(16);
50
+ try {
51
+ const content = readFileSync(this.path, "utf8").trim();
52
+ if (!content)
53
+ return "0".repeat(16);
54
+ const lines = content.split("\n");
55
+ const last = JSON.parse(lines[lines.length - 1]);
56
+ return last.hmac;
57
+ }
58
+ catch {
59
+ return "0".repeat(16);
60
+ }
61
+ }
62
+ /** Append op to WAL. Synchronous + flush โ€” survives unexpected death. */
63
+ append(op, fnId, payload) {
64
+ const body = { ts: new Date().toISOString(), fnId, op, payload, prevHmac: this.lastHmac };
65
+ const hmac = hmacRow(this.lastHmac, body, this.secret);
66
+ const row = { ...body, hmac };
67
+ appendFileSync(this.path, JSON.stringify(row) + "\n", { encoding: "utf8", flush: true });
68
+ this.lastHmac = hmac;
69
+ this.maybeCompact();
70
+ return row;
71
+ }
72
+ /** Replay WAL โ†’ reconstruct baseline map. Idempotent. */
73
+ replay() {
74
+ const baselines = new Map();
75
+ const snapshotPath = this.path.replace("wal.jsonl", "baselines.json");
76
+ // Load snapshot first (compaction product)
77
+ if (existsSync(snapshotPath)) {
78
+ try {
79
+ const snap = JSON.parse(readFileSync(snapshotPath, "utf8"));
80
+ for (const [k, v] of Object.entries(snap))
81
+ baselines.set(k, v);
82
+ }
83
+ catch { /* ignore corrupt snapshot โ€” fall back to full WAL */ }
84
+ }
85
+ if (!existsSync(this.path))
86
+ return baselines;
87
+ const content = readFileSync(this.path, "utf8").trim();
88
+ if (!content)
89
+ return baselines;
90
+ for (const line of content.split("\n")) {
91
+ try {
92
+ const row = JSON.parse(line);
93
+ if (row.op === "baseline_set")
94
+ baselines.set(row.fnId, row.payload);
95
+ }
96
+ catch { /* skip malformed */ }
97
+ }
98
+ return baselines;
99
+ }
100
+ /** Verify chain integrity (chain HMAC continuity). */
101
+ verify() {
102
+ if (!existsSync(this.path))
103
+ return { ok: true, rows: 0 };
104
+ const lines = readFileSync(this.path, "utf8").trim().split("\n").filter(Boolean);
105
+ let prev = "0".repeat(16);
106
+ for (let i = 0; i < lines.length; i++) {
107
+ try {
108
+ const row = JSON.parse(lines[i]);
109
+ if (row.prevHmac !== prev)
110
+ return { ok: false, rows: lines.length, brokenAt: i };
111
+ const { hmac, ...body } = row;
112
+ const recomputed = hmacRow(prev, body, this.secret);
113
+ if (recomputed !== hmac)
114
+ return { ok: false, rows: lines.length, brokenAt: i };
115
+ prev = hmac;
116
+ }
117
+ catch {
118
+ return { ok: false, rows: lines.length, brokenAt: i };
119
+ }
120
+ }
121
+ return { ok: true, rows: lines.length };
122
+ }
123
+ /** Compact WAL โ†’ snapshot if file exceeds threshold. */
124
+ maybeCompact() {
125
+ try {
126
+ const sz = statSync(this.path).size;
127
+ if (sz < this.compactionThresholdBytes)
128
+ return;
129
+ const baselines = this.replay();
130
+ const snapshotPath = this.path.replace("wal.jsonl", "baselines.json");
131
+ const obj = {};
132
+ for (const [k, v] of baselines)
133
+ obj[k] = v;
134
+ writeFileSync(snapshotPath, JSON.stringify(obj), "utf8");
135
+ // Truncate WAL atomically: write empty + reset chain
136
+ const tmpPath = this.path + ".tmp";
137
+ writeFileSync(tmpPath, "", "utf8");
138
+ renameSync(tmpPath, this.path);
139
+ this.lastHmac = "0".repeat(16);
140
+ }
141
+ catch { /* compaction is best-effort */ }
142
+ }
143
+ path_for_test() { return this.path; }
144
+ }
145
+ //# sourceMappingURL=wal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wal.js","sourceRoot":"","sources":["../../src/protoplasm/wal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * ๐Ÿฆ  PROTOPLASM โ€” wisdom_space
3
+ *
4
+ * When orchestrator marks a finding BROKEN โ†’ wisdom_space diagnoses root cause.
5
+ *
6
+ * Strategy:
7
+ * 1. Collect last N findings across ALL functions in same time window
8
+ * 2. Score upstream suspects by co-occurrence (broke around same time)
9
+ * 3. Detect "neighbor-broken-first" patterns (this fn broke 30s AFTER fnX broke)
10
+ * 4. Emit hypothesis + proposed heal actions
11
+ *
12
+ * The "wisdom" is the cross-function correlation โ€” single-function metrics
13
+ * can't see "I broke because dep X broke 30 seconds ago".
14
+ */
15
+ import type { SuperQuanFinding, WisdomRootCause } from "./types.js";
16
+ interface DiagnoseInput {
17
+ brokenFinding: SuperQuanFinding;
18
+ recentLedger: SuperQuanFinding[];
19
+ windowMs?: number;
20
+ }
21
+ export declare function diagnose(input: DiagnoseInput): WisdomRootCause;
22
+ /** Quick summary of recent ledger health. */
23
+ export declare function ledgerHealth(recent: SuperQuanFinding[]): {
24
+ broken: number;
25
+ warn: number;
26
+ healthy: number;
27
+ brokenRate: number;
28
+ };
29
+ export {};
30
+ //# sourceMappingURL=wisdom_space.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wisdom_space.d.ts","sourceRoot":"","sources":["../../src/protoplasm/wisdom_space.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAc,MAAM,YAAY,CAAC;AAEhF,UAAU,aAAa;IACrB,aAAa,EAAE,gBAAgB,CAAC;IAChC,YAAY,EAAE,gBAAgB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,eAAe,CA0D9D;AAED,6CAA6C;AAC7C,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,EAAE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAM9H"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * ๐Ÿฆ  PROTOPLASM โ€” wisdom_space
3
+ *
4
+ * When orchestrator marks a finding BROKEN โ†’ wisdom_space diagnoses root cause.
5
+ *
6
+ * Strategy:
7
+ * 1. Collect last N findings across ALL functions in same time window
8
+ * 2. Score upstream suspects by co-occurrence (broke around same time)
9
+ * 3. Detect "neighbor-broken-first" patterns (this fn broke 30s AFTER fnX broke)
10
+ * 4. Emit hypothesis + proposed heal actions
11
+ *
12
+ * The "wisdom" is the cross-function correlation โ€” single-function metrics
13
+ * can't see "I broke because dep X broke 30 seconds ago".
14
+ */
15
+ export function diagnose(input) {
16
+ const window = input.windowMs ?? 60_000;
17
+ const brokenAt = new Date(input.brokenFinding.at).getTime();
18
+ const inWindow = input.recentLedger.filter((f) => Math.abs(new Date(f.at).getTime() - brokenAt) <= window);
19
+ // Upstream suspects: other fns that turned broken WITHIN the window AND earlier
20
+ const earlierBroken = inWindow.filter((f) => f.fnId !== input.brokenFinding.fnId
21
+ && f.outcome === "broken"
22
+ && new Date(f.at).getTime() < brokenAt);
23
+ // Score by recency (earlier โ†’ higher suspect score)
24
+ const suspects = earlierBroken
25
+ .map((f) => ({ fnId: f.fnId, age: brokenAt - new Date(f.at).getTime(), reason: f.evidence }))
26
+ .sort((a, b) => b.age - a.age); // older = upstream
27
+ const upstreamSuspects = suspects.slice(0, 5).map((s) => s.fnId);
28
+ let hypothesis;
29
+ let confidence = 0.4;
30
+ const heals = [];
31
+ if (upstreamSuspects.length >= 2) {
32
+ hypothesis = `cascade failure from upstream: ${upstreamSuspects.join(" โ†’ ")}`;
33
+ confidence = 0.85;
34
+ heals.push({ kind: "request-supernova-restart", rationale: "multiple upstream functions broken โ€” restart cycle to clear shared state" });
35
+ heals.push({ kind: "raise-truth-gate-block", rationale: "cascade detected โ€” block any new release tag until heal verified" });
36
+ }
37
+ else if (upstreamSuspects.length === 1) {
38
+ hypothesis = `proximate cause: ${upstreamSuspects[0]} broke earlier in window`;
39
+ confidence = 0.7;
40
+ heals.push({ kind: "retry-with-backoff", rationale: "single upstream suspect โ€” retry after upstream stabilizes" });
41
+ }
42
+ else {
43
+ // No upstream suspects โ†’ check quantum signals
44
+ const qs = input.brokenFinding.quantumSignals;
45
+ if (qs.collapseStability < 0.5) {
46
+ hypothesis = "intrinsic instability โ€” function throws on >50% of calls";
47
+ confidence = 0.6;
48
+ heals.push({ kind: "fallback-to-cached", rationale: "high throw rate โ€” serve cached last-good response" });
49
+ }
50
+ else if (qs.chaosDivergence > 3) {
51
+ hypothesis = "duration variance spiking โ€” likely external dep slowdown (network/disk/db)";
52
+ confidence = 0.55;
53
+ heals.push({ kind: "retry-with-backoff", rationale: "transient slowdown โ€” backoff + retry" });
54
+ }
55
+ else {
56
+ hypothesis = "unknown โ€” z-score breach but no clear pattern";
57
+ confidence = 0.3;
58
+ heals.push({ kind: "noop", rationale: "insufficient signal โ€” record + observe one more cycle before acting" });
59
+ }
60
+ }
61
+ return {
62
+ fnId: input.brokenFinding.fnId,
63
+ hypothesis,
64
+ upstreamSuspects,
65
+ confidence,
66
+ proposedHeal: heals,
67
+ };
68
+ }
69
+ /** Quick summary of recent ledger health. */
70
+ export function ledgerHealth(recent) {
71
+ const broken = recent.filter((f) => f.outcome === "broken").length;
72
+ const warn = recent.filter((f) => f.outcome === "warn").length;
73
+ const healthy = recent.filter((f) => f.outcome === "healthy").length;
74
+ const total = recent.length || 1;
75
+ return { broken, warn, healthy, brokenRate: broken / total };
76
+ }
77
+ //# sourceMappingURL=wisdom_space.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wisdom_space.js","sourceRoot":"","sources":["../../src/protoplasm/wisdom_space.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,KAAK,CA4kB9C,CAAC"}
1
+ {"version":3,"file":"claims.d.ts","sourceRoot":"","sources":["../../src/truth_gate/claims.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,KAAK,CA8lB9C,CAAC"}
@@ -23,6 +23,24 @@
23
23
  * are unmeasured.
24
24
  */
25
25
  export const CLAIM_CATALOG = [
26
+ {
27
+ id: "claim.protoplasm.wal_survives_sigkill",
28
+ source: "v2.67.0 release notes",
29
+ text: "PROTOPLASM WAL ledger survives SIGKILL โ€” state persists to disk before RAM update; new process can replay baselines from .mneme/protoplasm/wal.jsonl after uncatchable kill",
30
+ kind: "boolean",
31
+ asserted: { value: 1, op: "=", tolerance: 0 },
32
+ probeId: "probe.protoplasm.wal_chain_valid",
33
+ severity: "block",
34
+ },
35
+ {
36
+ id: "claim.protoplasm.seamless_boot_zero_config",
37
+ source: "v2.67.0 release notes",
38
+ text: "PROTOPLASM seamless boot โ€” atom activates on any Mneme tool call without user config; heartbeat.json written automatically",
39
+ kind: "boolean",
40
+ asserted: { value: 1, op: "=", tolerance: 0 },
41
+ probeId: "probe.protoplasm.heartbeat_present_or_first_run",
42
+ severity: "warn",
43
+ },
26
44
  {
27
45
  id: "claim.tokens.capabilities_lt_25k",
28
46
  source: "README ยท positioning",