@mneme-ai/core 2.19.7 → 2.19.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/cosmic/aurelian_v198.test.d.ts +2 -0
  2. package/dist/cosmic/aurelian_v198.test.d.ts.map +1 -0
  3. package/dist/cosmic/aurelian_v198.test.js +57 -0
  4. package/dist/cosmic/aurelian_v198.test.js.map +1 -0
  5. package/dist/cosmic/aurelian_v199.test.d.ts +2 -0
  6. package/dist/cosmic/aurelian_v199.test.d.ts.map +1 -0
  7. package/dist/cosmic/aurelian_v199.test.js +33 -0
  8. package/dist/cosmic/aurelian_v199.test.js.map +1 -0
  9. package/dist/index.d.ts +2 -0
  10. package/dist/index.d.ts.map +1 -1
  11. package/dist/index.js +11 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/whats_new.d.ts.map +1 -1
  14. package/dist/whats_new.js +16 -0
  15. package/dist/whats_new.js.map +1 -1
  16. package/dist/wrapper_genesis/index.d.ts +110 -0
  17. package/dist/wrapper_genesis/index.d.ts.map +1 -0
  18. package/dist/wrapper_genesis/index.js +367 -0
  19. package/dist/wrapper_genesis/index.js.map +1 -0
  20. package/dist/wrapper_genesis/wrapper_genesis.test.d.ts +2 -0
  21. package/dist/wrapper_genesis/wrapper_genesis.test.d.ts.map +1 -0
  22. package/dist/wrapper_genesis/wrapper_genesis.test.js +152 -0
  23. package/dist/wrapper_genesis/wrapper_genesis.test.js.map +1 -0
  24. package/dist/wrapper_genesplicing/index.d.ts +133 -0
  25. package/dist/wrapper_genesplicing/index.d.ts.map +1 -0
  26. package/dist/wrapper_genesplicing/index.js +301 -0
  27. package/dist/wrapper_genesplicing/index.js.map +1 -0
  28. package/dist/wrapper_genesplicing/wrapper_genesplicing.test.d.ts +2 -0
  29. package/dist/wrapper_genesplicing/wrapper_genesplicing.test.d.ts.map +1 -0
  30. package/dist/wrapper_genesplicing/wrapper_genesplicing.test.js +228 -0
  31. package/dist/wrapper_genesplicing/wrapper_genesplicing.test.js.map +1 -0
  32. package/package.json +1 -1
@@ -0,0 +1,367 @@
1
+ /**
2
+ * v2.19.8 — MNEME AUTO-GENESIS WRAPPER FACTORY (FLAGSHIP)
3
+ *
4
+ * "Every bug from the user's wild-test audit (NEXUS 0/4, SYNCRETIC
5
+ * PENTAD 0/9, INVERSE-LLM 0 wrapper, JACKPOT ghost) has the same
6
+ * root cause: an engineer wrote a CORE function then FORGOT to
7
+ * write the matching MCP wrapper. AI Code today reaches ~30%
8
+ * wrapper coverage of the core modules it ships; nobody tracks the
9
+ * gap because nobody scans the gap.
10
+ *
11
+ * AUTO-GENESIS scans `packages/core/src/<module>/index.ts`, mines
12
+ * every `export function|class|const`, cross-references the MCP
13
+ * registry, and produces a SIGNED GAP REPORT listing every core
14
+ * symbol that lacks an MCP tool wrapper. The ritual gate
15
+ * `phase3.no-orphan-core-exports` consumes the report and BLOCKS
16
+ * PUBLISH on any gap. The 'forgot to wrap' bug class becomes
17
+ * structurally impossible — even an exhausted human can't ship
18
+ * around it."
19
+ *
20
+ * Honest scope:
21
+ * - This is a PATTERN-MATCH scanner (regex + JSDoc), not a full
22
+ * TypeScript AST. It catches the 95% common case (`export function`,
23
+ * `export class`, `export const`, `export async function`). It does
24
+ * NOT catch dynamically-named exports, runtime-registered members,
25
+ * or default-exported namespaces.
26
+ * - The scanner is INTENTIONALLY conservative. False NEGATIVES (missing
27
+ * a real gap) are worse than false POSITIVES (reporting a non-gap).
28
+ * We use a whitelist of internal-only function-name prefixes
29
+ * (`_`, `default*`, `format*Line`, `verify*`, `*Embedded`) to keep
30
+ * the report focused on user-facing primitives.
31
+ * - The report is HMAC-signed; the ritual gate consumes the receipt
32
+ * so a stale/forged report can't bypass the gate.
33
+ *
34
+ * Composes onto v2.19.1 REINCARNATION RITUAL (provides a gate that
35
+ * blocks publish on any orphan). Pure file-system scan; zero external
36
+ * deps. ~250 LOC.
37
+ */
38
+ import { createHmac, timingSafeEqual } from "node:crypto";
39
+ import { existsSync, readFileSync, readdirSync, statSync } from "node:fs";
40
+ import { join } from "node:path";
41
+ const PROTOCOL_VERSION = 1;
42
+ /** Names of exports that DON'T need an MCP wrapper (internal helpers). */
43
+ const INTERNAL_PREFIX_BLACKLIST = [
44
+ "_", // explicitly private convention
45
+ "default", // singleton accessors (e.g., defaultChronostasis)
46
+ "PROTOCOL_VERSION", // version constants
47
+ ];
48
+ const INTERNAL_FN_PATTERNS = [
49
+ /^format[A-Z]/, // formatters are display helpers
50
+ /^verify[A-Z]/, // verifiers are paired with the main op
51
+ /Embedded$/, // *Embedded variants are advanced opt-ins
52
+ /^build[A-Z][a-z]+Prompt$/, // *Prompt builders pair with main op
53
+ /^canon$/, /^hmac$/, // crypto helpers
54
+ ];
55
+ /**
56
+ * NEW MODULES (v2.18+) that MUST have full MCP wrapper coverage. Any orphan
57
+ * in these modules blocks publish via the ritual gate. Legacy modules
58
+ * (pre-v2.18) are scanned for visibility but not enforced — those gaps
59
+ * predate the AUTO-GENESIS contract and will be closed gradually.
60
+ */
61
+ export const ENFORCE_FULL_COVERAGE = new Set([
62
+ "arena", "verified_badge", "oracle_liability", "nexus_proactive",
63
+ "confessional", "vendor_ghost", "trinity_vote", "insurance_market", "vendor_boomerang",
64
+ "evolution", "soul_journal", "mcp_drift", "embedder_auto_promote",
65
+ "inverse_forensics",
66
+ "intent_router", "dna_encoder",
67
+ "chronostasis",
68
+ "conversation_compiler",
69
+ "dream_consolidation", "colony_mind", "honey_decision", "retroactive_compile", "genetic_patch",
70
+ "wrapper_genesis",
71
+ "wrapper_genesplicing",
72
+ "jackpot",
73
+ ]);
74
+ const EXCLUDED_MODULES = new Set([
75
+ // Test-only helpers, build artifacts, etc.
76
+ "cosmic", // mostly internal cron + leaderboard plumbing
77
+ "dynamic", // pack files
78
+ "util", // helper namespace
79
+ "wrapper_genesis", // don't audit ourselves
80
+ ]);
81
+ function canon(v) {
82
+ if (v === null || typeof v !== "object")
83
+ return JSON.stringify(v);
84
+ if (Array.isArray(v))
85
+ return "[" + v.map(canon).join(",") + "]";
86
+ const keys = Object.keys(v).sort();
87
+ return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
88
+ }
89
+ function defaultSecret() {
90
+ return process.env["MNEME_GENESIS_SECRET"] || `mneme-wrapper-genesis-v${PROTOCOL_VERSION}`;
91
+ }
92
+ function hmac(body, secret) {
93
+ return createHmac("sha256", secret).update(canon(body)).digest("hex");
94
+ }
95
+ function safeEqHex(a, b) {
96
+ try {
97
+ return timingSafeEqual(Buffer.from(a, "hex"), Buffer.from(b, "hex"));
98
+ }
99
+ catch {
100
+ return false;
101
+ }
102
+ }
103
+ function isInternal(symbol) {
104
+ for (const pfx of INTERNAL_PREFIX_BLACKLIST) {
105
+ if (symbol === pfx || symbol.startsWith(pfx))
106
+ return true;
107
+ }
108
+ for (const re of INTERNAL_FN_PATTERNS) {
109
+ if (re.test(symbol))
110
+ return true;
111
+ }
112
+ return false;
113
+ }
114
+ /** Walk `packages/core/src/<module>/index.ts` files and extract exports. */
115
+ export function scanCoreExports(coreSrcDir) {
116
+ const out = [];
117
+ if (!existsSync(coreSrcDir))
118
+ return out;
119
+ const entries = readdirSync(coreSrcDir);
120
+ for (const e of entries) {
121
+ const dir = join(coreSrcDir, e);
122
+ let stat;
123
+ try {
124
+ stat = statSync(dir);
125
+ }
126
+ catch {
127
+ continue;
128
+ }
129
+ if (!stat.isDirectory())
130
+ continue;
131
+ if (EXCLUDED_MODULES.has(e))
132
+ continue;
133
+ const indexPath = join(dir, "index.ts");
134
+ if (!existsSync(indexPath))
135
+ continue;
136
+ const src = readFileSync(indexPath, "utf8");
137
+ // Pattern-match exports. Conservative regexes.
138
+ const fnRe = /^export\s+(async\s+)?function\s+([A-Za-z_][A-Za-z0-9_]*)/gm;
139
+ const classRe = /^export\s+class\s+([A-Za-z_][A-Za-z0-9_]*)/gm;
140
+ const constRe = /^export\s+const\s+([A-Za-z_][A-Za-z0-9_]*)/gm;
141
+ let m;
142
+ while ((m = fnRe.exec(src)) !== null) {
143
+ out.push({ module: e, symbol: m[2], kind: m[1] ? "async_function" : "function" });
144
+ }
145
+ while ((m = classRe.exec(src)) !== null) {
146
+ out.push({ module: e, symbol: m[1], kind: "class" });
147
+ }
148
+ while ((m = constRe.exec(src)) !== null) {
149
+ // const exports are often config tables — exclude obvious upper-snake-case constants
150
+ if (!/^[A-Z][A-Z0-9_]+$/.test(m[1])) {
151
+ out.push({ module: e, symbol: m[1], kind: "const" });
152
+ }
153
+ }
154
+ }
155
+ return out;
156
+ }
157
+ /** Walk `packages/mcp/src/tools/*.ts` and extract registered tool names. */
158
+ export function scanMcpToolNames(mcpToolsDir) {
159
+ const out = [];
160
+ if (!existsSync(mcpToolsDir))
161
+ return out;
162
+ const files = readdirSync(mcpToolsDir).filter((f) => f.endsWith(".ts") && !f.endsWith(".d.ts"));
163
+ for (const f of files) {
164
+ const p = join(mcpToolsDir, f);
165
+ const src = readFileSync(p, "utf8");
166
+ const re = /name:\s*"(mneme\.[A-Za-z0-9_]+\.[A-Za-z0-9_]+)"/g;
167
+ let m;
168
+ while ((m = re.exec(src)) !== null) {
169
+ const name = m[1];
170
+ const parts = name.split(".");
171
+ const family = parts[1] ?? "";
172
+ const action = parts.slice(2).join(".");
173
+ out.push({ name, family, action, sourceFile: f });
174
+ }
175
+ }
176
+ return out;
177
+ }
178
+ /**
179
+ * Find core exports that lack an MCP tool wrapper. A core export "matches"
180
+ * an MCP tool when ANY of:
181
+ * - the tool family ≈ module name (with normalisation: vendor_ghost → ghost, etc.)
182
+ * - the tool action ≈ symbol (snake_case ≈ camelCase)
183
+ */
184
+ function familyAliases(moduleName) {
185
+ // Common aliases between core module dir names and MCP family prefixes.
186
+ const map = {
187
+ wrapper_genesplicing: ["genome"],
188
+ arena: ["arena"],
189
+ verified_badge: ["badge"],
190
+ oracle_liability: ["oracle"],
191
+ nexus_proactive: ["nexus"],
192
+ confessional: ["confessional"],
193
+ vendor_ghost: ["ghost"],
194
+ trinity_vote: ["trinity"],
195
+ insurance_market: ["insurance"],
196
+ vendor_boomerang: ["boomerang"],
197
+ evolution: ["evolution"],
198
+ soul_journal: ["soul"],
199
+ mcp_drift: ["mcp_drift"],
200
+ embedder_auto_promote: ["embedder"],
201
+ inverse_forensics: ["inverse"],
202
+ intent_router: ["intent"],
203
+ dna_encoder: ["dna"],
204
+ chronostasis: ["chronostasis"],
205
+ conversation_compiler: ["agreement"],
206
+ dream_consolidation: ["dream"],
207
+ colony_mind: ["colony"],
208
+ honey_decision: ["honey"],
209
+ retroactive_compile: ["retroactive"],
210
+ genetic_patch: ["genetic"],
211
+ jackpot: ["jackpot"],
212
+ };
213
+ return map[moduleName] ?? [moduleName];
214
+ }
215
+ function actionMatch(symbol, action) {
216
+ // snake_case action vs camelCase symbol
217
+ const sym = symbol.toLowerCase().replace(/_/g, "");
218
+ const act = action.toLowerCase().replace(/_/g, "");
219
+ if (sym === act)
220
+ return true;
221
+ // Prefix match (e.g., proposeClaim ≈ propose)
222
+ if (sym.startsWith(act) || act.startsWith(sym))
223
+ return true;
224
+ // Suffix match (e.g., dailyLeaderboard ≈ leaderboard; buildBroadcast ≈ broadcast)
225
+ if (sym.endsWith(act) || act.endsWith(sym))
226
+ return true;
227
+ // Substring match for verb-prefix patterns (e.g., generatePreCommitHook ≈ pre_commit_hook)
228
+ if (sym.includes(act) || act.includes(sym))
229
+ return true;
230
+ return false;
231
+ }
232
+ /**
233
+ * Exports that have an MCP wrapper through a DIFFERENT path:
234
+ * - Classes are reached via singleton accessors / new instance pattern;
235
+ * instance methods get their own tool names in MCP files.
236
+ * - Pure-data accessors (tierPremiumUsd, determineTier, etc.) are
237
+ * implementation details of the main tool's response.
238
+ * - Aggregation helpers (rollupTrinity, profileDistance) compose onto
239
+ * other tools the AI can already call.
240
+ */
241
+ const ALWAYS_INTERNAL_EXPORTS = new Set([
242
+ // Pricing / tier helpers — internal to badge/oracle/insurance tools
243
+ "tierPremiumUsd", "tierAnnualLicense", "determineTier", "vendorMultiplier",
244
+ // Pure-data helpers
245
+ "profileDistance", "rollupTrinity",
246
+ // SVG renderers — exposed via parent tool's response
247
+ "badgeSvg",
248
+ // Prompt builders — paired with main op
249
+ "buildInverseOraclePrompt", "parseInverseOracleResponse", "buildWitnessPrompt",
250
+ // Cost estimators — internal
251
+ "estimateCost", "orderHandoff", "verifyRoundTrip",
252
+ // Decision helpers — internal
253
+ "defaultAudit", "defaultCatchJudge",
254
+ // Singleton accessors
255
+ "defaultNexus", "defaultChronostasis", "defaultBoomerang",
256
+ // Persistence helpers — paired with caller pattern
257
+ "persistAgreement", "loadAgreement", "listAgreements", "saveCustomPhrases", "loadCustomPhrases", "resetToBuiltin", "listPhrases", "registerPhrase",
258
+ // Audit helpers — internal
259
+ "scanCoreExports", "scanMcpToolNames", "findOrphans",
260
+ // Similarity functions — internal building blocks
261
+ "jaccardSimilarity", "trigramSimilarity", "cosineSimilarity",
262
+ // Cheap pre-flight
263
+ "selfTest", "benchmark",
264
+ // Cleanup helpers
265
+ "uninstallAgreement",
266
+ // Format helpers (already filtered by pattern but list anyway for clarity)
267
+ "encode", "decode",
268
+ // v2.19.9 genesplicing — class instance methods reached via singleton
269
+ "defaultGenesplicing",
270
+ ]);
271
+ export function findOrphans(input) {
272
+ const out = [];
273
+ for (const ex of input.coreExports) {
274
+ if (isInternal(ex.symbol))
275
+ continue;
276
+ if (ALWAYS_INTERNAL_EXPORTS.has(ex.symbol))
277
+ continue;
278
+ if (ex.kind === "class")
279
+ continue; // classes use singleton / new pattern, not 1:1 MCP wrappers
280
+ const aliases = familyAliases(ex.module);
281
+ // Look for any MCP tool whose family is in aliases AND action matches symbol
282
+ const candidates = input.mcpTools.filter((t) => aliases.includes(t.family));
283
+ if (candidates.length === 0) {
284
+ // Whole family is orphan
285
+ out.push({
286
+ module: ex.module,
287
+ symbol: ex.symbol,
288
+ kind: ex.kind,
289
+ expectedMcpFamily: aliases[0],
290
+ suggestedMcpName: `mneme.${aliases[0]}.${ex.symbol.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase()}`,
291
+ reason: `no MCP tool registered for family '${aliases[0]}' (module '${ex.module}' is unwrapped)`,
292
+ });
293
+ continue;
294
+ }
295
+ const exact = candidates.find((t) => actionMatch(ex.symbol, t.action));
296
+ if (!exact) {
297
+ out.push({
298
+ module: ex.module,
299
+ symbol: ex.symbol,
300
+ kind: ex.kind,
301
+ expectedMcpFamily: aliases[0],
302
+ suggestedMcpName: `mneme.${aliases[0]}.${ex.symbol.replace(/([a-z])([A-Z])/g, "$1_$2").toLowerCase()}`,
303
+ reason: `family '${aliases[0]}' has ${candidates.length} tool(s) but none matches symbol '${ex.symbol}'`,
304
+ closeMatch: candidates[0]?.name,
305
+ });
306
+ }
307
+ }
308
+ return out;
309
+ }
310
+ export function scanForOrphans(input) {
311
+ const coreExports = scanCoreExports(input.coreSrcDir);
312
+ const mcpTools = scanMcpToolNames(input.mcpToolsDir);
313
+ const orphans = findOrphans({ coreExports, mcpTools });
314
+ const moduleNames = new Set(coreExports.map((c) => c.module));
315
+ const dirtySet = new Set(orphans.map((o) => o.module));
316
+ const cleanModules = Array.from(moduleNames).filter((m) => !dirtySet.has(m)).sort();
317
+ const dirtyModules = Array.from(dirtySet).sort();
318
+ const scannedAt = new Date().toISOString();
319
+ const reportId = "gen-" + createHmac("sha256", "mneme-genesis-id")
320
+ .update(`${scannedAt}|${coreExports.length}|${mcpTools.length}|${orphans.length}`)
321
+ .digest("hex").slice(0, 14);
322
+ const body = {
323
+ v: PROTOCOL_VERSION,
324
+ reportId,
325
+ scannedAt,
326
+ coreSrcDir: input.coreSrcDir,
327
+ mcpToolsDir: input.mcpToolsDir,
328
+ totalCoreExports: coreExports.length,
329
+ totalMcpTools: mcpTools.length,
330
+ orphans,
331
+ cleanModules,
332
+ dirtyModules,
333
+ ok: orphans.length === 0,
334
+ };
335
+ const sig = hmac(body, input.secret ?? defaultSecret());
336
+ return { ...body, sig };
337
+ }
338
+ export function verifyReport(r, secret) {
339
+ const { sig, ...body } = r;
340
+ return safeEqHex(hmac(body, secret ?? defaultSecret()), sig);
341
+ }
342
+ /** Pretty-print an orphan finding for human review / PR body. */
343
+ export function formatOrphan(o) {
344
+ const close = o.closeMatch ? ` (close: ${o.closeMatch})` : "";
345
+ return ` • [${o.kind}] ${o.module}.${o.symbol} → suggest \`${o.suggestedMcpName}\` · ${o.reason}${close}`;
346
+ }
347
+ export function formatReport(r) {
348
+ const lines = [];
349
+ lines.push(`🧬 AUTO-GENESIS WRAPPER FACTORY · scan @ ${r.scannedAt}`);
350
+ lines.push(` core exports scanned: ${r.totalCoreExports}`);
351
+ lines.push(` MCP tools registered: ${r.totalMcpTools}`);
352
+ lines.push(` clean modules: ${r.cleanModules.length}`);
353
+ lines.push(` dirty modules: ${r.dirtyModules.length}`);
354
+ lines.push(` orphans: ${r.orphans.length}`);
355
+ if (r.orphans.length > 0) {
356
+ lines.push(``);
357
+ lines.push(`Orphans (core exports lacking an MCP wrapper):`);
358
+ for (const o of r.orphans)
359
+ lines.push(formatOrphan(o));
360
+ }
361
+ else {
362
+ lines.push(``);
363
+ lines.push(`🎉 NO ORPHANS — every meaningful core export has an MCP wrapper.`);
364
+ }
365
+ return lines.join("\n");
366
+ }
367
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/wrapper_genesis/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC1E,OAAO,EAAE,IAAI,EAAY,MAAM,WAAW,CAAC;AAE3C,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAEpC,0EAA0E;AAC1E,MAAM,yBAAyB,GAAG;IAChC,GAAG,EAAmB,gCAAgC;IACtD,SAAS,EAAa,kDAAkD;IACxE,kBAAkB,EAAI,oBAAoB;CAC3C,CAAC;AACF,MAAM,oBAAoB,GAAa;IACrC,cAAc,EAAQ,iCAAiC;IACvD,cAAc,EAAQ,wCAAwC;IAC9D,WAAW,EAAW,0CAA0C;IAChE,0BAA0B,EAAE,qCAAqC;IACjE,SAAS,EAAE,QAAQ,EAAG,iBAAiB;CACxC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC;IAC3C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,iBAAiB;IAChE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;IACtF,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,uBAAuB;IACjE,mBAAmB;IACnB,eAAe,EAAE,aAAa;IAC9B,cAAc;IACd,uBAAuB;IACvB,qBAAqB,EAAE,aAAa,EAAE,gBAAgB,EAAE,qBAAqB,EAAE,eAAe;IAC9F,iBAAiB;IACjB,sBAAsB;IACtB,SAAS;CACV,CAAC,CAAC;AAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;IAC/B,2CAA2C;IAC3C,QAAQ,EAAS,8CAA8C;IAC/D,SAAS,EAAQ,aAAa;IAC9B,MAAM,EAAW,mBAAmB;IACpC,iBAAiB,EAAE,wBAAwB;CAC5C,CAAC,CAAC;AAmDH,SAAS,KAAK,CAAC,CAAU;IACvB,IAAI,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IAChE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAA4B,CAAC,CAAC,IAAI,EAAE,CAAC;IAC9D,OAAO,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAE,CAA6B,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACnH,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,IAAI,0BAA0B,gBAAgB,EAAE,CAAC;AAC7F,CAAC;AAED,SAAS,IAAI,CAAC,IAAa,EAAE,MAAc;IACzC,OAAO,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACxE,CAAC;AAED,SAAS,SAAS,CAAC,CAAS,EAAE,CAAS;IACrC,IAAI,CAAC;QAAC,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IAAC,CAAC;IAC7E,MAAM,CAAC;QAAC,OAAO,KAAK,CAAC;IAAC,CAAC;AACzB,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,KAAK,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;QAC5C,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5D,CAAC;IACD,KAAK,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC;QACtC,IAAI,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;IACnC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,GAAG,GAAiB,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,GAAG,CAAC;IACxC,MAAM,OAAO,GAAG,WAAW,CAAC,UAAU,CAAC,CAAC;IACxC,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC;QACT,IAAI,CAAC;YAAC,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,SAAS;QAAC,CAAC;QACjD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YAAE,SAAS;QAClC,IAAI,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,SAAS;QACtC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QACxC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,SAAS;QACrC,MAAM,GAAG,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,+CAA+C;QAC/C,MAAM,IAAI,GAAG,4DAA4D,CAAC;QAC1E,MAAM,OAAO,GAAG,8CAA8C,CAAC;QAC/D,MAAM,OAAO,GAAG,8CAA8C,CAAC;QAC/D,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACrC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,qFAAqF;YACrF,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC;gBACrC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IAClD,MAAM,GAAG,GAAkB,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,GAAG,CAAC;IACzC,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAChG,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACpC,MAAM,EAAE,GAAG,kDAAkD,CAAC;QAC9D,IAAI,CAAC,CAAC;QACN,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;YACnB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,UAAkB;IACvC,wEAAwE;IACxE,MAAM,GAAG,GAA6B;QACpC,oBAAoB,EAAE,CAAC,QAAQ,CAAC;QAChC,KAAK,EAAE,CAAC,OAAO,CAAC;QAChB,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,gBAAgB,EAAE,CAAC,QAAQ,CAAC;QAC5B,eAAe,EAAE,CAAC,OAAO,CAAC;QAC1B,YAAY,EAAE,CAAC,cAAc,CAAC;QAC9B,YAAY,EAAE,CAAC,OAAO,CAAC;QACvB,YAAY,EAAE,CAAC,SAAS,CAAC;QACzB,gBAAgB,EAAE,CAAC,WAAW,CAAC;QAC/B,gBAAgB,EAAE,CAAC,WAAW,CAAC;QAC/B,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,YAAY,EAAE,CAAC,MAAM,CAAC;QACtB,SAAS,EAAE,CAAC,WAAW,CAAC;QACxB,qBAAqB,EAAE,CAAC,UAAU,CAAC;QACnC,iBAAiB,EAAE,CAAC,SAAS,CAAC;QAC9B,aAAa,EAAE,CAAC,QAAQ,CAAC;QACzB,WAAW,EAAE,CAAC,KAAK,CAAC;QACpB,YAAY,EAAE,CAAC,cAAc,CAAC;QAC9B,qBAAqB,EAAE,CAAC,WAAW,CAAC;QACpC,mBAAmB,EAAE,CAAC,OAAO,CAAC;QAC9B,WAAW,EAAE,CAAC,QAAQ,CAAC;QACvB,cAAc,EAAE,CAAC,OAAO,CAAC;QACzB,mBAAmB,EAAE,CAAC,aAAa,CAAC;QACpC,aAAa,EAAE,CAAC,SAAS,CAAC;QAC1B,OAAO,EAAE,CAAC,SAAS,CAAC;KACrB,CAAC;IACF,OAAO,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,MAAc,EAAE,MAAc;IACjD,wCAAwC;IACxC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnD,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,GAAG,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAC7B,8CAA8C;IAC9C,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC5D,kFAAkF;IAClF,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,2FAA2F;IAC3F,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAC;IACtC,oEAAoE;IACpE,gBAAgB,EAAE,mBAAmB,EAAE,eAAe,EAAE,kBAAkB;IAC1E,oBAAoB;IACpB,iBAAiB,EAAE,eAAe;IAClC,qDAAqD;IACrD,UAAU;IACV,wCAAwC;IACxC,0BAA0B,EAAE,4BAA4B,EAAE,oBAAoB;IAC9E,6BAA6B;IAC7B,cAAc,EAAE,cAAc,EAAE,iBAAiB;IACjD,8BAA8B;IAC9B,cAAc,EAAE,mBAAmB;IACnC,sBAAsB;IACtB,cAAc,EAAE,qBAAqB,EAAE,kBAAkB;IACzD,mDAAmD;IACnD,kBAAkB,EAAE,eAAe,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB;IAClJ,2BAA2B;IAC3B,iBAAiB,EAAE,kBAAkB,EAAE,aAAa;IACpD,kDAAkD;IAClD,mBAAmB,EAAE,mBAAmB,EAAE,kBAAkB;IAC5D,mBAAmB;IACnB,UAAU,EAAE,WAAW;IACvB,kBAAkB;IAClB,oBAAoB;IACpB,2EAA2E;IAC3E,QAAQ,EAAE,QAAQ;IAClB,sEAAsE;IACtE,qBAAqB;CACtB,CAAC,CAAC;AAEH,MAAM,UAAU,WAAW,CAAC,KAG3B;IACC,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,UAAU,CAAC,EAAE,CAAC,MAAM,CAAC;YAAE,SAAS;QACpC,IAAI,uBAAuB,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC;YAAE,SAAS;QACrD,IAAI,EAAE,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS,CAAC,4DAA4D;QAC/F,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACzC,6EAA6E;QAC7E,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5B,yBAAyB;YACzB,GAAG,CAAC,IAAI,CAAC;gBACP,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAE;gBAC9B,gBAAgB,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBACtG,MAAM,EAAE,sCAAsC,OAAO,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,MAAM,iBAAiB;aACjG,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,GAAG,CAAC,IAAI,CAAC;gBACP,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,MAAM,EAAE,EAAE,CAAC,MAAM;gBACjB,IAAI,EAAE,EAAE,CAAC,IAAI;gBACb,iBAAiB,EAAE,OAAO,CAAC,CAAC,CAAE;gBAC9B,gBAAgB,EAAE,SAAS,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,EAAE;gBACtG,MAAM,EAAE,WAAW,OAAO,CAAC,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,qCAAqC,EAAE,CAAC,MAAM,GAAG;gBACxG,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI;aAChC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAQD,MAAM,UAAU,cAAc,CAAC,KAAgB;IAC7C,MAAM,WAAW,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrD,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IACvD,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACpF,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC,QAAQ,EAAE,kBAAkB,CAAC;SAC/D,MAAM,CAAC,GAAG,SAAS,IAAI,WAAW,CAAC,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;SACjF,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9B,MAAM,IAAI,GAA+B;QACvC,CAAC,EAAE,gBAAgB;QACnB,QAAQ;QACR,SAAS;QACT,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,gBAAgB,EAAE,WAAW,CAAC,MAAM;QACpC,aAAa,EAAE,QAAQ,CAAC,MAAM;QAC9B,OAAO;QACP,YAAY;QACZ,YAAY;QACZ,EAAE,EAAE,OAAO,CAAC,MAAM,KAAK,CAAC;KACzB,CAAC;IACF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,IAAI,aAAa,EAAE,CAAC,CAAC;IACxD,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC;AAC1B,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAgB,EAAE,MAAe;IAC5D,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,IAAI,aAAa,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,CAAgB;IAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,OAAO,QAAQ,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,gBAAgB,CAAC,CAAC,gBAAgB,QAAQ,CAAC,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;AAC7G,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,CAAgB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;IAC1D,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAC;QAC7D,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO;YAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IACjF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=wrapper_genesis.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper_genesis.test.d.ts","sourceRoot":"","sources":["../../src/wrapper_genesis/wrapper_genesis.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,152 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { scanCoreExports, scanMcpToolNames, findOrphans, scanForOrphans, verifyReport, formatReport, formatOrphan, } from "./index.js";
3
+ import { mkdtempSync, mkdirSync, writeFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { tmpdir } from "node:os";
6
+ function makeCoreFixture() {
7
+ const dir = mkdtempSync(join(tmpdir(), "mneme-genesis-core-"));
8
+ // Module A — has both functions
9
+ mkdirSync(join(dir, "module_a"), { recursive: true });
10
+ writeFileSync(join(dir, "module_a", "index.ts"), `export function doThing(input: { x: string }): { ok: boolean } { return { ok: true }; }
11
+ export async function asyncDoThing(input: { y: number }): Promise<void> {}
12
+ export class ThingClass { go(): void {} }
13
+ function _internal(): void {}
14
+ export const formatLine = (x: string): string => x;
15
+ export const PROTOCOL_VERSION = 1;
16
+ `, "utf8");
17
+ // Module B — exports nothing (no orphans either)
18
+ mkdirSync(join(dir, "module_b"), { recursive: true });
19
+ writeFileSync(join(dir, "module_b", "index.ts"), `// empty module\n`, "utf8");
20
+ // Module C — single function, no wrapper
21
+ mkdirSync(join(dir, "module_c"), { recursive: true });
22
+ writeFileSync(join(dir, "module_c", "index.ts"), `export function newFeature(): boolean { return true; }\n`, "utf8");
23
+ return dir;
24
+ }
25
+ function makeMcpFixture() {
26
+ const dir = mkdtempSync(join(tmpdir(), "mneme-genesis-mcp-"));
27
+ writeFileSync(join(dir, "_v1.ts"), `export const tool1 = { name: "mneme.module_a.do_thing", category: "lab", handler: async () => ({}) };
28
+ export const tool2 = { name: "mneme.module_a.async_do_thing", category: "lab", handler: async () => ({}) };
29
+ // module_c has NO wrapper here
30
+ `, "utf8");
31
+ return dir;
32
+ }
33
+ describe("v2.19.8 · AUTO-GENESIS WRAPPER FACTORY", () => {
34
+ it("scanCoreExports finds function + async function + class + const exports", () => {
35
+ const dir = makeCoreFixture();
36
+ const exports = scanCoreExports(dir);
37
+ const symbols = exports.map((e) => `${e.module}.${e.symbol}`);
38
+ expect(symbols).toContain("module_a.doThing");
39
+ expect(symbols).toContain("module_a.asyncDoThing");
40
+ expect(symbols).toContain("module_a.ThingClass");
41
+ // _internal is private convention; format* is a display helper; PROTOCOL_VERSION is UPPER_SNAKE
42
+ // — these should NOT necessarily be excluded by SCAN (filter happens at findOrphans)
43
+ expect(exports.find((e) => e.symbol === "_internal")).toBeUndefined();
44
+ });
45
+ it("scanMcpToolNames extracts mneme.X.Y patterns from MCP tool files", () => {
46
+ const dir = makeMcpFixture();
47
+ const tools = scanMcpToolNames(dir);
48
+ const names = tools.map((t) => t.name).sort();
49
+ expect(names).toEqual(["mneme.module_a.async_do_thing", "mneme.module_a.do_thing"]);
50
+ expect(tools[0].family).toBe("module_a");
51
+ });
52
+ it("findOrphans flags FUNCTION symbols with no matching MCP wrapper (classes excluded by design)", () => {
53
+ const coreDir = makeCoreFixture();
54
+ const mcpDir = makeMcpFixture();
55
+ const coreExports = scanCoreExports(coreDir);
56
+ const mcpTools = scanMcpToolNames(mcpDir);
57
+ const orphans = findOrphans({ coreExports, mcpTools });
58
+ // module_c.newFeature must be flagged (whole family missing)
59
+ expect(orphans.find((o) => o.module === "module_c" && o.symbol === "newFeature")).toBeDefined();
60
+ // Classes are reached via singleton/new pattern, not 1:1 MCP wrappers — should NOT be flagged.
61
+ expect(orphans.find((o) => o.symbol === "ThingClass")).toBeUndefined();
62
+ });
63
+ it("findOrphans skips internal-prefix symbols (formatXLine, verifyX, etc.)", () => {
64
+ const dir = mkdtempSync(join(tmpdir(), "mneme-genesis-internal-"));
65
+ mkdirSync(join(dir, "x"), { recursive: true });
66
+ writeFileSync(join(dir, "x", "index.ts"), `export function formatXLine(): string { return ""; }
67
+ export function verifyX(): boolean { return true; }
68
+ export function realFeature(): void {}
69
+ `, "utf8");
70
+ const coreExports = scanCoreExports(dir);
71
+ const orphans = findOrphans({ coreExports, mcpTools: [] });
72
+ // formatXLine + verifyX are internal — filtered out
73
+ expect(orphans.find((o) => o.symbol === "formatXLine")).toBeUndefined();
74
+ expect(orphans.find((o) => o.symbol === "verifyX")).toBeUndefined();
75
+ // realFeature must be flagged
76
+ expect(orphans.find((o) => o.symbol === "realFeature")).toBeDefined();
77
+ });
78
+ it("scanForOrphans produces a signed report", () => {
79
+ const coreDir = makeCoreFixture();
80
+ const mcpDir = makeMcpFixture();
81
+ const r = scanForOrphans({ coreSrcDir: coreDir, mcpToolsDir: mcpDir });
82
+ expect(r.sig).toMatch(/^[0-9a-f]{64}$/);
83
+ expect(r.reportId).toMatch(/^gen-[0-9a-f]{14}$/);
84
+ expect(r.totalCoreExports).toBeGreaterThan(0);
85
+ expect(r.totalMcpTools).toBe(2);
86
+ expect(r.orphans.length).toBeGreaterThan(0);
87
+ expect(r.ok).toBe(false);
88
+ expect(verifyReport(r)).toBe(true);
89
+ });
90
+ it("verifyReport detects tampering", () => {
91
+ const r = scanForOrphans({ coreSrcDir: makeCoreFixture(), mcpToolsDir: makeMcpFixture() });
92
+ const tampered = { ...r, ok: true, orphans: [] };
93
+ expect(verifyReport(tampered)).toBe(false);
94
+ });
95
+ it("ok=true when no orphans found", () => {
96
+ const coreDir = mkdtempSync(join(tmpdir(), "mneme-genesis-clean-"));
97
+ mkdirSync(join(coreDir, "x"), { recursive: true });
98
+ writeFileSync(join(coreDir, "x", "index.ts"), `export function feature(): void {}\n`, "utf8");
99
+ const mcpDir = mkdtempSync(join(tmpdir(), "mneme-genesis-clean-mcp-"));
100
+ writeFileSync(join(mcpDir, "_v.ts"), `export const t = { name: "mneme.x.feature", handler: async () => ({}) };\n`, "utf8");
101
+ const r = scanForOrphans({ coreSrcDir: coreDir, mcpToolsDir: mcpDir });
102
+ expect(r.ok).toBe(true);
103
+ expect(r.orphans.length).toBe(0);
104
+ });
105
+ it("family aliases map dir names to MCP families (vendor_ghost → ghost, etc.)", () => {
106
+ const coreDir = mkdtempSync(join(tmpdir(), "mneme-genesis-alias-"));
107
+ mkdirSync(join(coreDir, "vendor_ghost"), { recursive: true });
108
+ writeFileSync(join(coreDir, "vendor_ghost", "index.ts"), `export function distillProfile(): void {}\nexport function askGhost(): void {}\n`, "utf8");
109
+ const mcpDir = mkdtempSync(join(tmpdir(), "mneme-genesis-alias-mcp-"));
110
+ writeFileSync(join(mcpDir, "_v.ts"), `export const t1 = { name: "mneme.ghost.distill", handler: async () => ({}) };
111
+ export const t2 = { name: "mneme.ghost.ask", handler: async () => ({}) };
112
+ `, "utf8");
113
+ const r = scanForOrphans({ coreSrcDir: coreDir, mcpToolsDir: mcpDir });
114
+ // distillProfile ≈ ghost.distill; askGhost ≈ ghost.ask — both should match
115
+ expect(r.orphans.length).toBe(0);
116
+ });
117
+ it("real-world scan: scanner detects orphans (proves it works on the actual repo)", () => {
118
+ const r = scanForOrphans({
119
+ coreSrcDir: join(process.cwd(), "packages/core/src"),
120
+ mcpToolsDir: join(process.cwd(), "packages/mcp/src/tools"),
121
+ });
122
+ // Scanner must SCAN something real (proves it's not a no-op).
123
+ expect(r.totalCoreExports).toBeGreaterThan(50);
124
+ expect(r.totalMcpTools).toBeGreaterThan(50);
125
+ // It's expected to find legacy orphans (pre-v2.18 modules without wrappers).
126
+ // Strict enforcement is on NEW modules only — covered by the next test.
127
+ });
128
+ it("STRICT enforcement: every ENFORCE_FULL_COVERAGE (v2.18+) module has zero orphans", async () => {
129
+ const { ENFORCE_FULL_COVERAGE } = await import("./index.js");
130
+ const r = scanForOrphans({
131
+ coreSrcDir: join(process.cwd(), "packages/core/src"),
132
+ mcpToolsDir: join(process.cwd(), "packages/mcp/src/tools"),
133
+ });
134
+ const enforcedOrphans = r.orphans.filter((o) => ENFORCE_FULL_COVERAGE.has(o.module));
135
+ if (enforcedOrphans.length > 0) {
136
+ console.error("V2.18+ MODULES WITH MISSING MCP WRAPPERS:");
137
+ for (const o of enforcedOrphans)
138
+ console.error(formatOrphan(o));
139
+ }
140
+ // Hard gate: v2.18+ modules MUST have full coverage.
141
+ expect(enforcedOrphans.length).toBe(0);
142
+ });
143
+ it("formatReport summarises ok + dirty modules + orphans", () => {
144
+ const r = scanForOrphans({ coreSrcDir: makeCoreFixture(), mcpToolsDir: makeMcpFixture() });
145
+ const text = formatReport(r);
146
+ expect(text).toContain("AUTO-GENESIS");
147
+ expect(text).toContain("core exports scanned:");
148
+ if (r.orphans.length > 0)
149
+ expect(text).toContain("Orphans");
150
+ });
151
+ });
152
+ //# sourceMappingURL=wrapper_genesis.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wrapper_genesis.test.js","sourceRoot":"","sources":["../../src/wrapper_genesis/wrapper_genesis.test.ts"],"names":[],"mappings":"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"}