@aiready/ast-mcp-server 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -99
- package/dist/chunk-PRWMQQYW.js +80 -0
- package/dist/chunk-PRWMQQYW.js.map +1 -0
- package/dist/index.cjs +1046 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +897 -0
- package/dist/index.js.map +1 -0
- package/dist/search-code-V3LACKQ6.js +7 -0
- package/dist/search-code-V3LACKQ6.js.map +1 -0
- package/package.json +2 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/tsup@8.5.1_jiti@2.6.1_postcss@8.5.8_tsx@4.21.0_typescript@5.9.3_yaml@2.8.2/node_modules/tsup/assets/cjs_shims.js","../src/security.ts","../src/tools/search-code.ts","../src/index.ts","../src/schemas.ts","../src/tools/resolve-definition.ts","../src/adapters/typescript-adapter.ts","../src/project-manager.ts","../src/index/symbol-index.ts","../src/tools/find-references.ts","../src/tools/find-implementations.ts","../src/tools/get-file-structure.ts","../src/tools/get-symbol-docs.ts","../src/tools/build-symbol-index.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import path from 'path';\nimport fs from 'fs';\n\nexport function resolveWorkspaceRoot(): string {\n return process.env.AST_WORKSPACE_ROOT || process.cwd();\n}\n\nexport function validateWorkspacePath(inputPath: string): string {\n const root = resolveWorkspaceRoot();\n const resolved = path.resolve(root, inputPath);\n const normalized = path.normalize(resolved);\n\n // Reject path traversal\n if (!normalized.startsWith(root)) {\n throw new Error(\n `Path traversal detected: ${inputPath} escapes workspace root`\n );\n }\n\n // Reject null bytes\n if (normalized.includes('\\0')) {\n throw new Error('Path contains null bytes');\n }\n\n return normalized;\n}\n\nexport function validateFileExists(filePath: string): string {\n const safe = validateWorkspacePath(filePath);\n if (!fs.existsSync(safe)) {\n throw new Error(`File not found: ${filePath}`);\n }\n if (!fs.statSync(safe).isFile()) {\n throw new Error(`Not a file: ${filePath}`);\n }\n return safe;\n}\n","import { execFile } from 'child_process';\nimport { promisify } from 'util';\nimport { rgPath } from '@vscode/ripgrep';\nimport { validateWorkspacePath } from '../security.js';\n\nconst execFileAsync = promisify(execFile);\n\nexport interface SearchResult {\n file: string;\n line: number;\n column: number;\n text: string;\n}\n\nexport async function searchCode(\n pattern: string,\n searchPath: string,\n filePattern?: string,\n limit: number = 50,\n regex: boolean = true\n): Promise<SearchResult[]> {\n const safePath = validateWorkspacePath(searchPath);\n\n const args = [\n '--json',\n '--max-count',\n limit.toString(),\n '--max-columns',\n '500',\n ];\n\n if (!regex) {\n args.push('--fixed-strings');\n }\n\n args.push(pattern, safePath);\n\n if (filePattern) {\n args.push('--glob', filePattern);\n }\n\n // Common exclusions\n args.push('--glob', '!**/node_modules/**');\n args.push('--glob', '!**/dist/**');\n args.push('--glob', '!**/.git/**');\n\n try {\n const { stdout } = await execFileAsync(rgPath, args);\n const lines = stdout.split('\\n').filter(Boolean);\n const results: SearchResult[] = [];\n\n for (const line of lines) {\n const data = JSON.parse(line);\n if (data.type === 'match') {\n const file = data.data.path.text;\n const lineNumber = data.data.line_number;\n const submatches = data.data.submatches;\n\n for (const submatch of submatches) {\n results.push({\n file,\n line: lineNumber,\n column: submatch.start,\n text: data.data.lines.text.trim(),\n });\n }\n }\n }\n\n return results.slice(0, limit);\n } catch (error: any) {\n if (error.code === 1) {\n // rg returns 1 if no matches found\n return [];\n }\n throw error;\n }\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport {\n ResolveDefinitionSchema,\n FindReferencesSchema,\n FindImplementationsSchema,\n GetFileStructureSchema,\n SearchCodeSchema,\n GetSymbolDocsSchema,\n BuildSymbolIndexSchema,\n} from './schemas.js';\nimport { resolveDefinition } from './tools/resolve-definition.js';\nimport { findReferences } from './tools/find-references.js';\nimport { findImplementations } from './tools/find-implementations.js';\nimport { getFileStructure } from './tools/get-file-structure.js';\nimport { searchCode } from './tools/search-code.js';\nimport { getSymbolDocs } from './tools/get-symbol-docs.js';\nimport { buildSymbolIndex } from './tools/build-symbol-index.js';\n\n/**\n * AST-aware Code Exploration MCP Server\n */\nexport class ASTExplorerServer {\n private server: Server;\n private version: string = '0.1.0';\n\n constructor() {\n this.server = new Server(\n {\n name: 'ast-explorer-server',\n version: this.version,\n },\n {\n capabilities: {\n tools: {},\n },\n }\n );\n\n this.setupHandlers();\n\n this.server.onerror = (error) => {\n console.error('[MCP Error]', error);\n };\n }\n\n private setupHandlers() {\n // List available tools\n this.server.setRequestHandler(ListToolsRequestSchema, async () => {\n return {\n tools: [\n {\n name: 'resolve_definition',\n description: 'Find where a symbol is defined using TypeScript AST.',\n inputSchema: {\n type: 'object',\n properties: {\n symbol: {\n type: 'string',\n description: 'Symbol name (e.g., function, class)',\n },\n path: {\n type: 'string',\n description: 'Project root or target directory',\n },\n },\n required: ['symbol', 'path'],\n },\n },\n {\n name: 'find_references',\n description: 'Find all usages of a symbol across the project.',\n inputSchema: {\n type: 'object',\n properties: {\n symbol: { type: 'string', description: 'Symbol name' },\n path: { type: 'string', description: 'Project root' },\n limit: { type: 'number', default: 50 },\n offset: { type: 'number', default: 0 },\n },\n required: ['symbol', 'path'],\n },\n },\n {\n name: 'find_implementations',\n description:\n 'Find implementations of interfaces or abstract classes.',\n inputSchema: {\n type: 'object',\n properties: {\n symbol: { type: 'string', description: 'Interface/Class name' },\n path: { type: 'string', description: 'Project root' },\n limit: { type: 'number', default: 50 },\n offset: { type: 'number', default: 0 },\n },\n required: ['symbol', 'path'],\n },\n },\n {\n name: 'get_file_structure',\n description:\n 'Get structural overview of a file (imports, exports, symbols).',\n inputSchema: {\n type: 'object',\n properties: {\n file: { type: 'string', description: 'Absolute path to file' },\n },\n required: ['file'],\n },\n },\n {\n name: 'search_code',\n description: 'Fast regex search via bundled ripgrep.',\n inputSchema: {\n type: 'object',\n properties: {\n pattern: { type: 'string', description: 'Search pattern' },\n path: { type: 'string', description: 'Directory to search' },\n filePattern: { type: 'string', description: 'Glob filter' },\n limit: { type: 'number', default: 50 },\n regex: { type: 'boolean', default: true },\n },\n required: ['pattern', 'path'],\n },\n },\n {\n name: 'get_symbol_docs',\n description: 'Get JSDoc/TSDoc for a specific symbol.',\n inputSchema: {\n type: 'object',\n properties: {\n symbol: { type: 'string', description: 'Symbol name' },\n path: { type: 'string', description: 'Project root' },\n },\n required: ['symbol', 'path'],\n },\n },\n {\n name: 'build_symbol_index',\n description: 'Warm the symbol index for faster navigation.',\n inputSchema: {\n type: 'object',\n properties: {\n path: { type: 'string', description: 'Project root to index' },\n },\n required: ['path'],\n },\n },\n ],\n };\n });\n\n // Tool execution handler\n this.server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n\n try {\n switch (name) {\n case 'resolve_definition': {\n const { symbol, path } = ResolveDefinitionSchema.parse(args);\n const results = await resolveDefinition(symbol, path);\n return {\n content: [\n { type: 'text', text: JSON.stringify(results, null, 2) },\n ],\n };\n }\n case 'find_references': {\n const { symbol, path, limit, offset } =\n FindReferencesSchema.parse(args);\n const results = await findReferences(symbol, path, limit, offset);\n return {\n content: [\n { type: 'text', text: JSON.stringify(results, null, 2) },\n ],\n };\n }\n case 'find_implementations': {\n const { symbol, path, limit, offset } =\n FindImplementationsSchema.parse(args);\n const results = await findImplementations(\n symbol,\n path,\n limit,\n offset\n );\n return {\n content: [\n { type: 'text', text: JSON.stringify(results, null, 2) },\n ],\n };\n }\n case 'get_file_structure': {\n const { file } = GetFileStructureSchema.parse(args);\n const structure = await getFileStructure(file);\n return {\n content: [\n { type: 'text', text: JSON.stringify(structure, null, 2) },\n ],\n };\n }\n case 'search_code': {\n const { pattern, path, filePattern, limit, regex } =\n SearchCodeSchema.parse(args);\n const results = await searchCode(\n pattern,\n path,\n filePattern,\n limit,\n regex\n );\n return {\n content: [\n { type: 'text', text: JSON.stringify(results, null, 2) },\n ],\n };\n }\n case 'get_symbol_docs': {\n const { symbol, path } = GetSymbolDocsSchema.parse(args);\n const docs = await getSymbolDocs(symbol, path);\n return {\n content: [{ type: 'text', text: JSON.stringify(docs, null, 2) }],\n };\n }\n case 'build_symbol_index': {\n const { path } = BuildSymbolIndexSchema.parse(args);\n const stats = await buildSymbolIndex(path);\n return {\n content: [{ type: 'text', text: JSON.stringify(stats, null, 2) }],\n };\n }\n default:\n throw new Error(`Unknown tool: ${name}`);\n }\n } catch (error: any) {\n return {\n content: [{ type: 'text', text: `Error: ${error.message}` }],\n isError: true,\n };\n }\n });\n }\n\n async run() {\n const transport = new StdioServerTransport();\n await this.server.connect(transport);\n console.error('AST Explorer MCP Server started');\n }\n}\n\n// Start the server\nconst server = new ASTExplorerServer();\nserver.run().catch((error) => {\n console.error('Fatal error starting AST Explorer MCP Server:', error);\n process.exit(1);\n});\n","import { z } from 'zod';\n\n/**\n * Tool 1: resolve_definition\n */\nexport const ResolveDefinitionSchema = z.object({\n symbol: z\n .string()\n .describe(\n 'Symbol name to resolve (function, class, type, interface, etc.)'\n ),\n path: z.string().describe('Project root or target directory'),\n});\n\n/**\n * Tool 2: find_references\n */\nexport const FindReferencesSchema = z.object({\n symbol: z.string().describe('Symbol name to find references for'),\n path: z.string().describe('Project root directory'),\n limit: z\n .number()\n .optional()\n .default(50)\n .describe('Max results per page (default 50)'),\n offset: z.number().optional().default(0).describe('Pagination offset'),\n});\n\n/**\n * Tool 3: find_implementations\n */\nexport const FindImplementationsSchema = z.object({\n symbol: z\n .string()\n .describe('Interface or abstract class name to find implementations for'),\n path: z.string().describe('Project root directory'),\n limit: z.number().optional().default(50).describe('Max results per page'),\n offset: z.number().optional().default(0).describe('Pagination offset'),\n});\n\n/**\n * Tool 4: get_file_structure\n */\nexport const GetFileStructureSchema = z.object({\n file: z.string().describe('Absolute path to the file to analyze'),\n});\n\n/**\n * Tool 5: search_code\n */\nexport const SearchCodeSchema = z.object({\n pattern: z.string().describe('Search pattern (regex by default)'),\n path: z.string().describe('Directory to search in'),\n filePattern: z.string().optional().describe('Glob filter (e.g., \"*.ts\")'),\n limit: z.number().optional().default(50).describe('Max matches to return'),\n regex: z\n .boolean()\n .optional()\n .default(true)\n .describe('Use regex mode (default true)'),\n});\n\n/**\n * Tool 6: get_symbol_docs\n */\nexport const GetSymbolDocsSchema = z.object({\n symbol: z.string().describe('Symbol name to get documentation for'),\n path: z.string().describe('Project root directory'),\n});\n\n/**\n * Tool 7: build_symbol_index\n */\nexport const BuildSymbolIndexSchema = z.object({\n path: z.string().describe('Project root directory to index'),\n});\n","import { typescriptAdapter } from '../adapters/typescript-adapter.js';\nimport { projectManager } from '../project-manager.js';\nimport { SyntaxKind } from 'ts-morph';\nimport { DefinitionLocation } from '../types.js';\n\nexport async function resolveDefinition(\n symbol: string,\n path: string\n): Promise<DefinitionLocation[]> {\n return await typescriptAdapter.resolveDefinition(symbol, path);\n}\n","import { Node } from 'ts-morph';\nimport fs from 'fs';\nimport {\n DefinitionLocation,\n ReferenceLocation,\n FileStructure,\n SymbolKind,\n ClassInfo,\n FunctionInfo,\n InterfaceInfo,\n TypeAliasInfo,\n EnumInfo,\n} from '../types.js';\nimport { projectManager } from '../project-manager.js';\nimport { symbolIndex } from '../index/symbol-index.js';\nimport { validateWorkspacePath } from '../security.js';\n\nexport class TypeScriptAdapter {\n public async resolveDefinition(\n symbolName: string,\n path: string\n ): Promise<DefinitionLocation[]> {\n validateWorkspacePath(path);\n\n // Fast path: index lookup (O(1)) to find the file\n const indexHits = symbolIndex.lookup(symbolName);\n if (indexHits.length > 0) {\n const results: DefinitionLocation[] = [];\n for (const hit of indexHits) {\n const tsconfig = await projectManager.findNearestTsConfig(hit.file);\n if (tsconfig) {\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(hit.file);\n if (sourceFile) {\n const exported = sourceFile\n .getExportedDeclarations()\n .get(symbolName);\n if (exported && exported.length > 0) {\n results.push(this.mapToDefinitionLocation(exported[0] as Node));\n continue;\n }\n }\n }\n // Fallback if ts-morph loading fails for the hit\n results.push({\n file: hit.file,\n line: hit.line,\n column: hit.column,\n kind: hit.kind,\n snippet: '',\n documentation: undefined,\n });\n }\n return results;\n }\n\n // Fallback: search specific file via ts-morph (useful for local files without full index)\n if (fs.statSync(path).isDirectory()) {\n return []; // Cannot load a directory as a single file\n }\n\n const tsconfig = await projectManager.findNearestTsConfig(path);\n if (!tsconfig) return [];\n\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(path);\n if (!sourceFile) return [];\n\n const exported = sourceFile.getExportedDeclarations().get(symbolName);\n if (!exported) return [];\n\n return exported.map((decl) => this.mapToDefinitionLocation(decl as Node));\n }\n\n public async findReferences(\n symbolName: string,\n path: string,\n limit: number = 50,\n offset: number = 0\n ): Promise<{ references: ReferenceLocation[]; total_count: number }> {\n validateWorkspacePath(path);\n\n // Index lookup to find definition location\n const hits = symbolIndex.lookup(symbolName);\n if (hits.length === 0) return { references: [], total_count: 0 };\n\n // Load only the definition file\n const hit = hits[0];\n const tsconfig = await projectManager.findNearestTsConfig(hit.file);\n if (!tsconfig) return { references: [], total_count: 0 };\n\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(hit.file);\n if (!sourceFile) return { references: [], total_count: 0 };\n\n // We need the actual node. Instead of calculating position from line/col, let's just find the exported declaration.\n const exported = sourceFile.getExportedDeclarations().get(symbolName);\n if (!exported || exported.length === 0)\n return { references: [], total_count: 0 };\n\n const targetNode = exported[0];\n\n // Hybrid approach: to prevent OOM, we don't load all files in the project.\n // Instead, we use rg to find files that literally contain the symbol name,\n // and only load those into ts-morph for accurate reference resolution.\n try {\n const { searchCode } = await import('../tools/search-code.js');\n const searchResults = await searchCode(\n symbolName,\n path,\n '*.{ts,tsx,js,jsx}',\n 1000,\n false\n );\n const filesToLoad = [...new Set(searchResults.map((r) => r.file))];\n console.log('Search code files to load:', filesToLoad);\n for (const file of filesToLoad) {\n project.addSourceFileAtPathIfExists(file);\n }\n } catch (_e) {\n // Ignore\n }\n\n const refSymbols = (targetNode as any).findReferences?.();\n if (!refSymbols) return { references: [], total_count: 0 };\n\n const results: ReferenceLocation[] = [];\n for (const refSymbol of refSymbols) {\n for (const ref of refSymbol.getReferences()) {\n const sf = ref.getSourceFile();\n const lc = sf.getLineAndColumnAtPos(ref.getTextSpan().getStart());\n results.push({\n file: sf.getFilePath(),\n line: lc.line,\n column: lc.column,\n text: ref.getNode().getParent()?.getText() || ref.getNode().getText(),\n });\n }\n }\n\n const unique = this.deduplicateLocations(results);\n return {\n references: unique.slice(offset, offset + limit),\n total_count: unique.length,\n };\n }\n\n public async findImplementations(\n symbolName: string,\n path: string,\n limit: number = 50,\n offset: number = 0\n ): Promise<{ implementations: ReferenceLocation[]; total_count: number }> {\n validateWorkspacePath(path);\n const hits = symbolIndex.lookup(symbolName);\n if (hits.length === 0) return { implementations: [], total_count: 0 };\n\n const hit = hits[0];\n const tsconfig = await projectManager.findNearestTsConfig(hit.file);\n if (!tsconfig) return { implementations: [], total_count: 0 };\n\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(hit.file);\n if (!sourceFile) return { implementations: [], total_count: 0 };\n\n const exported = sourceFile.getExportedDeclarations().get(symbolName);\n if (!exported || exported.length === 0)\n return { implementations: [], total_count: 0 };\n\n const targetNode = exported[0];\n if (\n !Node.isClassDeclaration(targetNode) &&\n !Node.isInterfaceDeclaration(targetNode)\n ) {\n return { implementations: [], total_count: 0 };\n }\n\n try {\n const { searchCode } = await import('../tools/search-code.js');\n const searchResults = await searchCode(\n symbolName,\n path,\n '*.{ts,tsx,js,jsx}',\n 1000,\n false\n );\n const filesToLoad = [...new Set(searchResults.map((r) => r.file))];\n for (const file of filesToLoad) {\n project.addSourceFileAtPathIfExists(file);\n }\n } catch (_e) {\n // Ignore\n }\n\n const results: ReferenceLocation[] = [];\n const implementations = (targetNode as any).getImplementations?.();\n if (implementations) {\n for (const impl of implementations) {\n const sf = impl.getSourceFile();\n const lc = sf.getLineAndColumnAtPos(impl.getTextSpan().getStart());\n results.push({\n file: sf.getFilePath(),\n line: lc.line,\n column: lc.column,\n text:\n impl.getNode().getParent()?.getText() || impl.getNode().getText(),\n });\n }\n }\n\n const unique = this.deduplicateLocations(results);\n return {\n implementations: unique.slice(offset, offset + limit),\n total_count: unique.length,\n };\n }\n\n public async getFileStructure(\n filePath: string\n ): Promise<FileStructure | undefined> {\n const safePath = validateWorkspacePath(filePath);\n const tsconfig = await projectManager.findNearestTsConfig(safePath);\n if (!tsconfig) return undefined;\n\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(safePath);\n if (!sourceFile) return undefined;\n\n const structure: FileStructure = {\n file: safePath,\n imports: sourceFile.getImportDeclarations().map((imp: any) => ({\n module: imp.getModuleSpecifierValue(),\n names: imp.getNamedImports().map((ni: any) => ni.getName()),\n })),\n exports: sourceFile.getExportSymbols().map((sym: any) => ({\n name: sym.getName(),\n kind: this.mapSymbolKind(sym),\n })),\n classes: sourceFile\n .getClasses()\n .map((cls: any) => this.mapToClassInfo(cls)),\n functions: sourceFile\n .getFunctions()\n .map((fn: any) => this.mapToFunctionInfo(fn)),\n interfaces: sourceFile\n .getInterfaces()\n .map((itf: any) => this.mapToInterfaceInfo(itf)),\n typeAliases: sourceFile\n .getTypeAliases()\n .map((ta: any) => this.mapToTypeAliasInfo(ta)),\n enums: sourceFile.getEnums().map((enm: any) => this.mapToEnumInfo(enm)),\n };\n\n return structure;\n }\n\n private mapToDefinitionLocation(node: Node): DefinitionLocation {\n const sourceFile = node.getSourceFile();\n const lineAndColumn = sourceFile.getLineAndColumnAtPos(node.getStart());\n\n return {\n file: sourceFile.getFilePath(),\n line: lineAndColumn.line,\n column: lineAndColumn.column,\n kind: this.mapNodeToSymbolKind(node),\n snippet: node.getText(),\n documentation: this.getJsDoc(node),\n };\n }\n\n private mapNodeToSymbolKind(node: Node): SymbolKind {\n if (Node.isClassDeclaration(node)) return 'class';\n if (Node.isFunctionDeclaration(node)) return 'function';\n if (Node.isInterfaceDeclaration(node)) return 'interface';\n if (Node.isTypeAliasDeclaration(node)) return 'type_alias';\n if (Node.isEnumDeclaration(node)) return 'enum';\n if (Node.isVariableDeclaration(node)) return 'variable';\n if (Node.isMethodDeclaration(node)) return 'method';\n if (Node.isPropertyDeclaration(node)) return 'property';\n if (Node.isParameterDeclaration(node)) return 'parameter';\n return 'variable';\n }\n\n private mapSymbolKind(symbol: any): SymbolKind {\n const decls = symbol.getDeclarations();\n if (decls.length > 0) return this.mapNodeToSymbolKind(decls[0]);\n return 'variable';\n }\n\n private getJsDoc(node: Node): string | undefined {\n if (Node.isJSDocable(node)) {\n const docs = node.getJsDocs();\n if (docs.length > 0) {\n return docs[0].getCommentText();\n }\n }\n return undefined;\n }\n\n public getSymbolDocs(node: Node) {\n if (Node.isJSDocable(node)) {\n const docs = node.getJsDocs();\n if (docs.length > 0) {\n const doc = docs[0];\n return {\n documentation: doc.getCommentText(),\n tags: doc.getTags().map((tag) => ({\n name: tag.getTagName(),\n text: tag.getCommentText() || '',\n })),\n };\n }\n }\n return undefined;\n }\n\n private mapToClassInfo(cls: any): ClassInfo {\n return {\n name: cls.getName() || 'anonymous',\n ...this.getSymbolDocs(cls),\n methods: cls.getMethods().map((m: any) => this.mapToFunctionInfo(m)),\n properties: cls\n .getProperties()\n .map((p: any) => this.mapToPropertyInfo(p)),\n };\n }\n\n private mapToFunctionInfo(fn: any): FunctionInfo {\n return {\n name: fn.getName() || 'anonymous',\n ...this.getSymbolDocs(fn),\n params: fn.getParameters().map((p: any) => ({\n name: p.getName(),\n type: p.getType().getText(),\n })),\n returnType: fn.getReturnType().getText(),\n };\n }\n\n private mapToPropertyInfo(p: any) {\n return {\n name: p.getName(),\n type: p.getType().getText(),\n ...this.getSymbolDocs(p),\n };\n }\n\n private mapToInterfaceInfo(itf: any): InterfaceInfo {\n return {\n name: itf.getName(),\n ...this.getSymbolDocs(itf),\n properties: itf\n .getProperties()\n .map((p: any) => this.mapToPropertyInfo(p)),\n methods: itf.getMethods().map((m: any) => this.mapToFunctionInfo(m)),\n };\n }\n\n private mapToTypeAliasInfo(ta: any): TypeAliasInfo {\n return {\n name: ta.getName(),\n type: ta.getType().getText(),\n ...this.getSymbolDocs(ta),\n };\n }\n\n private mapToEnumInfo(enm: any): EnumInfo {\n return {\n name: enm.getName(),\n ...this.getSymbolDocs(enm),\n members: enm.getMembers().map((m: any) => m.getName()),\n };\n }\n\n private deduplicateLocations<\n T extends { file: string; line: number; column: number },\n >(locations: T[]): T[] {\n const seen = new Set<string>();\n return locations.filter((loc) => {\n const key = `${loc.file}:${loc.line}:${loc.column}`;\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n }\n}\n\nexport const typescriptAdapter = new TypeScriptAdapter();\n","import { Project } from 'ts-morph';\nimport path from 'path';\nimport fs from 'fs';\nimport { glob } from 'glob';\nimport { validateWorkspacePath } from './security.js';\n\n/**\n * ProjectManager handles tsconfig discovery and Project lifecycle.\n * One Project per tsconfig.json to handle monorepo project boundaries correctly.\n */\nexport class ProjectManager {\n private projects: Map<string, Project> = new Map();\n private tsconfigCache: Map<string, string[]> = new Map();\n private accessOrder: string[] = []; // MRU at front\n private maxProjects: number = 4;\n\n /**\n * Find all tsconfig.json files in a directory (recursive)\n */\n public async findTsConfigs(rootDir: string): Promise<string[]> {\n const safeRoot = validateWorkspacePath(rootDir);\n if (this.tsconfigCache.has(safeRoot)) {\n return this.tsconfigCache.get(safeRoot)!;\n }\n\n const configs = await glob('**/tsconfig.json', {\n cwd: safeRoot,\n absolute: true,\n ignore: ['**/node_modules/**', '**/dist/**'],\n });\n\n this.tsconfigCache.set(safeRoot, configs);\n return configs;\n }\n\n /**\n * Ensure a Project exists for a given tsconfig path, managing LRU cache\n */\n public ensureProject(tsconfigPath: string): Project {\n this.checkMemoryPressure();\n\n // Cache hit\n if (this.projects.has(tsconfigPath)) {\n this.moveToFront(tsconfigPath);\n return this.projects.get(tsconfigPath)!;\n }\n\n // Evict if full\n while (this.projects.size >= this.maxProjects) {\n const oldest = this.accessOrder.pop()!;\n this.disposeProject(oldest);\n }\n\n // Create with lazy file loading\n const project = new Project({\n tsConfigFilePath: tsconfigPath,\n skipAddingFilesFromTsConfig: true, // KEY: don't load all files\n });\n\n this.projects.set(tsconfigPath, project);\n this.accessOrder.unshift(tsconfigPath);\n return project;\n }\n\n /**\n * Move a tsconfig path to the front of the access order (MRU)\n */\n private moveToFront(tsconfigPath: string) {\n const index = this.accessOrder.indexOf(tsconfigPath);\n if (index > -1) {\n this.accessOrder.splice(index, 1);\n this.accessOrder.unshift(tsconfigPath);\n }\n }\n\n private checkMemoryPressure(): void {\n const heapUsed = process.memoryUsage().heapUsed / 1024 / 1024;\n const maxHeap = parseInt(process.env.AST_MAX_HEAP_MB || '1536', 10);\n\n while (heapUsed > maxHeap && this.projects.size > 1) {\n const oldest = this.accessOrder.pop()!;\n this.disposeProject(oldest);\n }\n }\n\n public disposeProject(tsconfigPath: string): void {\n const project = this.projects.get(tsconfigPath);\n if (project) {\n // Forget files explicitly\n for (const sourceFile of project.getSourceFiles()) {\n project.removeSourceFile(sourceFile);\n }\n this.projects.delete(tsconfigPath);\n }\n }\n\n /**\n * Find the nearest tsconfig.json for a file\n */\n public async findNearestTsConfig(\n filePath: string\n ): Promise<string | undefined> {\n const safePath = validateWorkspacePath(filePath);\n let currentDir = path.dirname(safePath);\n const root = path.parse(currentDir).root;\n\n while (currentDir !== root) {\n const tsconfigPath = path.join(currentDir, 'tsconfig.json');\n if (fs.existsSync(tsconfigPath)) {\n return tsconfigPath;\n }\n currentDir = path.dirname(currentDir);\n }\n\n return undefined;\n }\n\n /**\n * Get all tsconfigs for a path\n */\n public async getProjectsForPath(rootDir: string): Promise<string[]> {\n return this.findTsConfigs(rootDir);\n }\n\n /**\n * Dispose all projects to free memory\n */\n public disposeAll(): void {\n for (const [key] of this.projects) {\n this.disposeProject(key);\n }\n this.accessOrder = [];\n }\n}\n\nexport const projectManager = new ProjectManager();\n","import { projectManager } from '../project-manager.js';\nimport { IndexingStats, SymbolKind } from '../types.js';\nimport { validateWorkspacePath } from '../security.js';\nimport fs from 'fs';\nimport crypto from 'crypto';\nimport path from 'path';\nimport { Node, ExportedDeclarations } from 'ts-morph';\n\nexport interface SymbolEntry {\n name: string;\n kind: SymbolKind;\n file: string;\n line: number;\n column: number;\n exported: boolean;\n}\n\nexport interface DiskCache {\n version: 1;\n rootDir: string;\n builtAt: string;\n fileHashes: Record<string, number>; // file -> mtimeMs\n symbols: Record<string, SymbolEntry[]>;\n}\n\nexport class SymbolIndex {\n private index: Record<string, SymbolEntry[]> = {};\n\n private getCachePath(rootDir: string): string {\n const hash = crypto\n .createHash('sha256')\n .update(rootDir)\n .digest('hex')\n .slice(0, 12);\n return path.join(\n process.platform === 'win32' ? process.env.TEMP || 'c:/temp' : '/tmp',\n `ast-index-${hash}.json`\n );\n }\n\n private isCacheValid(cached: DiskCache, rootDir: string): boolean {\n if (cached.rootDir !== rootDir) return false;\n\n for (const [file, cachedMtime] of Object.entries(cached.fileHashes)) {\n if (!fs.existsSync(file)) return false;\n if (fs.statSync(file).mtimeMs !== cachedMtime) return false;\n }\n\n return true;\n }\n\n private computeStats(\n cache: DiskCache,\n duration_ms?: number,\n memory_mb?: number\n ): IndexingStats {\n const files = Object.keys(cache.fileHashes).length;\n let functions = 0;\n let classes = 0;\n let interfaces = 0;\n let types = 0;\n\n for (const entries of Object.values(cache.symbols)) {\n for (const entry of entries) {\n if (entry.kind === 'function' || entry.kind === 'method') functions++;\n if (entry.kind === 'class') classes++;\n if (entry.kind === 'interface') interfaces++;\n if (entry.kind === 'type_alias') types++;\n }\n }\n\n return {\n indexed: {\n files,\n functions,\n classes,\n interfaces,\n types,\n },\n duration_ms: duration_ms || 0,\n memory_mb: memory_mb || 0,\n };\n }\n\n private mapKind(node: Node): SymbolKind {\n if (Node.isClassDeclaration(node)) return 'class';\n if (Node.isFunctionDeclaration(node)) return 'function';\n if (Node.isInterfaceDeclaration(node)) return 'interface';\n if (Node.isTypeAliasDeclaration(node)) return 'type_alias';\n if (Node.isEnumDeclaration(node)) return 'enum';\n if (Node.isVariableDeclaration(node)) return 'variable';\n if (Node.isMethodDeclaration(node)) return 'method';\n if (Node.isPropertyDeclaration(node)) return 'property';\n if (Node.isParameterDeclaration(node)) return 'parameter';\n return 'variable';\n }\n\n /**\n * Build/Warm the index for a given path\n */\n public async buildIndex(rootDir: string): Promise<IndexingStats> {\n const startTime = Date.now();\n const safeRoot = validateWorkspacePath(rootDir);\n const cachePath = this.getCachePath(safeRoot);\n\n if (fs.existsSync(cachePath)) {\n try {\n const cached: DiskCache = JSON.parse(\n fs.readFileSync(cachePath, 'utf-8')\n );\n if (this.isCacheValid(cached, safeRoot)) {\n this.index = cached.symbols;\n return this.computeStats(\n cached,\n Date.now() - startTime,\n process.memoryUsage().heapUsed / 1024 / 1024\n );\n }\n } catch (e) {\n // Corrupt cache, ignore\n }\n }\n\n const tsconfigs = await projectManager.getProjectsForPath(safeRoot);\n const symbols: Record<string, SymbolEntry[]> = {};\n const fileHashes: Record<string, number> = {};\n\n for (const config of tsconfigs) {\n const project = projectManager.ensureProject(config);\n // We need to force load files for indexing\n project.addSourceFilesFromTsConfig(config);\n\n for (const sourceFile of project.getSourceFiles()) {\n const filePath = sourceFile.getFilePath();\n try {\n fileHashes[filePath] = fs.statSync(filePath).mtimeMs;\n } catch {\n continue;\n }\n\n // Extract exported declarations\n for (const [name, decls] of sourceFile.getExportedDeclarations()) {\n for (const decl of decls) {\n const entry: SymbolEntry = {\n name,\n kind: this.mapKind(decl as Node),\n file: filePath,\n line: decl.getStartLineNumber(),\n column: decl.getStart() - decl.getStartLinePos(),\n exported: true,\n };\n (symbols[name] ||= []).push(entry);\n }\n }\n\n // Extract non-exported top-level declarations\n for (const fn of sourceFile.getFunctions()) {\n const name = fn.getName();\n if (\n name &&\n !symbols[name]?.some(\n (s) => s.file === filePath && s.line === fn.getStartLineNumber()\n )\n ) {\n const entry: SymbolEntry = {\n name,\n kind: 'function',\n file: filePath,\n line: fn.getStartLineNumber(),\n column: fn.getStart() - fn.getStartLinePos(),\n exported: false,\n };\n (symbols[name] ||= []).push(entry);\n }\n }\n for (const cls of sourceFile.getClasses()) {\n const name = cls.getName();\n if (\n name &&\n !symbols[name]?.some(\n (s) => s.file === filePath && s.line === cls.getStartLineNumber()\n )\n ) {\n const entry: SymbolEntry = {\n name,\n kind: 'class',\n file: filePath,\n line: cls.getStartLineNumber(),\n column: cls.getStart() - cls.getStartLinePos(),\n exported: false,\n };\n (symbols[name] ||= []).push(entry);\n }\n }\n }\n }\n\n const cache: DiskCache = {\n version: 1,\n rootDir: safeRoot,\n builtAt: new Date().toISOString(),\n fileHashes,\n symbols,\n };\n\n fs.mkdirSync(path.dirname(cachePath), { recursive: true });\n fs.writeFileSync(cachePath, JSON.stringify(cache));\n\n this.index = symbols;\n\n const duration = Date.now() - startTime;\n const memoryUsage = process.memoryUsage().heapUsed / 1024 / 1024;\n\n return this.computeStats(cache, duration, Math.round(memoryUsage));\n }\n\n public lookup(name: string): SymbolEntry[] {\n return this.index[name] || [];\n }\n\n public lookupByFile(file: string): SymbolEntry[] {\n return Object.values(this.index)\n .flat()\n .filter((e) => e.file === file);\n }\n}\n\nexport const symbolIndex = new SymbolIndex();\n","import { typescriptAdapter } from '../adapters/typescript-adapter.js';\n\nexport async function findReferences(\n symbol: string,\n path: string,\n limit: number = 50,\n offset: number = 0\n) {\n return await typescriptAdapter.findReferences(symbol, path, limit, offset);\n}\n","import { typescriptAdapter } from '../adapters/typescript-adapter.js';\n\nexport async function findImplementations(\n symbol: string,\n path: string,\n limit: number = 50,\n offset: number = 0\n) {\n return await typescriptAdapter.findImplementations(\n symbol,\n path,\n limit,\n offset\n );\n}\n","import { typescriptAdapter } from '../adapters/typescript-adapter.js';\n\nexport async function getFileStructure(file: string) {\n return await typescriptAdapter.getFileStructure(file);\n}\n","import { typescriptAdapter } from '../adapters/typescript-adapter.js';\nimport { projectManager } from '../project-manager.js';\nimport { SyntaxKind, Node } from 'ts-morph';\nimport { validateWorkspacePath } from '../security.js';\n\nexport async function getSymbolDocs(\n symbol: string,\n filePath: string\n): Promise<any> {\n const safePath = validateWorkspacePath(filePath);\n const tsconfig = await projectManager.findNearestTsConfig(safePath);\n if (!tsconfig) return undefined;\n\n const project = projectManager.ensureProject(tsconfig);\n const sourceFile = project.addSourceFileAtPathIfExists(safePath);\n\n if (sourceFile) {\n const node = sourceFile\n .getDescendantsOfKind(SyntaxKind.Identifier)\n .find((id: Node) => id.getText() === symbol);\n\n if (node) {\n const decls = node.getSymbol()?.getDeclarations();\n if (decls && decls.length > 0) {\n const docs = typescriptAdapter.getSymbolDocs(decls[0]);\n if (docs) {\n return {\n symbol,\n file: sourceFile.getFilePath(),\n line: sourceFile.getLineAndColumnAtPos(decls[0].getStart()).line,\n ...docs,\n };\n }\n }\n }\n }\n\n return undefined;\n}\n","import { symbolIndex } from '../index/symbol-index.js';\n\nexport async function buildSymbolIndex(path: string) {\n return await symbolIndex.buildIndex(path);\n}\n"],"mappings":"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","names":["path","import_ts_morph","import_fs","import_path","path","fs","import_fs","import_path","import_ts_morph","crypto","path","fs","path","tsconfig","project","sourceFile","exported","fs","searchCode","path","path","path","import_ts_morph","path","path"]}
|
package/dist/index.d.cts
ADDED
package/dist/index.d.ts
ADDED