lsp-intelligence 0.1.2 → 0.2.1

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 (208) hide show
  1. package/README.md +48 -15
  2. package/dist/analysis/pattern/collectSearchFiles.d.ts +6 -0
  3. package/dist/analysis/pattern/collectSearchFiles.js +38 -0
  4. package/dist/analysis/pattern/collectSearchFiles.js.map +1 -0
  5. package/dist/analysis/pattern/runPatternSearch.d.ts +17 -0
  6. package/dist/analysis/pattern/runPatternSearch.js +65 -0
  7. package/dist/analysis/pattern/runPatternSearch.js.map +1 -0
  8. package/dist/analysis/ts/extractDeclarations.d.ts +7 -0
  9. package/dist/analysis/ts/extractDeclarations.js +93 -0
  10. package/dist/analysis/ts/extractDeclarations.js.map +1 -0
  11. package/dist/analysis/ts/extractUsages.d.ts +7 -0
  12. package/dist/analysis/ts/extractUsages.js +139 -0
  13. package/dist/analysis/ts/extractUsages.js.map +1 -0
  14. package/dist/analysis/ts/parseSourceFile.d.ts +11 -0
  15. package/dist/analysis/ts/parseSourceFile.js +24 -0
  16. package/dist/analysis/ts/parseSourceFile.js.map +1 -0
  17. package/dist/analysis/ts/reactState.d.ts +9 -0
  18. package/dist/analysis/ts/reactState.js +57 -0
  19. package/dist/analysis/ts/reactState.js.map +1 -0
  20. package/dist/analysis/ts/snippets.d.ts +14 -0
  21. package/dist/analysis/ts/snippets.js +29 -0
  22. package/dist/analysis/ts/snippets.js.map +1 -0
  23. package/dist/analysis/ts/structuralPredicates.d.ts +10 -0
  24. package/dist/analysis/ts/structuralPredicates.js +199 -0
  25. package/dist/analysis/ts/structuralPredicates.js.map +1 -0
  26. package/dist/ast/diffDeclarationShapes.d.ts +16 -0
  27. package/dist/ast/diffDeclarationShapes.js +179 -0
  28. package/dist/ast/diffDeclarationShapes.js.map +1 -0
  29. package/dist/ast/extractExportDeclarations.d.ts +21 -0
  30. package/dist/ast/extractExportDeclarations.js +218 -0
  31. package/dist/ast/extractExportDeclarations.js.map +1 -0
  32. package/dist/ast/findNodeAtPosition.d.ts +12 -0
  33. package/dist/ast/findNodeAtPosition.js +75 -0
  34. package/dist/ast/findNodeAtPosition.js.map +1 -0
  35. package/dist/ast/parseFile.d.ts +11 -0
  36. package/dist/ast/parseFile.js +46 -0
  37. package/dist/ast/parseFile.js.map +1 -0
  38. package/dist/engine/LspEngine.js +23 -1
  39. package/dist/engine/LspEngine.js.map +1 -1
  40. package/dist/engine/waitForDiagnostics.d.ts +7 -0
  41. package/dist/engine/waitForDiagnostics.js +16 -0
  42. package/dist/engine/waitForDiagnostics.js.map +1 -0
  43. package/dist/git/getBaseFileContent.d.ts +6 -0
  44. package/dist/git/getBaseFileContent.js +23 -0
  45. package/dist/git/getBaseFileContent.js.map +1 -0
  46. package/dist/git/getChangedFiles.d.ts +5 -0
  47. package/dist/git/getChangedFiles.js +27 -0
  48. package/dist/git/getChangedFiles.js.map +1 -0
  49. package/dist/git/getChangedHunks.d.ts +14 -0
  50. package/dist/git/getChangedHunks.js +56 -0
  51. package/dist/git/getChangedHunks.js.map +1 -0
  52. package/dist/git/getGitRoot.d.ts +15 -0
  53. package/dist/git/getGitRoot.js +33 -0
  54. package/dist/git/getGitRoot.js.map +1 -0
  55. package/dist/git/getMergeBase.d.ts +5 -0
  56. package/dist/git/getMergeBase.js +23 -0
  57. package/dist/git/getMergeBase.js.map +1 -0
  58. package/dist/index.js +10 -0
  59. package/dist/index.js.map +1 -1
  60. package/dist/resolve/searchScope.d.ts +17 -0
  61. package/dist/resolve/searchScope.js +64 -0
  62. package/dist/resolve/searchScope.js.map +1 -0
  63. package/dist/resolve/targetResolver.d.ts +33 -0
  64. package/dist/resolve/targetResolver.js +84 -0
  65. package/dist/resolve/targetResolver.js.map +1 -0
  66. package/dist/search/adapters/config.d.ts +5 -0
  67. package/dist/search/adapters/config.js +56 -0
  68. package/dist/search/adapters/config.js.map +1 -0
  69. package/dist/search/adapters/http.d.ts +6 -0
  70. package/dist/search/adapters/http.js +58 -0
  71. package/dist/search/adapters/http.js.map +1 -0
  72. package/dist/search/adapters/react.d.ts +12 -0
  73. package/dist/search/adapters/react.js +92 -0
  74. package/dist/search/adapters/react.js.map +1 -0
  75. package/dist/search/adapters/registry.d.ts +6 -0
  76. package/dist/search/adapters/registry.js +20 -0
  77. package/dist/search/adapters/registry.js.map +1 -0
  78. package/dist/search/adapters/types.d.ts +5 -0
  79. package/dist/search/adapters/types.js +2 -0
  80. package/dist/search/adapters/types.js.map +1 -0
  81. package/dist/search/debug/trace.d.ts +6 -0
  82. package/dist/search/debug/trace.js +25 -0
  83. package/dist/search/debug/trace.js.map +1 -0
  84. package/dist/search/expand/graphExpansion.d.ts +16 -0
  85. package/dist/search/expand/graphExpansion.js +168 -0
  86. package/dist/search/expand/graphExpansion.js.map +1 -0
  87. package/dist/search/families/behaviorFamilies.d.ts +22 -0
  88. package/dist/search/families/behaviorFamilies.js +90 -0
  89. package/dist/search/families/behaviorFamilies.js.map +1 -0
  90. package/dist/search/fileKinds.d.ts +13 -0
  91. package/dist/search/fileKinds.js +74 -0
  92. package/dist/search/fileKinds.js.map +1 -0
  93. package/dist/search/index/configIndex.d.ts +6 -0
  94. package/dist/search/index/configIndex.js +196 -0
  95. package/dist/search/index/configIndex.js.map +1 -0
  96. package/dist/search/index/declarationIndex.d.ts +6 -0
  97. package/dist/search/index/declarationIndex.js +13 -0
  98. package/dist/search/index/declarationIndex.js.map +1 -0
  99. package/dist/search/index/docIndex.d.ts +7 -0
  100. package/dist/search/index/docIndex.js +116 -0
  101. package/dist/search/index/docIndex.js.map +1 -0
  102. package/dist/search/index/types.d.ts +1 -0
  103. package/dist/search/index/types.js +2 -0
  104. package/dist/search/index/types.js.map +1 -0
  105. package/dist/search/index/usageIndex.d.ts +6 -0
  106. package/dist/search/index/usageIndex.js +13 -0
  107. package/dist/search/index/usageIndex.js.map +1 -0
  108. package/dist/search/index/workspaceIndex.d.ts +14 -0
  109. package/dist/search/index/workspaceIndex.js +127 -0
  110. package/dist/search/index/workspaceIndex.js.map +1 -0
  111. package/dist/search/query/compileEffectiveSearchSpec.d.ts +24 -0
  112. package/dist/search/query/compileEffectiveSearchSpec.js +67 -0
  113. package/dist/search/query/compileEffectiveSearchSpec.js.map +1 -0
  114. package/dist/search/query/parseQuery.d.ts +10 -0
  115. package/dist/search/query/parseQuery.js +284 -0
  116. package/dist/search/query/parseQuery.js.map +1 -0
  117. package/dist/search/query/phraseRules.d.ts +10 -0
  118. package/dist/search/query/phraseRules.js +58 -0
  119. package/dist/search/query/phraseRules.js.map +1 -0
  120. package/dist/search/query/planQuery.d.ts +10 -0
  121. package/dist/search/query/planQuery.js +91 -0
  122. package/dist/search/query/planQuery.js.map +1 -0
  123. package/dist/search/ranking/assessConfidence.d.ts +6 -0
  124. package/dist/search/ranking/assessConfidence.js +31 -0
  125. package/dist/search/ranking/assessConfidence.js.map +1 -0
  126. package/dist/search/ranking/candidateIdentity.d.ts +21 -0
  127. package/dist/search/ranking/candidateIdentity.js +29 -0
  128. package/dist/search/ranking/candidateIdentity.js.map +1 -0
  129. package/dist/search/ranking/coalesceCandidates.d.ts +9 -0
  130. package/dist/search/ranking/coalesceCandidates.js +48 -0
  131. package/dist/search/ranking/coalesceCandidates.js.map +1 -0
  132. package/dist/search/ranking/fieldedTextRanker.d.ts +26 -0
  133. package/dist/search/ranking/fieldedTextRanker.js +79 -0
  134. package/dist/search/ranking/fieldedTextRanker.js.map +1 -0
  135. package/dist/search/ranking/mergeCandidates.d.ts +13 -0
  136. package/dist/search/ranking/mergeCandidates.js +85 -0
  137. package/dist/search/ranking/mergeCandidates.js.map +1 -0
  138. package/dist/search/ranking/rankCandidates.d.ts +12 -0
  139. package/dist/search/ranking/rankCandidates.js +106 -0
  140. package/dist/search/ranking/rankCandidates.js.map +1 -0
  141. package/dist/search/retrievers/behaviorRetriever.d.ts +7 -0
  142. package/dist/search/retrievers/behaviorRetriever.js +86 -0
  143. package/dist/search/retrievers/behaviorRetriever.js.map +1 -0
  144. package/dist/search/retrievers/configRetriever.d.ts +7 -0
  145. package/dist/search/retrievers/configRetriever.js +46 -0
  146. package/dist/search/retrievers/configRetriever.js.map +1 -0
  147. package/dist/search/retrievers/docRetriever.d.ts +7 -0
  148. package/dist/search/retrievers/docRetriever.js +46 -0
  149. package/dist/search/retrievers/docRetriever.js.map +1 -0
  150. package/dist/search/retrievers/identifierRetriever.d.ts +7 -0
  151. package/dist/search/retrievers/identifierRetriever.js +67 -0
  152. package/dist/search/retrievers/identifierRetriever.js.map +1 -0
  153. package/dist/search/retrievers/structuralRetriever.d.ts +9 -0
  154. package/dist/search/retrievers/structuralRetriever.js +104 -0
  155. package/dist/search/retrievers/structuralRetriever.js.map +1 -0
  156. package/dist/search/retrievers/textPatternRetriever.d.ts +7 -0
  157. package/dist/search/retrievers/textPatternRetriever.js +90 -0
  158. package/dist/search/retrievers/textPatternRetriever.js.map +1 -0
  159. package/dist/search/structural/locators/callLocator.d.ts +6 -0
  160. package/dist/search/structural/locators/callLocator.js +57 -0
  161. package/dist/search/structural/locators/callLocator.js.map +1 -0
  162. package/dist/search/structural/locators/declarationLocator.d.ts +6 -0
  163. package/dist/search/structural/locators/declarationLocator.js +57 -0
  164. package/dist/search/structural/locators/declarationLocator.js.map +1 -0
  165. package/dist/search/structural/locators/statementLocator.d.ts +6 -0
  166. package/dist/search/structural/locators/statementLocator.js +65 -0
  167. package/dist/search/structural/locators/statementLocator.js.map +1 -0
  168. package/dist/search/structural/locators/types.d.ts +12 -0
  169. package/dist/search/structural/locators/types.js +2 -0
  170. package/dist/search/structural/locators/types.js.map +1 -0
  171. package/dist/search/structural/selectLocators.d.ts +7 -0
  172. package/dist/search/structural/selectLocators.js +21 -0
  173. package/dist/search/structural/selectLocators.js.map +1 -0
  174. package/dist/search/types.d.ts +191 -0
  175. package/dist/search/types.js +11 -0
  176. package/dist/search/types.js.map +1 -0
  177. package/dist/tools/composites/apiGuard.d.ts +1 -0
  178. package/dist/tools/composites/apiGuard.js +172 -0
  179. package/dist/tools/composites/apiGuard.js.map +1 -0
  180. package/dist/tools/composites/explainError.js +3 -2
  181. package/dist/tools/composites/explainError.js.map +1 -1
  182. package/dist/tools/composites/findCode.d.ts +1 -0
  183. package/dist/tools/composites/findCode.js +145 -0
  184. package/dist/tools/composites/findCode.js.map +1 -0
  185. package/dist/tools/composites/findPattern.d.ts +5 -0
  186. package/dist/tools/composites/findPattern.js +41 -0
  187. package/dist/tools/composites/findPattern.js.map +1 -0
  188. package/dist/tools/composites/rootCauseTrace.d.ts +1 -0
  189. package/dist/tools/composites/rootCauseTrace.js +213 -0
  190. package/dist/tools/composites/rootCauseTrace.js.map +1 -0
  191. package/dist/tools/composites/semanticDiff.js +24 -77
  192. package/dist/tools/composites/semanticDiff.js.map +1 -1
  193. package/dist/tools/live/clearIndex.d.ts +1 -0
  194. package/dist/tools/live/clearIndex.js +19 -0
  195. package/dist/tools/live/clearIndex.js.map +1 -0
  196. package/dist/tools/live/liveDiagnostics.js +3 -2
  197. package/dist/tools/live/liveDiagnostics.js.map +1 -1
  198. package/dist/tools/primitives/callHierarchy.js +1 -1
  199. package/dist/tools/primitives/callHierarchy.js.map +1 -1
  200. package/dist/tools/primitives/diagnostics.js +2 -2
  201. package/dist/tools/primitives/diagnostics.js.map +1 -1
  202. package/dist/tools/registry.d.ts +10 -2
  203. package/dist/tools/registry.js +7 -2
  204. package/dist/tools/registry.js.map +1 -1
  205. package/package.json +11 -5
  206. package/dist/tools/primitives/typeHierarchy.d.ts +0 -1
  207. package/dist/tools/primitives/typeHierarchy.js +0 -55
  208. package/dist/tools/primitives/typeHierarchy.js.map +0 -1
@@ -0,0 +1,213 @@
1
+ import { z } from 'zod';
2
+ import * as fs from 'fs';
3
+ import { defineTool } from '../registry.js';
4
+ import { relativePath, uriToPath, pathToUri, fromPosition } from '../../engine/positions.js';
5
+ import { formatHover } from '../../format/markdown.js';
6
+ import { parseFile, parseSource } from '../../ast/parseFile.js';
7
+ import { classifyErrorSite } from '../../ast/findNodeAtPosition.js';
8
+ import { extractExportDeclarations } from '../../ast/extractExportDeclarations.js';
9
+ import { diffExportDeclarations } from '../../ast/diffDeclarationShapes.js';
10
+ import { getMergeBase } from '../../git/getMergeBase.js';
11
+ import { getBaseFileContent } from '../../git/getBaseFileContent.js';
12
+ import { fileChangedInBranch } from '../../git/getChangedHunks.js';
13
+ import { resolveTarget, pickDiagnostic } from '../../resolve/targetResolver.js';
14
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
15
+ export const rootCauseTrace = defineTool({
16
+ name: 'root_cause_trace',
17
+ description: 'Trace the root cause of a TypeScript error. Accepts symbol name, file+line, or file+diagnostic_code. Identifies the originating declaration change with evidence chain.',
18
+ schema: z.object({
19
+ symbol: z.string().optional().describe('Symbol at or near the error site'),
20
+ file_path: z.string().optional().describe('File containing the error'),
21
+ line: z.number().optional().describe('1-indexed line number'),
22
+ diagnostic_code: z.string().optional().describe('Diagnostic code, e.g. TS2345'),
23
+ base: z.string().optional().describe('Git base ref'),
24
+ }),
25
+ async handler(params, engine) {
26
+ const timeout = DEFAULT_TIMEOUTS.composite;
27
+ const warnings = [];
28
+ let astUsed = false;
29
+ // Step 1: Resolve target via shared resolver (symbol-first)
30
+ let target;
31
+ try {
32
+ target = await resolveTarget(params, engine);
33
+ }
34
+ catch (err) {
35
+ return { errorSite: {}, candidates: [], stats: { candidatesConsidered: 0, callerFilesChecked: 0, astUsed: false, baseUsed: false, partialResult: false }, warnings: [`Target resolution failed: ${err instanceof Error ? err.message : String(err)}`] };
36
+ }
37
+ const { filePath, uri, position: targetPosition, symbol: symbolName } = target;
38
+ // Step 2: Anchor the diagnostic (poll for readiness instead of fixed sleep)
39
+ const { waitForDiagnostics } = await import('../../engine/waitForDiagnostics.js');
40
+ await waitForDiagnostics(engine.docManager, uri, 800);
41
+ const allDiags = engine.docManager.getCachedDiagnostics(uri);
42
+ const targetDiag = pickDiagnostic(allDiags, targetPosition, params.diagnostic_code);
43
+ if (!targetDiag) {
44
+ return { errorSite: { symbol: symbolName }, candidates: [], stats: { candidatesConsidered: 0, callerFilesChecked: 0, astUsed: false, baseUsed: false, partialResult: false }, warnings: [`No error diagnostic in ${relativePath(filePath, engine.workspaceRoot)}`] };
45
+ }
46
+ const base = engine.gitAvailable ? getMergeBase(engine.workspaceRoot, params.base) : undefined;
47
+ const errorPosition = targetDiag.range.start;
48
+ const diagPos = fromPosition(errorPosition);
49
+ // Step 3: Error site — LSP + AST (with proper error handling)
50
+ const [hoverResult, defResult] = await Promise.all([
51
+ engine.request('textDocument/hover', { textDocument: { uri }, position: errorPosition }, timeout)
52
+ .catch((err) => { warnings.push(`Hover failed: ${err instanceof Error ? err.message : String(err)}`); return null; }),
53
+ engine.request('textDocument/definition', { textDocument: { uri }, position: errorPosition }, timeout)
54
+ .catch((err) => { warnings.push(`Definition lookup failed: ${err instanceof Error ? err.message : String(err)}`); return null; }),
55
+ ]);
56
+ let localPattern = null;
57
+ try {
58
+ const root = parseFile(filePath);
59
+ if (root) {
60
+ astUsed = true;
61
+ localPattern = classifyErrorSite(root, errorPosition.line);
62
+ }
63
+ }
64
+ catch (err) {
65
+ warnings.push(`AST classification failed: ${err instanceof Error ? err.message : String(err)}`);
66
+ }
67
+ const hoverSummary = hoverResult ? formatHover(hoverResult).substring(0, 200) : undefined;
68
+ const defLocation = defResult ? uriToPath(Array.isArray(defResult) ? defResult[0].uri : defResult.uri) : undefined;
69
+ const errorSite = {
70
+ symbol: symbolName,
71
+ definitionFile: defLocation ? relativePath(defLocation, engine.workspaceRoot) : undefined,
72
+ enclosingNodeKind: localPattern ?? undefined,
73
+ localPattern: localPattern ?? undefined,
74
+ hoverSummary,
75
+ };
76
+ // Step 4: Collect candidates
77
+ const candidates = [];
78
+ // Candidate A: definition site
79
+ if (defLocation && defLocation !== filePath) {
80
+ candidates.push(await buildCandidate(defLocation, 'definition-site', 5, base, engine, warnings));
81
+ }
82
+ // Candidate B: type definition
83
+ try {
84
+ const typeDef = await engine.request('textDocument/typeDefinition', { textDocument: { uri }, position: errorPosition }, timeout);
85
+ if (typeDef) {
86
+ const typeDefPath = uriToPath(Array.isArray(typeDef) ? typeDef[0].uri : typeDef.uri);
87
+ if (typeDefPath !== filePath && typeDefPath !== defLocation) {
88
+ candidates.push(await buildCandidate(typeDefPath, 'type-definition', 4, base, engine, warnings));
89
+ }
90
+ }
91
+ }
92
+ catch (err) {
93
+ warnings.push(`Type definition lookup failed: ${err instanceof Error ? err.message : String(err)}`);
94
+ }
95
+ // Candidate C: upstream callers (cap at 5)
96
+ let callerFilesChecked = 0;
97
+ try {
98
+ const items = await engine.request('textDocument/prepareCallHierarchy', { textDocument: { uri }, position: errorPosition }, timeout);
99
+ if (items?.length) {
100
+ const incomingCalls = await engine.request('callHierarchy/incomingCalls', { item: items[0] }, timeout);
101
+ for (const call of (incomingCalls ?? []).slice(0, 5)) {
102
+ const callerPath = uriToPath(call.from.uri);
103
+ if (callerPath === filePath)
104
+ continue;
105
+ try {
106
+ const changed = base ? fileChangedInBranch(callerPath, base, engine.workspaceRoot) : false;
107
+ await engine.prepareFile(callerPath);
108
+ await waitForDiagnostics(engine.docManager, pathToUri(callerPath), 500);
109
+ const callerDiags = engine.docManager.getCachedDiagnostics(pathToUri(callerPath)).filter((d) => d.severity === 1).length;
110
+ let score = 2;
111
+ const evidence = [`upstream-caller: ${relativePath(callerPath, engine.workspaceRoot)}`];
112
+ if (changed) {
113
+ score += 6;
114
+ evidence.push('changed-in-branch');
115
+ }
116
+ if (callerDiags > 0) {
117
+ score += 3;
118
+ evidence.push(`caller-has-errors: ${callerDiags}`);
119
+ }
120
+ candidates.push({
121
+ symbol: call.from.name, filePath: callerPath,
122
+ reason: changed ? `Upstream caller changed${callerDiags ? ` (${callerDiags} errors)` : ''}` : `Upstream caller${callerDiags ? ` with ${callerDiags} errors` : ''}`,
123
+ confidence: changed && callerDiags > 0 ? 'high' : 'low',
124
+ score, evidence, changedInBranch: changed, diagnosticsNearby: callerDiags,
125
+ });
126
+ }
127
+ catch (err) {
128
+ warnings.push(`Caller analysis failed for ${call.from.name}: ${err instanceof Error ? err.message : String(err)}`);
129
+ }
130
+ callerFilesChecked++;
131
+ }
132
+ }
133
+ }
134
+ catch (err) {
135
+ warnings.push(`Call hierarchy failed: ${err instanceof Error ? err.message : String(err)}`);
136
+ }
137
+ // Step 5: Rank + impact
138
+ const sorted = candidates.sort((a, b) => b.score - a.score);
139
+ const topCandidate = sorted[0];
140
+ if (topCandidate) {
141
+ try {
142
+ if (topCandidate.symbol) {
143
+ const resolved = await engine.resolveSymbol(topCandidate.symbol, topCandidate.filePath);
144
+ const refs = await engine.request('textDocument/references', { textDocument: { uri: resolved.uri }, position: resolved.position, context: { includeDeclaration: false } }, timeout);
145
+ if (refs)
146
+ topCandidate.impactSummary = { affectedFiles: new Set(refs.map((r) => uriToPath(r.uri))).size };
147
+ }
148
+ }
149
+ catch (err) {
150
+ warnings.push(`Impact analysis failed: ${err instanceof Error ? err.message : String(err)}`);
151
+ }
152
+ if (localPattern === 'unhandled_enum_member')
153
+ topCandidate.suggestedFix = 'Add a case for the new enum member';
154
+ else if (localPattern === 'bad_call_argument')
155
+ topCandidate.suggestedFix = 'Check function signature — a parameter type may have changed';
156
+ else if (localPattern === 'missing_property_access')
157
+ topCandidate.suggestedFix = 'A property may have been removed or renamed';
158
+ else if (localPattern === 'incompatible_assignment')
159
+ topCandidate.suggestedFix = 'Source type may have changed — check the definition';
160
+ }
161
+ return {
162
+ diagnostic: { code: targetDiag.code ? `TS${targetDiag.code}` : undefined, message: targetDiag.message, filePath, line: diagPos.line },
163
+ errorSite,
164
+ candidates: sorted,
165
+ topCandidate,
166
+ nextVerificationStep: topCandidate ? `Run impact_trace on ${relativePath(topCandidate.filePath, engine.workspaceRoot)}` : undefined,
167
+ stats: { candidatesConsidered: candidates.length, callerFilesChecked, astUsed, baseUsed: !!base, partialResult: callerFilesChecked >= 5 },
168
+ warnings,
169
+ };
170
+ },
171
+ });
172
+ async function buildCandidate(candidatePath, source, baseScore, base, engine, warnings) {
173
+ const changed = base ? fileChangedInBranch(candidatePath, base, engine.workspaceRoot) : false;
174
+ let score = baseScore;
175
+ const evidence = [`${source}: ${relativePath(candidatePath, engine.workspaceRoot)}`];
176
+ let structuralChange;
177
+ if (changed) {
178
+ score += 8;
179
+ evidence.push('changed-in-branch');
180
+ if (base) {
181
+ try {
182
+ const sc = classifyDeclarationChange(candidatePath, base, engine.workspaceRoot);
183
+ if (sc) {
184
+ score += 5;
185
+ evidence.push(`structural-change: ${sc}`);
186
+ structuralChange = sc;
187
+ }
188
+ }
189
+ catch (err) {
190
+ warnings.push(`Structural classification failed for ${relativePath(candidatePath, engine.workspaceRoot)}: ${err instanceof Error ? err.message : String(err)}`);
191
+ }
192
+ }
193
+ }
194
+ return {
195
+ filePath: candidatePath,
196
+ reason: changed ? `${source} changed in this branch` : `${source} — trace upstream`,
197
+ confidence: changed ? 'high' : source === 'definition-site' ? 'medium' : 'low',
198
+ score, evidence, changedInBranch: changed, structuralChange,
199
+ };
200
+ }
201
+ function classifyDeclarationChange(filePath, base, workspaceRoot) {
202
+ const baseContent = getBaseFileContent(filePath, base, workspaceRoot);
203
+ if (!baseContent)
204
+ return null;
205
+ const currentContent = fs.readFileSync(filePath, 'utf-8');
206
+ const baseRoot = parseSource(baseContent, filePath.endsWith('.tsx'));
207
+ const currentRoot = parseSource(currentContent, filePath.endsWith('.tsx'));
208
+ const baseExports = extractExportDeclarations(baseRoot, baseContent);
209
+ const currentExports = extractExportDeclarations(currentRoot, currentContent);
210
+ const diffs = diffExportDeclarations(baseExports, currentExports);
211
+ return diffs.length > 0 ? diffs.map((d) => `${d.kind}: ${d.name}`).join(', ') : null;
212
+ }
213
+ //# sourceMappingURL=rootCauseTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rootCauseTrace.js","sourceRoot":"","sources":["../../../src/tools/composites/rootCauseTrace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC7F,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,wCAAwC,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,cAAc,EAAwB,MAAM,iCAAiC,CAAC;AAEtG,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAkCzD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,yKAAyK;IACtL,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACtE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;QAC/E,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KACrD,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC;QAC3C,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,OAAO,GAAG,KAAK,CAAC;QAEpB,4DAA4D;QAC5D,IAAI,MAAM,CAAC;QACX,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,aAAa,CAAC,MAAyB,EAAE,MAAM,CAAC,CAAC;QAClE,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAiC,CAAC;QACzR,CAAC;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;QAE/E,4EAA4E;QAC5E,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAClF,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAC7D,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAEpF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,oBAAoB,EAAE,CAAC,EAAE,kBAAkB,EAAE,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,CAAC,0BAA0B,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,EAAiC,CAAC;QACtS,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/F,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC;QAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;QAE5C,8DAA8D;QAC9D,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YACjD,MAAM,CAAC,OAAO,CAAe,oBAAoB,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC;iBAC5G,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,iBAAiB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;YACvH,MAAM,CAAC,OAAO,CAA+B,yBAAyB,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAAC;iBACjI,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,6BAA6B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC;SACpI,CAAC,CAAC;QAEH,IAAI,YAAY,GAAkB,IAAI,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,IAAI,EAAE,CAAC;gBAAC,OAAO,GAAG,IAAI,CAAC;gBAAC,YAAY,GAAG,iBAAiB,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;YAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,8BAA8B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QAED,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,MAAM,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAEnH,MAAM,SAAS,GAAG;YAChB,MAAM,EAAE,UAAU;YAClB,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS;YACzF,iBAAiB,EAAE,YAAY,IAAI,SAAS;YAC5C,YAAY,EAAE,YAAY,IAAI,SAAS;YACvC,YAAY;SACb,CAAC;QAEF,6BAA6B;QAC7B,MAAM,UAAU,GAAyB,EAAE,CAAC;QAE5C,+BAA+B;QAC/B,IAAI,WAAW,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC5C,UAAU,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;QACnG,CAAC;QAED,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,OAAO,CAClC,6BAA6B,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CAC3F,CAAC;YACF,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,WAAW,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACrF,IAAI,WAAW,KAAK,QAAQ,IAAI,WAAW,KAAK,WAAW,EAAE,CAAC;oBAC5D,UAAU,CAAC,IAAI,CAAC,MAAM,cAAc,CAAC,WAAW,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;gBACnG,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,kCAAkC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACtG,CAAC;QAED,2CAA2C;QAC3C,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAChC,mCAAmC,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,aAAa,EAAE,EAAE,OAAO,CACjG,CAAC;YACF,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC;gBAClB,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,OAAO,CACxC,6BAA6B,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,CAC3D,CAAC;gBACF,KAAK,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBACrD,MAAM,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBAC5C,IAAI,UAAU,KAAK,QAAQ;wBAAE,SAAS;oBACtC,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;wBAC3F,MAAM,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;wBACrC,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC,CAAC;wBACxE,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;wBAEzH,IAAI,KAAK,GAAG,CAAC,CAAC;wBACd,MAAM,QAAQ,GAAa,CAAC,oBAAoB,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;wBAClG,IAAI,OAAO,EAAE,CAAC;4BAAC,KAAK,IAAI,CAAC,CAAC;4BAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;wBAAC,CAAC;wBAChE,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;4BAAC,KAAK,IAAI,CAAC,CAAC;4BAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,WAAW,EAAE,CAAC,CAAC;wBAAC,CAAC;wBAExF,UAAU,CAAC,IAAI,CAAC;4BACd,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU;4BAC5C,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,0BAA0B,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,UAAU,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,WAAW,CAAC,CAAC,CAAC,SAAS,WAAW,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE;4BAClK,UAAU,EAAE,OAAO,IAAI,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;4BACvD,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,iBAAiB,EAAE,WAAW;yBAC1E,CAAC,CAAC;oBACL,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,QAAQ,CAAC,IAAI,CAAC,8BAA8B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;oBACrH,CAAC;oBACD,kBAAkB,EAAE,CAAC;gBACvB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,IAAI,CAAC,0BAA0B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC9F,CAAC;QAED,wBAAwB;QACxB,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC5D,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QAE/B,IAAI,YAAY,EAAE,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;oBACxB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;oBACxF,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,yBAAyB,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CACjJ,CAAC;oBACF,IAAI,IAAI;wBAAE,YAAY,CAAC,aAAa,GAAG,EAAE,aAAa,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC5G,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC/F,CAAC;YAED,IAAI,YAAY,KAAK,uBAAuB;gBAAE,YAAY,CAAC,YAAY,GAAG,oCAAoC,CAAC;iBAC1G,IAAI,YAAY,KAAK,mBAAmB;gBAAE,YAAY,CAAC,YAAY,GAAG,8DAA8D,CAAC;iBACrI,IAAI,YAAY,KAAK,yBAAyB;gBAAE,YAAY,CAAC,YAAY,GAAG,6CAA6C,CAAC;iBAC1H,IAAI,YAAY,KAAK,yBAAyB;gBAAE,YAAY,CAAC,YAAY,GAAG,qDAAqD,CAAC;QACzI,CAAC;QAED,OAAO;YACL,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;YACrI,SAAS;YACT,UAAU,EAAE,MAAM;YAClB,YAAY;YACZ,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC,uBAAuB,YAAY,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YACnI,KAAK,EAAE,EAAE,oBAAoB,EAAE,UAAU,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC,IAAI,EAAE,aAAa,EAAE,kBAAkB,IAAI,CAAC,EAAE;YACzI,QAAQ;SACsB,CAAC;IACnC,CAAC;CACF,CAAC,CAAC;AAEH,KAAK,UAAU,cAAc,CAC3B,aAAqB,EACrB,MAAc,EACd,SAAiB,EACjB,IAAwB,EACxB,MAAW,EACX,QAAkB;IAElB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IAC9F,IAAI,KAAK,GAAG,SAAS,CAAC;IACtB,MAAM,QAAQ,GAAa,CAAC,GAAG,MAAM,KAAK,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC/F,IAAI,gBAAoC,CAAC;IAEzC,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,IAAI,CAAC,CAAC;QACX,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QACnC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,yBAAyB,CAAC,aAAa,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;gBAChF,IAAI,EAAE,EAAE,CAAC;oBAAC,KAAK,IAAI,CAAC,CAAC;oBAAC,QAAQ,CAAC,IAAI,CAAC,sBAAsB,EAAE,EAAE,CAAC,CAAC;oBAAC,gBAAgB,GAAG,EAAE,CAAC;gBAAC,CAAC;YAC3F,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,QAAQ,CAAC,IAAI,CAAC,wCAAwC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClK,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,aAAa;QACvB,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,yBAAyB,CAAC,CAAC,CAAC,GAAG,MAAM,mBAAmB;QACnF,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,KAAK,iBAAiB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK;QAC9E,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,gBAAgB;KAC5D,CAAC;AACJ,CAAC;AAED,SAAS,yBAAyB,CAAC,QAAgB,EAAE,IAAY,EAAE,aAAqB;IACtF,MAAM,WAAW,GAAG,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;IACtE,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,cAAc,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,MAAM,WAAW,GAAG,WAAW,CAAC,cAAc,EAAE,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,yBAAyB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,cAAc,GAAG,yBAAyB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,sBAAsB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAClE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACvF,CAAC"}
@@ -1,32 +1,16 @@
1
1
  import { z } from 'zod';
2
- import { execSync } from 'child_process';
3
2
  import { defineTool } from '../registry.js';
4
3
  import { relativePath } from '../../engine/positions.js';
4
+ import { getMergeBase } from '../../git/getMergeBase.js';
5
+ import { getChangedHunks } from '../../git/getChangedHunks.js';
5
6
  import { LspError, LspErrorCode, DEFAULT_TIMEOUTS } from '../../engine/types.js';
6
- function parseDiffHunks(diff, workspaceRoot) {
7
- const hunks = [];
8
- let currentFile = '';
9
- for (const line of diff.split('\n')) {
10
- // +++ b/path/to/file.ts
11
- const fileMatch = line.match(/^\+\+\+ b\/(.+)/);
12
- if (fileMatch) {
13
- currentFile = `${workspaceRoot}/${fileMatch[1]}`;
14
- continue;
15
- }
16
- // @@ -old,count +new,count @@
17
- const hunkMatch = line.match(/^@@ .+ \+(\d+)(?:,(\d+))? @@/);
18
- if (hunkMatch && currentFile.match(/\.tsx?$/)) {
19
- const start = parseInt(hunkMatch[1]);
20
- const count = parseInt(hunkMatch[2] ?? '1');
21
- hunks.push({ file: currentFile, startLine: start, endLine: start + count - 1 });
22
- }
23
- }
24
- return hunks;
25
- }
7
+ const SYMBOL_KINDS = {
8
+ 5: 'Class', 6: 'Method', 10: 'Enum', 11: 'Interface',
9
+ 12: 'Function', 13: 'Variable', 14: 'Constant',
10
+ };
26
11
  function findSymbolAtLine(symbols, line0) {
27
12
  for (const sym of symbols) {
28
13
  if (line0 >= sym.range.start.line && line0 <= sym.range.end.line) {
29
- // Check children for more specific match
30
14
  if (sym.children) {
31
15
  const child = findSymbolAtLine(sym.children, line0);
32
16
  if (child)
@@ -37,51 +21,22 @@ function findSymbolAtLine(symbols, line0) {
37
21
  }
38
22
  return null;
39
23
  }
40
- const SYMBOL_KINDS = {
41
- 5: 'Class', 6: 'Method', 10: 'Enum', 11: 'Interface',
42
- 12: 'Function', 13: 'Variable', 14: 'Constant',
43
- };
44
24
  export const semanticDiff = defineTool({
45
25
  name: 'semantic_diff',
46
- description: 'Analyze git diff semantically: identify changed symbols and their blast radius. Answers "what did I change and what might break?" Requires git.',
26
+ description: 'Analyze git diff semantically: identify changed symbols and their blast radius with risk classification. Requires git.',
47
27
  schema: z.object({
48
- base: z.string().optional().describe('Base ref to diff against. Defaults to merge-base with main branch.'),
49
- verbosity: z.enum(['summary', 'normal', 'detailed']).default('normal'),
28
+ base: z.string().optional().describe('Base ref to diff against. Defaults to merge-base with main.'),
50
29
  }),
51
30
  async handler(params, engine) {
52
31
  if (!engine.gitAvailable) {
53
32
  throw new LspError(LspErrorCode.GIT_UNAVAILABLE, 'Git is not available in this workspace.');
54
33
  }
55
34
  const timeout = DEFAULT_TIMEOUTS.composite;
56
- // Determine base ref
57
- let base = params.base;
58
- if (!base) {
59
- try {
60
- base = execSync('git merge-base HEAD main', { cwd: engine.workspaceRoot, encoding: 'utf-8' }).trim();
61
- }
62
- catch {
63
- try {
64
- base = execSync('git merge-base HEAD master', { cwd: engine.workspaceRoot, encoding: 'utf-8' }).trim();
65
- }
66
- catch {
67
- base = 'HEAD~1';
68
- }
69
- }
35
+ const base = getMergeBase(engine.workspaceRoot, params.base);
36
+ const hunks = getChangedHunks(engine.workspaceRoot, base);
37
+ if (hunks.length === 0) {
38
+ return { base, changedSymbols: [], totalReferences: 0, stats: { hunksAnalyzed: 0, filesProcessed: 0 }, warnings: ['No TypeScript changes found'] };
70
39
  }
71
- // Get diff
72
- let diff;
73
- try {
74
- diff = execSync(`git diff ${base} --unified=0`, { cwd: engine.workspaceRoot, encoding: 'utf-8' });
75
- }
76
- catch {
77
- return 'No changes found or invalid base ref.';
78
- }
79
- if (!diff.trim())
80
- return 'No changes found.';
81
- const hunks = parseDiffHunks(diff, engine.workspaceRoot);
82
- if (hunks.length === 0)
83
- return 'No TypeScript file changes found.';
84
- // For each changed hunk, identify the symbol
85
40
  const changedSymbols = [];
86
41
  const processedFiles = new Set();
87
42
  for (const hunk of hunks) {
@@ -91,21 +46,21 @@ export const semanticDiff = defineTool({
91
46
  const { uri } = await engine.prepareFile(hunk.file);
92
47
  const symbols = await engine.request('textDocument/documentSymbol', { textDocument: { uri } }, timeout);
93
48
  if (symbols) {
94
- // Find symbols affected by this hunk
95
49
  for (let line = hunk.startLine - 1; line <= hunk.endLine - 1; line++) {
96
50
  const sym = findSymbolAtLine(symbols, line);
97
- if (sym && !changedSymbols.some((s) => s.name === sym.name && s.file === hunk.file)) {
98
- // Get reference count for blast radius
51
+ if (sym && !changedSymbols.some((s) => s.name === sym.name && s.file === relativePath(hunk.file, engine.workspaceRoot))) {
99
52
  const refs = await engine.request('textDocument/references', {
100
53
  textDocument: { uri },
101
54
  position: sym.selectionRange.start,
102
55
  context: { includeDeclaration: false },
103
56
  }, timeout).catch(() => null);
57
+ const refCount = refs?.length ?? 0;
104
58
  changedSymbols.push({
105
59
  name: sym.name,
106
60
  kind: SYMBOL_KINDS[sym.kind] ?? 'Unknown',
107
61
  file: relativePath(hunk.file, engine.workspaceRoot),
108
- refCount: refs?.length ?? 0,
62
+ refCount,
63
+ risk: refCount > 10 ? 'high' : refCount > 3 ? 'medium' : 'low',
109
64
  });
110
65
  }
111
66
  }
@@ -114,22 +69,14 @@ export const semanticDiff = defineTool({
114
69
  catch { }
115
70
  processedFiles.add(hunk.file);
116
71
  }
117
- if (changedSymbols.length === 0)
118
- return 'No identifiable symbol changes found in diff.';
119
- const totalRefs = changedSymbols.reduce((s, c) => s + c.refCount, 0);
120
- const lines = [`# Semantic Diff\n`];
121
- lines.push(`${changedSymbols.length} symbols changed, ${totalRefs} total references affected\n`);
122
- for (const sym of changedSymbols.sort((a, b) => b.refCount - a.refCount)) {
123
- const risk = sym.refCount > 10 ? '🔴' : sym.refCount > 3 ? '🟡' : '🟢';
124
- lines.push(`${risk} **${sym.name}** (${sym.kind}) — ${sym.file}`);
125
- if (sym.refCount > 0) {
126
- lines.push(` → ${sym.refCount} references may need updating`);
127
- }
128
- else {
129
- lines.push(` → No external references (safe to change)`);
130
- }
131
- }
132
- return lines.join('\n');
72
+ const totalReferences = changedSymbols.reduce((s, c) => s + c.refCount, 0);
73
+ return {
74
+ base,
75
+ changedSymbols: changedSymbols.sort((a, b) => b.refCount - a.refCount),
76
+ totalReferences,
77
+ stats: { hunksAnalyzed: hunks.length, filesProcessed: processedFiles.size },
78
+ warnings: [],
79
+ };
133
80
  },
134
81
  });
135
82
  //# sourceMappingURL=semanticDiff.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"semanticDiff.js","sourceRoot":"","sources":["../../../src/tools/composites/semanticDiff.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"semanticDiff.js","sourceRoot":"","sources":["../../../src/tools/composites/semanticDiff.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const clearIndex: import("../registry.js").ToolDef;
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { clearWorkspaceIndex } from '../../search/index/workspaceIndex.js';
4
+ export const clearIndex = defineTool({
5
+ name: 'clear_index',
6
+ description: 'Clear the in-memory workspace index. The next find_code or find_pattern call will rebuild it from scratch. Use after changing exclusion rules or when results seem stale.',
7
+ schema: z.object({}),
8
+ async handler(_params, _engine) {
9
+ const { cleared, hadEntries } = clearWorkspaceIndex();
10
+ return {
11
+ cleared,
12
+ previousFiles: hadEntries,
13
+ message: hadEntries > 0
14
+ ? `Index cleared (had ${hadEntries} files). Next query will rebuild.`
15
+ : 'Index was already empty.',
16
+ };
17
+ },
18
+ });
19
+ //# sourceMappingURL=clearIndex.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clearIndex.js","sourceRoot":"","sources":["../../../src/tools/live/clearIndex.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AAE3E,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EACT,2KAA2K;IAC7K,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACpB,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO;QAC5B,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,GAAG,mBAAmB,EAAE,CAAC;QACtD,OAAO;YACL,OAAO;YACP,aAAa,EAAE,UAAU;YACzB,OAAO,EAAE,UAAU,GAAG,CAAC;gBACrB,CAAC,CAAC,sBAAsB,UAAU,mCAAmC;gBACrE,CAAC,CAAC,0BAA0B;SAC/B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
@@ -15,9 +15,10 @@ export const liveDiagnostics = defineTool({
15
15
  if (!engine.connection)
16
16
  return 'Error: LSP connection not available.';
17
17
  await engine.docManager.refreshFromDisk(params.file_path, engine.connection);
18
- // Wait for TSServer to process changes
19
- await new Promise((r) => setTimeout(r, 1000));
18
+ // Wait for TSServer to process changes (poll instead of fixed sleep)
20
19
  const uri = `file://${params.file_path}`;
20
+ const { waitForDiagnostics } = await import('../../engine/waitForDiagnostics.js');
21
+ await waitForDiagnostics(engine.docManager, uri, 1500);
21
22
  const diags = engine.docManager.getCachedDiagnostics(uri);
22
23
  const rel = relativePath(params.file_path, engine.workspaceRoot);
23
24
  if (diags.length === 0)
@@ -1 +1 @@
1
- {"version":3,"file":"liveDiagnostics.js","sourceRoot":"","sources":["../../../src/tools/live/liveDiagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"liveDiagnostics.js","sourceRoot":"","sources":["../../../src/tools/live/liveDiagnostics.ts"],"names":[],"mappings":"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"}
@@ -27,7 +27,7 @@ export const callHierarchy = defineTool({
27
27
  return 'Error: Provide either symbol name or file_path + line + column.';
28
28
  }
29
29
  // Step 1: Prepare call hierarchy
30
- const items = await engine.request('textDocument/prepareCallHierarchy', { textDocument: { uri }, position });
30
+ const items = await engine.request('textDocument/prepareCallHierarchy', { textDocument: { uri }, position }, 20_000);
31
31
  if (!items || items.length === 0)
32
32
  return 'No call hierarchy available for this symbol.';
33
33
  const item = items[0];
@@ -1 +1 @@
1
- {"version":3,"file":"callHierarchy.js","sourceRoot":"","sources":["../../../src/tools/primitives/callHierarchy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"callHierarchy.js","sourceRoot":"","sources":["../../../src/tools/primitives/callHierarchy.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ export const diagnostics = defineTool({
10
10
  }),
11
11
  async handler(params, engine) {
12
12
  const { uri } = await engine.prepareFile(params.file_path);
13
- // Wait briefly for diagnostics to be pushed
14
- await new Promise((r) => setTimeout(r, 500));
13
+ const { waitForDiagnostics } = await import('../../engine/waitForDiagnostics.js');
14
+ await waitForDiagnostics(engine.docManager, uri, 800);
15
15
  const diags = engine.docManager.getCachedDiagnostics(uri);
16
16
  if (diags.length === 0) {
17
17
  const rel = relativePath(params.file_path, engine.workspaceRoot);
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/tools/primitives/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAa,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAElF,MAAM,QAAQ,GAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAE5F,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,oGAAoG;IACjH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACrD,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,4CAA4C;QAC5C,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,OAAO,sBAAsB,GAAG,kBAAkB,CAAC;QACrD,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,kBAAkB,GAAG,OAAO,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,IAAI;gBAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/tools/primitives/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAa,YAAY,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAElF,MAAM,QAAQ,GAA2B,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;AAE5F,MAAM,CAAC,MAAM,WAAW,GAAG,UAAU,CAAC;IACpC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,oGAAoG;IACjH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACrD,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1B,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3D,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;QAClF,MAAM,kBAAkB,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;QAE1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACjE,OAAO,sBAAsB,GAAG,kBAAkB,CAAC;QACrD,CAAC;QAED,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACjE,MAAM,KAAK,GAAG,CAAC,kBAAkB,GAAG,OAAO,KAAK,CAAC,MAAM,WAAW,CAAC,CAAC;QACpE,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9E,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;YAC3C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,IAAI;gBAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,IAAI,GAAG,CAAC;QAC1D,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
@@ -2,18 +2,26 @@ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
2
  import type { ZodRawShape } from 'zod';
3
3
  import { z } from 'zod';
4
4
  import type { LspEngine } from '../engine/LspEngine.js';
5
+ /**
6
+ * Tool result: either a formatted string or a structured object.
7
+ * Structured objects are JSON-serialized for the MCP response.
8
+ * Skills and formatting layers consume the structured data.
9
+ */
10
+ export type ToolResult = string | {
11
+ [key: string]: any;
12
+ };
5
13
  export interface ToolDef {
6
14
  name: string;
7
15
  description: string;
8
16
  schema: z.ZodObject<any>;
9
17
  annotations?: Record<string, boolean>;
10
- handler: (params: any, engine: LspEngine) => Promise<string>;
18
+ handler: (params: any, engine: LspEngine) => Promise<ToolResult>;
11
19
  }
12
20
  export declare function defineTool<S extends ZodRawShape>(def: {
13
21
  name: string;
14
22
  description: string;
15
23
  schema: z.ZodObject<S>;
16
24
  annotations?: Record<string, boolean>;
17
- handler: (params: z.infer<z.ZodObject<S>>, engine: LspEngine) => Promise<string>;
25
+ handler: (params: z.infer<z.ZodObject<S>>, engine: LspEngine) => Promise<ToolResult>;
18
26
  }): ToolDef;
19
27
  export declare function registerAll(server: McpServer, engine: LspEngine, tools: ToolDef[]): void;
@@ -6,8 +6,13 @@ export function registerAll(server, engine, tools) {
6
6
  server.tool(tool.name, tool.description, tool.schema.shape, async (params) => {
7
7
  try {
8
8
  const parsed = tool.schema.parse(params);
9
- const text = await tool.handler(parsed, engine);
10
- return { content: [{ type: 'text', text }] };
9
+ const result = await tool.handler(parsed, engine);
10
+ // Structured object JSON text
11
+ if (typeof result === 'object' && result !== null) {
12
+ return { content: [{ type: 'text', text: JSON.stringify(result, null, 2) }] };
13
+ }
14
+ // String → pass through (backward compat)
15
+ return { content: [{ type: 'text', text: result }] };
11
16
  }
12
17
  catch (err) {
13
18
  const msg = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,UAAU,CAAwB,GAMjD;IACC,OAAO,GAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,MAAiB,EAAE,KAAgB;IAChF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,KAAK,EAAE,MAA+B,EAAE,EAAE;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAChD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YACxD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxF,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,UAAU,CAAwB,GAMjD;IACC,OAAO,GAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAiB,EAAE,MAAiB,EAAE,KAAgB;IAChF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CACT,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,KAAK,EAAE,MAA+B,EAAE,EAAE;YACxC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACzC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;gBAElD,gCAAgC;gBAChC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;oBAClD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;gBACzF,CAAC;gBAED,0CAA0C;gBAC1C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;YAChE,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACxF,CAAC;QACH,CAAC,CACF,CAAC;IACJ,CAAC;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lsp-intelligence",
3
- "version": "0.1.2",
3
+ "version": "0.2.1",
4
4
  "description": "LSP-powered code intelligence MCP server for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,22 +8,28 @@
8
8
  },
9
9
  "files": [
10
10
  "dist",
11
+ ".npmrc",
11
12
  "README.md",
12
13
  "LICENSE"
13
14
  ],
14
15
  "scripts": {
15
- "build": "tsc",
16
- "prepublishOnly": "tsc",
16
+ "clean": "rm -rf dist",
17
+ "build": "rm -rf dist && tsc",
18
+ "prepublishOnly": "rm -rf dist && tsc",
17
19
  "start": "tsx src/index.ts",
18
20
  "test": "vitest run",
19
21
  "test:watch": "vitest",
20
- "typecheck": "tsc --noEmit"
22
+ "typecheck": "tsc --noEmit",
23
+ "bench": "tsx benchmarks/run.ts",
24
+ "bench:e2e": "tsx benchmarks/run.ts --e2e"
21
25
  },
22
26
  "dependencies": {
27
+ "@ast-grep/napi": "^0.42.0",
23
28
  "@modelcontextprotocol/sdk": "^1.0.0",
29
+ "typescript": "^5.4.0",
30
+ "typescript-language-server": "^4.0.0",
24
31
  "vscode-jsonrpc": "^8.2.0",
25
32
  "vscode-languageserver-protocol": "^3.17.5",
26
- "typescript-language-server": "^4.0.0",
27
33
  "zod": "^3.25.0"
28
34
  },
29
35
  "devDependencies": {