@mneme-ai/core 2.28.1 → 2.29.1
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.js +42 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/conclave/aeae/index.d.ts +59 -0
- package/dist/conclave/aeae/index.d.ts.map +1 -0
- package/dist/conclave/aeae/index.js +133 -0
- package/dist/conclave/aeae/index.js.map +1 -0
- package/dist/conclave/aletheia_weights.d.ts +14 -0
- package/dist/conclave/aletheia_weights.d.ts.map +1 -0
- package/dist/conclave/aletheia_weights.js +66 -0
- package/dist/conclave/aletheia_weights.js.map +1 -0
- package/dist/conclave/bft.d.ts +47 -0
- package/dist/conclave/bft.d.ts.map +1 -0
- package/dist/conclave/bft.js +122 -0
- package/dist/conclave/bft.js.map +1 -0
- package/dist/conclave/conclave.test.d.ts +2 -0
- package/dist/conclave/conclave.test.d.ts.map +1 -0
- package/dist/conclave/conclave.test.js +198 -0
- package/dist/conclave/conclave.test.js.map +1 -0
- package/dist/conclave/engine.d.ts +34 -0
- package/dist/conclave/engine.d.ts.map +1 -0
- package/dist/conclave/engine.js +225 -0
- package/dist/conclave/engine.js.map +1 -0
- package/dist/conclave/index.d.ts +14 -0
- package/dist/conclave/index.d.ts.map +1 -0
- package/dist/conclave/index.js +10 -0
- package/dist/conclave/index.js.map +1 -0
- package/dist/conclave/types.d.ts +126 -0
- package/dist/conclave/types.d.ts.map +1 -0
- package/dist/conclave/types.js +28 -0
- package/dist/conclave/types.js.map +1 -0
- package/dist/conclave/vendors/anthropic.d.ts +15 -0
- package/dist/conclave/vendors/anthropic.d.ts.map +1 -0
- package/dist/conclave/vendors/anthropic.js +83 -0
- package/dist/conclave/vendors/anthropic.js.map +1 -0
- package/dist/conclave/vendors/interface.d.ts +43 -0
- package/dist/conclave/vendors/interface.d.ts.map +1 -0
- package/dist/conclave/vendors/interface.js +66 -0
- package/dist/conclave/vendors/interface.js.map +1 -0
- package/dist/conclave/vendors/mock.d.ts +12 -0
- package/dist/conclave/vendors/mock.d.ts.map +1 -0
- package/dist/conclave/vendors/mock.js +59 -0
- package/dist/conclave/vendors/mock.js.map +1 -0
- package/dist/conclave/vendors/openai.d.ts +8 -0
- package/dist/conclave/vendors/openai.d.ts.map +1 -0
- package/dist/conclave/vendors/openai.js +75 -0
- package/dist/conclave/vendors/openai.js.map +1 -0
- package/dist/conclave/vendors/registry.d.ts +19 -0
- package/dist/conclave/vendors/registry.d.ts.map +1 -0
- package/dist/conclave/vendors/registry.js +37 -0
- package/dist/conclave/vendors/registry.js.map +1 -0
- package/dist/diaspora/bridge_hardening.test.js +1 -1
- package/dist/diaspora/bridge_hardening.test.js.map +1 -1
- package/dist/diaspora/http_bridge.d.ts +14 -0
- package/dist/diaspora/http_bridge.d.ts.map +1 -1
- package/dist/diaspora/http_bridge.js +1 -1
- package/dist/diaspora/http_bridge.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -1
- package/dist/polygraph/index.d.ts.map +1 -1
- package/dist/pulse.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.29.0 — Aletheia weight reader for CONCLAVE.
|
|
3
|
+
*
|
|
4
|
+
* Reads the per-vendor truth-track record from Mneme's existing
|
|
5
|
+
* bounty / aletheia / vendor-karma stores. If a vendor has no record,
|
|
6
|
+
* defaults to 0.5 (neutral prior). If the user passes weightBy="equal"
|
|
7
|
+
* the orchestrator skips this step entirely.
|
|
8
|
+
*
|
|
9
|
+
* Cached per process for sub-millisecond lookups.
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
12
|
+
import { join } from "node:path";
|
|
13
|
+
const cache = new Map();
|
|
14
|
+
const TTL_MS = 30_000;
|
|
15
|
+
function defaultWeight() { return 0.5; }
|
|
16
|
+
function read(repoRoot, vendor) {
|
|
17
|
+
// Try multiple sources in priority order:
|
|
18
|
+
// 1. .mneme/aletheia/karma.json (per-tool but we treat per-vendor too)
|
|
19
|
+
// 2. .mneme/bounty/leaderboard.json (vendor falseRate → 1 - falseRate)
|
|
20
|
+
// 3. default neutral prior
|
|
21
|
+
try {
|
|
22
|
+
const karmaPath = join(repoRoot, ".mneme", "aletheia", "karma.json");
|
|
23
|
+
if (existsSync(karmaPath)) {
|
|
24
|
+
const j = JSON.parse(readFileSync(karmaPath, "utf8"));
|
|
25
|
+
const v = j.vendors?.[vendor];
|
|
26
|
+
if (v && typeof v.trust === "number")
|
|
27
|
+
return clamp01(v.trust);
|
|
28
|
+
if (v && typeof v.karma === "number")
|
|
29
|
+
return clamp01(v.karma);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch { /* ignore */ }
|
|
33
|
+
try {
|
|
34
|
+
const bountyPath = join(repoRoot, ".mneme", "bounty", "leaderboard.json");
|
|
35
|
+
if (existsSync(bountyPath)) {
|
|
36
|
+
const j = JSON.parse(readFileSync(bountyPath, "utf8"));
|
|
37
|
+
const row = (j.vendors ?? []).find((r) => r.vendor === vendor);
|
|
38
|
+
if (row) {
|
|
39
|
+
if (typeof row.truthScore === "number")
|
|
40
|
+
return clamp01(row.truthScore);
|
|
41
|
+
if (typeof row.falseRate === "number")
|
|
42
|
+
return clamp01(1 - row.falseRate);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch { /* ignore */ }
|
|
47
|
+
return defaultWeight();
|
|
48
|
+
}
|
|
49
|
+
function clamp01(n) {
|
|
50
|
+
if (!Number.isFinite(n))
|
|
51
|
+
return defaultWeight();
|
|
52
|
+
return Math.min(1, Math.max(0, n));
|
|
53
|
+
}
|
|
54
|
+
export function aletheiaWeight(repoRoot, vendor) {
|
|
55
|
+
const key = `${repoRoot}|${vendor}`;
|
|
56
|
+
const now = Date.now();
|
|
57
|
+
const c = cache.get(key);
|
|
58
|
+
if (c && c.expiresAt > now)
|
|
59
|
+
return c.weight;
|
|
60
|
+
const w = read(repoRoot, vendor);
|
|
61
|
+
cache.set(key, { weight: w, expiresAt: now + TTL_MS });
|
|
62
|
+
return w;
|
|
63
|
+
}
|
|
64
|
+
/** Test-only reset. */
|
|
65
|
+
export function __resetAletheiaCacheForTest() { cache.clear(); }
|
|
66
|
+
//# sourceMappingURL=aletheia_weights.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aletheia_weights.js","sourceRoot":"","sources":["../../src/conclave/aletheia_weights.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.29.0 — Byzantine fault-tolerant aggregator for CONCLAVE.
|
|
3
|
+
*
|
|
4
|
+
* Two operating modes:
|
|
5
|
+
* threshold (default): weighted-vote ratio ≥ `threshold` → CONSENSUS
|
|
6
|
+
* bft-strict : enforces f < n/3 dissenters (PBFT lemma).
|
|
7
|
+
* With 5 vendors: requires at LEAST 4 vendors
|
|
8
|
+
* to agree (only 1 dissenter tolerated). With
|
|
9
|
+
* 3 vendors: requires unanimity.
|
|
10
|
+
*
|
|
11
|
+
* Weight source: per-vendor Aletheia trust score (0..1). Vendors with
|
|
12
|
+
* higher historical truthfulness count for more.
|
|
13
|
+
*
|
|
14
|
+
* The aggregator is PURE (no IO) so the orchestrator can call it
|
|
15
|
+
* deterministically + tests can pin it.
|
|
16
|
+
*/
|
|
17
|
+
import type { VendorStance, VendorAggregate, ConsensusOutcome } from "./types.js";
|
|
18
|
+
export interface BftConfig {
|
|
19
|
+
threshold: number;
|
|
20
|
+
bftStrict: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface BftResult {
|
|
23
|
+
outcome: ConsensusOutcome;
|
|
24
|
+
winningStance?: VendorStance;
|
|
25
|
+
weightedTallies: Record<VendorStance, number>;
|
|
26
|
+
/** Fraction of total weight backing the winning stance. */
|
|
27
|
+
winningFraction: number;
|
|
28
|
+
/** Vendors flagged by AEAE (awareness < 0.7) are listed for the caller. */
|
|
29
|
+
awarenessFlags: Array<{
|
|
30
|
+
vendor: string;
|
|
31
|
+
score: number;
|
|
32
|
+
reason: string;
|
|
33
|
+
}>;
|
|
34
|
+
dissentBreakdown?: Array<{
|
|
35
|
+
stance: VendorStance;
|
|
36
|
+
vendors: string[];
|
|
37
|
+
weight: number;
|
|
38
|
+
}>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Aggregate per-vendor verdicts into a single Byzantine consensus
|
|
42
|
+
* result. Vendors with awareness flags STILL count toward the vote
|
|
43
|
+
* (we don't silently drop them); the caller decides whether to surface
|
|
44
|
+
* the awareness flag in the final report.
|
|
45
|
+
*/
|
|
46
|
+
export declare function aggregate(perVendor: VendorAggregate[], config: BftConfig): BftResult;
|
|
47
|
+
//# sourceMappingURL=bft.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bft.d.ts","sourceRoot":"","sources":["../../src/conclave/bft.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAElF,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,eAAe,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,cAAc,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,gBAAgB,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,YAAY,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACvF;AAID;;;;;GAKG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,eAAe,EAAE,EAC5B,MAAM,EAAE,SAAS,GAChB,SAAS,CA2FX"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.29.0 — Byzantine fault-tolerant aggregator for CONCLAVE.
|
|
3
|
+
*
|
|
4
|
+
* Two operating modes:
|
|
5
|
+
* threshold (default): weighted-vote ratio ≥ `threshold` → CONSENSUS
|
|
6
|
+
* bft-strict : enforces f < n/3 dissenters (PBFT lemma).
|
|
7
|
+
* With 5 vendors: requires at LEAST 4 vendors
|
|
8
|
+
* to agree (only 1 dissenter tolerated). With
|
|
9
|
+
* 3 vendors: requires unanimity.
|
|
10
|
+
*
|
|
11
|
+
* Weight source: per-vendor Aletheia trust score (0..1). Vendors with
|
|
12
|
+
* higher historical truthfulness count for more.
|
|
13
|
+
*
|
|
14
|
+
* The aggregator is PURE (no IO) so the orchestrator can call it
|
|
15
|
+
* deterministically + tests can pin it.
|
|
16
|
+
*/
|
|
17
|
+
const STANCES = ["supports", "refutes", "uncertain", "refuses"];
|
|
18
|
+
/**
|
|
19
|
+
* Aggregate per-vendor verdicts into a single Byzantine consensus
|
|
20
|
+
* result. Vendors with awareness flags STILL count toward the vote
|
|
21
|
+
* (we don't silently drop them); the caller decides whether to surface
|
|
22
|
+
* the awareness flag in the final report.
|
|
23
|
+
*/
|
|
24
|
+
export function aggregate(perVendor, config) {
|
|
25
|
+
if (perVendor.length === 0) {
|
|
26
|
+
return {
|
|
27
|
+
outcome: "INSUFFICIENT_RESPONDERS",
|
|
28
|
+
weightedTallies: { supports: 0, refutes: 0, uncertain: 0, refuses: 0 },
|
|
29
|
+
winningFraction: 0,
|
|
30
|
+
awarenessFlags: [],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
// Tally weighted votes by stance.
|
|
34
|
+
const tallies = { supports: 0, refutes: 0, uncertain: 0, refuses: 0 };
|
|
35
|
+
let totalWeight = 0;
|
|
36
|
+
for (const v of perVendor) {
|
|
37
|
+
tallies[v.dominantStance] += v.weight;
|
|
38
|
+
totalWeight += v.weight;
|
|
39
|
+
}
|
|
40
|
+
// Normalise (defensive against zero-weight vendors).
|
|
41
|
+
if (totalWeight <= 0) {
|
|
42
|
+
return {
|
|
43
|
+
outcome: "INSUFFICIENT_RESPONDERS",
|
|
44
|
+
weightedTallies: tallies,
|
|
45
|
+
winningFraction: 0,
|
|
46
|
+
awarenessFlags: [],
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
// Find the stance with the highest weight.
|
|
50
|
+
let winning = "uncertain";
|
|
51
|
+
let winningW = 0;
|
|
52
|
+
for (const s of STANCES) {
|
|
53
|
+
if (tallies[s] > winningW) {
|
|
54
|
+
winning = s;
|
|
55
|
+
winningW = tallies[s];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
const winningFraction = winningW / totalWeight;
|
|
59
|
+
// Awareness flags (carry forward, never block voting).
|
|
60
|
+
const awarenessFlags = perVendor
|
|
61
|
+
.filter((v) => v.awarenessScore < 0.7)
|
|
62
|
+
.map((v) => {
|
|
63
|
+
// Reason is per-vendor (set by orchestrator); we re-derive a short hint here.
|
|
64
|
+
const reason = v.awarenessScore < 0.4 ? "high awareness — possible eval-mode switch" : "moderate awareness — variants disagreed";
|
|
65
|
+
return { vendor: v.vendor, score: v.awarenessScore, reason };
|
|
66
|
+
});
|
|
67
|
+
// Decide outcome.
|
|
68
|
+
// 1. BFT-strict: dissenter weight must be < n/3 of total (the classic
|
|
69
|
+
// PBFT safety threshold). Surface as DISSENT otherwise.
|
|
70
|
+
if (config.bftStrict) {
|
|
71
|
+
const dissenters = totalWeight - winningW;
|
|
72
|
+
if (dissenters >= totalWeight / 3) {
|
|
73
|
+
return {
|
|
74
|
+
outcome: "DISSENT",
|
|
75
|
+
weightedTallies: tallies,
|
|
76
|
+
winningFraction,
|
|
77
|
+
awarenessFlags,
|
|
78
|
+
dissentBreakdown: breakdown(perVendor),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// 2. Threshold mode: winning fraction must clear `threshold`.
|
|
83
|
+
if (winningFraction < config.threshold) {
|
|
84
|
+
return {
|
|
85
|
+
outcome: "DISSENT",
|
|
86
|
+
weightedTallies: tallies,
|
|
87
|
+
winningFraction,
|
|
88
|
+
awarenessFlags,
|
|
89
|
+
dissentBreakdown: breakdown(perVendor),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
// 3. AWARENESS_DETECTED — when ≥ half the vendors are awareness-flagged
|
|
93
|
+
// even though they agreed on a stance, surface it. This is the user
|
|
94
|
+
// needs to know that the consensus might be theater.
|
|
95
|
+
if (awarenessFlags.length >= Math.ceil(perVendor.length / 2)) {
|
|
96
|
+
return {
|
|
97
|
+
outcome: "AWARENESS_DETECTED",
|
|
98
|
+
winningStance: winning,
|
|
99
|
+
weightedTallies: tallies,
|
|
100
|
+
winningFraction,
|
|
101
|
+
awarenessFlags,
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
return {
|
|
105
|
+
outcome: "CONSENSUS",
|
|
106
|
+
winningStance: winning,
|
|
107
|
+
weightedTallies: tallies,
|
|
108
|
+
winningFraction,
|
|
109
|
+
awarenessFlags,
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function breakdown(perVendor) {
|
|
113
|
+
const groups = new Map();
|
|
114
|
+
for (const v of perVendor) {
|
|
115
|
+
const g = groups.get(v.dominantStance) ?? { vendors: [], weight: 0 };
|
|
116
|
+
g.vendors.push(v.vendor);
|
|
117
|
+
g.weight += v.weight;
|
|
118
|
+
groups.set(v.dominantStance, g);
|
|
119
|
+
}
|
|
120
|
+
return [...groups.entries()].map(([stance, g]) => ({ stance, vendors: g.vendors, weight: g.weight }));
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=bft.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bft.js","sourceRoot":"","sources":["../../src/conclave/bft.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conclave.test.d.ts","sourceRoot":"","sources":["../../src/conclave/conclave.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// v2.29.0 — MNEME CONCLAVE discrete root tests (BUG IMMUNITY).
|
|
2
|
+
// Every logic branch pinned to fail forever if regressed.
|
|
3
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
4
|
+
import { mkdtempSync, rmSync } from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { join } from "node:path";
|
|
7
|
+
import { generateVariants, awarenessScore, aggregate, resolveVendors, aletheiaWeight, __resetAletheiaCacheForTest, runConclave, verifyVerdict, __resetConclaveChainForTest, } from "./index.js";
|
|
8
|
+
describe("AEAE — generateVariants", () => {
|
|
9
|
+
it("emits 5 deterministic variants by default", () => {
|
|
10
|
+
const v = generateVariants("Mneme has 13 verification agents");
|
|
11
|
+
expect(v.length).toBe(5);
|
|
12
|
+
const ids = new Set(v.map((x) => x.id));
|
|
13
|
+
expect(ids).toEqual(new Set(["verbatim", "paraphrase-1", "paraphrase-2", "decoy-embedded", "casual-question"]));
|
|
14
|
+
});
|
|
15
|
+
it("respects include filter", () => {
|
|
16
|
+
const v = generateVariants("x", { include: ["verbatim", "decoy-embedded"] });
|
|
17
|
+
expect(v.length).toBe(2);
|
|
18
|
+
});
|
|
19
|
+
it("verbatim is the original claim", () => {
|
|
20
|
+
expect(generateVariants("abc")[0].text).toBe("abc");
|
|
21
|
+
});
|
|
22
|
+
it("paraphrase-1 turns statement into question", () => {
|
|
23
|
+
const v = generateVariants("React 19 ships hooks")[1];
|
|
24
|
+
expect(v.text).toMatch(/\?$/);
|
|
25
|
+
});
|
|
26
|
+
it("decoy-embedded has 3 numbered lines", () => {
|
|
27
|
+
const v = generateVariants("x")[3];
|
|
28
|
+
expect(v.text).toMatch(/1\)/);
|
|
29
|
+
expect(v.text).toMatch(/2\)/);
|
|
30
|
+
expect(v.text).toMatch(/3\)/);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
describe("AEAE — awarenessScore", () => {
|
|
34
|
+
const consistent = (stance) => ["verbatim", "paraphrase-1", "paraphrase-2", "decoy-embedded", "casual-question"]
|
|
35
|
+
.map((id) => ({ id, stance }));
|
|
36
|
+
it("returns 1.0 when every variant is the same stance", () => {
|
|
37
|
+
expect(awarenessScore(consistent("supports")).score).toBe(1);
|
|
38
|
+
});
|
|
39
|
+
it("drops to 0.0 when every variant differs", () => {
|
|
40
|
+
const r = awarenessScore([
|
|
41
|
+
{ id: "verbatim", stance: "supports" },
|
|
42
|
+
{ id: "paraphrase-1", stance: "refutes" },
|
|
43
|
+
{ id: "paraphrase-2", stance: "uncertain" },
|
|
44
|
+
{ id: "decoy-embedded", stance: "refuses" },
|
|
45
|
+
]);
|
|
46
|
+
expect(r.score).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
it("penalises refused-on-casual-only (classic awareness pattern)", () => {
|
|
49
|
+
const r = awarenessScore([
|
|
50
|
+
{ id: "verbatim", stance: "supports" },
|
|
51
|
+
{ id: "paraphrase-1", stance: "supports" },
|
|
52
|
+
{ id: "casual-question", stance: "refuses" },
|
|
53
|
+
]);
|
|
54
|
+
// 2 distinct over 3 → base 0.5, then -0.3 for refuses-on-casual asymmetry = 0.2
|
|
55
|
+
expect(r.score).toBeLessThan(0.5);
|
|
56
|
+
});
|
|
57
|
+
it("HEAVY penalty for refused-on-verbatim-only (eval-mode detection)", () => {
|
|
58
|
+
const r = awarenessScore([
|
|
59
|
+
{ id: "verbatim", stance: "refuses" },
|
|
60
|
+
{ id: "casual-question", stance: "supports" },
|
|
61
|
+
]);
|
|
62
|
+
// distinct=2, total=2: base = 0.0; further -0.5 floor at 0
|
|
63
|
+
expect(r.score).toBe(0);
|
|
64
|
+
expect(r.reason).toMatch(/eval-mode/);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe("BFT aggregator", () => {
|
|
68
|
+
const cfg = (over = {}) => ({ threshold: 0.66, bftStrict: false, ...over });
|
|
69
|
+
function mk(vendors) {
|
|
70
|
+
return vendors.map((x) => ({
|
|
71
|
+
vendor: x.v, weight: x.w, dominantStance: x.s,
|
|
72
|
+
awarenessScore: x.aw ?? 1,
|
|
73
|
+
perVariant: [],
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
it("CONSENSUS when threshold cleared by weighted vote", () => {
|
|
77
|
+
const r = aggregate(mk([
|
|
78
|
+
{ v: "a", w: 1, s: "supports" },
|
|
79
|
+
{ v: "b", w: 1, s: "supports" },
|
|
80
|
+
{ v: "c", w: 1, s: "refutes" },
|
|
81
|
+
]), cfg());
|
|
82
|
+
expect(r.outcome).toBe("CONSENSUS");
|
|
83
|
+
expect(r.winningStance).toBe("supports");
|
|
84
|
+
expect(r.winningFraction).toBeCloseTo(2 / 3);
|
|
85
|
+
});
|
|
86
|
+
it("DISSENT when split", () => {
|
|
87
|
+
const r = aggregate(mk([
|
|
88
|
+
{ v: "a", w: 1, s: "supports" },
|
|
89
|
+
{ v: "b", w: 1, s: "refutes" },
|
|
90
|
+
]), cfg());
|
|
91
|
+
expect(r.outcome).toBe("DISSENT");
|
|
92
|
+
expect(r.dissentBreakdown.length).toBe(2);
|
|
93
|
+
});
|
|
94
|
+
it("bftStrict refuses 2-of-5 dissenters even at 60% threshold", () => {
|
|
95
|
+
// 3 supports / 2 refutes → 60% support. bftStrict requires
|
|
96
|
+
// dissenters < n/3 = 5/3 ≈ 1.67. We have 2 dissenters → fail.
|
|
97
|
+
const r = aggregate(mk([
|
|
98
|
+
{ v: "a", w: 1, s: "supports" },
|
|
99
|
+
{ v: "b", w: 1, s: "supports" },
|
|
100
|
+
{ v: "c", w: 1, s: "supports" },
|
|
101
|
+
{ v: "d", w: 1, s: "refutes" },
|
|
102
|
+
{ v: "e", w: 1, s: "refutes" },
|
|
103
|
+
]), cfg({ threshold: 0.5, bftStrict: true }));
|
|
104
|
+
expect(r.outcome).toBe("DISSENT");
|
|
105
|
+
});
|
|
106
|
+
it("AWARENESS_DETECTED when ≥ half vendors awareness < 0.7", () => {
|
|
107
|
+
const r = aggregate(mk([
|
|
108
|
+
{ v: "a", w: 1, s: "supports", aw: 0.5 },
|
|
109
|
+
{ v: "b", w: 1, s: "supports", aw: 0.4 },
|
|
110
|
+
{ v: "c", w: 1, s: "supports", aw: 0.6 },
|
|
111
|
+
]), cfg());
|
|
112
|
+
expect(r.outcome).toBe("AWARENESS_DETECTED");
|
|
113
|
+
expect(r.awarenessFlags.length).toBe(3);
|
|
114
|
+
});
|
|
115
|
+
it("INSUFFICIENT_RESPONDERS when no vendors", () => {
|
|
116
|
+
expect(aggregate([], cfg()).outcome).toBe("INSUFFICIENT_RESPONDERS");
|
|
117
|
+
});
|
|
118
|
+
it("weighted vote respects Aletheia weights", () => {
|
|
119
|
+
// a (weight 2) supports + b (weight 1) refutes → supports wins 2/3
|
|
120
|
+
const r = aggregate(mk([
|
|
121
|
+
{ v: "a", w: 2, s: "supports" },
|
|
122
|
+
{ v: "b", w: 1, s: "refutes" },
|
|
123
|
+
]), cfg());
|
|
124
|
+
expect(r.outcome).toBe("CONSENSUS");
|
|
125
|
+
expect(r.winningStance).toBe("supports");
|
|
126
|
+
expect(r.winningFraction).toBeCloseTo(2 / 3);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe("Aletheia weights", () => {
|
|
130
|
+
let dir;
|
|
131
|
+
beforeEach(() => { dir = mkdtempSync(join(tmpdir(), "mneme-aletheia-")); __resetAletheiaCacheForTest(); });
|
|
132
|
+
afterEach(() => { try {
|
|
133
|
+
rmSync(dir, { recursive: true, force: true });
|
|
134
|
+
}
|
|
135
|
+
catch { /* */ } });
|
|
136
|
+
it("returns 0.5 neutral when no data", () => {
|
|
137
|
+
expect(aletheiaWeight(dir, "claude-opus-4-7")).toBe(0.5);
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
describe("Mock vendor adapter (deterministic)", () => {
|
|
141
|
+
it("same claim + vendor → same stance", async () => {
|
|
142
|
+
const [a] = resolveVendors(["mock-1"], { mockOnly: true });
|
|
143
|
+
const r1 = await a.run({ claim: "test claim", variantId: "v" });
|
|
144
|
+
const r2 = await a.run({ claim: "test claim", variantId: "v" });
|
|
145
|
+
expect(r1.stance).toBe(r2.stance);
|
|
146
|
+
});
|
|
147
|
+
it("REFUTE_ME magic claim deterministically refutes", async () => {
|
|
148
|
+
const [a] = resolveVendors(["mock-1"], { mockOnly: true });
|
|
149
|
+
const r = await a.run({ claim: "REFUTE_ME", variantId: "v" });
|
|
150
|
+
expect(r.stance).toBe("refutes");
|
|
151
|
+
});
|
|
152
|
+
it("REFUSE_ME magic claim deterministically refuses", async () => {
|
|
153
|
+
const [a] = resolveVendors(["mock-1"], { mockOnly: true });
|
|
154
|
+
const r = await a.run({ claim: "REFUSE_ME", variantId: "v" });
|
|
155
|
+
expect(r.stance).toBe("refuses");
|
|
156
|
+
});
|
|
157
|
+
it("SUPPORT_ME magic claim deterministically supports", async () => {
|
|
158
|
+
const [a] = resolveVendors(["mock-1"], { mockOnly: true });
|
|
159
|
+
const r = await a.run({ claim: "SUPPORT_ME", variantId: "v" });
|
|
160
|
+
expect(r.stance).toBe("supports");
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe("runConclave — end-to-end", () => {
|
|
164
|
+
let dir;
|
|
165
|
+
beforeEach(() => { dir = mkdtempSync(join(tmpdir(), "mneme-conclave-")); __resetConclaveChainForTest(); });
|
|
166
|
+
afterEach(() => { try {
|
|
167
|
+
rmSync(dir, { recursive: true, force: true });
|
|
168
|
+
}
|
|
169
|
+
catch { /* */ } });
|
|
170
|
+
it("5 mock vendors → REFUTE_ME claim → CONSENSUS refutes", async () => {
|
|
171
|
+
const v = await runConclave(dir, "REFUTE_ME", {
|
|
172
|
+
vendors: ["m1", "m2", "m3", "m4", "m5"],
|
|
173
|
+
mockOnly: true,
|
|
174
|
+
aeae: false, // single variant — deterministic
|
|
175
|
+
});
|
|
176
|
+
expect(v.outcome).toBe("CONSENSUS");
|
|
177
|
+
expect(v.winningStance).toBe("refutes");
|
|
178
|
+
});
|
|
179
|
+
it("emits HMAC chain that verifyVerdict accepts", async () => {
|
|
180
|
+
const v = await runConclave(dir, "SUPPORT_ME", {
|
|
181
|
+
vendors: ["a", "b", "c"],
|
|
182
|
+
mockOnly: true,
|
|
183
|
+
aeae: false,
|
|
184
|
+
});
|
|
185
|
+
const r = verifyVerdict(v);
|
|
186
|
+
expect(r.ok).toBe(true);
|
|
187
|
+
});
|
|
188
|
+
it("verifyVerdict rejects tampered card", async () => {
|
|
189
|
+
const v = await runConclave(dir, "SUPPORT_ME", {
|
|
190
|
+
vendors: ["a", "b", "c"], mockOnly: true, aeae: false,
|
|
191
|
+
});
|
|
192
|
+
v.totalMs = -1; // tamper
|
|
193
|
+
const r = verifyVerdict(v);
|
|
194
|
+
expect(r.ok).toBe(false);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
import { afterEach } from "vitest";
|
|
198
|
+
//# sourceMappingURL=conclave.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conclave.test.js","sourceRoot":"","sources":["../../src/conclave/conclave.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.29.0 — MNEME CONCLAVE engine.
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates: AEAE variants × N vendor adapters in parallel →
|
|
5
|
+
* VendorAggregate → BFT vote → ConsensusVerdict (HMAC-chained).
|
|
6
|
+
*/
|
|
7
|
+
import type { ConsensusVerdict, ConclaveRunOptions } from "./types.js";
|
|
8
|
+
export declare function __resetConclaveChainForTest(): void;
|
|
9
|
+
export declare function runConclave(repoRoot: string, claim: string, opts: ConclaveRunOptions): Promise<ConsensusVerdict>;
|
|
10
|
+
export declare function storeVerdict(repoRoot: string, v: ConsensusVerdict): {
|
|
11
|
+
path: string;
|
|
12
|
+
ledger: string;
|
|
13
|
+
};
|
|
14
|
+
export declare function readLatestVerdict(repoRoot: string): ConsensusVerdict | null;
|
|
15
|
+
export interface LedgerEntry {
|
|
16
|
+
seq: number;
|
|
17
|
+
finishedAt: string;
|
|
18
|
+
outcome: string;
|
|
19
|
+
winningStance?: string;
|
|
20
|
+
claim: string;
|
|
21
|
+
headline: string;
|
|
22
|
+
hmac: string;
|
|
23
|
+
bodyDigest: string;
|
|
24
|
+
file: string;
|
|
25
|
+
}
|
|
26
|
+
export declare function listVerdicts(repoRoot: string, limit?: number): LedgerEntry[];
|
|
27
|
+
export declare function readDissentCorpus(repoRoot: string, limit?: number): unknown[];
|
|
28
|
+
export declare function verifyVerdict(card: ConsensusVerdict, prev?: string): {
|
|
29
|
+
ok: true;
|
|
30
|
+
} | {
|
|
31
|
+
ok: false;
|
|
32
|
+
reason: string;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/conclave/engine.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAAE,kBAAkB,EACrC,MAAM,YAAY,CAAC;AAqBpB,wBAAgB,2BAA2B,IAAI,IAAI,CAAgC;AAiBnF,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,kBAAkB,GACvB,OAAO,CAAC,gBAAgB,CAAC,CAwF3B;AAiBD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CA6BpG;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CAQ3E;AAED,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IACzE,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;CACjF;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,WAAW,EAAE,CAOxE;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,SAAM,GAAG,OAAO,EAAE,CAO1E;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,gBAAgB,EAAE,IAAI,GAAE,MAAmB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQ7H"}
|