@mneme-ai/core 2.81.0 → 2.83.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 (78) hide show
  1. package/dist/agent_manifest.d.ts.map +1 -1
  2. package/dist/agent_manifest.js +8 -0
  3. package/dist/agent_manifest.js.map +1 -1
  4. package/dist/bgp_router/bgp_router.test.d.ts +2 -0
  5. package/dist/bgp_router/bgp_router.test.d.ts.map +1 -0
  6. package/dist/bgp_router/bgp_router.test.js +65 -0
  7. package/dist/bgp_router/bgp_router.test.js.map +1 -0
  8. package/dist/bgp_router/index.d.ts +59 -0
  9. package/dist/bgp_router/index.d.ts.map +1 -0
  10. package/dist/bgp_router/index.js +77 -0
  11. package/dist/bgp_router/index.js.map +1 -0
  12. package/dist/byob/byob.test.d.ts +2 -0
  13. package/dist/byob/byob.test.d.ts.map +1 -0
  14. package/dist/byob/byob.test.js +57 -0
  15. package/dist/byob/byob.test.js.map +1 -0
  16. package/dist/byob/index.d.ts +52 -0
  17. package/dist/byob/index.d.ts.map +1 -0
  18. package/dist/byob/index.js +82 -0
  19. package/dist/byob/index.js.map +1 -0
  20. package/dist/edge_mesh/edge_mesh.test.d.ts +2 -0
  21. package/dist/edge_mesh/edge_mesh.test.d.ts.map +1 -0
  22. package/dist/edge_mesh/edge_mesh.test.js +45 -0
  23. package/dist/edge_mesh/edge_mesh.test.js.map +1 -0
  24. package/dist/edge_mesh/index.d.ts +51 -0
  25. package/dist/edge_mesh/index.d.ts.map +1 -0
  26. package/dist/edge_mesh/index.js +59 -0
  27. package/dist/edge_mesh/index.js.map +1 -0
  28. package/dist/gephyra/gephyra.test.d.ts +14 -0
  29. package/dist/gephyra/gephyra.test.d.ts.map +1 -0
  30. package/dist/gephyra/gephyra.test.js +109 -0
  31. package/dist/gephyra/gephyra.test.js.map +1 -0
  32. package/dist/gephyra/index.d.ts +115 -0
  33. package/dist/gephyra/index.d.ts.map +1 -0
  34. package/dist/gephyra/index.js +212 -0
  35. package/dist/gephyra/index.js.map +1 -0
  36. package/dist/idle_compound/idle_compound.test.d.ts +2 -0
  37. package/dist/idle_compound/idle_compound.test.d.ts.map +1 -0
  38. package/dist/idle_compound/idle_compound.test.js +56 -0
  39. package/dist/idle_compound/idle_compound.test.js.map +1 -0
  40. package/dist/idle_compound/index.d.ts +50 -0
  41. package/dist/idle_compound/index.d.ts.map +1 -0
  42. package/dist/idle_compound/index.js +85 -0
  43. package/dist/idle_compound/index.js.map +1 -0
  44. package/dist/index.d.ts +8 -0
  45. package/dist/index.d.ts.map +1 -1
  46. package/dist/index.js +8 -0
  47. package/dist/index.js.map +1 -1
  48. package/dist/mesh_immune/index.d.ts +56 -0
  49. package/dist/mesh_immune/index.d.ts.map +1 -0
  50. package/dist/mesh_immune/index.js +75 -0
  51. package/dist/mesh_immune/index.js.map +1 -0
  52. package/dist/mesh_immune/mesh_immune.test.d.ts +2 -0
  53. package/dist/mesh_immune/mesh_immune.test.d.ts.map +1 -0
  54. package/dist/mesh_immune/mesh_immune.test.js +60 -0
  55. package/dist/mesh_immune/mesh_immune.test.js.map +1 -0
  56. package/dist/truth_cdn/index.d.ts +63 -0
  57. package/dist/truth_cdn/index.d.ts.map +1 -0
  58. package/dist/truth_cdn/index.js +70 -0
  59. package/dist/truth_cdn/index.js.map +1 -0
  60. package/dist/truth_cdn/truth_cdn.test.d.ts +2 -0
  61. package/dist/truth_cdn/truth_cdn.test.d.ts.map +1 -0
  62. package/dist/truth_cdn/truth_cdn.test.js +63 -0
  63. package/dist/truth_cdn/truth_cdn.test.js.map +1 -0
  64. package/dist/truth_gate/claims.d.ts.map +1 -1
  65. package/dist/truth_gate/claims.js +50 -0
  66. package/dist/truth_gate/claims.js.map +1 -1
  67. package/dist/truth_gate/probes.d.ts.map +1 -1
  68. package/dist/truth_gate/probes.js +214 -0
  69. package/dist/truth_gate/probes.js.map +1 -1
  70. package/dist/truth_stake/index.d.ts +72 -0
  71. package/dist/truth_stake/index.d.ts.map +1 -0
  72. package/dist/truth_stake/index.js +85 -0
  73. package/dist/truth_stake/index.js.map +1 -0
  74. package/dist/truth_stake/truth_stake.test.d.ts +2 -0
  75. package/dist/truth_stake/truth_stake.test.d.ts.map +1 -0
  76. package/dist/truth_stake/truth_stake.test.js +64 -0
  77. package/dist/truth_stake/truth_stake.test.js.map +1 -0
  78. package/package.json +1 -1
@@ -0,0 +1,59 @@
1
+ /**
2
+ * v2.82.0 — BGP NOTARIZING ROUTER · the cross-protocol "BGP of agent protocols"
3
+ * (TRUST FABRIC 💎1, on the NOTARY spine).
4
+ *
5
+ * Everyone builds ONE protocol (MCP or A2A or x402 or ERC-8004). Nobody builds the
6
+ * notarizing router that lets a request hop MCP → A2A → x402 → ERC-8004 in one
7
+ * flow where EVERY hop is signed — like BGP routing between autonomous systems,
8
+ * but with a notary stamp + CCTV on every segment.
9
+ *
10
+ * Each protocol-boundary crossing becomes a NOTARY receipt (kind "protocol-hop"),
11
+ * prev-chained into a route. `verifyRoute` proves: every hop's signature is valid,
12
+ * the chain is intact, AND the protocols actually connect (hop[i].to == hop[i+1].from).
13
+ * A third party verifies the whole cross-protocol path OFFLINE without trusting Mneme.
14
+ *
15
+ * Composes NOTARY directly. Pure except route() (signs). Never throws on verify.
16
+ */
17
+ import { type NotaryReceipt, type IssuerKeyPair } from "../notary/index.js";
18
+ export type Protocol = "mcp" | "a2a" | "x402" | "erc8004" | "http" | "local";
19
+ export interface Hop {
20
+ from: Protocol;
21
+ to: Protocol;
22
+ /** What crosses the boundary (a tool call, an agent task, a payment, an identity check). */
23
+ action: string;
24
+ agent?: string;
25
+ /** Optional structured payload attested at this hop. */
26
+ payload?: unknown;
27
+ }
28
+ export interface RoutedHop extends Hop {
29
+ index: number;
30
+ receipt: NotaryReceipt;
31
+ }
32
+ /**
33
+ * Route a request across protocol boundaries, notarizing every hop. Returns one
34
+ * signed, prev-chained receipt per hop. `requestId` ties the route together.
35
+ */
36
+ export declare function routeRequest(repoRoot: string, input: {
37
+ requestId: string;
38
+ hops: Hop[];
39
+ }, keyPair?: IssuerKeyPair): {
40
+ routeId: string;
41
+ hops: RoutedHop[];
42
+ receipts: NotaryReceipt[];
43
+ };
44
+ export interface RouteVerifyResult {
45
+ valid: boolean;
46
+ reason: string;
47
+ hops: number;
48
+ /** index where it broke, if any. */
49
+ brokenAt?: number;
50
+ }
51
+ /**
52
+ * Verify a routed path OFFLINE: every hop signs + chains (NOTARY), AND protocols
53
+ * connect (each hop's `to` is the next hop's `from`). Catches a tampered or
54
+ * spliced route across protocol boundaries.
55
+ */
56
+ export declare function verifyRoute(receipts: NotaryReceipt[]): RouteVerifyResult;
57
+ /** Human path string: mcp→a2a→x402→erc8004. */
58
+ export declare function renderRoute(receipts: NotaryReceipt[]): string;
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bgp_router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAA6B,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEvG,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7E,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,QAAQ,CAAC;IACf,EAAE,EAAE,QAAQ,CAAC;IACb,4FAA4F;IAC5F,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,SAAU,SAAQ,GAAG;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,aAAa,CAAC;CACxB;AAID;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,GAAG,EAAE,CAAA;CAAE,EACzC,OAAO,CAAC,EAAE,aAAa,GACtB;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,SAAS,EAAE,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,CAkBnE;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAkBxE;AAED,+CAA+C;AAC/C,wBAAgB,WAAW,CAAC,QAAQ,EAAE,aAAa,EAAE,GAAG,MAAM,CAK7D"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * v2.82.0 — BGP NOTARIZING ROUTER · the cross-protocol "BGP of agent protocols"
3
+ * (TRUST FABRIC 💎1, on the NOTARY spine).
4
+ *
5
+ * Everyone builds ONE protocol (MCP or A2A or x402 or ERC-8004). Nobody builds the
6
+ * notarizing router that lets a request hop MCP → A2A → x402 → ERC-8004 in one
7
+ * flow where EVERY hop is signed — like BGP routing between autonomous systems,
8
+ * but with a notary stamp + CCTV on every segment.
9
+ *
10
+ * Each protocol-boundary crossing becomes a NOTARY receipt (kind "protocol-hop"),
11
+ * prev-chained into a route. `verifyRoute` proves: every hop's signature is valid,
12
+ * the chain is intact, AND the protocols actually connect (hop[i].to == hop[i+1].from).
13
+ * A third party verifies the whole cross-protocol path OFFLINE without trusting Mneme.
14
+ *
15
+ * Composes NOTARY directly. Pure except route() (signs). Never throws on verify.
16
+ */
17
+ import { issueReceipt, verifyChain } from "../notary/index.js";
18
+ const PROTOCOLS = new Set(["mcp", "a2a", "x402", "erc8004", "http", "local"]);
19
+ /**
20
+ * Route a request across protocol boundaries, notarizing every hop. Returns one
21
+ * signed, prev-chained receipt per hop. `requestId` ties the route together.
22
+ */
23
+ export function routeRequest(repoRoot, input, keyPair) {
24
+ const routed = [];
25
+ const receipts = [];
26
+ let prev = null;
27
+ const hops = Array.isArray(input.hops) ? input.hops : [];
28
+ for (let i = 0; i < hops.length; i++) {
29
+ const h = hops[i];
30
+ const receipt = issueReceipt(repoRoot, {
31
+ kind: "protocol-hop",
32
+ subject: `route:${input.requestId}:${i}:${h.from}->${h.to}`,
33
+ payload: { requestId: input.requestId, index: i, from: h.from, to: h.to, action: h.action, agent: h.agent, hopPayload: h.payload },
34
+ prev,
35
+ }, keyPair);
36
+ prev = receipt.receiptId;
37
+ routed.push({ ...h, index: i, receipt });
38
+ receipts.push(receipt);
39
+ }
40
+ return { routeId: receipts.length ? receipts[receipts.length - 1].receiptId : input.requestId, hops: routed, receipts };
41
+ }
42
+ /**
43
+ * Verify a routed path OFFLINE: every hop signs + chains (NOTARY), AND protocols
44
+ * connect (each hop's `to` is the next hop's `from`). Catches a tampered or
45
+ * spliced route across protocol boundaries.
46
+ */
47
+ export function verifyRoute(receipts) {
48
+ if (!Array.isArray(receipts) || receipts.length === 0)
49
+ return { valid: false, reason: "empty route", hops: 0 };
50
+ const chain = verifyChain(receipts, { sameIssuer: true });
51
+ if (!chain.valid)
52
+ return { valid: false, reason: `chain: ${chain.reason}`, hops: receipts.length, brokenAt: chain.brokenAt };
53
+ // Protocol continuity + shape.
54
+ let prevTo = null;
55
+ for (let i = 0; i < receipts.length; i++) {
56
+ const p = receipts[i].payload;
57
+ if (!p || !PROTOCOLS.has(p.from) || !PROTOCOLS.has(p.to)) {
58
+ return { valid: false, reason: `hop ${i}: invalid protocol`, hops: receipts.length, brokenAt: i };
59
+ }
60
+ if (p.index !== i)
61
+ return { valid: false, reason: `hop ${i}: index mismatch (route reordered)`, hops: receipts.length, brokenAt: i };
62
+ if (prevTo !== null && p.from !== prevTo) {
63
+ return { valid: false, reason: `hop ${i}: protocol discontinuity (${prevTo} ≠ ${p.from})`, hops: receipts.length, brokenAt: i };
64
+ }
65
+ prevTo = p.to;
66
+ }
67
+ return { valid: true, reason: "ok", hops: receipts.length };
68
+ }
69
+ /** Human path string: mcp→a2a→x402→erc8004. */
70
+ export function renderRoute(receipts) {
71
+ if (!receipts.length)
72
+ return "(empty route)";
73
+ const first = receipts[0].payload;
74
+ const segs = [first.from ?? "?", ...receipts.map((r) => r.payload.to ?? "?")];
75
+ return segs.join("→");
76
+ }
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bgp_router/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=byob.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byob.test.d.ts","sourceRoot":"","sources":["../../src/byob/byob.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * v2.82.0 — BYOB portable brain pinned + QUAN tests (💎2).
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { mkdtempSync } from "node:fs";
6
+ import { tmpdir } from "node:os";
7
+ import { join } from "node:path";
8
+ import { makeCapsule, packCapsule, verifyCapsule, mergeCapsules } from "./index.js";
9
+ const repo = () => mkdtempSync(join(tmpdir(), "mneme-byob-"));
10
+ describe("v2.82.0 💎2 BYOB (PINNED)", () => {
11
+ it("Y1 pack → verify offline; tamper fails", () => {
12
+ const r = repo();
13
+ const cap = makeCapsule({ owner: "user", vendor: "claude", items: [{ id: "m1", content: "prefer pnpm", ts: 1 }] });
14
+ const receipt = packCapsule(r, cap);
15
+ const v = verifyCapsule(JSON.parse(JSON.stringify(receipt)));
16
+ expect(v.valid).toBe(true);
17
+ expect(v.capsule.items[0].content).toBe("prefer pnpm");
18
+ expect(verifyCapsule({ ...receipt, payload: { ...receipt.payload, owner: "attacker" } }).valid).toBe(false);
19
+ });
20
+ it("Y2 merge: union by id, last-write-wins by ts, vendors unioned", () => {
21
+ const a = makeCapsule({ owner: "u", vendor: "claude", items: [{ id: "m1", content: "v1", ts: 1 }, { id: "m2", content: "keep", ts: 1 }] });
22
+ const b = makeCapsule({ owner: "u", vendor: "gpt", items: [{ id: "m1", content: "v2-newer", ts: 5 }, { id: "m3", content: "new", ts: 2 }] });
23
+ const m = mergeCapsules(a, b);
24
+ expect(m.items.find((i) => i.id === "m1").content).toBe("v2-newer"); // LWW
25
+ expect(m.items.map((i) => i.id)).toEqual(["m1", "m2", "m3"]);
26
+ expect(m.vendors).toEqual(["claude", "gpt"]);
27
+ });
28
+ });
29
+ describe("v2.82.0 💎2 QUAN", () => {
30
+ function randCap(seed) {
31
+ const items = [];
32
+ for (let i = 0; i < 8; i++) {
33
+ const id = `m${(seed * 3 + i) % 12}`;
34
+ items.push({ id, content: `c${seed}-${i}`, ts: (seed * 7 + i * 13) % 100 });
35
+ }
36
+ return makeCapsule({ owner: "u", vendor: `v${seed % 3}`, items });
37
+ }
38
+ it("Q merge is commutative + idempotent (CRDT convergence)", () => {
39
+ for (let s = 0; s < 60; s++) {
40
+ const a = randCap(s);
41
+ const b = randCap(s + 1);
42
+ const ab = mergeCapsules(a, b);
43
+ const ba = mergeCapsules(b, a);
44
+ // commutative (item set + LWW values converge; owner from first arg may differ, compare items+vendors)
45
+ expect(ab.items).toEqual(ba.items);
46
+ expect(ab.vendors).toEqual(ba.vendors);
47
+ // idempotent
48
+ expect(mergeCapsules(ab, ab).items).toEqual(ab.items);
49
+ // associative-ish: merging a third then re-merging converges
50
+ const c = randCap(s + 2);
51
+ const left = mergeCapsules(mergeCapsules(a, b), c);
52
+ const right = mergeCapsules(a, mergeCapsules(b, c));
53
+ expect(left.items).toEqual(right.items);
54
+ }
55
+ });
56
+ });
57
+ //# sourceMappingURL=byob.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"byob.test.js","sourceRoot":"","sources":["../../src/byob/byob.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * v2.82.0 — BYOB · "Bring Your Own Brain": user-owned portable memory (TRUST FABRIC 💎2, on NOTARY).
3
+ *
4
+ * Vendors silo memory by design (portable memory that flows to a competitor breaks
5
+ * lock-in — they will NEVER build it). Only an independent player can. BYOB is a
6
+ * signed, tamper-evident memory CAPSULE the user owns: any vendor (Grok / Gemini /
7
+ * Claude / Cursor) loads it at session start and writes back at session end, and
8
+ * nobody can secretly alter it — the Ed25519 signature catches any edit.
9
+ *
10
+ * CRDT merge: two vendors editing the brain in parallel reconcile deterministically
11
+ * (union by item id, last-write-wins by ts) — commutative + idempotent, so the merge
12
+ * order across vendors doesn't matter.
13
+ *
14
+ * Composes NOTARY (the capsule is a signed receipt). Pure except pack() (signs).
15
+ */
16
+ import { type NotaryReceipt, type IssuerKeyPair } from "../notary/index.js";
17
+ export interface MemoryItem {
18
+ id: string;
19
+ content: string;
20
+ /** ms epoch — last-write-wins tiebreaker. */
21
+ ts: number;
22
+ kind?: string;
23
+ }
24
+ export interface Capsule {
25
+ v: 1;
26
+ owner: string;
27
+ /** Vendors that have touched this capsule (union on merge). */
28
+ vendors: string[];
29
+ createdAt: number;
30
+ items: MemoryItem[];
31
+ }
32
+ export declare function makeCapsule(input: {
33
+ owner: string;
34
+ vendor?: string;
35
+ vendors?: string[];
36
+ items: MemoryItem[];
37
+ createdAt?: number;
38
+ }): Capsule;
39
+ /** Pack a capsule into a signed, portable NOTARY receipt. */
40
+ export declare function packCapsule(repoRoot: string, capsule: Capsule, keyPair?: IssuerKeyPair): NotaryReceipt;
41
+ export declare function verifyCapsule(receipt: unknown): {
42
+ valid: boolean;
43
+ reason: string;
44
+ capsule?: Capsule;
45
+ };
46
+ /**
47
+ * CRDT merge of two capsules: union of items by id, last-write-wins by ts (id
48
+ * tiebreak), union of vendors. Commutative + idempotent + associative — vendors can
49
+ * merge in any order and converge. Owner is preserved from `a`.
50
+ */
51
+ export declare function mergeCapsules(a: Capsule, b: Capsule): Capsule;
52
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/byob/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEzG,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,OAAO;IACtB,CAAC,EAAE,CAAC,CAAC;IACL,KAAK,EAAE,MAAM,CAAC;IACd,+DAA+D;IAC/D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,UAAU,EAAE,CAAC;CACrB;AAmBD,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,UAAU,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAS3I;AAED,6DAA6D;AAC7D,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,aAAa,CAEtG;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAQrG;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,OAAO,CAgB7D"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * v2.82.0 — BYOB · "Bring Your Own Brain": user-owned portable memory (TRUST FABRIC 💎2, on NOTARY).
3
+ *
4
+ * Vendors silo memory by design (portable memory that flows to a competitor breaks
5
+ * lock-in — they will NEVER build it). Only an independent player can. BYOB is a
6
+ * signed, tamper-evident memory CAPSULE the user owns: any vendor (Grok / Gemini /
7
+ * Claude / Cursor) loads it at session start and writes back at session end, and
8
+ * nobody can secretly alter it — the Ed25519 signature catches any edit.
9
+ *
10
+ * CRDT merge: two vendors editing the brain in parallel reconcile deterministically
11
+ * (union by item id, last-write-wins by ts) — commutative + idempotent, so the merge
12
+ * order across vendors doesn't matter.
13
+ *
14
+ * Composes NOTARY (the capsule is a signed receipt). Pure except pack() (signs).
15
+ */
16
+ import { issueReceipt, verifyReceipt } from "../notary/index.js";
17
+ function normItems(items) {
18
+ if (!Array.isArray(items))
19
+ return [];
20
+ const out = [];
21
+ for (const it of items) {
22
+ const r = it;
23
+ if (r && typeof r.id === "string" && typeof r.content === "string") {
24
+ out.push({ id: r.id, content: r.content, ts: typeof r.ts === "number" && Number.isFinite(r.ts) ? r.ts : 0, ...(typeof r.kind === "string" ? { kind: r.kind } : {}) });
25
+ }
26
+ }
27
+ return out;
28
+ }
29
+ /** Sort items by id for a canonical, stable capsule (so merges are deterministic). */
30
+ function canonicalItems(items) {
31
+ return items.slice().sort((a, b) => a.id < b.id ? -1 : a.id > b.id ? 1 : 0);
32
+ }
33
+ export function makeCapsule(input) {
34
+ const vendors = Array.from(new Set([...(input.vendors ?? []), ...(input.vendor ? [input.vendor] : [])].filter((x) => typeof x === "string"))).sort();
35
+ return {
36
+ v: 1,
37
+ owner: String(input.owner ?? "unknown"),
38
+ vendors,
39
+ createdAt: typeof input.createdAt === "number" ? input.createdAt : Date.now(),
40
+ items: canonicalItems(normItems(input.items)),
41
+ };
42
+ }
43
+ /** Pack a capsule into a signed, portable NOTARY receipt. */
44
+ export function packCapsule(repoRoot, capsule, keyPair) {
45
+ return issueReceipt(repoRoot, { kind: "memory-capsule", subject: `brain:${capsule.owner}`, payload: capsule }, keyPair);
46
+ }
47
+ export function verifyCapsule(receipt) {
48
+ const v = verifyReceipt(receipt);
49
+ if (!v.valid)
50
+ return { valid: false, reason: v.reason };
51
+ const p = receipt.payload;
52
+ if (!p || p.v !== 1 || typeof p.owner !== "string" || !Array.isArray(p.items)) {
53
+ return { valid: false, reason: "not a memory capsule" };
54
+ }
55
+ return { valid: true, reason: "ok", capsule: p };
56
+ }
57
+ /**
58
+ * CRDT merge of two capsules: union of items by id, last-write-wins by ts (id
59
+ * tiebreak), union of vendors. Commutative + idempotent + associative — vendors can
60
+ * merge in any order and converge. Owner is preserved from `a`.
61
+ */
62
+ export function mergeCapsules(a, b) {
63
+ const byId = new Map();
64
+ const consider = (it) => {
65
+ const cur = byId.get(it.id);
66
+ if (!cur || it.ts > cur.ts || (it.ts === cur.ts && it.content > cur.content))
67
+ byId.set(it.id, it);
68
+ };
69
+ for (const it of a.items)
70
+ consider(it);
71
+ for (const it of b.items)
72
+ consider(it);
73
+ const vendors = Array.from(new Set([...a.vendors, ...b.vendors])).sort();
74
+ return {
75
+ v: 1,
76
+ owner: a.owner,
77
+ vendors,
78
+ createdAt: Math.min(a.createdAt, b.createdAt),
79
+ items: canonicalItems(Array.from(byId.values())),
80
+ };
81
+ }
82
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/byob/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=edge_mesh.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge_mesh.test.d.ts","sourceRoot":"","sources":["../../src/edge_mesh/edge_mesh.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * v2.82.0 — SOVEREIGN EDGE MESH pinned + QUAN tests (💎9).
3
+ */
4
+ import { describe, it, expect } from "vitest";
5
+ import { mkdtempSync } from "node:fs";
6
+ import { tmpdir } from "node:os";
7
+ import { join } from "node:path";
8
+ import { buildPeerCard, verifyPeerCard, mergeMesh } from "./index.js";
9
+ const repo = () => mkdtempSync(join(tmpdir(), "mneme-edge-"));
10
+ describe("v2.82.0 💎9 Edge Mesh (PINNED)", () => {
11
+ it("E1 build → verify offline; tamper fails", () => {
12
+ const r = repo();
13
+ const { receipt } = buildPeerCard(r, { peer: "laptop", lanUrl: "http://192.168.1.5:7741", capabilities: ["verify", "index"] });
14
+ const v = verifyPeerCard(JSON.parse(JSON.stringify(receipt)));
15
+ expect(v.valid).toBe(true);
16
+ expect(v.peer.lanUrl).toBe("http://192.168.1.5:7741");
17
+ expect(verifyPeerCard({ ...receipt, payload: { ...receipt.payload, lanUrl: "http://evil.cloud" } }).valid).toBe(false);
18
+ });
19
+ it("E2 mergeMesh dedups by peer (latest issuedAt wins) + drops forged", () => {
20
+ const r = repo();
21
+ const c1 = buildPeerCard(r, { peer: "node-a", lanUrl: "http://a:1", issuedAt: 100 }).receipt;
22
+ const c2 = buildPeerCard(r, { peer: "node-a", lanUrl: "http://a:2", issuedAt: 200 }).receipt; // newer
23
+ const c3 = buildPeerCard(r, { peer: "node-b", lanUrl: "http://b:1", issuedAt: 50 }).receipt;
24
+ const forged = { ...c3, payload: { ...c3.payload, peer: "node-c" } };
25
+ const mesh = mergeMesh([c1, c2, c3, forged]);
26
+ expect(mesh.admitted).toBe(2);
27
+ expect(mesh.rejected).toBe(1);
28
+ expect(mesh.peers.find((p) => p.peer === "node-a").lanUrl).toBe("http://a:2");
29
+ });
30
+ });
31
+ describe("v2.82.0 💎9 QUAN", () => {
32
+ it("Q mergeMesh is order-independent + idempotent", () => {
33
+ const r = repo();
34
+ const cards = [];
35
+ for (let i = 0; i < 20; i++)
36
+ cards.push(buildPeerCard(r, { peer: `peer-${i % 7}`, lanUrl: `http://h:${i}`, issuedAt: (i * 11) % 50 }).receipt);
37
+ const a = mergeMesh(cards);
38
+ const b = mergeMesh(cards.slice().reverse());
39
+ expect(a.peers.map((p) => `${p.peer}@${p.lanUrl}`)).toEqual(b.peers.map((p) => `${p.peer}@${p.lanUrl}`));
40
+ // idempotent: re-merging the admitted cards yields the same set
41
+ const reMerged = mergeMesh(a.peers.map((p) => buildPeerCard(r, { peer: p.peer, lanUrl: p.lanUrl, capabilities: p.capabilities, issuedAt: p.issuedAt }).receipt));
42
+ expect(reMerged.peers.map((p) => p.peer)).toEqual(a.peers.map((p) => p.peer));
43
+ });
44
+ });
45
+ //# sourceMappingURL=edge_mesh.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge_mesh.test.js","sourceRoot":"","sources":["../../src/edge_mesh/edge_mesh.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * v2.82.0 — SOVEREIGN EDGE MESH · cloud-free, signed agent mesh (TRUST FABRIC 💎9, on NOTARY).
3
+ *
4
+ * Everything else (MCP remote, A2A, x402) routes through the cloud. The contrarian
5
+ * bet: enterprise + government will NOT send everything to OpenAI. EDGE MESH is a
6
+ * local-first / offline P2P agent mesh on LAN/edge where every peer announcement is
7
+ * an Ed25519-signed card — discover + trust peers without any cloud, and verify each
8
+ * peer card OFFLINE. Mneme's local-first + AURA (LAN pairing) + ANCHOR (identity)
9
+ * ethos, made into a mesh.
10
+ *
11
+ * Composes NOTARY (peer cards are signed receipts). Pure except buildPeerCard (signs).
12
+ * No network calls here — cards carry LAN hints; transport is the caller's job.
13
+ */
14
+ import { type NotaryReceipt, type IssuerKeyPair } from "../notary/index.js";
15
+ export interface PeerCard {
16
+ v: 1;
17
+ peer: string;
18
+ /** LAN endpoint hint (e.g. http://192.168.1.20:7741) — never a cloud URL. */
19
+ lanUrl: string;
20
+ capabilities: string[];
21
+ issuedAt: number;
22
+ }
23
+ export declare function buildPeerCard(repoRoot: string, input: {
24
+ peer: string;
25
+ lanUrl: string;
26
+ capabilities?: string[];
27
+ issuedAt?: number;
28
+ }, keyPair?: IssuerKeyPair): {
29
+ card: PeerCard;
30
+ receipt: NotaryReceipt;
31
+ };
32
+ export interface VerifiedPeer extends PeerCard {
33
+ issuerFingerprint: string;
34
+ }
35
+ export declare function verifyPeerCard(receipt: unknown): {
36
+ valid: boolean;
37
+ reason: string;
38
+ peer?: VerifiedPeer;
39
+ };
40
+ /**
41
+ * Gossip-merge a set of peer-card receipts into a verified peer table. Only valid
42
+ * cards are admitted; per peer, the LATEST issuedAt wins (issuer fingerprint
43
+ * tiebreak for determinism). Commutative + idempotent — merge in any order, same
44
+ * mesh. Forged cards are silently dropped.
45
+ */
46
+ export declare function mergeMesh(receipts: unknown[]): {
47
+ peers: VerifiedPeer[];
48
+ admitted: number;
49
+ rejected: number;
50
+ };
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/edge_mesh/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAA+B,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEzG,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,CAAC,CAAC;IACL,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EACnF,OAAO,CAAC,EAAE,aAAa,GACtB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,aAAa,CAAA;CAAE,CAU5C;AAED,MAAM,WAAW,YAAa,SAAQ,QAAQ;IAC5C,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,CAQxG;AAED;;;;;GAKG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG;IAAE,KAAK,EAAE,YAAY,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAa5G"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * v2.82.0 — SOVEREIGN EDGE MESH · cloud-free, signed agent mesh (TRUST FABRIC 💎9, on NOTARY).
3
+ *
4
+ * Everything else (MCP remote, A2A, x402) routes through the cloud. The contrarian
5
+ * bet: enterprise + government will NOT send everything to OpenAI. EDGE MESH is a
6
+ * local-first / offline P2P agent mesh on LAN/edge where every peer announcement is
7
+ * an Ed25519-signed card — discover + trust peers without any cloud, and verify each
8
+ * peer card OFFLINE. Mneme's local-first + AURA (LAN pairing) + ANCHOR (identity)
9
+ * ethos, made into a mesh.
10
+ *
11
+ * Composes NOTARY (peer cards are signed receipts). Pure except buildPeerCard (signs).
12
+ * No network calls here — cards carry LAN hints; transport is the caller's job.
13
+ */
14
+ import { issueReceipt, verifyReceipt } from "../notary/index.js";
15
+ export function buildPeerCard(repoRoot, input, keyPair) {
16
+ const card = {
17
+ v: 1,
18
+ peer: String(input.peer ?? "unknown"),
19
+ lanUrl: String(input.lanUrl ?? ""),
20
+ capabilities: Array.isArray(input.capabilities) ? input.capabilities.filter((x) => typeof x === "string").sort() : [],
21
+ issuedAt: typeof input.issuedAt === "number" ? input.issuedAt : Date.now(),
22
+ };
23
+ const receipt = issueReceipt(repoRoot, { kind: "generic", subject: `peer:${card.peer}`, payload: card }, keyPair);
24
+ return { card, receipt };
25
+ }
26
+ export function verifyPeerCard(receipt) {
27
+ const v = verifyReceipt(receipt);
28
+ if (!v.valid)
29
+ return { valid: false, reason: v.reason };
30
+ const p = receipt.payload;
31
+ if (!p || p.v !== 1 || typeof p.peer !== "string" || typeof p.lanUrl !== "string") {
32
+ return { valid: false, reason: "not a peer card" };
33
+ }
34
+ return { valid: true, reason: "ok", peer: { ...p, issuerFingerprint: v.issuerFingerprint } };
35
+ }
36
+ /**
37
+ * Gossip-merge a set of peer-card receipts into a verified peer table. Only valid
38
+ * cards are admitted; per peer, the LATEST issuedAt wins (issuer fingerprint
39
+ * tiebreak for determinism). Commutative + idempotent — merge in any order, same
40
+ * mesh. Forged cards are silently dropped.
41
+ */
42
+ export function mergeMesh(receipts) {
43
+ const byPeer = new Map();
44
+ let rejected = 0;
45
+ for (const r of Array.isArray(receipts) ? receipts : []) {
46
+ const v = verifyPeerCard(r);
47
+ if (!v.valid || !v.peer) {
48
+ rejected++;
49
+ continue;
50
+ }
51
+ const cur = byPeer.get(v.peer.peer);
52
+ if (!cur || v.peer.issuedAt > cur.issuedAt || (v.peer.issuedAt === cur.issuedAt && v.peer.issuerFingerprint > cur.issuerFingerprint)) {
53
+ byPeer.set(v.peer.peer, v.peer);
54
+ }
55
+ }
56
+ const peers = Array.from(byPeer.values()).sort((a, b) => a.peer < b.peer ? -1 : a.peer > b.peer ? 1 : 0);
57
+ return { peers, admitted: peers.length, rejected };
58
+ }
59
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/edge_mesh/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * v2.83.0 — GEPHYRA pinned + QUAN tests. Every flow + every plan-B/C path.
3
+ * G1 PASS (verdict TRUSTWORTHY)
4
+ * G2 CORRECTED (REFUTED → fixed before delivery + nudge + signed receipt)
5
+ * G3 QUARANTINED (injection never crosses)
6
+ * G4 UNVERIFIED (no engine / engine down → crosses flagged, bridge survives)
7
+ * G5 conscience nudge on overconfident unverified claims
8
+ * G6 honesty toll → heavy scrutiny for low-trust senders
9
+ * G7 default truth-customs catches arithmetic falsehood
10
+ * G8 bridgeStatus counts crossings + hallucinations caught; chain intact
11
+ * QUAN: crossBridge NEVER throws over fuzz; every crossing yields a verifiable receipt
12
+ */
13
+ export {};
14
+ //# sourceMappingURL=gephyra.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gephyra.test.d.ts","sourceRoot":"","sources":["../../src/gephyra/gephyra.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG"}