@mneme-ai/mcp 1.7.0 → 1.9.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/tools/_grader_engine.d.ts.map +1 -1
- package/dist/tools/_grader_engine.js +2 -1
- package/dist/tools/_grader_engine.js.map +1 -1
- package/dist/tools/_intent.d.ts +59 -0
- package/dist/tools/_intent.d.ts.map +1 -0
- package/dist/tools/_intent.js +219 -0
- package/dist/tools/_intent.js.map +1 -0
- package/dist/tools/_intent.test.d.ts +10 -0
- package/dist/tools/_intent.test.d.ts.map +1 -0
- package/dist/tools/_intent.test.js +82 -0
- package/dist/tools/_intent.test.js.map +1 -0
- package/dist/tools/_intent.v190.test.d.ts +5 -0
- package/dist/tools/_intent.v190.test.d.ts.map +1 -0
- package/dist/tools/_intent.v190.test.js +33 -0
- package/dist/tools/_intent.v190.test.js.map +1 -0
- package/dist/tools/_intent_tool.d.ts +14 -0
- package/dist/tools/_intent_tool.d.ts.map +1 -0
- package/dist/tools/_intent_tool.js +62 -0
- package/dist/tools/_intent_tool.js.map +1 -0
- package/dist/tools/_registry.d.ts.map +1 -1
- package/dist/tools/_registry.js +2 -0
- package/dist/tools/_registry.js.map +1 -1
- package/package.json +7 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_grader_engine.d.ts","sourceRoot":"","sources":["../../src/tools/_grader_engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"_grader_engine.d.ts","sourceRoot":"","sources":["../../src/tools/_grader_engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAEV,YAAY,EACZ,QAAQ,EAET,MAAM,aAAa,CAAC;AAErB;oDACoD;AACpD,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AA+UD,wBAAsB,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAqF1E"}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
* No other MCP server runs algorithms like these — they exist in Mneme
|
|
9
9
|
* because Mneme is a TEACHER, not a tool catalog. The teacher must grade.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
11
|
+
import { git } from "@mneme-ai/core";
|
|
12
|
+
const { execGit } = git;
|
|
12
13
|
// ──────────────────────────────────────────────────────────────────────
|
|
13
14
|
// ALGORITHM 1 — Adversarial probe injection
|
|
14
15
|
// ──────────────────────────────────────────────────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_grader_engine.js","sourceRoot":"","sources":["../../src/tools/_grader_engine.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"_grader_engine.js","sourceRoot":"","sources":["../../src/tools/_grader_engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mneme.understand_intent — the Rosetta stone tool.
|
|
3
|
+
*
|
|
4
|
+
* Strategic role: even with rich tool descriptions + secondBrain layer,
|
|
5
|
+
* AI tool selection accuracy plateaus around 95-99% with 94 tools. This
|
|
6
|
+
* tool drops the cognitive load to "near-zero" — AI hands Mneme the
|
|
7
|
+
* raw user query, Mneme returns top-3 specific tools with confidence
|
|
8
|
+
* scores + a step-by-step execution plan.
|
|
9
|
+
*
|
|
10
|
+
* The matching engine is fully deterministic — no LLM calls, no embedder
|
|
11
|
+
* required, no key needed. Pure keyword + trigger-phrase scoring against
|
|
12
|
+
* the tool catalog. Fast (<50ms for 94 tools), reproducible, and works
|
|
13
|
+
* with any AI client (Claude / GPT / Gemini / Codex / others).
|
|
14
|
+
*
|
|
15
|
+
* Algorithm:
|
|
16
|
+
* 1. Tokenize the user query (lowercase, split on word boundaries)
|
|
17
|
+
* 2. For each tool in the catalog, compute a match score:
|
|
18
|
+
* - description keyword overlap (BM25-lite)
|
|
19
|
+
* - trigger phrase fuzzy match (n-gram overlap)
|
|
20
|
+
* - category prior (boost if user mentions category-specific terms)
|
|
21
|
+
* 3. Return top-3 tools sorted by score, with each tool's
|
|
22
|
+
* argument-extraction hints (which user-tokens map to which args)
|
|
23
|
+
* 4. Compose a plan: "call tool A first, then if result is X, call B"
|
|
24
|
+
*/
|
|
25
|
+
import type { MnemeTool } from "./_types.js";
|
|
26
|
+
export interface IntentMatch {
|
|
27
|
+
toolName: string;
|
|
28
|
+
category: string;
|
|
29
|
+
score: number;
|
|
30
|
+
why: string;
|
|
31
|
+
description: string;
|
|
32
|
+
triggers: string[];
|
|
33
|
+
/** Heuristic argument extraction — user-tokens that look like values for the tool's input schema */
|
|
34
|
+
suggestedArgs: Record<string, string>;
|
|
35
|
+
}
|
|
36
|
+
export interface IntentResult {
|
|
37
|
+
query: string;
|
|
38
|
+
matches: IntentMatch[];
|
|
39
|
+
/** Confidence that the top match is the right one. < 0.4 = "ambiguous, ask user" */
|
|
40
|
+
topConfidence: number;
|
|
41
|
+
plan: string[];
|
|
42
|
+
reasoning: string;
|
|
43
|
+
}
|
|
44
|
+
declare function tokenize(s: string): string[];
|
|
45
|
+
/** Score how well a tool matches a query. */
|
|
46
|
+
declare function scoreToolForQuery(tool: MnemeTool, queryTokens: string[], queryBigrams: string[]): {
|
|
47
|
+
score: number;
|
|
48
|
+
why: string;
|
|
49
|
+
};
|
|
50
|
+
/** Heuristic argument extraction from user query.
|
|
51
|
+
* Looks at the tool's inputSchema and picks user-tokens that look like
|
|
52
|
+
* values. Conservative — we'd rather under-suggest than wrong-suggest. */
|
|
53
|
+
declare function extractArgs(tool: MnemeTool, query: string): Record<string, string>;
|
|
54
|
+
export declare function understandIntent(query: string, allTools: MnemeTool[]): IntentResult;
|
|
55
|
+
export declare const _tokenizeForTests: typeof tokenize;
|
|
56
|
+
export declare const _scoreToolForQueryForTests: typeof scoreToolForQuery;
|
|
57
|
+
export declare const _extractArgsForTests: typeof extractArgs;
|
|
58
|
+
export {};
|
|
59
|
+
//# sourceMappingURL=_intent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.d.ts","sourceRoot":"","sources":["../../src/tools/_intent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oGAAoG;IACpG,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,oFAAoF;IACpF,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAgBD,iBAAS,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAMrC;AAUD,6CAA6C;AAC7C,iBAAS,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG;IAC1F,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb,CAiEA;AAED;;2EAE2E;AAC3E,iBAAS,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAyC3E;AAuBD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,YAAY,CA0CnF;AAGD,eAAO,MAAM,iBAAiB,iBAAW,CAAC;AAC1C,eAAO,MAAM,0BAA0B,0BAAoB,CAAC;AAC5D,eAAO,MAAM,oBAAoB,oBAAc,CAAC"}
|
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mneme.understand_intent — the Rosetta stone tool.
|
|
3
|
+
*
|
|
4
|
+
* Strategic role: even with rich tool descriptions + secondBrain layer,
|
|
5
|
+
* AI tool selection accuracy plateaus around 95-99% with 94 tools. This
|
|
6
|
+
* tool drops the cognitive load to "near-zero" — AI hands Mneme the
|
|
7
|
+
* raw user query, Mneme returns top-3 specific tools with confidence
|
|
8
|
+
* scores + a step-by-step execution plan.
|
|
9
|
+
*
|
|
10
|
+
* The matching engine is fully deterministic — no LLM calls, no embedder
|
|
11
|
+
* required, no key needed. Pure keyword + trigger-phrase scoring against
|
|
12
|
+
* the tool catalog. Fast (<50ms for 94 tools), reproducible, and works
|
|
13
|
+
* with any AI client (Claude / GPT / Gemini / Codex / others).
|
|
14
|
+
*
|
|
15
|
+
* Algorithm:
|
|
16
|
+
* 1. Tokenize the user query (lowercase, split on word boundaries)
|
|
17
|
+
* 2. For each tool in the catalog, compute a match score:
|
|
18
|
+
* - description keyword overlap (BM25-lite)
|
|
19
|
+
* - trigger phrase fuzzy match (n-gram overlap)
|
|
20
|
+
* - category prior (boost if user mentions category-specific terms)
|
|
21
|
+
* 3. Return top-3 tools sorted by score, with each tool's
|
|
22
|
+
* argument-extraction hints (which user-tokens map to which args)
|
|
23
|
+
* 4. Compose a plan: "call tool A first, then if result is X, call B"
|
|
24
|
+
*/
|
|
25
|
+
const STOPWORDS = new Set([
|
|
26
|
+
"a", "an", "the", "is", "are", "was", "were", "be", "been", "being",
|
|
27
|
+
"have", "has", "had", "do", "does", "did", "will", "would", "should",
|
|
28
|
+
"can", "could", "may", "might", "must", "shall",
|
|
29
|
+
"i", "you", "he", "she", "it", "we", "they", "me", "him", "her", "us", "them",
|
|
30
|
+
"my", "your", "his", "her", "its", "our", "their",
|
|
31
|
+
"this", "that", "these", "those",
|
|
32
|
+
"and", "or", "but", "not", "no",
|
|
33
|
+
"in", "on", "at", "to", "from", "by", "with", "for", "of", "about",
|
|
34
|
+
"what", "when", "where", "who", "why", "how",
|
|
35
|
+
"any", "some", "all", "every",
|
|
36
|
+
"please", "tell", "show", "give",
|
|
37
|
+
]);
|
|
38
|
+
function tokenize(s) {
|
|
39
|
+
return s
|
|
40
|
+
.toLowerCase()
|
|
41
|
+
.replace(/[^\w\s-]/g, " ") // keep Thai chars
|
|
42
|
+
.split(/\s+/)
|
|
43
|
+
.filter((t) => t.length > 0 && !STOPWORDS.has(t));
|
|
44
|
+
}
|
|
45
|
+
function bigrams(tokens) {
|
|
46
|
+
const out = [];
|
|
47
|
+
for (let i = 0; i < tokens.length - 1; i++) {
|
|
48
|
+
out.push(`${tokens[i]} ${tokens[i + 1]}`);
|
|
49
|
+
}
|
|
50
|
+
return out;
|
|
51
|
+
}
|
|
52
|
+
/** Score how well a tool matches a query. */
|
|
53
|
+
function scoreToolForQuery(tool, queryTokens, queryBigrams) {
|
|
54
|
+
const reasons = [];
|
|
55
|
+
let score = 0;
|
|
56
|
+
// 1 — description keyword overlap (BM25-lite, no IDF — terms are rare enough by descriptor)
|
|
57
|
+
const descTokens = new Set(tokenize(tool.description));
|
|
58
|
+
const descMatches = queryTokens.filter((t) => descTokens.has(t)).length;
|
|
59
|
+
if (descMatches > 0) {
|
|
60
|
+
const w = descMatches * 1.5;
|
|
61
|
+
score += w;
|
|
62
|
+
reasons.push(`${descMatches} description keyword match${descMatches === 1 ? "" : "es"}`);
|
|
63
|
+
}
|
|
64
|
+
// 2 — trigger-phrase fuzzy match (most powerful signal)
|
|
65
|
+
let triggerHits = 0;
|
|
66
|
+
for (const trig of tool.triggers ?? []) {
|
|
67
|
+
const trigTokens = new Set(tokenize(trig));
|
|
68
|
+
const trigBg = new Set(bigrams(tokenize(trig)));
|
|
69
|
+
// Token overlap
|
|
70
|
+
const tokOverlap = queryTokens.filter((t) => trigTokens.has(t)).length;
|
|
71
|
+
// Bigram overlap (boosts phrasal matches)
|
|
72
|
+
const bgOverlap = queryBigrams.filter((b) => trigBg.has(b)).length;
|
|
73
|
+
if (tokOverlap > 0 || bgOverlap > 0) {
|
|
74
|
+
triggerHits++;
|
|
75
|
+
score += tokOverlap * 2 + bgOverlap * 4; // bigrams worth more
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (triggerHits > 0) {
|
|
79
|
+
reasons.push(`matched ${triggerHits} trigger phrase${triggerHits === 1 ? "" : "s"}`);
|
|
80
|
+
}
|
|
81
|
+
// 3 — name overlap (e.g. user mentions "atrophy" → mneme.people.atrophy gets a boost)
|
|
82
|
+
const nameTokens = tool.name.split(/[._]/);
|
|
83
|
+
const nameMatches = queryTokens.filter((t) => nameTokens.includes(t)).length;
|
|
84
|
+
if (nameMatches > 0) {
|
|
85
|
+
// Heavily weight name matches — when user explicitly names a concept,
|
|
86
|
+
// tools whose name contains that word should beat tools that merely
|
|
87
|
+
// mention it in their description.
|
|
88
|
+
score += nameMatches * 12;
|
|
89
|
+
reasons.push(`name token "${nameTokens.find((t) => queryTokens.includes(t))}" matches`);
|
|
90
|
+
}
|
|
91
|
+
// 4 — category prior boost
|
|
92
|
+
const categoryHints = {
|
|
93
|
+
memory: ["why", "what", "history", "explain", "ask", "search"],
|
|
94
|
+
people: ["who", "author", "team", "person", "engineer", "developer"],
|
|
95
|
+
audit: ["audit", "certify", "verify", "trust", "compliance", "ai-commit"],
|
|
96
|
+
forensics: ["security", "vuln", "vulnerability", "cwe", "exploit", "anomaly"],
|
|
97
|
+
insights: ["story", "predict", "premortem", "regret", "ghost", "oracle"],
|
|
98
|
+
quality: ["health", "quality", "karma", "mri", "heartbeat"],
|
|
99
|
+
quant: ["alpha", "drawdown", "moneyball", "greek", "volatility"],
|
|
100
|
+
lab: ["compose", "library", "recipe", "plan"],
|
|
101
|
+
meta: ["help", "doctor", "manifesto", "wisdom"],
|
|
102
|
+
};
|
|
103
|
+
const categoryWords = categoryHints[tool.category] ?? [];
|
|
104
|
+
const catMatches = queryTokens.filter((t) => categoryWords.includes(t)).length;
|
|
105
|
+
if (catMatches > 0) {
|
|
106
|
+
score += catMatches * 1.0;
|
|
107
|
+
reasons.push(`category-prior boost on "${tool.category}"`);
|
|
108
|
+
}
|
|
109
|
+
return {
|
|
110
|
+
score,
|
|
111
|
+
why: reasons.length === 0 ? "no signal" : reasons.join(" · "),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Heuristic argument extraction from user query.
|
|
115
|
+
* Looks at the tool's inputSchema and picks user-tokens that look like
|
|
116
|
+
* values. Conservative — we'd rather under-suggest than wrong-suggest. */
|
|
117
|
+
function extractArgs(tool, query) {
|
|
118
|
+
const args = {};
|
|
119
|
+
const schema = tool.inputSchema;
|
|
120
|
+
const props = schema.properties ?? {};
|
|
121
|
+
for (const [paramName, paramSchema] of Object.entries(props)) {
|
|
122
|
+
// Email-like
|
|
123
|
+
if (paramName.toLowerCase().includes("email")) {
|
|
124
|
+
const m = query.match(/[a-z0-9._%+-]+@[a-z0-9.-]+/i);
|
|
125
|
+
if (m)
|
|
126
|
+
args[paramName] = m[0];
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
// File path / target
|
|
130
|
+
if (["file", "target", "path"].some((k) => paramName.toLowerCase().includes(k))) {
|
|
131
|
+
const m = query.match(/[\w./\\-]+\.(ts|js|tsx|jsx|py|go|rs|md|json|yaml)\b(?::\d+(?:-\d+)?)?/i);
|
|
132
|
+
if (m)
|
|
133
|
+
args[paramName] = m[0];
|
|
134
|
+
continue;
|
|
135
|
+
}
|
|
136
|
+
// Commit hash
|
|
137
|
+
if (paramName.toLowerCase().includes("commit") || paramName.toLowerCase().includes("hash")) {
|
|
138
|
+
const m = query.match(/\b[a-f0-9]{7,40}\b|\bHEAD(?:[~^]\d*)?\b/i);
|
|
139
|
+
if (m)
|
|
140
|
+
args[paramName] = m[0];
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
// Numeric (topN, count, etc)
|
|
144
|
+
if (paramSchema.type === "number") {
|
|
145
|
+
const m = query.match(/\b(\d{1,4})\b/);
|
|
146
|
+
if (m)
|
|
147
|
+
args[paramName] = m[1];
|
|
148
|
+
continue;
|
|
149
|
+
}
|
|
150
|
+
// Topic / question — use the whole query if no other arg fits
|
|
151
|
+
if (paramName === "topic" ||
|
|
152
|
+
paramName === "question" ||
|
|
153
|
+
paramName === "query" ||
|
|
154
|
+
paramName === "intent") {
|
|
155
|
+
args[paramName] = query.trim();
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return args;
|
|
159
|
+
}
|
|
160
|
+
/** Build a step-by-step execution plan from the top matches.
|
|
161
|
+
* v1.8.0: simple linear plan. v1.9.0 will use the Second Brain compose
|
|
162
|
+
* graph to pick MULTI-step molecules instead of single-tool plans. */
|
|
163
|
+
function buildPlan(matches) {
|
|
164
|
+
if (matches.length === 0) {
|
|
165
|
+
return [
|
|
166
|
+
"1. No specific tool matched. Fall back to `mneme.smart_do` with the original query — it handles natural-language routing.",
|
|
167
|
+
"2. If smart_do also returns nothing useful, ask the user to clarify which area their question is about.",
|
|
168
|
+
];
|
|
169
|
+
}
|
|
170
|
+
const plan = [];
|
|
171
|
+
const top = matches[0];
|
|
172
|
+
plan.push(`1. Call \`${top.toolName}\` (confidence ${(top.score / 10).toFixed(1)}) with args ${JSON.stringify(top.suggestedArgs)}`);
|
|
173
|
+
if (matches[1] && matches[1].score > matches[0].score * 0.6) {
|
|
174
|
+
plan.push(`2. If result is sparse, fall back to \`${matches[1].toolName}\``);
|
|
175
|
+
}
|
|
176
|
+
plan.push(`3. Read the response's \`secondBrain.compose\` field — fire suggested molecule combinations if they match user intent`);
|
|
177
|
+
plan.push(`4. Draft your answer, then call \`mneme.grade.answer\` with the draft before delivering`);
|
|
178
|
+
return plan;
|
|
179
|
+
}
|
|
180
|
+
export function understandIntent(query, allTools) {
|
|
181
|
+
const queryTokens = tokenize(query);
|
|
182
|
+
const queryBigrams = bigrams(queryTokens);
|
|
183
|
+
// Skip the meta dispatcher tools themselves — they shouldn't recommend themselves
|
|
184
|
+
const candidates = allTools.filter((t) => t.name !== "mneme.understand_intent" && t.name !== "mneme.smart_do" && t.name !== "mneme.capabilities");
|
|
185
|
+
const scored = candidates.map((t) => {
|
|
186
|
+
const { score, why } = scoreToolForQuery(t, queryTokens, queryBigrams);
|
|
187
|
+
return {
|
|
188
|
+
toolName: t.name,
|
|
189
|
+
category: t.category,
|
|
190
|
+
score,
|
|
191
|
+
why,
|
|
192
|
+
description: t.description,
|
|
193
|
+
triggers: t.triggers ?? [],
|
|
194
|
+
suggestedArgs: extractArgs(t, query),
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
scored.sort((a, b) => b.score - a.score);
|
|
198
|
+
const matches = scored.filter((m) => m.score > 0).slice(0, 3);
|
|
199
|
+
const topScore = matches[0]?.score ?? 0;
|
|
200
|
+
// Confidence calibration: score scales by query length + match strength
|
|
201
|
+
const topConfidence = Math.min(1, topScore / 10);
|
|
202
|
+
const reasoning = matches.length === 0
|
|
203
|
+
? `No specific Mneme tool matched the query "${query}". Recommended fallback: call \`mneme.smart_do\` with the same query — it routes through Mneme's natural-language dispatcher and can handle ambiguous intents that don't keyword-match any single tool.`
|
|
204
|
+
: topConfidence < 0.4
|
|
205
|
+
? `Top match has low confidence (${(topConfidence * 100).toFixed(0)}%). Consider asking the user to clarify between the top-${matches.length} candidates, OR fall back to \`mneme.smart_do\` with the original query for natural-language routing.`
|
|
206
|
+
: `Top match: ${matches[0].toolName} with confidence ${(topConfidence * 100).toFixed(0)}% (${matches[0].why}).`;
|
|
207
|
+
return {
|
|
208
|
+
query,
|
|
209
|
+
matches,
|
|
210
|
+
topConfidence,
|
|
211
|
+
plan: buildPlan(matches),
|
|
212
|
+
reasoning,
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
// Test exports
|
|
216
|
+
export const _tokenizeForTests = tokenize;
|
|
217
|
+
export const _scoreToolForQueryForTests = scoreToolForQuery;
|
|
218
|
+
export const _extractArgsForTests = extractArgs;
|
|
219
|
+
//# sourceMappingURL=_intent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.js","sourceRoot":"","sources":["../../src/tools/_intent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* intent classifier — unit tests.
|
|
3
|
+
*
|
|
4
|
+
* The classifier is fully deterministic, so we can write strong assertions:
|
|
5
|
+
* - keyword match → correct top tool
|
|
6
|
+
* - email/file-path/hash extraction → correct args
|
|
7
|
+
* - unknown query → low confidence + clarifying message
|
|
8
|
+
*/
|
|
9
|
+
export {};
|
|
10
|
+
//# sourceMappingURL=_intent.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.test.d.ts","sourceRoot":"","sources":["../../src/tools/_intent.test.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* intent classifier — unit tests.
|
|
3
|
+
*
|
|
4
|
+
* The classifier is fully deterministic, so we can write strong assertions:
|
|
5
|
+
* - keyword match → correct top tool
|
|
6
|
+
* - email/file-path/hash extraction → correct args
|
|
7
|
+
* - unknown query → low confidence + clarifying message
|
|
8
|
+
*/
|
|
9
|
+
import { describe, it, expect } from "vitest";
|
|
10
|
+
import { understandIntent, _tokenizeForTests, _extractArgsForTests } from "./_intent.js";
|
|
11
|
+
import { buildAllTools } from "./_registry.js";
|
|
12
|
+
describe("intent — tokenization", () => {
|
|
13
|
+
it("strips stopwords + lowercases", () => {
|
|
14
|
+
const t = _tokenizeForTests("Why does the file use JWT?");
|
|
15
|
+
expect(t).not.toContain("the");
|
|
16
|
+
expect(t).not.toContain("does");
|
|
17
|
+
expect(t).toContain("file");
|
|
18
|
+
expect(t).toContain("jwt");
|
|
19
|
+
});
|
|
20
|
+
it("handles Thai text", () => {
|
|
21
|
+
const t = _tokenizeForTests("ใครรู้เรื่อง auth บ้าง?");
|
|
22
|
+
expect(t.length).toBeGreaterThan(0);
|
|
23
|
+
expect(t).toContain("auth");
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
describe("intent — top match selection", () => {
|
|
27
|
+
const tools = buildAllTools();
|
|
28
|
+
it('routes "who knows about auth" → mneme.people.who_knows', () => {
|
|
29
|
+
const r = understandIntent("who knows about auth?", tools);
|
|
30
|
+
expect(r.matches[0]?.toolName).toBe("mneme.people.who_knows");
|
|
31
|
+
expect(r.topConfidence).toBeGreaterThan(0.3);
|
|
32
|
+
});
|
|
33
|
+
it('routes "is this commit safe to ship" → audit/certify or memory/blast', () => {
|
|
34
|
+
const r = understandIntent("is HEAD safe to ship?", tools);
|
|
35
|
+
expect(r.matches.length).toBeGreaterThan(0);
|
|
36
|
+
const topName = r.matches[0].toolName;
|
|
37
|
+
expect(["mneme.audit.certify", "mneme.memory.blast", "mneme.insights.crystal_ball"]).toContain(topName);
|
|
38
|
+
});
|
|
39
|
+
it('routes "find security issues" → mneme.forensics.vulns', () => {
|
|
40
|
+
const r = understandIntent("find security issues in this repo", tools);
|
|
41
|
+
expect(r.matches[0]?.toolName).toBe("mneme.forensics.vulns");
|
|
42
|
+
});
|
|
43
|
+
it('routes "atrophy of alice@bank.com" → mneme.people.atrophy', () => {
|
|
44
|
+
const r = understandIntent("show me atrophy of alice@bank.com", tools);
|
|
45
|
+
expect(r.matches[0]?.toolName).toBe("mneme.people.atrophy");
|
|
46
|
+
expect(r.matches[0]?.suggestedArgs).toHaveProperty("authorEmail", "alice@bank.com");
|
|
47
|
+
});
|
|
48
|
+
it("returns low confidence for vague queries", () => {
|
|
49
|
+
const r = understandIntent("hello", tools);
|
|
50
|
+
expect(r.topConfidence).toBeLessThan(0.5);
|
|
51
|
+
});
|
|
52
|
+
it("returns empty matches for nonsense", () => {
|
|
53
|
+
const r = understandIntent("xqzzy plonk wibble", tools);
|
|
54
|
+
expect(r.matches.length).toBe(0);
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("intent — argument extraction", () => {
|
|
58
|
+
const tools = buildAllTools();
|
|
59
|
+
const memoryWhy = tools.find((t) => t.name === "mneme.memory.why");
|
|
60
|
+
it("extracts file path with line range", () => {
|
|
61
|
+
const args = _extractArgsForTests(memoryWhy, "why does src/auth.ts:47 use try/catch");
|
|
62
|
+
expect(args["file"]).toBe("src/auth.ts:47");
|
|
63
|
+
});
|
|
64
|
+
it("extracts commit hash", () => {
|
|
65
|
+
const blast = tools.find((t) => t.name === "mneme.memory.blast");
|
|
66
|
+
const args = _extractArgsForTests(blast, "what's the blast radius of a3f9b21?");
|
|
67
|
+
expect(args["commit"]).toBe("a3f9b21");
|
|
68
|
+
});
|
|
69
|
+
it("extracts HEAD ref", () => {
|
|
70
|
+
const blast = tools.find((t) => t.name === "mneme.memory.blast");
|
|
71
|
+
const args = _extractArgsForTests(blast, "is HEAD safe to ship?");
|
|
72
|
+
expect(args["commit"]).toBe("HEAD");
|
|
73
|
+
});
|
|
74
|
+
});
|
|
75
|
+
describe("intent — execution plan", () => {
|
|
76
|
+
it("includes a multi-step plan with grader call", () => {
|
|
77
|
+
const r = understandIntent("why does parseAmount use try/catch", buildAllTools());
|
|
78
|
+
expect(r.plan.length).toBeGreaterThan(0);
|
|
79
|
+
expect(r.plan.some((p) => p.includes("mneme.grade.answer"))).toBe(true);
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
//# sourceMappingURL=_intent.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.test.js","sourceRoot":"","sources":["../../src/tools/_intent.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.v190.test.d.ts","sourceRoot":"","sources":["../../src/tools/_intent.v190.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* intent v1.9.0 — smart_do fallback in reasoning + plan.
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect } from "vitest";
|
|
5
|
+
import { understandIntent } from "./_intent.js";
|
|
6
|
+
import { buildAllTools } from "./_registry.js";
|
|
7
|
+
describe("intent v1.9.0 — smart_do fallback", () => {
|
|
8
|
+
const tools = buildAllTools();
|
|
9
|
+
it("when no tool matches, reasoning recommends mneme.smart_do", () => {
|
|
10
|
+
const r = understandIntent("xqzzy plonk wibble", tools);
|
|
11
|
+
expect(r.matches.length).toBe(0);
|
|
12
|
+
expect(r.reasoning).toContain("mneme.smart_do");
|
|
13
|
+
});
|
|
14
|
+
it("when no tool matches, plan starts with smart_do fallback step", () => {
|
|
15
|
+
const r = understandIntent("xqzzy plonk wibble", tools);
|
|
16
|
+
expect(r.plan.length).toBeGreaterThan(0);
|
|
17
|
+
expect(r.plan[0]).toContain("mneme.smart_do");
|
|
18
|
+
});
|
|
19
|
+
it("when low confidence, reasoning offers smart_do as fallback", () => {
|
|
20
|
+
// Pick a query likely to score low
|
|
21
|
+
const r = understandIntent("hi", tools);
|
|
22
|
+
if (r.matches.length > 0 && r.topConfidence < 0.4) {
|
|
23
|
+
expect(r.reasoning).toContain("mneme.smart_do");
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
it("when high confidence, reasoning does NOT push smart_do", () => {
|
|
27
|
+
const r = understandIntent("show atrophy of alice@bank.com", tools);
|
|
28
|
+
expect(r.topConfidence).toBeGreaterThan(0.4);
|
|
29
|
+
// Top-confidence reasoning shouldn't redirect to smart_do
|
|
30
|
+
expect(r.reasoning).not.toContain("Recommended fallback");
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
//# sourceMappingURL=_intent.v190.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent.v190.test.js","sourceRoot":"","sources":["../../src/tools/_intent.v190.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAE9B,EAAE,CAAC,2DAA2D,EAAE,GAAG,EAAE;QACnE,MAAM,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,CAAC,GAAG,gBAAgB,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;QACxD,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4DAA4D,EAAE,GAAG,EAAE;QACpE,mCAAmC;QACnC,MAAM,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,aAAa,GAAG,GAAG,EAAE,CAAC;YAClD,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;QAChE,MAAM,CAAC,GAAG,gBAAgB,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;QACpE,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;QAC7C,0DAA0D;QAC1D,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,sBAAsB,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mneme.understand_intent — exposed as an MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* Any AI client (Claude, GPT, Gemini, Codex, others) calls this with the
|
|
5
|
+
* raw user query string. Mneme returns top-3 specific tools + suggested
|
|
6
|
+
* args + execution plan.
|
|
7
|
+
*
|
|
8
|
+
* This drops the cognitive load on the AI from "pick from 94 tools" to
|
|
9
|
+
* "follow this plan". Critical for less-capable AI tools or when the
|
|
10
|
+
* user's intent is ambiguous.
|
|
11
|
+
*/
|
|
12
|
+
import type { MnemeTool } from "./_types.js";
|
|
13
|
+
export declare const understandIntentTool: MnemeTool;
|
|
14
|
+
//# sourceMappingURL=_intent_tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent_tool.d.ts","sourceRoot":"","sources":["../../src/tools/_intent_tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,oBAAoB,EAAE,SAkDlC,CAAC"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* mneme.understand_intent — exposed as an MCP tool.
|
|
3
|
+
*
|
|
4
|
+
* Any AI client (Claude, GPT, Gemini, Codex, others) calls this with the
|
|
5
|
+
* raw user query string. Mneme returns top-3 specific tools + suggested
|
|
6
|
+
* args + execution plan.
|
|
7
|
+
*
|
|
8
|
+
* This drops the cognitive load on the AI from "pick from 94 tools" to
|
|
9
|
+
* "follow this plan". Critical for less-capable AI tools or when the
|
|
10
|
+
* user's intent is ambiguous.
|
|
11
|
+
*/
|
|
12
|
+
import { understandIntent } from "./_intent.js";
|
|
13
|
+
import { buildAllTools } from "./_registry.js";
|
|
14
|
+
export const understandIntentTool = {
|
|
15
|
+
name: "mneme.understand_intent",
|
|
16
|
+
category: "meta",
|
|
17
|
+
description: "Translate a natural-language user query into a step-by-step plan over Mneme's 94+ tools. " +
|
|
18
|
+
"Returns top-3 best-matching tools with confidence scores, suggested arguments extracted from the query, " +
|
|
19
|
+
"and a concrete execution plan. The MOST POWERFUL tool when you (the AI client) are not sure which tool " +
|
|
20
|
+
"fits. Always cheap (<50ms, no LLM, no embedder). Call this BEFORE picking individual tools when the user " +
|
|
21
|
+
"request is ambiguous or you don't recognize the intent immediately.",
|
|
22
|
+
triggers: [
|
|
23
|
+
"I'm not sure which mneme tool to use",
|
|
24
|
+
"translate this user query into mneme calls",
|
|
25
|
+
"what mneme tool fits this question",
|
|
26
|
+
"plan a mneme workflow for this intent",
|
|
27
|
+
],
|
|
28
|
+
inputSchema: {
|
|
29
|
+
type: "object",
|
|
30
|
+
properties: {
|
|
31
|
+
query: {
|
|
32
|
+
type: "string",
|
|
33
|
+
description: "The user's natural-language request, exactly as they phrased it",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
required: ["query"],
|
|
37
|
+
},
|
|
38
|
+
handler: async (_rt, args) => {
|
|
39
|
+
const query = String(args["query"] ?? "");
|
|
40
|
+
if (!query.trim()) {
|
|
41
|
+
return {
|
|
42
|
+
data: { error: "empty-query" },
|
|
43
|
+
wisdom: "understand_intent requires a non-empty query string.",
|
|
44
|
+
confidence: { level: "low" },
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
const result = understandIntent(query, buildAllTools());
|
|
48
|
+
return {
|
|
49
|
+
data: result,
|
|
50
|
+
wisdom: result.matches.length === 0
|
|
51
|
+
? `No Mneme tool matched "${query}". Ask the user to clarify which area their question is about (memory / people / audit / forensics / insights / quality / quant / lab).`
|
|
52
|
+
: `Top match: ${result.matches[0].toolName} (${(result.topConfidence * 100).toFixed(0)}% confidence). ${result.reasoning}`,
|
|
53
|
+
followUp: result.matches.slice(0, 3).map((m) => m.toolName),
|
|
54
|
+
confidence: { level: result.topConfidence > 0.6 ? "high" : result.topConfidence > 0.3 ? "medium" : "low" },
|
|
55
|
+
secondBrain: {
|
|
56
|
+
presentation: "Follow the plan in data.plan exactly. Use data.matches[0].suggestedArgs as the starting argument set. " +
|
|
57
|
+
"If topConfidence < 0.4, ask the user to clarify before invoking any specific tool.",
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
//# sourceMappingURL=_intent_tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_intent_tool.js","sourceRoot":"","sources":["../../src/tools/_intent_tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,CAAC,MAAM,oBAAoB,GAAc;IAC7C,IAAI,EAAE,yBAAyB;IAC/B,QAAQ,EAAE,MAAM;IAChB,WAAW,EACT,2FAA2F;QAC3F,0GAA0G;QAC1G,yGAAyG;QACzG,2GAA2G;QAC3G,qEAAqE;IACvE,QAAQ,EAAE;QACR,sCAAsC;QACtC,4CAA4C;QAC5C,oCAAoC;QACpC,uCAAuC;KACxC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iEAAiE;aAC/E;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAClB,OAAO;gBACL,IAAI,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC9B,MAAM,EAAE,sDAAsD;gBAC9D,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE;aAC7B,CAAC;QACJ,CAAC;QACD,MAAM,MAAM,GAAG,gBAAgB,CAAC,KAAK,EAAE,aAAa,EAAE,CAAC,CAAC;QACxD,OAAO;YACL,IAAI,EAAE,MAAM;YACZ,MAAM,EACJ,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;gBACzB,CAAC,CAAC,0BAA0B,KAAK,yIAAyI;gBAC1K,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC,QAAQ,KAAK,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,SAAS,EAAE;YAC/H,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC;YAC3D,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,EAAE;YAC1G,WAAW,EAAE;gBACX,YAAY,EACV,wGAAwG;oBACxG,oFAAoF;aACvF;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_registry.d.ts","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"_registry.d.ts","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgB3D;sEACsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAgB3C;AAED,mDAAmD;AACnD,wBAAgB,YAAY,IAAI,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CASrD;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,GAAG,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAOhE"}
|
package/dist/tools/_registry.js
CHANGED
|
@@ -17,11 +17,13 @@ import { metaTools } from "./meta.js";
|
|
|
17
17
|
import { capabilitiesTool } from "./_capabilities.js";
|
|
18
18
|
import { smartDoTool } from "./_smart_do.js";
|
|
19
19
|
import { graderTool } from "./_grader_tool.js";
|
|
20
|
+
import { understandIntentTool } from "./_intent_tool.js";
|
|
20
21
|
/** All Mneme tools, in display order. The capabilities syllabus comes first
|
|
21
22
|
* so AI clients that read tool lists top-down see it immediately. */
|
|
22
23
|
export function buildAllTools() {
|
|
23
24
|
return [
|
|
24
25
|
capabilitiesTool,
|
|
26
|
+
understandIntentTool,
|
|
25
27
|
graderTool,
|
|
26
28
|
smartDoTool,
|
|
27
29
|
...memoryTools,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_registry.js","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"_registry.js","sourceRoot":"","sources":["../../src/tools/_registry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAEzD;sEACsE;AACtE,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,gBAAgB;QAChB,oBAAoB;QACpB,UAAU;QACV,WAAW;QACX,GAAG,WAAW;QACd,GAAG,WAAW;QACd,GAAG,UAAU;QACb,GAAG,cAAc;QACjB,GAAG,aAAa;QAChB,GAAG,YAAY;QACf,GAAG,UAAU;QACb,GAAG,QAAQ;QACX,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,mDAAmD;AACnD,MAAM,UAAU,YAAY;IAC1B,MAAM,GAAG,GAAG,IAAI,GAAG,EAAqB,CAAC;IACzC,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;QAChC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QACD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,eAAe;IAC7B,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6B,CAAC;IACjD,KAAK,MAAM,CAAC,IAAI,aAAa,EAAE,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mneme-ai/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "MCP server that exposes Mneme to Claude Code, Cursor, Continue, and other AI clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -9,6 +9,10 @@
|
|
|
9
9
|
".": {
|
|
10
10
|
"import": "./dist/index.js",
|
|
11
11
|
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./tools/registry": {
|
|
14
|
+
"import": "./dist/tools/_registry.js",
|
|
15
|
+
"types": "./dist/tools/_registry.d.ts"
|
|
12
16
|
}
|
|
13
17
|
},
|
|
14
18
|
"repository": {
|
|
@@ -33,8 +37,8 @@
|
|
|
33
37
|
"node": ">=22.13.0 <25.0.0"
|
|
34
38
|
},
|
|
35
39
|
"dependencies": {
|
|
36
|
-
"@mneme-ai/core": "1.
|
|
37
|
-
"@mneme-ai/embeddings": "1.
|
|
40
|
+
"@mneme-ai/core": "1.9.0",
|
|
41
|
+
"@mneme-ai/embeddings": "1.9.0",
|
|
38
42
|
"@modelcontextprotocol/sdk": "^1.0.4"
|
|
39
43
|
}
|
|
40
44
|
}
|