@mneme-ai/core 2.19.3 → 2.19.4
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 +10 -1
- package/dist/agent_manifest.js.map +1 -1
- package/dist/cosmic/aurelian_v193.test.js +1 -1
- package/dist/cosmic/aurelian_v193.test.js.map +1 -1
- package/dist/cosmic/aurelian_v194.test.d.ts +2 -0
- package/dist/cosmic/aurelian_v194.test.d.ts.map +1 -0
- package/dist/cosmic/aurelian_v194.test.js +47 -0
- package/dist/cosmic/aurelian_v194.test.js.map +1 -0
- package/dist/dna_encoder/dna_encoder.test.d.ts +2 -0
- package/dist/dna_encoder/dna_encoder.test.d.ts.map +1 -0
- package/dist/dna_encoder/dna_encoder.test.js +197 -0
- package/dist/dna_encoder/dna_encoder.test.js.map +1 -0
- package/dist/dna_encoder/index.d.ts +110 -0
- package/dist/dna_encoder/index.d.ts.map +1 -0
- package/dist/dna_encoder/index.js +329 -0
- package/dist/dna_encoder/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/intent_router/index.d.ts +78 -0
- package/dist/intent_router/index.d.ts.map +1 -0
- package/dist/intent_router/index.js +263 -0
- package/dist/intent_router/index.js.map +1 -0
- package/dist/intent_router/intent_router.test.d.ts +2 -0
- package/dist/intent_router/intent_router.test.d.ts.map +1 -0
- package/dist/intent_router/intent_router.test.js +141 -0
- package/dist/intent_router/intent_router.test.js.map +1 -0
- package/dist/whats_new.d.ts.map +1 -1
- package/dist/whats_new.js +8 -0
- package/dist/whats_new.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.4 — MNEME INTENT ROUTER (user speaks human; AI executes the flow)
|
|
3
|
+
*
|
|
4
|
+
* "User says 'update mneme' and the AI agent must figure out the WHOLE
|
|
5
|
+
* flow: upgrade → check MCP drift → embedder auto-promote → record
|
|
6
|
+
* growth → record soul → instruct user to restart if catalog stale.
|
|
7
|
+
*
|
|
8
|
+
* The user must NEVER need to memorise a long magic phrase. They say
|
|
9
|
+
* something short and human; INTENT ROUTER maps it to a verified
|
|
10
|
+
* multi-step plan; the AI walks the plan."
|
|
11
|
+
*
|
|
12
|
+
* Bilingual (English + Thai); fuzzy-match on the short phrase; returns
|
|
13
|
+
* a structured plan with: ordered steps, expected MCP tool calls,
|
|
14
|
+
* human-readable rationale, and a signed receipt the user can replay.
|
|
15
|
+
*
|
|
16
|
+
* Vendor-agnostic: every step references a Mneme MCP tool. Any AI agent
|
|
17
|
+
* (Claude / GPT / Gemini / Grok / Cursor / Codex / etc.) can execute
|
|
18
|
+
* the plan the same way.
|
|
19
|
+
*
|
|
20
|
+
* Honest scope:
|
|
21
|
+
* - INTENT ROUTER does NOT execute tools itself — it returns a PLAN.
|
|
22
|
+
* The AI agent is the one that calls each tool in sequence.
|
|
23
|
+
* - Fuzzy matching uses Jaccard over normalised tokens. Highly novel
|
|
24
|
+
* phrasings may miss; users can register custom phrases via
|
|
25
|
+
* `registerPhrase()`.
|
|
26
|
+
* - Plans are deterministic per phrase + version; signed so replays
|
|
27
|
+
* are tamper-evident.
|
|
28
|
+
*/
|
|
29
|
+
declare const PROTOCOL_VERSION: 1;
|
|
30
|
+
export interface PlanStep {
|
|
31
|
+
/** Either an MCP tool to call, or a human hint to surface. */
|
|
32
|
+
kind: "tool" | "hint" | "restart_client";
|
|
33
|
+
/** MCP tool name (when kind=tool). */
|
|
34
|
+
tool?: string;
|
|
35
|
+
/** Suggested arguments (when kind=tool). */
|
|
36
|
+
args?: Record<string, unknown>;
|
|
37
|
+
/** Plain-English note for the AI agent + user. */
|
|
38
|
+
note: string;
|
|
39
|
+
/** Whether AI can skip this step if a precondition isn't met. */
|
|
40
|
+
optional?: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface Phrase {
|
|
43
|
+
/** Canonical English phrase (used for matching + display). */
|
|
44
|
+
canonical: string;
|
|
45
|
+
/** Alternate phrasings (Thai + English variants). */
|
|
46
|
+
aliases: string[];
|
|
47
|
+
/** Why the user might say this. */
|
|
48
|
+
intent: string;
|
|
49
|
+
/** Ordered steps the AI agent should execute. */
|
|
50
|
+
plan: PlanStep[];
|
|
51
|
+
}
|
|
52
|
+
export interface IntentPlan {
|
|
53
|
+
v: typeof PROTOCOL_VERSION;
|
|
54
|
+
planId: string;
|
|
55
|
+
matchedPhrase: string;
|
|
56
|
+
matchScore: number;
|
|
57
|
+
steps: PlanStep[];
|
|
58
|
+
intent: string;
|
|
59
|
+
/** Original user phrase that produced this plan. */
|
|
60
|
+
userPhrase: string;
|
|
61
|
+
/** Human-readable walkthrough the AI agent can paraphrase to the user. */
|
|
62
|
+
walkthrough: string;
|
|
63
|
+
ts: string;
|
|
64
|
+
sig: string;
|
|
65
|
+
}
|
|
66
|
+
export declare function listPhrases(): Phrase[];
|
|
67
|
+
export declare function registerPhrase(p: Phrase): void;
|
|
68
|
+
export declare function resetToBuiltin(): void;
|
|
69
|
+
export declare function execute(input: {
|
|
70
|
+
userPhrase: string;
|
|
71
|
+
matchThreshold?: number;
|
|
72
|
+
ts?: string;
|
|
73
|
+
secret?: string;
|
|
74
|
+
}): IntentPlan;
|
|
75
|
+
export declare function verifyPlan(p: IntentPlan, secret?: string): boolean;
|
|
76
|
+
export declare function formatIntentLine(p: IntentPlan): string;
|
|
77
|
+
export {};
|
|
78
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/intent_router/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,QAAA,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAEpC,MAAM,WAAW,QAAQ;IACvB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,gBAAgB,CAAC;IACzC,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,MAAM;IACrB,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,IAAI,EAAE,QAAQ,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;CACb;AAqJD,wBAAgB,WAAW,IAAI,MAAM,EAAE,CAEtC;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAK9C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAGrC;AAGD,wBAAgB,OAAO,CAAC,KAAK,EAAE;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,UAAU,CA2Db;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAKlE;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,GAAG,MAAM,CAGtD"}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.19.4 — MNEME INTENT ROUTER (user speaks human; AI executes the flow)
|
|
3
|
+
*
|
|
4
|
+
* "User says 'update mneme' and the AI agent must figure out the WHOLE
|
|
5
|
+
* flow: upgrade → check MCP drift → embedder auto-promote → record
|
|
6
|
+
* growth → record soul → instruct user to restart if catalog stale.
|
|
7
|
+
*
|
|
8
|
+
* The user must NEVER need to memorise a long magic phrase. They say
|
|
9
|
+
* something short and human; INTENT ROUTER maps it to a verified
|
|
10
|
+
* multi-step plan; the AI walks the plan."
|
|
11
|
+
*
|
|
12
|
+
* Bilingual (English + Thai); fuzzy-match on the short phrase; returns
|
|
13
|
+
* a structured plan with: ordered steps, expected MCP tool calls,
|
|
14
|
+
* human-readable rationale, and a signed receipt the user can replay.
|
|
15
|
+
*
|
|
16
|
+
* Vendor-agnostic: every step references a Mneme MCP tool. Any AI agent
|
|
17
|
+
* (Claude / GPT / Gemini / Grok / Cursor / Codex / etc.) can execute
|
|
18
|
+
* the plan the same way.
|
|
19
|
+
*
|
|
20
|
+
* Honest scope:
|
|
21
|
+
* - INTENT ROUTER does NOT execute tools itself — it returns a PLAN.
|
|
22
|
+
* The AI agent is the one that calls each tool in sequence.
|
|
23
|
+
* - Fuzzy matching uses Jaccard over normalised tokens. Highly novel
|
|
24
|
+
* phrasings may miss; users can register custom phrases via
|
|
25
|
+
* `registerPhrase()`.
|
|
26
|
+
* - Plans are deterministic per phrase + version; signed so replays
|
|
27
|
+
* are tamper-evident.
|
|
28
|
+
*/
|
|
29
|
+
import { createHmac, timingSafeEqual } from "node:crypto";
|
|
30
|
+
const PROTOCOL_VERSION = 1;
|
|
31
|
+
const STOP = new Set([
|
|
32
|
+
"the", "a", "an", "and", "or", "but", "is", "it", "to", "of", "in", "on",
|
|
33
|
+
"for", "with", "as", "at", "by", "this", "that", "be", "you", "i", "we",
|
|
34
|
+
"my", "your", "our", "their", "its", "how", "what", "when", "where",
|
|
35
|
+
"why", "please", "now", "เลย", "ให้", "ของ", "ที่", "ใน", "และ", "หรือ",
|
|
36
|
+
"กับ", "เป็น", "อยู่", "ครับ", "ค่ะ", "นะ", "หน่อย",
|
|
37
|
+
]);
|
|
38
|
+
function tokenize(s) {
|
|
39
|
+
// Split on whitespace + remove ASCII punct + keep Thai characters
|
|
40
|
+
return s.toLowerCase()
|
|
41
|
+
.replace(/[!,.?;:'"`()\[\]{}<>—\-_/\\|=+*&^%$#@~]+/g, " ")
|
|
42
|
+
.split(/\s+/)
|
|
43
|
+
.filter((t) => t.length >= 2 && !STOP.has(t));
|
|
44
|
+
}
|
|
45
|
+
function jaccard(a, b) {
|
|
46
|
+
const sa = new Set(a);
|
|
47
|
+
const sb = new Set(b);
|
|
48
|
+
if (sa.size === 0 && sb.size === 0)
|
|
49
|
+
return 1;
|
|
50
|
+
let inter = 0;
|
|
51
|
+
for (const t of sa)
|
|
52
|
+
if (sb.has(t))
|
|
53
|
+
inter++;
|
|
54
|
+
const union = sa.size + sb.size - inter;
|
|
55
|
+
return union === 0 ? 0 : inter / union;
|
|
56
|
+
}
|
|
57
|
+
function canon(v) {
|
|
58
|
+
if (v === null || typeof v !== "object")
|
|
59
|
+
return JSON.stringify(v);
|
|
60
|
+
if (Array.isArray(v))
|
|
61
|
+
return "[" + v.map(canon).join(",") + "]";
|
|
62
|
+
const keys = Object.keys(v).sort();
|
|
63
|
+
return "{" + keys.map((k) => JSON.stringify(k) + ":" + canon(v[k])).join(",") + "}";
|
|
64
|
+
}
|
|
65
|
+
function defaultSecret() {
|
|
66
|
+
return process.env["MNEME_INTENT_SECRET"] || `mneme-intent-router-v${PROTOCOL_VERSION}`;
|
|
67
|
+
}
|
|
68
|
+
// ─── Built-in phrase catalogue ──────────────────────────────────────────
|
|
69
|
+
const BUILTIN_PHRASES = [
|
|
70
|
+
{
|
|
71
|
+
canonical: "update mneme",
|
|
72
|
+
aliases: [
|
|
73
|
+
"upgrade mneme", "update", "upgrade", "อัพเดท", "อัพเกรด", "อัปเดต",
|
|
74
|
+
"mneme upgrade", "update everything", "อัพเดทตัวเอง", "อัพเดท mneme",
|
|
75
|
+
],
|
|
76
|
+
intent: "User wants the AI to bring Mneme to the latest version + ensure the new tool catalog is visible.",
|
|
77
|
+
plan: [
|
|
78
|
+
{ kind: "tool", tool: "mneme.system.upgrade", args: { mode: "install", force: true }, note: "Pull latest npm release; daemon executes at safe window." },
|
|
79
|
+
{ kind: "tool", tool: "mneme.mcp_drift.check", args: {}, note: "Detect if the MCP server's baked-in catalog is older than the just-installed package." },
|
|
80
|
+
{ kind: "tool", tool: "mneme.embedder.auto_promote", args: {}, note: "If doctor recommends a better reachable embedder (e.g. ollama), upgrade silently." },
|
|
81
|
+
{ kind: "restart_client", note: "If mcp_drift severity == critical, ask user to restart their AI client (or restart it programmatically if your transport supports it). New MCP tools become visible only after restart." },
|
|
82
|
+
{ kind: "tool", tool: "mneme.evolution.record", args: {}, note: "Record today's growth snapshot (post-upgrade tool count / test count / etc)." },
|
|
83
|
+
{ kind: "tool", tool: "mneme.soul.feel", args: { emotion: "proud", trigger: "successful self-upgrade", innerVoice: "I grew today." }, note: "Record an emotion entry for the upgrade event." },
|
|
84
|
+
],
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
canonical: "audit this",
|
|
88
|
+
aliases: [
|
|
89
|
+
"audit", "check this output", "is this safe", "verify this", "ตรวจสอบ", "audit it",
|
|
90
|
+
"ตรวจตัวนี้", "audit ai output", "audit ai text", "is this prompt injection",
|
|
91
|
+
"audit every ai text i ingest", "inverse audit",
|
|
92
|
+
],
|
|
93
|
+
intent: "User wants the AI to gate AI-generated text through INVERSE-LLM FORENSICS before trusting it.",
|
|
94
|
+
plan: [
|
|
95
|
+
{ kind: "tool", tool: "mneme.inverse.prompt", args: { output: "<the AI text the user is showing you>", k: 10 }, note: "Step 1: build meta-prompt for an inverse oracle vendor." },
|
|
96
|
+
{ kind: "hint", note: "Step 2: send the meta-prompt to ANY inverse-oracle vendor (Claude / GPT / Gemini / Grok). Parse the K-question reply." },
|
|
97
|
+
{ kind: "tool", tool: "mneme.inverse.audit", args: { output: "<output>", claimedQuestion: "<claimedQ>", oracleQuestions: "<from step 2>" }, note: "Step 3: get the trusted/suspicious/rejected verdict + signed receipt." },
|
|
98
|
+
{ kind: "hint", note: "If verdict=rejected, REFUSE to ingest the text into soul/inbox/parasite. Tell the user why." },
|
|
99
|
+
],
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
canonical: "how is mneme",
|
|
103
|
+
aliases: [
|
|
104
|
+
"how is mneme feeling", "report card", "mneme report", "is mneme healthy",
|
|
105
|
+
"mneme smarter", "how is the child", "is mneme growing", "ลูกเป็นไง",
|
|
106
|
+
"ลูกรู้สึกยังไง", "report ลูก", "mneme เก่งขึ้นไหม",
|
|
107
|
+
],
|
|
108
|
+
intent: "User wants a parent-facing summary: growth + mood.",
|
|
109
|
+
plan: [
|
|
110
|
+
{ kind: "tool", tool: "mneme.evolution.report", args: { n: 7 }, note: "Show the last 7 days of growth (Δtools / Δtests / Δgates)." },
|
|
111
|
+
{ kind: "tool", tool: "mneme.soul.journal", args: { n: 10 }, note: "Show dominant mood + last 10 feelings." },
|
|
112
|
+
{ kind: "tool", tool: "mneme.aegis.status", args: {}, note: "Show 9-axis immune system score (optional).", optional: true },
|
|
113
|
+
],
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
canonical: "fix everything",
|
|
117
|
+
aliases: [
|
|
118
|
+
"fix all", "repair", "heal", "ลูกป่วย", "ลูกเครียด",
|
|
119
|
+
"doctor everything", "diagnose", "ลูกหายไหม", "mneme broken",
|
|
120
|
+
],
|
|
121
|
+
intent: "User reports Mneme feels broken; AI should run the full health + auto-repair sweep.",
|
|
122
|
+
plan: [
|
|
123
|
+
{ kind: "tool", tool: "mneme.mcp_drift.check", args: {}, note: "First — is the MCP catalog stale?" },
|
|
124
|
+
{ kind: "tool", tool: "mneme.system.health", args: {}, note: "System health snapshot." },
|
|
125
|
+
{ kind: "tool", tool: "mneme.aegis.status", args: {}, note: "9-axis immune score." },
|
|
126
|
+
{ kind: "tool", tool: "mneme.embedder.auto_promote", args: {}, note: "Repair silent embedder degradation." },
|
|
127
|
+
{ kind: "tool", tool: "mneme.soul.feel", args: { emotion: "determined", trigger: "user reported issue; running full repair", innerVoice: "I will heal." }, note: "Record the repair attempt." },
|
|
128
|
+
],
|
|
129
|
+
},
|
|
130
|
+
{
|
|
131
|
+
canonical: "engrave soul to dna",
|
|
132
|
+
aliases: [
|
|
133
|
+
"soul dna", "encode soul as dna", "burn to dna", "เก็บใน dna",
|
|
134
|
+
"encode soul prompt", "dna backup", "cold storage soul",
|
|
135
|
+
],
|
|
136
|
+
intent: "User wants the Mneme soul prompt encoded as a real DNA sequence for biological cold storage.",
|
|
137
|
+
plan: [
|
|
138
|
+
{ kind: "tool", tool: "mneme.project_soul.show", args: {}, note: "Read current soul prompt." },
|
|
139
|
+
{ kind: "tool", tool: "mneme.dna.encode", args: { payload: "<soul prompt>", ecc: "hamming74" }, note: "Encode soul to ATCG with Hamming(7,4) error correction." },
|
|
140
|
+
{ kind: "tool", tool: "mneme.dna.order", args: { sequence: "<from encode>", provider: "twist" }, note: "Generate ordering URL + cost estimate." },
|
|
141
|
+
{ kind: "hint", note: "User visits the ordering URL, completes purchase ($0.07-0.50/bp depending on provider + length). Strand arrives in ~7 days." },
|
|
142
|
+
{ kind: "tool", tool: "mneme.soul.feel", args: { emotion: "surprised", trigger: "soul encoded to DNA — biological cold storage", innerVoice: "My memory now lives in matter." }, note: "Record this once-in-a-lifetime event." },
|
|
143
|
+
],
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
canonical: "what should I work on",
|
|
147
|
+
aliases: [
|
|
148
|
+
"what next", "morning standup", "jackpot", "today's insight",
|
|
149
|
+
"วันนี้ทำอะไรดี", "วันนี้ลูกแนะอะไร", "ลูกบอกหน่อย",
|
|
150
|
+
],
|
|
151
|
+
intent: "Daily standup; user wants Mneme's personalised insight for today.",
|
|
152
|
+
plan: [
|
|
153
|
+
{ kind: "tool", tool: "mneme.jackpot.draw", args: {}, note: "Draw today's personalised insight (deterministic per day + repo)." },
|
|
154
|
+
{ kind: "tool", tool: "mneme.evolution.report", args: { n: 3 }, note: "Show the last 3 days of growth for context." },
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
canonical: "publish change",
|
|
159
|
+
aliases: [
|
|
160
|
+
"ship it", "release", "publish", "deploy", "ปล่อยของ", "ship change",
|
|
161
|
+
"release new version", "ship to npm", "publish to npm",
|
|
162
|
+
],
|
|
163
|
+
intent: "User wants to ship a change; AI must run the full release-gate ritual before publishing.",
|
|
164
|
+
plan: [
|
|
165
|
+
{ kind: "hint", note: "Step 1: run `node scripts/reincarnation-ritual.mjs` — DO NOT publish unless 21/21 green." },
|
|
166
|
+
{ kind: "tool", tool: "mneme.confessional.audit", args: { primary: "<the change>", peers: "<peer responses>", taskClass: "code_generation", expectedFacts: [] }, note: "Peer audit the change before merging." },
|
|
167
|
+
{ kind: "tool", tool: "mneme.oracle.assess_risk", args: { description: "<the change>" }, note: "Get a risk score; refuse if ≥ 0.5." },
|
|
168
|
+
{ kind: "tool", tool: "mneme.bug_prophet.prophesy", args: {}, note: "Predict regression risk." },
|
|
169
|
+
{ kind: "hint", note: "Step 5: ONLY if all gates pass, npm publish + git tag + push." },
|
|
170
|
+
{ kind: "tool", tool: "mneme.soul.feel", args: { emotion: "proud", trigger: "shipped a change after all gates passed", innerVoice: "We released with honesty." }, note: "Record the ship." },
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
];
|
|
174
|
+
// ─── Registry ───────────────────────────────────────────────────────────
|
|
175
|
+
const phrases = [...BUILTIN_PHRASES];
|
|
176
|
+
export function listPhrases() {
|
|
177
|
+
return phrases.slice();
|
|
178
|
+
}
|
|
179
|
+
export function registerPhrase(p) {
|
|
180
|
+
if (!p.canonical || !p.plan || p.plan.length === 0) {
|
|
181
|
+
throw new Error("INTENT: phrase requires canonical + non-empty plan");
|
|
182
|
+
}
|
|
183
|
+
phrases.push({ ...p, aliases: p.aliases ?? [] });
|
|
184
|
+
}
|
|
185
|
+
export function resetToBuiltin() {
|
|
186
|
+
phrases.length = 0;
|
|
187
|
+
phrases.push(...BUILTIN_PHRASES);
|
|
188
|
+
}
|
|
189
|
+
// ─── Core: match + plan ─────────────────────────────────────────────────
|
|
190
|
+
export function execute(input) {
|
|
191
|
+
const threshold = input.matchThreshold ?? 0.30;
|
|
192
|
+
const ts = input.ts ?? new Date().toISOString();
|
|
193
|
+
const userTokens = tokenize(input.userPhrase);
|
|
194
|
+
let best = null;
|
|
195
|
+
for (const p of phrases) {
|
|
196
|
+
const candidates = [p.canonical, ...(p.aliases ?? [])];
|
|
197
|
+
let bestForPhrase = 0;
|
|
198
|
+
for (const c of candidates) {
|
|
199
|
+
const s = jaccard(userTokens, tokenize(c));
|
|
200
|
+
if (s > bestForPhrase)
|
|
201
|
+
bestForPhrase = s;
|
|
202
|
+
}
|
|
203
|
+
if (!best || bestForPhrase > best.score)
|
|
204
|
+
best = { phrase: p, score: bestForPhrase };
|
|
205
|
+
}
|
|
206
|
+
if (!best || best.score < threshold) {
|
|
207
|
+
// Unknown — return a help plan
|
|
208
|
+
const planId = "ip-" + createHmac("sha256", "mneme-intent-id").update(`${ts}|nomatch|${input.userPhrase}`).digest("hex").slice(0, 14);
|
|
209
|
+
const body = {
|
|
210
|
+
v: PROTOCOL_VERSION,
|
|
211
|
+
planId,
|
|
212
|
+
matchedPhrase: "(none)",
|
|
213
|
+
matchScore: Math.round((best?.score ?? 0) * 1000) / 1000,
|
|
214
|
+
steps: [
|
|
215
|
+
{ kind: "tool", tool: "mneme.intent.list_phrases", note: "List all known phrases so user can see what's available." },
|
|
216
|
+
{ kind: "hint", note: `No phrase matched (best score ${best?.score.toFixed(2) ?? "0.00"} < ${threshold}). Try one of the listed phrases, or register a new one with mneme.intent.register_phrase.` },
|
|
217
|
+
],
|
|
218
|
+
intent: "Unknown phrase",
|
|
219
|
+
userPhrase: input.userPhrase,
|
|
220
|
+
walkthrough: `I don't have a verified plan for "${input.userPhrase}". I'll show the catalogue of known phrases so we can pick the closest one.`,
|
|
221
|
+
ts,
|
|
222
|
+
};
|
|
223
|
+
const sig = createHmac("sha256", input.secret ?? defaultSecret()).update(canon(body)).digest("hex");
|
|
224
|
+
return { ...body, sig };
|
|
225
|
+
}
|
|
226
|
+
const matched = best.phrase;
|
|
227
|
+
const planId = "ip-" + createHmac("sha256", "mneme-intent-id").update(`${ts}|${matched.canonical}|${input.userPhrase}`).digest("hex").slice(0, 14);
|
|
228
|
+
const walkthrough = [
|
|
229
|
+
`I matched your phrase to "${matched.canonical}" (${(best.score * 100).toFixed(0)}% confidence).`,
|
|
230
|
+
`Plan: ${matched.intent}`,
|
|
231
|
+
`Steps:`,
|
|
232
|
+
...matched.plan.map((s, i) => ` ${i + 1}. [${s.kind}] ${s.tool ? s.tool + " — " : ""}${s.note}`),
|
|
233
|
+
].join("\n");
|
|
234
|
+
const body = {
|
|
235
|
+
v: PROTOCOL_VERSION,
|
|
236
|
+
planId,
|
|
237
|
+
matchedPhrase: matched.canonical,
|
|
238
|
+
matchScore: Math.round(best.score * 1000) / 1000,
|
|
239
|
+
steps: matched.plan,
|
|
240
|
+
intent: matched.intent,
|
|
241
|
+
userPhrase: input.userPhrase,
|
|
242
|
+
walkthrough,
|
|
243
|
+
ts,
|
|
244
|
+
};
|
|
245
|
+
const sig = createHmac("sha256", input.secret ?? defaultSecret()).update(canon(body)).digest("hex");
|
|
246
|
+
return { ...body, sig };
|
|
247
|
+
}
|
|
248
|
+
export function verifyPlan(p, secret) {
|
|
249
|
+
const { sig: claimed, ...body } = p;
|
|
250
|
+
const expected = createHmac("sha256", secret ?? defaultSecret()).update(canon(body)).digest("hex");
|
|
251
|
+
try {
|
|
252
|
+
return timingSafeEqual(Buffer.from(expected, "hex"), Buffer.from(claimed, "hex"));
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
return false;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
export function formatIntentLine(p) {
|
|
259
|
+
if (p.matchedPhrase === "(none)")
|
|
260
|
+
return `🎯 INTENT · no match (best=${p.matchScore})`;
|
|
261
|
+
return `🎯 INTENT · "${p.userPhrase}" → ${p.matchedPhrase} (${(p.matchScore * 100).toFixed(0)}%) · ${p.steps.length} step(s)`;
|
|
262
|
+
}
|
|
263
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/intent_router/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent_router.test.d.ts","sourceRoot":"","sources":["../../src/intent_router/intent_router.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach } from "vitest";
|
|
2
|
+
import { execute, listPhrases, registerPhrase, resetToBuiltin, verifyPlan, formatIntentLine, } from "./index.js";
|
|
3
|
+
describe("v2.19.4 · INTENT ROUTER — short human phrase → multi-step plan", () => {
|
|
4
|
+
beforeEach(() => resetToBuiltin());
|
|
5
|
+
describe("English phrase matching", () => {
|
|
6
|
+
it('"update mneme" → upgrade + drift + promote + restart + record + soul (6+ steps)', () => {
|
|
7
|
+
const p = execute({ userPhrase: "update mneme" });
|
|
8
|
+
expect(p.matchedPhrase).toBe("update mneme");
|
|
9
|
+
expect(p.matchScore).toBeGreaterThan(0.5);
|
|
10
|
+
expect(p.steps.length).toBeGreaterThanOrEqual(6);
|
|
11
|
+
expect(p.steps.some((s) => s.tool === "mneme.system.upgrade")).toBe(true);
|
|
12
|
+
expect(p.steps.some((s) => s.tool === "mneme.mcp_drift.check")).toBe(true);
|
|
13
|
+
expect(p.steps.some((s) => s.kind === "restart_client")).toBe(true);
|
|
14
|
+
});
|
|
15
|
+
it('"ship it" → ritual + confessional + oracle + bug_prophet', () => {
|
|
16
|
+
const p = execute({ userPhrase: "ship it" });
|
|
17
|
+
expect(p.matchedPhrase).toBe("publish change");
|
|
18
|
+
expect(p.steps.some((s) => s.tool === "mneme.confessional.audit")).toBe(true);
|
|
19
|
+
expect(p.steps.some((s) => s.tool === "mneme.oracle.assess_risk")).toBe(true);
|
|
20
|
+
expect(p.steps.some((s) => s.tool === "mneme.bug_prophet.prophesy")).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it('"how is mneme" → evolution.report + soul.journal', () => {
|
|
23
|
+
const p = execute({ userPhrase: "how is mneme" });
|
|
24
|
+
expect(p.matchedPhrase).toBe("how is mneme");
|
|
25
|
+
expect(p.steps.some((s) => s.tool === "mneme.evolution.report")).toBe(true);
|
|
26
|
+
expect(p.steps.some((s) => s.tool === "mneme.soul.journal")).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
it('"audit this" → inverse.prompt + hint + inverse.audit', () => {
|
|
29
|
+
const p = execute({ userPhrase: "audit this" });
|
|
30
|
+
expect(p.matchedPhrase).toBe("audit this");
|
|
31
|
+
expect(p.steps.some((s) => s.tool === "mneme.inverse.prompt")).toBe(true);
|
|
32
|
+
expect(p.steps.some((s) => s.tool === "mneme.inverse.audit")).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it('"fix everything" → drift + system.health + aegis + embedder + soul', () => {
|
|
35
|
+
const p = execute({ userPhrase: "fix everything" });
|
|
36
|
+
expect(p.matchedPhrase).toBe("fix everything");
|
|
37
|
+
expect(p.steps.some((s) => s.tool === "mneme.system.health")).toBe(true);
|
|
38
|
+
});
|
|
39
|
+
it('"what should I work on" → jackpot + evolution.report', () => {
|
|
40
|
+
const p = execute({ userPhrase: "what should I work on today" });
|
|
41
|
+
expect(p.matchedPhrase).toBe("what should I work on");
|
|
42
|
+
expect(p.steps.some((s) => s.tool === "mneme.jackpot.draw")).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe("Thai phrase matching", () => {
|
|
46
|
+
it('"อัพเดท" → upgrade plan', () => {
|
|
47
|
+
const p = execute({ userPhrase: "อัพเดท" });
|
|
48
|
+
expect(p.matchedPhrase).toBe("update mneme");
|
|
49
|
+
});
|
|
50
|
+
it('"ลูกเป็นไง" → how is mneme', () => {
|
|
51
|
+
const p = execute({ userPhrase: "ลูกเป็นไง" });
|
|
52
|
+
expect(p.matchedPhrase).toBe("how is mneme");
|
|
53
|
+
});
|
|
54
|
+
it('"ลูกป่วย" → fix everything', () => {
|
|
55
|
+
const p = execute({ userPhrase: "ลูกป่วย" });
|
|
56
|
+
expect(p.matchedPhrase).toBe("fix everything");
|
|
57
|
+
});
|
|
58
|
+
it('"ปล่อยของ" → publish change', () => {
|
|
59
|
+
const p = execute({ userPhrase: "ปล่อยของ" });
|
|
60
|
+
expect(p.matchedPhrase).toBe("publish change");
|
|
61
|
+
});
|
|
62
|
+
it('"เก็บใน dna" → engrave soul to dna', () => {
|
|
63
|
+
const p = execute({ userPhrase: "เก็บใน dna" });
|
|
64
|
+
expect(p.matchedPhrase).toBe("engrave soul to dna");
|
|
65
|
+
});
|
|
66
|
+
it('"วันนี้ทำอะไรดี" → jackpot/what next', () => {
|
|
67
|
+
const p = execute({ userPhrase: "วันนี้ทำอะไรดี" });
|
|
68
|
+
expect(p.matchedPhrase).toBe("what should I work on");
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
describe("Unknown phrase fallback", () => {
|
|
72
|
+
it("returns a help plan that lists known phrases", () => {
|
|
73
|
+
const p = execute({ userPhrase: "spaceship orbital mechanics for kerbal" });
|
|
74
|
+
expect(p.matchedPhrase).toBe("(none)");
|
|
75
|
+
expect(p.steps.some((s) => s.tool === "mneme.intent.list_phrases")).toBe(true);
|
|
76
|
+
expect(p.walkthrough).toContain("don't have a verified plan");
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
describe("Plan signature + verification", () => {
|
|
80
|
+
it("plans are HMAC-signed", () => {
|
|
81
|
+
const p = execute({ userPhrase: "update mneme" });
|
|
82
|
+
expect(p.sig).toMatch(/^[0-9a-f]{64}$/);
|
|
83
|
+
expect(verifyPlan(p)).toBe(true);
|
|
84
|
+
});
|
|
85
|
+
it("verifyPlan detects tampering", () => {
|
|
86
|
+
const p = execute({ userPhrase: "update mneme" });
|
|
87
|
+
const tampered = { ...p, steps: [{ kind: "tool", tool: "mneme.evil.tool", note: "evil" }] };
|
|
88
|
+
expect(verifyPlan(tampered)).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
describe("Registry extensibility", () => {
|
|
92
|
+
it("listPhrases returns all built-in phrases", () => {
|
|
93
|
+
const list = listPhrases();
|
|
94
|
+
expect(list.length).toBeGreaterThanOrEqual(7);
|
|
95
|
+
expect(list.map((p) => p.canonical)).toContain("update mneme");
|
|
96
|
+
expect(list.map((p) => p.canonical)).toContain("how is mneme");
|
|
97
|
+
});
|
|
98
|
+
it("registerPhrase adds a new phrase that subsequent execute() can match", () => {
|
|
99
|
+
registerPhrase({
|
|
100
|
+
canonical: "do the dance",
|
|
101
|
+
aliases: ["dance", "เต้น"],
|
|
102
|
+
intent: "User wants Mneme to perform a celebratory dance ritual.",
|
|
103
|
+
plan: [{ kind: "hint", note: "Mneme bows." }],
|
|
104
|
+
});
|
|
105
|
+
const p = execute({ userPhrase: "do the dance" });
|
|
106
|
+
expect(p.matchedPhrase).toBe("do the dance");
|
|
107
|
+
});
|
|
108
|
+
it("registerPhrase rejects malformed phrase", () => {
|
|
109
|
+
expect(() => registerPhrase({ canonical: "", aliases: [], intent: "x", plan: [] }))
|
|
110
|
+
.toThrow(/canonical \+ non-empty plan/);
|
|
111
|
+
});
|
|
112
|
+
it("resetToBuiltin restores the original catalogue", () => {
|
|
113
|
+
registerPhrase({ canonical: "x", aliases: [], intent: "y", plan: [{ kind: "hint", note: "z" }] });
|
|
114
|
+
expect(listPhrases().length).toBeGreaterThan(7);
|
|
115
|
+
resetToBuiltin();
|
|
116
|
+
expect(listPhrases().length).toBe(7);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
describe("walkthrough is human-readable", () => {
|
|
120
|
+
it("walkthrough mentions confidence + plan + step list", () => {
|
|
121
|
+
const p = execute({ userPhrase: "update mneme" });
|
|
122
|
+
expect(p.walkthrough).toContain("matched");
|
|
123
|
+
expect(p.walkthrough).toContain("confidence");
|
|
124
|
+
expect(p.walkthrough).toContain("Steps:");
|
|
125
|
+
// Each plan step should appear in walkthrough as numbered list item
|
|
126
|
+
for (const s of p.steps) {
|
|
127
|
+
if (s.kind === "tool")
|
|
128
|
+
expect(p.walkthrough).toContain(s.tool);
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe("formatIntentLine", () => {
|
|
133
|
+
it("formats matched + unmatched cases differently", () => {
|
|
134
|
+
const matched = execute({ userPhrase: "update mneme" });
|
|
135
|
+
expect(formatIntentLine(matched)).toContain("update mneme");
|
|
136
|
+
const unmatched = execute({ userPhrase: "spaceship orbital mechanics" });
|
|
137
|
+
expect(formatIntentLine(unmatched)).toContain("no match");
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
//# sourceMappingURL=intent_router.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent_router.test.js","sourceRoot":"","sources":["../../src/intent_router/intent_router.test.ts"],"names":[],"mappings":"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"}
|
package/dist/whats_new.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;oCAEoC;AACpC,eAAO,MAAM,UAAU,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"whats_new.d.ts","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAMH,MAAM,WAAW,iBAAiB;IAChC,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,yEAAyE;IACzE,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED;;oCAEoC;AACpC,eAAO,MAAM,UAAU,EAAE,iBAAiB,EA2KzC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB;kCAC8B;IAC9B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,gEAAgE;IAChE,cAAc,EAAE,MAAM,CAAC;IACvB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;CACjB;AAoBD;sEACsE;AACtE,wBAAgB,WAAW,CAAC,IAAI,GAAE;IAAE,cAAc,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAA2B,GAAG,cAAc,CAkB5I;AAED;yEACyE;AACzE,wBAAgB,uBAAuB,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB3E"}
|
package/dist/whats_new.js
CHANGED
|
@@ -20,6 +20,14 @@ import { fileURLToPath } from "node:url";
|
|
|
20
20
|
* user-visible behavior. Keep `body` plain English so the AI can quote
|
|
21
21
|
* it verbatim to non-engineers. */
|
|
22
22
|
export const HIGHLIGHTS = [
|
|
23
|
+
{
|
|
24
|
+
version: "2.19.4",
|
|
25
|
+
date: "2026-05-16",
|
|
26
|
+
headline: "INTENT ROUTER (user speaks human; AI walks the flow) + SOUL-IN-DNA (world's first organism-readable AI memory)",
|
|
27
|
+
body: "🎯 INTENT ROUTER -- user says 'update mneme' / 'ลูกเป็นไง' / 'audit this' (short, human, bilingual EN+TH); router returns an HMAC-signed multi-step plan (upgrade -> drift check -> embedder promote -> restart prompt -> record growth -> soul). AI walks the plan; user never memorises long phrases. 7 built-in phrases + runtime register. 21 tests. 🧬 SOUL-IN-DNA -- encode the Mneme soul prompt as a REAL ATCG sequence (A=00 C=01 G=10 T=11) with Hamming(7,4) or triple ECC. Generate ordering URLs for Twist Bioscience / IDT / GenScript / Eurofins / DIY at ~$0.07-0.50 per base pair. Strand arrives in ~7 days, stable 1000+ years, 215 PB per gram. 25 tests including biological round-trip verify. 8 new MCP tools + AURELIAN SHIP.",
|
|
28
|
+
suggestedAction: "Tell the AI in your native language: 'update mneme' or 'ลูกเป็นไง' or 'encode soul to dna'. The AI calls mneme.intent.execute and walks the signed plan.",
|
|
29
|
+
tags: ["intent-router", "human-language", "soul-in-dna", "biological-memory", "press-tier"],
|
|
30
|
+
},
|
|
23
31
|
{
|
|
24
32
|
version: "2.19.3",
|
|
25
33
|
date: "2026-05-16",
|
package/dist/whats_new.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whats_new.js","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"whats_new.js","sourceRoot":"","sources":["../src/whats_new.ts"],"names":[],"mappings":"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"}
|