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.
- package/AGENT_INSTRUCTIONS.md +110 -784
- package/AGENT_REFERENCE.md +561 -0
- package/CHANGELOG.md +177 -6
- package/FRAMEWORK-ADAPTERS.md +351 -0
- package/LANGUAGE-SUPPORT.md +144 -0
- package/README.md +92 -12
- package/USER-GUIDE.md +8 -0
- package/dist/cli/hooks.d.ts +28 -0
- package/dist/cli/hooks.d.ts.map +1 -0
- package/dist/cli/hooks.js +570 -0
- package/dist/cli/hooks.js.map +1 -0
- package/dist/cli/install-detect.d.ts +16 -0
- package/dist/cli/install-detect.d.ts.map +1 -0
- package/dist/cli/install-detect.js +70 -0
- package/dist/cli/install-detect.js.map +1 -0
- package/dist/cli/install-writers.d.ts +59 -0
- package/dist/cli/install-writers.d.ts.map +1 -0
- package/dist/cli/install-writers.js +292 -0
- package/dist/cli/install-writers.js.map +1 -0
- package/dist/cli/install.d.ts +14 -0
- package/dist/cli/install.d.ts.map +1 -0
- package/dist/cli/install.js +150 -0
- package/dist/cli/install.js.map +1 -0
- package/dist/config/config-loader.js +3 -0
- package/dist/config/config-loader.js.map +1 -1
- package/dist/config/config-schema.d.ts +11 -0
- package/dist/config/config-schema.d.ts.map +1 -1
- package/dist/config/config-schema.js +15 -0
- package/dist/config/config-schema.js.map +1 -1
- package/dist/core/db/symbol-store.d.ts +1 -0
- package/dist/core/db/symbol-store.d.ts.map +1 -1
- package/dist/core/db/symbol-store.js +120 -6
- package/dist/core/db/symbol-store.js.map +1 -1
- package/dist/core/file-discovery.d.ts +6 -0
- package/dist/core/file-discovery.d.ts.map +1 -1
- package/dist/core/file-discovery.js +20 -13
- package/dist/core/file-discovery.js.map +1 -1
- package/dist/core/file-processor.d.ts.map +1 -1
- package/dist/core/file-processor.js +26 -1
- package/dist/core/file-processor.js.map +1 -1
- package/dist/core/git-log-reader.d.ts.map +1 -1
- package/dist/core/git-log-reader.js +21 -0
- package/dist/core/git-log-reader.js.map +1 -1
- package/dist/core/index-manager.d.ts.map +1 -1
- package/dist/core/index-manager.js +21 -7
- package/dist/core/index-manager.js.map +1 -1
- package/dist/core/indexing-worker.d.ts.map +1 -1
- package/dist/core/indexing-worker.js +14 -0
- package/dist/core/indexing-worker.js.map +1 -1
- package/dist/core/parse-dispatcher.d.ts.map +1 -1
- package/dist/core/parse-dispatcher.js +20 -5
- package/dist/core/parse-dispatcher.js.map +1 -1
- package/dist/core/search/query-preprocessor.d.ts +69 -3
- package/dist/core/search/query-preprocessor.d.ts.map +1 -1
- package/dist/core/search/query-preprocessor.js +450 -17
- package/dist/core/search/query-preprocessor.js.map +1 -1
- package/dist/core/search/relevance-ranker.d.ts +60 -5
- package/dist/core/search/relevance-ranker.d.ts.map +1 -1
- package/dist/core/search/relevance-ranker.js +931 -33
- package/dist/core/search/relevance-ranker.js.map +1 -1
- package/dist/core/test-mapper.d.ts.map +1 -1
- package/dist/core/test-mapper.js +7 -1
- package/dist/core/test-mapper.js.map +1 -1
- package/dist/core/types.d.ts +28 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/handlers/angular-html.d.ts +3 -0
- package/dist/handlers/angular-html.d.ts.map +1 -0
- package/dist/handlers/angular-html.js +215 -0
- package/dist/handlers/angular-html.js.map +1 -0
- package/dist/handlers/c.d.ts.map +1 -1
- package/dist/handlers/c.js +19 -0
- package/dist/handlers/c.js.map +1 -1
- package/dist/handlers/cpp-macro-registry.d.ts +21 -0
- package/dist/handlers/cpp-macro-registry.d.ts.map +1 -0
- package/dist/handlers/cpp-macro-registry.js +44 -0
- package/dist/handlers/cpp-macro-registry.js.map +1 -0
- package/dist/handlers/cpp.d.ts.map +1 -1
- package/dist/handlers/cpp.js +579 -10
- package/dist/handlers/cpp.js.map +1 -1
- package/dist/handlers/csharp.d.ts.map +1 -1
- package/dist/handlers/csharp.js +39 -2
- package/dist/handlers/csharp.js.map +1 -1
- package/dist/handlers/css.d.ts +3 -0
- package/dist/handlers/css.d.ts.map +1 -0
- package/dist/handlers/css.js +154 -0
- package/dist/handlers/css.js.map +1 -0
- package/dist/handlers/erlang.d.ts.map +1 -1
- package/dist/handlers/erlang.js +8 -1
- package/dist/handlers/erlang.js.map +1 -1
- package/dist/handlers/fortran.js +1 -1
- package/dist/handlers/fortran.js.map +1 -1
- package/dist/handlers/go.d.ts.map +1 -1
- package/dist/handlers/go.js +87 -2
- package/dist/handlers/go.js.map +1 -1
- package/dist/handlers/handler-registry.d.ts.map +1 -1
- package/dist/handlers/handler-registry.js +4 -0
- package/dist/handlers/handler-registry.js.map +1 -1
- package/dist/handlers/hcl.d.ts +3 -0
- package/dist/handlers/hcl.d.ts.map +1 -0
- package/dist/handlers/hcl.js +193 -0
- package/dist/handlers/hcl.js.map +1 -0
- package/dist/handlers/java.d.ts.map +1 -1
- package/dist/handlers/java.js +33 -16
- package/dist/handlers/java.js.map +1 -1
- package/dist/handlers/kotlin.d.ts.map +1 -1
- package/dist/handlers/kotlin.js +48 -3
- package/dist/handlers/kotlin.js.map +1 -1
- package/dist/handlers/less.d.ts +3 -0
- package/dist/handlers/less.d.ts.map +1 -0
- package/dist/handlers/less.js +255 -0
- package/dist/handlers/less.js.map +1 -0
- package/dist/handlers/objective-c.d.ts.map +1 -1
- package/dist/handlers/objective-c.js +122 -64
- package/dist/handlers/objective-c.js.map +1 -1
- package/dist/handlers/openapi.d.ts.map +1 -1
- package/dist/handlers/openapi.js +30 -5
- package/dist/handlers/openapi.js.map +1 -1
- package/dist/handlers/php.d.ts.map +1 -1
- package/dist/handlers/php.js +287 -41
- package/dist/handlers/php.js.map +1 -1
- package/dist/handlers/protobuf.d.ts.map +1 -1
- package/dist/handlers/protobuf.js +1 -0
- package/dist/handlers/protobuf.js.map +1 -1
- package/dist/handlers/python.d.ts.map +1 -1
- package/dist/handlers/python.js +1 -3
- package/dist/handlers/python.js.map +1 -1
- package/dist/handlers/ruby-dsl.d.ts +23 -0
- package/dist/handlers/ruby-dsl.d.ts.map +1 -0
- package/dist/handlers/ruby-dsl.js +251 -0
- package/dist/handlers/ruby-dsl.js.map +1 -0
- package/dist/handlers/ruby.d.ts.map +1 -1
- package/dist/handlers/ruby.js +29 -4
- package/dist/handlers/ruby.js.map +1 -1
- package/dist/handlers/rust.d.ts.map +1 -1
- package/dist/handlers/rust.js +98 -2
- package/dist/handlers/rust.js.map +1 -1
- package/dist/handlers/scss.d.ts +3 -0
- package/dist/handlers/scss.d.ts.map +1 -0
- package/dist/handlers/scss.js +290 -0
- package/dist/handlers/scss.js.map +1 -0
- package/dist/handlers/sql.d.ts.map +1 -1
- package/dist/handlers/sql.js +37 -18
- package/dist/handlers/sql.js.map +1 -1
- package/dist/handlers/typescript.d.ts.map +1 -1
- package/dist/handlers/typescript.js +65 -17
- package/dist/handlers/typescript.js.map +1 -1
- package/dist/handlers/xml.d.ts.map +1 -1
- package/dist/handlers/xml.js +35 -2
- package/dist/handlers/xml.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +91 -0
- package/dist/index.js.map +1 -1
- package/dist/server/mcp-server.d.ts.map +1 -1
- package/dist/server/mcp-server.js +10 -0
- package/dist/server/mcp-server.js.map +1 -1
- package/dist/server/tools/detect-antipatterns.d.ts +1 -1
- package/dist/server/tools/get-architecture-snapshot.d.ts +1 -1
- package/dist/server/tools/get-entry-points.d.ts +1 -1
- package/dist/server/tools/get-lexical-scope-matches.d.ts +54 -0
- package/dist/server/tools/get-lexical-scope-matches.d.ts.map +1 -0
- package/dist/server/tools/get-lexical-scope-matches.js +470 -0
- package/dist/server/tools/get-lexical-scope-matches.js.map +1 -0
- package/dist/server/tools/search-symbols.d.ts +10 -0
- package/dist/server/tools/search-symbols.d.ts.map +1 -1
- package/dist/server/tools/search-symbols.js +353 -8
- package/dist/server/tools/search-symbols.js.map +1 -1
- package/dist/server/tools/trace-invocation-chain.d.ts +53 -0
- package/dist/server/tools/trace-invocation-chain.d.ts.map +1 -0
- package/dist/server/tools/trace-invocation-chain.js +280 -0
- package/dist/server/tools/trace-invocation-chain.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/docs/02-installation.md +89 -17
- package/docs/05-cli-reference.md +89 -0
- package/docs/dev/benchmark-findings-eu-za-tebe.md +210 -0
- package/docs/dev/phase-35-coverage-audit.md +469 -0
- 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
|
|
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"}
|