memory-journal-mcp 3.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 (107) hide show
  1. package/.dockerignore +88 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.md +76 -0
  3. package/.github/ISSUE_TEMPLATE/config.yml +11 -0
  4. package/.github/ISSUE_TEMPLATE/feature_request.md +89 -0
  5. package/.github/ISSUE_TEMPLATE/question.md +63 -0
  6. package/.github/dependabot.yml +110 -0
  7. package/.github/pull_request_template.md +110 -0
  8. package/.github/workflows/DOCKER_DEPLOYMENT_SETUP.md +346 -0
  9. package/.github/workflows/codeql.yml +45 -0
  10. package/.github/workflows/dependabot-auto-merge.yml +42 -0
  11. package/.github/workflows/docker-publish.yml +277 -0
  12. package/.github/workflows/lint-and-test.yml +58 -0
  13. package/.github/workflows/publish-npm.yml +75 -0
  14. package/.github/workflows/secrets-scanning.yml +32 -0
  15. package/.github/workflows/security-update.yml +99 -0
  16. package/.memory-journal-team.db +0 -0
  17. package/.trivyignore +18 -0
  18. package/CHANGELOG.md +19 -0
  19. package/CODE_OF_CONDUCT.md +128 -0
  20. package/CONTRIBUTING.md +209 -0
  21. package/DOCKER_README.md +377 -0
  22. package/Dockerfile +64 -0
  23. package/LICENSE +21 -0
  24. package/README.md +461 -0
  25. package/SECURITY.md +200 -0
  26. package/VERSION +1 -0
  27. package/dist/cli.d.ts +5 -0
  28. package/dist/cli.d.ts.map +1 -0
  29. package/dist/cli.js +42 -0
  30. package/dist/cli.js.map +1 -0
  31. package/dist/constants/ServerInstructions.d.ts +8 -0
  32. package/dist/constants/ServerInstructions.d.ts.map +1 -0
  33. package/dist/constants/ServerInstructions.js +26 -0
  34. package/dist/constants/ServerInstructions.js.map +1 -0
  35. package/dist/database/SqliteAdapter.d.ts +198 -0
  36. package/dist/database/SqliteAdapter.d.ts.map +1 -0
  37. package/dist/database/SqliteAdapter.js +736 -0
  38. package/dist/database/SqliteAdapter.js.map +1 -0
  39. package/dist/filtering/ToolFilter.d.ts +63 -0
  40. package/dist/filtering/ToolFilter.d.ts.map +1 -0
  41. package/dist/filtering/ToolFilter.js +242 -0
  42. package/dist/filtering/ToolFilter.js.map +1 -0
  43. package/dist/github/GitHubIntegration.d.ts +91 -0
  44. package/dist/github/GitHubIntegration.d.ts.map +1 -0
  45. package/dist/github/GitHubIntegration.js +317 -0
  46. package/dist/github/GitHubIntegration.js.map +1 -0
  47. package/dist/handlers/prompts/index.d.ts +28 -0
  48. package/dist/handlers/prompts/index.d.ts.map +1 -0
  49. package/dist/handlers/prompts/index.js +366 -0
  50. package/dist/handlers/prompts/index.js.map +1 -0
  51. package/dist/handlers/resources/index.d.ts +27 -0
  52. package/dist/handlers/resources/index.d.ts.map +1 -0
  53. package/dist/handlers/resources/index.js +453 -0
  54. package/dist/handlers/resources/index.js.map +1 -0
  55. package/dist/handlers/tools/index.d.ts +26 -0
  56. package/dist/handlers/tools/index.d.ts.map +1 -0
  57. package/dist/handlers/tools/index.js +982 -0
  58. package/dist/handlers/tools/index.js.map +1 -0
  59. package/dist/index.d.ts +11 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +13 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/server/McpServer.d.ts +18 -0
  64. package/dist/server/McpServer.d.ts.map +1 -0
  65. package/dist/server/McpServer.js +171 -0
  66. package/dist/server/McpServer.js.map +1 -0
  67. package/dist/types/index.d.ts +300 -0
  68. package/dist/types/index.d.ts.map +1 -0
  69. package/dist/types/index.js +15 -0
  70. package/dist/types/index.js.map +1 -0
  71. package/dist/utils/McpLogger.d.ts +61 -0
  72. package/dist/utils/McpLogger.d.ts.map +1 -0
  73. package/dist/utils/McpLogger.js +113 -0
  74. package/dist/utils/McpLogger.js.map +1 -0
  75. package/dist/utils/logger.d.ts +30 -0
  76. package/dist/utils/logger.d.ts.map +1 -0
  77. package/dist/utils/logger.js +70 -0
  78. package/dist/utils/logger.js.map +1 -0
  79. package/dist/vector/VectorSearchManager.d.ts +63 -0
  80. package/dist/vector/VectorSearchManager.d.ts.map +1 -0
  81. package/dist/vector/VectorSearchManager.js +235 -0
  82. package/dist/vector/VectorSearchManager.js.map +1 -0
  83. package/docker-compose.yml +37 -0
  84. package/eslint.config.js +86 -0
  85. package/mcp-config-example.json +21 -0
  86. package/package.json +71 -0
  87. package/releases/release-notes-v2.2.0.md +165 -0
  88. package/releases/release-notes.md +214 -0
  89. package/releases/v3.0.0.md +236 -0
  90. package/server.json +42 -0
  91. package/src/cli.ts +52 -0
  92. package/src/constants/ServerInstructions.ts +25 -0
  93. package/src/database/SqliteAdapter.ts +952 -0
  94. package/src/filtering/ToolFilter.ts +271 -0
  95. package/src/github/GitHubIntegration.ts +409 -0
  96. package/src/handlers/prompts/index.ts +420 -0
  97. package/src/handlers/resources/index.ts +529 -0
  98. package/src/handlers/tools/index.ts +1081 -0
  99. package/src/index.ts +53 -0
  100. package/src/server/McpServer.ts +230 -0
  101. package/src/types/index.ts +435 -0
  102. package/src/types/sql.js.d.ts +34 -0
  103. package/src/utils/McpLogger.ts +155 -0
  104. package/src/utils/logger.ts +98 -0
  105. package/src/vector/VectorSearchManager.ts +277 -0
  106. package/tools.json +300 -0
  107. package/tsconfig.json +51 -0
@@ -0,0 +1,453 @@
1
+ /**
2
+ * Memory Journal MCP Server - Resource Handlers
3
+ *
4
+ * Exports all MCP resources with annotations following MCP 2025-11-25 spec.
5
+ */
6
+ /**
7
+ * Get all resource definitions for MCP list
8
+ */
9
+ export function getResources() {
10
+ const resources = getAllResourceDefinitions();
11
+ return resources.map(r => ({
12
+ uri: r.uri,
13
+ name: r.name,
14
+ description: r.description,
15
+ mimeType: r.mimeType,
16
+ annotations: r.annotations,
17
+ }));
18
+ }
19
+ /**
20
+ * Read a resource by URI
21
+ */
22
+ export function readResource(uri, db, vectorManager, filterConfig, github) {
23
+ const resources = getAllResourceDefinitions();
24
+ const context = { db, vectorManager, filterConfig, github };
25
+ // Check for exact match first
26
+ const exactMatch = resources.find(r => r.uri === uri);
27
+ if (exactMatch) {
28
+ return Promise.resolve(exactMatch.handler(uri, context));
29
+ }
30
+ // Check for template matches
31
+ for (const resource of resources) {
32
+ if (resource.uri.includes('{')) {
33
+ const pattern = resource.uri.replace(/\{[^}]+\}/g, '([^/]+)');
34
+ const regex = new RegExp(`^${pattern}$`);
35
+ if (regex.test(uri)) {
36
+ return Promise.resolve(resource.handler(uri, context));
37
+ }
38
+ }
39
+ }
40
+ throw new Error(`Unknown resource: ${uri}`);
41
+ }
42
+ /**
43
+ * Execute a raw SQL query on the database
44
+ */
45
+ function execQuery(db, sql, params = []) {
46
+ const rawDb = db.getRawDb();
47
+ const result = rawDb.exec(sql, params);
48
+ if (result.length === 0)
49
+ return [];
50
+ const columns = result[0]?.columns ?? [];
51
+ return (result[0]?.values ?? []).map((values) => {
52
+ const obj = {};
53
+ columns.forEach((col, i) => {
54
+ obj[col] = values[i];
55
+ });
56
+ return obj;
57
+ });
58
+ }
59
+ /**
60
+ * Get total tool count for health status
61
+ */
62
+ function getTotalToolCount() {
63
+ // Import dynamically to avoid circular dependency
64
+ return 27; // 24 original + 3 backup tools
65
+ }
66
+ /**
67
+ * Get all resource definitions
68
+ */
69
+ function getAllResourceDefinitions() {
70
+ return [
71
+ {
72
+ uri: 'memory://recent',
73
+ name: 'Recent Entries',
74
+ title: 'Recent Journal Entries',
75
+ description: '10 most recent journal entries',
76
+ mimeType: 'application/json',
77
+ annotations: {
78
+ audience: ['assistant'],
79
+ priority: 0.8,
80
+ },
81
+ handler: (_uri, context) => {
82
+ const entries = context.db.getRecentEntries(10);
83
+ return { entries, count: entries.length };
84
+ },
85
+ },
86
+ {
87
+ uri: 'memory://significant',
88
+ name: 'Significant Entries',
89
+ title: 'Significant Milestones',
90
+ description: 'Significant milestones and breakthroughs',
91
+ mimeType: 'application/json',
92
+ annotations: {
93
+ audience: ['assistant'],
94
+ priority: 0.7,
95
+ },
96
+ handler: (_uri, context) => {
97
+ const rows = execQuery(context.db, `
98
+ SELECT * FROM memory_journal
99
+ WHERE significance_type IS NOT NULL
100
+ AND deleted_at IS NULL
101
+ ORDER BY timestamp DESC
102
+ LIMIT 20
103
+ `);
104
+ return { entries: rows, count: rows.length };
105
+ },
106
+ },
107
+ {
108
+ uri: 'memory://graph/recent',
109
+ name: 'Recent Relationship Graph',
110
+ title: 'Live Mermaid Diagram',
111
+ description: 'Live Mermaid diagram of recent relationships',
112
+ mimeType: 'text/plain',
113
+ annotations: {
114
+ audience: ['user', 'assistant'],
115
+ priority: 0.5,
116
+ },
117
+ handler: (_uri, context) => {
118
+ // Get recent relationships from database
119
+ const relationships = execQuery(context.db, `
120
+ SELECT
121
+ r.id, r.from_entry_id, r.to_entry_id, r.relationship_type, r.description,
122
+ e1.content as from_content,
123
+ e2.content as to_content
124
+ FROM relationships r
125
+ JOIN memory_journal e1 ON r.from_entry_id = e1.id
126
+ JOIN memory_journal e2 ON r.to_entry_id = e2.id
127
+ WHERE e1.deleted_at IS NULL AND e2.deleted_at IS NULL
128
+ ORDER BY r.created_at DESC
129
+ LIMIT 20
130
+ `);
131
+ if (relationships.length === 0) {
132
+ return {
133
+ format: 'mermaid',
134
+ diagram: 'graph TD\n NoData[No relationships found]',
135
+ message: 'No entry relationships exist yet. Use link_entries tool to create relationships.',
136
+ };
137
+ }
138
+ // Build Mermaid graph
139
+ const lines = ['graph TD'];
140
+ const seenNodes = new Set();
141
+ // Relationship type to arrow style mapping
142
+ const arrowStyles = {
143
+ 'references': '-->',
144
+ 'implements': '-.->',
145
+ 'evolves_from': '==>',
146
+ 'related_to': '<-->',
147
+ 'depends_on': '-->',
148
+ };
149
+ for (const rel of relationships) {
150
+ // Add node definitions if not seen
151
+ if (!seenNodes.has(rel.from_entry_id)) {
152
+ const label = rel.from_content.slice(0, 30).replace(/[\]"'`[]/g, ' ').trim();
153
+ lines.push(` E${String(rel.from_entry_id)}["#${String(rel.from_entry_id)}: ${label}..."]`);
154
+ seenNodes.add(rel.from_entry_id);
155
+ }
156
+ if (!seenNodes.has(rel.to_entry_id)) {
157
+ const label = rel.to_content.slice(0, 30).replace(/[\]"'`[]/g, ' ').trim();
158
+ lines.push(` E${String(rel.to_entry_id)}["#${String(rel.to_entry_id)}: ${label}..."]`);
159
+ seenNodes.add(rel.to_entry_id);
160
+ }
161
+ // Add edge with relationship label
162
+ const arrow = arrowStyles[rel.relationship_type] ?? '-->';
163
+ lines.push(` E${String(rel.from_entry_id)} ${arrow}|${rel.relationship_type}| E${String(rel.to_entry_id)}`);
164
+ }
165
+ return {
166
+ format: 'mermaid',
167
+ diagram: lines.join('\n'),
168
+ relationshipCount: relationships.length,
169
+ nodeCount: seenNodes.size,
170
+ };
171
+ },
172
+ },
173
+ {
174
+ uri: 'memory://team/recent',
175
+ name: 'Team Entries',
176
+ title: 'Recent Team-Shared Entries',
177
+ description: 'Recent team-shared entries',
178
+ mimeType: 'application/json',
179
+ annotations: {
180
+ audience: ['assistant'],
181
+ priority: 0.6,
182
+ },
183
+ handler: (_uri, context) => {
184
+ const entries = context.db.getRecentEntries(10, false);
185
+ return { entries, count: entries.length };
186
+ },
187
+ },
188
+ {
189
+ uri: 'memory://projects/{number}/timeline',
190
+ name: 'Project Timeline',
191
+ title: 'Project Activity Timeline',
192
+ description: 'Project activity timeline',
193
+ mimeType: 'application/json',
194
+ annotations: {
195
+ audience: ['assistant'],
196
+ priority: 0.6,
197
+ },
198
+ handler: (uri, context) => {
199
+ const match = /memory:\/\/projects\/(\d+)\/timeline/.exec(uri);
200
+ const projectNumber = match?.[1] ? parseInt(match[1], 10) : null;
201
+ if (projectNumber === null) {
202
+ return { error: 'Invalid project number' };
203
+ }
204
+ const entries = execQuery(context.db, `
205
+ SELECT * FROM memory_journal
206
+ WHERE project_number = ?
207
+ AND deleted_at IS NULL
208
+ ORDER BY timestamp DESC
209
+ LIMIT 50
210
+ `, [projectNumber]);
211
+ return { projectNumber, entries, count: entries.length };
212
+ },
213
+ },
214
+ {
215
+ uri: 'memory://issues/{issue_number}/entries',
216
+ name: 'Issue Entries',
217
+ title: 'Entries Linked to Issue',
218
+ description: 'All entries linked to a specific issue',
219
+ mimeType: 'application/json',
220
+ annotations: {
221
+ audience: ['assistant'],
222
+ priority: 0.6,
223
+ },
224
+ handler: (uri, context) => {
225
+ const match = /memory:\/\/issues\/(\d+)\/entries/.exec(uri);
226
+ const issueNumber = match?.[1] ? parseInt(match[1], 10) : null;
227
+ if (issueNumber === null) {
228
+ return { error: 'Invalid issue number' };
229
+ }
230
+ const entries = execQuery(context.db, `
231
+ SELECT * FROM memory_journal
232
+ WHERE issue_number = ?
233
+ AND deleted_at IS NULL
234
+ ORDER BY timestamp DESC
235
+ `, [issueNumber]);
236
+ return { issueNumber, entries, count: entries.length };
237
+ },
238
+ },
239
+ {
240
+ uri: 'memory://prs/{pr_number}/entries',
241
+ name: 'PR Entries',
242
+ title: 'Entries Linked to PR',
243
+ description: 'All entries linked to a specific pull request',
244
+ mimeType: 'application/json',
245
+ annotations: {
246
+ audience: ['assistant'],
247
+ priority: 0.6,
248
+ },
249
+ handler: (uri, context) => {
250
+ const match = /memory:\/\/prs\/(\d+)\/entries/.exec(uri);
251
+ const prNumber = match?.[1] ? parseInt(match[1], 10) : null;
252
+ if (prNumber === null) {
253
+ return { error: 'Invalid PR number' };
254
+ }
255
+ const entries = execQuery(context.db, `
256
+ SELECT * FROM memory_journal
257
+ WHERE pr_number = ?
258
+ AND deleted_at IS NULL
259
+ ORDER BY timestamp DESC
260
+ `, [prNumber]);
261
+ return { prNumber, entries, count: entries.length };
262
+ },
263
+ },
264
+ {
265
+ uri: 'memory://prs/{pr_number}/timeline',
266
+ name: 'PR Timeline',
267
+ title: 'Combined PR and Journal Timeline',
268
+ description: 'Combined PR + journal timeline',
269
+ mimeType: 'application/json',
270
+ annotations: {
271
+ audience: ['assistant'],
272
+ priority: 0.5,
273
+ },
274
+ handler: (uri, context) => {
275
+ const match = /memory:\/\/prs\/(\d+)\/timeline/.exec(uri);
276
+ const prNumber = match?.[1] ? parseInt(match[1], 10) : null;
277
+ if (prNumber === null) {
278
+ return { error: 'Invalid PR number' };
279
+ }
280
+ const entries = execQuery(context.db, `
281
+ SELECT * FROM memory_journal
282
+ WHERE pr_number = ?
283
+ AND deleted_at IS NULL
284
+ ORDER BY timestamp DESC
285
+ `, [prNumber]);
286
+ return { prNumber, entries, count: entries.length };
287
+ },
288
+ },
289
+ {
290
+ uri: 'memory://graph/actions',
291
+ name: 'Actions Graph',
292
+ title: 'CI/CD Narrative Graph',
293
+ description: 'CI/CD narrative graph: commits → runs → failures → entries → fixes → deployments',
294
+ mimeType: 'text/plain',
295
+ annotations: {
296
+ audience: ['user', 'assistant'],
297
+ priority: 0.5,
298
+ },
299
+ handler: async (_uri, context) => {
300
+ // Check if GitHub integration is available
301
+ if (!context.github) {
302
+ return {
303
+ format: 'mermaid',
304
+ diagram: 'graph LR\n NoGitHub[GitHub integration not available]',
305
+ message: 'GitHub integration not configured. Set GITHUB_TOKEN and GITHUB_REPO_PATH.',
306
+ };
307
+ }
308
+ // Get repository info and workflow runs
309
+ const repoInfo = await context.github.getRepoInfo();
310
+ if (!repoInfo.owner || !repoInfo.repo) {
311
+ return {
312
+ format: 'mermaid',
313
+ diagram: 'graph LR\n NoRepo[Repository not detected]',
314
+ message: 'Could not detect repository. Set GITHUB_REPO_PATH in your config.',
315
+ };
316
+ }
317
+ const workflowRuns = await context.github.getWorkflowRuns(repoInfo.owner, repoInfo.repo, 10);
318
+ if (workflowRuns.length === 0) {
319
+ return {
320
+ format: 'mermaid',
321
+ diagram: 'graph LR\n NoRuns[No workflow runs found]',
322
+ message: 'No GitHub Actions workflow runs found for this repository.',
323
+ };
324
+ }
325
+ // Build Mermaid graph showing workflow runs
326
+ const lines = ['graph LR'];
327
+ // Status to styling map
328
+ const statusStyles = {
329
+ 'success': ':::success',
330
+ 'failure': ':::failure',
331
+ 'cancelled': ':::cancelled',
332
+ 'skipped': ':::skipped',
333
+ };
334
+ // Add style definitions
335
+ lines.push(' classDef success fill:#28a745,color:#fff');
336
+ lines.push(' classDef failure fill:#dc3545,color:#fff');
337
+ lines.push(' classDef cancelled fill:#6c757d,color:#fff');
338
+ lines.push(' classDef skipped fill:#ffc107,color:#000');
339
+ for (const run of workflowRuns) {
340
+ const shortSha = run.headSha.slice(0, 7);
341
+ const nodeId = `R${String(run.id)}`;
342
+ const commitId = `C${shortSha}`;
343
+ const style = statusStyles[run.conclusion ?? 'skipped'] ?? '';
344
+ const statusIcon = run.conclusion === 'success' ? '✓' : run.conclusion === 'failure' ? '✗' : '○';
345
+ // Add commit and run nodes
346
+ lines.push(` ${commitId}["${shortSha}"]`);
347
+ lines.push(` ${nodeId}["${statusIcon} ${run.name}"]${style}`);
348
+ lines.push(` ${commitId} --> ${nodeId}`);
349
+ }
350
+ return {
351
+ format: 'mermaid',
352
+ diagram: lines.join('\n'),
353
+ workflowRunCount: workflowRuns.length,
354
+ repository: `${repoInfo.owner}/${repoInfo.repo}`,
355
+ };
356
+ },
357
+ },
358
+ {
359
+ uri: 'memory://actions/recent',
360
+ name: 'Recent Actions',
361
+ title: 'Recent Workflow Runs',
362
+ description: 'Recent workflow runs with CI status',
363
+ mimeType: 'application/json',
364
+ annotations: {
365
+ audience: ['assistant'],
366
+ priority: 0.5,
367
+ },
368
+ handler: (_uri, context) => {
369
+ const entries = execQuery(context.db, `
370
+ SELECT * FROM memory_journal
371
+ WHERE workflow_run_id IS NOT NULL
372
+ AND deleted_at IS NULL
373
+ ORDER BY timestamp DESC
374
+ LIMIT 10
375
+ `);
376
+ return { entries, count: entries.length };
377
+ },
378
+ },
379
+ {
380
+ uri: 'memory://tags',
381
+ name: 'All Tags',
382
+ title: 'Tag List',
383
+ description: 'All available tags with usage counts',
384
+ mimeType: 'application/json',
385
+ annotations: {
386
+ audience: ['assistant'],
387
+ priority: 0.4,
388
+ },
389
+ handler: (_uri, context) => {
390
+ const tags = context.db.listTags();
391
+ return { tags, count: tags.length };
392
+ },
393
+ },
394
+ {
395
+ uri: 'memory://statistics',
396
+ name: 'Statistics',
397
+ title: 'Journal Statistics',
398
+ description: 'Overall journal statistics',
399
+ mimeType: 'application/json',
400
+ annotations: {
401
+ audience: ['assistant'],
402
+ priority: 0.4,
403
+ },
404
+ handler: (_uri, context) => {
405
+ return context.db.getStatistics('week');
406
+ },
407
+ },
408
+ {
409
+ uri: 'memory://health',
410
+ name: 'Server Health',
411
+ title: 'Server Health & Diagnostics',
412
+ description: 'Server health status including database, backups, vector index, and tool filter status',
413
+ mimeType: 'application/json',
414
+ annotations: {
415
+ audience: ['assistant'],
416
+ priority: 0.9,
417
+ },
418
+ handler: async (_uri, context) => {
419
+ const dbHealth = context.db.getHealthStatus();
420
+ // Get vector index status if available
421
+ let vectorIndex = null;
422
+ if (context.vectorManager) {
423
+ try {
424
+ const stats = await context.vectorManager.getStats();
425
+ vectorIndex = {
426
+ available: true,
427
+ indexedEntries: stats.itemCount,
428
+ modelName: stats.modelName,
429
+ };
430
+ }
431
+ catch {
432
+ vectorIndex = { available: false, indexedEntries: 0, modelName: null };
433
+ }
434
+ }
435
+ // Get tool filter status
436
+ const totalTools = getTotalToolCount();
437
+ const toolFilter = {
438
+ active: context.filterConfig !== null && context.filterConfig !== undefined,
439
+ enabledCount: context.filterConfig?.enabledTools.size ?? totalTools,
440
+ totalCount: totalTools,
441
+ filterString: context.filterConfig?.raw ?? null,
442
+ };
443
+ return {
444
+ ...dbHealth,
445
+ vectorIndex,
446
+ toolFilter,
447
+ timestamp: new Date().toISOString(),
448
+ };
449
+ },
450
+ },
451
+ ];
452
+ }
453
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/handlers/resources/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Memory Journal MCP Server - Tool Handlers
3
+ *
4
+ * Exports all MCP tools with annotations following MCP 2025-11-25 spec.
5
+ */
6
+ import type { SqliteAdapter } from '../../database/SqliteAdapter.js';
7
+ import type { ToolFilterConfig } from '../../filtering/ToolFilter.js';
8
+ import type { VectorSearchManager } from '../../vector/VectorSearchManager.js';
9
+ import type { GitHubIntegration } from '../../github/GitHubIntegration.js';
10
+ /**
11
+ * Tool execution context
12
+ */
13
+ export interface ToolContext {
14
+ db: SqliteAdapter;
15
+ vectorManager?: VectorSearchManager;
16
+ github?: GitHubIntegration;
17
+ }
18
+ /**
19
+ * Get all tool definitions
20
+ */
21
+ export declare function getTools(db: SqliteAdapter, filterConfig: ToolFilterConfig | null, vectorManager?: VectorSearchManager, github?: GitHubIntegration): object[];
22
+ /**
23
+ * Call a tool by name
24
+ */
25
+ export declare function callTool(name: string, args: Record<string, unknown>, db: SqliteAdapter, vectorManager?: VectorSearchManager, github?: GitHubIntegration): Promise<unknown>;
26
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/handlers/tools/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qCAAqC,CAAC;AAC/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAE3E;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,EAAE,EAAE,aAAa,CAAC;IAClB,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC9B;AAiHD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,gBAAgB,GAAG,IAAI,EAAE,aAAa,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAsB5J;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC1B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,EAAE,EAAE,aAAa,EACjB,aAAa,CAAC,EAAE,mBAAmB,EACnC,MAAM,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,OAAO,CAAC,CAUlB"}