lsp-intelligence 0.1.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 (99) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +250 -0
  3. package/dist/engine/DocumentManager.d.ts +20 -0
  4. package/dist/engine/DocumentManager.js +73 -0
  5. package/dist/engine/DocumentManager.js.map +1 -0
  6. package/dist/engine/LspEngine.d.ts +50 -0
  7. package/dist/engine/LspEngine.js +339 -0
  8. package/dist/engine/LspEngine.js.map +1 -0
  9. package/dist/engine/positions.d.ts +31 -0
  10. package/dist/engine/positions.js +55 -0
  11. package/dist/engine/positions.js.map +1 -0
  12. package/dist/engine/types.d.ts +61 -0
  13. package/dist/engine/types.js +33 -0
  14. package/dist/engine/types.js.map +1 -0
  15. package/dist/format/markdown.d.ts +5 -0
  16. package/dist/format/markdown.js +90 -0
  17. package/dist/format/markdown.js.map +1 -0
  18. package/dist/index.d.ts +2 -0
  19. package/dist/index.js +87 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/tools/composites/batchQuery.d.ts +1 -0
  22. package/dist/tools/composites/batchQuery.js +40 -0
  23. package/dist/tools/composites/batchQuery.js.map +1 -0
  24. package/dist/tools/composites/explainError.d.ts +1 -0
  25. package/dist/tools/composites/explainError.js +56 -0
  26. package/dist/tools/composites/explainError.js.map +1 -0
  27. package/dist/tools/composites/findTestFiles.d.ts +1 -0
  28. package/dist/tools/composites/findTestFiles.js +57 -0
  29. package/dist/tools/composites/findTestFiles.js.map +1 -0
  30. package/dist/tools/composites/impactTrace.d.ts +1 -0
  31. package/dist/tools/composites/impactTrace.js +149 -0
  32. package/dist/tools/composites/impactTrace.js.map +1 -0
  33. package/dist/tools/composites/inspectSymbol.d.ts +1 -0
  34. package/dist/tools/composites/inspectSymbol.js +60 -0
  35. package/dist/tools/composites/inspectSymbol.js.map +1 -0
  36. package/dist/tools/composites/semanticDiff.d.ts +1 -0
  37. package/dist/tools/composites/semanticDiff.js +135 -0
  38. package/dist/tools/composites/semanticDiff.js.map +1 -0
  39. package/dist/tools/context/gatherContext.d.ts +1 -0
  40. package/dist/tools/context/gatherContext.js +153 -0
  41. package/dist/tools/context/gatherContext.js.map +1 -0
  42. package/dist/tools/context/outline.d.ts +1 -0
  43. package/dist/tools/context/outline.js +56 -0
  44. package/dist/tools/context/outline.js.map +1 -0
  45. package/dist/tools/live/autoImport.d.ts +1 -0
  46. package/dist/tools/live/autoImport.js +123 -0
  47. package/dist/tools/live/autoImport.js.map +1 -0
  48. package/dist/tools/live/findUnusedExports.d.ts +1 -0
  49. package/dist/tools/live/findUnusedExports.js +69 -0
  50. package/dist/tools/live/findUnusedExports.js.map +1 -0
  51. package/dist/tools/live/liveDiagnostics.d.ts +1 -0
  52. package/dist/tools/live/liveDiagnostics.js +38 -0
  53. package/dist/tools/live/liveDiagnostics.js.map +1 -0
  54. package/dist/tools/primitives/callHierarchy.d.ts +1 -0
  55. package/dist/tools/primitives/callHierarchy.js +61 -0
  56. package/dist/tools/primitives/callHierarchy.js.map +1 -0
  57. package/dist/tools/primitives/completions.d.ts +1 -0
  58. package/dist/tools/primitives/completions.js +31 -0
  59. package/dist/tools/primitives/completions.js.map +1 -0
  60. package/dist/tools/primitives/diagnostics.d.ts +1 -0
  61. package/dist/tools/primitives/diagnostics.js +32 -0
  62. package/dist/tools/primitives/diagnostics.js.map +1 -0
  63. package/dist/tools/primitives/documentSymbols.d.ts +1 -0
  64. package/dist/tools/primitives/documentSymbols.js +42 -0
  65. package/dist/tools/primitives/documentSymbols.js.map +1 -0
  66. package/dist/tools/primitives/fileExports.d.ts +1 -0
  67. package/dist/tools/primitives/fileExports.js +69 -0
  68. package/dist/tools/primitives/fileExports.js.map +1 -0
  69. package/dist/tools/primitives/fileImports.d.ts +1 -0
  70. package/dist/tools/primitives/fileImports.js +58 -0
  71. package/dist/tools/primitives/fileImports.js.map +1 -0
  72. package/dist/tools/primitives/findImplementations.d.ts +1 -0
  73. package/dist/tools/primitives/findImplementations.js +36 -0
  74. package/dist/tools/primitives/findImplementations.js.map +1 -0
  75. package/dist/tools/primitives/findReferences.d.ts +1 -0
  76. package/dist/tools/primitives/findReferences.js +42 -0
  77. package/dist/tools/primitives/findReferences.js.map +1 -0
  78. package/dist/tools/primitives/gotoDefinition.d.ts +1 -0
  79. package/dist/tools/primitives/gotoDefinition.js +37 -0
  80. package/dist/tools/primitives/gotoDefinition.js.map +1 -0
  81. package/dist/tools/primitives/gotoTypeDefinition.d.ts +1 -0
  82. package/dist/tools/primitives/gotoTypeDefinition.js +35 -0
  83. package/dist/tools/primitives/gotoTypeDefinition.js.map +1 -0
  84. package/dist/tools/primitives/hover.d.ts +1 -0
  85. package/dist/tools/primitives/hover.js +37 -0
  86. package/dist/tools/primitives/hover.js.map +1 -0
  87. package/dist/tools/primitives/rename.d.ts +1 -0
  88. package/dist/tools/primitives/rename.js +56 -0
  89. package/dist/tools/primitives/rename.js.map +1 -0
  90. package/dist/tools/primitives/typeHierarchy.d.ts +1 -0
  91. package/dist/tools/primitives/typeHierarchy.js +49 -0
  92. package/dist/tools/primitives/typeHierarchy.js.map +1 -0
  93. package/dist/tools/primitives/workspaceSymbols.d.ts +1 -0
  94. package/dist/tools/primitives/workspaceSymbols.js +32 -0
  95. package/dist/tools/primitives/workspaceSymbols.js.map +1 -0
  96. package/dist/tools/registry.d.ts +19 -0
  97. package/dist/tools/registry.js +19 -0
  98. package/dist/tools/registry.js.map +1 -0
  99. package/package.json +39 -0
package/dist/index.js ADDED
@@ -0,0 +1,87 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'module';
3
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
4
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
5
+ const require = createRequire(import.meta.url);
6
+ const { version } = require('../package.json');
7
+ import { LspEngine } from './engine/LspEngine.js';
8
+ import { registerAll } from './tools/registry.js';
9
+ // Primitives
10
+ import { findReferences } from './tools/primitives/findReferences.js';
11
+ import { gotoDefinition } from './tools/primitives/gotoDefinition.js';
12
+ import { gotoTypeDefinition } from './tools/primitives/gotoTypeDefinition.js';
13
+ import { hover } from './tools/primitives/hover.js';
14
+ import { findImplementations } from './tools/primitives/findImplementations.js';
15
+ import { documentSymbols } from './tools/primitives/documentSymbols.js';
16
+ import { workspaceSymbols } from './tools/primitives/workspaceSymbols.js';
17
+ import { callHierarchy } from './tools/primitives/callHierarchy.js';
18
+ import { typeHierarchy } from './tools/primitives/typeHierarchy.js';
19
+ import { rename } from './tools/primitives/rename.js';
20
+ import { diagnostics } from './tools/primitives/diagnostics.js';
21
+ import { completions } from './tools/primitives/completions.js';
22
+ import { fileImports } from './tools/primitives/fileImports.js';
23
+ import { fileExports } from './tools/primitives/fileExports.js';
24
+ // Composites
25
+ import { inspectSymbol } from './tools/composites/inspectSymbol.js';
26
+ import { batchQuery } from './tools/composites/batchQuery.js';
27
+ import { impactTrace } from './tools/composites/impactTrace.js';
28
+ import { semanticDiff } from './tools/composites/semanticDiff.js';
29
+ import { findTestFiles } from './tools/composites/findTestFiles.js';
30
+ import { explainError } from './tools/composites/explainError.js';
31
+ // Context
32
+ import { outline } from './tools/context/outline.js';
33
+ import { gatherContext } from './tools/context/gatherContext.js';
34
+ // Live
35
+ import { liveDiagnostics } from './tools/live/liveDiagnostics.js';
36
+ import { findUnusedExports } from './tools/live/findUnusedExports.js';
37
+ import { autoImport } from './tools/live/autoImport.js';
38
+ const workspaceRoot = process.env.LSP_WORKSPACE_ROOT || process.cwd();
39
+ async function main() {
40
+ console.error(`[lsp-intelligence] Starting with workspace: ${workspaceRoot}`);
41
+ const engine = new LspEngine(workspaceRoot);
42
+ const server = new McpServer({ name: 'lsp-intelligence', version }, { capabilities: { tools: {} } });
43
+ registerAll(server, engine, [
44
+ // Layer 1: Primitives
45
+ findReferences,
46
+ gotoDefinition,
47
+ gotoTypeDefinition,
48
+ hover,
49
+ findImplementations,
50
+ documentSymbols,
51
+ workspaceSymbols,
52
+ callHierarchy,
53
+ typeHierarchy,
54
+ rename,
55
+ diagnostics,
56
+ completions,
57
+ fileImports,
58
+ fileExports,
59
+ // Layer 2: Composites
60
+ inspectSymbol,
61
+ batchQuery,
62
+ impactTrace,
63
+ semanticDiff,
64
+ findTestFiles,
65
+ explainError,
66
+ // Layer 3: Context
67
+ outline,
68
+ gatherContext,
69
+ // Layer 4: Live
70
+ liveDiagnostics,
71
+ findUnusedExports,
72
+ autoImport,
73
+ ]);
74
+ engine.initialize().catch((err) => {
75
+ console.error(`[lsp-intelligence] Engine initialization failed: ${err.message}`);
76
+ });
77
+ const transport = new StdioServerTransport();
78
+ await server.connect(transport);
79
+ console.error('[lsp-intelligence] MCP server running on stdio');
80
+ process.on('SIGTERM', async () => { await engine.shutdown(); process.exit(0); });
81
+ process.on('SIGINT', async () => { await engine.shutdown(); process.exit(0); });
82
+ }
83
+ main().catch((err) => {
84
+ console.error(`[lsp-intelligence] Fatal: ${err.message}`);
85
+ process.exit(1);
86
+ });
87
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const batchQuery: import("../registry.js").ToolDef;
@@ -0,0 +1,40 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { formatHover } from '../../format/markdown.js';
4
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
5
+ export const batchQuery = defineTool({
6
+ name: 'batch_query',
7
+ description: 'Look up multiple symbols in one call. Returns hover + reference count for each. Saves multiple round-trips when exploring a file.',
8
+ schema: z.object({
9
+ symbols: z.array(z.string()).describe('List of symbol names to look up'),
10
+ include_references: z.boolean().default(true).describe('Include reference counts'),
11
+ }),
12
+ async handler(params, engine) {
13
+ const timeout = DEFAULT_TIMEOUTS.composite;
14
+ const results = [`# Batch Query: ${params.symbols.length} symbols\n`];
15
+ for (const symbol of params.symbols) {
16
+ try {
17
+ const resolved = await engine.resolveSymbol(symbol);
18
+ const uri = resolved.uri;
19
+ const position = resolved.position;
20
+ const hover = await engine.request('textDocument/hover', { textDocument: { uri }, position }, timeout).catch(() => null);
21
+ let refCount = 0;
22
+ if (params.include_references) {
23
+ const refs = await engine.request('textDocument/references', {
24
+ textDocument: { uri }, position, context: { includeDeclaration: false },
25
+ }, timeout).catch(() => null);
26
+ refCount = refs?.length ?? 0;
27
+ }
28
+ const hoverText = formatHover(hover);
29
+ const sig = hoverText.length > 200 ? hoverText.substring(0, 200) + '...' : hoverText;
30
+ results.push(`## ${symbol}${refCount > 0 ? ` (${refCount} refs)` : ''}\n\n${sig}\n`);
31
+ }
32
+ catch (err) {
33
+ const msg = err instanceof Error ? err.message : String(err);
34
+ results.push(`## ${symbol}\n\n*Error: ${msg}*\n`);
35
+ }
36
+ }
37
+ return results.join('\n');
38
+ },
39
+ });
40
+ //# sourceMappingURL=batchQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"batchQuery.js","sourceRoot":"","sources":["../../../src/tools/composites/batchQuery.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAoB,MAAM,0BAA0B,CAAC;AAEzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,mIAAmI;IAChJ,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,iCAAiC,CAAC;QACxE,kBAAkB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACnF,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1B,MAAM,OAAO,GAAG,gBAAgB,CAAC,SAAS,CAAC;QAC3C,MAAM,OAAO,GAAa,CAAC,kBAAkB,MAAM,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QAEhF,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;gBACpD,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;gBACzB,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;gBAEnC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,OAAO,CAChC,oBAAoB,EAAE,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,EAAE,OAAO,CACnE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;gBAEpB,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;oBAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,yBAAyB,EAAE;wBACzB,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;qBACxE,EAAE,OAAO,CACX,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;oBACpB,QAAQ,GAAG,IAAI,EAAE,MAAM,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBAED,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBACrC,MAAM,GAAG,GAAG,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;gBACrF,OAAO,CAAC,IAAI,CAAC,MAAM,MAAM,GAAG,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,CAAC;YACvF,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,CAAC,IAAI,CAAC,MAAM,MAAM,eAAe,GAAG,KAAK,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const explainError: import("../registry.js").ToolDef;
@@ -0,0 +1,56 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { fromPosition, relativePath } from '../../engine/positions.js';
4
+ import { formatHover } from '../../format/markdown.js';
5
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
6
+ export const explainError = defineTool({
7
+ name: 'explain_error',
8
+ description: 'Explain a TypeScript error with full context: what type was expected, what was provided, and why. Turns cryptic TS errors into actionable fixes.',
9
+ schema: z.object({
10
+ file_path: z.string().describe('Absolute file path containing the error'),
11
+ line: z.number().describe('1-indexed line number of the error'),
12
+ column: z.number().optional().default(1).describe('1-indexed column number (defaults to 1)'),
13
+ }),
14
+ async handler(params, engine) {
15
+ const { uri } = await engine.prepareFile(params.file_path);
16
+ const timeout = DEFAULT_TIMEOUTS.composite;
17
+ // Wait for diagnostics
18
+ await new Promise((r) => setTimeout(r, 500));
19
+ const diags = engine.docManager.getCachedDiagnostics(uri);
20
+ // Find diagnostic at or near the specified line
21
+ const targetLine = params.line - 1; // 0-indexed
22
+ const diag = diags.find((d) => d.range.start.line === targetLine)
23
+ ?? diags.find((d) => Math.abs(d.range.start.line - targetLine) <= 2);
24
+ if (!diag) {
25
+ const rel = relativePath(params.file_path, engine.workspaceRoot);
26
+ return `No error found at ${rel}:${params.line}. File may be clean or diagnostics haven't been pushed yet.`;
27
+ }
28
+ const errorPos = { line: diag.range.start.line, character: diag.range.start.character };
29
+ // Get hover info at the error position (type information)
30
+ const hoverResult = await engine.request('textDocument/hover', { textDocument: { uri }, position: errorPos }, timeout).catch(() => null);
31
+ // Get type definition to understand expected type
32
+ const typeDef = await engine.request('textDocument/typeDefinition', { textDocument: { uri }, position: errorPos }, timeout).catch(() => null);
33
+ const rel = relativePath(params.file_path, engine.workspaceRoot);
34
+ const pos = fromPosition(diag.range.start);
35
+ const severity = diag.severity === 1 ? 'Error' : diag.severity === 2 ? 'Warning' : 'Info';
36
+ const code = diag.code ? `TS${diag.code}` : '';
37
+ const lines = [`# ${severity}: ${rel}:${pos.line}\n`];
38
+ lines.push(`**${code}**: ${diag.message}\n`);
39
+ if (hoverResult) {
40
+ const hoverText = formatHover(hoverResult);
41
+ if (hoverText && !hoverText.includes('No hover')) {
42
+ lines.push(`## Type at error location\n\n${hoverText}\n`);
43
+ }
44
+ }
45
+ if (diag.relatedInformation) {
46
+ lines.push('## Related\n');
47
+ for (const related of diag.relatedInformation) {
48
+ const relPath = relativePath(related.location.uri, engine.workspaceRoot);
49
+ const relPos = fromPosition(related.location.range.start);
50
+ lines.push(`- ${relPath}:${relPos.line}: ${related.message}`);
51
+ }
52
+ }
53
+ return lines.join('\n');
54
+ },
55
+ });
56
+ //# sourceMappingURL=explainError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explainError.js","sourceRoot":"","sources":["../../../src/tools/composites/explainError.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const findTestFiles: import("../registry.js").ToolDef;
@@ -0,0 +1,57 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { relativePath, uriToPath } from '../../engine/positions.js';
4
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
5
+ const TEST_PATTERNS = /\.(spec|test|stories)\.(ts|tsx|js|jsx)$/;
6
+ export const findTestFiles = defineTool({
7
+ name: 'find_test_files',
8
+ description: 'Find all test files (spec, test, stories) that reference a symbol. Use before modifying code to know which tests to update.',
9
+ schema: z.object({
10
+ symbol: z.string().optional().describe('Symbol name. Use this OR file_path+line+column.'),
11
+ file_path: z.string().optional().describe('Absolute file path'),
12
+ line: z.number().optional().describe('1-indexed line number'),
13
+ column: z.number().optional().describe('1-indexed column number'),
14
+ }),
15
+ async handler(params, engine) {
16
+ let uri, position, name;
17
+ if (params.symbol) {
18
+ const resolved = await engine.resolveSymbol(params.symbol, params.file_path);
19
+ uri = resolved.uri;
20
+ position = resolved.position;
21
+ name = resolved.name ?? params.symbol;
22
+ }
23
+ else if (params.file_path && params.line && params.column) {
24
+ const { toPosition } = await import('../../engine/positions.js');
25
+ const prepared = await engine.prepareFile(params.file_path);
26
+ uri = prepared.uri;
27
+ position = toPosition(params.line, params.column);
28
+ name = 'symbol';
29
+ }
30
+ else {
31
+ return 'Error: Provide either symbol name or file_path + line + column.';
32
+ }
33
+ const refs = await engine.request('textDocument/references', {
34
+ textDocument: { uri }, position, context: { includeDeclaration: false },
35
+ }, DEFAULT_TIMEOUTS.composite);
36
+ if (!refs || refs.length === 0)
37
+ return `No references found for ${name}.`;
38
+ // Filter to test files
39
+ const testRefs = refs.filter((r) => TEST_PATTERNS.test(uriToPath(r.uri)));
40
+ if (testRefs.length === 0)
41
+ return `No test files reference ${name}. Consider adding tests.`;
42
+ // Group by file
43
+ const byFile = new Map();
44
+ for (const ref of testRefs) {
45
+ const file = uriToPath(ref.uri);
46
+ byFile.set(file, (byFile.get(file) ?? 0) + 1);
47
+ }
48
+ const lines = [`# Test Files for ${name}\n\n${byFile.size} test files, ${testRefs.length} references\n`];
49
+ for (const [file, count] of [...byFile.entries()].sort()) {
50
+ const rel = relativePath(file, engine.workspaceRoot);
51
+ const type = file.includes('.stories.') ? 'story' : file.includes('.spec.') ? 'spec' : 'test';
52
+ lines.push(`- **${rel}** (${count} refs, ${type})`);
53
+ }
54
+ return lines.join('\n');
55
+ },
56
+ });
57
+ //# sourceMappingURL=findTestFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findTestFiles.js","sourceRoot":"","sources":["../../../src/tools/composites/findTestFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAEpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,MAAM,aAAa,GAAG,yCAAyC,CAAC;AAEhE,MAAM,CAAC,MAAM,aAAa,GAAG,UAAU,CAAC;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE,6HAA6H;IAC1I,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;QACzF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QAC7D,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;KAClE,CAAC;IACF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM;QAC1B,IAAI,GAAW,EAAE,QAA6C,EAAE,IAAY,CAAC;QAC7E,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7E,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YAAC,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC;YAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;QAC1F,CAAC;aAAM,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC5D,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;YAAC,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;YAAC,IAAI,GAAG,QAAQ,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,iEAAiE,CAAC;QAC3E,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,OAAO,CAC/B,yBAAyB,EAAE;YACzB,YAAY,EAAE,EAAE,GAAG,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,KAAK,EAAE;SACxE,EAAE,gBAAgB,CAAC,SAAS,CAC9B,CAAC;QAEF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,2BAA2B,IAAI,GAAG,CAAC;QAE1E,uBAAuB;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAE1E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,2BAA2B,IAAI,0BAA0B,CAAC;QAE5F,gBAAgB;QAChB,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAChC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,oBAAoB,IAAI,OAAO,MAAM,CAAC,IAAI,gBAAgB,QAAQ,CAAC,MAAM,eAAe,CAAC,CAAC;QACzG,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YACzD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;YACrD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;YAC9F,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,KAAK,UAAU,IAAI,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const impactTrace: import("../registry.js").ToolDef;
@@ -0,0 +1,149 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { toPosition, relativePath, uriToPath } from '../../engine/positions.js';
4
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
5
+ export const impactTrace = defineTool({
6
+ name: 'impact_trace',
7
+ description: 'Follow a symbol through type aliases and re-exports to find ALL transitive usages. Returns a dependency graph with affected files ranked by distance. Answers "what breaks if I change X?" in one call.',
8
+ schema: z.object({
9
+ symbol: z.string().optional().describe('Symbol name. Use this OR file_path+line+column.'),
10
+ file_path: z.string().optional().describe('Absolute file path'),
11
+ line: z.number().optional().describe('1-indexed line number'),
12
+ column: z.number().optional().describe('1-indexed column number'),
13
+ max_depth: z.number().default(3).describe('Max depth to trace through aliases'),
14
+ verbosity: z.enum(['summary', 'normal', 'detailed']).default('normal'),
15
+ }),
16
+ async handler(params, engine) {
17
+ let uri, position, name;
18
+ if (params.symbol) {
19
+ const resolved = await engine.resolveSymbol(params.symbol, params.file_path);
20
+ uri = resolved.uri;
21
+ position = resolved.position;
22
+ name = resolved.name ?? params.symbol;
23
+ }
24
+ else if (params.file_path && params.line && params.column) {
25
+ const prepared = await engine.prepareFile(params.file_path);
26
+ uri = prepared.uri;
27
+ position = toPosition(params.line, params.column);
28
+ name = 'symbol';
29
+ }
30
+ else {
31
+ return 'Error: Provide either symbol name or file_path + line + column.';
32
+ }
33
+ const timeout = DEFAULT_TIMEOUTS.composite;
34
+ const visited = new Map();
35
+ const queue = [
36
+ { uri, position, name, depth: 0 },
37
+ ];
38
+ while (queue.length > 0) {
39
+ const current = queue.shift();
40
+ if (current.depth > params.max_depth)
41
+ continue;
42
+ const key = `${current.uri}:${current.position.line}:${current.position.character}`;
43
+ if (visited.has(key))
44
+ continue;
45
+ // Get references for this node
46
+ const refs = await engine.request('textDocument/references', {
47
+ textDocument: { uri: current.uri },
48
+ position: current.position,
49
+ context: { includeDeclaration: false },
50
+ }, timeout).catch(() => null);
51
+ const refCount = refs?.length ?? 0;
52
+ // Check if this is a type alias (has a type definition different from itself)
53
+ let isTypeAlias = false;
54
+ const typeDef = await engine.request('textDocument/typeDefinition', {
55
+ textDocument: { uri: current.uri },
56
+ position: current.position,
57
+ }, timeout).catch(() => null);
58
+ if (typeDef) {
59
+ const defs = Array.isArray(typeDef) ? typeDef : [typeDef];
60
+ for (const def of defs) {
61
+ const defKey = `${def.uri}:${def.range.start.line}:${def.range.start.character}`;
62
+ if (defKey !== key && !visited.has(defKey)) {
63
+ isTypeAlias = true;
64
+ // Enqueue the type definition target
65
+ queue.push({
66
+ uri: def.uri,
67
+ position: def.range.start,
68
+ name: current.name,
69
+ depth: current.depth + 1,
70
+ });
71
+ }
72
+ }
73
+ }
74
+ visited.set(key, {
75
+ uri: current.uri,
76
+ name: current.name,
77
+ depth: current.depth,
78
+ refCount,
79
+ isTypeAlias,
80
+ });
81
+ // Check for re-exports among references
82
+ if (refs) {
83
+ for (const ref of refs) {
84
+ const refPath = uriToPath(ref.uri);
85
+ const content = engine.docManager.getContent(ref.uri);
86
+ if (content) {
87
+ const line = content.split('\n')[ref.range.start.line];
88
+ if (line && /export\s/.test(line)) {
89
+ const refKey = `${ref.uri}:${ref.range.start.line}:${ref.range.start.character}`;
90
+ if (!visited.has(refKey)) {
91
+ queue.push({
92
+ uri: ref.uri,
93
+ position: ref.range.start,
94
+ name: current.name,
95
+ depth: current.depth + 1,
96
+ });
97
+ }
98
+ }
99
+ }
100
+ }
101
+ }
102
+ }
103
+ // Aggregate results
104
+ const allRefs = new Set();
105
+ const allFiles = new Set();
106
+ let directCallers = 0;
107
+ let typeAnnotations = 0;
108
+ let transitiveRefs = 0;
109
+ for (const node of visited.values()) {
110
+ allRefs.add(`${node.uri}:${node.refCount}`);
111
+ if (node.refCount > 0) {
112
+ if (node.depth === 0)
113
+ directCallers += node.refCount;
114
+ else if (node.isTypeAlias)
115
+ typeAnnotations += node.refCount;
116
+ else
117
+ transitiveRefs += node.refCount;
118
+ }
119
+ }
120
+ // Collect all unique referenced files across all depths
121
+ const filesByDepth = new Map();
122
+ for (const node of visited.values()) {
123
+ const rel = relativePath(uriToPath(node.uri), engine.workspaceRoot);
124
+ if (!filesByDepth.has(rel) || filesByDepth.get(rel) > node.depth) {
125
+ filesByDepth.set(rel, node.depth);
126
+ }
127
+ }
128
+ const totalRefs = directCallers + typeAnnotations + transitiveRefs;
129
+ const totalFiles = filesByDepth.size;
130
+ const lines = [`# Impact Trace: ${name}\n`];
131
+ lines.push(`${totalRefs} total references across ${totalFiles} nodes`);
132
+ if (directCallers > 0)
133
+ lines.push(`- ${directCallers} direct references`);
134
+ if (typeAnnotations > 0)
135
+ lines.push(`- ${typeAnnotations} via type aliases`);
136
+ if (transitiveRefs > 0)
137
+ lines.push(`- ${transitiveRefs} transitive (re-exports)`);
138
+ lines.push('');
139
+ if (params.verbosity !== 'summary') {
140
+ const sorted = [...filesByDepth.entries()].sort((a, b) => a[1] - b[1]);
141
+ for (const [file, depth] of sorted) {
142
+ const depthLabel = depth === 0 ? '(direct)' : `(depth ${depth})`;
143
+ lines.push(`- ${file} ${depthLabel}`);
144
+ }
145
+ }
146
+ return lines.join('\n');
147
+ },
148
+ });
149
+ //# sourceMappingURL=impactTrace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"impactTrace.js","sourceRoot":"","sources":["../../../src/tools/composites/impactTrace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const inspectSymbol: import("../registry.js").ToolDef;
@@ -0,0 +1,60 @@
1
+ import { z } from 'zod';
2
+ import { defineTool } from '../registry.js';
3
+ import { toPosition } from '../../engine/positions.js';
4
+ import { formatHover, formatReferences, formatDefinitions } from '../../format/markdown.js';
5
+ import { DEFAULT_TIMEOUTS } from '../../engine/types.js';
6
+ export const inspectSymbol = defineTool({
7
+ name: 'inspect_symbol',
8
+ description: 'Get complete information about a symbol in one call: hover (type signature), definition location, and all references. Use when you need full context about a symbol.',
9
+ schema: z.object({
10
+ symbol: z.string().optional().describe('Symbol name. Use this OR file_path+line+column.'),
11
+ file_path: z.string().optional().describe('Absolute file path'),
12
+ line: z.number().optional().describe('1-indexed line number'),
13
+ column: z.number().optional().describe('1-indexed column number'),
14
+ verbosity: z.enum(['summary', 'normal', 'detailed']).default('normal'),
15
+ }),
16
+ async handler(params, engine) {
17
+ let uri, position;
18
+ if (params.symbol) {
19
+ const resolved = await engine.resolveSymbol(params.symbol, params.file_path);
20
+ uri = resolved.uri;
21
+ position = resolved.position;
22
+ }
23
+ else if (params.file_path && params.line && params.column) {
24
+ const prepared = await engine.prepareFile(params.file_path);
25
+ uri = prepared.uri;
26
+ position = toPosition(params.line, params.column);
27
+ }
28
+ else {
29
+ return 'Error: Provide either symbol name or file_path + line + column.';
30
+ }
31
+ const timeout = DEFAULT_TIMEOUTS.composite;
32
+ // Run hover, definition, references in parallel
33
+ const [hoverResult, defResult, refsResult] = await Promise.all([
34
+ engine.request('textDocument/hover', { textDocument: { uri }, position }, timeout).catch(() => null),
35
+ engine.request('textDocument/definition', { textDocument: { uri }, position }, timeout).catch(() => null),
36
+ engine.request('textDocument/references', {
37
+ textDocument: { uri }, position, context: { includeDeclaration: false },
38
+ }, timeout).catch(() => null),
39
+ ]);
40
+ const name = params.symbol ?? 'symbol';
41
+ const sections = [`# Inspect: ${name}\n`];
42
+ // Hover / type signature
43
+ const hoverText = formatHover(hoverResult);
44
+ if (hoverText && !hoverText.includes('No hover')) {
45
+ sections.push(`## Type\n\n${hoverText}\n`);
46
+ }
47
+ // Definition
48
+ const defText = formatDefinitions(defResult, engine.workspaceRoot);
49
+ if (!defText.includes('No definition')) {
50
+ sections.push(defText.replace('# Definition', '## Definition'));
51
+ }
52
+ // References
53
+ const refsText = formatReferences(refsResult, engine.workspaceRoot, params.verbosity);
54
+ if (!refsText.includes('No references')) {
55
+ sections.push(refsText.replace('# References', '## References'));
56
+ }
57
+ return sections.join('\n');
58
+ },
59
+ });
60
+ //# sourceMappingURL=inspectSymbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspectSymbol.js","sourceRoot":"","sources":["../../../src/tools/composites/inspectSymbol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare const semanticDiff: import("../registry.js").ToolDef;