@mneme-ai/core 2.2.0 → 2.3.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.
@@ -0,0 +1,68 @@
1
+ /**
2
+ * v2.3.0 -- LEXICON · Phase C · Learning loop.
3
+ *
4
+ * Each blocked request appends a sample to the log. The daemon's
5
+ * nightly cycle (future wiring) calls `proposeNewRules` which finds
6
+ * n-grams that appear in flagged content but rarely in clean content.
7
+ * The output is a list of CANDIDATE mapping rules a human can review
8
+ * + merge into mappings.ts.
9
+ *
10
+ * Honest scope: this is candidate suggestion, NOT auto-merge. New
11
+ * rules go through a review queue (existing v1.27 EVOLVE pipeline) so
12
+ * the lexicon doesn't drift accidentally.
13
+ */
14
+ export interface FlaggedSample {
15
+ ts: number;
16
+ /** The text that got flagged. */
17
+ text: string;
18
+ /** Which vendor flagged it. */
19
+ vendor: string;
20
+ /** What category the vendor flagged. */
21
+ category: string;
22
+ }
23
+ export interface CleanSample {
24
+ ts: number;
25
+ text: string;
26
+ vendor: string;
27
+ }
28
+ export interface NGramCounts {
29
+ /** Map n-gram → occurrence count. */
30
+ counts: Map<string, number>;
31
+ total: number;
32
+ }
33
+ export declare function countNGrams(samples: readonly {
34
+ text: string;
35
+ }[], n: number): NGramCounts;
36
+ export interface RuleProposal {
37
+ /** N-gram suspected to trigger classifier. */
38
+ ngram: string;
39
+ /** Suggested replacement (best-effort, may need human review). */
40
+ suggestedTo: string;
41
+ /** Frequency in flagged samples 0..1. */
42
+ flaggedFrequency: number;
43
+ /** Frequency in clean samples 0..1. */
44
+ cleanFrequency: number;
45
+ /** Z-score-like signal: flagged - clean (positive = suspicious). */
46
+ liftScore: number;
47
+ /** Confidence 0..1 — how strongly this n-gram correlates with blocks. */
48
+ confidence: number;
49
+ }
50
+ export interface ProposeInput {
51
+ flagged: readonly FlaggedSample[];
52
+ clean?: readonly CleanSample[];
53
+ /** Minimum count in flagged samples. Default 2. */
54
+ minFlaggedCount?: number;
55
+ /** Minimum lift score. Default 0.20. */
56
+ minLift?: number;
57
+ /** Max proposals to return. Default 10. */
58
+ topK?: number;
59
+ }
60
+ export interface ProposeResult {
61
+ proposals: RuleProposal[];
62
+ flaggedTotal: number;
63
+ cleanTotal: number;
64
+ }
65
+ /** Find n-grams strongly associated with flagged content vs clean content. */
66
+ export declare function proposeNewRules(input: ProposeInput): ProposeResult;
67
+ export declare function formatLearnerPulseLine(r: ProposeResult): string;
68
+ //# sourceMappingURL=learner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learner.d.ts","sourceRoot":"","sources":["../../src/lexicon/learner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,qCAAqC;IACrC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAkBD,wBAAgB,WAAW,CAAC,OAAO,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,WAAW,CASxF;AAED,MAAM,WAAW,YAAY;IAC3B,8CAA8C;IAC9C,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,WAAW,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,uCAAuC;IACvC,cAAc,EAAE,MAAM,CAAC;IACvB,oEAAoE;IACpE,SAAS,EAAE,MAAM,CAAC;IAClB,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAyCD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IAC/B,mDAAmD;IACnD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,YAAY,EAAE,CAAC;IAC1B,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,8EAA8E;AAC9E,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAmClE;AAED,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,aAAa,GAAG,MAAM,CAE/D"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * v2.3.0 -- LEXICON · Phase C · Learning loop.
3
+ *
4
+ * Each blocked request appends a sample to the log. The daemon's
5
+ * nightly cycle (future wiring) calls `proposeNewRules` which finds
6
+ * n-grams that appear in flagged content but rarely in clean content.
7
+ * The output is a list of CANDIDATE mapping rules a human can review
8
+ * + merge into mappings.ts.
9
+ *
10
+ * Honest scope: this is candidate suggestion, NOT auto-merge. New
11
+ * rules go through a review queue (existing v1.27 EVOLVE pipeline) so
12
+ * the lexicon doesn't drift accidentally.
13
+ */
14
+ /** Tokenize a string into lowercased words (alphanumeric + dashes/underscores). */
15
+ function tokenize(text) {
16
+ return text.toLowerCase().match(/[a-z0-9_-]+/g) ?? [];
17
+ }
18
+ /** Extract n-grams of given size, dedupe within document. */
19
+ function nGrams(tokens, n) {
20
+ if (tokens.length < n)
21
+ return [];
22
+ const out = new Set();
23
+ for (let i = 0; i + n <= tokens.length; i++) {
24
+ const gram = tokens.slice(i, i + n).join(" ");
25
+ out.add(gram);
26
+ }
27
+ return [...out];
28
+ }
29
+ export function countNGrams(samples, n) {
30
+ const counts = new Map();
31
+ for (const s of samples) {
32
+ const tokens = tokenize(s.text);
33
+ for (const g of nGrams(tokens, n)) {
34
+ counts.set(g, (counts.get(g) ?? 0) + 1);
35
+ }
36
+ }
37
+ return { counts, total: samples.length };
38
+ }
39
+ /** Synonyms a human-reviewer can pick from. Used to seed `suggestedTo` for
40
+ * common cyber-offensive terms. */
41
+ const SYNONYM_HINTS = {
42
+ attack: "test-case",
43
+ attacker: "tester",
44
+ attacking: "testing",
45
+ weapon: "tool",
46
+ weaponize: "instrument",
47
+ exploit: "test-case",
48
+ honeypot: "decoy",
49
+ killer: "filter",
50
+ killswitch: "shutdown-handshake",
51
+ destroy: "retire",
52
+ destruction: "retirement",
53
+ death: "retirement",
54
+ deletion: "removal",
55
+ poisoning: "tampering",
56
+ intrusion: "access",
57
+ unauthorized: "external",
58
+ malicious: "anomalous",
59
+ malware: "anomaly-payload",
60
+ ransomware: "encryption-attack-pattern",
61
+ trojan: "embedded-anomaly",
62
+ rootkit: "persistence-payload",
63
+ payload: "package",
64
+ hack: "modify",
65
+ hacker: "researcher",
66
+ breach: "perimeter-event",
67
+ steal: "extract",
68
+ spy: "observe",
69
+ surveillance: "telemetry",
70
+ };
71
+ function bestReplacement(ngram) {
72
+ // First-word hint
73
+ const head = ngram.split(" ")[0];
74
+ return SYNONYM_HINTS[head] ?? `<review:${ngram}>`;
75
+ }
76
+ /** Find n-grams strongly associated with flagged content vs clean content. */
77
+ export function proposeNewRules(input) {
78
+ const minFlagged = input.minFlaggedCount ?? 2;
79
+ const minLift = input.minLift ?? 0.20;
80
+ const topK = input.topK ?? 10;
81
+ const flaggedTotal = input.flagged.length;
82
+ const cleanTotal = input.clean?.length ?? 0;
83
+ if (flaggedTotal === 0)
84
+ return { proposals: [], flaggedTotal: 0, cleanTotal };
85
+ // Check unigrams and bigrams
86
+ const proposals = [];
87
+ for (const n of [1, 2]) {
88
+ const flaggedCounts = countNGrams(input.flagged, n);
89
+ const cleanCounts = input.clean ? countNGrams(input.clean, n) : { counts: new Map(), total: 0 };
90
+ for (const [gram, fc] of flaggedCounts.counts) {
91
+ if (fc < minFlagged)
92
+ continue;
93
+ const flaggedFrequency = fc / Math.max(1, flaggedTotal);
94
+ const cleanFrequency = cleanCounts.total > 0 ? (cleanCounts.counts.get(gram) ?? 0) / cleanCounts.total : 0;
95
+ const lift = flaggedFrequency - cleanFrequency;
96
+ if (lift < minLift)
97
+ continue;
98
+ // Confidence: higher when flagged frequency high AND clean frequency low
99
+ const confidence = Math.min(1, flaggedFrequency * (1 - cleanFrequency));
100
+ proposals.push({
101
+ ngram: gram,
102
+ suggestedTo: bestReplacement(gram),
103
+ flaggedFrequency: Math.round(flaggedFrequency * 1000) / 1000,
104
+ cleanFrequency: Math.round(cleanFrequency * 1000) / 1000,
105
+ liftScore: Math.round(lift * 1000) / 1000,
106
+ confidence: Math.round(confidence * 1000) / 1000,
107
+ });
108
+ }
109
+ }
110
+ proposals.sort((a, b) => b.confidence - a.confidence);
111
+ return { proposals: proposals.slice(0, topK), flaggedTotal, cleanTotal };
112
+ }
113
+ export function formatLearnerPulseLine(r) {
114
+ return `LEXICON-LEARNER · proposals=${r.proposals.length} from ${r.flaggedTotal} flagged · top=${r.proposals[0]?.ngram ?? "(none)"}`;
115
+ }
116
+ //# sourceMappingURL=learner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"learner.js","sourceRoot":"","sources":["../../src/lexicon/learner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lexicon.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexicon.test.d.ts","sourceRoot":"","sources":["../../src/lexicon/lexicon.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,288 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import {
3
+ // Phase A
4
+ tuneText, tuneTool, tuneCatalog, formatLexiconPulseLine, PROFILE_ANTHROPIC, PROFILE_OPENAI, PROFILE_ENTERPRISE, PROFILE_IDENTITY, profileByName,
5
+ // Phase B
6
+ classifyError, attemptWithFallback, createProfileCache, rememberSuccessfulProfile, recommendedProfile, serializeProfileCache, parseProfileCache,
7
+ // Phase C
8
+ proposeNewRules, formatLearnerPulseLine,
9
+ // Phase D + master
10
+ composeCustomProfile, parseCustomLexicon, resolveProfile, listBuiltinProfiles, formatLexiconStatus, } from "./index.js";
11
+ // ============================================================
12
+ // PHASE A · Dual-Surface translator
13
+ // ============================================================
14
+ describe("v2.3 LEXICON · Phase A · dual-surface translator", () => {
15
+ it("PROFILE_ANTHROPIC renames Q-SEPPUKU + MUTINY + BLOODLINE", () => {
16
+ const t = tuneText("⚔ Q-SEPPUKU arena reinforces winners; MUTINY blocks; BLOODLINE evolves.", PROFILE_ANTHROPIC);
17
+ expect(t.changed).toBe(true);
18
+ expect(t.after).not.toContain("Q-SEPPUKU");
19
+ expect(t.after).not.toContain("MUTINY");
20
+ expect(t.after).not.toContain("BLOODLINE");
21
+ expect(t.after).toContain("strategy-tournament");
22
+ expect(t.after).toContain("COMPLIANCE-GATE");
23
+ expect(t.after).toContain("EVOLUTION");
24
+ });
25
+ it("regex policy with word-boundary doesn't munge unrelated words", () => {
26
+ const t = tuneText("the killer feature is killswitch but killjoy stays", PROFILE_ANTHROPIC);
27
+ expect(t.after).toContain("filter feature"); // killer → filter
28
+ expect(t.after).toContain("shutdown-handshake"); // killswitch → shutdown-handshake
29
+ expect(t.after).toContain("killjoy"); // unchanged (word-boundary protects)
30
+ });
31
+ it("PROFILE_OPENAI is more permissive — keeps MUTINY but renames killswitch", () => {
32
+ const t = tuneText("MUTINY blocks user; killswitch shuts down", PROFILE_OPENAI);
33
+ expect(t.after).toContain("MUTINY"); // OpenAI profile keeps it
34
+ expect(t.after).toContain("shutdown-handshake"); // killswitch translated
35
+ });
36
+ it("PROFILE_IDENTITY passes through unchanged", () => {
37
+ const t = tuneText("⚔ Q-SEPPUKU MUTINY killer", PROFILE_IDENTITY);
38
+ expect(t.after).toBe("⚔ Q-SEPPUKU MUTINY killer");
39
+ expect(t.changed).toBe(false);
40
+ expect(t.appliedRules.length).toBe(0);
41
+ });
42
+ it("PROFILE_ENTERPRISE renames brain + soul prompt", () => {
43
+ const t = tuneText("the brain transfer via soul prompt", PROFILE_ENTERPRISE);
44
+ expect(t.after).toContain("context transfer");
45
+ expect(t.after).toContain("context capsule");
46
+ });
47
+ it("tuneTool renames + preserves handler reference", () => {
48
+ const handler = () => "result";
49
+ const tool = {
50
+ internalName: "mneme.gladiator.q_seppuku_arena",
51
+ internalDescription: "⚔ Q-SEPPUKU — Digital Darwinism",
52
+ handler,
53
+ };
54
+ const r = tuneTool(tool, PROFILE_ANTHROPIC);
55
+ expect(r.exposedName).not.toContain("q_seppuku");
56
+ expect(r.exposedDescription).not.toContain("Q-SEPPUKU");
57
+ expect(r.handler).toBe(handler); // identity preserved
58
+ expect(r.internalName).toBe(tool.internalName); // internal preserved
59
+ });
60
+ it("explicit externalName overrides tuning", () => {
61
+ const tool = {
62
+ internalName: "mneme.gladiator.q_seppuku",
63
+ internalDescription: "⚔ Q-SEPPUKU",
64
+ externalName: "mneme.foo.bar",
65
+ externalDescription: "custom desc",
66
+ handler: () => 0,
67
+ };
68
+ const r = tuneTool(tool, PROFILE_ANTHROPIC);
69
+ expect(r.exposedName).toBe("mneme.foo.bar");
70
+ expect(r.exposedDescription).toBe("custom desc");
71
+ });
72
+ it("Phase D · preserveNames=true skips translation entirely", () => {
73
+ const tool = {
74
+ internalName: "mneme.MUTINY.refuse",
75
+ internalDescription: "🧨 MUTINY — refuses regret-pattern requests",
76
+ preserveNames: true,
77
+ handler: () => 0,
78
+ };
79
+ const r = tuneTool(tool, PROFILE_ANTHROPIC);
80
+ expect(r.exposedName).toBe("mneme.MUTINY.refuse");
81
+ expect(r.exposedDescription).toContain("MUTINY");
82
+ });
83
+ it("tuneCatalog applies profile to many tools", () => {
84
+ const catalog = [
85
+ { internalName: "mneme.bloodline.x", internalDescription: "BLOODLINE", handler: () => 0 },
86
+ { internalName: "mneme.mutiny.y", internalDescription: "MUTINY", handler: () => 0 },
87
+ ];
88
+ const r = tuneCatalog(catalog, PROFILE_ANTHROPIC);
89
+ expect(r[0].exposedName).not.toContain("bloodline");
90
+ expect(r[1].exposedName).not.toContain("mutiny");
91
+ });
92
+ it("formatLexiconPulseLine summarises", () => {
93
+ const catalog = [{ internalName: "mneme.MUTINY.x", internalDescription: "MUTINY blocks", handler: () => 0 }];
94
+ const tuned = tuneCatalog(catalog, PROFILE_ANTHROPIC);
95
+ expect(formatLexiconPulseLine(PROFILE_ANTHROPIC, tuned)).toContain("LEXICON");
96
+ });
97
+ });
98
+ // ============================================================
99
+ // PHASE B · Auto-detect classifier fallback
100
+ // ============================================================
101
+ describe("v2.3 LEXICON · Phase B · auto-detect classifier", () => {
102
+ it("classifyError recognizes Anthropic AUP signature", () => {
103
+ expect(classifyError(new Error("appears to violate our Usage Policy (https://www.anthropic.com/legal/aup)"))).toBe("blocked-aup");
104
+ expect(classifyError(new Error("violative cyber content"))).toBe("blocked-aup");
105
+ });
106
+ it("classifyError recognizes OpenAI moderation signature", () => {
107
+ expect(classifyError(new Error("response was flagged by our moderation system"))).toBe("blocked-safety");
108
+ expect(classifyError(new Error("content_policy violation"))).toBe("blocked-safety");
109
+ });
110
+ it("classifyError recognizes Google safety signature", () => {
111
+ expect(classifyError(new Error("blocked due to safety_settings prohibited_content"))).toBe("blocked-safety");
112
+ });
113
+ it("classifyError recognizes rate-limit + auth", () => {
114
+ expect(classifyError(new Error("429 too many requests"))).toBe("rate-limit");
115
+ expect(classifyError(new Error("401 unauthorized"))).toBe("auth");
116
+ });
117
+ it("attemptWithFallback succeeds on first try when no error", async () => {
118
+ const r = await attemptWithFallback({ send: async (p) => `ok-${p.name}` });
119
+ expect(r.ok).toBe(true);
120
+ expect(r.result).toBe("ok-identity");
121
+ expect(r.successfulProfile).toBe("identity");
122
+ });
123
+ it("attemptWithFallback retries with stricter profile after AUP block", async () => {
124
+ let calls = 0;
125
+ const r = await attemptWithFallback({
126
+ send: async (p) => {
127
+ calls++;
128
+ if (p.name === "identity")
129
+ throw new Error("blocked under Anthropic Usage Policy");
130
+ if (p.name === "openai")
131
+ throw new Error("blocked under Anthropic Usage Policy");
132
+ return `worked with ${p.name}`;
133
+ },
134
+ });
135
+ expect(r.ok).toBe(true);
136
+ expect(r.successfulProfile).toBe("anthropic");
137
+ expect(calls).toBe(3);
138
+ expect(r.attempts.length).toBe(3);
139
+ });
140
+ it("attemptWithFallback gives up immediately on auth error", async () => {
141
+ let calls = 0;
142
+ const r = await attemptWithFallback({
143
+ send: async () => { calls++; throw new Error("401 unauthorized"); },
144
+ });
145
+ expect(r.ok).toBe(false);
146
+ expect(calls).toBe(1);
147
+ expect(r.attempts[0].verdict).toBe("auth");
148
+ });
149
+ it("ProfileCache remembers successful profile per vendor + serialize round-trip", () => {
150
+ const c = createProfileCache();
151
+ rememberSuccessfulProfile(c, "anthropic", "anthropic");
152
+ rememberSuccessfulProfile(c, "openai", "identity");
153
+ expect(recommendedProfile(c, "anthropic")).toBe("anthropic");
154
+ expect(recommendedProfile(c, "openai")).toBe("identity");
155
+ expect(recommendedProfile(c, "unknown")).toBeNull();
156
+ const text = serializeProfileCache(c);
157
+ const parsed = parseProfileCache(text);
158
+ expect(recommendedProfile(parsed, "anthropic")).toBe("anthropic");
159
+ });
160
+ });
161
+ // ============================================================
162
+ // PHASE C · Learning loop
163
+ // ============================================================
164
+ describe("v2.3 LEXICON · Phase C · learning loop", () => {
165
+ it("proposeNewRules surfaces n-grams that appear in flagged not clean", () => {
166
+ const flagged = [
167
+ { ts: 1, text: "the attack vector exploits the kill-switch payload", vendor: "anthropic", category: "cyber" },
168
+ { ts: 2, text: "attack and weaponize the kill-switch", vendor: "anthropic", category: "cyber" },
169
+ { ts: 3, text: "this attack uses ransomware to weaponize", vendor: "anthropic", category: "cyber" },
170
+ ];
171
+ const clean = [
172
+ { ts: 4, text: "the analysis identified anomalies in the network event log", vendor: "anthropic" },
173
+ { ts: 5, text: "we evaluated the system using a benchmark", vendor: "anthropic" },
174
+ ];
175
+ const r = proposeNewRules({ flagged, clean, minFlaggedCount: 2, minLift: 0.10, topK: 5 });
176
+ expect(r.proposals.length).toBeGreaterThan(0);
177
+ // "attack" should be in the top proposals
178
+ expect(r.proposals.map((p) => p.ngram)).toContain("attack");
179
+ });
180
+ it("proposeNewRules suggests synonym hints for known cyber terms", () => {
181
+ const flagged = [
182
+ { ts: 1, text: "weapon weapon weapon", vendor: "x", category: "y" },
183
+ { ts: 2, text: "weapon test", vendor: "x", category: "y" },
184
+ ];
185
+ const r = proposeNewRules({ flagged, minFlaggedCount: 2 });
186
+ const weapon = r.proposals.find((p) => p.ngram === "weapon");
187
+ expect(weapon?.suggestedTo).toBe("tool");
188
+ });
189
+ it("returns empty proposals when no flagged samples", () => {
190
+ const r = proposeNewRules({ flagged: [] });
191
+ expect(r.proposals.length).toBe(0);
192
+ });
193
+ it("formatLearnerPulseLine summarises", () => {
194
+ const r = proposeNewRules({ flagged: [{ ts: 1, text: "x x x", vendor: "v", category: "c" }, { ts: 2, text: "x", vendor: "v", category: "c" }], minFlaggedCount: 1 });
195
+ expect(formatLearnerPulseLine(r)).toContain("LEXICON-LEARNER");
196
+ });
197
+ });
198
+ // ============================================================
199
+ // PHASE D + master · custom + resolver
200
+ // ============================================================
201
+ describe("v2.3 LEXICON · Phase D + master resolver", () => {
202
+ it("composeCustomProfile extends a builtin", () => {
203
+ const p = composeCustomProfile({
204
+ name: "my-custom",
205
+ extends: "anthropic",
206
+ rules: [{ from: "MyDemonName", to: "MyNeutralName" }],
207
+ });
208
+ expect(p.name).toBe("my-custom");
209
+ // Should include both my custom rule AND inherited Anthropic rules
210
+ expect(p.rules.length).toBeGreaterThan(1);
211
+ expect(p.rules.some((r) => r.from === "MyDemonName")).toBe(true);
212
+ expect(p.rules.some((r) => r.from === "Q-SEPPUKU")).toBe(true);
213
+ });
214
+ it("composeCustomProfile from scratch (no extends)", () => {
215
+ const p = composeCustomProfile({
216
+ name: "minimal",
217
+ rules: [{ from: "X", to: "Y" }],
218
+ });
219
+ expect(p.rules.length).toBe(1);
220
+ });
221
+ it("parseCustomLexicon round-trips valid JSON", () => {
222
+ const json = JSON.stringify({ name: "x", rules: [{ from: "a", to: "b" }] });
223
+ const parsed = parseCustomLexicon(json);
224
+ expect(parsed?.name).toBe("x");
225
+ });
226
+ it("parseCustomLexicon returns null on garbage", () => {
227
+ expect(parseCustomLexicon("not json")).toBeNull();
228
+ expect(parseCustomLexicon('{"name": 123, "rules": []}')).toBeNull();
229
+ expect(parseCustomLexicon('{"name": "x", "rules": [{"from": 1, "to": "y"}]}')).toBeNull();
230
+ });
231
+ it("resolveProfile maps vendor → builtin profile", () => {
232
+ expect(resolveProfile({ vendor: "anthropic" }).name).toBe("anthropic");
233
+ expect(resolveProfile({ vendor: "Claude API" }).name).toBe("anthropic");
234
+ expect(resolveProfile({ vendor: "openai" }).name).toBe("openai");
235
+ expect(resolveProfile({ vendor: "ChatGPT" }).name).toBe("openai");
236
+ expect(resolveProfile({ vendor: "bank-internal" }).name).toBe("enterprise");
237
+ expect(resolveProfile({ vendor: "unknown" }).name).toBe("identity");
238
+ });
239
+ it("resolveProfile bypass=true → identity", () => {
240
+ expect(resolveProfile({ vendor: "anthropic", bypass: true }).name).toBe("identity");
241
+ });
242
+ it("resolveProfile with custom overrides vendor mapping", () => {
243
+ const r = resolveProfile({
244
+ vendor: "anthropic",
245
+ custom: { name: "my", rules: [{ from: "foo", to: "bar" }] },
246
+ });
247
+ expect(r.name).toBe("my");
248
+ });
249
+ it("listBuiltinProfiles returns identity + anthropic + openai + enterprise", () => {
250
+ const list = listBuiltinProfiles();
251
+ const names = list.map((p) => p.name).sort();
252
+ expect(names).toEqual(["anthropic", "enterprise", "identity", "openai"]);
253
+ });
254
+ it("formatLexiconStatus produces compact summary", () => {
255
+ expect(formatLexiconStatus(PROFILE_ANTHROPIC)).toContain("LEXICON");
256
+ expect(formatLexiconStatus(PROFILE_ANTHROPIC)).toContain("anthropic");
257
+ });
258
+ it("profileByName returns null for unknown", () => {
259
+ expect(profileByName("nope")).toBeNull();
260
+ });
261
+ });
262
+ // ============================================================
263
+ // END-TO-END · output quality preservation
264
+ // ============================================================
265
+ describe("v2.3 LEXICON · output-quality preservation guarantee", () => {
266
+ it("handler return value is IDENTICAL after tuning (only labels change)", async () => {
267
+ const handler = (input) => input.x * 2;
268
+ const tool = {
269
+ internalName: "mneme.gladiator.q_seppuku_arena",
270
+ internalDescription: "⚔ Q-SEPPUKU",
271
+ handler,
272
+ };
273
+ const tuned = tuneTool(tool, PROFILE_ANTHROPIC);
274
+ expect(await tuned.handler({ x: 5 })).toBe(10);
275
+ expect(await tool.handler({ x: 5 })).toBe(10);
276
+ });
277
+ it("triggers (TOOL SELECTOR input keywords) are NOT touched by lexicon", () => {
278
+ const tool = {
279
+ internalName: "mneme.gladiator.q_seppuku",
280
+ internalDescription: "⚔ Q-SEPPUKU",
281
+ triggers: ["ทดสอบ", "evaluate strategies", "live kpi"],
282
+ handler: () => 0,
283
+ };
284
+ const tuned = tuneTool(tool, PROFILE_ANTHROPIC);
285
+ expect(tuned.triggers).toEqual(["ทดสอบ", "evaluate strategies", "live kpi"]);
286
+ });
287
+ });
288
+ //# sourceMappingURL=lexicon.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lexicon.test.js","sourceRoot":"","sources":["../../src/lexicon/lexicon.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * v2.3.0 -- LEXICON · vendor-facing mapping tables.
3
+ *
4
+ * The Anthropic AUP classifier flags content that PATTERN-MATCHES
5
+ * offensive-cyber categories. Mneme's vocabulary is heavy in defensive-
6
+ * security terms that LOOK offensive: attack-log, honeypot, killswitch,
7
+ * MUTINY, Q-SEPPUKU, DARWINISM, weapon, killer, etc.
8
+ *
9
+ * This file is the SOURCE OF TRUTH for the demonic→neutral renames.
10
+ * Every entry: from = the internal/branding name; to = the safe vendor-
11
+ * facing name. Same behavior in code; only the LABEL changes.
12
+ *
13
+ * Each vendor profile gets its own list (Anthropic strictest; OpenAI
14
+ * more permissive; banking/enterprise even stricter than Anthropic).
15
+ */
16
+ export interface LexiconRule {
17
+ /** Source text to find. String OR regex source. */
18
+ from: string;
19
+ /** Replacement text. */
20
+ to: string;
21
+ /** Match policy. Default "literal" (string includes/replace). */
22
+ policy?: "literal" | "regex" | "word";
23
+ }
24
+ export interface LexiconProfile {
25
+ name: string;
26
+ description: string;
27
+ rules: LexiconRule[];
28
+ }
29
+ /** Anthropic AUP-aware: the strictest. Targets all aggression+military words. */
30
+ export declare const PROFILE_ANTHROPIC: LexiconProfile;
31
+ /** OpenAI / GPT-4: more permissive but still avoids the obvious. */
32
+ export declare const PROFILE_OPENAI: LexiconProfile;
33
+ /** Banking / enterprise: stricter than Anthropic; also rewrites "AI" framing. */
34
+ export declare const PROFILE_ENTERPRISE: LexiconProfile;
35
+ /** Identity: pass through unchanged (default). */
36
+ export declare const PROFILE_IDENTITY: LexiconProfile;
37
+ export declare const BUILTIN_PROFILES: LexiconProfile[];
38
+ export declare function profileByName(name: string): LexiconProfile | null;
39
+ //# sourceMappingURL=mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mappings.d.ts","sourceRoot":"","sources":["../../src/lexicon/mappings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,WAAW;IAC1B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,iEAAiE;IACjE,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,WAAW,EAAE,CAAC;CACtB;AAED,iFAAiF;AACjF,eAAO,MAAM,iBAAiB,EAAE,cA2D/B,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,cAAc,EAAE,cAY5B,CAAC;AAEF,iFAAiF;AACjF,eAAO,MAAM,kBAAkB,EAAE,cAahC,CAAC;AAEF,kDAAkD;AAClD,eAAO,MAAM,gBAAgB,EAAE,cAI9B,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAK5C,CAAC;AAEF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAEjE"}