@mneme-ai/mcp 1.10.0 → 1.17.2

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,15 @@
1
+ /**
2
+ * Dynamic MCP integration test — full pipeline from a fixture repo to
3
+ * compiled tool catalog.
4
+ *
5
+ * This test wires together:
6
+ * • detectEcosystems (against fixture repo)
7
+ * • loadAllPacks (real Stripe pack from disk)
8
+ * • buildActiveToolCatalog (tools the MCP server would expose)
9
+ * • executeQuery (the actual tool execution)
10
+ * • augmentDescription (tribal knowledge composition)
11
+ *
12
+ * If any layer breaks, this test fails LOUDLY.
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=dynamic-mcp.integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-mcp.integration.test.d.ts","sourceRoot":"","sources":["../src/dynamic-mcp.integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Dynamic MCP integration test — full pipeline from a fixture repo to
3
+ * compiled tool catalog.
4
+ *
5
+ * This test wires together:
6
+ * • detectEcosystems (against fixture repo)
7
+ * • loadAllPacks (real Stripe pack from disk)
8
+ * • buildActiveToolCatalog (tools the MCP server would expose)
9
+ * • executeQuery (the actual tool execution)
10
+ * • augmentDescription (tribal knowledge composition)
11
+ *
12
+ * If any layer breaks, this test fails LOUDLY.
13
+ */
14
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
15
+ import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
16
+ import { tmpdir } from "node:os";
17
+ import { join } from "node:path";
18
+ import { execSync } from "node:child_process";
19
+ import { dynamic } from "@mneme-ai/core";
20
+ const { detectEcosystems, loadAllPacks, getDefaultPackSearchPaths, getBundledPacksDir, buildActiveToolCatalog, lookupTool, executeQuery, augmentDescription, } = dynamic;
21
+ let tmp;
22
+ beforeEach(() => {
23
+ tmp = mkdtempSync(join(tmpdir(), "mneme-dyn-int-"));
24
+ execSync("git init -q", { cwd: tmp });
25
+ execSync("git config user.email a@x", { cwd: tmp });
26
+ execSync("git config user.name TestUser", { cwd: tmp });
27
+ });
28
+ afterEach(() => {
29
+ try {
30
+ rmSync(tmp, { recursive: true, force: true });
31
+ }
32
+ catch { }
33
+ });
34
+ describe("Dynamic MCP — Stripe pack end-to-end", () => {
35
+ it("MCP would expose 3 Stripe tools when repo uses Stripe", () => {
36
+ // 1. Set up a fixture Stripe-using repo
37
+ writeFileSync(join(tmp, "package.json"), JSON.stringify({
38
+ dependencies: { stripe: "^14.0.0" },
39
+ }));
40
+ mkdirSync(join(tmp, "src"));
41
+ writeFileSync(join(tmp, "src/billing.ts"), `
42
+ import Stripe from 'stripe';
43
+ const stripe = new Stripe('sk_test_xxx');
44
+ export async function listPrices() {
45
+ return stripe.prices.list({ limit: 100 });
46
+ }
47
+ export async function createSubscription(customerId: string) {
48
+ return stripe.subscriptions.create({ customer: customerId, items: [] });
49
+ }
50
+ `);
51
+ execSync("git add . && git commit -q -m initial", { cwd: tmp });
52
+ // 2. Run the full pipeline
53
+ const detection = detectEcosystems(tmp);
54
+ expect(detection.signals.some((s) => s.id === "stripe")).toBe(true);
55
+ const paths = getDefaultPackSearchPaths(tmp, getBundledPacksDir());
56
+ const loaded = loadAllPacks(paths);
57
+ expect(loaded.failures).toEqual([]);
58
+ expect(loaded.packs.some((p) => p.id === "stripe")).toBe(true);
59
+ const catalog = buildActiveToolCatalog({ detection, packs: loaded.packs });
60
+ const stripeTools = catalog.filter((t) => t.packId === "stripe");
61
+ expect(stripeTools.length).toBe(3);
62
+ expect(stripeTools.map((t) => t.name).sort()).toEqual([
63
+ "mneme.stripe.audit_pii_handlers",
64
+ "mneme.stripe.find_pricing_logic",
65
+ "mneme.stripe.list_webhook_handlers",
66
+ ]);
67
+ });
68
+ it("calling find_pricing_logic returns real query results from fixture repo", () => {
69
+ writeFileSync(join(tmp, "package.json"), JSON.stringify({
70
+ dependencies: { stripe: "^14.0.0" },
71
+ }));
72
+ mkdirSync(join(tmp, "src"));
73
+ writeFileSync(join(tmp, "src/billing.ts"), `
74
+ import Stripe from 'stripe';
75
+ const stripe = new Stripe('sk');
76
+ export async function listPrices() {
77
+ return stripe.prices.list();
78
+ }
79
+ `);
80
+ execSync("git add . && git commit -q -m initial", { cwd: tmp });
81
+ const paths = getDefaultPackSearchPaths(tmp, getBundledPacksDir());
82
+ const loaded = loadAllPacks(paths);
83
+ const found = lookupTool("mneme.stripe.find_pricing_logic", loaded.packs);
84
+ expect(found).not.toBeNull();
85
+ if (!found)
86
+ return;
87
+ const result = executeQuery(found.tool.query, tmp);
88
+ expect(result.ok).toBe(true);
89
+ if (!result.ok)
90
+ return;
91
+ if (result.result.kind !== "code-search")
92
+ throw new Error("expected code-search");
93
+ // Should have at least one hit on stripe.prices.list
94
+ expect(result.result.hits.length).toBeGreaterThan(0);
95
+ expect(result.result.hits.some((h) => h.path === "src/billing.ts")).toBe(true);
96
+ });
97
+ it("repo without Stripe → catalog empty (no false-positive tools)", () => {
98
+ writeFileSync(join(tmp, "package.json"), JSON.stringify({ dependencies: { react: "^18.0.0" } }));
99
+ mkdirSync(join(tmp, "src"));
100
+ writeFileSync(join(tmp, "src/app.tsx"), `import React from 'react';\nexport default () => <div/>;`);
101
+ execSync("git add . && git commit -q -m initial", { cwd: tmp });
102
+ const detection = detectEcosystems(tmp);
103
+ expect(detection.signals.some((s) => s.id === "stripe")).toBe(false);
104
+ const paths = getDefaultPackSearchPaths(tmp, getBundledPacksDir());
105
+ const loaded = loadAllPacks(paths);
106
+ const catalog = buildActiveToolCatalog({ detection, packs: loaded.packs });
107
+ const stripeTools = catalog.filter((t) => t.packId === "stripe");
108
+ expect(stripeTools).toEqual([]);
109
+ });
110
+ it("description augmentation composes correctly with tribal-knowledge data", () => {
111
+ const paths = getDefaultPackSearchPaths(tmp, getBundledPacksDir());
112
+ const loaded = loadAllPacks(paths);
113
+ const found = lookupTool("mneme.stripe.find_pricing_logic", loaded.packs);
114
+ if (!found)
115
+ throw new Error("stripe pack must load");
116
+ const baseDesc = found.tool.description;
117
+ const augmented = augmentDescription(baseDesc, found.tool.augmentation, {
118
+ hits: [
119
+ { path: "services/billing/v2/prices.ts", line: 10, snippet: "stripe.prices.list()", matchedPattern: "stripe.prices" },
120
+ { path: "services/billing/v2/prices.ts", line: 20, snippet: "stripe.prices.create()", matchedPattern: "stripe.prices" },
121
+ { path: "lib/stripe/old.ts", line: 5, snippet: "stripe.prices.update()", matchedPattern: "stripe.prices" },
122
+ ],
123
+ expertise: [
124
+ { path: "services/billing/v2/prices.ts", expert: "alice", atrophyScore: 25, daysSinceLastTouch: 7 },
125
+ ],
126
+ deprecations: [{
127
+ path: "lib/stripe/old.ts",
128
+ canonical: "services/billing/v2/",
129
+ deprecatedInCommit: "abc12345",
130
+ reason: "moved after PII audit found logging leaks",
131
+ }],
132
+ incidents: [{
133
+ affectedPaths: ["lib/stripe/old.ts"],
134
+ title: "PII leak in pricing logs",
135
+ reportedAt: "2024-09-15T00:00:00Z",
136
+ }],
137
+ applicableRules: [{
138
+ id: "regret-1",
139
+ severity: "must-not",
140
+ rule: "Don't log raw Stripe customer email in price-handling code",
141
+ source: "regret",
142
+ }],
143
+ });
144
+ expect(augmented.facts.canonicalPath).toBe("services/billing/v2/prices.ts");
145
+ expect(augmented.facts.deprecatedPaths.length).toBe(1);
146
+ expect(augmented.facts.expertAuthors.length).toBe(1);
147
+ expect(augmented.facts.incidentSummaries.length).toBe(1);
148
+ expect(augmented.facts.ruleSummaries.length).toBe(1);
149
+ // Description embeds all 5 sections
150
+ expect(augmented.full).toMatch(/Canonical/);
151
+ expect(augmented.full).toMatch(/Deprecated/);
152
+ expect(augmented.full).toMatch(/alice owns/);
153
+ expect(augmented.full).toMatch(/Past incident/);
154
+ expect(augmented.full).toMatch(/MUST NOT/);
155
+ });
156
+ });
157
+ describe("Dynamic MCP — robustness", () => {
158
+ it("packs failing to load do NOT crash anything (degraded gracefully)", () => {
159
+ // The bundled pack always loads. The fixture is just to verify no crash.
160
+ const paths = getDefaultPackSearchPaths(tmp, getBundledPacksDir());
161
+ const loaded = loadAllPacks(paths);
162
+ expect(Array.isArray(loaded.packs)).toBe(true);
163
+ expect(Array.isArray(loaded.failures)).toBe(true);
164
+ });
165
+ it("MNEME_NO_DYNAMIC_MCP=1 path: caller can opt out (state empty)", () => {
166
+ // We test the env-var contract here — the actual MCP server respects it
167
+ process.env["MNEME_NO_DYNAMIC_MCP"] = "1";
168
+ try {
169
+ // The server.ts loadDynamicState short-circuits on this env var.
170
+ // Here we just confirm the guard is testable shape-wise.
171
+ expect(process.env["MNEME_NO_DYNAMIC_MCP"]).toBe("1");
172
+ }
173
+ finally {
174
+ delete process.env["MNEME_NO_DYNAMIC_MCP"];
175
+ }
176
+ });
177
+ });
178
+ //# sourceMappingURL=dynamic-mcp.integration.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamic-mcp.integration.test.js","sourceRoot":"","sources":["../src/dynamic-mcp.integration.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;CACb;AA2DD,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAuCpE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;CACb;AA4KD,wBAAsB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAiDpE"}
package/dist/index.js CHANGED
@@ -77,32 +77,138 @@ function enrichWithSecondBrain(response, tool, repoRoot) {
77
77
  },
78
78
  };
79
79
  }
80
+ // ─── v1.13.0 — Dynamic MCP wiring ────────────────────────────────────
81
+ //
82
+ // At server start we:
83
+ // 1. Detect ecosystems in the repo
84
+ // 2. Load all packs (bundled + user + repo)
85
+ // 3. Compile active tool catalog (only packs whose detection passes)
86
+ // 4. Merge dynamic tools INTO the static catalog (no name collisions
87
+ // possible — dynamic tools are namespaced mneme.<pack>.<tool>)
88
+ //
89
+ // Tool-call dispatch checks dynamic tools AFTER static — so static wins
90
+ // on the rare collision (defensive).
91
+ import { dynamic } from "@mneme-ai/core";
92
+ function loadDynamicState(repoRoot) {
93
+ if (process.env["MNEME_NO_DYNAMIC_MCP"] === "1") {
94
+ return { catalog: [], packs: [] };
95
+ }
96
+ try {
97
+ const detection = dynamic.detectEcosystems(repoRoot);
98
+ const paths = dynamic.getDefaultPackSearchPaths(repoRoot, dynamic.getBundledPacksDir());
99
+ const loaded = dynamic.loadAllPacks(paths);
100
+ // Pack failures are best-effort — don't block startup
101
+ const catalog = dynamic.buildActiveToolCatalog({
102
+ detection,
103
+ packs: loaded.packs,
104
+ // For Phase 1 we attach minimal augmentation (only base description).
105
+ // Phase 2 will pre-fetch tribal-knowledge facts and pass them here.
106
+ augmentDescription: (base, tool) => {
107
+ const a = dynamic.augmentDescription(base, tool.augmentation, dynamic.EMPTY_AUGMENTATION_INPUT);
108
+ return a.full;
109
+ },
110
+ });
111
+ return { catalog, packs: loaded.packs };
112
+ }
113
+ catch {
114
+ // Never fail MCP startup because of dynamic-tool issues
115
+ return { catalog: [], packs: [] };
116
+ }
117
+ }
118
+ async function dispatchDynamicTool(toolName, args, repoRoot, packs) {
119
+ const found = dynamic.lookupTool(toolName, packs);
120
+ if (!found)
121
+ return { ok: false };
122
+ // Execute query + format
123
+ const queryResult = dynamic.executeQuery(found.tool.query, repoRoot);
124
+ if (!queryResult.ok) {
125
+ return {
126
+ ok: true,
127
+ result: {
128
+ content: [{
129
+ type: "text",
130
+ text: JSON.stringify({
131
+ data: null,
132
+ error: {
133
+ kind: queryResult.error.kind,
134
+ stage: queryResult.error.stage,
135
+ message: queryResult.error.message,
136
+ },
137
+ wisdom: `Dynamic tool ${toolName} could not execute: ${queryResult.error.message}`,
138
+ }, null, 2),
139
+ }],
140
+ },
141
+ };
142
+ }
143
+ // v1.15.0: Build REAL augmentation input from Mneme stores
144
+ // (atrophy, forensics, constitution, deprecations, git-blame).
145
+ const hits = queryResult.result.kind === "code-search" ? queryResult.result.hits : [];
146
+ let augInput;
147
+ try {
148
+ augInput = dynamic.buildAugmentationInput({ hits, repoRoot });
149
+ }
150
+ catch {
151
+ augInput = dynamic.EMPTY_AUGMENTATION_INPUT;
152
+ }
153
+ const aug = dynamic.augmentDescription(found.tool.description, found.tool.augmentation, augInput);
154
+ return {
155
+ ok: true,
156
+ result: {
157
+ content: [{
158
+ type: "text",
159
+ text: JSON.stringify({
160
+ data: queryResult.result,
161
+ wisdom: aug.full,
162
+ followUp: [],
163
+ confidence: { level: "medium" },
164
+ provenance: {
165
+ packId: found.pack.id,
166
+ toolId: found.tool.id,
167
+ packVersion: found.pack.version,
168
+ schemaVersion: found.pack.schemaVersion,
169
+ args,
170
+ },
171
+ }, null, 2),
172
+ }],
173
+ },
174
+ };
175
+ }
80
176
  export async function startMcpServer(opts) {
81
177
  const runtime = await buildRuntime(opts.cwd);
82
178
  const allTools = buildAllTools();
83
179
  const toolMap = buildToolMap();
180
+ const dynamic = loadDynamicState(runtime.meta.rootPath);
84
181
  const server = new Server({ name: "mneme", version: resolveVersion() }, { capabilities: { tools: {} } });
85
182
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
86
- tools: toMcpTools(allTools),
183
+ tools: [
184
+ ...toMcpTools(allTools),
185
+ ...dynamic.catalog.map((t) => ({
186
+ name: t.name,
187
+ description: t.description,
188
+ inputSchema: t.inputSchema,
189
+ })),
190
+ ],
87
191
  }));
88
192
  server.setRequestHandler(CallToolRequestSchema, async (req) => {
89
193
  const tool = toolMap.get(req.params.name);
90
- if (!tool) {
91
- return toErrorResult(`unknown tool: ${req.params.name}. Call mneme.capabilities to list available tools.`);
92
- }
93
- try {
94
- const args = (req.params.arguments ?? {});
95
- const response = await tool.handler(runtime, args);
96
- // Second Brain — auto-enrich every response with composition hints
97
- // + lifecycle tracking + homework rubric. The chain reaction +
98
- // teacher-student loop start here.
99
- const enriched = enrichWithSecondBrain(response, tool, runtime.meta.rootPath);
100
- return toCallResult(enriched);
101
- }
102
- catch (err) {
103
- return toErrorResult(`${req.params.name} failed: ${err.message}. ` +
104
- `If this tool requires the index, ask the user to run \`mneme index\`.`);
194
+ if (tool) {
195
+ try {
196
+ const args = (req.params.arguments ?? {});
197
+ const response = await tool.handler(runtime, args);
198
+ const enriched = enrichWithSecondBrain(response, tool, runtime.meta.rootPath);
199
+ return toCallResult(enriched);
200
+ }
201
+ catch (err) {
202
+ return toErrorResult(`${req.params.name} failed: ${err.message}. ` +
203
+ `If this tool requires the index, ask the user to run \`mneme index\`.`);
204
+ }
105
205
  }
206
+ // Dynamic-tool dispatch (only if static didn't claim this name)
207
+ const args = (req.params.arguments ?? {});
208
+ const dyn = await dispatchDynamicTool(req.params.name, args, runtime.meta.rootPath, dynamic.packs);
209
+ if (dyn.ok)
210
+ return dyn.result;
211
+ return toErrorResult(`unknown tool: ${req.params.name}. Call mneme.capabilities to list available tools.`);
106
212
  });
107
213
  const transport = new StdioServerTransport();
108
214
  await server.connect(transport);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * mneme.dna.search — MCP tool for AI clients.
3
+ *
4
+ * Exposes the full 16-strand DNA pipeline (8 algorithms × 8 formulas) as
5
+ * a single MCP tool that AI agents can call directly. Strict mode is the
6
+ * default — Ghost-Sniper Verifier rejects rather than degrades, so the
7
+ * AI never sees a hallucinated reference.
8
+ *
9
+ * The tool accepts the orchestrator's structured input shape verbatim.
10
+ * Powerful AI agents that have already done embedding + candidate
11
+ * collection (e.g. via mneme.memory.search_commits) can pipe results
12
+ * through this for the strict-verified, tribal-knowledge-augmented
13
+ * answer.
14
+ */
15
+ import type { MnemeTool } from "./_types.js";
16
+ export declare const dnaSearchTool: MnemeTool;
17
+ //# sourceMappingURL=_dna_tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_dna_tool.d.ts","sourceRoot":"","sources":["../../src/tools/_dna_tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,eAAO,MAAM,aAAa,EAAE,SA2H3B,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * mneme.dna.search — MCP tool for AI clients.
3
+ *
4
+ * Exposes the full 16-strand DNA pipeline (8 algorithms × 8 formulas) as
5
+ * a single MCP tool that AI agents can call directly. Strict mode is the
6
+ * default — Ghost-Sniper Verifier rejects rather than degrades, so the
7
+ * AI never sees a hallucinated reference.
8
+ *
9
+ * The tool accepts the orchestrator's structured input shape verbatim.
10
+ * Powerful AI agents that have already done embedding + candidate
11
+ * collection (e.g. via mneme.memory.search_commits) can pipe results
12
+ * through this for the strict-verified, tribal-knowledge-augmented
13
+ * answer.
14
+ */
15
+ import { dna } from "@mneme-ai/core";
16
+ export const dnaSearchTool = {
17
+ name: "mneme.dna.search",
18
+ category: "meta",
19
+ description: "Run the full Mneme DNA pipeline (8 algorithms × 8 formulas) on a set of pre-fetched candidates. " +
20
+ "Returns ONLY results that pass three gates: (1) AST existence, (2) semantic similarity ≥ threshold, " +
21
+ "(3) Compositional Confidence (Wilson 95% lower bound × Hebbian) ≥ threshold. Strict mode default = " +
22
+ "rejects rather than degrades. **Use this when you need a hallucination-free answer to ground a code " +
23
+ "claim.** Returns: accepted[] (verified results), phantomSuggestions[] (where the canonical version " +
24
+ "should live), trace[] (full pipeline transparency), stats (per-gate rejection counts).",
25
+ triggers: [
26
+ "verify these candidates",
27
+ "filter out hallucinations",
28
+ "ghost sniper search",
29
+ "DNA pipeline",
30
+ "strict-mode code search",
31
+ ],
32
+ inputSchema: {
33
+ type: "object",
34
+ properties: {
35
+ queryText: { type: "string", description: "Original query text (for trace)" },
36
+ queryEmbedding: {
37
+ type: "array",
38
+ items: { type: "number" },
39
+ description: "Embedding of the query (precomputed by caller)",
40
+ },
41
+ candidates: {
42
+ type: "array",
43
+ description: "Pre-fetched candidate hits with embeddings + metadata",
44
+ items: {
45
+ type: "object",
46
+ properties: {
47
+ id: { type: "string" },
48
+ embedding: { type: "array", items: { type: "number" } },
49
+ baseRelevance: { type: "number" },
50
+ patternSignature: { type: "string" },
51
+ existsInRepo: { type: "boolean" },
52
+ successCount: { type: "number" },
53
+ totalCount: { type: "number" },
54
+ hebbianStrength: { type: "number" },
55
+ meta: { type: "object", additionalProperties: true },
56
+ },
57
+ required: ["id", "embedding", "baseRelevance", "patternSignature", "existsInRepo", "successCount", "totalCount", "hebbianStrength"],
58
+ },
59
+ },
60
+ echoSignals: {
61
+ type: "array",
62
+ description: "Known regret/decision pattern embeddings (for echo signature)",
63
+ items: {
64
+ type: "object",
65
+ properties: {
66
+ id: { type: "string" },
67
+ embedding: { type: "array", items: { type: "number" } },
68
+ label: { type: "string" },
69
+ },
70
+ required: ["id", "embedding"],
71
+ },
72
+ },
73
+ canonicalPatterns: {
74
+ type: "array",
75
+ description: "Successful patterns from this repo's history (for phantom-path)",
76
+ items: { type: "object", additionalProperties: true },
77
+ },
78
+ regretEmbeddings: {
79
+ type: "array",
80
+ description: "Embeddings of regret patterns (for anti-pattern repulsion)",
81
+ items: { type: "array", items: { type: "number" } },
82
+ },
83
+ federationVotes: {
84
+ type: "object",
85
+ description: "Per-signature federation up/down votes",
86
+ additionalProperties: true,
87
+ },
88
+ strict: { type: "boolean", description: "Default true. Strict = reject rather than degrade." },
89
+ semanticThreshold: { type: "number", description: "Min semantic sim. Default 0.6." },
90
+ confidenceThreshold: { type: "number", description: "Min Wilson×Hebbian. Default 0.6." },
91
+ },
92
+ required: ["queryText", "queryEmbedding", "candidates", "echoSignals", "canonicalPatterns", "regretEmbeddings"],
93
+ },
94
+ handler: async (_rt, args) => {
95
+ try {
96
+ const result = dna.dnaSearch({
97
+ queryText: String(args["queryText"] ?? ""),
98
+ queryEmbedding: args["queryEmbedding"] ?? [],
99
+ candidates: args["candidates"] ?? [],
100
+ echoSignals: args["echoSignals"] ?? [],
101
+ canonicalPatterns: args["canonicalPatterns"] ?? [],
102
+ regretEmbeddings: args["regretEmbeddings"] ?? [],
103
+ federationVotes: args["federationVotes"] ?? {},
104
+ strict: args["strict"] !== false,
105
+ semanticThreshold: typeof args["semanticThreshold"] === "number" ? args["semanticThreshold"] : undefined,
106
+ confidenceThreshold: typeof args["confidenceThreshold"] === "number" ? args["confidenceThreshold"] : undefined,
107
+ });
108
+ const summary = result.accepted.length === 0
109
+ ? `Strict mode: 0 results passed all 3 gates (${result.stats.rejectedAtAst} rejected at AST existence, ${result.stats.rejectedAtSemantic} at semantic, ${result.stats.rejectedAtConfidence} at confidence). Empty answer is honest — no hallucinations leaked.`
110
+ : `${result.accepted.length} result(s) verified. ${result.stats.rejectedAtAst + result.stats.rejectedAtSemantic + result.stats.rejectedAtConfidence} rejected at the Ghost-Sniper gates (no hallucinations leaked).`;
111
+ return {
112
+ data: result,
113
+ wisdom: summary,
114
+ followUp: result.accepted.length === 0
115
+ ? ["mneme.memory.search_commits", "mneme.constitution.get"]
116
+ : [],
117
+ confidence: { level: result.accepted.length > 0 ? "high" : "medium" },
118
+ secondBrain: {
119
+ presentation: result.accepted.length > 0
120
+ ? "Quote data.accepted[].reference verbatim to the user. Each result has been verified — file/symbol exists, semantic similarity passes threshold, Wilson 95% lower-bound confidence is met. Ground every claim in these references."
121
+ : "DO NOT fabricate a result. The DNA pipeline rejected every candidate. Either tell the user 'I couldn't verify this' or call mneme.memory.search_commits with broader terms and re-run.",
122
+ },
123
+ };
124
+ }
125
+ catch (err) {
126
+ return {
127
+ data: null,
128
+ wisdom: `DNA pipeline failed: ${err.message}. Inspect input shape — ensure embeddings have consistent dimension and required fields are present.`,
129
+ followUp: [],
130
+ confidence: { level: "low" },
131
+ };
132
+ }
133
+ },
134
+ };
135
+ //# sourceMappingURL=_dna_tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_dna_tool.js","sourceRoot":"","sources":["../../src/tools/_dna_tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * mneme.genome.* — MCP tools that expose the Genetic Engineering primitives
3
+ * (G1-G5) so AI agents discover them automatically via `tools/list`.
4
+ *
5
+ * Six tools:
6
+ * • mneme.genome.annotate — tag a tool list with functional domains
7
+ * • mneme.genome.phylogeny — build ancestry tree + cousins/distance queries
8
+ * • mneme.genome.circuit — run a genetic-circuit network (toggle/AND/OR/NOT/oscillator)
9
+ * • mneme.genome.operon_resolve — resolve which operon governs a tool + its current behavior modifier
10
+ * • mneme.genome.crispr_edit — apply a CRISPR edit to a pack (validate-then-commit)
11
+ * • mneme.genome.synthesize — de novo synthesis: recipe → cryptographically-named ToolDefinition
12
+ */
13
+ import type { MnemeTool } from "./_types.js";
14
+ export declare const genomeAnnotateTool: MnemeTool;
15
+ export declare const genomePhylogenyTool: MnemeTool;
16
+ export declare const genomeCircuitTool: MnemeTool;
17
+ export declare const genomeOperonResolveTool: MnemeTool;
18
+ export declare const genomeCrisprTool: MnemeTool;
19
+ export declare const genomeSynthesizeTool: MnemeTool;
20
+ export declare const genomeTools: MnemeTool[];
21
+ //# sourceMappingURL=_genome_tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_genome_tools.d.ts","sourceRoot":"","sources":["../../src/tools/_genome_tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAI7C,eAAO,MAAM,kBAAkB,EAAE,SAuChC,CAAC;AAIF,eAAO,MAAM,mBAAmB,EAAE,SA4DjC,CAAC;AAIF,eAAO,MAAM,iBAAiB,EAAE,SAuC/B,CAAC;AAIF,eAAO,MAAM,uBAAuB,EAAE,SA8BrC,CAAC;AAIF,eAAO,MAAM,gBAAgB,EAAE,SA4B9B,CAAC;AAIF,eAAO,MAAM,oBAAoB,EAAE,SAqClC,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,SAAS,EAOlC,CAAC"}
@@ -0,0 +1,247 @@
1
+ /**
2
+ * mneme.genome.* — MCP tools that expose the Genetic Engineering primitives
3
+ * (G1-G5) so AI agents discover them automatically via `tools/list`.
4
+ *
5
+ * Six tools:
6
+ * • mneme.genome.annotate — tag a tool list with functional domains
7
+ * • mneme.genome.phylogeny — build ancestry tree + cousins/distance queries
8
+ * • mneme.genome.circuit — run a genetic-circuit network (toggle/AND/OR/NOT/oscillator)
9
+ * • mneme.genome.operon_resolve — resolve which operon governs a tool + its current behavior modifier
10
+ * • mneme.genome.crispr_edit — apply a CRISPR edit to a pack (validate-then-commit)
11
+ * • mneme.genome.synthesize — de novo synthesis: recipe → cryptographically-named ToolDefinition
12
+ */
13
+ import { genome } from "@mneme-ai/core";
14
+ // ─── 1. annotate ─────────────────────────────────────────────────────
15
+ export const genomeAnnotateTool = {
16
+ name: "mneme.genome.annotate",
17
+ category: "meta",
18
+ description: "Tag a list of MCP tools with their functional domain (search · mutate · verify · compose · regulate · augment · observe · synthesize) + sub-domains + mutability + genus/species. Pure deterministic. Used by the phylogeny tool to build ancestry trees.",
19
+ triggers: ["annotate tools", "classify mcp tools", "what domain is this tool"],
20
+ inputSchema: {
21
+ type: "object",
22
+ properties: {
23
+ tools: {
24
+ type: "array",
25
+ items: {
26
+ type: "object",
27
+ properties: {
28
+ name: { type: "string" },
29
+ description: { type: "string" },
30
+ parent: { type: "string" },
31
+ },
32
+ required: ["name"],
33
+ },
34
+ },
35
+ },
36
+ required: ["tools"],
37
+ },
38
+ handler: async (_rt, args) => {
39
+ const tools = args["tools"] ?? [];
40
+ const result = genome.annotateCatalog(tools);
41
+ return {
42
+ data: result,
43
+ wisdom: `Annotated ${result.tools.length} tool(s). Domain breakdown: ${Object.entries(result.domainCounts)
44
+ .map(([d, n]) => `${d}=${n}`)
45
+ .join(", ")}.`,
46
+ followUp: ["mneme.genome.phylogeny"],
47
+ confidence: { level: "high" },
48
+ };
49
+ },
50
+ };
51
+ // ─── 2. phylogeny ────────────────────────────────────────────────────
52
+ export const genomePhylogenyTool = {
53
+ name: "mneme.genome.phylogeny",
54
+ category: "meta",
55
+ description: "Build the phylogenetic (ancestry) tree of a tool catalog. Supports queries: ancestors of a tool, cousins (siblings within k generations), tree-distance between two tools, closest-relative search across a candidate pool. Use when AI agent needs to reason about WHICH tool to call by relatedness, not just name match.",
56
+ triggers: ["tool ancestors", "find similar tool", "closest relative", "speciation"],
57
+ inputSchema: {
58
+ type: "object",
59
+ properties: {
60
+ tools: { type: "array" },
61
+ query: {
62
+ type: "object",
63
+ properties: {
64
+ kind: { type: "string", enum: ["ancestors", "cousins", "distance", "closest", "speciation", "ascii"] },
65
+ tool: { type: "string" },
66
+ other: { type: "string" },
67
+ k: { type: "number" },
68
+ candidates: { type: "array", items: { type: "string" } },
69
+ },
70
+ required: ["kind"],
71
+ },
72
+ },
73
+ required: ["tools", "query"],
74
+ },
75
+ handler: async (_rt, args) => {
76
+ const tools = args["tools"] ?? [];
77
+ const annotated = genome.annotateCatalog(tools).tools;
78
+ const tree = genome.buildPhylogeny(annotated);
79
+ const q = args["query"];
80
+ let result;
81
+ switch (q.kind) {
82
+ case "ancestors":
83
+ result = q.tool ? genome.findAncestors(tree, q.tool) : [];
84
+ break;
85
+ case "cousins":
86
+ result = q.tool ? genome.findCousins(tree, q.tool, q.k ?? 1) : [];
87
+ break;
88
+ case "distance":
89
+ result = q.tool && q.other ? genome.treeDistance(tree, q.tool, q.other) : Infinity;
90
+ break;
91
+ case "closest":
92
+ result = q.tool && q.candidates ? genome.findClosestRelative(tree, q.tool, q.candidates) : null;
93
+ break;
94
+ case "speciation":
95
+ result = genome.speciationEvents(tree);
96
+ break;
97
+ case "ascii":
98
+ result = genome.renderAsciiTree(tree);
99
+ break;
100
+ default:
101
+ result = null;
102
+ }
103
+ return {
104
+ data: { query: q, result, totalNodes: tree.byName.size },
105
+ wisdom: `Phylogeny query '${q.kind}' executed across ${tree.byName.size} nodes.`,
106
+ followUp: [],
107
+ confidence: { level: "high" },
108
+ };
109
+ },
110
+ };
111
+ // ─── 3. circuit ──────────────────────────────────────────────────────
112
+ export const genomeCircuitTool = {
113
+ name: "mneme.genome.circuit",
114
+ category: "meta",
115
+ description: "Execute a genetic-circuit network: toggle / AND / OR / NOT / oscillator gates composed declaratively. Returns whether the circuit fired + reason. Toggle state is caller-managed (pure function).",
116
+ triggers: ["genetic circuit", "logic gate", "toggle", "and gate", "or gate"],
117
+ inputSchema: {
118
+ type: "object",
119
+ properties: {
120
+ network: {
121
+ type: "object",
122
+ properties: { steps: { type: "array" } },
123
+ required: ["steps"],
124
+ },
125
+ input: {
126
+ type: "object",
127
+ properties: {
128
+ signals: { type: "object", additionalProperties: { type: "boolean" } },
129
+ payload: {},
130
+ toggleState: { type: "object", additionalProperties: { type: "boolean" } },
131
+ oscillatorTick: { type: "number" },
132
+ },
133
+ required: ["signals"],
134
+ },
135
+ },
136
+ required: ["network", "input"],
137
+ },
138
+ handler: async (_rt, args) => {
139
+ const result = genome.runCircuit(args["network"], args["input"]);
140
+ return {
141
+ data: result,
142
+ wisdom: `Circuit ${result.fired ? "fired ✓" : "blocked ✗"} — ${result.reason}`,
143
+ followUp: [],
144
+ confidence: { level: "high" },
145
+ };
146
+ },
147
+ };
148
+ // ─── 4. operon_resolve ───────────────────────────────────────────────
149
+ export const genomeOperonResolveTool = {
150
+ name: "mneme.genome.operon_resolve",
151
+ category: "meta",
152
+ description: "Resolve which co-regulated operon governs a tool + its current behavior modifier (requireConstitutionGate / requireStrictSniper / minConfidence / maxResults). Use to determine: should this tool's output be gated more strictly given the current PCI / compliance / governance level?",
153
+ triggers: ["operon", "regulator", "governance level"],
154
+ inputSchema: {
155
+ type: "object",
156
+ properties: {
157
+ toolName: { type: "string" },
158
+ registry: { type: "object" },
159
+ regulatorLevels: { type: "object", additionalProperties: { type: "string" } },
160
+ },
161
+ required: ["toolName", "registry", "regulatorLevels"],
162
+ },
163
+ handler: async (_rt, args) => {
164
+ const r = genome.resolveOperonForTool(args["toolName"], args["registry"], args["regulatorLevels"]);
165
+ return {
166
+ data: r,
167
+ wisdom: r.operon
168
+ ? `Tool '${args["toolName"]}' governed by operon '${r.operon.id}' at level=${r.level}. Modifier: requireGate=${r.modifier?.requireConstitutionGate}, requireSniper=${r.modifier?.requireStrictSniper}, minConf=${r.modifier?.minConfidence}.`
169
+ : `Tool '${args["toolName"]}' is unregulated.`,
170
+ followUp: [],
171
+ confidence: { level: "high" },
172
+ };
173
+ },
174
+ };
175
+ // ─── 5. crispr_edit ──────────────────────────────────────────────────
176
+ export const genomeCrisprTool = {
177
+ name: "mneme.genome.crispr_edit",
178
+ category: "meta",
179
+ description: "Apply a CRISPR edit to a pack: delete tool by id/pattern, replace-tool, add-tool, patch-detection. Validates the post-edit pack against the schema; on validation failure, returns ok=false with structured errors and NO change is committed (fail-closed). Returns SHA-256 hashes of pack before + after.",
180
+ triggers: ["edit pack", "patch tool", "crispr", "tool surgery"],
181
+ inputSchema: {
182
+ type: "object",
183
+ properties: {
184
+ pack: { type: "object" },
185
+ edit: { type: "object" },
186
+ },
187
+ required: ["pack", "edit"],
188
+ },
189
+ handler: async (_rt, args) => {
190
+ const r = genome.crisprEdit(args["pack"], args["edit"]);
191
+ return {
192
+ data: r,
193
+ wisdom: r.ok
194
+ ? `CRISPR edit applied: ${r.summary}. Hash ${r.beforeHash.slice(0, 8)} → ${r.afterHash?.slice(0, 8)}.`
195
+ : `CRISPR edit refused (fail-closed): ${r.error?.reason}.`,
196
+ followUp: [],
197
+ confidence: { level: "high" },
198
+ };
199
+ },
200
+ };
201
+ // ─── 6. synthesize ───────────────────────────────────────────────────
202
+ export const genomeSynthesizeTool = {
203
+ name: "mneme.genome.synthesize",
204
+ category: "meta",
205
+ description: "DE NOVO SYNTHESIS — compose a brand new MCP tool at runtime from genetic primitives. Recipe (search patterns + verifiers + augmenters + preconditions + authoredBy) → cryptographically-named ToolDefinition. Identical recipe → identical tool name + DNA hash (deterministic). Validated against pack schema before return. Failure modes are structured.",
206
+ triggers: ["synthesize tool", "create new tool", "de novo", "new gene"],
207
+ inputSchema: {
208
+ type: "object",
209
+ properties: {
210
+ intent: { type: "string", description: "Plain-English description of what the tool should do (≥10 chars)" },
211
+ searchPatterns: { type: "array", items: { type: "string" }, minItems: 1 },
212
+ fileExtensions: { type: "array", items: { type: "string" } },
213
+ verifiers: { type: "array", items: { type: "string", enum: ["ast", "semantic", "confidence"] }, minItems: 1 },
214
+ augmenters: { type: "array", items: { type: "string", enum: ["canonical-paths", "deprecated-paths", "expert-authors", "incidents", "rules"] } },
215
+ authoredBy: { type: "string" },
216
+ },
217
+ required: ["intent", "searchPatterns", "verifiers", "authoredBy"],
218
+ },
219
+ handler: async (_rt, args) => {
220
+ const recipe = {
221
+ intent: String(args["intent"] ?? ""),
222
+ searchPatterns: args["searchPatterns"] ?? [],
223
+ fileExtensions: args["fileExtensions"],
224
+ verifiers: args["verifiers"] ?? [],
225
+ augmenters: args["augmenters"] ?? [],
226
+ authoredBy: String(args["authoredBy"] ?? ""),
227
+ };
228
+ const r = genome.synthesize(recipe);
229
+ return {
230
+ data: r,
231
+ wisdom: r.ok
232
+ ? `Synthesized new tool '${r.tool.name}' (DNA hash ${r.tool.dnaHash.slice(0, 12)}…). Tool is verified against pack schema and ready to register.`
233
+ : `Synthesis refused: ${r.error?.reason}.`,
234
+ followUp: r.ok ? ["mneme.dna.search"] : [],
235
+ confidence: { level: "high" },
236
+ };
237
+ },
238
+ };
239
+ export const genomeTools = [
240
+ genomeAnnotateTool,
241
+ genomePhylogenyTool,
242
+ genomeCircuitTool,
243
+ genomeOperonResolveTool,
244
+ genomeCrisprTool,
245
+ genomeSynthesizeTool,
246
+ ];
247
+ //# sourceMappingURL=_genome_tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_genome_tools.js","sourceRoot":"","sources":["../../src/tools/_genome_tools.ts"],"names":[],"mappings":"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"}
@@ -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;AAkB3D;sEACsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAkB3C;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"}
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;AAoB3D;sEACsE;AACtE,wBAAgB,aAAa,IAAI,SAAS,EAAE,CAoB3C;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"}
@@ -20,6 +20,8 @@ import { graderTool } from "./_grader_tool.js";
20
20
  import { understandIntentTool } from "./_intent_tool.js";
21
21
  import { constitutionTool } from "./_constitution_tool.js";
22
22
  import { verifyClaimsTool } from "./_verify_claims_tool.js";
23
+ import { dnaSearchTool } from "./_dna_tool.js";
24
+ import { genomeTools } from "./_genome_tools.js";
23
25
  /** All Mneme tools, in display order. The capabilities syllabus comes first
24
26
  * so AI clients that read tool lists top-down see it immediately. */
25
27
  export function buildAllTools() {
@@ -29,6 +31,8 @@ export function buildAllTools() {
29
31
  graderTool,
30
32
  verifyClaimsTool,
31
33
  constitutionTool,
34
+ dnaSearchTool,
35
+ ...genomeTools,
32
36
  smartDoTool,
33
37
  ...memoryTools,
34
38
  ...peopleTools,
@@ -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;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D;sEACsE;AACtE,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,gBAAgB;QAChB,oBAAoB;QACpB,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,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"}
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;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEjD;sEACsE;AACtE,MAAM,UAAU,aAAa;IAC3B,OAAO;QACL,gBAAgB;QAChB,oBAAoB;QACpB,UAAU;QACV,gBAAgB;QAChB,gBAAgB;QAChB,aAAa;QACb,GAAG,WAAW;QACd,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"}
@@ -1 +1 @@
1
- {"version":3,"file":"_runtime.d.ts","sourceRoot":"","sources":["../../src/tools/_runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAapE;AAED;;iFAEiF;AACjF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE,EACnD,OAAO,GAAE;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;CAExG,IAEa,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;GAS7D;AAED;;;qCAGqC;AACrC,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,EAAO,EACtB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,OAAO,CAAC,CA+BlB"}
1
+ {"version":3,"file":"_runtime.d.ts","sourceRoot":"","sources":["../../src/tools/_runtime.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAapE;AAED;;iFAEiF;AACjF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,EAAE,EACnD,OAAO,GAAE;IAAE,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAA;CAExG,IAEa,IAAI,WAAW,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;;;;;;;GAS7D;AAED;;;qCAGqC;AACrC,wBAAsB,UAAU,CAC9B,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,EAAO,EACtB,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAChC,OAAO,CAAC,OAAO,CAAC,CA0ClB"}
@@ -44,10 +44,21 @@ export function passthroughHandler(cliCommand, argMap, options = {
44
44
  * non-zero exit / parse failure. */
45
45
  export async function runCliJson(cwd, command, cliArgs = [], opts = {}) {
46
46
  const { spawn } = await import("node:child_process");
47
+ // Security hardening (v1.11.0): refuse any cliArg or command that looks
48
+ // like shell-metacharacter injection. MCP args come from AI clients —
49
+ // we treat them as untrusted input.
50
+ const SHELL_META = /[;&|`$<>()\\\n\r"']/;
51
+ for (const a of [command, ...cliArgs]) {
52
+ if (typeof a !== "string" || SHELL_META.test(a)) {
53
+ throw new Error(`Refusing to spawn: argument contains shell metacharacters or is non-string: ${JSON.stringify(a).slice(0, 80)}`);
54
+ }
55
+ }
56
+ // Windows: resolve to .cmd explicitly so we don't need shell:true
57
+ const exe = process.platform === "win32" ? "mneme.cmd" : "mneme";
47
58
  return await new Promise((resolve, reject) => {
48
- const child = spawn("mneme", [command, ...cliArgs, "--json"], {
59
+ const child = spawn(exe, [command, ...cliArgs, "--json"], {
49
60
  cwd,
50
- shell: process.platform === "win32",
61
+ shell: false,
51
62
  });
52
63
  let stdout = "";
53
64
  let stderr = "";
@@ -1 +1 @@
1
- {"version":3,"file":"_runtime.js","sourceRoot":"","sources":["../../src/tools/_runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_runtime.js","sourceRoot":"","sources":["../../src/tools/_runtime.ts"],"names":[],"mappings":"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"}
@@ -194,7 +194,13 @@ export interface MnemeTool<TArgs = Record<string, unknown>, TData = unknown> {
194
194
  }
195
195
  /** Convert a wrapped tool response into MCP's expected CallToolResult.
196
196
  * We serialise the entire envelope (data + wisdom + followUp + confidence)
197
- * so the AI sees the full picture in one shot. */
197
+ * so the AI sees the full picture in one shot.
198
+ *
199
+ * v1.11.1 — by default, every wisdom + secondBrain.presentation field
200
+ * is run through the prompt-injection scrubber. Untrusted content
201
+ * (commit messages, PR text, issue text from federation) cannot smuggle
202
+ * control tokens like `<system>`, `[INST]`, or "ignore prior instructions"
203
+ * into the AI's context. Set MNEME_NO_AUTO_SECURITY=1 to disable. */
198
204
  export declare function toCallResult(r: ToolResponse): CallToolResult;
199
205
  /** Convert a thrown error into MCP's expected error result */
200
206
  export declare function toErrorResult(message: string): CallToolResult;
@@ -1 +1 @@
1
- {"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../src/tools/_types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_types.d.ts","sourceRoot":"","sources":["../../src/tools/_types.ts"],"names":[],"mappings":"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"}
@@ -6,19 +6,45 @@
6
6
  * a 1-3 sentence narrative the AI can quote (or paraphrase) directly to the
7
7
  * user. Citations live in `data`, the human meaning lives in `wisdom`.
8
8
  */
9
+ import { security } from "@mneme-ai/core";
9
10
  /** Convert a wrapped tool response into MCP's expected CallToolResult.
10
11
  * We serialise the entire envelope (data + wisdom + followUp + confidence)
11
- * so the AI sees the full picture in one shot. */
12
+ * so the AI sees the full picture in one shot.
13
+ *
14
+ * v1.11.1 — by default, every wisdom + secondBrain.presentation field
15
+ * is run through the prompt-injection scrubber. Untrusted content
16
+ * (commit messages, PR text, issue text from federation) cannot smuggle
17
+ * control tokens like `<system>`, `[INST]`, or "ignore prior instructions"
18
+ * into the AI's context. Set MNEME_NO_AUTO_SECURITY=1 to disable. */
12
19
  export function toCallResult(r) {
20
+ // v1.11.1 — auto-scrub the human-language fields. We intentionally do
21
+ // NOT scrub `data` (which is structured JSON the AI client should treat
22
+ // as data, not as instruction).
23
+ const skipScrub = process.env["MNEME_NO_AUTO_SECURITY"] === "1";
24
+ let wisdom = r.wisdom;
25
+ let secondBrain = r.secondBrain;
26
+ if (!skipScrub) {
27
+ try {
28
+ if (typeof wisdom === "string")
29
+ wisdom = security.scrubber.scrubForPrompt(wisdom).scrubbed;
30
+ if (secondBrain && typeof secondBrain.presentation === "string") {
31
+ secondBrain = { ...secondBrain, presentation: security.scrubber.scrubForPrompt(secondBrain.presentation).scrubbed };
32
+ }
33
+ }
34
+ catch {
35
+ // best-effort — never block a tool result on scrubber failure
36
+ }
37
+ }
13
38
  return {
14
39
  content: [
15
40
  {
16
41
  type: "text",
17
42
  text: JSON.stringify({
18
43
  data: r.data,
19
- wisdom: r.wisdom,
44
+ wisdom,
20
45
  followUp: r.followUp ?? [],
21
46
  confidence: r.confidence ?? { level: "medium" },
47
+ ...(secondBrain ? { secondBrain } : {}),
22
48
  }, null, 2),
23
49
  },
24
50
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../src/tools/_types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AA0MH;;mDAEmD;AACnD,MAAM,UAAU,YAAY,CAAC,CAAe;IAC1C,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM,EAAE,CAAC,CAAC,MAAM;oBAChB,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;iBAChD,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"_types.js","sourceRoot":"","sources":["../../src/tools/_types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAuM1C;;;;;;;;sEAQsE;AACtE,MAAM,UAAU,YAAY,CAAC,CAAe;IAC1C,sEAAsE;IACtE,wEAAwE;IACxE,gCAAgC;IAChC,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,KAAK,GAAG,CAAC;IAChE,IAAI,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACtB,IAAI,WAAW,GAAI,CAA4D,CAAC,WAAW,CAAC;IAC5F,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,CAAC;YACH,IAAI,OAAO,MAAM,KAAK,QAAQ;gBAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC;YAC3F,IAAI,WAAW,IAAI,OAAO,WAAW,CAAC,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAChE,WAAW,GAAG,EAAE,GAAG,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8DAA8D;QAChE,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE;YACP;gBACE,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB;oBACE,IAAI,EAAE,CAAC,CAAC,IAAI;oBACZ,MAAM;oBACN,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;oBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;oBAC/C,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBACxC,EACD,IAAI,EACJ,CAAC,CACF;aACF;SACF;KACF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;KAC3C,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mneme-ai/mcp",
3
- "version": "1.10.0",
3
+ "version": "1.17.2",
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",
@@ -37,8 +37,8 @@
37
37
  "node": ">=22.13.0 <25.0.0"
38
38
  },
39
39
  "dependencies": {
40
- "@mneme-ai/core": "1.10.0",
41
- "@mneme-ai/embeddings": "1.10.0",
40
+ "@mneme-ai/core": "1.17.2",
41
+ "@mneme-ai/embeddings": "1.17.2",
42
42
  "@modelcontextprotocol/sdk": "^1.0.4"
43
43
  }
44
44
  }