@mneme-ai/core 2.89.0 โ 2.90.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.
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +2 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/gephyra/index.d.ts +12 -0
- package/dist/gephyra/index.d.ts.map +1 -1
- package/dist/gephyra/index.js +38 -0
- package/dist/gephyra/index.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -0
- package/dist/index.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +7 -0
- package/dist/truth_gate/claims.js.map +1 -1
- package/dist/truth_gate/probes.d.ts.map +1 -1
- package/dist/truth_gate/probes.js +53 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/dist/truth_kernel/compound.d.ts +55 -0
- package/dist/truth_kernel/compound.d.ts.map +1 -0
- package/dist/truth_kernel/compound.js +72 -0
- package/dist/truth_kernel/compound.js.map +1 -0
- package/dist/truth_kernel/gauntlet_public.d.ts +37 -0
- package/dist/truth_kernel/gauntlet_public.d.ts.map +1 -0
- package/dist/truth_kernel/gauntlet_public.js +81 -0
- package/dist/truth_kernel/gauntlet_public.js.map +1 -0
- package/dist/truth_kernel/savant_diamonds.test.d.ts +11 -0
- package/dist/truth_kernel/savant_diamonds.test.d.ts.map +1 -0
- package/dist/truth_kernel/savant_diamonds.test.js +137 -0
- package/dist/truth_kernel/savant_diamonds.test.js.map +1 -0
- package/dist/truth_kernel/symbiosis.d.ts +54 -0
- package/dist/truth_kernel/symbiosis.d.ts.map +1 -0
- package/dist/truth_kernel/symbiosis.js +98 -0
- package/dist/truth_kernel/symbiosis.js.map +1 -0
- package/dist/truth_kernel/truth_mesh.d.ts +63 -0
- package/dist/truth_kernel/truth_mesh.d.ts.map +1 -0
- package/dist/truth_kernel/truth_mesh.js +124 -0
- package/dist/truth_kernel/truth_mesh.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.90.0 โ ๐โค CROSS-AGENT TRUTH MESH ยท the multiverse truth substrate.
|
|
3
|
+
*
|
|
4
|
+
* One savant's Axiom Lattice is a private brain. The Truth Mesh lets MANY savants
|
|
5
|
+
* (across vendors, machines, agents) share PROVEN truths without a central server:
|
|
6
|
+
* each exports a SIGNED bundle of its ACTIVE truths; a peer MERGES it after
|
|
7
|
+
* verifying every signature offline โ adding non-conflicting truths, DROPPING
|
|
8
|
+
* forged/invalid ones, and SURFACING (never silently resolving) any truth that
|
|
9
|
+
* CONTRADICTS what the peer already holds. CRDT-style: commutative + idempotent
|
|
10
|
+
* (re-merging the same bundle changes nothing). Never throws.
|
|
11
|
+
*
|
|
12
|
+
* This is how the savant becomes the backbone of the AI multiverse: a tamper-evident,
|
|
13
|
+
* vendor-neutral, offline-verifiable fabric of facts that compounds as more agents join.
|
|
14
|
+
*/
|
|
15
|
+
import { type NotaryReceipt } from "../notary/index.js";
|
|
16
|
+
import type { AletheiaVerdict } from "./aletheia.js";
|
|
17
|
+
export interface MeshTruth {
|
|
18
|
+
claim: string;
|
|
19
|
+
subject: string;
|
|
20
|
+
verdict: AletheiaVerdict;
|
|
21
|
+
pTrue: number;
|
|
22
|
+
/** Per-truth signature (so a single truth is verifiable in isolation). */
|
|
23
|
+
receipt: NotaryReceipt | null;
|
|
24
|
+
}
|
|
25
|
+
export interface TruthBundle {
|
|
26
|
+
v: 1;
|
|
27
|
+
/** Who exported it (opaque agent id). */
|
|
28
|
+
agent: string;
|
|
29
|
+
truths: MeshTruth[];
|
|
30
|
+
/** Signature over the whole bundle. */
|
|
31
|
+
receipt: NotaryReceipt | null;
|
|
32
|
+
}
|
|
33
|
+
/** Export this savant's ACTIVE truths as a signed, portable bundle. Never throws. */
|
|
34
|
+
export declare function exportTruths(repoRoot: string, agent: string, opts?: {
|
|
35
|
+
issuedAt?: number;
|
|
36
|
+
}): TruthBundle;
|
|
37
|
+
export interface MergeResult {
|
|
38
|
+
/** Truths added to the local lattice. */
|
|
39
|
+
added: number;
|
|
40
|
+
/** Truths skipped because already present (idempotence). */
|
|
41
|
+
duplicate: number;
|
|
42
|
+
/** Truths dropped because their signature was missing/invalid (forgery defense). */
|
|
43
|
+
rejectedUnsigned: number;
|
|
44
|
+
/** Truths that CONTRADICT a local ACTIVE truth โ surfaced, NOT merged. */
|
|
45
|
+
conflicts: Array<{
|
|
46
|
+
claim: string;
|
|
47
|
+
verdict: AletheiaVerdict;
|
|
48
|
+
against: string;
|
|
49
|
+
}>;
|
|
50
|
+
/** True iff the incoming bundle's own signature verified. */
|
|
51
|
+
bundleVerified: boolean;
|
|
52
|
+
summary: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Merge an incoming signed bundle into the local lattice. Verifies the bundle's
|
|
56
|
+
* signature + every per-truth signature OFFLINE; an unsigned/forged truth is DROPPED.
|
|
57
|
+
* A truth that contradicts a local ACTIVE truth is SURFACED (the savant doesn't
|
|
58
|
+
* silently pick a winner). Duplicates are skipped โ idempotent + commutative. Never throws.
|
|
59
|
+
*/
|
|
60
|
+
export declare function mergeTruths(repoRoot: string, bundle: TruthBundle, opts?: {
|
|
61
|
+
issuedAt?: number;
|
|
62
|
+
}): MergeResult;
|
|
63
|
+
//# sourceMappingURL=truth_mesh.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truth_mesh.d.ts","sourceRoot":"","sources":["../../src/truth_kernel/truth_mesh.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,EAA+B,KAAK,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,0EAA0E;IAC1E,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,EAAE,CAAC,CAAC;IACL,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,uCAAuC;IACvC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;CAC/B;AAED,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAa3G;AAED,MAAM,WAAW,WAAW;IAC1B,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,oFAAoF;IACpF,gBAAgB,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,SAAS,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,eAAe,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/E,6DAA6D;IAC7D,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;CACjB;AAgBD;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,WAAW,CAsChH"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.90.0 โ ๐โค CROSS-AGENT TRUTH MESH ยท the multiverse truth substrate.
|
|
3
|
+
*
|
|
4
|
+
* One savant's Axiom Lattice is a private brain. The Truth Mesh lets MANY savants
|
|
5
|
+
* (across vendors, machines, agents) share PROVEN truths without a central server:
|
|
6
|
+
* each exports a SIGNED bundle of its ACTIVE truths; a peer MERGES it after
|
|
7
|
+
* verifying every signature offline โ adding non-conflicting truths, DROPPING
|
|
8
|
+
* forged/invalid ones, and SURFACING (never silently resolving) any truth that
|
|
9
|
+
* CONTRADICTS what the peer already holds. CRDT-style: commutative + idempotent
|
|
10
|
+
* (re-merging the same bundle changes nothing). Never throws.
|
|
11
|
+
*
|
|
12
|
+
* This is how the savant becomes the backbone of the AI multiverse: a tamper-evident,
|
|
13
|
+
* vendor-neutral, offline-verifiable fabric of facts that compounds as more agents join.
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { join } from "node:path";
|
|
17
|
+
import { issueReceipt, verifyReceipt } from "../notary/index.js";
|
|
18
|
+
import { readLattice, recordAssertion, detectContradictions } from "./lattice.js";
|
|
19
|
+
/** Export this savant's ACTIVE truths as a signed, portable bundle. Never throws. */
|
|
20
|
+
export function exportTruths(repoRoot, agent, opts = {}) {
|
|
21
|
+
const active = readLattice(repoRoot).filter((n) => n.status === "ACTIVE" && (n.verdict === "TRUE" || n.verdict === "FALSE"));
|
|
22
|
+
const truths = active.map((n) => ({ claim: n.claim, subject: n.subject, verdict: n.verdict, pTrue: n.pTrue, receipt: n.receipt }));
|
|
23
|
+
let receipt = null;
|
|
24
|
+
try {
|
|
25
|
+
receipt = issueReceipt(repoRoot, {
|
|
26
|
+
kind: "memory-capsule",
|
|
27
|
+
subject: `truth-bundle:${String(agent ?? "anon")}:${truths.length}`,
|
|
28
|
+
payload: { engine: "aletheia-mesh", agent, truths: truths.map((t) => ({ claim: t.claim, verdict: t.verdict })) },
|
|
29
|
+
issuedAt: opts.issuedAt,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
receipt = null;
|
|
34
|
+
}
|
|
35
|
+
return { v: 1, agent: String(agent ?? "anon"), truths, receipt };
|
|
36
|
+
}
|
|
37
|
+
function meshSeenPath(repoRoot) { return join(repoRoot, ".mneme", "aletheia", "mesh-seen.json"); }
|
|
38
|
+
function loadSeen(repoRoot) {
|
|
39
|
+
try {
|
|
40
|
+
const p = meshSeenPath(repoRoot);
|
|
41
|
+
if (!existsSync(p))
|
|
42
|
+
return new Set();
|
|
43
|
+
const arr = JSON.parse(readFileSync(p, "utf8"));
|
|
44
|
+
return new Set(Array.isArray(arr) ? arr : []);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return new Set();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function saveSeen(repoRoot, seen) {
|
|
51
|
+
try {
|
|
52
|
+
mkdirSync(join(repoRoot, ".mneme", "aletheia"), { recursive: true });
|
|
53
|
+
writeFileSync(meshSeenPath(repoRoot), JSON.stringify([...seen]), "utf8");
|
|
54
|
+
}
|
|
55
|
+
catch { /* best-effort */ }
|
|
56
|
+
}
|
|
57
|
+
function truthKey(t) { return `${t.verdict}::${t.claim}`; }
|
|
58
|
+
/**
|
|
59
|
+
* Merge an incoming signed bundle into the local lattice. Verifies the bundle's
|
|
60
|
+
* signature + every per-truth signature OFFLINE; an unsigned/forged truth is DROPPED.
|
|
61
|
+
* A truth that contradicts a local ACTIVE truth is SURFACED (the savant doesn't
|
|
62
|
+
* silently pick a winner). Duplicates are skipped โ idempotent + commutative. Never throws.
|
|
63
|
+
*/
|
|
64
|
+
export function mergeTruths(repoRoot, bundle, opts = {}) {
|
|
65
|
+
let bundleVerified = false;
|
|
66
|
+
try {
|
|
67
|
+
bundleVerified = bundle.receipt ? verifyReceipt(bundle.receipt).valid : false;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
bundleVerified = false;
|
|
71
|
+
}
|
|
72
|
+
const seen = loadSeen(repoRoot);
|
|
73
|
+
let added = 0, duplicate = 0, rejectedUnsigned = 0;
|
|
74
|
+
const conflicts = [];
|
|
75
|
+
const truths = Array.isArray(bundle?.truths) ? bundle.truths : [];
|
|
76
|
+
for (const t of truths) {
|
|
77
|
+
if (!t || typeof t.claim !== "string" || (t.verdict !== "TRUE" && t.verdict !== "FALSE"))
|
|
78
|
+
continue;
|
|
79
|
+
// (1) forgery defense โ the per-truth signature must be valid AND the truth's
|
|
80
|
+
// claim/verdict must MATCH the signed payload. (Catches swapping the claim
|
|
81
|
+
// text while keeping a valid-but-unrelated signature.)
|
|
82
|
+
let sigOk = false;
|
|
83
|
+
try {
|
|
84
|
+
if (t.receipt && verifyReceipt(t.receipt).valid) {
|
|
85
|
+
const pl = (t.receipt.payload ?? {});
|
|
86
|
+
sigOk = pl.claim === t.claim && pl.verdict === t.verdict;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
sigOk = false;
|
|
91
|
+
}
|
|
92
|
+
if (!sigOk) {
|
|
93
|
+
rejectedUnsigned++;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
const key = truthKey(t);
|
|
97
|
+
if (seen.has(key)) {
|
|
98
|
+
duplicate++;
|
|
99
|
+
continue;
|
|
100
|
+
}
|
|
101
|
+
// (2) conflict โ surfaced, never silently merged.
|
|
102
|
+
const contra = detectContradictions(repoRoot, t.claim, t.verdict);
|
|
103
|
+
if (contra.length > 0) {
|
|
104
|
+
conflicts.push({ claim: t.claim, verdict: t.verdict, against: contra[0].existing });
|
|
105
|
+
seen.add(key);
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// (3) duplicate-by-content already in the local lattice?
|
|
109
|
+
const already = readLattice(repoRoot).some((n) => n.status === "ACTIVE" && n.claim === t.claim && n.verdict === t.verdict);
|
|
110
|
+
if (already) {
|
|
111
|
+
duplicate++;
|
|
112
|
+
seen.add(key);
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
// (4) accept โ record into the local lattice as a corroborated truth.
|
|
116
|
+
recordAssertion(repoRoot, { claim: t.claim, verdict: t.verdict, pTrue: t.pTrue, lineageSummary: ["mesh"] }, { issuedAt: opts.issuedAt });
|
|
117
|
+
added++;
|
|
118
|
+
seen.add(key);
|
|
119
|
+
}
|
|
120
|
+
saveSeen(repoRoot, seen);
|
|
121
|
+
const summary = `mesh merge from "${bundle?.agent ?? "?"}": +${added} added ยท ${duplicate} dup ยท ${rejectedUnsigned} forged-dropped ยท ${conflicts.length} conflict(s) surfaced ยท bundle ${bundleVerified ? "VERIFIED" : "UNVERIFIED"}`;
|
|
122
|
+
return { added, duplicate, rejectedUnsigned, conflicts, bundleVerified, summary };
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=truth_mesh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"truth_mesh.js","sourceRoot":"","sources":["../../src/truth_kernel/truth_mesh.ts"],"names":[],"mappings":"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"}
|