@mneme-ai/core 2.19.26 → 2.19.28
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/autonomic_scheduler/autonomic_scheduler.test.d.ts +2 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.d.ts.map +1 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.js +236 -0
- package/dist/autonomic_scheduler/autonomic_scheduler.test.js.map +1 -0
- package/dist/autonomic_scheduler/index.d.ts +149 -0
- package/dist/autonomic_scheduler/index.d.ts.map +1 -0
- package/dist/autonomic_scheduler/index.js +249 -0
- package/dist/autonomic_scheduler/index.js.map +1 -0
- package/dist/cosmic/aurelian_v1927.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1927.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1927.test.js +73 -0
- package/dist/cosmic/aurelian_v1927.test.js.map +1 -0
- package/dist/cosmic/aurelian_v1928.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v1928.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v1928.test.js +47 -0
- package/dist/cosmic/aurelian_v1928.test.js.map +1 -0
- package/dist/dreamspace_cartographer/dreamspace_cartographer.test.d.ts +2 -0
- package/dist/dreamspace_cartographer/dreamspace_cartographer.test.d.ts.map +1 -0
- package/dist/dreamspace_cartographer/dreamspace_cartographer.test.js +153 -0
- package/dist/dreamspace_cartographer/dreamspace_cartographer.test.js.map +1 -0
- package/dist/dreamspace_cartographer/index.d.ts +110 -0
- package/dist/dreamspace_cartographer/index.d.ts.map +1 -0
- package/dist/dreamspace_cartographer/index.js +175 -0
- package/dist/dreamspace_cartographer/index.js.map +1 -0
- package/dist/dreamspace_federate/dreamspace_federate.test.d.ts +2 -0
- package/dist/dreamspace_federate/dreamspace_federate.test.d.ts.map +1 -0
- package/dist/dreamspace_federate/dreamspace_federate.test.js +199 -0
- package/dist/dreamspace_federate/dreamspace_federate.test.js.map +1 -0
- package/dist/dreamspace_federate/index.d.ts +131 -0
- package/dist/dreamspace_federate/index.d.ts.map +1 -0
- package/dist/dreamspace_federate/index.js +209 -0
- package/dist/dreamspace_federate/index.js.map +1 -0
- package/dist/dreamspace_pair/dreamspace_pair.test.d.ts +2 -0
- package/dist/dreamspace_pair/dreamspace_pair.test.d.ts.map +1 -0
- package/dist/dreamspace_pair/dreamspace_pair.test.js +176 -0
- package/dist/dreamspace_pair/dreamspace_pair.test.js.map +1 -0
- package/dist/dreamspace_pair/index.d.ts +99 -0
- package/dist/dreamspace_pair/index.d.ts.map +1 -0
- package/dist/dreamspace_pair/index.js +161 -0
- package/dist/dreamspace_pair/index.js.map +1 -0
- package/dist/dreamspace_probe/dreamspace_probe.test.d.ts +2 -0
- package/dist/dreamspace_probe/dreamspace_probe.test.d.ts.map +1 -0
- package/dist/dreamspace_probe/dreamspace_probe.test.js +182 -0
- package/dist/dreamspace_probe/dreamspace_probe.test.js.map +1 -0
- package/dist/dreamspace_probe/index.d.ts +125 -0
- package/dist/dreamspace_probe/index.d.ts.map +1 -0
- package/dist/dreamspace_probe/index.js +226 -0
- package/dist/dreamspace_probe/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/lineage/welcome.d.ts.map +1 -1
- package/dist/lineage/welcome.js +15 -1
- package/dist/lineage/welcome.js.map +1 -1
- package/dist/tribunal/tribunal.d.ts.map +1 -1
- package/dist/tribunal/tribunal.js +29 -2
- package/dist/tribunal/tribunal.js.map +1 -1
- package/dist/tribunal/tribunal.test.js +22 -0
- package/dist/tribunal/tribunal.test.js.map +1 -1
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +16 -0
- package/dist/whats_new.js.map +1 -1
- package/dist/wrapper_genesis/index.d.ts.map +1 -1
- package/dist/wrapper_genesis/index.js +34 -0
- package/dist/wrapper_genesis/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.27 — MNEME DREAMSPACE · FEDERATE (stage 6 of 6)
|
|
3
|
+
*
|
|
4
|
+
* "tools ที่ elite ใน 100+ instances → 'blessed'
|
|
5
|
+
* shared via cosmic.mneme-ai.space/dreamspace
|
|
6
|
+
* ผู้ใช้ใหม่ download starter pack จาก top 100 dreamt-born tools
|
|
7
|
+
* ⇒ Mneme network effect ที่ไม่มี framework ไหนมี"
|
|
8
|
+
* — user audit, 2026-05-17
|
|
9
|
+
*
|
|
10
|
+
* Diagnosis: GESTATION proposes; EVOLUTION selects; PROBE measures;
|
|
11
|
+
* CARTOGRAPHER maps; PAIR scores complementarity. All locally. The
|
|
12
|
+
* network effect kicks in when ELITE tools spread across instances.
|
|
13
|
+
*
|
|
14
|
+
* FEDERATE composes onto v2.19.16 FEDERATED TRUTH GRAVITY. Each
|
|
15
|
+
* instance HMAC-signs an EliteAttestation for tools whose local
|
|
16
|
+
* fitness >= threshold. Quorum across instances → "blessed" tag.
|
|
17
|
+
* Starter pack export = top-N blessed tools, downloadable by new
|
|
18
|
+
* users.
|
|
19
|
+
*
|
|
20
|
+
* Composes onto:
|
|
21
|
+
* - v2.19.16 FEDERATED TRUTH GRAVITY (cross-attestation pattern)
|
|
22
|
+
* - v2.19.27 PROBE (local fitness source)
|
|
23
|
+
* - v2.19.26 EVOLUTION (lifecycle bands; only MATURE eligible)
|
|
24
|
+
* - v2.19.9 WRAPPER_GENESPLICING (blessed tools = composer recipes
|
|
25
|
+
* that any instance can apply)
|
|
26
|
+
*
|
|
27
|
+
* Honest scope:
|
|
28
|
+
* - PURE FUNCTION attestation + quorum. Caller does the actual
|
|
29
|
+
* network sync via v2.19.16 mesh/nexus transport.
|
|
30
|
+
* - Eligibility gate: only MATURE tools (v2.19.26 EVOLUTION) with
|
|
31
|
+
* local fitness >= threshold get attested.
|
|
32
|
+
* - HMAC-signed attestations; forged attestations dropped on verify.
|
|
33
|
+
* - Quorum bands match v2.19.16: unanimous / supermajority / majority
|
|
34
|
+
* / minority / conflict / orphan.
|
|
35
|
+
*/
|
|
36
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
37
|
+
const PROTOCOL_VERSION = 1;
|
|
38
|
+
const DEFAULT_MIN_FITNESS = 0.7;
|
|
39
|
+
function canon(v) {
|
|
40
|
+
if (v === null || typeof v !== "object")
|
|
41
|
+
return JSON.stringify(v);
|
|
42
|
+
if (Array.isArray(v))
|
|
43
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
44
|
+
const keys = Object.keys(v).sort();
|
|
45
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
46
|
+
}
|
|
47
|
+
function defaultSecret() {
|
|
48
|
+
return process.env["MNEME_DREAMSPACE_FEDERATE_SECRET"] || `mneme-dreamspace-federate-v${PROTOCOL_VERSION}`;
|
|
49
|
+
}
|
|
50
|
+
function hmacHex(body, secret) {
|
|
51
|
+
return createHmac("sha256", secret).update(canon(body)).digest("hex");
|
|
52
|
+
}
|
|
53
|
+
function safeEqHex(a, b) {
|
|
54
|
+
try {
|
|
55
|
+
return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Issue an EliteAttestation for a tool. Refuses if fitness < threshold
|
|
63
|
+
* (we never attest mediocre tools). Caller-supplied instanceId from
|
|
64
|
+
* v2.19.16 FEDERATED identity.
|
|
65
|
+
*/
|
|
66
|
+
export function attestElite(input) {
|
|
67
|
+
const min = input.minFitness ?? DEFAULT_MIN_FITNESS;
|
|
68
|
+
if (input.localFitness < min)
|
|
69
|
+
return null;
|
|
70
|
+
const body = {
|
|
71
|
+
v: PROTOCOL_VERSION,
|
|
72
|
+
instanceId: input.instanceId,
|
|
73
|
+
toolName: input.toolName,
|
|
74
|
+
localFitness: input.localFitness,
|
|
75
|
+
localUseCount: input.localUseCount,
|
|
76
|
+
ts: input.ts ?? Date.now(),
|
|
77
|
+
};
|
|
78
|
+
const sig = hmacHex(body, input.secret ?? defaultSecret());
|
|
79
|
+
return { ...body, sig };
|
|
80
|
+
}
|
|
81
|
+
export function verifyAttestation(a, secret) {
|
|
82
|
+
const { sig, ...body } = a;
|
|
83
|
+
return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Aggregate N attestations for a single tool into a BlessingQuorum.
|
|
87
|
+
*
|
|
88
|
+
* Bands (proportions of validAttestations / totalInstances):
|
|
89
|
+
* unanimous : >= 0.95
|
|
90
|
+
* supermajority : >= 0.67
|
|
91
|
+
* majority : >= 0.51
|
|
92
|
+
* minority : >= 0.10
|
|
93
|
+
* conflict : > 0 and < 0.10
|
|
94
|
+
* orphan : 0 attestations
|
|
95
|
+
*
|
|
96
|
+
* Forged attestations (failed HMAC verify) are dropped silently and
|
|
97
|
+
* counted in `forgedDropped`. One-vote-per-instance: duplicates from
|
|
98
|
+
* same instanceId keep the latest by ts.
|
|
99
|
+
*/
|
|
100
|
+
export function aggregateBlessing(input) {
|
|
101
|
+
const sec = input.secret ?? defaultSecret();
|
|
102
|
+
// Drop forged
|
|
103
|
+
const valid = [];
|
|
104
|
+
let forgedDropped = 0;
|
|
105
|
+
for (const a of input.attestations) {
|
|
106
|
+
if (a.toolName !== input.toolName)
|
|
107
|
+
continue;
|
|
108
|
+
if (!verifyAttestation(a, sec)) {
|
|
109
|
+
forgedDropped++;
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
valid.push(a);
|
|
113
|
+
}
|
|
114
|
+
// One-vote-per-instance: keep latest ts
|
|
115
|
+
const byInstance = new Map();
|
|
116
|
+
for (const a of valid) {
|
|
117
|
+
const prev = byInstance.get(a.instanceId);
|
|
118
|
+
if (!prev || a.ts > prev.ts)
|
|
119
|
+
byInstance.set(a.instanceId, a);
|
|
120
|
+
}
|
|
121
|
+
const deduped = Array.from(byInstance.values());
|
|
122
|
+
const totalUseCount = deduped.reduce((s, a) => s + a.localUseCount, 0);
|
|
123
|
+
const meanFitness = deduped.length === 0
|
|
124
|
+
? 0
|
|
125
|
+
: deduped.reduce((s, a) => s + a.localFitness, 0) / deduped.length;
|
|
126
|
+
const proportion = input.totalInstancesKnown === 0
|
|
127
|
+
? 0
|
|
128
|
+
: deduped.length / input.totalInstancesKnown;
|
|
129
|
+
let band;
|
|
130
|
+
if (deduped.length === 0)
|
|
131
|
+
band = "orphan";
|
|
132
|
+
else if (proportion >= 0.95)
|
|
133
|
+
band = "unanimous";
|
|
134
|
+
else if (proportion >= 0.67)
|
|
135
|
+
band = "supermajority";
|
|
136
|
+
else if (proportion >= 0.51)
|
|
137
|
+
band = "majority";
|
|
138
|
+
else if (proportion >= 0.10)
|
|
139
|
+
band = "minority";
|
|
140
|
+
else
|
|
141
|
+
band = "conflict";
|
|
142
|
+
const isBlessed = band === "unanimous" || band === "supermajority";
|
|
143
|
+
const body = {
|
|
144
|
+
v: PROTOCOL_VERSION,
|
|
145
|
+
toolName: input.toolName,
|
|
146
|
+
totalAttestations: input.attestations.length,
|
|
147
|
+
validAttestations: deduped.length,
|
|
148
|
+
forgedDropped,
|
|
149
|
+
meanFitness,
|
|
150
|
+
totalUseCount,
|
|
151
|
+
band,
|
|
152
|
+
isBlessed,
|
|
153
|
+
};
|
|
154
|
+
const sig = hmacHex(body, sec);
|
|
155
|
+
return { ...body, sig };
|
|
156
|
+
}
|
|
157
|
+
export function verifyBlessingQuorum(q, secret) {
|
|
158
|
+
const { sig, ...body } = q;
|
|
159
|
+
return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Export a starter pack of top-N blessed tools — downloaded by new
|
|
163
|
+
* users on first install. Sorted by isBlessed first, then meanFitness
|
|
164
|
+
* desc, then validAttestations desc.
|
|
165
|
+
*/
|
|
166
|
+
export function exportStarterPack(input) {
|
|
167
|
+
const topN = input.topN ?? 100;
|
|
168
|
+
const sorted = [...input.quorums].sort((a, b) => {
|
|
169
|
+
if (a.isBlessed !== b.isBlessed)
|
|
170
|
+
return a.isBlessed ? -1 : 1;
|
|
171
|
+
if (b.meanFitness !== a.meanFitness)
|
|
172
|
+
return b.meanFitness - a.meanFitness;
|
|
173
|
+
return b.validAttestations - a.validAttestations;
|
|
174
|
+
});
|
|
175
|
+
const entries = sorted.slice(0, topN).map((q) => ({
|
|
176
|
+
toolName: q.toolName,
|
|
177
|
+
band: q.band,
|
|
178
|
+
meanFitness: q.meanFitness,
|
|
179
|
+
attestationCount: q.validAttestations,
|
|
180
|
+
}));
|
|
181
|
+
const body = {
|
|
182
|
+
v: PROTOCOL_VERSION,
|
|
183
|
+
entries,
|
|
184
|
+
topN,
|
|
185
|
+
builtAt: input.builtAt ?? Date.now(),
|
|
186
|
+
};
|
|
187
|
+
const sig = hmacHex(body, input.secret ?? defaultSecret());
|
|
188
|
+
return { ...body, sig };
|
|
189
|
+
}
|
|
190
|
+
export function verifyStarterPack(p, secret) {
|
|
191
|
+
const { sig, ...body } = p;
|
|
192
|
+
return safeEqHex(hmacHex(body, secret ?? defaultSecret()), sig);
|
|
193
|
+
}
|
|
194
|
+
export const BLESSING_EMOJI = {
|
|
195
|
+
unanimous: "🏆",
|
|
196
|
+
supermajority: "🥇",
|
|
197
|
+
majority: "🥈",
|
|
198
|
+
minority: "🥉",
|
|
199
|
+
conflict: "⚖",
|
|
200
|
+
orphan: "🌌",
|
|
201
|
+
};
|
|
202
|
+
export function formatQuorumLine(q) {
|
|
203
|
+
return `${BLESSING_EMOJI[q.band]} FEDERATE ${q.toolName} · ${q.band} (${q.validAttestations}/${q.validAttestations + q.forgedDropped} valid · meanFit=${(q.meanFitness * 100).toFixed(0)}%)`;
|
|
204
|
+
}
|
|
205
|
+
export function formatStarterPackLine(p) {
|
|
206
|
+
const blessed = p.entries.filter((e) => e.band === "unanimous" || e.band === "supermajority").length;
|
|
207
|
+
return `🌍 STARTER-PACK · top-${p.topN} · ${p.entries.length} total · ${blessed} blessed`;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dreamspace_federate/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreamspace_pair.test.d.ts","sourceRoot":"","sources":["../../src/dreamspace_pair/dreamspace_pair.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { scorePair, rankAllPairs, verifyPairReport, formatPairLine, } from "./index.js";
|
|
3
|
+
const SECRET = "pair-test-secret-997744";
|
|
4
|
+
function sample(toolName, result) {
|
|
5
|
+
return { toolName, result };
|
|
6
|
+
}
|
|
7
|
+
function schema(toolName, required, optional = []) {
|
|
8
|
+
return { toolName, requiredProps: required, optionalProps: optional };
|
|
9
|
+
}
|
|
10
|
+
describe("v2.19.27 PAIR · scorePair (mutual info approximation)", () => {
|
|
11
|
+
it("perfect coverage: A's output keys cover ALL of B's required + optional", () => {
|
|
12
|
+
const s = scorePair({
|
|
13
|
+
toolA: "A",
|
|
14
|
+
outputsA: [sample("A", { name: "x", count: 3 })],
|
|
15
|
+
schemaB: schema("B", ["name", "count"], []),
|
|
16
|
+
});
|
|
17
|
+
expect(s.requiredCoverage).toBe(1.0);
|
|
18
|
+
expect(s.optionalCoverage).toBe(1.0);
|
|
19
|
+
expect(s.mutualInfoScore).toBeCloseTo(0.5 + 0.3 + 0.2 * s.keyOverlapScore, 5);
|
|
20
|
+
});
|
|
21
|
+
it("zero required coverage: A's keys disjoint from B's required → low MI", () => {
|
|
22
|
+
const s = scorePair({
|
|
23
|
+
toolA: "A",
|
|
24
|
+
outputsA: [sample("A", { foo: 1 })],
|
|
25
|
+
schemaB: schema("B", ["name", "count"], ["other"]), // also non-empty optional
|
|
26
|
+
});
|
|
27
|
+
expect(s.requiredCoverage).toBe(0);
|
|
28
|
+
expect(s.optionalCoverage).toBe(0);
|
|
29
|
+
expect(s.mutualInfoScore).toBeLessThan(0.2);
|
|
30
|
+
});
|
|
31
|
+
it("partial required coverage rewards proportionally", () => {
|
|
32
|
+
const s = scorePair({
|
|
33
|
+
toolA: "A",
|
|
34
|
+
outputsA: [sample("A", { name: "x" })],
|
|
35
|
+
schemaB: schema("B", ["name", "count", "ts"]),
|
|
36
|
+
});
|
|
37
|
+
expect(s.requiredCoverage).toBeCloseTo(1 / 3, 5);
|
|
38
|
+
});
|
|
39
|
+
it("case-insensitive key matching", () => {
|
|
40
|
+
const s = scorePair({
|
|
41
|
+
toolA: "A",
|
|
42
|
+
outputsA: [sample("A", { NAME: "x" })],
|
|
43
|
+
schemaB: schema("B", ["name"]),
|
|
44
|
+
});
|
|
45
|
+
expect(s.requiredCoverage).toBe(1.0);
|
|
46
|
+
});
|
|
47
|
+
it("multiple samples union their keys", () => {
|
|
48
|
+
const s = scorePair({
|
|
49
|
+
toolA: "A",
|
|
50
|
+
outputsA: [sample("A", { name: "x" }), sample("A", { count: 1 })],
|
|
51
|
+
schemaB: schema("B", ["name", "count"]),
|
|
52
|
+
});
|
|
53
|
+
expect(s.requiredCoverage).toBe(1.0);
|
|
54
|
+
});
|
|
55
|
+
it("empty required + empty output -> vacuous 1.0 required coverage", () => {
|
|
56
|
+
const s = scorePair({
|
|
57
|
+
toolA: "A",
|
|
58
|
+
outputsA: [sample("A", {})],
|
|
59
|
+
schemaB: schema("B", [], []),
|
|
60
|
+
});
|
|
61
|
+
expect(s.requiredCoverage).toBe(1.0);
|
|
62
|
+
expect(s.optionalCoverage).toBe(1.0);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("v2.19.27 PAIR · rankAllPairs (full ordered ranking)", () => {
|
|
66
|
+
it("scores every ordered (A, B) pair; self-pairs excluded", () => {
|
|
67
|
+
const r = rankAllPairs({
|
|
68
|
+
toolOutputs: [
|
|
69
|
+
[sample("A", { name: "x", count: 1 })],
|
|
70
|
+
[sample("B", { name: "y" })],
|
|
71
|
+
],
|
|
72
|
+
toolSchemas: [
|
|
73
|
+
schema("A", ["name"]), // B → A; A → A excluded
|
|
74
|
+
schema("B", ["name"]),
|
|
75
|
+
],
|
|
76
|
+
minScore: 0,
|
|
77
|
+
builtAt: 0,
|
|
78
|
+
secret: SECRET,
|
|
79
|
+
});
|
|
80
|
+
// 2 tools, 2 schemas, no self-pairs -> 2 candidate pairs (A→B, B→A)
|
|
81
|
+
expect(r.totalCandidatePairs).toBe(2);
|
|
82
|
+
});
|
|
83
|
+
it("sorts by mutual info desc; filters below minScore", () => {
|
|
84
|
+
const r = rankAllPairs({
|
|
85
|
+
toolOutputs: [
|
|
86
|
+
[sample("good", { name: "x", count: 1, ts: 1 })],
|
|
87
|
+
[sample("bad", { unrelated: 1 })],
|
|
88
|
+
],
|
|
89
|
+
toolSchemas: [
|
|
90
|
+
schema("good", []),
|
|
91
|
+
schema("bad", []),
|
|
92
|
+
schema("target", ["name", "count", "ts"]),
|
|
93
|
+
],
|
|
94
|
+
minScore: 0.5,
|
|
95
|
+
builtAt: 0,
|
|
96
|
+
secret: SECRET,
|
|
97
|
+
});
|
|
98
|
+
// good → target should rank high; bad → target low (likely filtered)
|
|
99
|
+
expect(r.pairs[0].toolA).toBe("good");
|
|
100
|
+
expect(r.pairs[0].toolB).toBe("target");
|
|
101
|
+
expect(r.pairs.every((p) => p.mutualInfoScore >= 0.5)).toBe(true);
|
|
102
|
+
});
|
|
103
|
+
it("topN respected", () => {
|
|
104
|
+
const r = rankAllPairs({
|
|
105
|
+
toolOutputs: Array.from({ length: 5 }, (_, i) => [sample(`t${i}`, { x: 1 })]),
|
|
106
|
+
toolSchemas: Array.from({ length: 5 }, (_, i) => schema(`t${i}`, ["x"])),
|
|
107
|
+
minScore: 0,
|
|
108
|
+
topN: 3,
|
|
109
|
+
builtAt: 0,
|
|
110
|
+
secret: SECRET,
|
|
111
|
+
});
|
|
112
|
+
expect(r.pairs.length).toBeLessThanOrEqual(3);
|
|
113
|
+
});
|
|
114
|
+
it("HMAC sig verifies; rejects tamper", () => {
|
|
115
|
+
const r = rankAllPairs({
|
|
116
|
+
toolOutputs: [[sample("a", { x: 1 })]],
|
|
117
|
+
toolSchemas: [schema("a", []), schema("b", [])],
|
|
118
|
+
builtAt: 0,
|
|
119
|
+
secret: SECRET,
|
|
120
|
+
});
|
|
121
|
+
expect(verifyPairReport(r, SECRET)).toBe(true);
|
|
122
|
+
expect(verifyPairReport({ ...r, qualifyingPairs: 999 }, SECRET)).toBe(false);
|
|
123
|
+
});
|
|
124
|
+
it("MEASURED 100% determinism: same input -> same sig (30 trials)", () => {
|
|
125
|
+
const input = {
|
|
126
|
+
toolOutputs: [[sample("a", { x: 1 })], [sample("b", { y: 1 })]],
|
|
127
|
+
toolSchemas: [schema("a", ["x"]), schema("b", ["y"])],
|
|
128
|
+
builtAt: 1_000_000,
|
|
129
|
+
secret: SECRET,
|
|
130
|
+
};
|
|
131
|
+
const firstSig = rankAllPairs(input).sig;
|
|
132
|
+
let allEqual = true;
|
|
133
|
+
for (let i = 0; i < 30; i++) {
|
|
134
|
+
if (rankAllPairs(input).sig !== firstSig) {
|
|
135
|
+
allEqual = false;
|
|
136
|
+
break;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
expect(allEqual).toBe(true);
|
|
140
|
+
});
|
|
141
|
+
it("MEASURED canonical scenario: truth.forensic→bug_prophet has high MI", () => {
|
|
142
|
+
// truth.forensic outputs { claim, sniffs, verdict, evidence }
|
|
143
|
+
// bug_prophet expects { claim, evidence } as input
|
|
144
|
+
const r = rankAllPairs({
|
|
145
|
+
toolOutputs: [
|
|
146
|
+
[sample("mneme.truth.forensic", { claim: "x", sniffs: [], verdict: "ACCEPTED", evidence: [] })],
|
|
147
|
+
[sample("mneme.bug_prophet", { prophecy: "..." })], // unrelated output
|
|
148
|
+
],
|
|
149
|
+
toolSchemas: [
|
|
150
|
+
schema("mneme.bug_prophet", ["claim", "evidence"]),
|
|
151
|
+
schema("mneme.truth.forensic", ["claim"]),
|
|
152
|
+
],
|
|
153
|
+
minScore: 0.3,
|
|
154
|
+
builtAt: 0,
|
|
155
|
+
secret: SECRET,
|
|
156
|
+
});
|
|
157
|
+
const tfToProphet = r.pairs.find((p) => p.toolA === "mneme.truth.forensic" && p.toolB === "mneme.bug_prophet");
|
|
158
|
+
expect(tfToProphet).toBeDefined();
|
|
159
|
+
expect(tfToProphet.mutualInfoScore).toBeGreaterThanOrEqual(0.5);
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
describe("v2.19.27 PAIR · formatter", () => {
|
|
163
|
+
it("formatPairLine includes A → B + MI% + required% + optional%", () => {
|
|
164
|
+
const s = scorePair({
|
|
165
|
+
toolA: "x",
|
|
166
|
+
outputsA: [sample("x", { name: "y" })],
|
|
167
|
+
schemaB: schema("y", ["name"]),
|
|
168
|
+
});
|
|
169
|
+
const line = formatPairLine(s);
|
|
170
|
+
expect(line).toContain("PAIR x → y");
|
|
171
|
+
expect(line).toContain("MI=");
|
|
172
|
+
expect(line).toContain("req=");
|
|
173
|
+
expect(line).toContain("opt=");
|
|
174
|
+
});
|
|
175
|
+
});
|
|
176
|
+
//# sourceMappingURL=dreamspace_pair.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dreamspace_pair.test.js","sourceRoot":"","sources":["../../src/dreamspace_pair/dreamspace_pair.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.27 — MNEME DREAMSPACE · PAIR (stage 3 of 6)
|
|
3
|
+
*
|
|
4
|
+
* "for every pair (A, B): score = mutual_info(output_A, expected_
|
|
5
|
+
* input_B). top pairs → ผ่านขั้น 4"
|
|
6
|
+
* — user audit, 2026-05-17
|
|
7
|
+
*
|
|
8
|
+
* Diagnosis: v2.19.26 EVOLUTION.selectMatingPairs uses FREQUENCY
|
|
9
|
+
* (how often A→B fires together). PAIR adds QUALITY — measures
|
|
10
|
+
* how well A's output matches what B EXPECTS as input. High
|
|
11
|
+
* mutual_info → A and B are genuinely complementary; safe to splice.
|
|
12
|
+
*
|
|
13
|
+
* We approximate mutual information without LLM: compare key-name
|
|
14
|
+
* overlap (Jaccard over object property names) AND value-type
|
|
15
|
+
* compatibility. Both signals together approximate "would A's output
|
|
16
|
+
* be a plausible input to B?".
|
|
17
|
+
*
|
|
18
|
+
* Composes onto:
|
|
19
|
+
* - v2.19.26 EVOLUTION (replaces co-occurrence ranking with quality)
|
|
20
|
+
* - v2.19.27 PROBE (probe outputs feed PAIR's mutual_info)
|
|
21
|
+
* - v2.19.9 WRAPPER_GENESPLICING (high-mutual-info pairs → chimera)
|
|
22
|
+
* - v2.19.25 SLEEP TRAINING (PAIR fitness blends with jaccard reward)
|
|
23
|
+
*
|
|
24
|
+
* Honest scope:
|
|
25
|
+
* - Mutual info APPROXIMATION via shape-matching, not full Shannon
|
|
26
|
+
* information. Faster, deterministic, sufficient for "are these
|
|
27
|
+
* two tools complementary?" decision.
|
|
28
|
+
* - HMAC-signed PairReport so federation can ship verified pairs.
|
|
29
|
+
*/
|
|
30
|
+
declare const PROTOCOL_VERSION: 1;
|
|
31
|
+
export interface ToolOutputSample {
|
|
32
|
+
toolName: string;
|
|
33
|
+
/** Object output (we focus on object-shape compatibility). */
|
|
34
|
+
result: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
export interface ToolInputSchema {
|
|
37
|
+
toolName: string;
|
|
38
|
+
/** Required + optional property names. */
|
|
39
|
+
requiredProps: string[];
|
|
40
|
+
optionalProps: string[];
|
|
41
|
+
}
|
|
42
|
+
export interface PairScore {
|
|
43
|
+
toolA: string;
|
|
44
|
+
toolB: string;
|
|
45
|
+
/** Object key overlap A.outputs vs B.requiredProps (Jaccard 0..1). */
|
|
46
|
+
keyOverlapScore: number;
|
|
47
|
+
/** Required-coverage: fraction of B's required props that A produces. */
|
|
48
|
+
requiredCoverage: number;
|
|
49
|
+
/** Optional-coverage: fraction of B's optional props A also produces. */
|
|
50
|
+
optionalCoverage: number;
|
|
51
|
+
/** Final mutual_info approximation (weighted blend). */
|
|
52
|
+
mutualInfoScore: number;
|
|
53
|
+
}
|
|
54
|
+
export interface PairReport {
|
|
55
|
+
v: typeof PROTOCOL_VERSION;
|
|
56
|
+
pairs: PairScore[];
|
|
57
|
+
totalCandidatePairs: number;
|
|
58
|
+
qualifyingPairs: number;
|
|
59
|
+
minScore: number;
|
|
60
|
+
builtAt: number;
|
|
61
|
+
sig: string;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Score a single (A, B) pair: how complementary is A's output to B's
|
|
65
|
+
* expected input?
|
|
66
|
+
*
|
|
67
|
+
* keyOverlapScore = jaccard(unionOutputKeys(A), requiredProps(B) ∪ optionalProps(B))
|
|
68
|
+
* requiredCoverage = |outputKeys(A) ∩ requiredProps(B)| / |requiredProps(B)|
|
|
69
|
+
* optionalCoverage = |outputKeys(A) ∩ optionalProps(B)| / |optionalProps(B)|
|
|
70
|
+
* mutualInfoScore = 0.5 * requiredCoverage + 0.3 * optionalCoverage + 0.2 * keyOverlapScore
|
|
71
|
+
*
|
|
72
|
+
* Required-coverage dominates because B will THROW if a required prop
|
|
73
|
+
* is missing; optional is nice-to-have; raw key overlap captures broader
|
|
74
|
+
* signal compatibility.
|
|
75
|
+
*/
|
|
76
|
+
export declare function scorePair(input: {
|
|
77
|
+
toolA: string;
|
|
78
|
+
outputsA: ToolOutputSample[];
|
|
79
|
+
schemaB: ToolInputSchema;
|
|
80
|
+
}): PairScore;
|
|
81
|
+
/**
|
|
82
|
+
* Score ALL ordered (A, B) pairs across the supplied tools; filter
|
|
83
|
+
* above minScore; sort by mutualInfoScore desc. Self-pairs excluded.
|
|
84
|
+
*
|
|
85
|
+
* Returns top pairs ready to feed into v2.19.26 GESTATION as
|
|
86
|
+
* `pattern_co_occurrence` signals with quality (not just frequency).
|
|
87
|
+
*/
|
|
88
|
+
export declare function rankAllPairs(input: {
|
|
89
|
+
toolOutputs: ToolOutputSample[][];
|
|
90
|
+
toolSchemas: ToolInputSchema[];
|
|
91
|
+
minScore?: number;
|
|
92
|
+
topN?: number;
|
|
93
|
+
builtAt?: number;
|
|
94
|
+
secret?: string;
|
|
95
|
+
}): PairReport;
|
|
96
|
+
export declare function verifyPairReport(r: PairReport, secret?: string): boolean;
|
|
97
|
+
export declare function formatPairLine(p: PairScore): string;
|
|
98
|
+
export {};
|
|
99
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dreamspace_pair/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAGpC,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,eAAe,EAAE,MAAM,CAAC;IACxB,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,gBAAgB,EAAE,MAAM,CAAC;IACzB,wDAAwD;IACxD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AA0CD;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7B,OAAO,EAAE,eAAe,CAAC;CAC1B,GAAG,SAAS,CAkBZ;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,WAAW,EAAE,gBAAgB,EAAE,EAAE,CAAC;IAClC,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CAgCb;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAGxE;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,SAAS,GAAG,MAAM,CAGnD"}
|