purecontext-mcp 1.2.0 → 1.5.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 (177) hide show
  1. package/AGENT_INSTRUCTIONS.md +110 -784
  2. package/AGENT_REFERENCE.md +561 -0
  3. package/CHANGELOG.md +177 -6
  4. package/FRAMEWORK-ADAPTERS.md +351 -0
  5. package/LANGUAGE-SUPPORT.md +144 -0
  6. package/README.md +92 -12
  7. package/USER-GUIDE.md +8 -0
  8. package/dist/cli/hooks.d.ts +28 -0
  9. package/dist/cli/hooks.d.ts.map +1 -0
  10. package/dist/cli/hooks.js +570 -0
  11. package/dist/cli/hooks.js.map +1 -0
  12. package/dist/cli/install-detect.d.ts +16 -0
  13. package/dist/cli/install-detect.d.ts.map +1 -0
  14. package/dist/cli/install-detect.js +70 -0
  15. package/dist/cli/install-detect.js.map +1 -0
  16. package/dist/cli/install-writers.d.ts +59 -0
  17. package/dist/cli/install-writers.d.ts.map +1 -0
  18. package/dist/cli/install-writers.js +292 -0
  19. package/dist/cli/install-writers.js.map +1 -0
  20. package/dist/cli/install.d.ts +14 -0
  21. package/dist/cli/install.d.ts.map +1 -0
  22. package/dist/cli/install.js +150 -0
  23. package/dist/cli/install.js.map +1 -0
  24. package/dist/config/config-loader.js +3 -0
  25. package/dist/config/config-loader.js.map +1 -1
  26. package/dist/config/config-schema.d.ts +11 -0
  27. package/dist/config/config-schema.d.ts.map +1 -1
  28. package/dist/config/config-schema.js +15 -0
  29. package/dist/config/config-schema.js.map +1 -1
  30. package/dist/core/db/symbol-store.d.ts +1 -0
  31. package/dist/core/db/symbol-store.d.ts.map +1 -1
  32. package/dist/core/db/symbol-store.js +120 -6
  33. package/dist/core/db/symbol-store.js.map +1 -1
  34. package/dist/core/file-discovery.d.ts +6 -0
  35. package/dist/core/file-discovery.d.ts.map +1 -1
  36. package/dist/core/file-discovery.js +20 -13
  37. package/dist/core/file-discovery.js.map +1 -1
  38. package/dist/core/file-processor.d.ts.map +1 -1
  39. package/dist/core/file-processor.js +26 -1
  40. package/dist/core/file-processor.js.map +1 -1
  41. package/dist/core/git-log-reader.d.ts.map +1 -1
  42. package/dist/core/git-log-reader.js +21 -0
  43. package/dist/core/git-log-reader.js.map +1 -1
  44. package/dist/core/index-manager.d.ts.map +1 -1
  45. package/dist/core/index-manager.js +21 -7
  46. package/dist/core/index-manager.js.map +1 -1
  47. package/dist/core/indexing-worker.d.ts.map +1 -1
  48. package/dist/core/indexing-worker.js +14 -0
  49. package/dist/core/indexing-worker.js.map +1 -1
  50. package/dist/core/parse-dispatcher.d.ts.map +1 -1
  51. package/dist/core/parse-dispatcher.js +20 -5
  52. package/dist/core/parse-dispatcher.js.map +1 -1
  53. package/dist/core/search/query-preprocessor.d.ts +69 -3
  54. package/dist/core/search/query-preprocessor.d.ts.map +1 -1
  55. package/dist/core/search/query-preprocessor.js +450 -17
  56. package/dist/core/search/query-preprocessor.js.map +1 -1
  57. package/dist/core/search/relevance-ranker.d.ts +60 -5
  58. package/dist/core/search/relevance-ranker.d.ts.map +1 -1
  59. package/dist/core/search/relevance-ranker.js +931 -33
  60. package/dist/core/search/relevance-ranker.js.map +1 -1
  61. package/dist/core/test-mapper.d.ts.map +1 -1
  62. package/dist/core/test-mapper.js +7 -1
  63. package/dist/core/test-mapper.js.map +1 -1
  64. package/dist/core/types.d.ts +28 -1
  65. package/dist/core/types.d.ts.map +1 -1
  66. package/dist/handlers/angular-html.d.ts +3 -0
  67. package/dist/handlers/angular-html.d.ts.map +1 -0
  68. package/dist/handlers/angular-html.js +215 -0
  69. package/dist/handlers/angular-html.js.map +1 -0
  70. package/dist/handlers/c.d.ts.map +1 -1
  71. package/dist/handlers/c.js +19 -0
  72. package/dist/handlers/c.js.map +1 -1
  73. package/dist/handlers/cpp-macro-registry.d.ts +21 -0
  74. package/dist/handlers/cpp-macro-registry.d.ts.map +1 -0
  75. package/dist/handlers/cpp-macro-registry.js +44 -0
  76. package/dist/handlers/cpp-macro-registry.js.map +1 -0
  77. package/dist/handlers/cpp.d.ts.map +1 -1
  78. package/dist/handlers/cpp.js +579 -10
  79. package/dist/handlers/cpp.js.map +1 -1
  80. package/dist/handlers/csharp.d.ts.map +1 -1
  81. package/dist/handlers/csharp.js +39 -2
  82. package/dist/handlers/csharp.js.map +1 -1
  83. package/dist/handlers/css.d.ts +3 -0
  84. package/dist/handlers/css.d.ts.map +1 -0
  85. package/dist/handlers/css.js +154 -0
  86. package/dist/handlers/css.js.map +1 -0
  87. package/dist/handlers/erlang.d.ts.map +1 -1
  88. package/dist/handlers/erlang.js +8 -1
  89. package/dist/handlers/erlang.js.map +1 -1
  90. package/dist/handlers/fortran.js +1 -1
  91. package/dist/handlers/fortran.js.map +1 -1
  92. package/dist/handlers/go.d.ts.map +1 -1
  93. package/dist/handlers/go.js +87 -2
  94. package/dist/handlers/go.js.map +1 -1
  95. package/dist/handlers/handler-registry.d.ts.map +1 -1
  96. package/dist/handlers/handler-registry.js +4 -0
  97. package/dist/handlers/handler-registry.js.map +1 -1
  98. package/dist/handlers/hcl.d.ts +3 -0
  99. package/dist/handlers/hcl.d.ts.map +1 -0
  100. package/dist/handlers/hcl.js +193 -0
  101. package/dist/handlers/hcl.js.map +1 -0
  102. package/dist/handlers/java.d.ts.map +1 -1
  103. package/dist/handlers/java.js +33 -16
  104. package/dist/handlers/java.js.map +1 -1
  105. package/dist/handlers/kotlin.d.ts.map +1 -1
  106. package/dist/handlers/kotlin.js +48 -3
  107. package/dist/handlers/kotlin.js.map +1 -1
  108. package/dist/handlers/less.d.ts +3 -0
  109. package/dist/handlers/less.d.ts.map +1 -0
  110. package/dist/handlers/less.js +255 -0
  111. package/dist/handlers/less.js.map +1 -0
  112. package/dist/handlers/objective-c.d.ts.map +1 -1
  113. package/dist/handlers/objective-c.js +122 -64
  114. package/dist/handlers/objective-c.js.map +1 -1
  115. package/dist/handlers/openapi.d.ts.map +1 -1
  116. package/dist/handlers/openapi.js +30 -5
  117. package/dist/handlers/openapi.js.map +1 -1
  118. package/dist/handlers/php.d.ts.map +1 -1
  119. package/dist/handlers/php.js +287 -41
  120. package/dist/handlers/php.js.map +1 -1
  121. package/dist/handlers/protobuf.d.ts.map +1 -1
  122. package/dist/handlers/protobuf.js +1 -0
  123. package/dist/handlers/protobuf.js.map +1 -1
  124. package/dist/handlers/python.d.ts.map +1 -1
  125. package/dist/handlers/python.js +1 -3
  126. package/dist/handlers/python.js.map +1 -1
  127. package/dist/handlers/ruby-dsl.d.ts +23 -0
  128. package/dist/handlers/ruby-dsl.d.ts.map +1 -0
  129. package/dist/handlers/ruby-dsl.js +251 -0
  130. package/dist/handlers/ruby-dsl.js.map +1 -0
  131. package/dist/handlers/ruby.d.ts.map +1 -1
  132. package/dist/handlers/ruby.js +29 -4
  133. package/dist/handlers/ruby.js.map +1 -1
  134. package/dist/handlers/rust.d.ts.map +1 -1
  135. package/dist/handlers/rust.js +98 -2
  136. package/dist/handlers/rust.js.map +1 -1
  137. package/dist/handlers/scss.d.ts +3 -0
  138. package/dist/handlers/scss.d.ts.map +1 -0
  139. package/dist/handlers/scss.js +290 -0
  140. package/dist/handlers/scss.js.map +1 -0
  141. package/dist/handlers/sql.d.ts.map +1 -1
  142. package/dist/handlers/sql.js +37 -18
  143. package/dist/handlers/sql.js.map +1 -1
  144. package/dist/handlers/typescript.d.ts.map +1 -1
  145. package/dist/handlers/typescript.js +65 -17
  146. package/dist/handlers/typescript.js.map +1 -1
  147. package/dist/handlers/xml.d.ts.map +1 -1
  148. package/dist/handlers/xml.js +35 -2
  149. package/dist/handlers/xml.js.map +1 -1
  150. package/dist/index.d.ts.map +1 -1
  151. package/dist/index.js +91 -0
  152. package/dist/index.js.map +1 -1
  153. package/dist/server/mcp-server.d.ts.map +1 -1
  154. package/dist/server/mcp-server.js +10 -0
  155. package/dist/server/mcp-server.js.map +1 -1
  156. package/dist/server/tools/detect-antipatterns.d.ts +1 -1
  157. package/dist/server/tools/get-architecture-snapshot.d.ts +1 -1
  158. package/dist/server/tools/get-entry-points.d.ts +1 -1
  159. package/dist/server/tools/get-lexical-scope-matches.d.ts +54 -0
  160. package/dist/server/tools/get-lexical-scope-matches.d.ts.map +1 -0
  161. package/dist/server/tools/get-lexical-scope-matches.js +470 -0
  162. package/dist/server/tools/get-lexical-scope-matches.js.map +1 -0
  163. package/dist/server/tools/search-symbols.d.ts +10 -0
  164. package/dist/server/tools/search-symbols.d.ts.map +1 -1
  165. package/dist/server/tools/search-symbols.js +353 -8
  166. package/dist/server/tools/search-symbols.js.map +1 -1
  167. package/dist/server/tools/trace-invocation-chain.d.ts +53 -0
  168. package/dist/server/tools/trace-invocation-chain.d.ts.map +1 -0
  169. package/dist/server/tools/trace-invocation-chain.js +280 -0
  170. package/dist/server/tools/trace-invocation-chain.js.map +1 -0
  171. package/dist/version.d.ts +1 -1
  172. package/dist/version.js +1 -1
  173. package/docs/02-installation.md +89 -17
  174. package/docs/05-cli-reference.md +89 -0
  175. package/docs/dev/benchmark-findings-eu-za-tebe.md +210 -0
  176. package/docs/dev/phase-35-coverage-audit.md +469 -0
  177. package/package.json +4 -1
@@ -0,0 +1,470 @@
1
+ /**
2
+ * get-lexical-scope-matches.ts
3
+ *
4
+ * MCP tool: get_lexical_scope_matches
5
+ *
6
+ * Find all calls to `childCall` that appear lexically inside a `parentCall`
7
+ * scope block — e.g. all `get` calls inside `routing { ... }` (Ktor/Ruby),
8
+ * all `before_action` calls in a Rails controller class, all `register` calls
9
+ * inside a `ClassMethods` module (Ruby metaprogramming).
10
+ *
11
+ * Re-parses stored file content using the appropriate tree-sitter grammar.
12
+ * Only files backed by a WASM grammar are searched.
13
+ */
14
+ import { z } from 'zod';
15
+ import { openDatabase } from '../../core/db/schema.js';
16
+ import { buildMeta } from './_meta.js';
17
+ import { getHandler } from '../../handlers/handler-registry.js';
18
+ import { initParser, parseFile, isInitialized } from '../../core/parse-dispatcher.js';
19
+ export const name = 'get_lexical_scope_matches';
20
+ export const description = 'Find all calls to `childCall` that appear lexically inside a `parentCall` scope — ' +
21
+ 'e.g. all `get` calls inside `routing { ... }` (Ktor), all `before_action` calls in a ' +
22
+ 'Rails controller class, all `register` calls inside a `ClassMethods` module. ' +
23
+ 'Re-parses stored file content using the appropriate tree-sitter grammar. ' +
24
+ 'Only files backed by a WASM grammar are searched.';
25
+ export const inputSchema = {
26
+ repoId: z.string().describe('Repository ID returned by index_folder or list_repos'),
27
+ childCall: z
28
+ .string()
29
+ .min(1)
30
+ .describe('The inner call to find (e.g. "get", "before_action", "register")'),
31
+ parentCall: z
32
+ .string()
33
+ .min(1)
34
+ .describe('The outer scope name to search inside (e.g. "routing", "ClassMethods", "PostsController")'),
35
+ parentKind: z
36
+ .enum(['call', 'class', 'module'])
37
+ .optional()
38
+ .describe('AST kind of the parent scope: "call" (function call with block, e.g. routing { }), ' +
39
+ '"class" (class definition), "module" (module/namespace definition). ' +
40
+ 'When omitted, all scope kinds are checked.'),
41
+ childArgMatches: z
42
+ .object({
43
+ position: z.number().int().min(0).describe('0-indexed argument position to check'),
44
+ type: z
45
+ .enum(['symbol', 'string', 'identifier'])
46
+ .describe('Expected argument AST type at the given position'),
47
+ matchesPrivate: z
48
+ .boolean()
49
+ .optional()
50
+ .describe('If true, only include matches where the argument names a method defined ' +
51
+ 'in the private section of the enclosing class/module'),
52
+ })
53
+ .optional()
54
+ .describe('Optional argument-level filter on the child call'),
55
+ language: z
56
+ .string()
57
+ .optional()
58
+ .describe('Restrict search to files of a specific language (e.g. "ruby", "kotlin")'),
59
+ filePath: z
60
+ .string()
61
+ .optional()
62
+ .describe('Restrict search to a specific file path or directory prefix'),
63
+ limit: z
64
+ .number()
65
+ .int()
66
+ .positive()
67
+ .optional()
68
+ .describe('Maximum matches to return (default 100)'),
69
+ };
70
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
71
+ function nodeText(node, buf) {
72
+ return buf.toString('utf8', node.startIndex, node.endIndex);
73
+ }
74
+ function byteOffsetToLine(buf, byteOffset) {
75
+ let line = 1;
76
+ const end = Math.min(byteOffset, buf.length);
77
+ for (let i = 0; i < end; i++) {
78
+ if (buf[i] === 0x0a)
79
+ line++;
80
+ }
81
+ return line;
82
+ }
83
+ /**
84
+ * Extract the method/function name from a call-like node.
85
+ * Handles Ruby (`call` with `method` field), JS/TS/Kotlin (`call_expression`
86
+ * with `function` or first `identifier` child), and bare identifiers.
87
+ */
88
+ function getCallName(node, buf) {
89
+ const methodField = node.childForFieldName('method') ??
90
+ node.childForFieldName('function') ??
91
+ node.childForFieldName('name');
92
+ if (methodField) {
93
+ const t = nodeText(methodField, buf);
94
+ // Strip member receiver: "obj.method" → "method"
95
+ return t.includes('.') ? t.split('.').pop() : t;
96
+ }
97
+ // Fallback: first identifier/constant child before argument list or block
98
+ for (const child of node.children) {
99
+ if (child.type === 'identifier' ||
100
+ child.type === 'constant' ||
101
+ child.type === 'simple_identifier') {
102
+ return nodeText(child, buf);
103
+ }
104
+ // Stop before args / block
105
+ if (child.type === 'argument_list' ||
106
+ child.type === 'arguments' ||
107
+ child.type === 'do_block' ||
108
+ child.type === 'block' ||
109
+ child.type === 'call_suffix')
110
+ break;
111
+ }
112
+ return null;
113
+ }
114
+ /** Get the scope body node for a parent match. */
115
+ function getScopeBody(parentNode, parentKind) {
116
+ if (!parentKind || parentKind === 'call') {
117
+ // Ruby: do_block or block child
118
+ const doBlock = parentNode.children.find((c) => c.type === 'do_block' || c.type === 'block');
119
+ if (doBlock) {
120
+ return doBlock.childForFieldName('body') ?? doBlock;
121
+ }
122
+ // Kotlin/JS: trailing lambda literal inside call_suffix
123
+ const callSuffix = parentNode.children.find((c) => c.type === 'call_suffix');
124
+ if (callSuffix) {
125
+ const lambda = callSuffix.children.find((c) => c.type === 'lambda_literal' || c.type === 'trailing_lambda');
126
+ if (lambda)
127
+ return lambda.childForFieldName('statements') ?? lambda;
128
+ }
129
+ // JS/TS: last argument as arrow_function/function_expression
130
+ const args = parentNode.childForFieldName('arguments');
131
+ if (args) {
132
+ const lastArg = args.children[args.children.length - 1];
133
+ if (lastArg &&
134
+ (lastArg.type === 'arrow_function' ||
135
+ lastArg.type === 'function_expression' ||
136
+ lastArg.type === 'lambda_literal')) {
137
+ return lastArg.childForFieldName('body') ?? lastArg;
138
+ }
139
+ }
140
+ // Fallback: search the whole node
141
+ return parentNode;
142
+ }
143
+ if (parentKind === 'class' || parentKind === 'module') {
144
+ return parentNode.childForFieldName('body') ?? parentNode;
145
+ }
146
+ return parentNode;
147
+ }
148
+ /** Find all parent scope nodes matching parentCall + parentKind. */
149
+ function findParentScopes(root, parentCall, parentKind, buf) {
150
+ const results = [];
151
+ function walk(node) {
152
+ let match = false;
153
+ if (!parentKind || parentKind === 'call') {
154
+ if (node.type === 'call' ||
155
+ node.type === 'call_expression' ||
156
+ node.type === 'method_invocation' ||
157
+ node.type === 'function_call') {
158
+ const n = getCallName(node, buf);
159
+ if (n === parentCall)
160
+ match = true;
161
+ }
162
+ }
163
+ if (!parentKind || parentKind === 'class') {
164
+ if (node.type === 'class' ||
165
+ node.type === 'class_declaration' ||
166
+ node.type === 'class_definition') {
167
+ const nameNode = node.childForFieldName('name');
168
+ if (nameNode && nodeText(nameNode, buf) === parentCall)
169
+ match = true;
170
+ }
171
+ }
172
+ if (!parentKind || parentKind === 'module') {
173
+ if (node.type === 'module' || node.type === 'object_declaration') {
174
+ const nameNode = node.childForFieldName('name');
175
+ if (nameNode && nodeText(nameNode, buf) === parentCall)
176
+ match = true;
177
+ }
178
+ }
179
+ if (match) {
180
+ results.push(node);
181
+ // Don't recurse into matched scopes (avoid nested matches at wrong level)
182
+ return;
183
+ }
184
+ for (const child of node.children)
185
+ walk(child);
186
+ }
187
+ walk(root);
188
+ return results;
189
+ }
190
+ /** Recursively find all child call nodes in a scope body. */
191
+ function findChildCallsInScope(scopeBody, childCall, buf) {
192
+ const results = [];
193
+ function walk(node) {
194
+ if (node.type === 'call' ||
195
+ node.type === 'call_expression' ||
196
+ node.type === 'method_invocation' ||
197
+ node.type === 'function_call') {
198
+ const n = getCallName(node, buf);
199
+ if (n === childCall) {
200
+ results.push(node);
201
+ return; // don't look for nested matches inside this call
202
+ }
203
+ }
204
+ for (const child of node.children)
205
+ walk(child);
206
+ }
207
+ walk(scopeBody);
208
+ return results;
209
+ }
210
+ /** Get the argument at `position` from a call node's argument list. */
211
+ function getArgAtPosition(callNode, position) {
212
+ // Look for argument_list / arguments child
213
+ const argList = callNode.childForFieldName('arguments') ??
214
+ callNode.children.find((c) => c.type === 'argument_list' ||
215
+ c.type === 'arguments' ||
216
+ c.type === 'call_suffix');
217
+ if (!argList)
218
+ return null;
219
+ let idx = 0;
220
+ for (const child of argList.children) {
221
+ // Skip punctuation and grouping nodes
222
+ if (child.type === '(' ||
223
+ child.type === ')' ||
224
+ child.type === ',' ||
225
+ child.type === ' ')
226
+ continue;
227
+ if (idx === position)
228
+ return child;
229
+ idx++;
230
+ }
231
+ return null;
232
+ }
233
+ /** Map argument node type to the childArgMatches.type expectation. */
234
+ function nodeMatchesArgType(node, expectedType) {
235
+ if (expectedType === 'symbol') {
236
+ return (node.type === 'simple_symbol' ||
237
+ node.type === 'symbol' ||
238
+ node.type === ':' ||
239
+ (node.type === 'pair' && node.children[0]?.type === 'simple_symbol'));
240
+ }
241
+ if (expectedType === 'string') {
242
+ return (node.type === 'string' ||
243
+ node.type === 'string_literal' ||
244
+ node.type === 'interpreted_string_literal');
245
+ }
246
+ if (expectedType === 'identifier') {
247
+ return node.type === 'identifier' || node.type === 'simple_identifier';
248
+ }
249
+ return false;
250
+ }
251
+ /**
252
+ * Extract the string value from a symbol/string/identifier argument.
253
+ * E.g. `:authenticate` → "authenticate", `"path"` → "path"
254
+ */
255
+ function argValue(node, buf) {
256
+ const raw = nodeText(node, buf);
257
+ // Strip leading colon from Ruby symbols
258
+ if (raw.startsWith(':'))
259
+ return raw.slice(1);
260
+ // Strip quotes from strings
261
+ if ((raw.startsWith('"') && raw.endsWith('"')) ||
262
+ (raw.startsWith("'") && raw.endsWith("'"))) {
263
+ return raw.slice(1, -1);
264
+ }
265
+ return raw;
266
+ }
267
+ /**
268
+ * Find methods defined in the private section of a class/module body node.
269
+ * "Private section" = after a standalone `private` call with no arguments.
270
+ */
271
+ function findPrivateMethodsInBody(bodyNode, buf) {
272
+ if (!bodyNode)
273
+ return new Set();
274
+ const privates = new Set();
275
+ let seenPrivate = false;
276
+ for (const child of bodyNode.children) {
277
+ if (!seenPrivate) {
278
+ // Standalone `private` keyword — call node with no significant args
279
+ const isPrivateKeyword = (child.type === 'call' && getCallName(child, buf) === 'private') ||
280
+ (child.type === 'identifier' && nodeText(child, buf) === 'private');
281
+ if (isPrivateKeyword) {
282
+ // Only treat as section marker if there are no non-block args
283
+ // (i.e. `private` alone, not `private def foo`)
284
+ const argList = child.childForFieldName('arguments');
285
+ if (!argList || argList.namedChildCount === 0) {
286
+ seenPrivate = true;
287
+ continue;
288
+ }
289
+ }
290
+ }
291
+ if (seenPrivate && child.type === 'method') {
292
+ const nameNode = child.childForFieldName('name');
293
+ if (nameNode)
294
+ privates.add(nodeText(nameNode, buf));
295
+ }
296
+ }
297
+ return privates;
298
+ }
299
+ // ─── Handler ──────────────────────────────────────────────────────────────────
300
+ export async function handler(args) {
301
+ const t0 = Date.now();
302
+ const { repoId, childCall, parentCall, parentKind, childArgMatches, language, filePath, limit = 100, } = args;
303
+ const db = openDatabase(repoId);
304
+ try {
305
+ const repoRow = db
306
+ .prepare('SELECT id FROM repos WHERE id = ?')
307
+ .get(repoId);
308
+ if (!repoRow) {
309
+ return {
310
+ content: [
311
+ {
312
+ type: 'text',
313
+ text: JSON.stringify({ error: `Repository not found: ${repoId}` }),
314
+ },
315
+ ],
316
+ isError: true,
317
+ };
318
+ }
319
+ // ── Resolve language → allowed extensions ────────────────────────────────
320
+ let allowedExtensions = null;
321
+ if (language) {
322
+ const langToExt = {
323
+ typescript: ['.ts', '.tsx'],
324
+ javascript: ['.js', '.jsx', '.mjs', '.cjs'],
325
+ python: ['.py'],
326
+ go: ['.go'],
327
+ rust: ['.rs'],
328
+ java: ['.java'],
329
+ kotlin: ['.kt', '.kts'],
330
+ ruby: ['.rb'],
331
+ php: ['.php'],
332
+ cpp: ['.cpp', '.cc', '.cxx', '.hpp', '.hxx', '.hh'],
333
+ c: ['.c', '.h'],
334
+ swift: ['.swift'],
335
+ scala: ['.scala'],
336
+ elixir: ['.ex', '.exs'],
337
+ };
338
+ const exts = langToExt[language.toLowerCase()];
339
+ if (exts)
340
+ allowedExtensions = new Set(exts);
341
+ }
342
+ // ── Build file query ─────────────────────────────────────────────────────
343
+ const conditions = ['repo_id = @repoId', 'raw_content IS NOT NULL'];
344
+ const params = { repoId };
345
+ if (filePath) {
346
+ conditions.push('(path = @filePath OR path LIKE @filePathPrefix)');
347
+ params['filePath'] = filePath;
348
+ params['filePathPrefix'] = `${filePath}%`;
349
+ }
350
+ const sql = `
351
+ SELECT path, raw_content
352
+ FROM files
353
+ WHERE ${conditions.join(' AND ')}
354
+ ORDER BY path
355
+ `;
356
+ const fileRows = db
357
+ .prepare(sql)
358
+ .all(params);
359
+ // ── Initialize parser ────────────────────────────────────────────────────
360
+ if (!isInitialized()) {
361
+ await initParser();
362
+ }
363
+ // ── Walk files ───────────────────────────────────────────────────────────
364
+ const matches = [];
365
+ const skippedFiles = [];
366
+ let truncated = false;
367
+ for (const row of fileRows) {
368
+ if (!row.raw_content)
369
+ continue;
370
+ if (matches.length >= limit) {
371
+ truncated = true;
372
+ break;
373
+ }
374
+ const fp = row.path;
375
+ const content = row.raw_content;
376
+ // Extension filter
377
+ const ext = fp.includes('.')
378
+ ? `.${fp.split('.').pop().toLowerCase()}`
379
+ : '';
380
+ if (allowedExtensions && !allowedExtensions.has(ext))
381
+ continue;
382
+ const h = getHandler(fp);
383
+ if (!h || h.grammarPath() === null) {
384
+ if (h)
385
+ skippedFiles.push(fp);
386
+ continue;
387
+ }
388
+ let tree;
389
+ try {
390
+ tree = await parseFile(content, h);
391
+ }
392
+ catch {
393
+ skippedFiles.push(fp);
394
+ continue;
395
+ }
396
+ const parentScopes = findParentScopes(tree.rootNode, parentCall, parentKind, content);
397
+ for (const parentNode of parentScopes) {
398
+ if (matches.length >= limit) {
399
+ truncated = true;
400
+ break;
401
+ }
402
+ const scopeBody = getScopeBody(parentNode, parentKind);
403
+ if (!scopeBody)
404
+ continue;
405
+ // Build private method set for this scope (if matchesPrivate is needed)
406
+ let privateMethods = null;
407
+ if (childArgMatches?.matchesPrivate) {
408
+ privateMethods = findPrivateMethodsInBody(scopeBody, content);
409
+ }
410
+ const childCalls = findChildCallsInScope(scopeBody, childCall, content);
411
+ for (const callNode of childCalls) {
412
+ if (matches.length >= limit) {
413
+ truncated = true;
414
+ break;
415
+ }
416
+ let resolvedArg;
417
+ if (childArgMatches) {
418
+ const argNode = getArgAtPosition(callNode, childArgMatches.position);
419
+ if (!argNode)
420
+ continue;
421
+ if (!nodeMatchesArgType(argNode, childArgMatches.type))
422
+ continue;
423
+ resolvedArg = argValue(argNode, content);
424
+ if (childArgMatches.matchesPrivate && privateMethods) {
425
+ if (!privateMethods.has(resolvedArg))
426
+ continue;
427
+ }
428
+ }
429
+ const startLine = byteOffsetToLine(content, callNode.startIndex);
430
+ const endLine = byteOffsetToLine(content, callNode.endIndex);
431
+ const rawText = content.toString('utf8', callNode.startIndex, callNode.endIndex);
432
+ const snippet = rawText.length > 150 ? rawText.slice(0, 150) + '…' : rawText;
433
+ matches.push({
434
+ filePath: fp,
435
+ startLine,
436
+ endLine,
437
+ snippet,
438
+ parentName: parentCall,
439
+ ...(resolvedArg !== undefined ? { resolvedArg } : {}),
440
+ });
441
+ }
442
+ }
443
+ if (truncated)
444
+ break;
445
+ }
446
+ const responseBytes = matches.reduce((sum, m) => sum + m.snippet.length + m.filePath.length + 60, 0);
447
+ const tokenEstimate = Math.ceil(responseBytes / 4);
448
+ return {
449
+ content: [
450
+ {
451
+ type: 'text',
452
+ text: JSON.stringify({
453
+ matches,
454
+ totalFound: matches.length,
455
+ truncated,
456
+ parentCall,
457
+ childCall,
458
+ skippedFiles: skippedFiles.length > 0 ? skippedFiles : undefined,
459
+ _tokenEstimate: tokenEstimate,
460
+ _meta: buildMeta({ timingMs: Date.now() - t0 }),
461
+ }, null, 2),
462
+ },
463
+ ],
464
+ };
465
+ }
466
+ finally {
467
+ db.close();
468
+ }
469
+ }
470
+ //# sourceMappingURL=get-lexical-scope-matches.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-lexical-scope-matches.js","sourceRoot":"","sources":["../../../src/server/tools/get-lexical-scope-matches.ts"],"names":[],"mappings":"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"}
@@ -31,6 +31,11 @@ export declare const inputSchema: {
31
31
  semantic_weight: z.ZodOptional<z.ZodNumber>;
32
32
  keyword_weight: z.ZodOptional<z.ZodNumber>;
33
33
  debug: z.ZodOptional<z.ZodBoolean>;
34
+ cfgFilter: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
35
+ kind: z.ZodString;
36
+ key: z.ZodOptional<z.ZodString>;
37
+ value: z.ZodOptional<z.ZodString>;
38
+ }, z.core.$strip>]>>;
34
39
  };
35
40
  export declare function handler(args: {
36
41
  repoId?: string;
@@ -43,5 +48,10 @@ export declare function handler(args: {
43
48
  semantic_weight?: number;
44
49
  keyword_weight?: number;
45
50
  debug?: boolean;
51
+ cfgFilter?: string | {
52
+ kind: string;
53
+ key?: string;
54
+ value?: string;
55
+ };
46
56
  }): Promise<CallToolResult>;
47
57
  //# sourceMappingURL=search-symbols.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-symbols.d.ts","sourceRoot":"","sources":["../../../src/server/tools/search-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,mBAAmB,CAAC;AAErC,eAAO,MAAM,WAAW,QAKmD,CAAC;AAE5E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwCvB,CAAC;AAyBF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,GAAG,OAAO,CAAC,cAAc,CAAC,CAiQ1B"}
1
+ {"version":3,"file":"search-symbols.d.ts","sourceRoot":"","sources":["../../../src/server/tools/search-symbols.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,mBAAmB,CAAC;AAErC,eAAO,MAAM,WAAW,QAKmD,CAAC;AAE5E,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsDvB,CAAC;AAiFF,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,QAAQ,CAAC;IACzC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrE,GAAG,OAAO,CAAC,cAAc,CAAC,CA4Y1B"}