@mmnto/mcp 0.30.0 → 0.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,33 @@
1
+ export interface SearchLogEntry {
2
+ timestamp: string;
3
+ query: string;
4
+ typeFilter?: string;
5
+ resultCount: number;
6
+ durationMs: number;
7
+ topScore: number | null;
8
+ error?: string;
9
+ }
10
+ export interface SearchStats {
11
+ totalCalls: number;
12
+ avgDuration: number;
13
+ avgTopScore: number;
14
+ }
15
+ /**
16
+ * Set the directory where the `.search-log.jsonl` file will be written.
17
+ * Must be called before the first `logSearch` to enable file logging.
18
+ */
19
+ export declare function setLogDir(totemDir: string): void;
20
+ /**
21
+ * Record a search call.
22
+ *
23
+ * - Always appends to the in-memory array.
24
+ * - Best-effort appends a single JSON line to `{totemDir}/.search-log.jsonl`.
25
+ * File writes are fire-and-forget — failures are silently swallowed because
26
+ * writing to stdout/stderr would corrupt the MCP stdio transport.
27
+ */
28
+ export declare function logSearch(entry: SearchLogEntry): void;
29
+ /**
30
+ * Compute aggregate stats from the in-memory search log.
31
+ */
32
+ export declare function getSearchStats(): SearchStats;
33
+ //# sourceMappingURL=search-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-log.d.ts","sourceRoot":"","sources":["../src/search-log.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAgBrD;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,WAAW,CAc5C"}
@@ -0,0 +1,52 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ /** In-memory log of search calls for the current server session. */
4
+ const entries = [];
5
+ /** Resolved path to the JSONL log file, set on first logSearch call. */
6
+ let logFilePath;
7
+ /**
8
+ * Set the directory where the `.search-log.jsonl` file will be written.
9
+ * Must be called before the first `logSearch` to enable file logging.
10
+ */
11
+ export function setLogDir(totemDir) {
12
+ logFilePath = path.join(totemDir, '.search-log.jsonl');
13
+ }
14
+ /**
15
+ * Record a search call.
16
+ *
17
+ * - Always appends to the in-memory array.
18
+ * - Best-effort appends a single JSON line to `{totemDir}/.search-log.jsonl`.
19
+ * File writes are fire-and-forget — failures are silently swallowed because
20
+ * writing to stdout/stderr would corrupt the MCP stdio transport.
21
+ */
22
+ export function logSearch(entry) {
23
+ entries.push(entry);
24
+ // Best-effort, non-blocking file append
25
+ if (logFilePath) {
26
+ try {
27
+ const line = JSON.stringify(entry) + '\n';
28
+ // fs.promises.appendFile returns a promise — we intentionally do NOT await it.
29
+ // The .catch() swallows any write error silently (no stdout/stderr writes).
30
+ fs.promises.appendFile(logFilePath, line, 'utf-8').catch(() => {
31
+ // Intentionally empty — must not write to stdout/stderr (MCP stdio transport)
32
+ });
33
+ }
34
+ catch {
35
+ // Intentionally empty — synchronous errors from JSON.stringify etc.
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Compute aggregate stats from the in-memory search log.
41
+ */
42
+ export function getSearchStats() {
43
+ const totalCalls = entries.length;
44
+ if (totalCalls === 0) {
45
+ return { totalCalls: 0, avgDuration: 0, avgTopScore: 0 };
46
+ }
47
+ const avgDuration = entries.reduce((sum, e) => sum + e.durationMs, 0) / totalCalls;
48
+ const scored = entries.filter((e) => e.topScore !== null);
49
+ const avgTopScore = scored.length > 0 ? scored.reduce((sum, e) => sum + e.topScore, 0) / scored.length : 0;
50
+ return { totalCalls, avgDuration, avgTopScore };
51
+ }
52
+ //# sourceMappingURL=search-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-log.js","sourceRoot":"","sources":["../src/search-log.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAkBlC,oEAAoE;AACpE,MAAM,OAAO,GAAqB,EAAE,CAAC;AAErC,wEAAwE;AACxE,IAAI,WAA+B,CAAC;AAEpC;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB;IACxC,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;AACzD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEpB,wCAAwC;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;YAC1C,+EAA+E;YAC/E,4EAA4E;YAC5E,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC5D,8EAA8E;YAChF,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,oEAAoE;QACtE,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAElC,IAAI,UAAU,KAAK,CAAC,EAAE,CAAC;QACrB,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,CAAC;IAC3D,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC;IAEnF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC1D,MAAM,WAAW,GACf,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAS,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAE1F,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC;AAClD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"add-lesson.d.ts","sourceRoot":"","sources":["../../src/tools/add-lesson.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkGzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkFzD"}
1
+ {"version":3,"file":"add-lesson.d.ts","sourceRoot":"","sources":["../../src/tools/add-lesson.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAkGzE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAmFzD"}
@@ -2,7 +2,7 @@ import { spawn } from 'node:child_process';
2
2
  import * as fs from 'node:fs';
3
3
  import * as path from 'node:path';
4
4
  import { z } from 'zod';
5
- import { generateLessonHeading, sanitize } from '@mmnto/totem';
5
+ import { generateLessonHeading, sanitize, writeLessonFileAsync } from '@mmnto/totem';
6
6
  import { getContext, reconnectStore } from '../context.js';
7
7
  import { formatXmlResponse } from '../xml-format.js';
8
8
  /**
@@ -91,7 +91,7 @@ function runSync(projectRoot) {
91
91
  }
92
92
  export function registerAddLesson(server) {
93
93
  server.registerTool('add_lesson', {
94
- description: 'Persist a lesson learned to .totem/lessons.md. An incremental re-index runs automatically and the result is returned.',
94
+ description: 'Persist a lesson learned to .totem/lessons/. An incremental re-index runs automatically and the result is returned.',
95
95
  inputSchema: {
96
96
  lesson: z.string().describe('The lesson text to persist'),
97
97
  context_tags: z
@@ -106,14 +106,15 @@ export function registerAddLesson(server) {
106
106
  const { projectRoot, config } = await getContext();
107
107
  const totemDir = path.join(projectRoot, config.totemDir);
108
108
  await fs.promises.mkdir(totemDir, { recursive: true });
109
- const lessonsPath = path.join(totemDir, 'lessons.md');
109
+ const lessonsDir = path.join(totemDir, 'lessons');
110
110
  const safeLesson = sanitize(lesson);
111
111
  const safeTags = context_tags.length > 0
112
112
  ? context_tags.map((t) => sanitize(t).replace(/\n/g, ' ')).join(', ')
113
113
  : 'manual';
114
114
  const heading = generateLessonHeading(safeLesson);
115
- const entry = `\n## Lesson — ${heading}\n\n` + `**Tags:** ${safeTags}\n\n` + `${safeLesson.trim()}\n`;
116
- await fs.promises.appendFile(lessonsPath, entry, 'utf-8');
115
+ const entry = `## Lesson — ${heading}\n\n` + `**Tags:** ${safeTags}\n\n` + `${safeLesson.trim()}\n`;
116
+ const writtenPath = await writeLessonFileAsync(lessonsDir, entry);
117
+ const fileName = path.basename(writtenPath);
117
118
  // Await sync so the LLM gets definitive success/failure confirmation.
118
119
  // Debounce: skip if a sync is already in flight.
119
120
  let syncMessage;
@@ -144,7 +145,7 @@ export function registerAddLesson(server) {
144
145
  content: [
145
146
  {
146
147
  type: 'text',
147
- text: formatXmlResponse('lesson_added', `Lesson saved to ${config.totemDir}/lessons.md. ${syncMessage}`),
148
+ text: formatXmlResponse('lesson_added', `Lesson saved to ${config.totemDir}/lessons/${fileName}. ${syncMessage}`),
148
149
  },
149
150
  ],
150
151
  };
@@ -1 +1 @@
1
- {"version":3,"file":"add-lesson.js","sourceRoot":"","sources":["../../src/tools/add-lesson.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAGlC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC;QAC5D,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;IAC3E,CAAC;IACD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC;QACvD,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;IACnE,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,eAAe,GAAG,MAAM,CAAC;AAC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEhC,2DAA2D;AAC3D,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB;;;GAGG;AACH,SAAS,QAAQ,CAAC,KAA+B;IAC/C,IAAI,KAAK,CAAC,GAAG,IAAI,IAAI;QAAE,OAAO;IAC9B,IAAI,CAAC;QACH,yFAAyF;QACzF,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;YACjC,KAAK,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAClF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,KAAK,CAAC,IAAI,EAAE,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,OAAO,CAAC,WAAmB;IAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAC;QACrD,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,MAAM,GAAG,KAAK,CAAC;QAEnB,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE;YAC7B,GAAG,EAAE,WAAW;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,qCAAqC;YAC7E,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;YACjC,KAAK,EAAE,IAAI;YACX,WAAW,EAAE,IAAI;SAClB,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,EAAE;YAC/B,IAAI,MAAM;gBAAE,OAAO;YACnB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,UAAU,IAAI,GAAG,CAAC,MAAM,CAAC;YACzB,IAAI,UAAU,GAAG,gBAAgB,EAAE,CAAC;gBAClC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxE,MAAM,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACxC,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAClC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,2BAA2B,EAAE,CAAC,CAAC;QACnE,CAAC,EAAE,eAAe,CAAC,CAAC;QAEpB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;YACzB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;YACxB,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,gBAAgB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,MAAiB;IACjD,MAAM,CAAC,YAAY,CACjB,YAAY,EACZ;QACE,WAAW,EACT,uHAAuH;QACzH,WAAW,EAAE;YACX,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;YACzD,YAAY,EAAE,CAAC;iBACZ,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;iBACjB,QAAQ,CAAC,8DAA8D,CAAC;SAC5E;QACD,WAAW,EAAE;YACX,YAAY,EAAE,KAAK;SACpB;KACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;QACjC,IAAI,CAAC;YACH,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,EAAE,CAAC;YAEnD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;YACzD,MAAM,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YACtD,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACpC,MAAM,QAAQ,GACZ,YAAY,CAAC,MAAM,GAAG,CAAC;gBACrB,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;gBACrE,CAAC,CAAC,QAAQ,CAAC;YACf,MAAM,OAAO,GAAG,qBAAqB,CAAC,UAAU,CAAC,CAAC;YAElD,MAAM,KAAK,GACT,iBAAiB,OAAO,MAAM,GAAG,aAAa,QAAQ,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC;YAE1F,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAE1D,sEAAsE;YACtE,iDAAiD;YACjD,IAAI,WAAmB,CAAC;YACxB,IAAI,WAAW,EAAE,CAAC;gBAChB,WAAW;oBACT,gFAAgF,CAAC;YACrF,CAAC;iBAAM,CAAC;gBACN,WAAW,GAAG,IAAI,CAAC;gBACnB,IAAI,CAAC;oBACH,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,CAAC;oBAEvD,6DAA6D;oBAC7D,IAAI,CAAC;wBACH,MAAM,cAAc,EAAE,CAAC;oBACzB,CAAC;oBAAC,MAAM,CAAC;wBACP,kDAAkD;oBACpD,CAAC;oBAED,WAAW,GAAG,OAAO;wBACnB,CAAC,CAAC,gCAAgC,MAAM,CAAC,IAAI,EAAE,EAAE;wBACjD,CAAC,CAAC,gBAAgB,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBACtC,CAAC;wBAAS,CAAC;oBACT,WAAW,GAAG,KAAK,CAAC;gBACtB,CAAC;YACH,CAAC;YAED,OAAO;gBACL,OAAO,EAAE;oBACP;wBACE,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,iBAAiB,CACrB,cAAc,EACd,mBAAmB,MAAM,CAAC,QAAQ,gBAAgB,WAAW,EAAE,CAChE;qBACF;iBACF;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,eAAe,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,CAAC,eAAe,CAAC;gBACzD,CAAC,CAAC,eAAe;gBACjB,CAAC,CAAC,uCAAuC,eAAe,EAAE,CAAC;YAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;QAChF,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"add-lesson.js","sourceRoot":"","sources":["../../src/tools/add-lesson.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"search-knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/search-knowledge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAuDzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAkD/D"}
1
+ {"version":3,"file":"search-knowledge.d.ts","sourceRoot":"","sources":["../../src/tools/search-knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgGzE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAwH/D"}
@@ -1,7 +1,46 @@
1
+ import * as path from 'node:path';
1
2
  import { z } from 'zod';
2
3
  import { ContentTypeSchema } from '@mmnto/totem';
3
4
  import { getContext, reconnectStore } from '../context.js';
5
+ import { logSearch, setLogDir } from '../search-log.js';
4
6
  import { formatSystemWarning, formatXmlResponse } from '../xml-format.js';
7
+ /** Session-level flag — healthCheck runs only on the first search call. */
8
+ let firstHealthCheckDone = false;
9
+ /**
10
+ * Run a one-time health check on the LanceDB index and return any warnings.
11
+ * Returns null when healthy or after the first call (cached).
12
+ */
13
+ async function runFirstQueryHealthCheck() {
14
+ if (firstHealthCheckDone)
15
+ return null;
16
+ firstHealthCheckDone = true;
17
+ try {
18
+ const { store } = await getContext();
19
+ const result = await store.healthCheck();
20
+ if (result.healthy)
21
+ return null;
22
+ // Build actionable warning lines
23
+ const lines = ['Index health issues detected:'];
24
+ for (const issue of result.issues) {
25
+ lines.push(`- ${issue}`);
26
+ }
27
+ lines.push('');
28
+ lines.push('Run `totem sync --rebuild` to re-index and fix these issues.');
29
+ return formatSystemWarning(lines.join('\n'));
30
+ }
31
+ catch (err) {
32
+ // Health check itself failed — don't block the search. Log to disk for debugging.
33
+ logSearch({
34
+ timestamp: new Date().toISOString(),
35
+ query: 'internal:health-check',
36
+ resultCount: 0,
37
+ durationMs: 0,
38
+ topScore: null,
39
+ error: `Health check failed: ${err instanceof Error ? err.message : String(err)}`,
40
+ });
41
+ return null;
42
+ }
43
+ }
5
44
  async function performSearch(query, typeFilter, maxResults) {
6
45
  const { store, config } = await getContext();
7
46
  const results = await store.search({
@@ -51,28 +90,93 @@ export function registerSearchKnowledge(server) {
51
90
  readOnlyHint: true,
52
91
  },
53
92
  }, async ({ query, type_filter, max_results }) => {
93
+ const start = Date.now();
54
94
  try {
55
- return await performSearch(query, type_filter, max_results);
56
- }
57
- catch (originalErr) {
58
- // Any LanceDB error could indicate a stale handle (e.g. files deleted
59
- // during a full sync rebuild). Reconnect and retry once before failing.
95
+ // Initialize log directory on first call (lazy avoids loading config at import time)
60
96
  try {
61
- await reconnectStore();
62
- return await performSearch(query, type_filter, max_results);
97
+ const { projectRoot, config } = await getContext();
98
+ setLogDir(path.join(projectRoot, config.totemDir));
63
99
  }
64
- catch (retryErr) {
65
- // Retry failed report both errors for diagnostics
66
- const originalMessage = originalErr instanceof Error ? originalErr.message : String(originalErr);
67
- const retryMessage = retryErr instanceof Error ? retryErr.message : String(retryErr);
68
- const text = originalMessage === retryMessage
69
- ? `[Totem Error] Search failed: ${originalMessage}`
70
- : `[Totem Error] Search failed. Initial error: ${originalMessage}. Retry after reconnect also failed: ${retryMessage}`;
71
- return {
72
- content: [{ type: 'text', text }],
73
- isError: true,
100
+ catch (err) {
101
+ // Non-fatallogging just won't write to disk. Record the failure.
102
+ logSearch({
103
+ timestamp: new Date().toISOString(),
104
+ query: 'internal:set-log-dir',
105
+ resultCount: 0,
106
+ durationMs: 0,
107
+ topScore: null,
108
+ error: `Failed to set log dir: ${err instanceof Error ? err.message : String(err)}`,
109
+ });
110
+ }
111
+ // First-query health gate — runs once per session, non-blocking
112
+ const healthWarning = await runFirstQueryHealthCheck();
113
+ let result;
114
+ try {
115
+ result = await performSearch(query, type_filter, max_results);
116
+ }
117
+ catch (originalErr) {
118
+ // Any LanceDB error could indicate a stale handle (e.g. files deleted
119
+ // during a full sync rebuild). Reconnect and retry once before failing.
120
+ try {
121
+ await reconnectStore();
122
+ result = await performSearch(query, type_filter, max_results);
123
+ }
124
+ catch (retryErr) {
125
+ // Retry failed — report both errors for diagnostics
126
+ const originalMessage = originalErr instanceof Error ? originalErr.message : String(originalErr);
127
+ const retryMessage = retryErr instanceof Error ? retryErr.message : String(retryErr);
128
+ const errorText = originalMessage === retryMessage
129
+ ? `[Totem Error] Search failed: ${originalMessage}`
130
+ : `[Totem Error] Search failed. Initial error: ${originalMessage}. Retry after reconnect also failed: ${retryMessage}`;
131
+ logSearch({
132
+ timestamp: new Date().toISOString(),
133
+ query,
134
+ typeFilter: type_filter,
135
+ resultCount: 0,
136
+ durationMs: Date.now() - start,
137
+ topScore: null,
138
+ error: errorText,
139
+ });
140
+ return {
141
+ content: [{ type: 'text', text: errorText }],
142
+ isError: true,
143
+ };
144
+ }
145
+ }
146
+ // Extract result count and top score from the successful response
147
+ const resultText = result.content[0]?.text ?? '';
148
+ const scoreMatches = [...resultText.matchAll(/\*\*Score:\*\* ([\d.]+)/g)];
149
+ const topScore = scoreMatches.length > 0 ? parseFloat(scoreMatches[0][1]) : null;
150
+ logSearch({
151
+ timestamp: new Date().toISOString(),
152
+ query,
153
+ typeFilter: type_filter,
154
+ resultCount: scoreMatches.length,
155
+ durationMs: Date.now() - start,
156
+ topScore,
157
+ });
158
+ // Prepend health warning to the first search result if issues were found
159
+ if (healthWarning && result.content.length > 0) {
160
+ result.content[0] = {
161
+ type: 'text',
162
+ text: healthWarning + '\n\n' + result.content[0].text, // totem-ignore — healthWarning is system-generated, text is already XML-wrapped
74
163
  };
75
164
  }
165
+ return result;
166
+ }
167
+ catch (err) {
168
+ // Catch-all: log unexpected errors that bypass the inner try/catch
169
+ const errorMessage = err instanceof Error ? err.message : String(err);
170
+ logSearch({
171
+ timestamp: new Date().toISOString(),
172
+ query,
173
+ typeFilter: type_filter,
174
+ resultCount: 0,
175
+ durationMs: Date.now() - start,
176
+ topScore: null,
177
+ error: errorMessage,
178
+ });
179
+ throw err;
76
180
  }
77
181
  });
78
182
  }
@@ -1 +1 @@
1
- {"version":3,"file":"search-knowledge.js","sourceRoot":"","sources":["../../src/tools/search-knowledge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-knowledge.js","sourceRoot":"","sources":["../../src/tools/search-knowledge.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/mcp",
3
- "version": "0.30.0",
3
+ "version": "0.32.0",
4
4
  "description": "MCP server for Totem — AI persistent memory and context layer",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -18,7 +18,7 @@
18
18
  "@modelcontextprotocol/sdk": "^1.0.0",
19
19
  "jiti": "^2.4.0",
20
20
  "zod": "^3.24.0",
21
- "@mmnto/totem": "0.30.0"
21
+ "@mmnto/totem": "0.32.0"
22
22
  },
23
23
  "devDependencies": {
24
24
  "@types/node": "^22.0.0",