@millstone/synapse-context-mcp 0.3.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 (140) hide show
  1. package/README.md +217 -0
  2. package/dist/bundled/code-structure.js +12427 -0
  3. package/dist/bundled/file-search.js +40278 -0
  4. package/dist/bundled/semantic-search.js +40245 -0
  5. package/dist/bundled/tree-sitter-wasms/tree-sitter-bash.wasm +0 -0
  6. package/dist/bundled/tree-sitter-wasms/tree-sitter-c.wasm +0 -0
  7. package/dist/bundled/tree-sitter-wasms/tree-sitter-c_sharp.wasm +0 -0
  8. package/dist/bundled/tree-sitter-wasms/tree-sitter-cpp.wasm +0 -0
  9. package/dist/bundled/tree-sitter-wasms/tree-sitter-css.wasm +0 -0
  10. package/dist/bundled/tree-sitter-wasms/tree-sitter-dart.wasm +0 -0
  11. package/dist/bundled/tree-sitter-wasms/tree-sitter-elisp.wasm +0 -0
  12. package/dist/bundled/tree-sitter-wasms/tree-sitter-elixir.wasm +0 -0
  13. package/dist/bundled/tree-sitter-wasms/tree-sitter-elm.wasm +0 -0
  14. package/dist/bundled/tree-sitter-wasms/tree-sitter-embedded_template.wasm +0 -0
  15. package/dist/bundled/tree-sitter-wasms/tree-sitter-go.wasm +0 -0
  16. package/dist/bundled/tree-sitter-wasms/tree-sitter-html.wasm +0 -0
  17. package/dist/bundled/tree-sitter-wasms/tree-sitter-java.wasm +0 -0
  18. package/dist/bundled/tree-sitter-wasms/tree-sitter-javascript.wasm +0 -0
  19. package/dist/bundled/tree-sitter-wasms/tree-sitter-json.wasm +0 -0
  20. package/dist/bundled/tree-sitter-wasms/tree-sitter-kotlin.wasm +0 -0
  21. package/dist/bundled/tree-sitter-wasms/tree-sitter-lua.wasm +0 -0
  22. package/dist/bundled/tree-sitter-wasms/tree-sitter-objc.wasm +0 -0
  23. package/dist/bundled/tree-sitter-wasms/tree-sitter-ocaml.wasm +0 -0
  24. package/dist/bundled/tree-sitter-wasms/tree-sitter-php.wasm +0 -0
  25. package/dist/bundled/tree-sitter-wasms/tree-sitter-python.wasm +0 -0
  26. package/dist/bundled/tree-sitter-wasms/tree-sitter-ql.wasm +0 -0
  27. package/dist/bundled/tree-sitter-wasms/tree-sitter-rescript.wasm +0 -0
  28. package/dist/bundled/tree-sitter-wasms/tree-sitter-ruby.wasm +0 -0
  29. package/dist/bundled/tree-sitter-wasms/tree-sitter-rust.wasm +0 -0
  30. package/dist/bundled/tree-sitter-wasms/tree-sitter-scala.wasm +0 -0
  31. package/dist/bundled/tree-sitter-wasms/tree-sitter-solidity.wasm +0 -0
  32. package/dist/bundled/tree-sitter-wasms/tree-sitter-swift.wasm +0 -0
  33. package/dist/bundled/tree-sitter-wasms/tree-sitter-systemrdl.wasm +0 -0
  34. package/dist/bundled/tree-sitter-wasms/tree-sitter-tlaplus.wasm +0 -0
  35. package/dist/bundled/tree-sitter-wasms/tree-sitter-toml.wasm +0 -0
  36. package/dist/bundled/tree-sitter-wasms/tree-sitter-tsx.wasm +0 -0
  37. package/dist/bundled/tree-sitter-wasms/tree-sitter-typescript.wasm +0 -0
  38. package/dist/bundled/tree-sitter-wasms/tree-sitter-vue.wasm +0 -0
  39. package/dist/bundled/tree-sitter-wasms/tree-sitter-yaml.wasm +0 -0
  40. package/dist/bundled/tree-sitter-wasms/tree-sitter-zig.wasm +0 -0
  41. package/dist/bundled/tree-sitter-wasms/tree-sitter.wasm +0 -0
  42. package/dist/bundled/tree-sitter.wasm +0 -0
  43. package/dist/continue/ContinueIDE.d.ts +70 -0
  44. package/dist/continue/ContinueIDE.d.ts.map +1 -0
  45. package/dist/continue/ContinueIDE.js +251 -0
  46. package/dist/continue/ContinueIDE.js.map +1 -0
  47. package/dist/embeddings/embeddings-provider.d.ts +53 -0
  48. package/dist/embeddings/embeddings-provider.d.ts.map +1 -0
  49. package/dist/embeddings/embeddings-provider.js +138 -0
  50. package/dist/embeddings/embeddings-provider.js.map +1 -0
  51. package/dist/embeddings/index.d.ts +10 -0
  52. package/dist/embeddings/index.d.ts.map +1 -0
  53. package/dist/embeddings/index.js +10 -0
  54. package/dist/embeddings/index.js.map +1 -0
  55. package/dist/embeddings/vector-index.d.ts +43 -0
  56. package/dist/embeddings/vector-index.d.ts.map +1 -0
  57. package/dist/embeddings/vector-index.js +174 -0
  58. package/dist/embeddings/vector-index.js.map +1 -0
  59. package/dist/index.d.ts +3 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +53 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/selection/SelectionManager.d.ts +90 -0
  64. package/dist/selection/SelectionManager.d.ts.map +1 -0
  65. package/dist/selection/SelectionManager.js +167 -0
  66. package/dist/selection/SelectionManager.js.map +1 -0
  67. package/dist/server.d.ts +28 -0
  68. package/dist/server.d.ts.map +1 -0
  69. package/dist/server.js +480 -0
  70. package/dist/server.js.map +1 -0
  71. package/dist/shims/continue-worker-paths.d.ts +47 -0
  72. package/dist/shims/continue-worker-paths.d.ts.map +1 -0
  73. package/dist/shims/continue-worker-paths.js +94 -0
  74. package/dist/shims/continue-worker-paths.js.map +1 -0
  75. package/dist/shims/workerpool-shim.d.ts +43 -0
  76. package/dist/shims/workerpool-shim.d.ts.map +1 -0
  77. package/dist/shims/workerpool-shim.js +37 -0
  78. package/dist/shims/workerpool-shim.js.map +1 -0
  79. package/dist/tools/code-structure.d.ts +36 -0
  80. package/dist/tools/code-structure.d.ts.map +1 -0
  81. package/dist/tools/code-structure.js +131 -0
  82. package/dist/tools/code-structure.js.map +1 -0
  83. package/dist/tools/file-search.d.ts +35 -0
  84. package/dist/tools/file-search.d.ts.map +1 -0
  85. package/dist/tools/file-search.js +286 -0
  86. package/dist/tools/file-search.js.map +1 -0
  87. package/dist/tools/file-tree.d.ts +18 -0
  88. package/dist/tools/file-tree.d.ts.map +1 -0
  89. package/dist/tools/file-tree.js +45 -0
  90. package/dist/tools/file-tree.js.map +1 -0
  91. package/dist/tools/manage-selection.d.ts +28 -0
  92. package/dist/tools/manage-selection.d.ts.map +1 -0
  93. package/dist/tools/manage-selection.js +98 -0
  94. package/dist/tools/manage-selection.js.map +1 -0
  95. package/dist/tools/read-file.d.ts +19 -0
  96. package/dist/tools/read-file.d.ts.map +1 -0
  97. package/dist/tools/read-file.js +35 -0
  98. package/dist/tools/read-file.js.map +1 -0
  99. package/dist/tools/semantic-search.d.ts +50 -0
  100. package/dist/tools/semantic-search.d.ts.map +1 -0
  101. package/dist/tools/semantic-search.js +243 -0
  102. package/dist/tools/semantic-search.js.map +1 -0
  103. package/dist/tools/workspace-context.d.ts +20 -0
  104. package/dist/tools/workspace-context.d.ts.map +1 -0
  105. package/dist/tools/workspace-context.js +36 -0
  106. package/dist/tools/workspace-context.js.map +1 -0
  107. package/dist/tree-sitter/code-snippet-queries/bash.scm +7 -0
  108. package/dist/tree-sitter/code-snippet-queries/c.scm +34 -0
  109. package/dist/tree-sitter/code-snippet-queries/c_sharp.scm +42 -0
  110. package/dist/tree-sitter/code-snippet-queries/cpp.scm +34 -0
  111. package/dist/tree-sitter/code-snippet-queries/dart.scm +33 -0
  112. package/dist/tree-sitter/code-snippet-queries/elisp.scm +21 -0
  113. package/dist/tree-sitter/code-snippet-queries/elixir.scm +32 -0
  114. package/dist/tree-sitter/code-snippet-queries/elm.scm +17 -0
  115. package/dist/tree-sitter/code-snippet-queries/go.scm +28 -0
  116. package/dist/tree-sitter/code-snippet-queries/java.scm +34 -0
  117. package/dist/tree-sitter/code-snippet-queries/javascript.scm +22 -0
  118. package/dist/tree-sitter/code-snippet-queries/kotlin.scm +32 -0
  119. package/dist/tree-sitter/code-snippet-queries/lua.scm +34 -0
  120. package/dist/tree-sitter/code-snippet-queries/ocaml.scm +27 -0
  121. package/dist/tree-sitter/code-snippet-queries/php.scm +43 -0
  122. package/dist/tree-sitter/code-snippet-queries/python.scm +17 -0
  123. package/dist/tree-sitter/code-snippet-queries/rescript.scm +23 -0
  124. package/dist/tree-sitter/code-snippet-queries/ruby.scm +33 -0
  125. package/dist/tree-sitter/code-snippet-queries/rust.scm +42 -0
  126. package/dist/tree-sitter/code-snippet-queries/scala.scm +32 -0
  127. package/dist/tree-sitter/code-snippet-queries/solidity.scm +33 -0
  128. package/dist/tree-sitter/code-snippet-queries/swift.scm +40 -0
  129. package/dist/tree-sitter/code-snippet-queries/tsx.scm +54 -0
  130. package/dist/tree-sitter/code-snippet-queries/typescript.scm +28 -0
  131. package/dist/tree-sitter/code-snippet-queries/zig.scm +16 -0
  132. package/dist/utils/file-walker.d.ts +19 -0
  133. package/dist/utils/file-walker.d.ts.map +1 -0
  134. package/dist/utils/file-walker.js +82 -0
  135. package/dist/utils/file-walker.js.map +1 -0
  136. package/dist/utils/token-counter.d.ts +16 -0
  137. package/dist/utils/token-counter.d.ts.map +1 -0
  138. package/dist/utils/token-counter.js +30 -0
  139. package/dist/utils/token-counter.js.map +1 -0
  140. package/package.json +64 -0
package/dist/server.js ADDED
@@ -0,0 +1,480 @@
1
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
2
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
3
+ import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
4
+ import { ContinueIDE } from './continue/ContinueIDE.js';
5
+ import { SelectionManager } from './selection/SelectionManager.js';
6
+ // Tools
7
+ import { getFileTreeTool } from './tools/file-tree.js';
8
+ import { readFileTool } from './tools/read-file.js';
9
+ import { manageSelectionTool } from './tools/manage-selection.js';
10
+ import { workspaceContextTool } from './tools/workspace-context.js';
11
+ // Dynamic imports for bundled modules (loaded at runtime)
12
+ let fileSearchTool;
13
+ let getCodeStructureTool;
14
+ let indexCodeTool;
15
+ let semanticSearchTool;
16
+ /**
17
+ * Context MCP Server (Full Continue Integration)
18
+ *
19
+ * Uses bundled Continue modules for:
20
+ * - FTS5 full-text search with BM25 ranking (220x faster than grep)
21
+ * - Tree-sitter code structure extraction (40+ languages)
22
+ * - Continue-compatible IDE/LLM shims
23
+ *
24
+ * Supports multiple workspace directories for cross-repository indexing.
25
+ *
26
+ * Bundling solves ESM import issues in @continuedev/core package.
27
+ * See docs/BUNDLING_SOLUTION.md for details.
28
+ */
29
+ export class ContextMCPServer {
30
+ server;
31
+ ide;
32
+ selectionManager;
33
+ workspaceDirs;
34
+ bundledModulesLoaded = false;
35
+ bundledModulesPromise;
36
+ constructor(workspaceDirs) {
37
+ this.workspaceDirs = workspaceDirs;
38
+ // Initialize Continue IDE shim (provides file operations for indexing)
39
+ this.ide = new ContinueIDE(workspaceDirs[0]);
40
+ // Start loading bundled modules (async)
41
+ this.bundledModulesPromise = this.loadBundledModules();
42
+ // Initialize selection manager (uses first workspace as primary)
43
+ this.selectionManager = new SelectionManager(workspaceDirs[0]);
44
+ // Initialize MCP server
45
+ this.server = new Server({
46
+ name: 'context-mcp-server',
47
+ version: '0.2.0',
48
+ }, {
49
+ capabilities: {
50
+ tools: {},
51
+ },
52
+ });
53
+ this.setupHandlers();
54
+ }
55
+ async loadBundledModules() {
56
+ // Dynamically import bundled Continue modules at runtime
57
+ // These are in dist/bundled/ after build (not available during TS compilation)
58
+ // Use import.meta.url to resolve relative to this script, not cwd
59
+ const bundledDir = new URL('./bundled/', import.meta.url).href;
60
+ const loadedModules = [];
61
+ const failedModules = [];
62
+ // Load each module independently so failures don't block others
63
+ // file-search.js is fully bundled and should always work
64
+ try {
65
+ const fileSearchModule = await import(new URL('file-search.js', bundledDir).href);
66
+ fileSearchTool = fileSearchModule.fileSearchTool;
67
+ loadedModules.push('file-search');
68
+ }
69
+ catch (error) {
70
+ console.error('⚠️ Failed to load file-search module:', error instanceof Error ? error.message : error);
71
+ failedModules.push('file-search');
72
+ }
73
+ // code-structure.js is fully bundled and should work
74
+ try {
75
+ const codeStructureModule = await import(new URL('code-structure.js', bundledDir).href);
76
+ getCodeStructureTool = codeStructureModule.getCodeStructureTool;
77
+ indexCodeTool = codeStructureModule.indexCodeTool;
78
+ loadedModules.push('code-structure');
79
+ }
80
+ catch (error) {
81
+ console.error('⚠️ Failed to load code-structure module:', error instanceof Error ? error.message : error);
82
+ failedModules.push('code-structure');
83
+ }
84
+ // semantic-search.js imports from embeddings which has @continuedev/core ESM issues
85
+ // This may fail on some platforms but shouldn't block file_search
86
+ try {
87
+ const semanticSearchModule = await import(new URL('semantic-search.js', bundledDir).href);
88
+ semanticSearchTool = semanticSearchModule.semanticSearchTool;
89
+ loadedModules.push('semantic-search');
90
+ }
91
+ catch (error) {
92
+ console.error('⚠️ Failed to load semantic-search module (embeddings unavailable):', error instanceof Error ? error.message : error);
93
+ failedModules.push('semantic-search');
94
+ }
95
+ // Mark as loaded if at least file-search works (core functionality)
96
+ this.bundledModulesLoaded = loadedModules.includes('file-search');
97
+ if (loadedModules.length > 0) {
98
+ console.error(`✅ Loaded bundled modules: ${loadedModules.join(', ')}`);
99
+ }
100
+ if (failedModules.length > 0) {
101
+ console.error(`⚠️ Unavailable modules: ${failedModules.join(', ')}`);
102
+ }
103
+ }
104
+ setupHandlers() {
105
+ this.server.setRequestHandler(ListToolsRequestSchema, async () => {
106
+ return {
107
+ tools: this.getTools(),
108
+ };
109
+ });
110
+ this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
111
+ const { name, arguments: args } = request.params;
112
+ try {
113
+ let result;
114
+ switch (name) {
115
+ case 'file_search':
116
+ if (this.bundledModulesLoaded && fileSearchTool) {
117
+ // Use bundled Continue FTS5 search across all workspace directories
118
+ result = await fileSearchTool(args, this.workspaceDirs, this.ide);
119
+ }
120
+ else {
121
+ throw new Error('File search requires bundled Continue modules');
122
+ }
123
+ break;
124
+ case 'semantic_search':
125
+ if (this.bundledModulesLoaded && semanticSearchTool) {
126
+ // Use hybrid semantic + lexical search across all workspace directories
127
+ result = await semanticSearchTool(args, this.workspaceDirs, this.ide);
128
+ }
129
+ else {
130
+ throw new Error('Semantic search requires bundled Continue modules');
131
+ }
132
+ break;
133
+ case 'get_file_tree':
134
+ // For now, use first workspace dir (TODO: support multi-root tree)
135
+ result = await getFileTreeTool(args, this.workspaceDirs[0]);
136
+ break;
137
+ case 'get_code_structure':
138
+ const selectedPaths = this.selectionManager.getAll().map(f => f.path);
139
+ if (this.bundledModulesLoaded && getCodeStructureTool) {
140
+ // Use bundled Continue tree-sitter extraction
141
+ result = await getCodeStructureTool(args, selectedPaths);
142
+ }
143
+ else {
144
+ throw new Error('Code structure requires bundled Continue modules');
145
+ }
146
+ break;
147
+ case 'index_code':
148
+ if (this.bundledModulesLoaded && indexCodeTool) {
149
+ // Index files into database for code structure extraction
150
+ result = await indexCodeTool(args);
151
+ }
152
+ else {
153
+ throw new Error('Code indexing requires bundled Continue modules');
154
+ }
155
+ break;
156
+ case 'read_file':
157
+ result = await readFileTool(args);
158
+ break;
159
+ case 'manage_selection':
160
+ result = await manageSelectionTool(args, this.selectionManager);
161
+ break;
162
+ case 'workspace_context':
163
+ result = await workspaceContextTool(args, this.selectionManager, this.workspaceDirs[0] // TODO: support multi-root workspace context
164
+ );
165
+ break;
166
+ default:
167
+ throw new Error(`Unknown tool: ${name}`);
168
+ }
169
+ return {
170
+ content: [
171
+ {
172
+ type: 'text',
173
+ text: JSON.stringify(result, null, 2),
174
+ },
175
+ ],
176
+ };
177
+ }
178
+ catch (error) {
179
+ const errorMessage = error instanceof Error ? error.message : String(error);
180
+ console.error(`Tool ${name} error:`, error);
181
+ return {
182
+ content: [
183
+ {
184
+ type: 'text',
185
+ text: JSON.stringify({
186
+ error: errorMessage,
187
+ tool: name,
188
+ note: 'Feature may require indexing or specific file types'
189
+ }, null, 2),
190
+ },
191
+ ],
192
+ isError: true,
193
+ };
194
+ }
195
+ });
196
+ }
197
+ getTools() {
198
+ return [
199
+ {
200
+ name: 'file_search',
201
+ description: 'Search files with FTS5 + BM25 ranking for content, fast file system search for paths. 10-100x faster than grep on large codebases.',
202
+ inputSchema: {
203
+ type: 'object',
204
+ properties: {
205
+ pattern: {
206
+ type: 'string',
207
+ description: 'Search pattern (path substring or content query)',
208
+ },
209
+ mode: {
210
+ type: 'string',
211
+ enum: ['auto', 'path', 'content', 'both'],
212
+ description: 'Search mode: auto (smart), path (filenames), content (file contents with BM25 ranking), both',
213
+ default: 'auto',
214
+ },
215
+ regex: {
216
+ type: 'boolean',
217
+ description: 'Treat pattern as regex (for path mode)',
218
+ default: false,
219
+ },
220
+ filter: {
221
+ type: 'object',
222
+ properties: {
223
+ extensions: {
224
+ type: 'array',
225
+ items: { type: 'string' },
226
+ description: 'Filter by file extensions (e.g., ["ts", "js"])',
227
+ },
228
+ exclude: {
229
+ type: 'array',
230
+ items: { type: 'string' },
231
+ description: 'Exclude paths containing these strings',
232
+ },
233
+ },
234
+ },
235
+ max_results: {
236
+ type: 'number',
237
+ description: 'Maximum number of results to return',
238
+ default: 50,
239
+ },
240
+ include_content: {
241
+ type: 'boolean',
242
+ description: 'Include matched content in results. Default false to save tokens - set true when content preview is needed.',
243
+ default: false,
244
+ },
245
+ },
246
+ required: ['pattern'],
247
+ },
248
+ },
249
+ {
250
+ name: 'semantic_search',
251
+ description: 'Hybrid semantic + lexical search using embeddings (all-MiniLM-L6-v2) and FTS5. Best for natural language queries and finding conceptually related code. Uses Reciprocal Rank Fusion to combine results.',
252
+ inputSchema: {
253
+ type: 'object',
254
+ properties: {
255
+ query: {
256
+ type: 'string',
257
+ description: 'Natural language search query (e.g., "function that handles user authentication")',
258
+ },
259
+ mode: {
260
+ type: 'string',
261
+ enum: ['hybrid', 'semantic', 'lexical'],
262
+ description: 'Search mode: hybrid (combines both, recommended), semantic (embeddings only), lexical (FTS5 only)',
263
+ default: 'hybrid',
264
+ },
265
+ filter: {
266
+ type: 'object',
267
+ properties: {
268
+ extensions: {
269
+ type: 'array',
270
+ items: { type: 'string' },
271
+ description: 'Filter by file extensions (e.g., ["ts", "js"])',
272
+ },
273
+ exclude: {
274
+ type: 'array',
275
+ items: { type: 'string' },
276
+ description: 'Exclude paths containing these strings',
277
+ },
278
+ },
279
+ },
280
+ max_results: {
281
+ type: 'number',
282
+ description: 'Maximum number of results to return',
283
+ default: 30,
284
+ },
285
+ include_content: {
286
+ type: 'boolean',
287
+ description: 'Include matched content in results',
288
+ default: false,
289
+ },
290
+ semantic_weight: {
291
+ type: 'number',
292
+ description: 'Weight for semantic results in hybrid mode (0.0-1.0, default 0.5). Higher values favor semantic similarity over lexical matching.',
293
+ default: 0.5,
294
+ },
295
+ },
296
+ required: ['query'],
297
+ },
298
+ },
299
+ {
300
+ name: 'get_file_tree',
301
+ description: 'Get workspace file tree structure. Respects .gitignore automatically.',
302
+ inputSchema: {
303
+ type: 'object',
304
+ properties: {
305
+ type: {
306
+ type: 'string',
307
+ enum: ['files', 'roots'],
308
+ description: 'Type of tree to return: files (full tree) or roots (workspace roots)',
309
+ },
310
+ mode: {
311
+ type: 'string',
312
+ enum: ['auto', 'full', 'folders'],
313
+ description: 'Tree mode: full (all files), folders (directories only)',
314
+ default: 'full',
315
+ },
316
+ path: {
317
+ type: 'string',
318
+ description: 'Specific path to get tree for (optional, defaults to workspace root)',
319
+ },
320
+ max_depth: {
321
+ type: 'number',
322
+ description: 'Maximum depth to traverse',
323
+ },
324
+ },
325
+ required: ['type'],
326
+ },
327
+ },
328
+ {
329
+ name: 'get_code_structure',
330
+ description: 'Extract code structure using tree-sitter. Returns function signatures, class definitions, etc. Supports 40+ languages.',
331
+ inputSchema: {
332
+ type: 'object',
333
+ properties: {
334
+ paths: {
335
+ type: 'array',
336
+ items: { type: 'string' },
337
+ description: 'File paths to analyze',
338
+ },
339
+ scope: {
340
+ type: 'string',
341
+ enum: ['paths', 'selected'],
342
+ description: 'Use specified paths or current selection',
343
+ default: 'paths',
344
+ },
345
+ },
346
+ required: ['paths'],
347
+ },
348
+ },
349
+ {
350
+ name: 'read_file',
351
+ description: 'Read file contents, optionally with line range.',
352
+ inputSchema: {
353
+ type: 'object',
354
+ properties: {
355
+ path: {
356
+ type: 'string',
357
+ description: 'File path to read',
358
+ },
359
+ start_line: {
360
+ type: 'number',
361
+ description: 'Start line (0-indexed, optional)',
362
+ },
363
+ end_line: {
364
+ type: 'number',
365
+ description: 'End line (0-indexed, optional)',
366
+ },
367
+ },
368
+ required: ['path'],
369
+ },
370
+ },
371
+ {
372
+ name: 'manage_selection',
373
+ description: 'Manage context selection - add/remove files, track what will be sent to LLM.',
374
+ inputSchema: {
375
+ type: 'object',
376
+ properties: {
377
+ op: {
378
+ type: 'string',
379
+ enum: ['get', 'add', 'remove', 'set', 'clear', 'preview', 'promote', 'demote'],
380
+ description: 'Operation: get (current), add (append), remove (delete), set (replace), clear (empty), preview (show content), promote (codemap->full), demote (full->codemap)',
381
+ },
382
+ paths: {
383
+ type: 'array',
384
+ items: { type: 'string' },
385
+ description: 'File paths for operation',
386
+ },
387
+ mode: {
388
+ type: 'string',
389
+ enum: ['full', 'slices', 'codemap_only'],
390
+ description: 'Selection mode: full (entire file), slices (specific ranges), codemap_only (tree-sitter signatures)',
391
+ default: 'full',
392
+ },
393
+ slices: {
394
+ type: 'array',
395
+ items: {
396
+ type: 'object',
397
+ properties: {
398
+ path: { type: 'string' },
399
+ ranges: {
400
+ type: 'array',
401
+ items: {
402
+ type: 'object',
403
+ properties: {
404
+ startLine: { type: 'number' },
405
+ endLine: { type: 'number' },
406
+ description: { type: 'string' },
407
+ },
408
+ required: ['startLine', 'endLine'],
409
+ },
410
+ },
411
+ },
412
+ required: ['path', 'ranges'],
413
+ },
414
+ description: 'Specific slices to add (for slices mode)',
415
+ },
416
+ view: {
417
+ type: 'string',
418
+ enum: ['summary', 'files', 'content'],
419
+ description: 'View mode for get operation',
420
+ default: 'summary',
421
+ },
422
+ },
423
+ required: ['op'],
424
+ },
425
+ },
426
+ {
427
+ name: 'workspace_context',
428
+ description: 'Get comprehensive workspace context snapshot - combines selection, code structure, and file tree.',
429
+ inputSchema: {
430
+ type: 'object',
431
+ properties: {
432
+ include: {
433
+ type: 'array',
434
+ items: {
435
+ type: 'string',
436
+ enum: ['selection', 'code', 'files', 'tree', 'tokens'],
437
+ },
438
+ description: 'What to include: selection (summary), code (tree-sitter structures), files (contents), tree (file tree), tokens (count)',
439
+ default: ['selection', 'tokens'],
440
+ },
441
+ },
442
+ },
443
+ },
444
+ {
445
+ name: 'index_code',
446
+ description: 'Index code files into database for structure extraction. Must be called before get_code_structure to populate the database.',
447
+ inputSchema: {
448
+ type: 'object',
449
+ properties: {
450
+ paths: {
451
+ type: 'array',
452
+ items: { type: 'string' },
453
+ description: 'File paths to index',
454
+ },
455
+ },
456
+ required: ['paths'],
457
+ },
458
+ },
459
+ ];
460
+ }
461
+ async run() {
462
+ // Wait for bundled modules to load
463
+ await this.bundledModulesPromise;
464
+ const transport = new StdioServerTransport();
465
+ await this.server.connect(transport);
466
+ console.error('Context MCP Server running on stdio');
467
+ if (this.bundledModulesLoaded) {
468
+ console.error('✅ Continue FTS5 + tree-sitter loaded via bundling');
469
+ console.error(' Performance: ~220x faster search, 40+ languages supported');
470
+ }
471
+ else {
472
+ console.error('⚠️ Bundled modules not available');
473
+ }
474
+ console.error('See docs/BUNDLING_SOLUTION.md for details');
475
+ }
476
+ dispose() {
477
+ this.selectionManager.dispose();
478
+ }
479
+ }
480
+ //# 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,47 @@
1
+ /**
2
+ * Continue Worker Path Resolution
3
+ *
4
+ * Resolves worker filenames to their actual paths in node_modules/@continuedev/core.
5
+ * This shim enables Continue's worker-based tokenization to work when the main code
6
+ * is bundled to a different location than the worker files.
7
+ *
8
+ * @see docs/BUNDLING_SOLUTION.md for architecture details
9
+ */
10
+ export type WorkerManifest = Record<string, string>;
11
+ /**
12
+ * Locate @continuedev/core's package root in node_modules.
13
+ * Uses Node's standard module resolution - works with npm/yarn/pnpm.
14
+ */
15
+ export declare function resolveCoreRoot(): string;
16
+ /**
17
+ * Build a manifest mapping worker basenames to absolute paths.
18
+ * Scans @continuedev/core for files matching worker naming conventions.
19
+ *
20
+ * @param opts.cache - Whether to cache the result (default: true)
21
+ * @param opts.patterns - Glob patterns to match worker files
22
+ */
23
+ export declare function buildWorkerManifest(opts?: {
24
+ cache?: boolean;
25
+ patterns?: string[];
26
+ }): Promise<WorkerManifest>;
27
+ /**
28
+ * Resolve a worker path to its actual location.
29
+ *
30
+ * If the input path exists, returns it unchanged.
31
+ * Otherwise, looks up the basename in the worker manifest.
32
+ *
33
+ * @param input - The worker path (may be invalid due to bundling)
34
+ * @returns The resolved absolute path to the worker file
35
+ */
36
+ export declare function resolveWorkerPath(input: string): Promise<string>;
37
+ /**
38
+ * Synchronous version of resolveWorkerPath.
39
+ * Uses cached manifest if available, otherwise builds it synchronously.
40
+ */
41
+ export declare function resolveWorkerPathSync(input: string): string;
42
+ /**
43
+ * Pre-warm the manifest cache.
44
+ * Call this at startup to avoid async resolution during first worker spawn.
45
+ */
46
+ export declare function prewarmManifest(): Promise<void>;
47
+ //# sourceMappingURL=continue-worker-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue-worker-paths.d.ts","sourceRoot":"","sources":["../../src/shims/continue-worker-paths.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAMpD;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAQxC;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,CAAC,EAAE;IAC/C,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,OAAO,CAAC,cAAc,CAAC,CAuC1B;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA8BtE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAyB3D;AAED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAErD"}
@@ -0,0 +1,94 @@
1
+ import { createRequire } from "node:module";
2
+ import path from "node:path";
3
+ import fs from "node:fs";
4
+ import { glob } from "glob";
5
+ let manifest = null;
6
+ let coreRootCache = null;
7
+ function resolveCoreRoot() {
8
+ if (coreRootCache) return coreRootCache;
9
+ const require2 = createRequire(import.meta.url);
10
+ const pkgPath = require2.resolve("@continuedev/core/package.json");
11
+ coreRootCache = path.dirname(pkgPath);
12
+ return coreRootCache;
13
+ }
14
+ async function buildWorkerManifest(opts) {
15
+ const useCache = opts?.cache ?? true;
16
+ if (useCache && manifest) {
17
+ return manifest;
18
+ }
19
+ const coreRoot = resolveCoreRoot();
20
+ const patterns = opts?.patterns ?? [
21
+ "**/*[Ww]orker*.mjs",
22
+ "**/*[Ww]orker*.js"
23
+ ];
24
+ const result = {};
25
+ for (const pattern of patterns) {
26
+ const files = await glob(pattern, {
27
+ cwd: coreRoot,
28
+ ignore: ["**/node_modules/**"]
29
+ });
30
+ for (const file of files) {
31
+ const basename = path.basename(file);
32
+ const absolutePath = path.join(coreRoot, file);
33
+ if (!result[basename] || file.includes("/llm/")) {
34
+ result[basename] = absolutePath;
35
+ }
36
+ }
37
+ }
38
+ if (useCache) {
39
+ manifest = result;
40
+ }
41
+ console.error(`[continue-worker-paths] Built manifest with ${Object.keys(result).length} workers:`, Object.keys(result));
42
+ return result;
43
+ }
44
+ async function resolveWorkerPath(input) {
45
+ if (fs.existsSync(input)) {
46
+ return input;
47
+ }
48
+ const basename = path.basename(input);
49
+ const m = await buildWorkerManifest();
50
+ if (m[basename] && fs.existsSync(m[basename])) {
51
+ console.error(`[continue-worker-paths] Resolved ${basename} -> ${m[basename]}`);
52
+ return m[basename];
53
+ }
54
+ const coreRoot = resolveCoreRoot();
55
+ const fallbackDirs = ["llm", "dist/llm", "codebase", "indexing"];
56
+ for (const dir of fallbackDirs) {
57
+ const candidate = path.join(coreRoot, dir, basename);
58
+ if (fs.existsSync(candidate)) {
59
+ console.error(`[continue-worker-paths] Resolved ${basename} via fallback -> ${candidate}`);
60
+ return candidate;
61
+ }
62
+ }
63
+ console.error(`[continue-worker-paths] Could not resolve ${basename}, returning original path`);
64
+ return input;
65
+ }
66
+ function resolveWorkerPathSync(input) {
67
+ if (fs.existsSync(input)) {
68
+ return input;
69
+ }
70
+ const basename = path.basename(input);
71
+ if (manifest && manifest[basename] && fs.existsSync(manifest[basename])) {
72
+ return manifest[basename];
73
+ }
74
+ const coreRoot = resolveCoreRoot();
75
+ const fallbackDirs = ["llm", "dist/llm", "codebase", "indexing"];
76
+ for (const dir of fallbackDirs) {
77
+ const candidate = path.join(coreRoot, dir, basename);
78
+ if (fs.existsSync(candidate)) {
79
+ console.error(`[continue-worker-paths] Resolved ${basename} via sync fallback -> ${candidate}`);
80
+ return candidate;
81
+ }
82
+ }
83
+ return input;
84
+ }
85
+ async function prewarmManifest() {
86
+ await buildWorkerManifest();
87
+ }
88
+ export {
89
+ buildWorkerManifest,
90
+ prewarmManifest,
91
+ resolveCoreRoot,
92
+ resolveWorkerPath,
93
+ resolveWorkerPathSync
94
+ };
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continue-worker-paths.js","sourceRoot":"","sources":["../../src/shims/continue-worker-paths.ts"],"names":[],"mappings":"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"}