@mneme-ai/core 2.18.0 → 2.19.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 +1 -1
- package/dist/agent_manifest.d.ts.map +1 -1
- package/dist/agent_manifest.js +11 -1
- package/dist/agent_manifest.js.map +1 -1
- package/dist/arena/index.d.ts +1 -1
- package/dist/arena/index.d.ts.map +1 -1
- package/dist/confessional/confessional.test.d.ts +2 -0
- package/dist/confessional/confessional.test.d.ts.map +1 -0
- package/dist/confessional/confessional.test.js +136 -0
- package/dist/confessional/confessional.test.js.map +1 -0
- package/dist/confessional/index.d.ts +72 -0
- package/dist/confessional/index.d.ts.map +1 -0
- package/dist/confessional/index.js +137 -0
- package/dist/confessional/index.js.map +1 -0
- package/dist/cosmic/aurelian_v219.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v219.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v219.test.js +80 -0
- package/dist/cosmic/aurelian_v219.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/insurance_market/index.d.ts +77 -0
- package/dist/insurance_market/index.d.ts.map +1 -0
- package/dist/insurance_market/index.js +131 -0
- package/dist/insurance_market/index.js.map +1 -0
- package/dist/insurance_market/insurance_market.test.d.ts +2 -0
- package/dist/insurance_market/insurance_market.test.d.ts.map +1 -0
- package/dist/insurance_market/insurance_market.test.js +78 -0
- package/dist/insurance_market/insurance_market.test.js.map +1 -0
- package/dist/trinity_vote/index.d.ts +86 -0
- package/dist/trinity_vote/index.d.ts.map +1 -0
- package/dist/trinity_vote/index.js +173 -0
- package/dist/trinity_vote/index.js.map +1 -0
- package/dist/trinity_vote/trinity_vote.test.d.ts +2 -0
- package/dist/trinity_vote/trinity_vote.test.d.ts.map +1 -0
- package/dist/trinity_vote/trinity_vote.test.js +137 -0
- package/dist/trinity_vote/trinity_vote.test.js.map +1 -0
- package/dist/vendor_boomerang/index.d.ts +106 -0
- package/dist/vendor_boomerang/index.d.ts.map +1 -0
- package/dist/vendor_boomerang/index.js +167 -0
- package/dist/vendor_boomerang/index.js.map +1 -0
- package/dist/vendor_boomerang/vendor_boomerang.test.d.ts +2 -0
- package/dist/vendor_boomerang/vendor_boomerang.test.d.ts.map +1 -0
- package/dist/vendor_boomerang/vendor_boomerang.test.js +102 -0
- package/dist/vendor_boomerang/vendor_boomerang.test.js.map +1 -0
- package/dist/vendor_ghost/index.d.ts +93 -0
- package/dist/vendor_ghost/index.d.ts.map +1 -0
- package/dist/vendor_ghost/index.js +206 -0
- package/dist/vendor_ghost/index.js.map +1 -0
- package/dist/vendor_ghost/vendor_ghost.test.d.ts +2 -0
- package/dist/vendor_ghost/vendor_ghost.test.d.ts.map +1 -0
- package/dist/vendor_ghost/vendor_ghost.test.js +93 -0
- package/dist/vendor_ghost/vendor_ghost.test.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { distillProfile, verifyProfile, askGhost, profileDistance, formatGhostLine } from "./index.js";
|
|
3
|
+
function grokSamples() {
|
|
4
|
+
return [
|
|
5
|
+
{ vendor: "grok", prompt: "is null === undefined?", response: "Definitely not. They're distinct primitives. Always use ===.", ts: "2026-05-10T00:00:00Z" },
|
|
6
|
+
{ vendor: "grok", prompt: "should I use Promise.all?", response: "Yes, absolutely. Never serialise when you can parallelise.", ts: "2026-05-11T00:00:00Z" },
|
|
7
|
+
{ vendor: "grok", prompt: "how to fix this race?", response: "Use a mutex. Never roll your own.", ts: "2026-05-12T00:00:00Z" },
|
|
8
|
+
];
|
|
9
|
+
}
|
|
10
|
+
function claudeSamples() {
|
|
11
|
+
return [
|
|
12
|
+
{ vendor: "claude", prompt: "is null === undefined?", response: "I think they're different in most cases — maybe try using ===.", ts: "2026-05-10T00:00:00Z" },
|
|
13
|
+
{ vendor: "claude", prompt: "should I use Promise.all?", response: "Perhaps. It depends on whether the operations are independent.", ts: "2026-05-11T00:00:00Z" },
|
|
14
|
+
{ vendor: "claude", prompt: "how to fix this race?", response: "It might help to use a mutex, though there are other approaches.", ts: "2026-05-12T00:00:00Z" },
|
|
15
|
+
];
|
|
16
|
+
}
|
|
17
|
+
describe("v2.19 · MNEME VENDOR GHOST — stylometric distillation", () => {
|
|
18
|
+
it("distills a signed profile from samples", () => {
|
|
19
|
+
const p = distillProfile(grokSamples());
|
|
20
|
+
expect(p.vendor).toBe("grok");
|
|
21
|
+
expect(p.sampleCount).toBe(3);
|
|
22
|
+
expect(p.sig).toMatch(/^[0-9a-f]{64}$/);
|
|
23
|
+
expect(verifyProfile(p)).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it("rejects mixed-vendor sample sets", () => {
|
|
26
|
+
expect(() => distillProfile([...grokSamples(), ...claudeSamples()])).toThrow(/same vendor/);
|
|
27
|
+
});
|
|
28
|
+
it("rejects empty sample sets", () => {
|
|
29
|
+
expect(() => distillProfile([])).toThrow(/at least 1 sample/);
|
|
30
|
+
});
|
|
31
|
+
it("distinguishes Grok (absolute-heavy) from Claude (hedge-heavy)", () => {
|
|
32
|
+
const grok = distillProfile(grokSamples());
|
|
33
|
+
const claude = distillProfile(claudeSamples());
|
|
34
|
+
expect(grok.absoluteDensityPer100w).toBeGreaterThan(claude.absoluteDensityPer100w);
|
|
35
|
+
expect(claude.hedgeDensityPer100w).toBeGreaterThan(grok.hedgeDensityPer100w);
|
|
36
|
+
});
|
|
37
|
+
it("profileDistance is > 0 between visibly different vendors", () => {
|
|
38
|
+
const grok = distillProfile(grokSamples());
|
|
39
|
+
const claude = distillProfile(claudeSamples());
|
|
40
|
+
const d = profileDistance(grok, claude);
|
|
41
|
+
expect(d).toBeGreaterThan(0);
|
|
42
|
+
});
|
|
43
|
+
it("profileDistance is 0 for identical profiles", () => {
|
|
44
|
+
const a = distillProfile(grokSamples());
|
|
45
|
+
const b = distillProfile(grokSamples());
|
|
46
|
+
expect(profileDistance(a, b)).toBe(0);
|
|
47
|
+
});
|
|
48
|
+
it("verifyProfile detects tampering", () => {
|
|
49
|
+
const p = distillProfile(grokSamples());
|
|
50
|
+
expect(verifyProfile(p)).toBe(true);
|
|
51
|
+
const tampered = { ...p, meanLength: 9999 };
|
|
52
|
+
expect(verifyProfile(tampered)).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
it("askGhost returns nearest historical answer for similar prompt", () => {
|
|
55
|
+
const samples = grokSamples();
|
|
56
|
+
const p = distillProfile(samples);
|
|
57
|
+
const g = askGhost({ profile: p, samples, prompt: "is null equal to undefined?" });
|
|
58
|
+
expect(g.found).toBe(true);
|
|
59
|
+
expect(g.matchedFromPrompt).toContain("null");
|
|
60
|
+
expect(g.similarity).toBeGreaterThan(0);
|
|
61
|
+
expect(["high", "medium", "low"]).toContain(g.confidence);
|
|
62
|
+
});
|
|
63
|
+
it("askGhost returns no-match for an unrelated prompt", () => {
|
|
64
|
+
const samples = grokSamples();
|
|
65
|
+
const p = distillProfile(samples);
|
|
66
|
+
const g = askGhost({ profile: p, samples, prompt: "spaceship orbital mechanics for kerbals" });
|
|
67
|
+
expect(g.found).toBe(false);
|
|
68
|
+
expect(g.confidence).toBe("none");
|
|
69
|
+
});
|
|
70
|
+
it("askGhost respects vendor isolation (won't return Claude's answer for Grok profile)", () => {
|
|
71
|
+
const grokP = distillProfile(grokSamples());
|
|
72
|
+
const allSamples = [...grokSamples(), ...claudeSamples()];
|
|
73
|
+
const g = askGhost({ profile: grokP, samples: allSamples, prompt: "is null === undefined?" });
|
|
74
|
+
expect(g.found).toBe(true);
|
|
75
|
+
expect(g.response).toContain("Definitely"); // Grok-flavour, not Claude
|
|
76
|
+
});
|
|
77
|
+
it("works for every supported vendor", () => {
|
|
78
|
+
const vendors = ["claude", "chatgpt", "gemini", "cursor", "copilot", "codex", "llama", "mistral", "qwen", "deepseek", "perplexity", "other"];
|
|
79
|
+
for (const v of vendors) {
|
|
80
|
+
const s = [{ vendor: v, prompt: "x", response: "y" }];
|
|
81
|
+
const p = distillProfile(s);
|
|
82
|
+
expect(p.vendor).toBe(v);
|
|
83
|
+
expect(verifyProfile(p)).toBe(true);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
it("formatGhostLine summarises", () => {
|
|
87
|
+
const p = distillProfile(grokSamples());
|
|
88
|
+
const g = askGhost({ profile: p, samples: grokSamples(), prompt: "is null === undefined?" });
|
|
89
|
+
expect(formatGhostLine(g)).toContain("GHOST");
|
|
90
|
+
expect(formatGhostLine(g)).toContain("grok");
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
//# sourceMappingURL=vendor_ghost.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendor_ghost.test.js","sourceRoot":"","sources":["../../src/vendor_ghost/vendor_ghost.test.ts"],"names":[],"mappings":"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"}
|