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
@@ -9,8 +9,8 @@ import { createEmbeddingProvider } from '../../semantic/embedding-provider.js';
9
9
  import { VectorStore } from '../../semantic/vector-store.js';
10
10
  import { HybridSearcher } from '../../semantic/hybrid-search.js';
11
11
  import { logger } from '../../core/logger.js';
12
- import { preprocessQuery } from '../../core/search/query-preprocessor.js';
13
- import { rankSymbols } from '../../core/search/relevance-ranker.js';
12
+ import { preprocessQuery, toOrFallbackQuery, isStopWord } from '../../core/search/query-preprocessor.js';
13
+ import { rankSymbols, isLibraryPath } from '../../core/search/relevance-ranker.js';
14
14
  import { resolveRepoScope } from '../../core/db/repo-scope.js';
15
15
  export const name = 'search_symbols';
16
16
  export const description = 'Search for symbols (functions, classes, types, etc.) by name across one or more indexed repos. ' +
@@ -56,13 +56,90 @@ export const inputSchema = {
56
56
  .boolean()
57
57
  .optional()
58
58
  .describe('Return per-result score breakdown for tuning and diagnostics (default false)'),
59
+ cfgFilter: z
60
+ .union([
61
+ z.string().describe('Simple predicate string, e.g. \'target_os = "linux"\''),
62
+ z.object({
63
+ kind: z.string(),
64
+ key: z.string().optional(),
65
+ value: z.string().optional(),
66
+ }).describe('Structured predicate object'),
67
+ ])
68
+ .optional()
69
+ .describe('Filter results to only symbols gated by a specific Rust #[cfg(...)] predicate. ' +
70
+ 'Applied after ranking. Ignored with a _diagnostics warning when no cfg metadata exists.'),
59
71
  };
72
+ /** Parse a string predicate like 'target_os = "linux"' into a structured matcher. */
73
+ function parseCfgFilterString(filter) {
74
+ const m = filter.match(/^(\w+)\s*=\s*"([^"]+)"$/);
75
+ if (m)
76
+ return { kind: 'eq', key: m[1], value: m[2] };
77
+ const bare = filter.match(/^(\w+)$/);
78
+ if (bare)
79
+ return { kind: 'flag', key: bare[1] };
80
+ return null;
81
+ }
82
+ /** Deep-walk a predicate tree to find a matching leaf. */
83
+ function predicateMatches(pred, matcher) {
84
+ if (!pred || typeof pred !== 'object')
85
+ return false;
86
+ const p = pred;
87
+ if (matcher.kind === 'eq') {
88
+ if (p['kind'] === 'eq' && p['key'] === matcher.key && p['value'] === matcher.value)
89
+ return true;
90
+ }
91
+ else if (matcher.kind === 'flag') {
92
+ if (p['kind'] === 'flag' && p['key'] === matcher.key)
93
+ return true;
94
+ if (p['kind'] === 'eq' && p['key'] === matcher.key)
95
+ return true; // key exists in any form
96
+ }
97
+ // Recurse into children (all/any/not)
98
+ if (Array.isArray(p['children'])) {
99
+ for (const child of p['children']) {
100
+ if (predicateMatches(child, matcher))
101
+ return true;
102
+ }
103
+ }
104
+ return false;
105
+ }
106
+ /**
107
+ * Returns true if the symbol's cfg metadata matches the given filter.
108
+ * Handles single CfgMeta object and array of CfgMeta objects.
109
+ */
110
+ function symbolMatchesCfgFilter(symbol, matcher) {
111
+ const cfg = symbol.frameworkMeta?.['cfg'];
112
+ if (!cfg)
113
+ return false;
114
+ const entries = Array.isArray(cfg) ? cfg : [cfg];
115
+ for (const entry of entries) {
116
+ if (!entry || typeof entry !== 'object')
117
+ continue;
118
+ const e = entry;
119
+ const predicates = Array.isArray(e['predicates']) ? e['predicates'] : [];
120
+ for (const p of predicates) {
121
+ if (predicateMatches(p, matcher))
122
+ return true;
123
+ }
124
+ }
125
+ return false;
126
+ }
60
127
  // ─── Handler ──────────────────────────────────────────────────────────────────
61
128
  export async function handler(args) {
62
129
  const t0 = Date.now();
63
130
  const limit = args.limit ?? 50;
64
131
  const semanticWeight = args.semantic_weight ?? 0.5;
65
132
  const keywordWeight = args.keyword_weight ?? 0.5;
133
+ // ── Resolve cfgFilter matcher ─────────────────────────────────────────────
134
+ let cfgMatcher = null;
135
+ if (args.cfgFilter) {
136
+ if (typeof args.cfgFilter === 'string') {
137
+ cfgMatcher = parseCfgFilterString(args.cfgFilter);
138
+ }
139
+ else {
140
+ cfgMatcher = args.cfgFilter;
141
+ }
142
+ }
66
143
  // ── Resolve target repos ───────────────────────────────────────────────────
67
144
  const repos = resolveRepoScope({ repoId: args.repoId, repoIds: args.repoIds });
68
145
  if (repos.length === 0) {
@@ -79,6 +156,23 @@ export async function handler(args) {
79
156
  };
80
157
  }
81
158
  const reposSearched = repos.map((r) => r.id);
159
+ // ── Detect domain (scopes domain-specific synonyms) ─────────────────────
160
+ // rendering: Only enable rendering synonyms when the repo name suggests a rendering /
161
+ // graphics / PBR codebase — prevents synonym noise in unrelated repos
162
+ // (e.g. nuxt, airodump, origamicms-frontend regressed in Phase 47).
163
+ // rust: Only enable Rust async/serde synonyms (future→poll, spawn→tokio, etc.)
164
+ // for Rust repos — prevents 'future→poll' from making FutureBase::poll outscore
165
+ // folly::Future in C++ repos like facebook-folly.
166
+ const RENDERING_REPO_PATTERN = /render|draw|shader|scene|material|graphic|mitsuba|pbr|tracer|opengl|vulkan|cuda|opencl/i;
167
+ const RUST_REPO_PATTERN = /\brust\b|tokio|serde|actix|axum|hyper|warp|rocket|cargo/i;
168
+ const JAVA_GROOVY_REPO_PATTERN = /\bjenkins\b|\bgradle\b|\bspring\b|\bmaven\b|\bgroovy\b/i;
169
+ const domain = repos.some((r) => RENDERING_REPO_PATTERN.test(r.name))
170
+ ? 'rendering'
171
+ : repos.some((r) => RUST_REPO_PATTERN.test(r.name))
172
+ ? 'rust'
173
+ : repos.some((r) => JAVA_GROOVY_REPO_PATTERN.test(r.name))
174
+ ? 'java'
175
+ : undefined;
82
176
  // ── Determine effective mode using first repo with a semantic index ─────────
83
177
  let effectiveMode = args.mode;
84
178
  if (!effectiveMode) {
@@ -150,7 +244,14 @@ export async function handler(args) {
150
244
  if (allResults.length > 0 || effectiveMode === 'semantic') {
151
245
  // Sort by combined score descending, take top `limit`
152
246
  allResults.sort((a, b) => b.combinedScore - a.combinedScore);
153
- const top = allResults.slice(0, limit);
247
+ const cfgDiagnostic = cfgMatcher
248
+ ? allResults.every((r) => !r.symbol.frameworkMeta?.['cfg'])
249
+ ? 'cfgFilter ignored: no symbols in this repo have cfg metadata'
250
+ : null
251
+ : null;
252
+ const top = cfgMatcher && !cfgDiagnostic
253
+ ? allResults.filter((r) => symbolMatchesCfgFilter(r.symbol, cfgMatcher)).slice(0, limit)
254
+ : allResults.slice(0, limit);
154
255
  return {
155
256
  content: [{
156
257
  type: 'text',
@@ -183,6 +284,7 @@ export async function handler(args) {
183
284
  },
184
285
  } : {}),
185
286
  })),
287
+ ...(cfgDiagnostic ? { _diagnostics: [cfgDiagnostic] } : {}),
186
288
  _meta: {
187
289
  ...buildMeta({ timingMs: Date.now() - t0, rawBytes: totalRawBytes, responseBytes: totalResponseBytes }),
188
290
  mode: effectiveMode,
@@ -212,13 +314,58 @@ export async function handler(args) {
212
314
  let symbols;
213
315
  const ftsAvailable = hasFtsIndex(db, repo.id);
214
316
  if (ftsAvailable) {
215
- const ftsQuery = preprocessQuery(args.query);
317
+ const ftsQuery = preprocessQuery(args.query, domain);
318
+ // Fetch more candidates than the requested limit so the relevance ranker
319
+ // has a large enough pool to surface the best match even when FTS5 BM25
320
+ // ranking places it slightly outside the bare limit. The ranker then
321
+ // re-sorts and the caller receives exactly `limit` results.
322
+ const ftsLimit = Math.min(limit * 4, 200);
216
323
  try {
217
324
  symbols = ftsSearchSymbols(db, repo.id, ftsQuery, {
218
325
  kind: args.kind,
219
326
  filePath: args.filePath,
220
- limit,
327
+ limit: ftsLimit,
221
328
  });
329
+ // OR-fallback: when the AND query returns nothing, retry with terms joined
330
+ // by OR so that natural-language queries match symbols containing only some
331
+ // of the query words (e.g. "parse source file tree-sitter ast" → parseFile).
332
+ // Also fire when AND results contain no application-layer service/repo methods
333
+ // — this means the AND pool is filled with Prisma types or DTOs while the
334
+ // correct service method couldn't satisfy all AND terms (e.g. "listing"
335
+ // doesn't appear in ProductsService.create's FTS content).
336
+ // Also fire when ALL AND results are library code (system/, vendor/, etc.)
337
+ // — in that case application symbols can only enter via the OR pool.
338
+ // Also fire when query asks for a React hook (use*/hook) but AND pool has
339
+ // no use[A-Z] symbols — hook names rarely satisfy all AND terms.
340
+ const isHookQuery = hasReactHookQuery(args.query);
341
+ const needsOrFallback = symbols.length === 0 ||
342
+ !hasServiceMethodCandidate(symbols) ||
343
+ symbols.every((s) => isLibraryPath(s.filePath)) ||
344
+ (isHookQuery && !symbols.some((s) => /^use[A-Z]/.test(s.name)));
345
+ if (needsOrFallback) {
346
+ const orQuery = toOrFallbackQuery(ftsQuery, domain);
347
+ if (orQuery !== ftsQuery) {
348
+ const orSymbols = ftsSearchSymbols(db, repo.id, orQuery, {
349
+ kind: args.kind,
350
+ filePath: args.filePath,
351
+ limit: ftsLimit,
352
+ });
353
+ if (symbols.length === 0) {
354
+ symbols = orSymbols;
355
+ }
356
+ else {
357
+ // Merge: append OR results not already in AND results
358
+ const seen = new Set(symbols.map((s) => s.id));
359
+ for (const s of orSymbols) {
360
+ if (!seen.has(s.id))
361
+ symbols.push(s);
362
+ }
363
+ }
364
+ if (orSymbols.length > 0) {
365
+ searchMode = 'fts_or_fallback';
366
+ }
367
+ }
368
+ }
222
369
  }
223
370
  catch (err) {
224
371
  logger.warn(`search_symbols: FTS query failed for ${repo.id}, falling back to LIKE: ${err}`);
@@ -229,6 +376,36 @@ export async function handler(args) {
229
376
  });
230
377
  searchMode = 'like_fallback';
231
378
  }
379
+ // ── Class-type injection ────────────────────────────────────────────
380
+ // In large C++ codebases, method symbols with namespace-qualified names
381
+ // (e.g. FutureBase::poll) dominate the FTS5 candidate pool, pushing out
382
+ // class/struct/function symbols. Run a secondary OR query restricted to
383
+ // non-method kinds so class symbols are always represented in the pool.
384
+ // Guard: only fires when the main pool contains C++ style qualified methods
385
+ // (name contains "::"), preventing regression in Ruby/JS repos where
386
+ // single-word class names (Git, Bottle) would incorrectly outscore compound
387
+ // class names (GitDownloadStrategy, BottleSpecification) via identityExact.
388
+ const hasCppStyleMethods = symbols.some((s) => s.kind === 'method' && s.name.includes('::'));
389
+ if (!args.kind && ftsAvailable && hasCppStyleMethods) {
390
+ try {
391
+ const orQuery = toOrFallbackQuery(preprocessQuery(args.query, domain), domain);
392
+ const classSymbols = ftsSearchSymbols(db, repo.id, orQuery, {
393
+ kinds: ['class', 'struct', 'enum', 'function', 'namespace'],
394
+ filePath: args.filePath,
395
+ limit: 50,
396
+ });
397
+ if (classSymbols.length > 0) {
398
+ const seen = new Set(symbols.map((s) => s.id));
399
+ for (const s of classSymbols) {
400
+ if (!seen.has(s.id))
401
+ symbols.push(s);
402
+ }
403
+ }
404
+ }
405
+ catch {
406
+ // Secondary injection is best-effort — never fail the main search
407
+ }
408
+ }
232
409
  }
233
410
  else {
234
411
  symbols = searchSymbols(db, repo.id, args.query, {
@@ -238,7 +415,13 @@ export async function handler(args) {
238
415
  });
239
416
  searchMode = 'like_fallback';
240
417
  }
241
- const ranked = rankSymbols(symbols, args.query, args.debug);
418
+ const rankOpts = {
419
+ isMixedMonorepo: detectMixedMonorepo(symbols),
420
+ hasReactHookQuery: hasReactHookQuery(args.query),
421
+ isJavaGroovyMixed: detectJavaGroovyMixed(symbols),
422
+ isAngularRepo: symbols.some((s) => s.filePath.endsWith('.component.ts') || s.filePath.endsWith('.module.ts')),
423
+ };
424
+ const ranked = rankSymbols(symbols, args.query, args.debug, domain, rankOpts);
242
425
  const uniqueFiles = [...new Set(ranked.map((r) => r.symbol.filePath))];
243
426
  const fileSizes = getFileSizesBatch(db, repo.id, uniqueFiles);
244
427
  totalRawBytes += uniqueFiles.reduce((sum, fp) => sum + (fileSizes.get(fp) ?? 0), 0);
@@ -258,14 +441,32 @@ export async function handler(args) {
258
441
  db.close();
259
442
  }
260
443
  }
261
- // Sort by score descending across all repos, take top `limit`
444
+ // Sort by score descending across all repos, apply cfg filter, take top `limit`
262
445
  allKeywordResults.sort((a, b) => b.score - a.score);
263
- const top = allKeywordResults.slice(0, limit);
446
+ const cfgDiagnostic = cfgMatcher
447
+ ? allKeywordResults.every((r) => !r.symbol.frameworkMeta?.['cfg'])
448
+ ? 'cfgFilter ignored: no symbols in this repo have cfg metadata'
449
+ : null
450
+ : null;
451
+ const top = cfgMatcher && !cfgDiagnostic
452
+ ? allKeywordResults.filter((r) => symbolMatchesCfgFilter(r.symbol, cfgMatcher)).slice(0, limit)
453
+ : allKeywordResults.slice(0, limit);
454
+ const negativeEvidence = top.length === 0
455
+ ? {
456
+ verdict: 'no_match',
457
+ query: args.query,
458
+ searched_kinds: args.kind ? [args.kind] : [],
459
+ searched_repos: reposSearched,
460
+ suggestion: 'The symbol does not appear to exist. Consider search_text for string/comment lookups or get_repo_outline to survey the codebase.',
461
+ }
462
+ : undefined;
264
463
  return {
265
464
  content: [{
266
465
  type: 'text',
267
466
  text: JSON.stringify({
268
467
  count: top.length,
468
+ ...(negativeEvidence ? { negative_evidence: negativeEvidence } : {}),
469
+ ...(cfgDiagnostic ? { _diagnostics: [cfgDiagnostic] } : {}),
269
470
  symbols: top.map((r) => ({
270
471
  id: r.symbol.id,
271
472
  name: r.symbol.name,
@@ -293,4 +494,148 @@ export async function handler(args) {
293
494
  function round4(n) {
294
495
  return Math.round(n * 10000) / 10000;
295
496
  }
497
+ /**
498
+ * Return true when the query is asking for a React hook: the first meaningful
499
+ * token starts with 'use' and has ≥ 4 chars (filters out the English word
500
+ * "use"), OR the query contains the word 'hook' / 'hooks'.
501
+ */
502
+ function hasReactHookQuery(query) {
503
+ const words = query.toLowerCase().split(/[\s-]+/).filter(Boolean);
504
+ const firstMeaningful = words.find((w) => !isStopWord(w) && w.length >= 2);
505
+ if (firstMeaningful && firstMeaningful.startsWith('use') && firstMeaningful.length >= 4)
506
+ return true;
507
+ return words.includes('hook') || words.includes('hooks');
508
+ }
509
+ /**
510
+ * Return true when the candidate symbol pool contains symbols from both a
511
+ * frontend app path (apps/dashboard/, apps/web/, etc.) and a backend app path
512
+ * (apps/api/, apps/server/, etc.), indicating a mixed frontend+backend monorepo.
513
+ *
514
+ * Uses the already-fetched FTS5 candidate pool — no extra DB queries.
515
+ */
516
+ function detectMixedMonorepo(symbols) {
517
+ let hasFrontend = false;
518
+ let hasBackend = false;
519
+ for (const s of symbols) {
520
+ const p = '/' + s.filePath.replace(/\\/g, '/');
521
+ if (p.includes('/apps/dashboard/') ||
522
+ p.includes('/apps/web/') ||
523
+ p.includes('/apps/frontend/') ||
524
+ p.includes('/apps/client/'))
525
+ hasFrontend = true;
526
+ if (p.includes('/apps/api/') ||
527
+ p.includes('/apps/server/') ||
528
+ p.includes('/apps/backend/'))
529
+ hasBackend = true;
530
+ if (hasFrontend && hasBackend)
531
+ return true;
532
+ }
533
+ return false;
534
+ }
535
+ /**
536
+ * Return true when the candidate pool contains both .java and .groovy symbols,
537
+ * indicating a mixed Java+Groovy repo (gradle, jenkins, groovy) where Groovy
538
+ * `def` methods may be outranked by numerically-dominant Java methods.
539
+ */
540
+ function detectJavaGroovyMixed(symbols) {
541
+ let hasJava = false;
542
+ let hasGroovy = false;
543
+ for (const s of symbols) {
544
+ if (s.filePath.endsWith('.java'))
545
+ hasJava = true;
546
+ else if (s.filePath.endsWith('.groovy'))
547
+ hasGroovy = true;
548
+ if (hasJava && hasGroovy)
549
+ return true;
550
+ }
551
+ return false;
552
+ }
553
+ /**
554
+ * Return true when the candidate pool contains at least one method on an
555
+ * application-layer *Service / *Repository / *Manager / *Store class.
556
+ *
557
+ * Used as a quality gate for OR-fallback: if AND results contain no such
558
+ * method, we augment with OR results so the ranker can surface the right
559
+ * service method even when it failed some AND terms.
560
+ */
561
+ /**
562
+ * Return true when the candidate pool contains at least one application-layer
563
+ * method — i.e. a method on a class that looks like business/data logic rather
564
+ * than a DTO, config constant, or third-party library type.
565
+ *
566
+ * Patterns covered:
567
+ * TypeScript: *Service, *Repository, *Manager, *Store
568
+ * PHP: *_model, *Model (CodeIgniter / Laravel conventions)
569
+ * PHP: *_controller, *Controller
570
+ * Python: *Processor, *Indexer, *Parser
571
+ *
572
+ * Used as a quality gate: if no such candidate exists in the AND result pool,
573
+ * we fire the OR-fallback to widen the search and surface the right symbol.
574
+ */
575
+ /**
576
+ * For methods stored with bare names (Java/Rust), extract the class name from
577
+ * the signature prefix ("ClassName.method: ..." or "TypeName::method: ...").
578
+ */
579
+ function classFromSignatureForMethod(name, signature) {
580
+ if (!signature)
581
+ return '';
582
+ const dotPat = '.' + name + ':';
583
+ const di = signature.indexOf(dotPat);
584
+ if (di > 0) {
585
+ const c = signature.slice(0, di);
586
+ if (!c.includes('.') && !c.includes(':'))
587
+ return c.toLowerCase();
588
+ }
589
+ const colonPat = '::' + name;
590
+ const ci = signature.indexOf(colonPat);
591
+ if (ci > 0) {
592
+ const c = signature.slice(0, ci);
593
+ if (!c.includes('.') && !c.includes(':'))
594
+ return c.toLowerCase();
595
+ }
596
+ return '';
597
+ }
598
+ function hasServiceMethodCandidate(symbols) {
599
+ return symbols.some((s) => {
600
+ if (s.kind !== 'method')
601
+ return false;
602
+ const dotIdx = s.name.indexOf('.');
603
+ const colonIdx = s.name.indexOf('::');
604
+ const sepIdx = dotIdx >= 0 ? dotIdx : colonIdx;
605
+ const cls = sepIdx > 0
606
+ ? s.name.slice(0, sepIdx).toLowerCase()
607
+ : classFromSignatureForMethod(s.name, s.signature ?? '');
608
+ if (!cls)
609
+ return false;
610
+ return (
611
+ // TypeScript application-layer naming
612
+ cls.endsWith('service') ||
613
+ cls.endsWith('repository') ||
614
+ cls.endsWith('manager') ||
615
+ cls.endsWith('store') ||
616
+ // PHP model conventions (CodeIgniter: *_model; Laravel/generic: *Model)
617
+ cls.endsWith('_model') ||
618
+ (cls.endsWith('model') && cls.length > 5) ||
619
+ // PHP controller conventions
620
+ cls.endsWith('_controller') ||
621
+ (cls.endsWith('controller') && cls.length > 10) ||
622
+ // Go HTTP handlers, database layers, and API clients
623
+ cls.endsWith('handler') ||
624
+ cls.endsWith('db') ||
625
+ cls.endsWith('client') ||
626
+ // Android framework classes (lifecycle methods, adapters)
627
+ cls.endsWith('activity') ||
628
+ cls.endsWith('fragment') ||
629
+ cls.endsWith('adapter') ||
630
+ cls.endsWith('viewmodel') ||
631
+ // Python application-layer class patterns
632
+ cls.endsWith('processor') ||
633
+ cls.endsWith('indexer') ||
634
+ cls.endsWith('parser') ||
635
+ // Symfony event-driven and form patterns
636
+ cls.endsWith('eventsubscriber') ||
637
+ cls.endsWith('listener') ||
638
+ cls.endsWith('formtype'));
639
+ });
640
+ }
296
641
  //# sourceMappingURL=search-symbols.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-symbols.js","sourceRoot":"","sources":["../../../src/server/tools/search-symbols.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-symbols.js","sourceRoot":"","sources":["../../../src/server/tools/search-symbols.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * trace-invocation-chain.ts
3
+ *
4
+ * MCP tool: trace_invocation_chain
5
+ *
6
+ * Trace multi-hop call chains from a start symbol forward through callees,
7
+ * returning all discovered paths as ordered symbol lists. Useful for questions
8
+ * like "what execution path leads from this API endpoint to a background worker?"
9
+ *
10
+ * Strategy: query-time text scan (same as get_call_hierarchy) — no pre-built
11
+ * call edges required. Scans symbol source text for `identifier(` patterns and
12
+ * matches them against all indexed symbols in the repo.
13
+ *
14
+ * Cycle detection: back-edges are included as leaf nodes with `cyclic: true`
15
+ * so the traversal terminates and the caller can see the cycle.
16
+ */
17
+ import { z } from 'zod';
18
+ import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
19
+ export declare const name = "trace_invocation_chain";
20
+ export declare const description: string;
21
+ export declare const inputSchema: {
22
+ repoId: z.ZodString;
23
+ startSymbol: z.ZodString;
24
+ endHint: z.ZodOptional<z.ZodString>;
25
+ maxDepth: z.ZodOptional<z.ZodNumber>;
26
+ maxChains: z.ZodOptional<z.ZodNumber>;
27
+ includeDynamicCalls: z.ZodOptional<z.ZodBoolean>;
28
+ };
29
+ export interface ChainNode {
30
+ symbolId: string;
31
+ name: string;
32
+ kind: string;
33
+ filePath: string;
34
+ signature: string;
35
+ /** True when this node closes a cycle (i.e. already appears earlier in the chain). */
36
+ cyclic?: boolean;
37
+ }
38
+ export interface SymbolChain {
39
+ nodes: ChainNode[];
40
+ /** True when truncated by maxDepth, not by endHint or leaf. */
41
+ truncatedByDepth: boolean;
42
+ /** True when chain ends at an endHint match. */
43
+ endedAtHint: boolean;
44
+ }
45
+ export declare function handler(args: {
46
+ repoId: string;
47
+ startSymbol: string;
48
+ endHint?: string;
49
+ maxDepth?: number;
50
+ maxChains?: number;
51
+ includeDynamicCalls?: boolean;
52
+ }): Promise<CallToolResult>;
53
+ //# sourceMappingURL=trace-invocation-chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-invocation-chain.d.ts","sourceRoot":"","sources":["../../../src/server/tools/trace-invocation-chain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AAGzE,eAAO,MAAM,IAAI,2BAA2B,CAAC;AAE7C,eAAO,MAAM,WAAW,QAOsD,CAAC;AAE/E,eAAO,MAAM,WAAW;;;;;;;CAsCvB,CAAC;AAIF,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sFAAsF;IACtF,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,+DAA+D;IAC/D,gBAAgB,EAAE,OAAO,CAAC;IAC1B,gDAAgD;IAChD,WAAW,EAAE,OAAO,CAAC;CACtB;AAqCD,wBAAsB,OAAO,CAAC,IAAI,EAAE;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,GAAG,OAAO,CAAC,cAAc,CAAC,CAiO1B"}