agent-knowledge 1.0.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.
Files changed (130) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/LICENSE +21 -0
  3. package/README.md +191 -0
  4. package/dist/dashboard.d.ts +4 -0
  5. package/dist/dashboard.d.ts.map +1 -0
  6. package/dist/dashboard.js +434 -0
  7. package/dist/dashboard.js.map +1 -0
  8. package/dist/embeddings/claude.d.ts +21 -0
  9. package/dist/embeddings/claude.d.ts.map +1 -0
  10. package/dist/embeddings/claude.js +84 -0
  11. package/dist/embeddings/claude.js.map +1 -0
  12. package/dist/embeddings/factory.d.ts +9 -0
  13. package/dist/embeddings/factory.d.ts.map +1 -0
  14. package/dist/embeddings/factory.js +60 -0
  15. package/dist/embeddings/factory.js.map +1 -0
  16. package/dist/embeddings/gemini.d.ts +21 -0
  17. package/dist/embeddings/gemini.d.ts.map +1 -0
  18. package/dist/embeddings/gemini.js +86 -0
  19. package/dist/embeddings/gemini.js.map +1 -0
  20. package/dist/embeddings/index.d.ts +4 -0
  21. package/dist/embeddings/index.d.ts.map +1 -0
  22. package/dist/embeddings/index.js +3 -0
  23. package/dist/embeddings/index.js.map +1 -0
  24. package/dist/embeddings/local.d.ts +20 -0
  25. package/dist/embeddings/local.d.ts.map +1 -0
  26. package/dist/embeddings/local.js +73 -0
  27. package/dist/embeddings/local.js.map +1 -0
  28. package/dist/embeddings/openai.d.ts +20 -0
  29. package/dist/embeddings/openai.d.ts.map +1 -0
  30. package/dist/embeddings/openai.js +84 -0
  31. package/dist/embeddings/openai.js.map +1 -0
  32. package/dist/embeddings/types.d.ts +39 -0
  33. package/dist/embeddings/types.d.ts.map +1 -0
  34. package/dist/embeddings/types.js +12 -0
  35. package/dist/embeddings/types.js.map +1 -0
  36. package/dist/index.d.ts +2 -0
  37. package/dist/index.d.ts.map +1 -0
  38. package/dist/index.js +18 -0
  39. package/dist/index.js.map +1 -0
  40. package/dist/knowledge/distill.d.ts +27 -0
  41. package/dist/knowledge/distill.d.ts.map +1 -0
  42. package/dist/knowledge/distill.js +407 -0
  43. package/dist/knowledge/distill.js.map +1 -0
  44. package/dist/knowledge/git.d.ts +30 -0
  45. package/dist/knowledge/git.d.ts.map +1 -0
  46. package/dist/knowledge/git.js +228 -0
  47. package/dist/knowledge/git.js.map +1 -0
  48. package/dist/knowledge/search.d.ts +20 -0
  49. package/dist/knowledge/search.d.ts.map +1 -0
  50. package/dist/knowledge/search.js +72 -0
  51. package/dist/knowledge/search.js.map +1 -0
  52. package/dist/knowledge/store.d.ts +47 -0
  53. package/dist/knowledge/store.d.ts.map +1 -0
  54. package/dist/knowledge/store.js +173 -0
  55. package/dist/knowledge/store.js.map +1 -0
  56. package/dist/search/excerpt.d.ts +12 -0
  57. package/dist/search/excerpt.d.ts.map +1 -0
  58. package/dist/search/excerpt.js +28 -0
  59. package/dist/search/excerpt.js.map +1 -0
  60. package/dist/search/fuzzy.d.ts +15 -0
  61. package/dist/search/fuzzy.d.ts.map +1 -0
  62. package/dist/search/fuzzy.js +81 -0
  63. package/dist/search/fuzzy.js.map +1 -0
  64. package/dist/search/tfidf.d.ts +19 -0
  65. package/dist/search/tfidf.d.ts.map +1 -0
  66. package/dist/search/tfidf.js +200 -0
  67. package/dist/search/tfidf.js.map +1 -0
  68. package/dist/search/types.d.ts +19 -0
  69. package/dist/search/types.d.ts.map +1 -0
  70. package/dist/search/types.js +2 -0
  71. package/dist/search/types.js.map +1 -0
  72. package/dist/server.d.ts +3 -0
  73. package/dist/server.d.ts.map +1 -0
  74. package/dist/server.js +518 -0
  75. package/dist/server.js.map +1 -0
  76. package/dist/sessions/indexer.d.ts +15 -0
  77. package/dist/sessions/indexer.d.ts.map +1 -0
  78. package/dist/sessions/indexer.js +182 -0
  79. package/dist/sessions/indexer.js.map +1 -0
  80. package/dist/sessions/parser.d.ts +58 -0
  81. package/dist/sessions/parser.d.ts.map +1 -0
  82. package/dist/sessions/parser.js +142 -0
  83. package/dist/sessions/parser.js.map +1 -0
  84. package/dist/sessions/scopes.d.ts +16 -0
  85. package/dist/sessions/scopes.d.ts.map +1 -0
  86. package/dist/sessions/scopes.js +153 -0
  87. package/dist/sessions/scopes.js.map +1 -0
  88. package/dist/sessions/search.d.ts +26 -0
  89. package/dist/sessions/search.d.ts.map +1 -0
  90. package/dist/sessions/search.js +256 -0
  91. package/dist/sessions/search.js.map +1 -0
  92. package/dist/sessions/summary.d.ts +28 -0
  93. package/dist/sessions/summary.d.ts.map +1 -0
  94. package/dist/sessions/summary.js +135 -0
  95. package/dist/sessions/summary.js.map +1 -0
  96. package/dist/types.d.ts +26 -0
  97. package/dist/types.d.ts.map +1 -0
  98. package/dist/types.js +109 -0
  99. package/dist/types.js.map +1 -0
  100. package/dist/ui/app.js +1029 -0
  101. package/dist/ui/index.html +373 -0
  102. package/dist/ui/styles.css +1508 -0
  103. package/dist/ui/ui/app.js +811 -0
  104. package/dist/ui/ui/index.html +300 -0
  105. package/dist/ui/ui/styles.css +1154 -0
  106. package/dist/validate.d.ts +21 -0
  107. package/dist/validate.d.ts.map +1 -0
  108. package/dist/validate.js +86 -0
  109. package/dist/validate.js.map +1 -0
  110. package/dist/vectorstore/chunker.d.ts +48 -0
  111. package/dist/vectorstore/chunker.d.ts.map +1 -0
  112. package/dist/vectorstore/chunker.js +165 -0
  113. package/dist/vectorstore/chunker.js.map +1 -0
  114. package/dist/vectorstore/index.d.ts +5 -0
  115. package/dist/vectorstore/index.d.ts.map +1 -0
  116. package/dist/vectorstore/index.js +3 -0
  117. package/dist/vectorstore/index.js.map +1 -0
  118. package/dist/vectorstore/store.d.ts +139 -0
  119. package/dist/vectorstore/store.d.ts.map +1 -0
  120. package/dist/vectorstore/store.js +500 -0
  121. package/dist/vectorstore/store.js.map +1 -0
  122. package/dist/version.d.ts +2 -0
  123. package/dist/version.d.ts.map +1 -0
  124. package/dist/version.js +2 -0
  125. package/dist/version.js.map +1 -0
  126. package/docs/ARCHITECTURE.md +244 -0
  127. package/docs/DASHBOARD.md +133 -0
  128. package/docs/SETUP.md +178 -0
  129. package/package.json +92 -0
  130. package/scripts/copy-ui.js +6 -0
package/dist/server.js ADDED
@@ -0,0 +1,518 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { CallToolRequestSchema, ListToolsRequestSchema } from '@modelcontextprotocol/sdk/types.js';
3
+ import { listEntries, readEntry, writeEntry, deleteEntry } from './knowledge/store.js';
4
+ import { gitPull, gitPush, gitSync, ensureRepo } from './knowledge/git.js';
5
+ import { searchSessions } from './sessions/search.js';
6
+ import { listSessions, getSessionSummary } from './sessions/summary.js';
7
+ import { scopedSearch } from './sessions/scopes.js';
8
+ import { backgroundIndex } from './sessions/indexer.js';
9
+ import { VectorStore } from './vectorstore/index.js';
10
+ import { getProjectDirs, getSessionFiles, parseSessionFile, extractMessages, getSessionMeta, } from './sessions/parser.js';
11
+ import { getConfig, loadPersistedConfig, savePersistedConfig, getConfigLocation } from './types.js';
12
+ import { getVersion } from './version.js';
13
+ const CATEGORIES = ['projects', 'people', 'decisions', 'workflows', 'notes'];
14
+ const SCOPES = ['errors', 'plans', 'configs', 'tools', 'files', 'decisions', 'all'];
15
+ // ── Input validation helpers ─────────────────────────────────────────────────
16
+ function requireString(args, key, label) {
17
+ const val = args[key];
18
+ if (val === undefined || val === null || typeof val !== 'string') {
19
+ throw new Error(`Missing or invalid required parameter: ${label ?? key} (expected string)`);
20
+ }
21
+ if (val.length === 0) {
22
+ throw new Error(`Parameter ${label ?? key} must not be empty`);
23
+ }
24
+ return val;
25
+ }
26
+ function optionalString(args, key) {
27
+ const val = args[key];
28
+ if (val === undefined || val === null)
29
+ return undefined;
30
+ if (typeof val !== 'string') {
31
+ throw new Error(`Parameter ${key} must be a string`);
32
+ }
33
+ return val;
34
+ }
35
+ function optionalNumber(args, key, min, max) {
36
+ const val = args[key];
37
+ if (val === undefined || val === null)
38
+ return undefined;
39
+ const num = typeof val === 'number' ? val : Number(val);
40
+ if (isNaN(num)) {
41
+ throw new Error(`Parameter ${key} must be a number`);
42
+ }
43
+ if (min !== undefined && num < min) {
44
+ throw new Error(`Parameter ${key} must be >= ${min}`);
45
+ }
46
+ if (max !== undefined && num > max) {
47
+ throw new Error(`Parameter ${key} must be <= ${max}`);
48
+ }
49
+ return num;
50
+ }
51
+ function optionalBoolean(args, key) {
52
+ const val = args[key];
53
+ if (val === undefined || val === null)
54
+ return undefined;
55
+ if (typeof val === 'boolean')
56
+ return val;
57
+ if (val === 'true')
58
+ return true;
59
+ if (val === 'false')
60
+ return false;
61
+ throw new Error(`Parameter ${key} must be a boolean`);
62
+ }
63
+ function validateEnum(val, allowed, key) {
64
+ if (val === undefined)
65
+ return undefined;
66
+ if (!allowed.includes(val)) {
67
+ throw new Error(`Parameter ${key} must be one of: ${allowed.join(', ')}`);
68
+ }
69
+ return val;
70
+ }
71
+ export function createServer() {
72
+ const server = new Server({ name: 'agent-knowledge', version: getVersion() }, { capabilities: { tools: {} } });
73
+ server.setRequestHandler(ListToolsRequestSchema, async () => ({
74
+ tools: [
75
+ {
76
+ name: 'knowledge_list',
77
+ description: 'List knowledge base entries. Optionally filter by category or tag. ' +
78
+ 'Returns an array of entry paths with their frontmatter metadata.',
79
+ inputSchema: {
80
+ type: 'object',
81
+ properties: {
82
+ category: {
83
+ type: 'string',
84
+ enum: [...CATEGORIES],
85
+ description: 'Filter by category (projects, people, decisions, workflows, notes)',
86
+ },
87
+ tag: {
88
+ type: 'string',
89
+ description: 'Filter by tag — matches entries whose frontmatter tags array contains this value',
90
+ },
91
+ },
92
+ },
93
+ },
94
+ {
95
+ name: 'knowledge_read',
96
+ description: 'Read the full content of a knowledge base entry by its path (relative to the memory dir). ' +
97
+ 'Returns the raw markdown including frontmatter.',
98
+ inputSchema: {
99
+ type: 'object',
100
+ properties: {
101
+ path: {
102
+ type: 'string',
103
+ description: "Relative path to the entry, e.g. 'projects/my-project.md'",
104
+ },
105
+ },
106
+ required: ['path'],
107
+ },
108
+ },
109
+ {
110
+ name: 'knowledge_write',
111
+ description: 'Create or update a knowledge base entry. The file is written under the given category directory. ' +
112
+ 'Content should be markdown (frontmatter is optional). ' +
113
+ 'Automatically commits and pushes after writing.',
114
+ inputSchema: {
115
+ type: 'object',
116
+ properties: {
117
+ category: {
118
+ type: 'string',
119
+ enum: [...CATEGORIES],
120
+ description: 'Category directory to write into',
121
+ },
122
+ filename: {
123
+ type: 'string',
124
+ description: "Filename (with or without .md extension), e.g. 'my-project.md'",
125
+ },
126
+ content: {
127
+ type: 'string',
128
+ description: 'Full markdown content for the entry',
129
+ },
130
+ },
131
+ required: ['category', 'filename', 'content'],
132
+ },
133
+ },
134
+ {
135
+ name: 'knowledge_delete',
136
+ description: 'Delete a knowledge base entry by path. Automatically commits and pushes after deletion.',
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: {
140
+ path: {
141
+ type: 'string',
142
+ description: "Relative path to the entry to delete, e.g. 'notes/old-note.md'",
143
+ },
144
+ },
145
+ required: ['path'],
146
+ },
147
+ },
148
+ {
149
+ name: 'knowledge_sync',
150
+ description: 'Synchronize the knowledge base with the remote git repository (pull then push). ' +
151
+ 'Use this to ensure you have the latest entries from other machines/sessions.',
152
+ inputSchema: {
153
+ type: 'object',
154
+ properties: {},
155
+ },
156
+ },
157
+ {
158
+ name: 'knowledge_sessions',
159
+ description: 'List Claude Code sessions with metadata (timestamps, branch, message counts, preview). ' +
160
+ 'Optionally filter to a specific project. Returns sessions sorted newest first.',
161
+ inputSchema: {
162
+ type: 'object',
163
+ properties: {
164
+ project: {
165
+ type: 'string',
166
+ description: 'Filter by project name (substring match)',
167
+ },
168
+ },
169
+ },
170
+ },
171
+ {
172
+ name: 'knowledge_search',
173
+ description: 'Hybrid semantic + TF-IDF search across Claude Code session conversations. ' +
174
+ 'Results are ranked by blended relevance (semantic similarity + keyword match) × recency. ' +
175
+ 'Use this to find past discussions, decisions, code snippets, or error messages.',
176
+ inputSchema: {
177
+ type: 'object',
178
+ properties: {
179
+ query: {
180
+ type: 'string',
181
+ description: 'Search query — supports keywords and phrases',
182
+ },
183
+ project: {
184
+ type: 'string',
185
+ description: 'Restrict search to sessions from this project',
186
+ },
187
+ role: {
188
+ type: 'string',
189
+ enum: ['user', 'assistant', 'all'],
190
+ description: 'Filter by message role (default: all)',
191
+ },
192
+ max_results: {
193
+ type: 'number',
194
+ description: 'Maximum number of results to return (default: 20)',
195
+ },
196
+ ranked: {
197
+ type: 'boolean',
198
+ description: 'Use TF-IDF ranking (default: true). Set false for regex mode.',
199
+ },
200
+ semantic: {
201
+ type: 'boolean',
202
+ description: 'Blend semantic vector similarity with TF-IDF (default: true). Falls back to pure TF-IDF if embeddings unavailable.',
203
+ },
204
+ },
205
+ required: ['query'],
206
+ },
207
+ },
208
+ {
209
+ name: 'knowledge_get',
210
+ description: 'Retrieve the full conversation from a specific session. ' +
211
+ 'Optionally include tool-use messages and/or limit to the last N messages.',
212
+ inputSchema: {
213
+ type: 'object',
214
+ properties: {
215
+ session_id: {
216
+ type: 'string',
217
+ description: 'The session UUID to retrieve',
218
+ },
219
+ project: {
220
+ type: 'string',
221
+ description: 'Project name to narrow lookup',
222
+ },
223
+ include_tools: {
224
+ type: 'boolean',
225
+ description: 'Include tool_use and tool_result messages (default: false)',
226
+ },
227
+ tail: {
228
+ type: 'number',
229
+ description: 'Only return the last N messages from the conversation',
230
+ },
231
+ },
232
+ required: ['session_id'],
233
+ },
234
+ },
235
+ {
236
+ name: 'knowledge_summary',
237
+ description: 'Get a concise summary of a session: topics discussed, tools used, files modified. ' +
238
+ 'Useful for quickly understanding what happened in a past session.',
239
+ inputSchema: {
240
+ type: 'object',
241
+ properties: {
242
+ session_id: {
243
+ type: 'string',
244
+ description: 'The session UUID to summarize',
245
+ },
246
+ project: {
247
+ type: 'string',
248
+ description: 'Project name to narrow lookup',
249
+ },
250
+ },
251
+ required: ['session_id'],
252
+ },
253
+ },
254
+ {
255
+ name: 'knowledge_recall',
256
+ description: 'Scoped hybrid search — search within a specific domain like errors, ' +
257
+ 'plans, configs, tool usage, file references, or decisions. ' +
258
+ 'Results ranked by blended relevance (semantic + keyword) × recency. ' +
259
+ 'More targeted than knowledge_search when you know what kind of information you need.',
260
+ inputSchema: {
261
+ type: 'object',
262
+ properties: {
263
+ scope: {
264
+ type: 'string',
265
+ enum: [...SCOPES],
266
+ description: 'Search scope: errors (stack traces, exceptions), plans (architecture, TODOs), ' +
267
+ 'configs (settings, env vars), tools (MCP tool calls), ' +
268
+ 'files (file paths, code refs), decisions (trade-offs, choices), all (no filter)',
269
+ },
270
+ query: {
271
+ type: 'string',
272
+ description: 'Search query within the chosen scope',
273
+ },
274
+ project: {
275
+ type: 'string',
276
+ description: 'Restrict to sessions from this project',
277
+ },
278
+ max_results: {
279
+ type: 'number',
280
+ description: 'Maximum number of results (default: 20)',
281
+ },
282
+ semantic: {
283
+ type: 'boolean',
284
+ description: 'Blend semantic vector similarity with TF-IDF (default: true). Falls back to pure TF-IDF if embeddings unavailable.',
285
+ },
286
+ },
287
+ required: ['scope', 'query'],
288
+ },
289
+ },
290
+ {
291
+ name: 'knowledge_index_status',
292
+ description: 'Get vector store statistics: total entries, breakdown by source (knowledge vs session), ' +
293
+ 'database size, active embedding provider, and vector dimensions.',
294
+ inputSchema: {
295
+ type: 'object',
296
+ properties: {},
297
+ },
298
+ },
299
+ {
300
+ name: 'knowledge_config',
301
+ description: 'View or update knowledge configuration. Without arguments, returns current config. ' +
302
+ 'With arguments, persists settings to knowledge-config.json. ' +
303
+ 'Set git_url to enable git sync for the knowledge base. ' +
304
+ 'Settings are persisted across restarts. Env vars override persisted values.',
305
+ inputSchema: {
306
+ type: 'object',
307
+ properties: {
308
+ git_url: {
309
+ type: 'string',
310
+ description: "Git remote URL for the knowledge base (e.g. 'https://github.com/user/memory.git'). Set to empty string to remove.",
311
+ },
312
+ memory_dir: {
313
+ type: 'string',
314
+ description: 'Local directory for the knowledge base. Set to empty string to reset to default.',
315
+ },
316
+ auto_distill: {
317
+ type: 'boolean',
318
+ description: 'Enable/disable automatic session distillation into the knowledge base (default: true).',
319
+ },
320
+ },
321
+ },
322
+ },
323
+ ],
324
+ }));
325
+ server.setRequestHandler(CallToolRequestSchema, async (request) => {
326
+ const { name, arguments: args = {} } = request.params;
327
+ const a = args;
328
+ const config = getConfig();
329
+ try {
330
+ switch (name) {
331
+ case 'knowledge_list': {
332
+ const category = validateEnum(optionalString(a, 'category'), CATEGORIES, 'category');
333
+ const tag = optionalString(a, 'tag');
334
+ await gitPull(config.memoryDir);
335
+ const entries = listEntries(config.memoryDir, category, tag);
336
+ return ok(entries);
337
+ }
338
+ case 'knowledge_read': {
339
+ const entryPath = requireString(a, 'path');
340
+ await gitPull(config.memoryDir);
341
+ const result = readEntry(config.memoryDir, entryPath);
342
+ return ok(result);
343
+ }
344
+ case 'knowledge_write': {
345
+ const category = requireString(a, 'category');
346
+ const filename = requireString(a, 'filename');
347
+ const content = requireString(a, 'content');
348
+ if (content.length > 1_000_000) {
349
+ return err('Content too large (max 1MB)');
350
+ }
351
+ await gitPull(config.memoryDir);
352
+ const filePath = writeEntry(config.memoryDir, category, filename, content);
353
+ const pushResult = await gitPush(config.memoryDir);
354
+ return ok({ path: filePath, git: pushResult });
355
+ }
356
+ case 'knowledge_delete': {
357
+ const entryPath = requireString(a, 'path');
358
+ await gitPull(config.memoryDir);
359
+ const deleted = deleteEntry(config.memoryDir, entryPath);
360
+ const pushResult = await gitPush(config.memoryDir);
361
+ return ok({ deleted, git: pushResult });
362
+ }
363
+ case 'knowledge_sync': {
364
+ const result = await gitSync(config.memoryDir);
365
+ return ok(result);
366
+ }
367
+ case 'knowledge_sessions': {
368
+ const project = optionalString(a, 'project');
369
+ const sessions = listSessions(project);
370
+ return ok(sessions);
371
+ }
372
+ case 'knowledge_search': {
373
+ const query = requireString(a, 'query');
374
+ const project = optionalString(a, 'project');
375
+ const role = validateEnum(optionalString(a, 'role'), ['user', 'assistant', 'all'], 'role') ?? 'all';
376
+ const maxResults = optionalNumber(a, 'max_results', 1, 500) ?? 20;
377
+ const ranked = optionalBoolean(a, 'ranked') ?? true;
378
+ const semantic = optionalBoolean(a, 'semantic') ?? true;
379
+ const results = await searchSessions(query, {
380
+ project,
381
+ role,
382
+ maxResults,
383
+ ranked,
384
+ semantic,
385
+ });
386
+ return ok(results);
387
+ }
388
+ case 'knowledge_get': {
389
+ const sessionId = requireString(a, 'session_id');
390
+ const projectFilter = optionalString(a, 'project');
391
+ const includeTools = optionalBoolean(a, 'include_tools') ?? false;
392
+ const tail = optionalNumber(a, 'tail', 1, 10000);
393
+ const projects = getProjectDirs().filter((p) => !projectFilter || p.name.toLowerCase().includes(projectFilter.toLowerCase()));
394
+ for (const proj of projects) {
395
+ const sessions = getSessionFiles(proj.path);
396
+ const match = sessions.find((s) => s.id === sessionId);
397
+ if (match) {
398
+ const entries = parseSessionFile(match.file);
399
+ let messages = extractMessages(entries);
400
+ if (!includeTools) {
401
+ messages = messages.filter((m) => m.role === 'user' || m.role === 'assistant');
402
+ }
403
+ if (tail && tail > 0) {
404
+ messages = messages.slice(-tail);
405
+ }
406
+ const meta = getSessionMeta(entries);
407
+ return ok({ meta, messages });
408
+ }
409
+ }
410
+ return err(`Session ${sessionId} not found.`);
411
+ }
412
+ case 'knowledge_summary': {
413
+ const sessionId = requireString(a, 'session_id');
414
+ const project = optionalString(a, 'project');
415
+ const result = getSessionSummary(sessionId, project);
416
+ if (!result) {
417
+ return err(`Session ${sessionId} not found.`);
418
+ }
419
+ return ok(result);
420
+ }
421
+ case 'knowledge_recall': {
422
+ const scope = requireString(a, 'scope');
423
+ validateEnum(scope, SCOPES, 'scope');
424
+ const query = requireString(a, 'query');
425
+ const project = optionalString(a, 'project');
426
+ const maxResults = optionalNumber(a, 'max_results', 1, 500) ?? 20;
427
+ const semantic = optionalBoolean(a, 'semantic') ?? true;
428
+ const results = await scopedSearch(scope, query, {
429
+ project,
430
+ maxResults,
431
+ semantic,
432
+ });
433
+ return ok(results);
434
+ }
435
+ case 'knowledge_index_status': {
436
+ const store = new VectorStore();
437
+ const stats = store.stats();
438
+ return ok(stats);
439
+ }
440
+ case 'knowledge_config': {
441
+ const gitUrlArg = optionalString(a, 'git_url');
442
+ const memoryDirArg = optionalString(a, 'memory_dir');
443
+ const autoDistillArg = optionalBoolean(a, 'auto_distill');
444
+ const hasUpdates = gitUrlArg !== undefined || memoryDirArg !== undefined || autoDistillArg !== undefined;
445
+ if (hasUpdates) {
446
+ const updates = {};
447
+ if (gitUrlArg !== undefined)
448
+ updates.gitUrl = gitUrlArg || undefined;
449
+ if (memoryDirArg !== undefined)
450
+ updates.memoryDir = memoryDirArg || undefined;
451
+ if (autoDistillArg !== undefined)
452
+ updates.autoDistill = autoDistillArg;
453
+ savePersistedConfig(updates);
454
+ const newConfig = getConfig();
455
+ if (gitUrlArg && gitUrlArg.length > 0) {
456
+ const repoResult = ensureRepo(newConfig.memoryDir, newConfig.gitUrl);
457
+ return ok({
458
+ message: 'Config saved',
459
+ repoSetup: repoResult,
460
+ config: {
461
+ gitUrl: newConfig.gitUrl,
462
+ memoryDir: newConfig.memoryDir,
463
+ autoDistill: newConfig.autoDistill,
464
+ embeddingProvider: newConfig.embeddingProvider,
465
+ },
466
+ });
467
+ }
468
+ return ok({
469
+ message: 'Config saved',
470
+ config: {
471
+ gitUrl: newConfig.gitUrl,
472
+ memoryDir: newConfig.memoryDir,
473
+ autoDistill: newConfig.autoDistill,
474
+ embeddingProvider: newConfig.embeddingProvider,
475
+ },
476
+ });
477
+ }
478
+ const persisted = loadPersistedConfig();
479
+ return ok({
480
+ active: {
481
+ gitUrl: config.gitUrl ?? null,
482
+ memoryDir: config.memoryDir,
483
+ autoDistill: config.autoDistill,
484
+ embeddingProvider: config.embeddingProvider,
485
+ embeddingAlpha: config.embeddingAlpha,
486
+ },
487
+ persisted,
488
+ configFile: getConfigLocation(),
489
+ note: 'Config stored at a tool-agnostic location. Env vars override persisted config.',
490
+ });
491
+ }
492
+ default:
493
+ return err(`Unknown tool: ${name}`);
494
+ }
495
+ }
496
+ catch (error) {
497
+ const message = error instanceof Error ? error.message : String(error);
498
+ return err(`Error in ${name}: ${message}`);
499
+ }
500
+ });
501
+ const startupConfig = getConfig();
502
+ const repoResult = ensureRepo(startupConfig.memoryDir, startupConfig.gitUrl);
503
+ console.error(`[knowledge] Repo init: ${repoResult.message}`);
504
+ setTimeout(() => backgroundIndex().catch((err) => console.error('[knowledge] Background index failed:', err)), 5000);
505
+ return server;
506
+ }
507
+ function ok(result) {
508
+ return {
509
+ content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],
510
+ };
511
+ }
512
+ function err(message) {
513
+ return {
514
+ content: [{ type: 'text', text: JSON.stringify({ error: message }, null, 2) }],
515
+ isError: true,
516
+ };
517
+ }
518
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { SessionMessage } from '../vectorstore/chunker.js';
2
+ /**
3
+ * Index a single knowledge entry into the vector store.
4
+ */
5
+ export declare function indexKnowledgeEntry(path: string, content: string): Promise<void>;
6
+ /**
7
+ * Index session messages into the vector store.
8
+ */
9
+ export declare function indexSessionMessages(sessionId: string, messages: SessionMessage[]): Promise<void>;
10
+ /**
11
+ * Background indexer that embeds all unindexed knowledge entries and session
12
+ * messages. Runs non-blocking after server startup.
13
+ */
14
+ export declare function backgroundIndex(): Promise<void>;
15
+ //# sourceMappingURL=indexer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"indexer.d.ts","sourceRoot":"","sources":["../../src/sessions/indexer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAqBhE;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBtF;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAkIrD"}