@mneme-ai/core 3.101.0 → 3.103.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 +1 -0
- package/dist/agent_manifest.js.map +1 -1
- package/dist/boot/index.js +1 -1
- package/dist/boot/index.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/intent_gateway/index.d.ts.map +1 -1
- package/dist/intent_gateway/index.js +2 -1
- package/dist/intent_gateway/index.js.map +1 -1
- package/dist/mediator/index.d.ts +62 -0
- package/dist/mediator/index.d.ts.map +1 -0
- package/dist/mediator/index.js +152 -0
- package/dist/mediator/index.js.map +1 -0
- package/dist/mediator/mediator.test.d.ts +2 -0
- package/dist/mediator/mediator.test.d.ts.map +1 -0
- package/dist/mediator/mediator.test.js +42 -0
- package/dist/mediator/mediator.test.js.map +1 -0
- package/dist/morph/index.d.ts +107 -0
- package/dist/morph/index.d.ts.map +1 -0
- package/dist/morph/index.js +183 -0
- package/dist/morph/index.js.map +1 -0
- package/dist/morph/morph.test.d.ts +2 -0
- package/dist/morph/morph.test.d.ts.map +1 -0
- package/dist/morph/morph.test.js +48 -0
- package/dist/morph/morph.test.js.map +1 -0
- package/dist/trust_service/index.d.ts.map +1 -1
- package/dist/trust_service/index.js +7 -0
- package/dist/trust_service/index.js.map +1 -1
- package/dist/truth_gate/claims.d.ts.map +1 -1
- package/dist/truth_gate/claims.js +10 -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 +18 -0
- package/dist/truth_gate/probes.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
const num = (v) => { const n = Number(v); return Number.isFinite(n) && n > 0 ? n : 0; };
|
|
2
|
+
/** Re-checkable neutrality proof: recompute every fairness property from the parties' OWN valuations. */
|
|
3
|
+
export function verifyFairness(parties, allocation) {
|
|
4
|
+
const ps = (parties ?? []).filter((p) => p && p.name);
|
|
5
|
+
const items = Object.keys(allocation ?? {});
|
|
6
|
+
const payoff = (p, who) => items.reduce((s, it) => s + num(p.vals?.[it]) * (allocation[it]?.[who] ?? 0), 0);
|
|
7
|
+
const payoffs = {};
|
|
8
|
+
const fairShare = {};
|
|
9
|
+
for (const p of ps) {
|
|
10
|
+
payoffs[p.name] = Math.round(payoff(p, p.name) * 1000) / 1000;
|
|
11
|
+
fairShare[p.name] = Math.round((Object.values(p.vals ?? {}).reduce((s, v) => s + num(v), 0) / Math.max(1, ps.length)) * 1000) / 1000;
|
|
12
|
+
}
|
|
13
|
+
let envyFree = true, proportional = true;
|
|
14
|
+
for (const p of ps) {
|
|
15
|
+
if (payoffs[p.name] + 1e-6 < fairShare[p.name])
|
|
16
|
+
proportional = false;
|
|
17
|
+
for (const q of ps)
|
|
18
|
+
if (q.name !== p.name && payoff(p, p.name) + 1e-6 < payoff(p, q.name))
|
|
19
|
+
envyFree = false;
|
|
20
|
+
}
|
|
21
|
+
const vals = ps.map((p) => payoffs[p.name]);
|
|
22
|
+
const equitable = vals.length >= 2 && Math.max(...vals) - Math.min(...vals) < 0.5;
|
|
23
|
+
const splitItems = items.filter((it) => Object.values(allocation[it] ?? {}).some((f) => f > 1e-6 && f < 1 - 1e-6));
|
|
24
|
+
return { envyFree, proportional, equitable, payoffs, fairShare, splitItems };
|
|
25
|
+
}
|
|
26
|
+
/** Adjusted Winner — envy-free + equitable + Pareto-optimal allocation for TWO parties. */
|
|
27
|
+
export function adjustedWinner(a, b) {
|
|
28
|
+
const items = [...new Set([...Object.keys(a?.vals ?? {}), ...Object.keys(b?.vals ?? {})])];
|
|
29
|
+
const av = (i) => num(a.vals?.[i]), bv = (i) => num(b.vals?.[i]);
|
|
30
|
+
const frac = {}; // fraction of each item going to A
|
|
31
|
+
for (const i of items)
|
|
32
|
+
frac[i] = av(i) >= bv(i) ? 1 : 0; // phase 1: each item to its higher bidder
|
|
33
|
+
const payoffs = () => { let pa = 0, pb = 0; for (const i of items) {
|
|
34
|
+
pa += av(i) * frac[i];
|
|
35
|
+
pb += bv(i) * (1 - frac[i]);
|
|
36
|
+
} return [pa, pb]; };
|
|
37
|
+
let [pa, pb] = payoffs();
|
|
38
|
+
if (Math.abs(pa - pb) >= 1e-9) {
|
|
39
|
+
const richIsA = pa > pb;
|
|
40
|
+
// rich transfers its items, least-valued-relative-to-the-other first, until payoffs equalize (split the crossing item)
|
|
41
|
+
const pool = items.filter((i) => (richIsA ? frac[i] === 1 : frac[i] === 0))
|
|
42
|
+
.sort((x, y) => (richIsA ? av(x) / Math.max(bv(x), 1e-9) - av(y) / Math.max(bv(y), 1e-9) : bv(x) / Math.max(av(x), 1e-9) - bv(y) / Math.max(av(y), 1e-9)));
|
|
43
|
+
for (const i of pool) {
|
|
44
|
+
[pa, pb] = payoffs();
|
|
45
|
+
if (Math.abs(pa - pb) < 1e-9)
|
|
46
|
+
break;
|
|
47
|
+
if (richIsA ? pa <= pb : pb <= pa)
|
|
48
|
+
break;
|
|
49
|
+
const sum = av(i) + bv(i);
|
|
50
|
+
if (sum <= 0)
|
|
51
|
+
continue;
|
|
52
|
+
if (richIsA) {
|
|
53
|
+
const npa = pa - av(i), npb = pb + bv(i);
|
|
54
|
+
if (npa >= npb)
|
|
55
|
+
frac[i] = 0; // full transfer keeps A ≥ B
|
|
56
|
+
else {
|
|
57
|
+
frac[i] = Math.max(0, Math.min(1, 1 - (pa - pb) / sum));
|
|
58
|
+
break;
|
|
59
|
+
} // split to equalize exactly
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
const npb = pb - bv(i), npa = pa + av(i);
|
|
63
|
+
if (npb >= npa)
|
|
64
|
+
frac[i] = 1;
|
|
65
|
+
else {
|
|
66
|
+
frac[i] = Math.max(0, Math.min(1, (pb - pa) / sum));
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const alloc = {};
|
|
73
|
+
for (const i of items)
|
|
74
|
+
alloc[i] = { [a.name]: Math.round(frac[i] * 1e6) / 1e6, [b.name]: Math.round((1 - frac[i]) * 1e6) / 1e6 };
|
|
75
|
+
return alloc;
|
|
76
|
+
}
|
|
77
|
+
/** Proportional sequential allocation for N parties (each ends with ≥ a 1/N share by their own values). */
|
|
78
|
+
export function proportionalDivision(parties) {
|
|
79
|
+
const ps = (parties ?? []).filter((p) => p && p.name);
|
|
80
|
+
const items = [...new Set(ps.flatMap((p) => Object.keys(p.vals ?? {})))];
|
|
81
|
+
const alloc = {};
|
|
82
|
+
for (const i of items)
|
|
83
|
+
alloc[i] = Object.fromEntries(ps.map((p) => [p.name, 0]));
|
|
84
|
+
const remaining = new Set(items);
|
|
85
|
+
let turn = 0;
|
|
86
|
+
while (remaining.size) {
|
|
87
|
+
const p = ps[turn % ps.length];
|
|
88
|
+
let best = null, bestV = -Infinity;
|
|
89
|
+
for (const i of remaining) {
|
|
90
|
+
const v = num(p.vals?.[i]);
|
|
91
|
+
if (v > bestV) {
|
|
92
|
+
bestV = v;
|
|
93
|
+
best = i;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (best == null)
|
|
97
|
+
break;
|
|
98
|
+
alloc[best] = Object.fromEntries(ps.map((q) => [q.name, q.name === p.name ? 1 : 0]));
|
|
99
|
+
remaining.delete(best);
|
|
100
|
+
turn++;
|
|
101
|
+
}
|
|
102
|
+
return alloc;
|
|
103
|
+
}
|
|
104
|
+
/** Mediate: Adjusted Winner for two parties (envy-free + equitable + Pareto), proportional for N>2. */
|
|
105
|
+
export function mediate(parties) {
|
|
106
|
+
const ps = (parties ?? []).filter((p) => p && p.name && p.vals);
|
|
107
|
+
const items = [...new Set(ps.flatMap((p) => Object.keys(p.vals ?? {})))];
|
|
108
|
+
if (ps.length === 2) {
|
|
109
|
+
const allocation = adjustedWinner(ps[0], ps[1]);
|
|
110
|
+
const proof = verifyFairness(ps, allocation);
|
|
111
|
+
return { method: "adjusted-winner", allocation, proof, parties: ps.map((p) => p.name), items, note: "Adjusted Winner: envy-free + equitable + Pareto-optimal for two parties (at most one item split)." };
|
|
112
|
+
}
|
|
113
|
+
const allocation = proportionalDivision(ps);
|
|
114
|
+
const proof = verifyFairness(ps, allocation);
|
|
115
|
+
return { method: "proportional", allocation, proof, parties: ps.map((p) => p.name), items, note: `Proportional allocation for ${ps.length} parties (each ≥ a 1/${ps.length} fair share; envy-freeness is not guaranteed for N>2).` };
|
|
116
|
+
}
|
|
117
|
+
export function mediatorGauntlet() {
|
|
118
|
+
// classic 2-party split: A values house most; B values boat most; car contested.
|
|
119
|
+
const A = { name: "A", vals: { house: 50, car: 30, boat: 20 } };
|
|
120
|
+
const B = { name: "B", vals: { house: 30, car: 30, boat: 40 } };
|
|
121
|
+
const r = mediate([A, B]);
|
|
122
|
+
const houseToA = r.allocation["house"]["A"] === 1, boatToB = r.allocation["boat"]["B"] === 1;
|
|
123
|
+
const equalPayoff = Math.abs(r.proof.payoffs["A"] - r.proof.payoffs["B"]) < 0.5 && r.proof.payoffs["A"] >= 50;
|
|
124
|
+
const proven = r.proof.envyFree && r.proof.equitable && r.proof.proportional;
|
|
125
|
+
const oneSplit = r.proof.splitItems.length <= 1;
|
|
126
|
+
// tamper test: a biased allocation (give A everything) fails the neutrality re-check.
|
|
127
|
+
const biased = { house: { A: 1, B: 0 }, car: { A: 1, B: 0 }, boat: { A: 1, B: 0 } };
|
|
128
|
+
const tamperCaught = verifyFairness([A, B], biased).envyFree === false || verifyFairness([A, B], biased).proportional === false;
|
|
129
|
+
// N>2 proportional: each party gets ≥ its 1/3 fair share.
|
|
130
|
+
const three = mediate([{ name: "X", vals: { a: 60, b: 30, c: 10 } }, { name: "Y", vals: { a: 10, b: 60, c: 30 } }, { name: "Z", vals: { a: 30, b: 10, c: 60 } }]);
|
|
131
|
+
const propOK = three.method === "proportional" && three.proof.proportional;
|
|
132
|
+
const total = (() => { try {
|
|
133
|
+
mediate(null);
|
|
134
|
+
adjustedWinner(null, null);
|
|
135
|
+
verifyFairness(null, null);
|
|
136
|
+
proportionalDivision([]);
|
|
137
|
+
return true;
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return false;
|
|
141
|
+
} })();
|
|
142
|
+
const checks = [
|
|
143
|
+
{ name: "ADJUSTED-WINNER", pass: houseToA && boatToB, detail: "each item goes to the party that values it most (house→A, boat→B); the contested item is split to balance" },
|
|
144
|
+
{ name: "EQUITABLE+PROPORTIONAL", pass: equalPayoff, detail: "both parties end with EQUAL perceived value, each ≥ their 50% fair share" },
|
|
145
|
+
{ name: "PROVEN-FAIR", pass: proven && oneSplit, detail: "the result is envy-free + equitable + proportional, with at most one split item" },
|
|
146
|
+
{ name: "NEUTRALITY-RECHECK-CATCHES-BIAS", pass: tamperCaught, detail: "verifyFairness re-checks from the parties' own values → a biased (give-A-everything) split fails envy-free/proportional" },
|
|
147
|
+
{ name: "N-PARTY-PROPORTIONAL", pass: propOK, detail: "for 3 parties → proportional allocation, each ≥ a 1/3 fair share (envy-freeness honestly not claimed for N>2)" },
|
|
148
|
+
{ name: "TOTAL", pass: total, detail: "null/garbage never throws" },
|
|
149
|
+
];
|
|
150
|
+
return { score: checks.every((c) => c.pass) ? 100 : 0, checks };
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mediator/index.ts"],"names":[],"mappings":"AA4BA,MAAM,GAAG,GAAG,CAAC,CAAU,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEjG,yGAAyG;AACzG,MAAM,UAAU,cAAc,CAAC,OAA6B,EAAE,UAAsB;IAClF,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,CAAC,CAAQ,EAAE,GAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3H,MAAM,OAAO,GAA2B,EAAE,CAAC;IAAC,MAAM,SAAS,GAA2B,EAAE,CAAC;IACzF,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAAC,CAAC;IAC5N,IAAI,QAAQ,GAAG,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QACnB,IAAI,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;YAAE,YAAY,GAAG,KAAK,CAAC;QACrE,KAAK,MAAM,CAAC,IAAI,EAAE;YAAE,IAAI,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC;gBAAE,QAAQ,GAAG,KAAK,CAAC;IAC9G,CAAC;IACD,MAAM,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAAC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,GAAG,CAAC;IAC/H,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;IACnH,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAC/E,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,cAAc,CAAC,CAAQ,EAAE,CAAQ;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,IAAI,GAA2B,EAAE,CAAC,CAA8B,mCAAmC;IACzG,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAc,0CAA0C;IAChH,MAAM,OAAO,GAAG,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAU,CAAC,CAAC,CAAC,CAAC;IACvJ,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;IACzB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,CAAC;QACxB,uHAAuH;QACvH,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aACxE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7J,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;YACrB,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;YACrB,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,IAAI;gBAAE,MAAM;YACpC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;gBAAE,MAAM;YACzC,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,GAAG,IAAI,CAAC;gBAAE,SAAS;YAClD,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,GAAG,IAAI,GAAG;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAoC,4BAA4B;qBACvF,CAAC;oBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC,CAAG,4BAA4B;YACzG,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gBACzC,IAAI,GAAG,IAAI,GAAG;oBAAE,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;qBACvB,CAAC;oBAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;oBAAC,MAAM;gBAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAe,EAAE,CAAC;IAC7B,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;IACjI,OAAO,KAAK,CAAC;AACf,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,oBAAoB,CAAC,OAA6B;IAChE,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IACtD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAe,EAAE,CAAC;IAAC,KAAK,MAAM,CAAC,IAAI,KAAK;QAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/G,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,OAAO,SAAS,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAkB,IAAI,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC;QAClD,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;YAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC;gBAAC,KAAK,GAAG,CAAC,CAAC;gBAAC,IAAI,GAAG,CAAC,CAAC;YAAC,CAAC;QAAC,CAAC;QAClG,IAAI,IAAI,IAAI,IAAI;YAAE,MAAM;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAAC,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,OAAO,CAAC,OAA6B;IACnD,MAAM,EAAE,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;IAChE,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACzE,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;QAC7C,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,mGAAmG,EAAE,CAAC;IAC5M,CAAC;IACD,MAAM,UAAU,GAAG,oBAAoB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,cAAc,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAC7C,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,+BAA+B,EAAE,CAAC,MAAM,wBAAwB,EAAE,CAAC,MAAM,wDAAwD,EAAE,CAAC;AACvO,CAAC;AAID,MAAM,UAAU,gBAAgB;IAC9B,iFAAiF;IACjF,MAAM,CAAC,GAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,CAAC,GAAU,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC;IACvE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7F,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9G,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;IAC7E,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,IAAI,CAAC,CAAC;IAChD,sFAAsF;IACtF,MAAM,MAAM,GAAe,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;IAChG,MAAM,YAAY,GAAG,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,QAAQ,KAAK,KAAK,IAAI,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,YAAY,KAAK,KAAK,CAAC;IAChI,0DAA0D;IAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IAClK,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,KAAK,cAAc,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC;IAC3E,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,IAAa,CAAC,CAAC;QAAC,cAAc,CAAC,IAAa,EAAE,IAAa,CAAC,CAAC;QAAC,cAAc,CAAC,IAAa,EAAE,IAAa,CAAC,CAAC;QAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACvN,MAAM,MAAM,GAAG;QACb,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAM,EAAE,2GAA2G,EAAE;QAC3K,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,0EAA0E,EAAE;QACzI,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,IAAI,QAAQ,EAAE,MAAM,EAAE,iFAAiF,EAAE;QAC5I,EAAE,IAAI,EAAE,iCAAiC,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,yHAAyH,EAAE;QAClM,EAAE,IAAI,EAAE,sBAAsB,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,+GAA+G,EAAE;QACvK,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE;KACpE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;AAClE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediator.test.d.ts","sourceRoot":"","sources":["../../src/mediator/mediator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { mediate, adjustedWinner, verifyFairness, proportionalDivision, mediatorGauntlet } from "./index.js";
|
|
3
|
+
const A = { name: "A", vals: { house: 50, car: 30, boat: 20 } };
|
|
4
|
+
const B = { name: "B", vals: { house: 30, car: 30, boat: 40 } };
|
|
5
|
+
describe("mediator", () => {
|
|
6
|
+
it("gauntlet is 100", () => expect(mediatorGauntlet().score).toBe(100));
|
|
7
|
+
it("Adjusted Winner: high-bidder gets the item, contested item split, equal payoffs", () => {
|
|
8
|
+
const r = mediate([A, B]);
|
|
9
|
+
expect(r.method).toBe("adjusted-winner");
|
|
10
|
+
expect(r.allocation.house.A).toBe(1);
|
|
11
|
+
expect(r.allocation.boat.B).toBe(1);
|
|
12
|
+
expect(Math.abs(r.proof.payoffs.A - r.proof.payoffs.B)).toBeLessThan(0.5);
|
|
13
|
+
expect(r.proof.payoffs.A).toBeGreaterThanOrEqual(50);
|
|
14
|
+
});
|
|
15
|
+
it("the result is envy-free + equitable + proportional", () => {
|
|
16
|
+
const p = verifyFairness([A, B], adjustedWinner(A, B));
|
|
17
|
+
expect(p.envyFree).toBe(true);
|
|
18
|
+
expect(p.equitable).toBe(true);
|
|
19
|
+
expect(p.proportional).toBe(true);
|
|
20
|
+
});
|
|
21
|
+
it("neutrality re-check catches a biased allocation", () => {
|
|
22
|
+
const biased = { house: { A: 1, B: 0 }, car: { A: 1, B: 0 }, boat: { A: 1, B: 0 } };
|
|
23
|
+
const p = verifyFairness([A, B], biased);
|
|
24
|
+
expect(p.envyFree && p.proportional).toBe(false);
|
|
25
|
+
});
|
|
26
|
+
it("N>2 → proportional, each ≥ a 1/N fair share", () => {
|
|
27
|
+
const r = mediate([{ name: "X", vals: { a: 60, b: 30, c: 10 } }, { name: "Y", vals: { a: 10, b: 60, c: 30 } }, { name: "Z", vals: { a: 30, b: 10, c: 60 } }]);
|
|
28
|
+
expect(r.method).toBe("proportional");
|
|
29
|
+
expect(r.proof.proportional).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
it("each item's shares sum to 1", () => {
|
|
32
|
+
const alloc = adjustedWinner(A, B);
|
|
33
|
+
for (const it of Object.keys(alloc))
|
|
34
|
+
expect(Object.values(alloc[it]).reduce((s, f) => s + f, 0)).toBeCloseTo(1, 4);
|
|
35
|
+
});
|
|
36
|
+
it("never throws on garbage", () => {
|
|
37
|
+
expect(() => mediate(null)).not.toThrow();
|
|
38
|
+
expect(() => adjustedWinner(null, null)).not.toThrow();
|
|
39
|
+
expect(() => proportionalDivision([])).not.toThrow();
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
//# sourceMappingURL=mediator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mediator.test.js","sourceRoot":"","sources":["../../src/mediator/mediator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v3.103.0 — MORPH: the polymorphic MCP tool (the "ferrofluid plug").
|
|
3
|
+
*
|
|
4
|
+
* THE PROBLEM IT SOLVES (the load-bearing adoption weakness): an AI agent that
|
|
5
|
+
* connects to Mneme — Cursor, Cline, Windsurf, Claude Code, anything — is faced
|
|
6
|
+
* with 600+ static MCP tools it has never seen. It cannot know which verb serves
|
|
7
|
+
* the moment, so most of Mneme sits installed-but-idle. Every other MCP server
|
|
8
|
+
* dumps its whole tool surface and hopes the agent guesses right.
|
|
9
|
+
*
|
|
10
|
+
* THE IDEA (the honest realization of the "schema-morphing plug"): expose ONE
|
|
11
|
+
* self-describing tool the agent learns once — `mneme.morph`. The agent states
|
|
12
|
+
* its intent in free natural language (any language, EN/Thai); MORPH "morphs"
|
|
13
|
+
* that intent into the RIGHT Mneme capability and hands back a typed CONTACT
|
|
14
|
+
* SURFACE — the exact MCP tool to call next, a runnable CLI invocation, and the
|
|
15
|
+
* args projected from the sentence — plus a CLARIFY when it is unsure. The agent
|
|
16
|
+
* never memorizes the catalog; it describes what it wants and gets the shaped
|
|
17
|
+
* next call. One plug that re-forms to fit whatever the caller needs.
|
|
18
|
+
*
|
|
19
|
+
* WHY IT IS NOVEL (and not just the Gateway again): the Intent Gateway resolves
|
|
20
|
+
* NL → a command STRING. MORPH adds the three things that make a single tool an
|
|
21
|
+
* agent's front door: (1) it resolves the concrete MCP TOOL name (not just the
|
|
22
|
+
* CLI verb), (2) it PROJECTS the detected entities into a ready-to-send args
|
|
23
|
+
* object — the "interface shaped to the request", and (3) the resolution is
|
|
24
|
+
* bound into an offline-verifiable signed morph-receipt at the MCP boundary, so
|
|
25
|
+
* the morph is auditable, not a black box. It composes the Gateway + the command
|
|
26
|
+
* manifest — refinement, not a new silo.
|
|
27
|
+
*
|
|
28
|
+
* DIAKRISIS — the honest ceiling: the "morphing" is DETERMINISTIC intent →
|
|
29
|
+
* capability resolution + entity projection (it reuses the measured Gateway
|
|
30
|
+
* router and the manifest), NOT runtime code generation and NOT model magic.
|
|
31
|
+
* MORPH never invents a capability the Gateway did not route to (the gauntlet
|
|
32
|
+
* proves faithfulness), it ABSTAINS (CLARIFY/UNKNOWN) rather than misfire, and
|
|
33
|
+
* the args projection is a best-effort starting point the agent maps onto the
|
|
34
|
+
* target tool's own schema — not a guarantee of every arg name. The CLI→MCP map
|
|
35
|
+
* is a curated, deterministic table (an unmapped command returns mcpTool=null and
|
|
36
|
+
* the agent uses the CLI invocation). Pure + deterministic + total.
|
|
37
|
+
*/
|
|
38
|
+
import { type GatewayResult } from "../intent_gateway/index.js";
|
|
39
|
+
import { type ManifestCommand } from "../agent_manifest.js";
|
|
40
|
+
/**
|
|
41
|
+
* Curated, deterministic CLI-command → MCP-tool-name map for the high-value
|
|
42
|
+
* capabilities (the same intents the Gateway concept-map curates). An agent over
|
|
43
|
+
* MCP wants the tool NAME, not the shell verb. Best-effort: a command absent here
|
|
44
|
+
* resolves to mcpTool=null and the agent falls back to the CLI invocation.
|
|
45
|
+
*/
|
|
46
|
+
export declare const COMMAND_TO_MCP: Readonly<Record<string, string>>;
|
|
47
|
+
/** Resolve a CLI command to its MCP tool name (or null when unmapped). Total. */
|
|
48
|
+
export declare function toMcpTool(command: string | null | undefined): string | null;
|
|
49
|
+
export type MorphVerdict = "MORPHED" | "CLARIFY" | "UNKNOWN";
|
|
50
|
+
export interface MorphCapability {
|
|
51
|
+
command: string;
|
|
52
|
+
mcpTool: string | null;
|
|
53
|
+
what: string;
|
|
54
|
+
when: string;
|
|
55
|
+
since: string;
|
|
56
|
+
group: string;
|
|
57
|
+
}
|
|
58
|
+
/** The typed contact surface — the "plug shaped to the request": the exact next
|
|
59
|
+
* call the agent should make, with args projected from the sentence. */
|
|
60
|
+
export interface MorphShape {
|
|
61
|
+
mcpTool: string | null;
|
|
62
|
+
cli: string | null;
|
|
63
|
+
/** Best-effort args projected from the detected entities + the raw intent.
|
|
64
|
+
* The agent maps these onto the target tool's own input schema. */
|
|
65
|
+
args: Record<string, unknown>;
|
|
66
|
+
}
|
|
67
|
+
export interface MorphCandidate {
|
|
68
|
+
command: string;
|
|
69
|
+
mcpTool: string | null;
|
|
70
|
+
score: number;
|
|
71
|
+
}
|
|
72
|
+
export interface MorphResult {
|
|
73
|
+
verdict: MorphVerdict;
|
|
74
|
+
intent: string;
|
|
75
|
+
capability: MorphCapability | null;
|
|
76
|
+
confidence: number;
|
|
77
|
+
candidates: MorphCandidate[];
|
|
78
|
+
shape: MorphShape | null;
|
|
79
|
+
entities: GatewayResult["entities"];
|
|
80
|
+
note: string;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Morph a free-text intent into the right Mneme capability + a typed next-call
|
|
84
|
+
* surface. Composes the Gateway router (resolution + abstention + entities) with
|
|
85
|
+
* the manifest (the capability's what/when) and the CLI→MCP map. The verdict
|
|
86
|
+
* mirrors the Gateway: ROUTED→MORPHED, CLARIFY→CLARIFY, UNKNOWN→UNKNOWN — MORPH
|
|
87
|
+
* never routes to a capability the Gateway did not. Pure + deterministic + total.
|
|
88
|
+
*/
|
|
89
|
+
export declare function morph(intent: string, opts?: {
|
|
90
|
+
catalog?: ManifestCommand[];
|
|
91
|
+
minConfidence?: number;
|
|
92
|
+
}): MorphResult;
|
|
93
|
+
export interface MorphGauntlet {
|
|
94
|
+
morphsKnownIntents: boolean;
|
|
95
|
+
faithfulToGateway: boolean;
|
|
96
|
+
resolvesMcpTool: boolean;
|
|
97
|
+
projectsEntities: boolean;
|
|
98
|
+
shapeIsActionable: boolean;
|
|
99
|
+
bilingual: boolean;
|
|
100
|
+
abstainsOnGibberish: boolean;
|
|
101
|
+
mapWellFormed: boolean;
|
|
102
|
+
deterministic: boolean;
|
|
103
|
+
total: boolean;
|
|
104
|
+
score: 0 | 100;
|
|
105
|
+
}
|
|
106
|
+
export declare function morphGauntlet(): MorphGauntlet;
|
|
107
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/morph/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAyB,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAEnF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAwB1D,CAAC;AAEH,iFAAiF;AACjF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAI3E;AAED,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf;AAED;yEACyE;AACzE,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB;wEACoE;IACpE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE;AAE1F,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,YAAY,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,eAAe,GAAG,IAAI,CAAC;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACpC,IAAI,EAAE,MAAM,CAAC;CACd;AAwBD;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,eAAe,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,CA4BjH;AAGD,MAAM,WAAW,aAAa;IAC5B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,SAAS,EAAE,OAAO,CAAC;IACnB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;CAChB;AAED,wBAAgB,aAAa,IAAI,aAAa,CAiD7C"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v3.103.0 — MORPH: the polymorphic MCP tool (the "ferrofluid plug").
|
|
3
|
+
*
|
|
4
|
+
* THE PROBLEM IT SOLVES (the load-bearing adoption weakness): an AI agent that
|
|
5
|
+
* connects to Mneme — Cursor, Cline, Windsurf, Claude Code, anything — is faced
|
|
6
|
+
* with 600+ static MCP tools it has never seen. It cannot know which verb serves
|
|
7
|
+
* the moment, so most of Mneme sits installed-but-idle. Every other MCP server
|
|
8
|
+
* dumps its whole tool surface and hopes the agent guesses right.
|
|
9
|
+
*
|
|
10
|
+
* THE IDEA (the honest realization of the "schema-morphing plug"): expose ONE
|
|
11
|
+
* self-describing tool the agent learns once — `mneme.morph`. The agent states
|
|
12
|
+
* its intent in free natural language (any language, EN/Thai); MORPH "morphs"
|
|
13
|
+
* that intent into the RIGHT Mneme capability and hands back a typed CONTACT
|
|
14
|
+
* SURFACE — the exact MCP tool to call next, a runnable CLI invocation, and the
|
|
15
|
+
* args projected from the sentence — plus a CLARIFY when it is unsure. The agent
|
|
16
|
+
* never memorizes the catalog; it describes what it wants and gets the shaped
|
|
17
|
+
* next call. One plug that re-forms to fit whatever the caller needs.
|
|
18
|
+
*
|
|
19
|
+
* WHY IT IS NOVEL (and not just the Gateway again): the Intent Gateway resolves
|
|
20
|
+
* NL → a command STRING. MORPH adds the three things that make a single tool an
|
|
21
|
+
* agent's front door: (1) it resolves the concrete MCP TOOL name (not just the
|
|
22
|
+
* CLI verb), (2) it PROJECTS the detected entities into a ready-to-send args
|
|
23
|
+
* object — the "interface shaped to the request", and (3) the resolution is
|
|
24
|
+
* bound into an offline-verifiable signed morph-receipt at the MCP boundary, so
|
|
25
|
+
* the morph is auditable, not a black box. It composes the Gateway + the command
|
|
26
|
+
* manifest — refinement, not a new silo.
|
|
27
|
+
*
|
|
28
|
+
* DIAKRISIS — the honest ceiling: the "morphing" is DETERMINISTIC intent →
|
|
29
|
+
* capability resolution + entity projection (it reuses the measured Gateway
|
|
30
|
+
* router and the manifest), NOT runtime code generation and NOT model magic.
|
|
31
|
+
* MORPH never invents a capability the Gateway did not route to (the gauntlet
|
|
32
|
+
* proves faithfulness), it ABSTAINS (CLARIFY/UNKNOWN) rather than misfire, and
|
|
33
|
+
* the args projection is a best-effort starting point the agent maps onto the
|
|
34
|
+
* target tool's own schema — not a guarantee of every arg name. The CLI→MCP map
|
|
35
|
+
* is a curated, deterministic table (an unmapped command returns mcpTool=null and
|
|
36
|
+
* the agent uses the CLI invocation). Pure + deterministic + total.
|
|
37
|
+
*/
|
|
38
|
+
import { route as gatewayRoute } from "../intent_gateway/index.js";
|
|
39
|
+
import { MNEME_COMMAND_CATALOG } from "../agent_manifest.js";
|
|
40
|
+
/**
|
|
41
|
+
* Curated, deterministic CLI-command → MCP-tool-name map for the high-value
|
|
42
|
+
* capabilities (the same intents the Gateway concept-map curates). An agent over
|
|
43
|
+
* MCP wants the tool NAME, not the shell verb. Best-effort: a command absent here
|
|
44
|
+
* resolves to mcpTool=null and the agent falls back to the CLI invocation.
|
|
45
|
+
*/
|
|
46
|
+
export const COMMAND_TO_MCP = Object.freeze({
|
|
47
|
+
"mneme verify": "mneme.truth.check",
|
|
48
|
+
"mneme telos": "mneme.drift.analyze",
|
|
49
|
+
"mneme govern": "mneme.govern.decide",
|
|
50
|
+
"mneme crucible": "mneme.crucible.settle",
|
|
51
|
+
"mneme haunt": "mneme.haunt.investigate",
|
|
52
|
+
"mneme cortex": "mneme.cortex.recall",
|
|
53
|
+
"mneme firewall": "mneme.firewall.fortify",
|
|
54
|
+
"mneme egress": "mneme.egress.guard",
|
|
55
|
+
"mneme outline": "mneme.outline.file",
|
|
56
|
+
"mneme canon": "mneme.canon.emit",
|
|
57
|
+
"mneme regret": "mneme.regret.score",
|
|
58
|
+
"mneme elleipsis": "mneme.elleipsis.check",
|
|
59
|
+
"mneme pce": "mneme.pce.certify",
|
|
60
|
+
"mneme boot": "mneme.boot",
|
|
61
|
+
"mneme savings": "mneme.treasury.report",
|
|
62
|
+
"mneme rail": "mneme.rail.traverse",
|
|
63
|
+
"mneme blind": "mneme.blind.context",
|
|
64
|
+
"mneme membrane": "mneme.membrane.fuse",
|
|
65
|
+
"mneme stele": "mneme.stele.sync",
|
|
66
|
+
"mneme moat": "mneme.moat.score",
|
|
67
|
+
"mneme siege": "mneme.siege.run",
|
|
68
|
+
"mneme mycelium": "mneme.mycelium.bundle",
|
|
69
|
+
"mneme gateway": "mneme.gateway.route",
|
|
70
|
+
});
|
|
71
|
+
/** Resolve a CLI command to its MCP tool name (or null when unmapped). Total. */
|
|
72
|
+
export function toMcpTool(command) {
|
|
73
|
+
if (typeof command !== "string")
|
|
74
|
+
return null;
|
|
75
|
+
const key = command.trim().split(/\s+/).slice(0, 2).join(" ");
|
|
76
|
+
return COMMAND_TO_MCP[key] ?? COMMAND_TO_MCP[command.trim()] ?? null;
|
|
77
|
+
}
|
|
78
|
+
const NOTE = "MORPH is a single polymorphic surface: state an intent, get the shaped next call (MCP tool + CLI + projected args), signed. Deterministic intent→capability resolution over the measured Gateway + the manifest — it abstains (CLARIFY/UNKNOWN) rather than misfire, and never invents a capability the Gateway did not route to.";
|
|
79
|
+
function catalogEntry(command, catalog) {
|
|
80
|
+
// exact match first, then the 2-token CLI prefix (e.g. "mneme telos")
|
|
81
|
+
const exact = catalog.find((c) => c.command === command);
|
|
82
|
+
if (exact)
|
|
83
|
+
return exact;
|
|
84
|
+
const key = command.trim().split(/\s+/).slice(0, 2).join(" ");
|
|
85
|
+
return catalog.find((c) => c.command === key) ?? catalog.find((c) => c.command.startsWith(key)) ?? null;
|
|
86
|
+
}
|
|
87
|
+
/** Project the detected entities + the raw intent into a best-effort args object. */
|
|
88
|
+
function projectArgs(intent, entities) {
|
|
89
|
+
const args = { intent: String(intent ?? "").slice(0, 500) };
|
|
90
|
+
try {
|
|
91
|
+
if (typeof entities?.budget === "number")
|
|
92
|
+
args["budget"] = entities.budget;
|
|
93
|
+
if (Array.isArray(entities?.forbidden) && entities.forbidden.length)
|
|
94
|
+
args["forbidden"] = entities.forbidden;
|
|
95
|
+
if (Array.isArray(entities?.scope) && entities.scope.length)
|
|
96
|
+
args["scope"] = entities.scope;
|
|
97
|
+
}
|
|
98
|
+
catch { /* */ }
|
|
99
|
+
return args;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Morph a free-text intent into the right Mneme capability + a typed next-call
|
|
103
|
+
* surface. Composes the Gateway router (resolution + abstention + entities) with
|
|
104
|
+
* the manifest (the capability's what/when) and the CLI→MCP map. The verdict
|
|
105
|
+
* mirrors the Gateway: ROUTED→MORPHED, CLARIFY→CLARIFY, UNKNOWN→UNKNOWN — MORPH
|
|
106
|
+
* never routes to a capability the Gateway did not. Pure + deterministic + total.
|
|
107
|
+
*/
|
|
108
|
+
export function morph(intent, opts) {
|
|
109
|
+
try {
|
|
110
|
+
const catalog = Array.isArray(opts?.catalog) ? opts.catalog : MNEME_COMMAND_CATALOG;
|
|
111
|
+
const r = gatewayRoute(intent, { catalog, ...(typeof opts?.minConfidence === "number" ? { minConfidence: opts.minConfidence } : {}) });
|
|
112
|
+
const intentStr = String(intent ?? "");
|
|
113
|
+
const candidates = (r.candidates ?? []).map((c) => ({ command: c.command, mcpTool: toMcpTool(c.command), score: c.score }));
|
|
114
|
+
if (r.verdict !== "ROUTED" || !r.command) {
|
|
115
|
+
return { verdict: r.verdict === "CLARIFY" ? "CLARIFY" : "UNKNOWN", intent: intentStr, capability: null, confidence: r.confidence, candidates, shape: null, entities: r.entities, note: NOTE };
|
|
116
|
+
}
|
|
117
|
+
const entry = catalogEntry(r.command, catalog);
|
|
118
|
+
const mcpTool = toMcpTool(r.command);
|
|
119
|
+
const capability = {
|
|
120
|
+
command: r.command,
|
|
121
|
+
mcpTool,
|
|
122
|
+
what: entry?.what ?? "",
|
|
123
|
+
when: entry?.when ?? "",
|
|
124
|
+
since: entry?.since ?? "",
|
|
125
|
+
group: entry?.group ?? "",
|
|
126
|
+
};
|
|
127
|
+
const shape = { mcpTool, cli: r.invocation ?? r.command, args: projectArgs(intentStr, r.entities) };
|
|
128
|
+
return { verdict: "MORPHED", intent: intentStr, capability, confidence: r.confidence, candidates, shape, entities: r.entities, note: NOTE };
|
|
129
|
+
}
|
|
130
|
+
catch {
|
|
131
|
+
return { verdict: "UNKNOWN", intent: String(intent ?? ""), capability: null, confidence: 0, candidates: [], shape: null, entities: {}, note: NOTE };
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
export function morphGauntlet() {
|
|
135
|
+
// 1) morphs known EN + Thai intents to the expected capability
|
|
136
|
+
const known = [
|
|
137
|
+
["stop all the bots, something feels off", "mneme govern"],
|
|
138
|
+
["who wrote this function last and why", "mneme haunt"],
|
|
139
|
+
["ใครแก้ฟังก์ชันนี้ล่าสุดและทำไม", "mneme haunt"],
|
|
140
|
+
["is this claim actually true", "mneme verify"],
|
|
141
|
+
["check if our agents are drifting from their mission", "mneme telos"],
|
|
142
|
+
];
|
|
143
|
+
const morphsKnownIntents = known.every(([q, exp]) => { const m = morph(q); return m.verdict === "MORPHED" && m.capability?.command === exp; });
|
|
144
|
+
// 2) faithful: for the same input, MORPH's command == the Gateway's routed command (no drift)
|
|
145
|
+
const faithfulToGateway = known.every(([q]) => {
|
|
146
|
+
const g = gatewayRoute(q);
|
|
147
|
+
const m = morph(q);
|
|
148
|
+
if (g.verdict !== "ROUTED")
|
|
149
|
+
return m.verdict !== "MORPHED";
|
|
150
|
+
return m.capability?.command === g.command;
|
|
151
|
+
});
|
|
152
|
+
// 3) resolves the concrete MCP tool name for a mapped capability
|
|
153
|
+
const truth = morph("is this claim actually true");
|
|
154
|
+
const resolvesMcpTool = truth.capability?.mcpTool === "mneme.truth.check" && truth.shape?.mcpTool === "mneme.truth.check";
|
|
155
|
+
// 4) projects entities into the shaped args
|
|
156
|
+
const gov = morph("ดูแลเรื่องงบ 50000 ห้ามโพสต์ด่าใคร");
|
|
157
|
+
const projectsEntities = gov.verdict === "MORPHED" && gov.capability?.command === "mneme govern" && (gov.shape?.args["budget"] === 50000) && Array.isArray(gov.shape?.args["forbidden"]) && gov.shape.args["forbidden"].length > 0;
|
|
158
|
+
// 5) a MORPHED result always hands back an actionable next call
|
|
159
|
+
const shapeIsActionable = known.every(([q]) => { const m = morph(q); return m.verdict !== "MORPHED" || !!(m.shape && (m.shape.mcpTool || m.shape.cli)); });
|
|
160
|
+
// 6) bilingual
|
|
161
|
+
const bilingual = morph("who wrote this function last and why").capability?.command === morph("ใครแก้ฟังก์ชันนี้ล่าสุดและทำไม").capability?.command;
|
|
162
|
+
// 7) abstains on gibberish
|
|
163
|
+
const gib = morph("asdfghjkl qwerty zzz");
|
|
164
|
+
const abstainsOnGibberish = gib.verdict !== "MORPHED";
|
|
165
|
+
// 8) the CLI→MCP map is well-formed (every value a valid mneme.* tool name)
|
|
166
|
+
const mapWellFormed = Object.values(COMMAND_TO_MCP).every((t) => /^mneme\.[a-z_]+(\.[a-z_]+)?$/.test(t)) && Object.keys(COMMAND_TO_MCP).every((k) => k.startsWith("mneme "));
|
|
167
|
+
// 9) deterministic
|
|
168
|
+
const deterministic = JSON.stringify(morph("stop all the bots")) === JSON.stringify(morph("stop all the bots"));
|
|
169
|
+
// 10) total — garbage never throws
|
|
170
|
+
let total = true;
|
|
171
|
+
try {
|
|
172
|
+
morph(null);
|
|
173
|
+
morph("");
|
|
174
|
+
morph(undefined);
|
|
175
|
+
toMcpTool(null);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
total = false;
|
|
179
|
+
}
|
|
180
|
+
const all = morphsKnownIntents && faithfulToGateway && resolvesMcpTool && projectsEntities && shapeIsActionable && bilingual && abstainsOnGibberish && mapWellFormed && deterministic && total;
|
|
181
|
+
return { morphsKnownIntents, faithfulToGateway, resolvesMcpTool, projectsEntities, shapeIsActionable, bilingual, abstainsOnGibberish, mapWellFormed, deterministic, total, score: all ? 100 : 0 };
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/morph/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morph.test.d.ts","sourceRoot":"","sources":["../../src/morph/morph.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { morph, morphGauntlet, toMcpTool, COMMAND_TO_MCP } from "./index.js";
|
|
3
|
+
describe("v3.103 · MORPH — the polymorphic MCP tool", () => {
|
|
4
|
+
it("gauntlet is 100", () => {
|
|
5
|
+
expect(morphGauntlet().score).toBe(100);
|
|
6
|
+
});
|
|
7
|
+
it("morphs a free-text intent into the right capability + MCP tool", () => {
|
|
8
|
+
const m = morph("is this claim actually true");
|
|
9
|
+
expect(m.verdict).toBe("MORPHED");
|
|
10
|
+
expect(m.capability?.command).toBe("mneme verify");
|
|
11
|
+
expect(m.capability?.mcpTool).toBe("mneme.truth.check");
|
|
12
|
+
expect(m.shape?.mcpTool).toBe("mneme.truth.check");
|
|
13
|
+
});
|
|
14
|
+
it("hands back an actionable, typed next call (the contact surface)", () => {
|
|
15
|
+
const m = morph("who wrote this function last and why");
|
|
16
|
+
expect(m.verdict).toBe("MORPHED");
|
|
17
|
+
expect(m.shape).toBeTruthy();
|
|
18
|
+
expect(m.shape.mcpTool || m.shape.cli).toBeTruthy();
|
|
19
|
+
expect(typeof m.shape.args["intent"]).toBe("string");
|
|
20
|
+
});
|
|
21
|
+
it("projects detected entities into the shaped args (EN+Thai)", () => {
|
|
22
|
+
const m = morph("ดูแลเรื่องงบ 50000 ห้ามโพสต์ด่าใคร");
|
|
23
|
+
expect(m.capability?.command).toBe("mneme govern");
|
|
24
|
+
expect(m.shape?.args["budget"]).toBe(50000);
|
|
25
|
+
expect((m.shape?.args["forbidden"]).length).toBeGreaterThan(0);
|
|
26
|
+
});
|
|
27
|
+
it("is faithful: never invents a capability the Gateway did not route to", () => {
|
|
28
|
+
// gibberish must not MORPH to anything
|
|
29
|
+
expect(morph("asdfghjkl qwerty zzz").verdict).not.toBe("MORPHED");
|
|
30
|
+
});
|
|
31
|
+
it("is bilingual: same intent EN/Thai → same capability", () => {
|
|
32
|
+
expect(morph("who wrote this function last and why").capability?.command)
|
|
33
|
+
.toBe(morph("ใครแก้ฟังก์ชันนี้ล่าสุดและทำไม").capability?.command);
|
|
34
|
+
});
|
|
35
|
+
it("toMcpTool resolves the 2-token prefix + the map is well-formed", () => {
|
|
36
|
+
expect(toMcpTool("mneme telos")).toBe("mneme.drift.analyze");
|
|
37
|
+
expect(toMcpTool("mneme.unknown.verb")).toBe(null);
|
|
38
|
+
expect(toMcpTool(null)).toBe(null);
|
|
39
|
+
for (const t of Object.values(COMMAND_TO_MCP))
|
|
40
|
+
expect(t).toMatch(/^mneme\.[a-z_]+(\.[a-z_]+)?$/);
|
|
41
|
+
});
|
|
42
|
+
it("is total — garbage never throws", () => {
|
|
43
|
+
expect(() => morph(null)).not.toThrow();
|
|
44
|
+
expect(() => morph("")).not.toThrow();
|
|
45
|
+
expect(morph("").verdict).not.toBe("MORPHED");
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
//# sourceMappingURL=morph.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morph.test.js","sourceRoot":"","sources":["../../src/morph/morph.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trust_service/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/trust_service/index.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,YAAY;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAC7F,MAAM,WAAW,aAAa;IAAG,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE;AAEhF,eAAO,MAAM,eAAe;;;;GAQ3B,CAAC;AAKF,uHAAuH;AACvH,wBAAgB,UAAU,CAAC,GAAG,EAAE,YAAY,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,aAAa,CAkDtF;AAED,oGAAoG;AACpG,wBAAgB,WAAW,IAAI,MAAM,CAiDpC;AAGD,MAAM,WAAW,oBAAoB;IAAG,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE;AACxH,wBAAgB,oBAAoB,IAAI,oBAAoB,CAkC3D"}
|