@mneme-ai/core 2.19.6 → 2.19.8
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/__v197_extras/v197_extras.test.d.ts +9 -0
- package/dist/__v197_extras/v197_extras.test.d.ts.map +1 -0
- package/dist/__v197_extras/v197_extras.test.js +208 -0
- package/dist/__v197_extras/v197_extras.test.js.map +1 -0
- package/dist/agent_manifest.d.ts +1 -1
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +15 -1
- package/dist/agent_manifest.js.map +1 -1
- package/dist/chronostasis/index.d.ts +24 -0
- package/dist/chronostasis/index.d.ts.map +1 -1
- package/dist/chronostasis/index.js +88 -0
- package/dist/chronostasis/index.js.map +1 -1
- package/dist/colony_mind/colony_mind.test.d.ts +2 -0
- package/dist/colony_mind/colony_mind.test.d.ts.map +1 -0
- package/dist/colony_mind/colony_mind.test.js +89 -0
- package/dist/colony_mind/colony_mind.test.js.map +1 -0
- package/dist/colony_mind/index.d.ts +100 -0
- package/dist/colony_mind/index.d.ts.map +1 -0
- package/dist/colony_mind/index.js +141 -0
- package/dist/colony_mind/index.js.map +1 -0
- package/dist/conversation_compiler/index.d.ts +13 -0
- package/dist/conversation_compiler/index.d.ts.map +1 -1
- package/dist/conversation_compiler/index.js +45 -0
- package/dist/conversation_compiler/index.js.map +1 -1
- package/dist/cosmic/aurelian_v197.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v197.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v197.test.js +91 -0
- package/dist/cosmic/aurelian_v197.test.js.map +1 -0
- package/dist/cosmic/aurelian_v198.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v198.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v198.test.js +57 -0
- package/dist/cosmic/aurelian_v198.test.js.map +1 -0
- package/dist/dream_consolidation/dream_consolidation.test.d.ts +2 -0
- package/dist/dream_consolidation/dream_consolidation.test.d.ts.map +1 -0
- package/dist/dream_consolidation/dream_consolidation.test.js +122 -0
- package/dist/dream_consolidation/dream_consolidation.test.js.map +1 -0
- package/dist/dream_consolidation/index.d.ts +107 -0
- package/dist/dream_consolidation/index.d.ts.map +1 -0
- package/dist/dream_consolidation/index.js +265 -0
- package/dist/dream_consolidation/index.js.map +1 -0
- package/dist/genetic_patch/genetic_patch.test.d.ts +2 -0
- package/dist/genetic_patch/genetic_patch.test.d.ts.map +1 -0
- package/dist/genetic_patch/genetic_patch.test.js +75 -0
- package/dist/genetic_patch/genetic_patch.test.js.map +1 -0
- package/dist/genetic_patch/index.d.ts +91 -0
- package/dist/genetic_patch/index.d.ts.map +1 -0
- package/dist/genetic_patch/index.js +163 -0
- package/dist/genetic_patch/index.js.map +1 -0
- package/dist/honey_decision/honey_decision.test.d.ts +2 -0
- package/dist/honey_decision/honey_decision.test.d.ts.map +1 -0
- package/dist/honey_decision/honey_decision.test.js +83 -0
- package/dist/honey_decision/honey_decision.test.js.map +1 -0
- package/dist/honey_decision/index.d.ts +96 -0
- package/dist/honey_decision/index.d.ts.map +1 -0
- package/dist/honey_decision/index.js +203 -0
- package/dist/honey_decision/index.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -1
- package/dist/intent_router/index.d.ts +13 -0
- package/dist/intent_router/index.d.ts.map +1 -1
- package/dist/intent_router/index.js +52 -0
- package/dist/intent_router/index.js.map +1 -1
- package/dist/retroactive_compile/index.d.ts +85 -0
- package/dist/retroactive_compile/index.d.ts.map +1 -0
- package/dist/retroactive_compile/index.js +209 -0
- package/dist/retroactive_compile/index.js.map +1 -0
- package/dist/retroactive_compile/retroactive_compile.test.d.ts +2 -0
- package/dist/retroactive_compile/retroactive_compile.test.d.ts.map +1 -0
- package/dist/retroactive_compile/retroactive_compile.test.js +99 -0
- package/dist/retroactive_compile/retroactive_compile.test.js.map +1 -0
- 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 +110 -0
- package/dist/wrapper_genesis/index.d.ts.map +1 -0
- package/dist/wrapper_genesis/index.js +363 -0
- package/dist/wrapper_genesis/index.js.map +1 -0
- package/dist/wrapper_genesis/wrapper_genesis.test.d.ts +2 -0
- package/dist/wrapper_genesis/wrapper_genesis.test.d.ts.map +1 -0
- package/dist/wrapper_genesis/wrapper_genesis.test.js +152 -0
- package/dist/wrapper_genesis/wrapper_genesis.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -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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"}
|