@vohongtho.infotech/code-intel 0.1.4 → 0.1.5

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/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/search/embedder.ts","../src/multi-repo/group-registry.ts","../src/graph/knowledge-graph.ts","../src/graph/id-generator.ts","../src/parsing/parser-manager.ts","../src/parsing/query-runner.ts","../src/parsing/ast-cache.ts","../src/shared/detection.ts","../src/parsing/queries/typescript.ts","../src/languages/modules/typescript.ts","../src/parsing/queries/python.ts","../src/languages/modules/python.ts","../src/parsing/queries/java.ts","../src/languages/modules/java.ts","../src/parsing/queries/go.ts","../src/languages/modules/go.ts","../src/parsing/queries/c.ts","../src/languages/modules/c.ts","../src/parsing/queries/cpp.ts","../src/languages/modules/cpp.ts","../src/parsing/queries/csharp.ts","../src/languages/modules/csharp.ts","../src/parsing/queries/rust.ts","../src/languages/modules/rust.ts","../src/parsing/queries/php.ts","../src/languages/modules/php.ts","../src/parsing/queries/kotlin.ts","../src/languages/modules/kotlin.ts","../src/parsing/queries/ruby.ts","../src/languages/modules/ruby.ts","../src/parsing/queries/swift.ts","../src/languages/modules/swift.ts","../src/languages/modules/dart.ts","../src/languages/registry.ts","../src/resolver/binding-tracker.ts","../src/resolver/import-resolver.ts","../src/call-graph/call-builder.ts","../src/call-graph/call-classifier.ts","../src/inheritance/heritage-builder.ts","../src/inheritance/mro-walker.ts","../src/inheritance/override-detector.ts","../src/pipeline/dag-validator.ts","../src/pipeline/orchestrator.ts","../src/pipeline/phases/scan-phase.ts","../src/pipeline/phases/parse-phase.ts","../src/pipeline/phases/resolve-phase.ts","../src/pipeline/phases/cluster-phase.ts","../src/pipeline/phases/flow-phase.ts","../src/scope-analysis/scope-builder.ts","../src/clustering/community-detector.ts","../src/flow-detection/entry-point-finder.ts","../src/search/text-search.ts","../src/search/index.ts","../src/search/vector-index.ts","../src/mcp-server/server.ts","../src/storage/db-manager.ts","../src/storage/schema.ts","../src/storage/graph-loader.ts","../src/storage/repo-registry.ts","../src/storage/metadata.ts","../src/http/app.ts","../src/multi-repo/graph-from-db.ts","../src/multi-repo/group-sync.ts","../src/multi-repo/group-query.ts","../src/multi-repo/index.ts","../src/multi-repo/cross-repo-search.ts"],"names":["path","fs","os","TSLanguage","result","relativePath","__dirname","embedNodes","saveGroup"],"mappings":"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","file":"index.js","sourcesContent":["import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EmbeddedNode {\n id: string;\n name: string;\n kind: string;\n filePath: string;\n text: string;\n embedding: number[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet pipelineInstance: ((text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>) | null = null;\n\nasync function getEmbedder() {\n if (!pipelineInstance) {\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipelineInstance = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as typeof pipelineInstance;\n }\n return pipelineInstance!;\n}\n\nexport async function embedNodes(\n graph: KnowledgeGraph,\n opts: { batchSize?: number; onProgress?: (done: number, total: number) => void } = {},\n): Promise<EmbeddedNode[]> {\n const { batchSize = 32, onProgress } = opts;\n\n // Collect candidates — skip cluster/directory/flow to save time\n const candidates: { id: string; name: string; kind: string; filePath: string; text: string }[] = [];\n for (const node of graph.allNodes()) {\n if (['cluster', 'directory', 'flow'].includes(node.kind)) continue;\n const text = buildText(node);\n candidates.push({ id: node.id, name: node.name, kind: node.kind, filePath: node.filePath, text });\n }\n\n const embedder = await getEmbedder();\n const results: EmbeddedNode[] = [];\n\n for (let i = 0; i < candidates.length; i += batchSize) {\n const batch = candidates.slice(i, i + batchSize);\n const texts = batch.map((c) => c.text);\n\n for (let j = 0; j < texts.length; j++) {\n const out = await embedder(texts[j], { pooling: 'mean', normalize: true });\n results.push({ ...batch[j], embedding: Array.from(out.data) });\n }\n\n onProgress?.(Math.min(i + batchSize, candidates.length), candidates.length);\n }\n\n return results;\n}\n\nfunction buildText(node: { name: string; kind: string; filePath: string; content?: string | null; metadata?: Record<string, unknown> | null }): string {\n const parts: string[] = [`${node.kind} ${node.name}`];\n const sig = node.metadata?.signature as string | undefined;\n if (sig) parts.push(sig);\n if (node.content) parts.push(node.content.slice(0, 256));\n parts.push(node.filePath);\n return parts.join(' ').slice(0, 512);\n}\n","/**\n * Persistent store for repo groups.\n * Each group is saved as ~/.code-intel/groups/<name>.json\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { RepoGroup, GroupMember } from './types.js';\n\nconst GROUPS_DIR = path.join(os.homedir(), '.code-intel', 'groups');\n\nfunction groupFile(name: string): string {\n return path.join(GROUPS_DIR, `${name}.json`);\n}\n\nexport function loadGroup(name: string): RepoGroup | null {\n try {\n return JSON.parse(fs.readFileSync(groupFile(name), 'utf-8')) as RepoGroup;\n } catch {\n return null;\n }\n}\n\nexport function saveGroup(group: RepoGroup): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(groupFile(group.name), JSON.stringify(group, null, 2) + '\\n');\n}\n\nexport function listGroups(): RepoGroup[] {\n const groups: RepoGroup[] = [];\n try {\n for (const file of fs.readdirSync(GROUPS_DIR)) {\n if (!file.endsWith('.json') || file.endsWith('.sync.json')) continue;\n try {\n const g = JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, file), 'utf-8'),\n ) as RepoGroup;\n groups.push(g);\n } catch { /* skip malformed */ }\n }\n } catch { /* dir doesn't exist yet */ }\n return groups;\n}\n\nexport function deleteGroup(name: string): void {\n try { fs.unlinkSync(groupFile(name)); } catch { /* ignore */ }\n // also remove sync artifact\n try { fs.unlinkSync(path.join(GROUPS_DIR, `${name}.sync.json`)); } catch { /* ignore */ }\n}\n\nexport function groupExists(name: string): boolean {\n return fs.existsSync(groupFile(name));\n}\n\n/** Add or update a member (by groupPath). Returns the updated group. */\nexport function addMember(groupName: string, member: GroupMember): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n // replace if same groupPath already exists\n const idx = group.members.findIndex((m) => m.groupPath === member.groupPath);\n if (idx >= 0) {\n group.members[idx] = member;\n } else {\n group.members.push(member);\n }\n saveGroup(group);\n return group;\n}\n\n/** Remove a member by groupPath. Returns the updated group. */\nexport function removeMember(groupName: string, groupPath: string): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n const before = group.members.length;\n group.members = group.members.filter((m) => m.groupPath !== groupPath);\n if (group.members.length === before) {\n throw new Error(`No member at path \"${groupPath}\" in group \"${groupName}\".`);\n }\n saveGroup(group);\n return group;\n}\n\n// ─── Sync result persistence ──────────────────────────────────────────────────\n\nimport type { GroupSyncResult } from './types.js';\n\nexport function saveSyncResult(result: GroupSyncResult): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(\n path.join(GROUPS_DIR, `${result.groupName}.sync.json`),\n JSON.stringify(result, null, 2) + '\\n',\n );\n}\n\nexport function loadSyncResult(groupName: string): GroupSyncResult | null {\n try {\n return JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, `${groupName}.sync.json`), 'utf-8'),\n ) as GroupSyncResult;\n } catch {\n return null;\n }\n}\n","import type { CodeNode, CodeEdge, EdgeKind } from '../shared/index.js';\n\nexport interface KnowledgeGraph {\n addNode(node: CodeNode): void;\n addEdge(edge: CodeEdge): void;\n getNode(id: string): CodeNode | undefined;\n getEdge(id: string): CodeEdge | undefined;\n findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge>;\n findEdgesFrom(sourceId: string): Iterable<CodeEdge>;\n findEdgesTo(targetId: string): Iterable<CodeEdge>;\n removeNodeCascade(id: string): void;\n removeEdge(id: string): void;\n allNodes(): Iterable<CodeNode>;\n allEdges(): Iterable<CodeEdge>;\n readonly size: { nodes: number; edges: number };\n clear(): void;\n}\n\nexport function createKnowledgeGraph(): KnowledgeGraph {\n const nodes = new Map<string, CodeNode>();\n const edges = new Map<string, CodeEdge>();\n const edgesByKind = new Map<EdgeKind, Set<string>>();\n const edgesFromNode = new Map<string, Set<string>>();\n const edgesToNode = new Map<string, Set<string>>();\n\n function indexEdge(edge: CodeEdge): void {\n let kindSet = edgesByKind.get(edge.kind);\n if (!kindSet) {\n kindSet = new Set();\n edgesByKind.set(edge.kind, kindSet);\n }\n kindSet.add(edge.id);\n\n let fromSet = edgesFromNode.get(edge.source);\n if (!fromSet) {\n fromSet = new Set();\n edgesFromNode.set(edge.source, fromSet);\n }\n fromSet.add(edge.id);\n\n let toSet = edgesToNode.get(edge.target);\n if (!toSet) {\n toSet = new Set();\n edgesToNode.set(edge.target, toSet);\n }\n toSet.add(edge.id);\n }\n\n function unindexEdge(edge: CodeEdge): void {\n edgesByKind.get(edge.kind)?.delete(edge.id);\n edgesFromNode.get(edge.source)?.delete(edge.id);\n edgesToNode.get(edge.target)?.delete(edge.id);\n }\n\n return {\n addNode(node: CodeNode): void {\n nodes.set(node.id, node);\n },\n\n addEdge(edge: CodeEdge): void {\n edges.set(edge.id, edge);\n indexEdge(edge);\n },\n\n getNode(id: string): CodeNode | undefined {\n return nodes.get(id);\n },\n\n getEdge(id: string): CodeEdge | undefined {\n return edges.get(id);\n },\n\n *findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge> {\n const ids = edgesByKind.get(kind);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesFrom(sourceId: string): Iterable<CodeEdge> {\n const ids = edgesFromNode.get(sourceId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesTo(targetId: string): Iterable<CodeEdge> {\n const ids = edgesToNode.get(targetId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n removeNodeCascade(id: string): void {\n const fromEdges = edgesFromNode.get(id);\n if (fromEdges) {\n for (const edgeId of [...fromEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n const toEdges = edgesToNode.get(id);\n if (toEdges) {\n for (const edgeId of [...toEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n edgesFromNode.delete(id);\n edgesToNode.delete(id);\n nodes.delete(id);\n },\n\n removeEdge(id: string): void {\n const edge = edges.get(id);\n if (edge) {\n unindexEdge(edge);\n edges.delete(id);\n }\n },\n\n *allNodes(): Iterable<CodeNode> {\n yield* nodes.values();\n },\n\n *allEdges(): Iterable<CodeEdge> {\n yield* edges.values();\n },\n\n get size() {\n return { nodes: nodes.size, edges: edges.size };\n },\n\n clear(): void {\n nodes.clear();\n edges.clear();\n edgesByKind.clear();\n edgesFromNode.clear();\n edgesToNode.clear();\n },\n };\n}\n","import { NodeKind } from '../shared/index.js';\n\nexport function generateNodeId(kind: NodeKind, filePath: string, qualifiedName: string): string {\n return `${kind}:${filePath}:${qualifiedName}`;\n}\n\nexport function generateEdgeId(source: string, target: string, kind: string): string {\n return `${kind}:${source}->${target}`;\n}\n","import { Language } from '../shared/index.js';\nimport { Parser, Language as TSLanguage, Tree } from 'web-tree-sitter';\n\nlet initialized = false;\nconst parserCache = new Map<Language, Parser>();\nconst languageCache = new Map<Language, TSLanguage>();\n\nconst GRAMMAR_WASM_MAP: Partial<Record<Language, string>> = {\n // WASM grammar files to be downloaded/provided per language\n // For now, the parser manager provides a placeholder\n};\n\nexport async function initParser(): Promise<void> {\n if (initialized) return;\n await Parser.init();\n initialized = true;\n}\n\nexport async function getParser(lang: Language): Promise<Parser> {\n await initParser();\n let parser = parserCache.get(lang);\n if (parser) return parser;\n\n parser = new Parser();\n parserCache.set(lang, parser);\n return parser;\n}\n\nexport async function getLanguage(lang: Language): Promise<TSLanguage | null> {\n const cached = languageCache.get(lang);\n if (cached) return cached;\n\n const wasmPath = GRAMMAR_WASM_MAP[lang];\n if (!wasmPath) return null;\n\n try {\n const language = await TSLanguage.load(wasmPath);\n languageCache.set(lang, language);\n return language;\n } catch {\n return null;\n }\n}\n\nexport async function parseSource(\n lang: Language,\n source: string,\n): Promise<Tree | null> {\n const parser = await getParser(lang);\n const language = await getLanguage(lang);\n if (!language) return null;\n parser.setLanguage(language);\n return parser.parse(source);\n}\n","import { Node, Tree, Language, Query } from 'web-tree-sitter';\n\nexport interface QueryCapture {\n name: string;\n node: Node;\n text: string;\n}\n\nexport function runQuery(\n tree: Tree,\n language: Language,\n querySource: string,\n): QueryCapture[] {\n const query = new Query(language, querySource);\n const matches = query.matches(tree.rootNode);\n const captures: QueryCapture[] = [];\n\n for (const match of matches) {\n for (const capture of match.captures) {\n captures.push({\n name: capture.name,\n node: capture.node,\n text: capture.node.text,\n });\n }\n }\n\n return captures;\n}\n","import { Tree } from 'web-tree-sitter';\n\nconst DEFAULT_MAX = 500;\n\nexport class AstCache {\n private cache = new Map<string, { tree: Tree; accessedAt: number }>();\n private maxEntries: number;\n\n constructor(maxEntries = DEFAULT_MAX) {\n this.maxEntries = maxEntries;\n }\n\n get(filePath: string): Tree | undefined {\n const entry = this.cache.get(filePath);\n if (entry) {\n entry.accessedAt = Date.now();\n return entry.tree;\n }\n return undefined;\n }\n\n set(filePath: string, tree: Tree): void {\n if (this.cache.size >= this.maxEntries) {\n this.evictLRU();\n }\n this.cache.set(filePath, { tree, accessedAt: Date.now() });\n }\n\n has(filePath: string): boolean {\n return this.cache.has(filePath);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n\n private evictLRU(): void {\n let oldest: string | null = null;\n let oldestTime = Infinity;\n for (const [key, entry] of this.cache) {\n if (entry.accessedAt < oldestTime) {\n oldest = key;\n oldestTime = entry.accessedAt;\n }\n }\n if (oldest) {\n this.cache.delete(oldest);\n }\n }\n}\n","import { Language } from './languages.js';\n\nconst EXTENSION_MAP: Record<string, Language> = {\n '.ts': Language.TypeScript,\n '.tsx': Language.TypeScript,\n '.mts': Language.TypeScript,\n '.cts': Language.TypeScript,\n '.js': Language.JavaScript,\n '.jsx': Language.JavaScript,\n '.mjs': Language.JavaScript,\n '.cjs': Language.JavaScript,\n '.py': Language.Python,\n '.pyi': Language.Python,\n '.java': Language.Java,\n '.go': Language.Go,\n '.c': Language.C,\n '.h': Language.C,\n '.cpp': Language.Cpp,\n '.cxx': Language.Cpp,\n '.cc': Language.Cpp,\n '.hpp': Language.Cpp,\n '.hxx': Language.Cpp,\n '.cs': Language.CSharp,\n '.rs': Language.Rust,\n '.php': Language.PHP,\n '.kt': Language.Kotlin,\n '.kts': Language.Kotlin,\n '.rb': Language.Ruby,\n '.swift': Language.Swift,\n '.dart': Language.Dart,\n};\n\nexport function detectLanguage(filePath: string): Language | null {\n const ext = filePath.slice(filePath.lastIndexOf('.'));\n return EXTENSION_MAP[ext] ?? null;\n}\n\nexport function getSupportedExtensions(): string[] {\n return Object.keys(EXTENSION_MAP);\n}\n","export const typescriptQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Abstract class\n(abstract_class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Type alias\n(type_alias_declaration\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Enum\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Arrow function in variable\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.func.name\n value: (arrow_function))) @def.func\n\n;; Const/let/var variable (non-function)\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.var.name\n value: (_) @def.var.value)) @def.var\n\n;; Method definition\n(method_definition\n name: (property_identifier) @def.method.name) @def.method\n\n;; Public field definition\n(public_field_definition\n name: (property_identifier) @def.property.name) @def.property\n\n;; Import statement\n(import_statement\n source: (string) @imp.source) @imp\n\n;; Import specifier\n(import_specifier\n name: (identifier) @imp.name)\n\n;; Namespace import\n(namespace_import (identifier) @imp.namespace)\n\n;; Export statement\n(export_statement) @export\n\n;; Call expression — function call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Call expression — member call\n(call_expression\n function: (member_expression\n object: (_) @call.receiver\n property: (property_identifier) @call.method)) @call.member\n\n;; New expression\n(new_expression\n constructor: (identifier) @call.constructor) @call.new\n\n;; Class heritage — extends\n(class_heritage\n (extends_clause\n value: (identifier) @inherit.extends))\n\n;; Class heritage — implements\n(class_heritage\n (implements_clause\n (type_reference (type_identifier) @inherit.implements)))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nfunction resolveRelative(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const fromDir = path.dirname(fromFile);\n const cleaned = rawPath.replace(/['\"]/g, '');\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.js'];\n const resolved = workspace.resolve(fromDir, cleaned);\n if (resolved) return resolved;\n for (const ext of extensions) {\n const r = workspace.resolve(fromDir, cleaned + ext);\n if (r) return r;\n }\n return null;\n}\n\nexport const typescriptModule: LanguageModule = {\n lang: Language.TypeScript,\n fileExtensions: ['.ts', '.tsx', '.mts', '.cts'],\n queries: typescriptQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('.')) {\n return resolveRelative(rawPath, fromFile, workspace);\n }\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n return parent.type === 'export_statement' || node.type === 'export_statement';\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n\nexport const javascriptModule: LanguageModule = {\n ...typescriptModule,\n lang: Language.JavaScript,\n fileExtensions: ['.js', '.jsx', '.mjs', '.cjs'],\n};\n","export const pythonQueries = `\n;; Class definition\n(class_definition\n name: (identifier) @def.class.name) @def.class\n\n;; Function definition\n(function_definition\n name: (identifier) @def.func.name) @def.func\n\n;; Decorated definition\n(decorated_definition\n (function_definition\n name: (identifier) @def.func.name)) @def.func.decorated\n\n;; Import from\n(import_from_statement\n module_name: (dotted_name) @imp.source) @imp\n\n;; Import\n(import_statement\n name: (dotted_name) @imp.module) @imp.direct\n\n;; Import alias\n(aliased_import\n name: (dotted_name) @imp.alias.original\n alias: (identifier) @imp.alias.name)\n\n;; Call expression\n(call\n function: (identifier) @call.name) @call\n\n;; Attribute call\n(call\n function: (attribute\n object: (_) @call.receiver\n attribute: (identifier) @call.method)) @call.member\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Class base classes\n(class_definition\n superclasses: (argument_list\n (identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { pythonQueries } from '../../parsing/queries/python.js';\nimport path from 'node:path';\n\nexport const pythonModule: LanguageModule = {\n lang: Language.Python,\n fileExtensions: ['.py', '.pyi'],\n queries: pythonQueries,\n importStyle: 'namespace',\n inheritanceStrategy: 'c3',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('.');\n const fromDir = path.dirname(fromFile);\n\n // Try as relative path\n const relPath = parts.join('/');\n for (const suffix of ['/__init__.py', '.py']) {\n const r = workspace.resolve(fromDir, relPath + suffix);\n if (r) return r;\n }\n\n // Try as package from root\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n // Python: names starting with _ are private by convention\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const javaQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Field declaration\n(field_declaration\n declarator: (variable_declarator\n name: (identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (scoped_identifier) @imp.source) @imp\n\n;; Call\n(method_invocation\n name: (identifier) @call.name) @call\n\n;; Object creation\n(object_creation_expression\n type: (type_identifier) @call.constructor) @call.new\n\n;; Extends\n(superclass (type_identifier) @inherit.extends)\n\n;; Implements\n(super_interfaces\n (type_list (type_identifier) @inherit.implements))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { javaQueries } from '../../parsing/queries/java.js';\n\nexport const javaModule: LanguageModule = {\n lang: Language.Java,\n fileExtensions: ['.java'],\n queries: javaQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.java';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n const text = node.text;\n return text.includes('public');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const goQueries = `\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (field_identifier) @def.method.name) @def.method\n\n;; Type declaration — struct\n(type_declaration\n (type_spec\n name: (type_identifier) @def.struct.name\n type: (struct_type))) @def.struct\n\n;; Type declaration — interface\n(type_declaration\n (type_spec\n name: (type_identifier) @def.interface.name\n type: (interface_type))) @def.interface\n\n;; Import spec\n(import_spec\n path: (interpreted_string_literal) @imp.source) @imp\n\n;; Call expression\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Selector call\n(call_expression\n function: (selector_expression\n operand: (_) @call.receiver\n field: (field_identifier) @call.method)) @call.member\n\n;; Const declaration\n(const_declaration\n (const_spec\n name: (identifier) @def.constant.name)) @def.constant\n\n;; Var declaration\n(var_declaration\n (var_spec\n name: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { goQueries } from '../../parsing/queries/go.js';\n\nexport const goModule: LanguageModule = {\n lang: Language.Go,\n fileExtensions: ['.go'],\n queries: goQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return false;\n const first = name.text[0];\n return first === first.toUpperCase() && first !== first.toLowerCase();\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cQueries = `\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum specifier\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Typedef\n(type_definition\n declarator: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Global variable\n(declaration\n declarator: (init_declarator\n declarator: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cQueries } from '../../parsing/queries/c.js';\nimport path from 'node:path';\n\nexport const cModule: LanguageModule = {\n lang: Language.C,\n fileExtensions: ['.c', '.h'],\n queries: cQueries,\n importStyle: 'include',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // C: all non-static symbols are visible\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cppQueries = `\n;; Class specifier\n(class_specifier\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Namespace definition\n(namespace_definition\n name: (identifier) @def.namespace.name) @def.namespace\n\n;; Template declaration\n(template_declaration\n (class_specifier\n name: (type_identifier) @def.class.name)) @def.class.template\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Member call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Base class clause\n(base_class_clause\n (type_identifier) @inherit.extends)\n\n;; Enum\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cppQueries } from '../../parsing/queries/cpp.js';\nimport path from 'node:path';\n\nexport const cppModule: LanguageModule = {\n lang: Language.Cpp,\n fileExtensions: ['.cpp', '.cxx', '.cc', '.hpp', '.hxx'],\n queries: cppQueries,\n importStyle: 'include',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true;\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const csharpQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Struct declaration\n(struct_declaration\n name: (identifier) @def.struct.name) @def.struct\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Property declaration\n(property_declaration\n name: (identifier) @def.property.name) @def.property\n\n;; Namespace declaration\n(namespace_declaration\n name: (_) @def.namespace.name) @def.namespace\n\n;; Using directive\n(using_directive\n (qualified_name) @imp.source) @imp\n\n;; Invocation\n(invocation_expression\n function: (identifier) @call.name) @call\n\n;; Member invocation\n(invocation_expression\n function: (member_access_expression\n name: (identifier) @call.method)) @call.member\n\n;; Object creation\n(object_creation_expression\n type: (identifier) @call.constructor) @call.new\n\n;; Base list (extends/implements)\n(base_list\n (identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { csharpQueries } from '../../parsing/queries/csharp.js';\n\nexport const csharpModule: LanguageModule = {\n lang: Language.CSharp,\n fileExtensions: ['.cs'],\n queries: csharpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rustQueries = `\n;; Function item\n(function_item\n name: (identifier) @def.func.name) @def.func\n\n;; Struct item\n(struct_item\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum item\n(enum_item\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Trait item\n(trait_item\n name: (type_identifier) @def.trait.name) @def.trait\n\n;; Impl item\n(impl_item\n type: (type_identifier) @def.class.name) @def.impl\n\n;; Type alias\n(type_item\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Use declaration\n(use_declaration\n argument: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Method call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Const item\n(const_item\n name: (identifier) @def.constant.name) @def.constant\n\n;; Static item\n(static_item\n name: (identifier) @def.var.name) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rustQueries } from '../../parsing/queries/rust.js';\n\nexport const rustModule: LanguageModule = {\n lang: Language.Rust,\n fileExtensions: ['.rs'],\n queries: rustQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('::');\n const filePath = parts.join('/') + '.rs';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return node.text.startsWith('pub ') || node.text.startsWith('pub(');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const phpQueries = `\n;; Class declaration\n(class_declaration\n name: (name) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (name) @def.interface.name) @def.interface\n\n;; Trait declaration\n(trait_declaration\n name: (name) @def.trait.name) @def.trait\n\n;; Function definition\n(function_definition\n name: (name) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (name) @def.method.name) @def.method\n\n;; Property declaration\n(property_declaration\n (property_element\n (variable_name) @def.property.name)) @def.property\n\n;; Namespace definition\n(namespace_definition\n name: (namespace_name) @def.namespace.name) @def.namespace\n\n;; Use declaration (import)\n(namespace_use_declaration\n (namespace_use_clause\n (qualified_name) @imp.source)) @imp\n\n;; Include/require\n(include_expression\n (_) @imp.source) @imp.include\n\n;; Function call\n(function_call_expression\n function: (name) @call.name) @call\n\n;; Method call\n(member_call_expression\n name: (name) @call.method) @call.member\n\n;; Object creation\n(object_creation_expression\n (name) @call.constructor) @call.new\n\n;; Class base clause\n(base_clause\n (name) @inherit.extends)\n\n;; Class interface clause\n(class_interface_clause\n (name) @inherit.implements)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { phpQueries } from '../../parsing/queries/php.js';\n\nexport const phpModule: LanguageModule = {\n lang: Language.PHP,\n fileExtensions: ['.php'],\n queries: phpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"\\\\]/g, '/').replace(/^\\//, '');\n return workspace.findByPackage(cleaned + '.php');\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || !node.text.includes('private');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const kotlinQueries = `\n;; Class declaration\n(class_declaration\n (type_identifier) @def.class.name) @def.class\n\n;; Object declaration\n(object_declaration\n (type_identifier) @def.class.name) @def.class.object\n\n;; Interface declaration \n(class_declaration\n (type_identifier) @def.interface.name) @def.interface\n\n;; Function declaration\n(function_declaration\n (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (variable_declaration\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_header\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Navigation call\n(call_expression\n (navigation_expression\n (simple_identifier) @call.method)) @call.member\n\n;; Delegation specifier (extends/implements)\n(delegation_specifier\n (user_type\n (type_identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { kotlinQueries } from '../../parsing/queries/kotlin.js';\n\nexport const kotlinModule: LanguageModule = {\n lang: Language.Kotlin,\n fileExtensions: ['.kt', '.kts'],\n queries: kotlinQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.kt';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rubyQueries = `\n;; Class\n(class\n name: (constant) @def.class.name) @def.class\n\n;; Module\n(module\n name: (constant) @def.module.name) @def.module\n\n;; Method\n(method\n name: (identifier) @def.method.name) @def.method\n\n;; Singleton method\n(singleton_method\n name: (identifier) @def.method.name) @def.method.static\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Require\n(call\n method: (identifier) @_method\n arguments: (argument_list (string) @imp.source)\n (#match? @_method \"^require\"))\n\n;; Call\n(call\n method: (identifier) @call.name) @call\n\n;; Superclass\n(superclass\n (constant) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rubyQueries } from '../../parsing/queries/ruby.js';\n\nexport const rubyModule: LanguageModule = {\n lang: Language.Ruby,\n fileExtensions: ['.rb'],\n queries: rubyQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'mixin-aware',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned + '.rb') ?? workspace.findByPackage(cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // Ruby: methods are public by default\n },\n\n extractType(_node: Node): string | null {\n return null; // Ruby: dynamic typing\n },\n};\n","export const swiftQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct declaration\n(struct_declaration\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Protocol declaration\n(protocol_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (pattern\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Inheritance\n(inheritance_specifier\n (type_identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { swiftQueries } from '../../parsing/queries/swift.js';\n\nexport const swiftModule: LanguageModule = {\n lang: Language.Swift,\n fileExtensions: ['.swift'],\n queries: swiftQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('fileprivate');\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nexport const dartModule: LanguageModule = {\n lang: Language.Dart,\n fileExtensions: ['.dart'],\n queries: typescriptQueries, // Dart grammar fallback\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('package:')) {\n const pkg = cleaned.replace('package:', '');\n return workspace.findByPackage(pkg);\n }\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","import { Language } from '../shared/index.js';\nimport type { LanguageModule } from './types.js';\nimport { typescriptModule, javascriptModule } from './modules/typescript.js';\nimport { pythonModule } from './modules/python.js';\nimport { javaModule } from './modules/java.js';\nimport { goModule } from './modules/go.js';\nimport { cModule } from './modules/c.js';\nimport { cppModule } from './modules/cpp.js';\nimport { csharpModule } from './modules/csharp.js';\nimport { rustModule } from './modules/rust.js';\nimport { phpModule } from './modules/php.js';\nimport { kotlinModule } from './modules/kotlin.js';\nimport { rubyModule } from './modules/ruby.js';\nimport { swiftModule } from './modules/swift.js';\nimport { dartModule } from './modules/dart.js';\n\nconst MODULES: Record<Language, LanguageModule> = {\n [Language.TypeScript]: typescriptModule,\n [Language.JavaScript]: javascriptModule,\n [Language.Python]: pythonModule,\n [Language.Java]: javaModule,\n [Language.Go]: goModule,\n [Language.C]: cModule,\n [Language.Cpp]: cppModule,\n [Language.CSharp]: csharpModule,\n [Language.Rust]: rustModule,\n [Language.PHP]: phpModule,\n [Language.Kotlin]: kotlinModule,\n [Language.Ruby]: rubyModule,\n [Language.Swift]: swiftModule,\n [Language.Dart]: dartModule,\n};\n\nexport function getLanguageModule(lang: Language): LanguageModule {\n return MODULES[lang];\n}\n\nexport function getAllLanguageModules(): LanguageModule[] {\n return Object.values(MODULES);\n}\n","export interface ImportBinding {\n localName: string;\n sourcePath: string;\n exportedName: string;\n isDefault: boolean;\n isNamespace: boolean;\n}\n\nexport class BindingTracker {\n private bindings = new Map<string, Map<string, ImportBinding>>();\n\n addBinding(filePath: string, binding: ImportBinding): void {\n let fileBindings = this.bindings.get(filePath);\n if (!fileBindings) {\n fileBindings = new Map();\n this.bindings.set(filePath, fileBindings);\n }\n fileBindings.set(binding.localName, binding);\n }\n\n getBinding(filePath: string, localName: string): ImportBinding | undefined {\n return this.bindings.get(filePath)?.get(localName);\n }\n\n getFileBindings(filePath: string): ImportBinding[] {\n const fileBindings = this.bindings.get(filePath);\n return fileBindings ? [...fileBindings.values()] : [];\n }\n\n clear(): void {\n this.bindings.clear();\n }\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { LanguageModule, FileSet } from '../languages/types.js';\nimport { BindingTracker } from './binding-tracker.js';\nimport type { ImportBinding } from './binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ImportInfo {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n isNamespace: boolean;\n namespaceName?: string;\n}\n\nexport interface ImportResolutionResult {\n edges: CodeEdge[];\n bindings: BindingTracker;\n}\n\nexport function resolveImports(\n filePath: string,\n fileNodeId: string,\n imports: ImportInfo[],\n langModule: LanguageModule,\n workspace: FileSet,\n): ImportResolutionResult {\n const bindings = new BindingTracker();\n const edges: CodeEdge[] = [];\n const maxReExportHops = 5;\n\n for (const imp of imports) {\n let resolvedPath = langModule.resolveImport(imp.rawPath, filePath, workspace);\n\n // Re-export chain walking\n let hops = 0;\n const visited = new Set<string>();\n while (resolvedPath && hops < maxReExportHops && !visited.has(resolvedPath)) {\n visited.add(resolvedPath);\n hops++;\n // For now, just accept the first resolution\n break;\n }\n\n if (!resolvedPath) continue;\n\n const targetNodeId = `file:${resolvedPath}:${resolvedPath}`;\n const edge: CodeEdge = {\n id: generateEdgeId(fileNodeId, targetNodeId, 'imports'),\n source: fileNodeId,\n target: targetNodeId,\n kind: 'imports',\n weight: 0.95,\n label: imp.rawPath,\n };\n edges.push(edge);\n\n for (const localName of imp.localNames) {\n const binding: ImportBinding = {\n localName,\n sourcePath: resolvedPath,\n exportedName: localName,\n isDefault: imp.isDefault,\n isNamespace: imp.isNamespace,\n };\n bindings.addBinding(filePath, binding);\n }\n }\n\n return { edges, bindings };\n}\n","import type { CodeEdge, CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport type { BindingTracker } from '../resolver/binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\nimport type { CallSite } from './call-classifier.js';\n\ninterface ResolutionTier {\n name: string;\n confidence: number;\n resolve(callSite: CallSite): string | null;\n}\n\nexport function buildCallEdges(\n callSites: CallSite[],\n graph: KnowledgeGraph,\n bindings: BindingTracker,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const symbolIndex = buildSymbolIndex(graph);\n\n const tiers: ResolutionTier[] = [\n {\n name: 'same-file',\n confidence: 0.95,\n resolve(cs: CallSite) {\n const key = `${cs.callerFilePath}:${cs.name}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'imported',\n confidence: 0.9,\n resolve(cs: CallSite) {\n const binding = bindings.getBinding(cs.callerFilePath, cs.name);\n if (!binding) return null;\n const key = `${binding.sourcePath}:${binding.exportedName}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'global',\n confidence: 0.5,\n resolve(cs: CallSite) {\n return globalSymbolIndex.get(cs.name) ?? null;\n },\n },\n ];\n\n const globalSymbolIndex = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor'].includes(node.kind)) {\n if (!globalSymbolIndex.has(node.name)) {\n globalSymbolIndex.set(node.name, node.id);\n }\n }\n }\n\n for (const cs of callSites) {\n for (const tier of tiers) {\n const targetId = tier.resolve(cs);\n if (targetId && targetId !== cs.callerNodeId) {\n edges.push({\n id: generateEdgeId(cs.callerNodeId, targetId, 'calls'),\n source: cs.callerNodeId,\n target: targetId,\n kind: 'calls',\n weight: tier.confidence,\n label: cs.name,\n });\n break;\n }\n }\n }\n\n return edges;\n}\n\nfunction buildSymbolIndex(graph: KnowledgeGraph): Map<string, string> {\n const index = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor', 'variable'].includes(node.kind)) {\n const key = `${node.filePath}:${node.name}`;\n index.set(key, node.id);\n }\n }\n return index;\n}\n","export type CallKind = 'free' | 'member' | 'constructor';\n\nexport interface CallSite {\n callerNodeId: string;\n callerFilePath: string;\n name: string;\n receiverText?: string;\n kind: CallKind;\n line: number;\n argCount: number;\n}\n\nexport function classifyCall(\n name: string,\n hasReceiver: boolean,\n isNew: boolean,\n): CallKind {\n if (isNew) return 'constructor';\n if (hasReceiver) return 'member';\n if (name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase()) {\n return 'constructor';\n }\n return 'free';\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface HeritageInfo {\n classNodeId: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\nexport function buildHeritageEdges(\n heritages: HeritageInfo[],\n graph: KnowledgeGraph,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const classIndex = new Map<string, string>();\n\n for (const node of graph.allNodes()) {\n if (['class', 'interface', 'struct', 'trait'].includes(node.kind)) {\n classIndex.set(node.name, node.id);\n }\n }\n\n for (const h of heritages) {\n for (const name of h.extendsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'extends'),\n source: h.classNodeId,\n target: targetId,\n kind: 'extends',\n weight: 1.0,\n label: `extends ${name}`,\n });\n }\n }\n\n for (const name of h.implementsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'implements'),\n source: h.classNodeId,\n target: targetId,\n kind: 'implements',\n weight: 1.0,\n label: `implements ${name}`,\n });\n }\n }\n }\n\n return edges;\n}\n","export type MroStrategy = 'depth-first' | 'c3' | 'mixin-aware' | 'none';\n\nexport function computeMRO(\n classId: string,\n parentMap: Map<string, string[]>,\n strategy: MroStrategy,\n): string[] {\n switch (strategy) {\n case 'depth-first':\n return depthFirstMRO(classId, parentMap);\n case 'c3':\n return c3Linearize(classId, parentMap);\n case 'mixin-aware':\n return mixinAwareMRO(classId, parentMap);\n case 'none':\n return [classId];\n }\n}\n\nfunction depthFirstMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n const stack = [classId];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (visited.has(current)) continue;\n visited.add(current);\n result.push(current);\n const parents = parentMap.get(current) ?? [];\n for (let i = parents.length - 1; i >= 0; i--) {\n stack.push(parents[i]);\n }\n }\n\n return result;\n}\n\nfunction c3Linearize(classId: string, parentMap: Map<string, string[]>): string[] {\n const cache = new Map<string, string[]>();\n const inProgress = new Set<string>();\n\n function linearize(cls: string): string[] {\n if (cache.has(cls)) return cache.get(cls)!;\n if (inProgress.has(cls)) return [cls]; // cycle detected\n\n inProgress.add(cls);\n const parents = parentMap.get(cls) ?? [];\n\n if (parents.length === 0) {\n const result = [cls];\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n const parentLinearizations = parents.map((p) => linearize(p));\n const sequences = [...parentLinearizations, parents];\n const result = [cls];\n\n while (sequences.some((s) => s.length > 0)) {\n let found = false;\n for (const seq of sequences) {\n if (seq.length === 0) continue;\n const head = seq[0];\n const inTail = sequences.some((s) => s.indexOf(head) > 0);\n if (!inTail) {\n result.push(head);\n for (const s of sequences) {\n const idx = s.indexOf(head);\n if (idx >= 0) s.splice(idx, 1);\n }\n found = true;\n break;\n }\n }\n if (!found) break; // inconsistent hierarchy\n }\n\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n return linearize(classId);\n}\n\nfunction mixinAwareMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n // Simplified: prepend → direct → included\n return depthFirstMRO(classId, parentMap);\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport function detectOverrides(graph: KnowledgeGraph): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const methodsByOwner = new Map<string, Map<string, string>>();\n\n // Build owner → methods map\n for (const edge of graph.findEdgesByKind('has_member')) {\n const member = graph.getNode(edge.target);\n if (member && member.kind === 'method') {\n let methods = methodsByOwner.get(edge.source);\n if (!methods) {\n methods = new Map();\n methodsByOwner.set(edge.source, methods);\n }\n methods.set(member.name, member.id);\n }\n }\n\n // Check extends edges\n for (const extendsEdge of graph.findEdgesByKind('extends')) {\n const childMethods = methodsByOwner.get(extendsEdge.source);\n const parentMethods = methodsByOwner.get(extendsEdge.target);\n if (!childMethods || !parentMethods) continue;\n\n for (const [methodName, childMethodId] of childMethods) {\n const parentMethodId = parentMethods.get(methodName);\n if (parentMethodId) {\n edges.push({\n id: generateEdgeId(childMethodId, parentMethodId, 'overrides'),\n source: childMethodId,\n target: parentMethodId,\n kind: 'overrides',\n weight: 1.0,\n label: `overrides ${methodName}`,\n });\n }\n }\n }\n\n return edges;\n}\n","import type { Phase } from './types.js';\n\nexport interface ValidationError {\n type: 'duplicate' | 'missing-dep' | 'cycle';\n message: string;\n}\n\nexport function validateDAG(phases: Phase[]): ValidationError[] {\n const errors: ValidationError[] = [];\n const names = new Set<string>();\n\n // Check duplicates\n for (const phase of phases) {\n if (names.has(phase.name)) {\n errors.push({ type: 'duplicate', message: `Duplicate phase name: ${phase.name}` });\n }\n names.add(phase.name);\n }\n\n // Check missing deps\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n if (!names.has(dep)) {\n errors.push({\n type: 'missing-dep',\n message: `Phase \"${phase.name}\" depends on missing phase \"${dep}\"`,\n });\n }\n }\n }\n\n // Check cycles using DFS\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n\n function dfs(name: string, path: string[]): boolean {\n if (visiting.has(name)) {\n const cycleStart = path.indexOf(name);\n const cycle = path.slice(cycleStart).concat(name);\n errors.push({ type: 'cycle', message: `Cycle detected: ${cycle.join(' → ')}` });\n return true;\n }\n if (visited.has(name)) return false;\n\n visiting.add(name);\n path.push(name);\n\n const phase = phaseMap.get(name);\n if (phase) {\n for (const dep of phase.dependencies) {\n if (dfs(dep, path)) return true;\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n path.pop();\n return false;\n }\n\n for (const phase of phases) {\n if (!visited.has(phase.name)) {\n dfs(phase.name, []);\n }\n }\n\n return errors;\n}\n\nexport function topologicalSort(phases: Phase[]): Phase[] {\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n const inDegree = new Map<string, number>();\n const adjList = new Map<string, string[]>();\n\n for (const phase of phases) {\n inDegree.set(phase.name, 0);\n adjList.set(phase.name, []);\n }\n\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n adjList.get(dep)?.push(phase.name);\n inDegree.set(phase.name, (inDegree.get(phase.name) ?? 0) + 1);\n }\n }\n\n const queue: string[] = [];\n for (const [name, degree] of inDegree) {\n if (degree === 0) queue.push(name);\n }\n\n const sorted: Phase[] = [];\n while (queue.length > 0) {\n const current = queue.shift()!;\n sorted.push(phaseMap.get(current)!);\n for (const neighbor of adjList.get(current) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n return sorted;\n}\n","import type { Phase, PhaseResult, PipelineContext } from './types.js';\nimport { validateDAG, topologicalSort } from './dag-validator.js';\n\nexport interface PipelineRunResult {\n success: boolean;\n results: Map<string, PhaseResult>;\n totalDuration: number;\n}\n\nexport async function runPipeline(\n phases: Phase[],\n context: PipelineContext,\n): Promise<PipelineRunResult> {\n const errors = validateDAG(phases);\n if (errors.length > 0) {\n throw new Error(`Pipeline validation failed:\\n${errors.map((e) => e.message).join('\\n')}`);\n }\n\n const sorted = topologicalSort(phases);\n const results = new Map<string, PhaseResult>();\n const startTime = Date.now();\n let success = true;\n\n for (const phase of sorted) {\n context.onProgress?.(phase.name, 'running');\n const phaseStart = Date.now();\n\n try {\n const depResults = new Map<string, PhaseResult>();\n for (const dep of phase.dependencies) {\n const depResult = results.get(dep);\n if (depResult) depResults.set(dep, depResult);\n }\n\n const result = await phase.execute(context, depResults);\n results.set(phase.name, result);\n context.onProgress?.(phase.name, result.status);\n\n if (result.status === 'failed') {\n success = false;\n break;\n }\n } catch (err) {\n const result: PhaseResult = {\n status: 'failed',\n duration: Date.now() - phaseStart,\n message: err instanceof Error ? err.message : String(err),\n };\n results.set(phase.name, result);\n context.onProgress?.(phase.name, 'failed');\n success = false;\n break;\n }\n }\n\n return {\n success,\n results,\n totalDuration: Date.now() - startTime,\n };\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, getSupportedExtensions } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId } from '../../graph/id-generator.js';\n\nconst IGNORED_DIRS = new Set([\n 'node_modules', '.git', '.svn', '.hg', 'dist', 'dist-tests', 'build', 'out',\n '__pycache__', '.tox', '.pytest_cache', '.mypy_cache',\n 'vendor', 'target', '.code-intel', 'coverage', '.next',\n '.turbo', '.cache', 'tmp', 'temp', '.parcel-cache',\n]);\n\n/**\n * Load extra ignore patterns from .codeintelignore in the workspace root.\n * Format: one glob/dir name per line, # for comments.\n */\nfunction loadIgnorePatterns(workspaceRoot: string): Set<string> {\n try {\n const raw = fs.readFileSync(path.join(workspaceRoot, '.codeintelignore'), 'utf-8');\n const extras = new Set<string>();\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) extras.add(trimmed);\n }\n return extras;\n } catch {\n return new Set();\n }\n}\n\nconst IGNORED_EXTENSIONS = new Set(['.d.ts', '.js.map', '.d.ts.map']);\n\nexport const scanPhase: Phase = {\n name: 'scan',\n dependencies: [],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const extensions = new Set(getSupportedExtensions());\n const filePaths: string[] = [];\n const extraIgnore = loadIgnorePatterns(context.workspaceRoot);\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n if (entry.name.startsWith('.') && entry.isDirectory()) continue;\n if (IGNORED_DIRS.has(entry.name) && entry.isDirectory()) continue;\n if (extraIgnore.has(entry.name) && entry.isDirectory()) continue;\n\n const fullPath = path.join(dir, entry.name);\n if (entry.isDirectory()) {\n walk(fullPath);\n } else if (entry.isFile()) {\n const ext = path.extname(entry.name);\n const fullName = entry.name;\n // Skip declaration files and maps\n if (fullName.endsWith('.d.ts') || fullName.endsWith('.js.map') || fullName.endsWith('.d.ts.map')) continue;\n if (extensions.has(ext)) {\n filePaths.push(fullPath);\n }\n }\n }\n }\n\n walk(context.workspaceRoot);\n context.filePaths.push(...filePaths);\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${filePaths.length} source files`,\n };\n },\n};\n\nexport const structurePhase: Phase = {\n name: 'structure',\n dependencies: ['scan'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const dirs = new Set<string>();\n\n for (const filePath of context.filePaths) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const lang = detectLanguage(filePath);\n\n context.graph.addNode({\n id: generateNodeId('file', relativePath, relativePath),\n kind: 'file',\n name: path.basename(filePath),\n filePath: relativePath,\n metadata: lang ? { language: lang } : undefined,\n });\n\n // Collect directories\n let dir = path.dirname(relativePath);\n while (dir && dir !== '.' && dir !== '') {\n if (dirs.has(dir)) break;\n dirs.add(dir);\n dir = path.dirname(dir);\n }\n }\n\n for (const dir of dirs) {\n context.graph.addNode({\n id: generateNodeId('directory', dir, dir),\n kind: 'directory',\n name: path.basename(dir),\n filePath: dir,\n });\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${context.filePaths.length} file nodes, ${dirs.size} directory nodes`,\n };\n },\n};\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, Language } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\nimport type { CodeNode, CodeEdge } from '../../shared/index.js';\n\nexport const parsePhase: Phase = {\n name: 'parse',\n dependencies: ['structure'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n let symbolCount = 0;\n\n for (const filePath of context.filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) {\n if (context.verbose) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n console.log(` [parse] skipped (no parser): ${relativePath}`);\n }\n continue;\n }\n\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n // Store content on file node for search\n const fileNode = context.graph.getNode(fileNodeId);\n if (fileNode) {\n fileNode.content = source.slice(0, 2000);\n }\n\n const nodes: CodeNode[] = [];\n const edges: CodeEdge[] = [];\n const seen = new Set<string>();\n\n const lines = source.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip comments\n if (trimmed.startsWith('//') || trimmed.startsWith('#') || trimmed.startsWith('*') || trimmed.startsWith('/*')) continue;\n\n const extracted = extractSymbol(trimmed, lang, i + 1, relativePath);\n if (!extracted) continue;\n if (seen.has(extracted.name + ':' + extracted.kind)) continue;\n seen.add(extracted.name + ':' + extracted.kind);\n\n const nodeId = generateNodeId(extracted.kind, relativePath, extracted.name);\n nodes.push({\n id: nodeId,\n kind: extracted.kind,\n name: extracted.name,\n filePath: relativePath,\n startLine: i + 1,\n exported: extracted.exported,\n content: extractBlock(lines, i, 20),\n });\n edges.push({\n id: generateEdgeId(fileNodeId, nodeId, 'contains'),\n source: fileNodeId,\n target: nodeId,\n kind: 'contains',\n weight: 1.0,\n });\n\n // has_member edge for methods inside classes\n if (extracted.ownerName) {\n const ownerId = generateNodeId('class', relativePath, extracted.ownerName);\n if (context.graph.getNode(ownerId) || nodes.some((n) => n.id === ownerId)) {\n edges.push({\n id: generateEdgeId(ownerId, nodeId, 'has_member'),\n source: ownerId,\n target: nodeId,\n kind: 'has_member',\n weight: 1.0,\n });\n }\n }\n\n symbolCount++;\n }\n\n for (const n of nodes) context.graph.addNode(n);\n for (const e of edges) context.graph.addEdge(e);\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Extracted ${symbolCount} symbols`,\n };\n },\n};\n\ninterface ExtractedSymbol {\n kind: CodeNode['kind'];\n name: string;\n exported: boolean;\n ownerName?: string;\n}\n\nfunction extractSymbol(\n line: string,\n lang: Language,\n _lineNum: number,\n _filePath: string,\n): ExtractedSymbol | null {\n // --- TypeScript/JavaScript ---\n if (lang === Language.TypeScript || lang === Language.JavaScript) {\n const func = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:async\\s+)?function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('export') };\n\n const arrowFunc = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?\\(/);\n if (arrowFunc) return { kind: 'function', name: arrowFunc[1], exported: line.includes('export') };\n\n const arrowFunc2 = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?(?:\\([^)]*\\)|[a-zA-Z_]\\w*)\\s*=>/);\n if (arrowFunc2) return { kind: 'function', name: arrowFunc2[1], exported: line.includes('export') };\n\n const cls = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('export') };\n\n const iface = line.match(/^(?:export\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('export') };\n\n const enumM = line.match(/^(?:export\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('export') };\n\n const typeAlias = line.match(/^(?:export\\s+)?type\\s+(\\w+)\\s*[=<]/);\n if (typeAlias) return { kind: 'type_alias', name: typeAlias[1], exported: line.includes('export') };\n\n const constVar = line.match(/^(?:export\\s+)?const\\s+(\\w+)\\s*(?::\\s*\\w[^=]*)?\\s*=/);\n if (constVar && /^[A-Z_]+$/.test(constVar[1])) {\n return { kind: 'constant', name: constVar[1], exported: line.includes('export') };\n }\n\n const method = line.match(/^(?:(?:public|private|protected|static|async|readonly)\\s+)*(\\w+)\\s*\\(/);\n if (method && !['if', 'for', 'while', 'switch', 'catch', 'return', 'constructor'].includes(method[1])) {\n if (method[1] === 'constructor') {\n return { kind: 'constructor', name: 'constructor', exported: false };\n }\n }\n }\n\n // --- Python ---\n if (lang === Language.Python) {\n const func = line.match(/^(?:async\\s+)?def\\s+(\\w+)/);\n if (func) return { kind: func[1].startsWith('__') ? 'method' : 'function', name: func[1], exported: !func[1].startsWith('_') };\n\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n }\n\n // --- Java ---\n if (lang === Language.Java) {\n const cls = line.match(/(?:public|private|protected)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected)\\s+(?:static\\s+)?(?:[\\w<>\\[\\]]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n }\n\n // --- Go ---\n if (lang === Language.Go) {\n const func = line.match(/^func\\s+(\\w+)\\s*\\(/);\n if (func) return { kind: 'function', name: func[1], exported: func[1][0] === func[1][0].toUpperCase() };\n\n const method = line.match(/^func\\s+\\([^)]+\\)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: method[1][0] === method[1][0].toUpperCase() };\n\n const structM = line.match(/^type\\s+(\\w+)\\s+struct\\b/);\n if (structM) return { kind: 'struct', name: structM[1], exported: structM[1][0] === structM[1][0].toUpperCase() };\n\n const ifaceM = line.match(/^type\\s+(\\w+)\\s+interface\\b/);\n if (ifaceM) return { kind: 'interface', name: ifaceM[1], exported: ifaceM[1][0] === ifaceM[1][0].toUpperCase() };\n }\n\n // --- Rust ---\n if (lang === Language.Rust) {\n const func = line.match(/^(?:pub\\s+)?(?:async\\s+)?fn\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.startsWith('pub') };\n\n const structM = line.match(/^(?:pub\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.startsWith('pub') };\n\n const enumM = line.match(/^(?:pub\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.startsWith('pub') };\n\n const traitM = line.match(/^(?:pub\\s+)?trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: line.startsWith('pub') };\n\n const implM = line.match(/^impl(?:<[^>]*>)?\\s+(\\w+)/);\n if (implM) return { kind: 'class', name: implM[1], exported: false };\n }\n\n // --- C/C++ ---\n if (lang === Language.C || lang === Language.Cpp) {\n const cls = line.match(/^(?:class|struct)\\s+(\\w+)/);\n if (cls) return { kind: lang === Language.Cpp ? 'class' : 'struct', name: cls[1], exported: true };\n\n const nsM = line.match(/^namespace\\s+(\\w+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n\n const func = line.match(/^(?:[\\w:*&<>\\[\\]]+\\s+)+(\\w+)\\s*\\([^;]*$/);\n if (func && !['if', 'for', 'while', 'switch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: true };\n }\n }\n\n // --- C# ---\n if (lang === Language.CSharp) {\n const cls = line.match(/(?:public|internal|private)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:partial\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected|internal)\\s+(?:static\\s+)?(?:async\\s+)?(?:[\\w<>\\[\\]?]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n\n const nsM = line.match(/namespace\\s+([\\w.]+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n }\n\n // --- PHP ---\n if (lang === Language.PHP) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const func = line.match(/(?:public|private|protected|static\\s+)*function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('public') || !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: true };\n\n const traitM = line.match(/trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: true };\n }\n\n // --- Kotlin ---\n if (lang === Language.Kotlin) {\n const cls = line.match(/(?:data\\s+|sealed\\s+|abstract\\s+|open\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:suspend\\s+)?fun\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n\n const obj = line.match(/object\\s+(\\w+)/);\n if (obj) return { kind: 'class', name: obj[1], exported: !line.includes('private') };\n }\n\n // --- Ruby ---\n if (lang === Language.Ruby) {\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const modM = line.match(/^module\\s+(\\w+)/);\n if (modM) return { kind: 'module', name: modM[1], exported: true };\n\n const method = line.match(/^(?:def\\s+(?:self\\.)?(\\w+))/);\n if (method) return { kind: 'method', name: method[1], exported: true };\n }\n\n // --- Swift ---\n if (lang === Language.Swift) {\n const cls = line.match(/(?:public\\s+|open\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: !line.includes('private') };\n\n const proto = line.match(/(?:public\\s+)?protocol\\s+(\\w+)/);\n if (proto) return { kind: 'interface', name: proto[1], exported: !line.includes('private') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:public\\s+|private\\s+|internal\\s+)?(?:static\\s+)?func\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n }\n\n // --- Dart ---\n if (lang === Language.Dart) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n\n const func = line.match(/^(?:\\w+\\s+)?(\\w+)\\s*\\(/);\n if (func && !['if', 'for', 'while', 'switch', 'catch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: !func[1].startsWith('_') };\n }\n }\n\n return null;\n}\n\nfunction extractBlock(lines: string[], startIdx: number, maxLines: number): string {\n const end = Math.min(startIdx + maxLines, lines.length);\n return lines.slice(startIdx, end).join('\\n');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\nimport type { CodeEdge } from '../../shared/index.js';\nimport { getLanguageModule } from '../../languages/registry.js';\n\ninterface ParsedImport {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n line: number;\n}\n\ninterface ParsedCall {\n name: string;\n receiverText?: string;\n isNew: boolean;\n line: number;\n}\n\ninterface ParsedHeritage {\n className: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\nexport const resolvePhase: Phase = {\n name: 'resolve',\n dependencies: ['parse'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph, workspaceRoot, filePaths } = context;\n\n let importEdges = 0;\n let callEdges = 0;\n let heritageEdges = 0;\n\n // Build file index for import resolution\n const fileIndex = new Map<string, string>();\n for (const fp of filePaths) {\n const rel = path.relative(workspaceRoot, fp);\n fileIndex.set(rel, fp);\n // Index without extension\n const noExt = rel.replace(/\\.\\w+$/, '');\n if (!fileIndex.has(noExt)) fileIndex.set(noExt, fp);\n // Index basename\n const base = path.basename(rel, path.extname(rel));\n if (!fileIndex.has(base)) fileIndex.set(base, fp);\n }\n\n // Build symbol index: name → nodeId\n const symbolIndex = new Map<string, string>();\n const fileSymbolIndex = new Map<string, Map<string, string>>();\n for (const node of graph.allNodes()) {\n if (['function', 'class', 'interface', 'method', 'enum', 'type_alias', 'variable', 'constant', 'struct', 'trait'].includes(node.kind)) {\n symbolIndex.set(node.name, node.id);\n let fileMap = fileSymbolIndex.get(node.filePath);\n if (!fileMap) {\n fileMap = new Map();\n fileSymbolIndex.set(node.filePath, fileMap);\n }\n fileMap.set(node.name, node.id);\n }\n }\n\n // Process each file for imports, calls, heritage\n for (const filePath of filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) continue;\n\n const relativePath = path.relative(workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n let source: string;\n try {\n source = fs.readFileSync(filePath, 'utf-8');\n } catch {\n continue;\n }\n\n const lines = source.split('\\n');\n const imports = extractImports(lines, lang === 'python');\n const calls = extractCalls(lines);\n const heritages = extractHeritage(lines);\n\n // Resolve imports → IMPORTS edges\n for (const imp of imports) {\n const cleaned = imp.rawPath.replace(/['\"]/g, '');\n let resolvedRelPath: string | null = null;\n\n if (cleaned.startsWith('.')) {\n // Relative import — strip .js/.jsx since TS imports use .js but files are .ts\n const cleanedNoJs = cleaned.replace(/\\.(js|jsx)$/, '');\n const fromDir = path.dirname(relativePath);\n for (const ext of ['', '.ts', '.tsx', '.js', '.jsx', '.py', '.java', '.go', '/index.ts', '/index.js']) {\n const candidate = path.join(fromDir, cleanedNoJs + ext);\n const normalized = path.normalize(candidate);\n if (fileIndex.has(normalized)) {\n // Use the absolute path from the index to derive the canonical relative path\n const absPath = fileIndex.get(normalized)!;\n resolvedRelPath = path.relative(workspaceRoot, absPath);\n break;\n }\n }\n } else {\n // Package import — try to find in file index\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go']) {\n if (fileIndex.has(cleaned + ext)) {\n resolvedRelPath = cleaned + ext;\n break;\n }\n }\n // Try path-based\n const asPath = cleaned.replace(/\\./g, '/');\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go', '/index.ts', '/__init__.py']) {\n if (fileIndex.has(asPath + ext)) {\n resolvedRelPath = asPath + ext;\n break;\n }\n }\n }\n\n if (resolvedRelPath) {\n const targetFileId = generateNodeId('file', resolvedRelPath, resolvedRelPath);\n if (graph.getNode(targetFileId)) {\n const edgeId = generateEdgeId(fileNodeId, targetFileId, 'imports');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: fileNodeId,\n target: targetFileId,\n kind: 'imports',\n weight: 0.95,\n label: cleaned,\n });\n importEdges++;\n }\n }\n }\n }\n\n // Resolve calls → CALLS edges\n const localSymbols = fileSymbolIndex.get(relativePath);\n for (const call of calls) {\n // Tier 1: same file\n let targetId = localSymbols?.get(call.name);\n let confidence = 0.95;\n\n if (!targetId) {\n // Tier 2: global\n targetId = symbolIndex.get(call.name);\n confidence = 0.5;\n }\n\n if (targetId) {\n // Find the caller (enclosing function)\n const callerNodeId = findEnclosingFunction(graph, relativePath, call.line);\n const sourceId = callerNodeId ?? fileNodeId;\n\n if (sourceId !== targetId) {\n const edgeId = generateEdgeId(sourceId, targetId, 'calls');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: sourceId,\n target: targetId,\n kind: 'calls',\n weight: confidence,\n label: call.name,\n });\n callEdges++;\n }\n }\n }\n }\n\n // Heritage → EXTENDS/IMPLEMENTS edges\n for (const h of heritages) {\n const classNodeId = localSymbols?.get(h.className) ?? symbolIndex.get(h.className);\n if (!classNodeId) continue;\n\n for (const ext of h.extendsNames) {\n const targetId = symbolIndex.get(ext);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'extends');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: classNodeId,\n target: targetId,\n kind: 'extends',\n weight: 1.0,\n label: `extends ${ext}`,\n });\n heritageEdges++;\n }\n }\n }\n\n for (const impl of h.implementsNames) {\n const targetId = symbolIndex.get(impl);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'implements');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: classNodeId,\n target: targetId,\n kind: 'implements',\n weight: 1.0,\n label: `implements ${impl}`,\n });\n heritageEdges++;\n }\n }\n }\n }\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Resolved ${importEdges} imports, ${callEdges} calls, ${heritageEdges} heritage edges. Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`,\n };\n },\n};\n\nfunction extractImports(lines: string[], isPython: boolean): ParsedImport[] {\n const imports: ParsedImport[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // TypeScript/JavaScript: import ... from '...'\n const tsImport = line.match(/import\\s+.*?from\\s+['\"]([^'\"]+)['\"]/);\n if (tsImport) {\n const names: string[] = [];\n const namedMatch = line.match(/\\{([^}]+)\\}/);\n if (namedMatch) {\n names.push(...namedMatch[1].split(',').map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim()).filter(Boolean));\n }\n const defaultMatch = line.match(/import\\s+(\\w+)/);\n if (defaultMatch && defaultMatch[1] !== 'type') {\n names.push(defaultMatch[1]);\n }\n imports.push({\n rawPath: tsImport[1],\n localNames: names,\n isDefault: !namedMatch,\n line: i + 1,\n });\n continue;\n }\n\n // Python: from X import Y / import X\n if (isPython) {\n const fromImport = line.match(/from\\s+([\\w.]+)\\s+import\\s+(.+)/);\n if (fromImport) {\n const names = fromImport[2].split(',').map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim()).filter(Boolean);\n imports.push({ rawPath: fromImport[1], localNames: names, isDefault: false, line: i + 1 });\n continue;\n }\n const directImport = line.match(/^import\\s+([\\w.]+)(?:\\s+as\\s+(\\w+))?/);\n if (directImport) {\n imports.push({\n rawPath: directImport[1],\n localNames: [directImport[2] ?? directImport[1].split('.').pop()!],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n }\n\n // Java/Kotlin: import com.example.Foo\n const javaImport = line.match(/^import\\s+(?:static\\s+)?([\\w.]+)/);\n if (javaImport && !line.includes('from')) {\n const parts = javaImport[1].split('.');\n imports.push({\n rawPath: javaImport[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // Go: import \"path\"\n const goImport = line.match(/^\\s*\"([^\"]+)\"/);\n if (goImport && (i > 0 && lines[i - 1]?.includes('import') || line.match(/^import\\s+\"/))) {\n const parts = goImport[1].split('/');\n imports.push({\n rawPath: goImport[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // C/C++: #include\n const includeMatch = line.match(/#include\\s+[<\"]([^>\"]+)[>\"]/);\n if (includeMatch) {\n imports.push({\n rawPath: includeMatch[1],\n localNames: [],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // Rust: use crate::... / use super::...\n const rustUse = line.match(/^use\\s+([\\w:]+)/);\n if (rustUse) {\n const parts = rustUse[1].split('::');\n imports.push({\n rawPath: rustUse[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n\n // C#: using\n const usingMatch = line.match(/^using\\s+([\\w.]+)/);\n if (usingMatch) {\n const parts = usingMatch[1].split('.');\n imports.push({\n rawPath: usingMatch[1],\n localNames: [parts[parts.length - 1]],\n isDefault: false,\n line: i + 1,\n });\n }\n\n // Ruby: require\n const requireMatch = line.match(/require\\s+['\"]([^'\"]+)['\"]/);\n if (requireMatch) {\n imports.push({\n rawPath: requireMatch[1],\n localNames: [],\n isDefault: false,\n line: i + 1,\n });\n }\n }\n\n return imports;\n}\n\nfunction extractCalls(lines: string[]): ParsedCall[] {\n const calls: ParsedCall[] = [];\n const callRegex = /(?:new\\s+)?(\\w+)\\s*\\(/g;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Skip declarations\n if (/^\\s*(export\\s+)?(async\\s+)?function\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?(abstract\\s+)?class\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?interface\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?enum\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?type\\s+\\w+\\s*=/.test(line)) continue;\n if (/^\\s*import\\s/.test(line)) continue;\n if (/^\\s*\\/\\//.test(line)) continue;\n\n let match;\n callRegex.lastIndex = 0;\n while ((match = callRegex.exec(line)) !== null) {\n const name = match[1];\n // Skip language keywords\n if (['if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'typeof', 'instanceof', 'delete', 'void', 'new', 'import', 'export', 'from', 'const', 'let', 'var', 'function', 'class', 'interface', 'type', 'enum', 'extends', 'implements'].includes(name)) continue;\n const isNew = line.substring(Math.max(0, match.index - 4), match.index).includes('new');\n calls.push({ name, isNew, line: i + 1 });\n }\n\n // Member calls: receiver.method(\n const memberCallRegex = /(\\w+)\\.(\\w+)\\s*\\(/g;\n memberCallRegex.lastIndex = 0;\n while ((match = memberCallRegex.exec(line)) !== null) {\n calls.push({\n name: match[2],\n receiverText: match[1],\n isNew: false,\n line: i + 1,\n });\n }\n }\n\n return calls;\n}\n\nfunction extractHeritage(lines: string[]): ParsedHeritage[] {\n const heritages: ParsedHeritage[] = [];\n\n for (const line of lines) {\n // class Foo extends Bar implements Baz, Qux\n const classMatch = line.match(/class\\s+(\\w+)(?:\\s+extends\\s+(\\w+))?(?:\\s+implements\\s+([\\w,\\s]+))?/);\n if (classMatch) {\n const extendsNames = classMatch[2] ? [classMatch[2]] : [];\n const implementsNames = classMatch[3] ? classMatch[3].split(',').map((n) => n.trim()).filter(Boolean) : [];\n heritages.push({ className: classMatch[1], extendsNames, implementsNames });\n continue;\n }\n\n // Python: class Foo(Bar, Baz):\n const pyClassMatch = line.match(/class\\s+(\\w+)\\(([^)]+)\\)/);\n if (pyClassMatch) {\n const bases = pyClassMatch[2].split(',').map((n) => n.trim()).filter(Boolean);\n heritages.push({ className: pyClassMatch[1], extendsNames: bases, implementsNames: [] });\n }\n }\n\n return heritages;\n}\n\nfunction findEnclosingFunction(\n graph: import('../../graph/knowledge-graph.js').KnowledgeGraph,\n filePath: string,\n line: number,\n): string | null {\n let best: { id: string; startLine: number } | null = null;\n\n for (const node of graph.allNodes()) {\n if (node.filePath !== filePath) continue;\n if (!['function', 'method'].includes(node.kind)) continue;\n if (!node.startLine) continue;\n if (node.startLine <= line) {\n if (!best || node.startLine > best.startLine) {\n best = { id: node.id, startLine: node.startLine };\n }\n }\n }\n\n return best?.id ?? null;\n}\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const clusterPhase: Phase = {\n name: 'cluster',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct', 'trait', 'enum']);\n const nodesByDir = new Map<string, { id: string; name: string }[]>();\n\n for (const node of graph.allNodes()) {\n if (!relevantKinds.has(node.kind)) continue;\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = nodesByDir.get(dir);\n if (!group) {\n group = [];\n nodesByDir.set(dir, group);\n }\n group.push({ id: node.id, name: node.name });\n }\n\n let clusterCount = 0;\n for (const [dir, members] of nodesByDir) {\n if (members.length < 2) continue;\n\n const clusterId = generateNodeId('cluster', dir, `cluster-${clusterCount}`);\n const label = dir.split('/').filter(Boolean).pop() ?? `cluster-${clusterCount}`;\n\n graph.addNode({\n id: clusterId,\n kind: 'cluster',\n name: label,\n filePath: dir,\n metadata: { memberCount: members.length },\n });\n\n for (const member of members) {\n graph.addEdge({\n id: generateEdgeId(member.id, clusterId, 'belongs_to'),\n source: member.id,\n target: clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n clusterCount++;\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${clusterCount} clusters`,\n };\n },\n};\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const flowPhase: Phase = {\n name: 'flow',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n // Find entry points: exported functions with no incoming call edges\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: { id: string; name: string; score: number; filePath: string }[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n let score = 0;\n const hasCallers = calledNodes.has(node.id);\n const outCalls = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n\n if (!hasCallers && outCalls.length > 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen|bootstrap)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec') || node.filePath.includes('__test')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller') || node.filePath.includes('handler')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({ id: node.id, name: node.name, score, filePath: node.filePath });\n }\n }\n\n entryPoints.sort((a, b) => b.score - a.score);\n\n // Trace flows from top entry points (max 20)\n const maxFlows = 75;\n const maxDepth = 10;\n const maxBranching = 4;\n let flowCount = 0;\n\n for (const ep of entryPoints.slice(0, 20)) {\n if (flowCount >= maxFlows) break;\n\n // BFS trace\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: ep.id, path: [ep.id] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flowCount < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n // Record flow\n const flowId = generateNodeId('flow', ep.filePath, `flow-${flowCount}`);\n graph.addNode({\n id: flowId,\n kind: 'flow',\n name: `${ep.name} flow ${flowCount}`,\n filePath: ep.filePath,\n metadata: { steps: path, entryPoint: ep.name },\n });\n\n // Add step_of edges\n for (let i = 0; i < path.length; i++) {\n graph.addEdge({\n id: generateEdgeId(path[i], flowId, `step_of_${i}`),\n source: path[i],\n target: flowId,\n kind: 'step_of',\n weight: 1.0,\n label: `step ${i + 1}`,\n });\n }\n\n flowCount++;\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${entryPoints.length} entry points, traced ${flowCount} flows`,\n };\n },\n};\n","export interface Scope {\n name: string;\n kind: 'module' | 'function' | 'block' | 'class';\n parent: Scope | null;\n bindings: Map<string, ScopeBinding>;\n children: Scope[];\n}\n\nexport interface ScopeBinding {\n name: string;\n nodeId: string;\n kind: 'variable' | 'function' | 'class' | 'parameter' | 'import';\n}\n\nexport function createScope(\n name: string,\n kind: Scope['kind'],\n parent: Scope | null = null,\n): Scope {\n const scope: Scope = { name, kind, parent, bindings: new Map(), children: [] };\n parent?.children.push(scope);\n return scope;\n}\n\nexport function resolveBinding(name: string, scope: Scope): ScopeBinding | null {\n let current: Scope | null = scope;\n while (current !== null) {\n const binding = current.bindings.get(name);\n if (binding) return binding;\n current = current.parent;\n }\n return null;\n}\n\nexport function addBinding(scope: Scope, binding: ScopeBinding): void {\n scope.bindings.set(binding.name, binding);\n}\n","import type { CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateNodeId, generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ClusterResult {\n clusterId: string;\n label: string;\n memberIds: string[];\n}\n\nexport function detectCommunities(graph: KnowledgeGraph): ClusterResult[] {\n // Build adjacency for relevant node kinds\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct']);\n const nodes: CodeNode[] = [];\n\n for (const node of graph.allNodes()) {\n if (relevantKinds.has(node.kind)) {\n nodes.push(node);\n }\n }\n\n if (nodes.length < 10) return [];\n\n // Group by file directory as simple heuristic clustering\n const dirGroups = new Map<string, CodeNode[]>();\n for (const node of nodes) {\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = dirGroups.get(dir);\n if (!group) {\n group = [];\n dirGroups.set(dir, group);\n }\n group.push(node);\n }\n\n const clusters: ClusterResult[] = [];\n let idx = 0;\n\n for (const [dir, members] of dirGroups) {\n if (members.length < 2) continue;\n const clusterId = generateNodeId('cluster', dir, `cluster-${idx}`);\n const label = generateLabel(dir, members);\n\n clusters.push({\n clusterId,\n label,\n memberIds: members.map((m) => m.id),\n });\n idx++;\n }\n\n return clusters;\n}\n\nfunction generateLabel(dir: string, members: CodeNode[]): string {\n const parts = dir.split('/').filter(Boolean);\n if (parts.length > 0) {\n return parts[parts.length - 1];\n }\n return `cluster-${members[0]?.name ?? 'unknown'}`;\n}\n\nexport function addClustersToGraph(graph: KnowledgeGraph, clusters: ClusterResult[]): void {\n for (const cluster of clusters) {\n graph.addNode({\n id: cluster.clusterId,\n kind: 'cluster',\n name: cluster.label,\n filePath: '',\n metadata: { memberCount: cluster.memberIds.length },\n });\n\n for (const memberId of cluster.memberIds) {\n graph.addEdge({\n id: generateEdgeId(memberId, cluster.clusterId, 'belongs_to'),\n source: memberId,\n target: cluster.clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n }\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EntryPoint {\n nodeId: string;\n name: string;\n score: number;\n filePath: string;\n}\n\nexport function findEntryPoints(graph: KnowledgeGraph): EntryPoint[] {\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: EntryPoint[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n const outEdges = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n const inDegree = calledNodes.has(node.id) ? 1 : 0;\n\n let score = 0;\n if (outEdges.length > 0 && inDegree === 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({\n nodeId: node.id,\n name: node.name,\n score,\n filePath: node.filePath,\n });\n }\n }\n\n return entryPoints.sort((a, b) => b.score - a.score);\n}\n\nexport interface FlowTrace {\n entryPointId: string;\n steps: string[];\n}\n\nexport function traceFlow(\n entryId: string,\n graph: KnowledgeGraph,\n maxDepth = 10,\n maxBranching = 4,\n): FlowTrace[] {\n const flows: FlowTrace[] = [];\n const maxFlows = 75;\n\n function bfs(): void {\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: entryId, path: [entryId] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flows.length < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n flows.push({ entryPointId: entryId, steps: [...path] });\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n bfs();\n return deduplicateFlows(flows);\n}\n\nfunction deduplicateFlows(flows: FlowTrace[]): FlowTrace[] {\n const result: FlowTrace[] = [];\n\n for (const flow of flows) {\n const edges = new Set<string>();\n for (let i = 0; i < flow.steps.length - 1; i++) {\n edges.add(`${flow.steps[i]}->${flow.steps[i + 1]}`);\n }\n\n const isDuplicate = result.some((existing) => {\n const existingEdges = new Set<string>();\n for (let i = 0; i < existing.steps.length - 1; i++) {\n existingEdges.add(`${existing.steps[i]}->${existing.steps[i + 1]}`);\n }\n let overlap = 0;\n for (const e of edges) {\n if (existingEdges.has(e)) overlap++;\n }\n return overlap / Math.max(edges.size, 1) > 0.7;\n });\n\n if (!isDuplicate) result.push(flow);\n }\n\n return result;\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface SearchResult {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number;\n snippet?: string;\n}\n\nexport function textSearch(\n graph: KnowledgeGraph,\n query: string,\n limit = 20,\n): SearchResult[] {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n const results: SearchResult[] = [];\n\n // Deprioritize test/dist paths\n const isTestPath = (fp: string) =>\n fp.includes('test') || fp.includes('spec') || fp.includes('__test');\n const isDistPath = (fp: string) =>\n fp.includes('/dist') || fp.includes('\\\\dist') || fp.includes('.d.ts');\n\n for (const node of graph.allNodes()) {\n if (['directory', 'cluster', 'flow'].includes(node.kind)) continue;\n\n let score = 0;\n const nameLC = node.name.toLowerCase();\n const pathLC = node.filePath.toLowerCase();\n\n for (const term of terms) {\n if (nameLC === term) score += 10;\n else if (nameLC.startsWith(term)) score += 7;\n else if (nameLC.includes(term)) score += 5;\n if (pathLC.includes(term)) score += 2;\n if (node.content?.toLowerCase().includes(term)) score += 3;\n }\n\n // Boost source files over compiled/test files\n if (score > 0) {\n if (isDistPath(node.filePath)) score -= 8;\n if (isTestPath(node.filePath)) score -= 4;\n // Boost by kind relevance\n if (['function', 'class', 'interface', 'method'].includes(node.kind)) score += 1;\n }\n\n if (score > 0) {\n results.push({\n nodeId: node.id,\n name: node.name,\n kind: node.kind,\n filePath: node.filePath,\n score,\n snippet: node.content?.slice(0, 200),\n });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, limit);\n}\n\nexport function reciprocalRankFusion(\n ...rankings: SearchResult[][]\n): SearchResult[] {\n const K = 60;\n const scoreMap = new Map<string, { result: SearchResult; rrfScore: number }>();\n\n for (const ranking of rankings) {\n for (let rank = 0; rank < ranking.length; rank++) {\n const result = ranking[rank];\n const existing = scoreMap.get(result.nodeId);\n const rrfContribution = 1 / (K + rank + 1);\n\n if (existing) {\n existing.rrfScore += rrfContribution;\n } else {\n scoreMap.set(result.nodeId, {\n result,\n rrfScore: rrfContribution,\n });\n }\n }\n }\n\n return [...scoreMap.values()]\n .sort((a, b) => b.rrfScore - a.rrfScore)\n .map((entry) => ({ ...entry.result, score: entry.rrfScore }));\n}\n","export { textSearch, reciprocalRankFusion } from './text-search.js';\nexport type { SearchResult } from './text-search.js';\nexport { embedNodes } from './embedder.js';\nexport type { EmbeddedNode } from './embedder.js';\nexport { VectorIndex } from './vector-index.js';\nexport type { VectorHit } from './vector-index.js';\n\n","import { DbManager } from '../storage/db-manager.js';\nimport type { EmbeddedNode } from './embedder.js';\n\nconst EMBED_TABLE = 'embed_nodes';\nconst EMBED_DIM = 384; // all-MiniLM-L6-v2 output dimension\nconst INDEX_NAME = 'embed_vec_idx';\n\nexport class VectorIndex {\n private db: DbManager;\n\n constructor(db: DbManager) {\n this.db = db;\n }\n\n async init(): Promise<void> {\n // Install + load VECTOR extension\n await this.db.execute('INSTALL VECTOR');\n await this.db.execute('LOAD EXTENSION VECTOR');\n\n // Create node table for embeddings\n await this.db.execute(`\n CREATE NODE TABLE IF NOT EXISTS ${EMBED_TABLE} (\n id STRING,\n name STRING,\n kind STRING,\n file_path STRING,\n text STRING,\n embedding FLOAT[${EMBED_DIM}],\n PRIMARY KEY (id)\n )\n `);\n }\n\n async buildIndex(nodes: EmbeddedNode[]): Promise<void> {\n // Drop existing data\n await this.db.execute(`MATCH (n:${EMBED_TABLE}) DETACH DELETE n`).catch(() => {});\n\n // Insert embeddings\n for (const node of nodes) {\n const vecLiteral = `[${node.embedding.join(',')}]`;\n await this.db.execute(\n `CREATE (:${EMBED_TABLE} {\n id: '${esc(node.id)}',\n name: '${esc(node.name)}',\n kind: '${esc(node.kind)}',\n file_path: '${esc(node.filePath)}',\n text: '${esc(node.text)}',\n embedding: ${vecLiteral}\n })`,\n );\n }\n\n // Drop and recreate vector index (signature: tableName, indexName, propertyName)\n await this.db.execute(`CALL DROP_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}')`).catch(() => {});\n await this.db.execute(`CALL CREATE_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', 'embedding')`);\n // Do NOT close the DB - keep connection open for searches\n }\n\n async search(queryEmbedding: number[], topK = 10): Promise<VectorHit[]> {\n const vecLiteral = `[${queryEmbedding.join(',')}]`;\n const rows = await this.db.query(\n `CALL QUERY_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', ${vecLiteral}, ${topK}) RETURN node.id, node.name, node.kind, node.file_path, distance`,\n );\n return rows.map((r) => ({\n nodeId: String(r['node.id']),\n name: String(r['node.name']),\n kind: String(r['node.kind']),\n filePath: String(r['node.file_path']),\n score: 1 - Number(r['distance']), // cosine distance → similarity\n }));\n }\n\n async isBuilt(): Promise<boolean> {\n try {\n const rows = await this.db.query(`MATCH (n:${EMBED_TABLE}) RETURN count(n) AS cnt`);\n return Number(rows[0]?.cnt ?? 0) > 0;\n } catch {\n return false;\n }\n }\n}\n\nexport interface VectorHit {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number; // 0..1 where 1 = most similar\n}\n\nfunction esc(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport fs from 'node:fs';\n\nexport function createMcpServer(graph: KnowledgeGraph, repoName: string): Server {\n const server = new Server(\n { name: 'code-intel', version: '0.1.0' },\n { capabilities: { tools: {}, resources: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n {\n name: 'repos',\n description: 'List indexed repositories',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'search',\n description: 'Hybrid search across the codebase knowledge graph',\n inputSchema: {\n type: 'object' as const,\n properties: {\n query: { type: 'string', description: 'Search query' },\n limit: { type: 'number', description: 'Max results (default 20)' },\n },\n required: ['query'],\n },\n },\n {\n name: 'inspect',\n description: '360° view of a symbol: definition, callers, callees, heritage, references',\n inputSchema: {\n type: 'object' as const,\n properties: {\n symbol_name: { type: 'string', description: 'Symbol name to inspect' },\n },\n required: ['symbol_name'],\n },\n },\n {\n name: 'blast_radius',\n description: 'Impact analysis: what depends on / is affected by this symbol',\n inputSchema: {\n type: 'object' as const,\n properties: {\n target: { type: 'string', description: 'Target symbol name' },\n direction: { type: 'string', enum: ['callers', 'callees', 'both'], description: 'Direction to trace' },\n max_hops: { type: 'number', description: 'Max hops (default 5)' },\n },\n required: ['target'],\n },\n },\n {\n name: 'routes',\n description: 'List route handler mappings in the codebase',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'raw_query',\n description: 'Execute a graph query (simplified Cypher-like)',\n inputSchema: {\n type: 'object' as const,\n properties: {\n cypher: { type: 'string', description: 'Query string (name=\\'X\\' or :kind patterns)' },\n },\n required: ['cypher'],\n },\n },\n ],\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n const a = (args ?? {}) as Record<string, unknown>;\n\n switch (name) {\n case 'repos': {\n return { content: [{ type: 'text', text: JSON.stringify([{ name: repoName, nodes: graph.size.nodes, edges: graph.size.edges }], null, 2) }] };\n }\n\n case 'search': {\n const query = a.query as string;\n const limit = (a.limit as number) ?? 20;\n const results = textSearch(graph, query, limit);\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n\n case 'inspect': {\n const symbolName = a.symbol_name as string;\n const node = findNodeByName(graph, symbolName);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${symbolName}\" not found` }] };\n\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n node: { id: node.id, kind: node.kind, name: node.name, filePath: node.filePath, startLine: node.startLine, endLine: node.endLine, exported: node.exported },\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({ id: e.source, name: graph.getNode(e.source)?.name })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({ id: e.target, name: graph.getNode(e.target)?.name })),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => graph.getNode(e.target)?.name),\n implements: outgoing.filter((e) => e.kind === 'implements').map((e) => graph.getNode(e.target)?.name),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({ name: graph.getNode(e.target)?.name, kind: graph.getNode(e.target)?.kind })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => graph.getNode(e.target)?.name)[0],\n content: node.content?.slice(0, 500),\n }, null, 2),\n }],\n };\n }\n\n case 'blast_radius': {\n const target = a.target as string;\n const direction = (a.direction as string) ?? 'both';\n const maxHops = (a.max_hops as number) ?? 5;\n const node = findNodeByName(graph, target);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${target}\" not found` }] };\n\n const affected = new Set<string>();\n const queue: { id: string; depth: number }[] = [{ id: node.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > maxHops) continue;\n visited.add(id);\n affected.add(id);\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n if (direction === 'callees' || direction === 'both') {\n for (const edge of graph.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n\n const affectedDetails = [...affected].map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n return { content: [{ type: 'text', text: JSON.stringify({ target: node.name, affectedCount: affected.size, affected: affectedDetails }, null, 2) }] };\n }\n\n case 'routes': {\n const routes: { name: string; filePath: string }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'route' || (node.kind === 'function' && /route|handler|controller/i.test(node.filePath))) {\n routes.push({ name: node.name, filePath: node.filePath });\n }\n }\n return { content: [{ type: 'text', text: JSON.stringify(routes, null, 2) }] };\n }\n\n case 'raw_query': {\n const q = a.cypher as string;\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === nameMatch[1]) results.push(node);\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kindMatch[1]) results.push(node);\n if (results.length >= 50) break;\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n return { content: [{ type: 'text', text: 'Query not recognized' }] };\n }\n\n default:\n return { content: [{ type: 'text', text: `Unknown tool: ${name}` }] };\n }\n });\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n { uri: `codeintel://repo/${repoName}/overview`, name: `${repoName} Overview`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/clusters`, name: `${repoName} Clusters`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/flows`, name: `${repoName} Flows`, mimeType: 'application/json' },\n ],\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n if (uri.endsWith('/overview')) {\n const kindCounts: Record<string, number> = {};\n for (const node of graph.allNodes()) {\n kindCounts[node.kind] = (kindCounts[node.kind] ?? 0) + 1;\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify({ repo: repoName, stats: graph.size, nodeCounts: kindCounts }) }] };\n }\n\n if (uri.endsWith('/clusters')) {\n const clusters = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') clusters.push({ id: node.id, name: node.name, memberCount: node.metadata?.memberCount });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(clusters) }] };\n }\n\n if (uri.endsWith('/flows')) {\n const flows = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') flows.push({ id: node.id, name: node.name, steps: node.metadata?.steps, entryPoint: node.metadata?.entryPoint });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(flows) }] };\n }\n\n throw new Error(`Unknown resource: ${uri}`);\n });\n\n return server;\n}\n\nexport async function startMcpStdio(graph: KnowledgeGraph, repoName: string): Promise<void> {\n const server = createMcpServer(graph, repoName);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\nfunction findNodeByName(graph: KnowledgeGraph, name: string) {\n for (const node of graph.allNodes()) {\n if (node.name === name) return node;\n }\n return undefined;\n}\n","import { Database, Connection } from '@ladybugdb/core';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nexport class DbManager {\n private db: InstanceType<typeof Database> | null = null;\n private conn: InstanceType<typeof Connection> | null = null;\n private dbPath: string;\n\n constructor(dbPath: string) {\n this.dbPath = dbPath;\n }\n\n async init(): Promise<void> {\n fs.mkdirSync(path.dirname(this.dbPath), { recursive: true });\n this.db = new Database(this.dbPath);\n await this.db.init();\n this.conn = new Connection(this.db);\n await this.conn.init();\n }\n\n async query(cypher: string): Promise<Record<string, unknown>[]> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n const rows = await qr.getAll();\n qr.close();\n return rows as Record<string, unknown>[];\n }\n\n async execute(cypher: string): Promise<void> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n qr.close();\n }\n\n close(): void {\n try {\n this.conn?.close();\n } catch { /* ignore */ }\n try {\n this.db?.close();\n } catch { /* ignore */ }\n this.conn = null;\n this.db = null;\n }\n\n get isOpen(): boolean {\n return this.conn !== null;\n }\n}\n","import type { NodeKind } from '../shared/index.js';\n\nexport const NODE_TABLE_MAP: Record<NodeKind, string> = {\n file: 'file_nodes',\n directory: 'dir_nodes',\n function: 'func_nodes',\n class: 'class_nodes',\n interface: 'iface_nodes',\n method: 'method_nodes',\n constructor: 'ctor_nodes',\n variable: 'var_nodes',\n property: 'prop_nodes',\n struct: 'struct_nodes',\n enum: 'enum_nodes',\n trait: 'trait_nodes',\n namespace: 'ns_nodes',\n module: 'mod_nodes',\n type_alias: 'type_nodes',\n constant: 'const_nodes',\n route: 'route_nodes',\n cluster: 'cluster_nodes',\n flow: 'flow_nodes',\n};\n\nexport const ALL_NODE_TABLES = [...new Set(Object.values(NODE_TABLE_MAP))];\n\nexport function getCreateNodeTableDDL(tableName: string): string {\n return `CREATE NODE TABLE IF NOT EXISTS ${tableName} (\n id STRING,\n name STRING,\n file_path STRING,\n start_line INT64,\n end_line INT64,\n exported BOOLEAN,\n content STRING,\n metadata STRING,\n PRIMARY KEY (id)\n)`;\n}\n\nexport function getCreateEdgeTableDDL(): string[] {\n const ddls: string[] = [];\n const uniqueTables = ALL_NODE_TABLES;\n\n // Create edge table connecting all node table pairs\n const fromToPairs: string[] = [];\n for (const from of uniqueTables) {\n for (const to of uniqueTables) {\n fromToPairs.push(`FROM ${from} TO ${to}`);\n }\n }\n\n ddls.push(`CREATE REL TABLE IF NOT EXISTS code_edges (\n ${fromToPairs.join(',\\n ')},\n kind STRING,\n weight DOUBLE,\n label STRING\n)`);\n\n return ddls;\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from './db-manager.js';\nimport { ALL_NODE_TABLES, getCreateNodeTableDDL, getCreateEdgeTableDDL, NODE_TABLE_MAP } from './schema.js';\nimport type { CodeNode } from '../shared/index.js';\n\nexport async function loadGraphToDB(\n graph: KnowledgeGraph,\n dbManager: DbManager,\n): Promise<{ nodeCount: number; edgeCount: number }> {\n // Create all node tables\n for (const table of ALL_NODE_TABLES) {\n await dbManager.execute(getCreateNodeTableDDL(table));\n }\n\n // Create edge table\n const edgeDDLs = getCreateEdgeTableDDL();\n for (const ddl of edgeDDLs) {\n try {\n await dbManager.execute(ddl);\n } catch {\n // Edge table with all pairs might fail, use simpler approach\n }\n }\n\n // Insert nodes via Cypher\n let nodeCount = 0;\n for (const node of graph.allNodes()) {\n const table = NODE_TABLE_MAP[node.kind];\n const props = buildNodeProps(node);\n try {\n await dbManager.execute(`CREATE (:${table} ${props})`);\n nodeCount++;\n } catch {\n // Skip duplicate or invalid nodes\n }\n }\n\n // Insert edges via Cypher\n let edgeCount = 0;\n for (const edge of graph.allEdges()) {\n const sourceNode = graph.getNode(edge.source);\n const targetNode = graph.getNode(edge.target);\n if (!sourceNode || !targetNode) continue;\n\n const fromTable = NODE_TABLE_MAP[sourceNode.kind];\n const toTable = NODE_TABLE_MAP[targetNode.kind];\n\n try {\n await dbManager.execute(\n `MATCH (a:${fromTable} {id: '${escCypher(edge.source)}'}), (b:${toTable} {id: '${escCypher(edge.target)}'}) ` +\n `CREATE (a)-[:code_edges {kind: '${edge.kind}', weight: ${edge.weight ?? 1.0}, label: '${escCypher(edge.label ?? '')}'}]->(b)`,\n );\n edgeCount++;\n } catch {\n // Skip invalid edges\n }\n }\n\n return { nodeCount, edgeCount };\n}\n\nfunction buildNodeProps(node: CodeNode): string {\n const parts: string[] = [\n `id: '${escCypher(node.id)}'`,\n `name: '${escCypher(node.name)}'`,\n `file_path: '${escCypher(node.filePath)}'`,\n ];\n if (node.startLine !== undefined) parts.push(`start_line: ${node.startLine}`);\n if (node.endLine !== undefined) parts.push(`end_line: ${node.endLine}`);\n if (node.exported !== undefined) parts.push(`exported: ${node.exported}`);\n if (node.content) parts.push(`content: '${escCypher(node.content.slice(0, 500))}'`);\n if (node.metadata) parts.push(`metadata: '${escCypher(JSON.stringify(node.metadata))}'`);\n return `{${parts.join(', ')}}`;\n}\n\nfunction escCypher(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nexport interface RepoEntry {\n name: string;\n path: string;\n indexedAt: string;\n stats: { nodes: number; edges: number; files: number };\n}\n\nconst GLOBAL_DIR = path.join(os.homedir(), '.code-intel');\nconst REPOS_FILE = path.join(GLOBAL_DIR, 'repos.json');\n\nexport function loadRegistry(): RepoEntry[] {\n try {\n const data = fs.readFileSync(REPOS_FILE, 'utf-8');\n return JSON.parse(data);\n } catch {\n return [];\n }\n}\n\nexport function saveRegistry(entries: RepoEntry[]): void {\n fs.mkdirSync(GLOBAL_DIR, { recursive: true });\n fs.writeFileSync(REPOS_FILE, JSON.stringify(entries, null, 2));\n}\n\nexport function upsertRepo(entry: RepoEntry): void {\n const entries = loadRegistry();\n const idx = entries.findIndex((e) => e.path === entry.path);\n if (idx >= 0) {\n entries[idx] = entry;\n } else {\n entries.push(entry);\n }\n saveRegistry(entries);\n}\n\nexport function removeRepo(repoPath: string): void {\n const entries = loadRegistry().filter((e) => e.path !== repoPath);\n saveRegistry(entries);\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface IndexMetadata {\n indexedAt: string;\n commitHash?: string;\n stats: {\n nodes: number;\n edges: number;\n files: number;\n duration: number;\n };\n}\n\nexport function saveMetadata(repoDir: string, metadata: IndexMetadata): void {\n const metaDir = path.join(repoDir, '.code-intel');\n fs.mkdirSync(metaDir, { recursive: true });\n fs.writeFileSync(path.join(metaDir, 'meta.json'), JSON.stringify(metadata, null, 2));\n}\n\nexport function loadMetadata(repoDir: string): IndexMetadata | null {\n try {\n const data = fs.readFileSync(path.join(repoDir, '.code-intel', 'meta.json'), 'utf-8');\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\nexport function getDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'graph.db');\n}\n\nexport function getVectorDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'vector.db');\n}\n","import express from 'express';\nimport cors from 'cors';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport { findEntryPoints, traceFlow } from '../flow-detection/entry-point-finder.js';\nimport { DbManager, getDbPath, getVectorDbPath } from '../storage/index.js';\nimport { VectorIndex } from '../search/vector-index.js';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { listGroups, loadGroup, loadSyncResult, saveSyncResult } from '../multi-repo/group-registry.js';\nimport { syncGroup } from '../multi-repo/group-sync.js';\nimport { queryGroup } from '../multi-repo/group-query.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from '../multi-repo/graph-from-db.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n// Resolve web dist: <core>/dist/http -> ../../web/dist\nconst WEB_DIST = path.resolve(__dirname, '..', '..', '..', 'web', 'dist');\n\nexport function createApp(graph: KnowledgeGraph, repoName: string, workspaceRoot?: string): express.Application {\n const app = express();\n\n app.use(cors({ origin: true }));\n app.use(express.json({ limit: '10mb' }));\n\n // Lazy-init vector index state\n let vectorIndex: VectorIndex | null = null;\n let vectorIndexBuilding = false;\n let vectorIndexReady = false;\n\n async function ensureVectorIndex(): Promise<VectorIndex | null> {\n if (vectorIndexReady && vectorIndex) return vectorIndex;\n if (!workspaceRoot || vectorIndexBuilding) return null;\n vectorIndexBuilding = true;\n try {\n const { embedNodes } = await import('../search/embedder.js');\n const dbPath = getVectorDbPath(workspaceRoot);\n const db = new DbManager(dbPath);\n await db.init();\n const idx = new VectorIndex(db);\n await idx.init();\n const alreadyBuilt = await idx.isBuilt();\n if (!alreadyBuilt) {\n console.log(' [vector] Building embeddings…');\n const nodes = await embedNodes(graph, {\n onProgress: (done, total) => {\n if (done % 50 === 0 || done === total) process.stdout.write(`\\r [vector] ${done}/${total}`);\n },\n });\n console.log('');\n await idx.buildIndex(nodes);\n console.log(` [vector] Index built: ${nodes.length} embeddings`);\n } else {\n console.log(' [vector] Index already exists, skipping rebuild.');\n }\n vectorIndex = idx;\n vectorIndexReady = true;\n return idx;\n } catch (err) {\n console.warn(' [vector] Index build failed:', err instanceof Error ? err.message : err);\n return null;\n } finally {\n vectorIndexBuilding = false;\n }\n }\n\n // Kick off in background when workspace is available\n if (workspaceRoot) {\n setImmediate(() => ensureVectorIndex().catch(() => {}));\n }\n\n // Health check\n app.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', nodes: graph.size.nodes, edges: graph.size.edges });\n });\n\n // List repos\n app.get('/api/repos', (_req, res) => {\n res.json([{ name: repoName, nodes: graph.size.nodes, edges: graph.size.edges }]);\n });\n\n // Download full graph\n app.get('/api/graph/:repo', (_req, res) => {\n const nodes = [...graph.allNodes()];\n const edges = [...graph.allEdges()];\n res.json({ nodes, edges });\n });\n\n // Hybrid search (BM25-like text)\n app.post('/api/search', (req, res) => {\n const { query, limit } = req.body;\n const results = textSearch(graph, query, limit ?? 20);\n res.json({ results });\n });\n\n // Vector search (semantic)\n app.post('/api/vector-search', async (req, res) => {\n const { query, limit = 10 } = req.body;\n if (!query) { res.status(400).json({ error: 'Missing query' }); return; }\n\n const idx = await ensureVectorIndex();\n if (!idx) {\n // Fall back to text search\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false });\n return;\n }\n\n try {\n // Embed the query using @huggingface/transformers\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const embedder = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as (text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>;\n const out = await embedder(query, { pooling: 'mean', normalize: true });\n const queryEmbedding = Array.from(out.data);\n const hits = await idx.search(queryEmbedding, limit);\n // Map to SearchResult shape\n const results = hits.map((h) => ({\n nodeId: h.nodeId,\n name: h.name,\n kind: h.kind,\n filePath: h.filePath,\n score: h.score,\n }));\n res.json({ results, source: 'vector', vectorReady: true });\n } catch (err) {\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false, error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Vector index status\n app.get('/api/vector-status', (_req, res) => {\n res.json({ ready: vectorIndexReady, building: vectorIndexBuilding });\n });\n\n // Read file\n app.post('/api/files/read', (req, res) => {\n const { file_path } = req.body;\n try {\n const content = fs.readFileSync(file_path, 'utf-8');\n res.json({ content });\n } catch {\n res.status(404).json({ error: 'File not found' });\n }\n });\n\n // Grep (regex search in files)\n app.post('/api/grep', (req, res) => {\n const { pattern, file_paths } = req.body;\n const results: { file: string; line: number; text: string }[] = [];\n\n try {\n const regex = new RegExp(pattern, 'gi');\n const paths: string[] = file_paths ?? [];\n\n // If no paths, search from graph nodes\n if (paths.length === 0) {\n for (const node of graph.allNodes()) {\n if (node.kind === 'file' && node.content) {\n const lines = node.content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i])) {\n results.push({ file: node.filePath, line: i + 1, text: lines[i].trim() });\n }\n regex.lastIndex = 0;\n }\n }\n }\n }\n\n res.json({ results: results.slice(0, 100) });\n } catch {\n res.status(400).json({ error: 'Invalid regex pattern' });\n }\n });\n\n // Cypher query — routed to LadybugDB if available, else falls back to in-memory\n app.post('/api/cypher', async (req, res) => {\n const { query: q } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query' }); return; }\n\n // Try LadybugDB first\n if (workspaceRoot) {\n try {\n const dbPath = getDbPath(workspaceRoot);\n const dbm = new DbManager(dbPath);\n await dbm.init();\n const rows = await dbm.query(q);\n dbm.close();\n res.json({ results: rows });\n return;\n } catch (err) {\n // Fall through to in-memory fallback\n }\n }\n\n // In-memory fallback\n try {\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const name = nameMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === name) {\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n results.push({ node, incoming: incoming.length, outgoing: outgoing.length });\n }\n }\n res.json({ results });\n return;\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const kind = kindMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kind) results.push(node);\n if (results.length >= 50) break;\n }\n res.json({ results });\n return;\n }\n res.json({ results: [], message: 'Query not recognized.' });\n } catch {\n res.status(400).json({ error: 'Invalid query' });\n }\n });\n\n // Get node detail (inspect)\n app.get('/api/nodes/:id', (req, res) => {\n const nodeId = decodeURIComponent(req.params.id);\n const node = graph.getNode(nodeId);\n if (!node) {\n res.status(404).json({ error: 'Node not found' });\n return;\n }\n\n const incoming = [...graph.findEdgesTo(nodeId)];\n const outgoing = [...graph.findEdgesFrom(nodeId)];\n\n res.json({\n node,\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.source,\n name: graph.getNode(e.source)?.name,\n weight: e.weight,\n })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n weight: e.weight,\n })),\n imports: outgoing.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n importedBy: incoming.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.source,\n name: graph.getNode(e.source)?.name,\n })),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n implementsEdges: outgoing.filter((e) => e.kind === 'implements').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n })),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({\n id: e.target,\n name: graph.getNode(e.target)?.name,\n kind: graph.getNode(e.target)?.kind,\n })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => graph.getNode(e.target)?.name)[0],\n });\n });\n\n // Blast radius\n app.post('/api/blast-radius', (req, res) => {\n const { target, direction = 'both', max_hops = 5 } = req.body;\n\n // Find the node\n let targetNode = null;\n for (const node of graph.allNodes()) {\n if (node.name === target || node.id === target) {\n targetNode = node;\n break;\n }\n }\n\n if (!targetNode) {\n res.status(404).json({ error: `Symbol \"${target}\" not found` });\n return;\n }\n\n const affected = new Map<string, { name: string; kind: string; depth: number }>();\n const queue: { id: string; depth: number }[] = [{ id: targetNode.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > max_hops) continue;\n visited.add(id);\n\n const node = graph.getNode(id);\n if (node) {\n affected.set(id, { name: node.name, kind: node.kind, depth });\n }\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') {\n queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n }\n\n if (direction === 'callees' || direction === 'both') {\n for (const edge of graph.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') {\n queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n }\n\n res.json({\n target: targetNode.name,\n affectedCount: [...affected.values()].filter((a) => a.depth > 0).length,\n affected: [...affected.entries()]\n .map(([id, info]) => ({ id, ...info }))\n .filter((a) => a.depth > 0),\n });\n });\n\n // Flows\n app.get('/api/flows', (_req, res) => {\n const flows: { id: string; name: string; steps: unknown }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') {\n flows.push({\n id: node.id,\n name: node.name,\n steps: node.metadata?.steps,\n });\n }\n }\n res.json({ flows });\n });\n\n // Clusters\n app.get('/api/clusters', (_req, res) => {\n const clusters: { id: string; name: string; memberCount: number }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') {\n clusters.push({\n id: node.id,\n name: node.name,\n memberCount: (node.metadata?.memberCount as number) ?? 0,\n });\n }\n }\n res.json({ clusters });\n });\n\n // ── Group routes ──────────────────────────────────────────────────────────────\n app.get('/api/groups', (_req, res) => {\n const groups = listGroups();\n res.json(groups.map((g) => ({\n name: g.name,\n memberCount: g.members.length,\n lastSync: g.lastSync ?? null,\n createdAt: g.createdAt,\n })));\n });\n\n app.get('/api/groups/:name', (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n res.json(group);\n });\n\n app.get('/api/groups/:name/contracts', (req, res) => {\n const result = loadSyncResult(req.params.name);\n if (!result) { res.status(404).json({ error: 'No sync result. Run sync first.' }); return; }\n res.json(result);\n });\n\n app.post('/api/groups/:name/sync', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n try {\n const result = await syncGroup(group);\n saveSyncResult(result);\n // Update lastSync on group\n group.lastSync = result.syncedAt;\n const { saveGroup } = await import('../multi-repo/group-registry.js');\n saveGroup(group);\n res.json(result);\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.post('/api/groups/:name/search', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const { q, limit = 20 } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query q' }); return; }\n try {\n const { perRepo, merged } = await queryGroup(group, q, limit);\n res.json({ perRepo, merged });\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.get('/api/groups/:name/graph', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const registry = loadRegistry();\n const mergedGraph = createKnowledgeGraph();\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(mergedGraph, db);\n db.close();\n } catch { db.close(); }\n }\n res.json({ nodes: [...mergedGraph.allNodes()], edges: [...mergedGraph.allEdges()] });\n });\n\n // Serve web UI static files\n if (fs.existsSync(WEB_DIST)) {\n app.use(express.static(WEB_DIST));\n app.get('/{*path}', (_req, res) => {\n res.sendFile(path.join(WEB_DIST, 'index.html'));\n });\n }\n\n return app;\n}\n\nexport function startHttpServer(\n graph: KnowledgeGraph,\n repoName: string,\n port = 4747,\n workspaceRoot?: string,\n): void {\n const app = createApp(graph, repoName, workspaceRoot);\n app.listen(port, () => {\n console.log(`Code Intelligence server running at http://localhost:${port}`);\n console.log(` Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`);\n });\n}\n","/**\n * graph-from-db.ts\n * Loads a KnowledgeGraph from a persisted LadybugDB graph.db.\n * Used by group-sync to read each repo's index without re-analyzing.\n */\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { ALL_NODE_TABLES, NODE_TABLE_MAP } from '../storage/schema.js';\nimport type { CodeNode, CodeEdge, NodeKind, EdgeKind } from '../shared/index.js';\n\n// Reverse map: tableName → NodeKind\nconst TABLE_TO_KIND: Record<string, NodeKind> = Object.fromEntries(\n Object.entries(NODE_TABLE_MAP).map(([kind, table]) => [table, kind as NodeKind]),\n);\n\nfunction parseRow(row: Record<string, unknown>, kind: NodeKind): CodeNode {\n return {\n id: String(row['id'] ?? ''),\n kind,\n name: String(row['name'] ?? ''),\n filePath: String(row['file_path'] ?? ''),\n startLine: row['start_line'] != null ? Number(row['start_line']) : undefined,\n endLine: row['end_line'] != null ? Number(row['end_line']) : undefined,\n exported: row['exported'] != null ? Boolean(row['exported']) : undefined,\n content: row['content'] ? String(row['content']) : undefined,\n metadata: row['metadata'] ? (() => {\n try { return JSON.parse(String(row['metadata'])) as Record<string, unknown>; } catch { return undefined; }\n })() : undefined,\n };\n}\n\nexport async function loadGraphFromDB(\n graph: KnowledgeGraph,\n db: DbManager,\n): Promise<void> {\n // Load all node tables\n for (const table of ALL_NODE_TABLES) {\n const kind = TABLE_TO_KIND[table];\n if (!kind) continue;\n let rows: Record<string, unknown>[] = [];\n try {\n rows = await db.query(`MATCH (n:${table}) RETURN n.id, n.name, n.file_path, n.start_line, n.end_line, n.exported, n.content, n.metadata`);\n } catch {\n // table may not exist in older DBs\n continue;\n }\n for (const row of rows) {\n // kuzu returns column names as aliases\n const node = parseRow({\n id: row['n.id'],\n name: row['n.name'],\n file_path: row['n.file_path'],\n start_line: row['n.start_line'],\n end_line: row['n.end_line'],\n exported: row['n.exported'],\n content: row['n.content'],\n metadata: row['n.metadata'],\n }, kind);\n if (node.id && node.name) graph.addNode(node);\n }\n }\n\n // Load edges\n try {\n const edgeRows = await db.query(\n `MATCH (a)-[e:code_edges]->(b) RETURN a.id, b.id, e.kind, e.weight, e.label`,\n );\n for (const row of edgeRows) {\n const sourceId = String(row['a.id'] ?? '');\n const targetId = String(row['b.id'] ?? '');\n const kind = String(row['e.kind'] ?? '') as EdgeKind;\n if (!sourceId || !targetId || !kind) continue;\n const edge: CodeEdge = {\n id: `${sourceId}::${kind}::${targetId}`,\n source: sourceId,\n target: targetId,\n kind,\n weight: row['e.weight'] != null ? Number(row['e.weight']) : undefined,\n label: row['e.label'] ? String(row['e.label']) : undefined,\n };\n graph.addEdge(edge);\n }\n } catch {\n // edges table may not exist in older DBs\n }\n}\n","/**\n * group-sync.ts\n * Loads each member repo's knowledge graph from its .code-intel/graph.db,\n * extracts contracts (exports, routes, events, schemas), and matches them\n * across repos to produce ContractLinks.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup, Contract, ContractLink, GroupSyncResult } from './types.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph, type KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\n\n// ─── Extract contracts from a single repo's graph ────────────────────────────\n\nfunction extractContracts(\n graph: KnowledgeGraph,\n repoName: string,\n repoPath: string,\n): Contract[] {\n const contracts: Contract[] = [];\n\n for (const node of graph.allNodes()) {\n // exported symbols → 'export' contracts\n if (\n node.exported === true &&\n ['function', 'class', 'interface', 'method', 'type_alias', 'constant', 'enum', 'struct', 'trait'].includes(node.kind)\n ) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'export',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // route nodes → 'route' contracts\n if (node.kind === 'route') {\n contracts.push({\n repoName,\n repoPath,\n kind: 'route',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // interfaces / type aliases with \"event\" or \"schema\" in name → schema/event contracts\n if (['interface', 'type_alias'].includes(node.kind)) {\n const nameLower = node.name.toLowerCase();\n if (nameLower.includes('event') || nameLower.includes('message')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'event',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n } else if (nameLower.includes('schema') || nameLower.includes('dto') || nameLower.includes('request') || nameLower.includes('response')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'schema',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n }\n }\n }\n\n return contracts;\n}\n\n// ─── Match contracts across repos ────────────────────────────────────────────\n\nfunction matchContracts(allContracts: Contract[]): ContractLink[] {\n const links: ContractLink[] = [];\n\n // Group contracts by repo\n const byRepo = new Map<string, Contract[]>();\n for (const c of allContracts) {\n const arr = byRepo.get(c.repoName) ?? [];\n arr.push(c);\n byRepo.set(c.repoName, arr);\n }\n\n const repoNames = [...byRepo.keys()];\n\n for (let i = 0; i < repoNames.length; i++) {\n for (let j = 0; j < repoNames.length; j++) {\n if (i === j) continue;\n const providerContracts = byRepo.get(repoNames[i])!;\n const consumerContracts = byRepo.get(repoNames[j])!;\n\n // Build a name map for the consumer\n const consumerByName = new Map<string, Contract>();\n for (const c of consumerContracts) consumerByName.set(c.name, c);\n\n for (const provider of providerContracts) {\n const consumer = consumerByName.get(provider.name);\n if (consumer) {\n // same-kind matches are more confident\n const sameKind = provider.kind === consumer.kind;\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: consumer.repoName,\n consumerContract: consumer.name,\n matchKind: provider.kind === 'route' ? 'route-match' : 'name-match',\n confidence: sameKind ? 0.9 : 0.6,\n });\n } else {\n // partial-name match (camelCase contained)\n const providerLC = provider.name.toLowerCase();\n for (const c of consumerContracts) {\n if (c.name.toLowerCase().includes(providerLC) || providerLC.includes(c.name.toLowerCase())) {\n if (c.name.length >= 4 && provider.name.length >= 4) {\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: c.repoName,\n consumerContract: c.name,\n matchKind: 'name-match',\n confidence: 0.4,\n });\n }\n }\n }\n }\n }\n }\n }\n\n // Deduplicate: keep highest-confidence for a given (pRepo, pContract, cRepo) triple\n const seen = new Map<string, ContractLink>();\n for (const link of links) {\n const key = `${link.providerRepo}:${link.providerContract}:${link.consumerRepo}:${link.consumerContract}`;\n const existing = seen.get(key);\n if (!existing || link.confidence > existing.confidence) {\n seen.set(key, link);\n }\n }\n\n return [...seen.values()].sort((a, b) => b.confidence - a.confidence);\n}\n\n// ─── Main sync function ───────────────────────────────────────────────────────\n\nexport async function syncGroup(group: RepoGroup): Promise<GroupSyncResult> {\n const registry = loadRegistry();\n const allContracts: Contract[] = [];\n\n for (const member of group.members) {\n // Resolve the actual repo path from the registry\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) {\n console.warn(` ⚠ Registry entry \"${member.registryName}\" not found — skipping ${member.groupPath}`);\n continue;\n }\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) {\n console.warn(` ⚠ No index at ${dbPath} — run \\`code-intel analyze ${regEntry.path}\\` first`);\n continue;\n }\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch (err) {\n db.close();\n console.warn(` ⚠ Could not load graph for \"${member.registryName}\": ${err instanceof Error ? err.message : err}`);\n continue;\n }\n\n const contracts = extractContracts(graph, member.registryName, regEntry.path);\n console.log(` ✓ ${member.registryName} (${member.groupPath}): ${contracts.length} contracts`);\n allContracts.push(...contracts);\n }\n\n const links = matchContracts(allContracts);\n\n return {\n groupName: group.name,\n syncedAt: new Date().toISOString(),\n memberCount: group.members.length,\n contracts: allContracts,\n links,\n };\n}\n","/**\n * group-query.ts\n * Search execution flows across all repos in a group.\n * Loads each repo's graph, runs text search, and merges via RRF.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup } from './types.js';\nimport type { SearchResult } from '../search/text-search.js';\nimport { textSearch, reciprocalRankFusion } from '../search/text-search.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\n\nexport interface GroupQueryResult {\n repoName: string;\n repoPath: string;\n groupPath: string;\n results: SearchResult[];\n}\n\nexport async function queryGroup(\n group: RepoGroup,\n query: string,\n limit = 20,\n): Promise<{ perRepo: GroupQueryResult[]; merged: SearchResult[] }> {\n const registry = loadRegistry();\n const perRepo: GroupQueryResult[] = [];\n const allRankings: SearchResult[][] = [];\n\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch {\n db.close();\n continue;\n }\n\n const results = textSearch(graph, query, limit);\n // Tag each result with repo info via snippet prefix\n const taggedResults: SearchResult[] = results.map((r) => ({\n ...r,\n snippet: `[${member.registryName}] ${r.snippet ?? ''}`.trim(),\n }));\n\n perRepo.push({\n repoName: member.registryName,\n repoPath: regEntry.path,\n groupPath: member.groupPath,\n results: taggedResults,\n });\n allRankings.push(taggedResults);\n }\n\n const merged = reciprocalRankFusion(...allRankings).slice(0, limit);\n return { perRepo, merged };\n}\n","export type { RepoGroup, GroupMember, Contract, ContractLink, ContractKind, GroupSyncResult, LinkKind } from './types.js';\nexport { loadGroup, saveGroup, listGroups, deleteGroup, groupExists, addMember, removeMember, saveSyncResult, loadSyncResult } from './group-registry.js';\nexport { syncGroup } from './group-sync.js';\nexport { queryGroup } from './group-query.js';\nexport type { GroupQueryResult } from './group-query.js';\nexport { loadGraphFromDB } from './graph-from-db.js';\n\n// Legacy export kept for backwards compatibility\nexport { mergeSearchResults } from './cross-repo-search.js';\n","import type { SearchResult } from '../search/text-search.js';\nimport { reciprocalRankFusion } from '../search/text-search.js';\n\nexport function mergeSearchResults(...perRepoResults: SearchResult[][]): SearchResult[] {\n return reciprocalRankFusion(...perRepoResults);\n}\n"]}
1
+ {"version":3,"sources":["../src/search/embedder.ts","../src/multi-repo/group-registry.ts","../src/graph/knowledge-graph.ts","../src/graph/id-generator.ts","../src/parsing/parser-manager.ts","../src/parsing/query-runner.ts","../src/parsing/ast-cache.ts","../src/shared/detection.ts","../src/parsing/queries/typescript.ts","../src/languages/modules/typescript.ts","../src/parsing/queries/python.ts","../src/languages/modules/python.ts","../src/parsing/queries/java.ts","../src/languages/modules/java.ts","../src/parsing/queries/go.ts","../src/languages/modules/go.ts","../src/parsing/queries/c.ts","../src/languages/modules/c.ts","../src/parsing/queries/cpp.ts","../src/languages/modules/cpp.ts","../src/parsing/queries/csharp.ts","../src/languages/modules/csharp.ts","../src/parsing/queries/rust.ts","../src/languages/modules/rust.ts","../src/parsing/queries/php.ts","../src/languages/modules/php.ts","../src/parsing/queries/kotlin.ts","../src/languages/modules/kotlin.ts","../src/parsing/queries/ruby.ts","../src/languages/modules/ruby.ts","../src/parsing/queries/swift.ts","../src/languages/modules/swift.ts","../src/languages/modules/dart.ts","../src/languages/registry.ts","../src/resolver/binding-tracker.ts","../src/resolver/import-resolver.ts","../src/call-graph/call-builder.ts","../src/call-graph/call-classifier.ts","../src/inheritance/heritage-builder.ts","../src/inheritance/mro-walker.ts","../src/inheritance/override-detector.ts","../src/pipeline/dag-validator.ts","../src/pipeline/orchestrator.ts","../src/pipeline/phases/scan-phase.ts","../src/shared/logger.ts","../src/pipeline/phases/parse-phase.ts","../src/pipeline/phases/resolve-phase.ts","../src/pipeline/phases/cluster-phase.ts","../src/pipeline/phases/flow-phase.ts","../src/scope-analysis/scope-builder.ts","../src/clustering/community-detector.ts","../src/flow-detection/entry-point-finder.ts","../src/search/text-search.ts","../src/search/index.ts","../src/search/vector-index.ts","../src/storage/repo-registry.ts","../src/storage/metadata.ts","../src/mcp-server/server.ts","../src/storage/db-manager.ts","../src/storage/schema.ts","../src/multi-repo/graph-from-db.ts","../src/multi-repo/group-sync.ts","../src/multi-repo/group-query.ts","../src/storage/graph-loader.ts","../src/http/app.ts","../src/multi-repo/index.ts","../src/multi-repo/cross-repo-search.ts"],"names":["path","fs","os","TSLanguage","result","relativePath","a","exports","__dirname","embedNodes","saveGroup"],"mappings":"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","file":"index.js","sourcesContent":["import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EmbeddedNode {\n id: string;\n name: string;\n kind: string;\n filePath: string;\n text: string;\n embedding: number[];\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet pipelineInstance: ((text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>) | null = null;\n\nasync function getEmbedder() {\n if (!pipelineInstance) {\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n pipelineInstance = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as typeof pipelineInstance;\n }\n return pipelineInstance!;\n}\n\nexport async function embedNodes(\n graph: KnowledgeGraph,\n opts: { batchSize?: number; onProgress?: (done: number, total: number) => void } = {},\n): Promise<EmbeddedNode[]> {\n const { batchSize = 32, onProgress } = opts;\n\n // Collect candidates — skip cluster/directory/flow to save time\n const candidates: { id: string; name: string; kind: string; filePath: string; text: string }[] = [];\n for (const node of graph.allNodes()) {\n if (['cluster', 'directory', 'flow'].includes(node.kind)) continue;\n const text = buildText(node);\n candidates.push({ id: node.id, name: node.name, kind: node.kind, filePath: node.filePath, text });\n }\n\n const embedder = await getEmbedder();\n const results: EmbeddedNode[] = [];\n\n for (let i = 0; i < candidates.length; i += batchSize) {\n const batch = candidates.slice(i, i + batchSize);\n const texts = batch.map((c) => c.text);\n\n for (let j = 0; j < texts.length; j++) {\n const out = await embedder(texts[j], { pooling: 'mean', normalize: true });\n results.push({ ...batch[j], embedding: Array.from(out.data) });\n }\n\n onProgress?.(Math.min(i + batchSize, candidates.length), candidates.length);\n }\n\n return results;\n}\n\nfunction buildText(node: { name: string; kind: string; filePath: string; content?: string | null; metadata?: Record<string, unknown> | null }): string {\n const parts: string[] = [`${node.kind} ${node.name}`];\n const sig = node.metadata?.signature as string | undefined;\n if (sig) parts.push(sig);\n if (node.content) parts.push(node.content.slice(0, 256));\n parts.push(node.filePath);\n return parts.join(' ').slice(0, 512);\n}\n","/**\n * Persistent store for repo groups.\n * Each group is saved as ~/.code-intel/groups/<name>.json\n */\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\nimport type { RepoGroup, GroupMember } from './types.js';\n\nconst GROUPS_DIR = path.join(os.homedir(), '.code-intel', 'groups');\n\nfunction groupFile(name: string): string {\n return path.join(GROUPS_DIR, `${name}.json`);\n}\n\nexport function loadGroup(name: string): RepoGroup | null {\n try {\n return JSON.parse(fs.readFileSync(groupFile(name), 'utf-8')) as RepoGroup;\n } catch {\n return null;\n }\n}\n\nexport function saveGroup(group: RepoGroup): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(groupFile(group.name), JSON.stringify(group, null, 2) + '\\n');\n}\n\nexport function listGroups(): RepoGroup[] {\n const groups: RepoGroup[] = [];\n try {\n for (const file of fs.readdirSync(GROUPS_DIR)) {\n if (!file.endsWith('.json') || file.endsWith('.sync.json')) continue;\n try {\n const g = JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, file), 'utf-8'),\n ) as RepoGroup;\n groups.push(g);\n } catch { /* skip malformed */ }\n }\n } catch { /* dir doesn't exist yet */ }\n return groups;\n}\n\nexport function deleteGroup(name: string): void {\n try { fs.unlinkSync(groupFile(name)); } catch { /* ignore */ }\n // also remove sync artifact\n try { fs.unlinkSync(path.join(GROUPS_DIR, `${name}.sync.json`)); } catch { /* ignore */ }\n}\n\nexport function groupExists(name: string): boolean {\n return fs.existsSync(groupFile(name));\n}\n\n/** Add or update a member (by groupPath). Returns the updated group. */\nexport function addMember(groupName: string, member: GroupMember): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n // replace if same groupPath already exists\n const idx = group.members.findIndex((m) => m.groupPath === member.groupPath);\n if (idx >= 0) {\n group.members[idx] = member;\n } else {\n group.members.push(member);\n }\n saveGroup(group);\n return group;\n}\n\n/** Remove a member by groupPath. Returns the updated group. */\nexport function removeMember(groupName: string, groupPath: string): RepoGroup {\n const group = loadGroup(groupName);\n if (!group) throw new Error(`Group \"${groupName}\" not found.`);\n const before = group.members.length;\n group.members = group.members.filter((m) => m.groupPath !== groupPath);\n if (group.members.length === before) {\n throw new Error(`No member at path \"${groupPath}\" in group \"${groupName}\".`);\n }\n saveGroup(group);\n return group;\n}\n\n// ─── Sync result persistence ──────────────────────────────────────────────────\n\nimport type { GroupSyncResult } from './types.js';\n\nexport function saveSyncResult(result: GroupSyncResult): void {\n fs.mkdirSync(GROUPS_DIR, { recursive: true });\n fs.writeFileSync(\n path.join(GROUPS_DIR, `${result.groupName}.sync.json`),\n JSON.stringify(result, null, 2) + '\\n',\n );\n}\n\nexport function loadSyncResult(groupName: string): GroupSyncResult | null {\n try {\n return JSON.parse(\n fs.readFileSync(path.join(GROUPS_DIR, `${groupName}.sync.json`), 'utf-8'),\n ) as GroupSyncResult;\n } catch {\n return null;\n }\n}\n","import type { CodeNode, CodeEdge, EdgeKind } from '../shared/index.js';\n\nexport interface KnowledgeGraph {\n addNode(node: CodeNode): void;\n addEdge(edge: CodeEdge): void;\n getNode(id: string): CodeNode | undefined;\n getEdge(id: string): CodeEdge | undefined;\n findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge>;\n findEdgesFrom(sourceId: string): Iterable<CodeEdge>;\n findEdgesTo(targetId: string): Iterable<CodeEdge>;\n removeNodeCascade(id: string): void;\n removeEdge(id: string): void;\n allNodes(): Iterable<CodeNode>;\n allEdges(): Iterable<CodeEdge>;\n readonly size: { nodes: number; edges: number };\n clear(): void;\n}\n\nexport function createKnowledgeGraph(): KnowledgeGraph {\n const nodes = new Map<string, CodeNode>();\n const edges = new Map<string, CodeEdge>();\n const edgesByKind = new Map<EdgeKind, Set<string>>();\n const edgesFromNode = new Map<string, Set<string>>();\n const edgesToNode = new Map<string, Set<string>>();\n\n function indexEdge(edge: CodeEdge): void {\n let kindSet = edgesByKind.get(edge.kind);\n if (!kindSet) {\n kindSet = new Set();\n edgesByKind.set(edge.kind, kindSet);\n }\n kindSet.add(edge.id);\n\n let fromSet = edgesFromNode.get(edge.source);\n if (!fromSet) {\n fromSet = new Set();\n edgesFromNode.set(edge.source, fromSet);\n }\n fromSet.add(edge.id);\n\n let toSet = edgesToNode.get(edge.target);\n if (!toSet) {\n toSet = new Set();\n edgesToNode.set(edge.target, toSet);\n }\n toSet.add(edge.id);\n }\n\n function unindexEdge(edge: CodeEdge): void {\n edgesByKind.get(edge.kind)?.delete(edge.id);\n edgesFromNode.get(edge.source)?.delete(edge.id);\n edgesToNode.get(edge.target)?.delete(edge.id);\n }\n\n return {\n addNode(node: CodeNode): void {\n nodes.set(node.id, node);\n },\n\n addEdge(edge: CodeEdge): void {\n edges.set(edge.id, edge);\n indexEdge(edge);\n },\n\n getNode(id: string): CodeNode | undefined {\n return nodes.get(id);\n },\n\n getEdge(id: string): CodeEdge | undefined {\n return edges.get(id);\n },\n\n *findEdgesByKind(kind: EdgeKind): Iterable<CodeEdge> {\n const ids = edgesByKind.get(kind);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesFrom(sourceId: string): Iterable<CodeEdge> {\n const ids = edgesFromNode.get(sourceId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n *findEdgesTo(targetId: string): Iterable<CodeEdge> {\n const ids = edgesToNode.get(targetId);\n if (!ids) return;\n for (const id of ids) {\n const edge = edges.get(id);\n if (edge) yield edge;\n }\n },\n\n removeNodeCascade(id: string): void {\n const fromEdges = edgesFromNode.get(id);\n if (fromEdges) {\n for (const edgeId of [...fromEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n const toEdges = edgesToNode.get(id);\n if (toEdges) {\n for (const edgeId of [...toEdges]) {\n const edge = edges.get(edgeId);\n if (edge) {\n unindexEdge(edge);\n edges.delete(edgeId);\n }\n }\n }\n edgesFromNode.delete(id);\n edgesToNode.delete(id);\n nodes.delete(id);\n },\n\n removeEdge(id: string): void {\n const edge = edges.get(id);\n if (edge) {\n unindexEdge(edge);\n edges.delete(id);\n }\n },\n\n *allNodes(): Iterable<CodeNode> {\n yield* nodes.values();\n },\n\n *allEdges(): Iterable<CodeEdge> {\n yield* edges.values();\n },\n\n get size() {\n return { nodes: nodes.size, edges: edges.size };\n },\n\n clear(): void {\n nodes.clear();\n edges.clear();\n edgesByKind.clear();\n edgesFromNode.clear();\n edgesToNode.clear();\n },\n };\n}\n","import { NodeKind } from '../shared/index.js';\n\nexport function generateNodeId(kind: NodeKind, filePath: string, qualifiedName: string): string {\n return `${kind}:${filePath}:${qualifiedName}`;\n}\n\nexport function generateEdgeId(source: string, target: string, kind: string): string {\n return `${kind}:${source}->${target}`;\n}\n","import { Language } from '../shared/index.js';\nimport { Parser, Language as TSLanguage, Tree } from 'web-tree-sitter';\n\nlet initialized = false;\nconst parserCache = new Map<Language, Parser>();\nconst languageCache = new Map<Language, TSLanguage>();\n\nconst GRAMMAR_WASM_MAP: Partial<Record<Language, string>> = {\n // WASM grammar files to be downloaded/provided per language\n // For now, the parser manager provides a placeholder\n};\n\nexport async function initParser(): Promise<void> {\n if (initialized) return;\n await Parser.init();\n initialized = true;\n}\n\nexport async function getParser(lang: Language): Promise<Parser> {\n await initParser();\n let parser = parserCache.get(lang);\n if (parser) return parser;\n\n parser = new Parser();\n parserCache.set(lang, parser);\n return parser;\n}\n\nexport async function getLanguage(lang: Language): Promise<TSLanguage | null> {\n const cached = languageCache.get(lang);\n if (cached) return cached;\n\n const wasmPath = GRAMMAR_WASM_MAP[lang];\n if (!wasmPath) return null;\n\n try {\n const language = await TSLanguage.load(wasmPath);\n languageCache.set(lang, language);\n return language;\n } catch {\n return null;\n }\n}\n\nexport async function parseSource(\n lang: Language,\n source: string,\n): Promise<Tree | null> {\n const parser = await getParser(lang);\n const language = await getLanguage(lang);\n if (!language) return null;\n parser.setLanguage(language);\n return parser.parse(source);\n}\n","import { Node, Tree, Language, Query } from 'web-tree-sitter';\n\nexport interface QueryCapture {\n name: string;\n node: Node;\n text: string;\n}\n\nexport function runQuery(\n tree: Tree,\n language: Language,\n querySource: string,\n): QueryCapture[] {\n const query = new Query(language, querySource);\n const matches = query.matches(tree.rootNode);\n const captures: QueryCapture[] = [];\n\n for (const match of matches) {\n for (const capture of match.captures) {\n captures.push({\n name: capture.name,\n node: capture.node,\n text: capture.node.text,\n });\n }\n }\n\n return captures;\n}\n","import { Tree } from 'web-tree-sitter';\n\nconst DEFAULT_MAX = 500;\n\nexport class AstCache {\n private cache = new Map<string, { tree: Tree; accessedAt: number }>();\n private maxEntries: number;\n\n constructor(maxEntries = DEFAULT_MAX) {\n this.maxEntries = maxEntries;\n }\n\n get(filePath: string): Tree | undefined {\n const entry = this.cache.get(filePath);\n if (entry) {\n entry.accessedAt = Date.now();\n return entry.tree;\n }\n return undefined;\n }\n\n set(filePath: string, tree: Tree): void {\n if (this.cache.size >= this.maxEntries) {\n this.evictLRU();\n }\n this.cache.set(filePath, { tree, accessedAt: Date.now() });\n }\n\n has(filePath: string): boolean {\n return this.cache.has(filePath);\n }\n\n clear(): void {\n this.cache.clear();\n }\n\n get size(): number {\n return this.cache.size;\n }\n\n private evictLRU(): void {\n let oldest: string | null = null;\n let oldestTime = Infinity;\n for (const [key, entry] of this.cache) {\n if (entry.accessedAt < oldestTime) {\n oldest = key;\n oldestTime = entry.accessedAt;\n }\n }\n if (oldest) {\n this.cache.delete(oldest);\n }\n }\n}\n","import { Language } from './languages.js';\n\nconst EXTENSION_MAP: Record<string, Language> = {\n '.ts': Language.TypeScript,\n '.tsx': Language.TypeScript,\n '.mts': Language.TypeScript,\n '.cts': Language.TypeScript,\n '.js': Language.JavaScript,\n '.jsx': Language.JavaScript,\n '.mjs': Language.JavaScript,\n '.cjs': Language.JavaScript,\n '.py': Language.Python,\n '.pyi': Language.Python,\n '.java': Language.Java,\n '.go': Language.Go,\n '.c': Language.C,\n '.h': Language.C,\n '.cpp': Language.Cpp,\n '.cxx': Language.Cpp,\n '.cc': Language.Cpp,\n '.hpp': Language.Cpp,\n '.hxx': Language.Cpp,\n '.cs': Language.CSharp,\n '.rs': Language.Rust,\n '.php': Language.PHP,\n '.kt': Language.Kotlin,\n '.kts': Language.Kotlin,\n '.rb': Language.Ruby,\n '.swift': Language.Swift,\n '.dart': Language.Dart,\n};\n\nexport function detectLanguage(filePath: string): Language | null {\n const ext = filePath.slice(filePath.lastIndexOf('.'));\n return EXTENSION_MAP[ext] ?? null;\n}\n\nexport function getSupportedExtensions(): string[] {\n return Object.keys(EXTENSION_MAP);\n}\n","export const typescriptQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Abstract class\n(abstract_class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Type alias\n(type_alias_declaration\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Enum\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Arrow function in variable\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.func.name\n value: (arrow_function))) @def.func\n\n;; Const/let/var variable (non-function)\n(lexical_declaration\n (variable_declarator\n name: (identifier) @def.var.name\n value: (_) @def.var.value)) @def.var\n\n;; Method definition\n(method_definition\n name: (property_identifier) @def.method.name) @def.method\n\n;; Public field definition\n(public_field_definition\n name: (property_identifier) @def.property.name) @def.property\n\n;; Import statement\n(import_statement\n source: (string) @imp.source) @imp\n\n;; Import specifier\n(import_specifier\n name: (identifier) @imp.name)\n\n;; Namespace import\n(namespace_import (identifier) @imp.namespace)\n\n;; Export statement\n(export_statement) @export\n\n;; Call expression — function call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Call expression — member call\n(call_expression\n function: (member_expression\n object: (_) @call.receiver\n property: (property_identifier) @call.method)) @call.member\n\n;; New expression\n(new_expression\n constructor: (identifier) @call.constructor) @call.new\n\n;; Class heritage — extends\n(class_heritage\n (extends_clause\n value: (identifier) @inherit.extends))\n\n;; Class heritage — implements\n(class_heritage\n (implements_clause\n (type_reference (type_identifier) @inherit.implements)))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nfunction resolveRelative(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const fromDir = path.dirname(fromFile);\n const cleaned = rawPath.replace(/['\"]/g, '');\n const extensions = ['.ts', '.tsx', '.js', '.jsx', '/index.ts', '/index.js'];\n const resolved = workspace.resolve(fromDir, cleaned);\n if (resolved) return resolved;\n for (const ext of extensions) {\n const r = workspace.resolve(fromDir, cleaned + ext);\n if (r) return r;\n }\n return null;\n}\n\nexport const typescriptModule: LanguageModule = {\n lang: Language.TypeScript,\n fileExtensions: ['.ts', '.tsx', '.mts', '.cts'],\n queries: typescriptQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('.')) {\n return resolveRelative(rawPath, fromFile, workspace);\n }\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const parent = node.parent;\n if (!parent) return false;\n return parent.type === 'export_statement' || node.type === 'export_statement';\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n\nexport const javascriptModule: LanguageModule = {\n ...typescriptModule,\n lang: Language.JavaScript,\n fileExtensions: ['.js', '.jsx', '.mjs', '.cjs'],\n};\n","export const pythonQueries = `\n;; Class definition\n(class_definition\n name: (identifier) @def.class.name) @def.class\n\n;; Function definition\n(function_definition\n name: (identifier) @def.func.name) @def.func\n\n;; Decorated definition\n(decorated_definition\n (function_definition\n name: (identifier) @def.func.name)) @def.func.decorated\n\n;; Import from\n(import_from_statement\n module_name: (dotted_name) @imp.source) @imp\n\n;; Import\n(import_statement\n name: (dotted_name) @imp.module) @imp.direct\n\n;; Import alias\n(aliased_import\n name: (dotted_name) @imp.alias.original\n alias: (identifier) @imp.alias.name)\n\n;; Call expression\n(call\n function: (identifier) @call.name) @call\n\n;; Attribute call\n(call\n function: (attribute\n object: (_) @call.receiver\n attribute: (identifier) @call.method)) @call.member\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Class base classes\n(class_definition\n superclasses: (argument_list\n (identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { pythonQueries } from '../../parsing/queries/python.js';\nimport path from 'node:path';\n\nexport const pythonModule: LanguageModule = {\n lang: Language.Python,\n fileExtensions: ['.py', '.pyi'],\n queries: pythonQueries,\n importStyle: 'namespace',\n inheritanceStrategy: 'c3',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('.');\n const fromDir = path.dirname(fromFile);\n\n // Try as relative path\n const relPath = parts.join('/');\n for (const suffix of ['/__init__.py', '.py']) {\n const r = workspace.resolve(fromDir, relPath + suffix);\n if (r) return r;\n }\n\n // Try as package from root\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n // Python: names starting with _ are private by convention\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const javaQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Field declaration\n(field_declaration\n declarator: (variable_declarator\n name: (identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (scoped_identifier) @imp.source) @imp\n\n;; Call\n(method_invocation\n name: (identifier) @call.name) @call\n\n;; Object creation\n(object_creation_expression\n type: (type_identifier) @call.constructor) @call.new\n\n;; Extends\n(superclass (type_identifier) @inherit.extends)\n\n;; Implements\n(super_interfaces\n (type_list (type_identifier) @inherit.implements))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { javaQueries } from '../../parsing/queries/java.js';\n\nexport const javaModule: LanguageModule = {\n lang: Language.Java,\n fileExtensions: ['.java'],\n queries: javaQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.java';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n const text = node.text;\n return text.includes('public');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const goQueries = `\n;; Function declaration\n(function_declaration\n name: (identifier) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (field_identifier) @def.method.name) @def.method\n\n;; Type declaration — struct\n(type_declaration\n (type_spec\n name: (type_identifier) @def.struct.name\n type: (struct_type))) @def.struct\n\n;; Type declaration — interface\n(type_declaration\n (type_spec\n name: (type_identifier) @def.interface.name\n type: (interface_type))) @def.interface\n\n;; Import spec\n(import_spec\n path: (interpreted_string_literal) @imp.source) @imp\n\n;; Call expression\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Selector call\n(call_expression\n function: (selector_expression\n operand: (_) @call.receiver\n field: (field_identifier) @call.method)) @call.member\n\n;; Const declaration\n(const_declaration\n (const_spec\n name: (identifier) @def.constant.name)) @def.constant\n\n;; Var declaration\n(var_declaration\n (var_spec\n name: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { goQueries } from '../../parsing/queries/go.js';\n\nexport const goModule: LanguageModule = {\n lang: Language.Go,\n fileExtensions: ['.go'],\n queries: goQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return false;\n const first = name.text[0];\n return first === first.toUpperCase() && first !== first.toLowerCase();\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cQueries = `\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum specifier\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Typedef\n(type_definition\n declarator: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Global variable\n(declaration\n declarator: (init_declarator\n declarator: (identifier) @def.var.name)) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cQueries } from '../../parsing/queries/c.js';\nimport path from 'node:path';\n\nexport const cModule: LanguageModule = {\n lang: Language.C,\n fileExtensions: ['.c', '.h'],\n queries: cQueries,\n importStyle: 'include',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // C: all non-static symbols are visible\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const cppQueries = `\n;; Class specifier\n(class_specifier\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct specifier\n(struct_specifier\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Function definition\n(function_definition\n declarator: (function_declarator\n declarator: (identifier) @def.func.name)) @def.func\n\n;; Namespace definition\n(namespace_definition\n name: (identifier) @def.namespace.name) @def.namespace\n\n;; Template declaration\n(template_declaration\n (class_specifier\n name: (type_identifier) @def.class.name)) @def.class.template\n\n;; Include\n(preproc_include\n path: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Member call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Base class clause\n(base_class_clause\n (type_identifier) @inherit.extends)\n\n;; Enum\n(enum_specifier\n name: (type_identifier) @def.enum.name) @def.enum\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { cppQueries } from '../../parsing/queries/cpp.js';\nimport path from 'node:path';\n\nexport const cppModule: LanguageModule = {\n lang: Language.Cpp,\n fileExtensions: ['.cpp', '.cxx', '.cc', '.hpp', '.hxx'],\n queries: cppQueries,\n importStyle: 'include',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/[<>\"']/g, '');\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true;\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const csharpQueries = `\n;; Class declaration\n(class_declaration\n name: (identifier) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (identifier) @def.interface.name) @def.interface\n\n;; Struct declaration\n(struct_declaration\n name: (identifier) @def.struct.name) @def.struct\n\n;; Enum declaration\n(enum_declaration\n name: (identifier) @def.enum.name) @def.enum\n\n;; Method declaration\n(method_declaration\n name: (identifier) @def.method.name) @def.method\n\n;; Constructor declaration\n(constructor_declaration\n name: (identifier) @def.constructor.name) @def.constructor\n\n;; Property declaration\n(property_declaration\n name: (identifier) @def.property.name) @def.property\n\n;; Namespace declaration\n(namespace_declaration\n name: (_) @def.namespace.name) @def.namespace\n\n;; Using directive\n(using_directive\n (qualified_name) @imp.source) @imp\n\n;; Invocation\n(invocation_expression\n function: (identifier) @call.name) @call\n\n;; Member invocation\n(invocation_expression\n function: (member_access_expression\n name: (identifier) @call.method)) @call.member\n\n;; Object creation\n(object_creation_expression\n type: (identifier) @call.constructor) @call.new\n\n;; Base list (extends/implements)\n(base_list\n (identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { csharpQueries } from '../../parsing/queries/csharp.js';\n\nexport const csharpModule: LanguageModule = {\n lang: Language.CSharp,\n fileExtensions: ['.cs'],\n queries: csharpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rustQueries = `\n;; Function item\n(function_item\n name: (identifier) @def.func.name) @def.func\n\n;; Struct item\n(struct_item\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Enum item\n(enum_item\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Trait item\n(trait_item\n name: (type_identifier) @def.trait.name) @def.trait\n\n;; Impl item\n(impl_item\n type: (type_identifier) @def.class.name) @def.impl\n\n;; Type alias\n(type_item\n name: (type_identifier) @def.type_alias.name) @def.type_alias\n\n;; Use declaration\n(use_declaration\n argument: (_) @imp.source) @imp\n\n;; Call\n(call_expression\n function: (identifier) @call.name) @call\n\n;; Method call\n(call_expression\n function: (field_expression\n field: (field_identifier) @call.method)) @call.member\n\n;; Const item\n(const_item\n name: (identifier) @def.constant.name) @def.constant\n\n;; Static item\n(static_item\n name: (identifier) @def.var.name) @def.var\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rustQueries } from '../../parsing/queries/rust.js';\n\nexport const rustModule: LanguageModule = {\n lang: Language.Rust,\n fileExtensions: ['.rs'],\n queries: rustQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'none',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const parts = cleaned.split('::');\n const filePath = parts.join('/') + '.rs';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return node.text.startsWith('pub ') || node.text.startsWith('pub(');\n },\n\n extractType(node: Node): string | null {\n const returnType = node.childForFieldName('return_type');\n return returnType?.text ?? null;\n },\n};\n","export const phpQueries = `\n;; Class declaration\n(class_declaration\n name: (name) @def.class.name) @def.class\n\n;; Interface declaration\n(interface_declaration\n name: (name) @def.interface.name) @def.interface\n\n;; Trait declaration\n(trait_declaration\n name: (name) @def.trait.name) @def.trait\n\n;; Function definition\n(function_definition\n name: (name) @def.func.name) @def.func\n\n;; Method declaration\n(method_declaration\n name: (name) @def.method.name) @def.method\n\n;; Property declaration\n(property_declaration\n (property_element\n (variable_name) @def.property.name)) @def.property\n\n;; Namespace definition\n(namespace_definition\n name: (namespace_name) @def.namespace.name) @def.namespace\n\n;; Use declaration (import)\n(namespace_use_declaration\n (namespace_use_clause\n (qualified_name) @imp.source)) @imp\n\n;; Include/require\n(include_expression\n (_) @imp.source) @imp.include\n\n;; Function call\n(function_call_expression\n function: (name) @call.name) @call\n\n;; Method call\n(member_call_expression\n name: (name) @call.method) @call.member\n\n;; Object creation\n(object_creation_expression\n (name) @call.constructor) @call.new\n\n;; Class base clause\n(base_clause\n (name) @inherit.extends)\n\n;; Class interface clause\n(class_interface_clause\n (name) @inherit.implements)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { phpQueries } from '../../parsing/queries/php.js';\n\nexport const phpModule: LanguageModule = {\n lang: Language.PHP,\n fileExtensions: ['.php'],\n queries: phpQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"\\\\]/g, '/').replace(/^\\//, '');\n return workspace.findByPackage(cleaned + '.php');\n },\n\n isExported(node: Node): boolean {\n return node.text.includes('public') || !node.text.includes('private');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const kotlinQueries = `\n;; Class declaration\n(class_declaration\n (type_identifier) @def.class.name) @def.class\n\n;; Object declaration\n(object_declaration\n (type_identifier) @def.class.name) @def.class.object\n\n;; Interface declaration \n(class_declaration\n (type_identifier) @def.interface.name) @def.interface\n\n;; Function declaration\n(function_declaration\n (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (variable_declaration\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_header\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Navigation call\n(call_expression\n (navigation_expression\n (simple_identifier) @call.method)) @call.member\n\n;; Delegation specifier (extends/implements)\n(delegation_specifier\n (user_type\n (type_identifier) @inherit.extends))\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { kotlinQueries } from '../../parsing/queries/kotlin.js';\n\nexport const kotlinModule: LanguageModule = {\n lang: Language.Kotlin,\n fileExtensions: ['.kt', '.kts'],\n queries: kotlinQueries,\n importStyle: 'explicit',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n const filePath = cleaned.replace(/\\./g, '/') + '.kt';\n return workspace.findByPackage(filePath);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('internal');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","export const rubyQueries = `\n;; Class\n(class\n name: (constant) @def.class.name) @def.class\n\n;; Module\n(module\n name: (constant) @def.module.name) @def.module\n\n;; Method\n(method\n name: (identifier) @def.method.name) @def.method\n\n;; Singleton method\n(singleton_method\n name: (identifier) @def.method.name) @def.method.static\n\n;; Assignment\n(assignment\n left: (identifier) @def.var.name) @def.var\n\n;; Require\n(call\n method: (identifier) @_method\n arguments: (argument_list (string) @imp.source)\n (#match? @_method \"^require\"))\n\n;; Call\n(call\n method: (identifier) @call.name) @call\n\n;; Superclass\n(superclass\n (constant) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { rubyQueries } from '../../parsing/queries/ruby.js';\n\nexport const rubyModule: LanguageModule = {\n lang: Language.Ruby,\n fileExtensions: ['.rb'],\n queries: rubyQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'mixin-aware',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned + '.rb') ?? workspace.findByPackage(cleaned);\n },\n\n isExported(_node: Node): boolean {\n return true; // Ruby: methods are public by default\n },\n\n extractType(_node: Node): string | null {\n return null; // Ruby: dynamic typing\n },\n};\n","export const swiftQueries = `\n;; Class declaration\n(class_declaration\n name: (type_identifier) @def.class.name) @def.class\n\n;; Struct declaration\n(struct_declaration\n name: (type_identifier) @def.struct.name) @def.struct\n\n;; Protocol declaration\n(protocol_declaration\n name: (type_identifier) @def.interface.name) @def.interface\n\n;; Enum declaration\n(enum_declaration\n name: (type_identifier) @def.enum.name) @def.enum\n\n;; Function declaration\n(function_declaration\n name: (simple_identifier) @def.func.name) @def.func\n\n;; Property declaration\n(property_declaration\n (pattern\n (simple_identifier) @def.property.name)) @def.property\n\n;; Import\n(import_declaration\n (identifier) @imp.source) @imp\n\n;; Call\n(call_expression\n (simple_identifier) @call.name) @call\n\n;; Inheritance\n(inheritance_specifier\n (type_identifier) @inherit.extends)\n`;\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { swiftQueries } from '../../parsing/queries/swift.js';\n\nexport const swiftModule: LanguageModule = {\n lang: Language.Swift,\n fileExtensions: ['.swift'],\n queries: swiftQueries,\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, _fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n return workspace.findByPackage(cleaned);\n },\n\n isExported(node: Node): boolean {\n return !node.text.includes('private') && !node.text.includes('fileprivate');\n },\n\n extractType(node: Node): string | null {\n const typeAnnotation = node.childForFieldName('type');\n return typeAnnotation?.text ?? null;\n },\n};\n","import { Language } from '../../shared/index.js';\nimport type { Node } from 'web-tree-sitter';\nimport type { LanguageModule, FileSet } from '../types.js';\nimport { typescriptQueries } from '../../parsing/queries/typescript.js';\nimport path from 'node:path';\n\nexport const dartModule: LanguageModule = {\n lang: Language.Dart,\n fileExtensions: ['.dart'],\n queries: typescriptQueries, // Dart grammar fallback\n importStyle: 'wildcard',\n inheritanceStrategy: 'depth-first',\n\n resolveImport(rawPath: string, fromFile: string, workspace: FileSet): string | null {\n const cleaned = rawPath.replace(/['\"]/g, '');\n if (cleaned.startsWith('package:')) {\n const pkg = cleaned.replace('package:', '');\n return workspace.findByPackage(pkg);\n }\n const fromDir = path.dirname(fromFile);\n return workspace.resolve(fromDir, cleaned);\n },\n\n isExported(node: Node): boolean {\n const name = node.childForFieldName('name');\n if (!name) return true;\n return !name.text.startsWith('_');\n },\n\n extractType(node: Node): string | null {\n const typeNode = node.childForFieldName('type');\n return typeNode?.text ?? null;\n },\n};\n","import { Language } from '../shared/index.js';\nimport type { LanguageModule } from './types.js';\nimport { typescriptModule, javascriptModule } from './modules/typescript.js';\nimport { pythonModule } from './modules/python.js';\nimport { javaModule } from './modules/java.js';\nimport { goModule } from './modules/go.js';\nimport { cModule } from './modules/c.js';\nimport { cppModule } from './modules/cpp.js';\nimport { csharpModule } from './modules/csharp.js';\nimport { rustModule } from './modules/rust.js';\nimport { phpModule } from './modules/php.js';\nimport { kotlinModule } from './modules/kotlin.js';\nimport { rubyModule } from './modules/ruby.js';\nimport { swiftModule } from './modules/swift.js';\nimport { dartModule } from './modules/dart.js';\n\nconst MODULES: Record<Language, LanguageModule> = {\n [Language.TypeScript]: typescriptModule,\n [Language.JavaScript]: javascriptModule,\n [Language.Python]: pythonModule,\n [Language.Java]: javaModule,\n [Language.Go]: goModule,\n [Language.C]: cModule,\n [Language.Cpp]: cppModule,\n [Language.CSharp]: csharpModule,\n [Language.Rust]: rustModule,\n [Language.PHP]: phpModule,\n [Language.Kotlin]: kotlinModule,\n [Language.Ruby]: rubyModule,\n [Language.Swift]: swiftModule,\n [Language.Dart]: dartModule,\n};\n\nexport function getLanguageModule(lang: Language): LanguageModule {\n return MODULES[lang];\n}\n\nexport function getAllLanguageModules(): LanguageModule[] {\n return Object.values(MODULES);\n}\n","export interface ImportBinding {\n localName: string;\n sourcePath: string;\n exportedName: string;\n isDefault: boolean;\n isNamespace: boolean;\n}\n\nexport class BindingTracker {\n private bindings = new Map<string, Map<string, ImportBinding>>();\n\n addBinding(filePath: string, binding: ImportBinding): void {\n let fileBindings = this.bindings.get(filePath);\n if (!fileBindings) {\n fileBindings = new Map();\n this.bindings.set(filePath, fileBindings);\n }\n fileBindings.set(binding.localName, binding);\n }\n\n getBinding(filePath: string, localName: string): ImportBinding | undefined {\n return this.bindings.get(filePath)?.get(localName);\n }\n\n getFileBindings(filePath: string): ImportBinding[] {\n const fileBindings = this.bindings.get(filePath);\n return fileBindings ? [...fileBindings.values()] : [];\n }\n\n clear(): void {\n this.bindings.clear();\n }\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { LanguageModule, FileSet } from '../languages/types.js';\nimport { BindingTracker } from './binding-tracker.js';\nimport type { ImportBinding } from './binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ImportInfo {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n isNamespace: boolean;\n namespaceName?: string;\n}\n\nexport interface ImportResolutionResult {\n edges: CodeEdge[];\n bindings: BindingTracker;\n}\n\nexport function resolveImports(\n filePath: string,\n fileNodeId: string,\n imports: ImportInfo[],\n langModule: LanguageModule,\n workspace: FileSet,\n): ImportResolutionResult {\n const bindings = new BindingTracker();\n const edges: CodeEdge[] = [];\n const maxReExportHops = 5;\n\n for (const imp of imports) {\n let resolvedPath = langModule.resolveImport(imp.rawPath, filePath, workspace);\n\n // Re-export chain walking\n let hops = 0;\n const visited = new Set<string>();\n while (resolvedPath && hops < maxReExportHops && !visited.has(resolvedPath)) {\n visited.add(resolvedPath);\n hops++;\n // For now, just accept the first resolution\n break;\n }\n\n if (!resolvedPath) continue;\n\n const targetNodeId = `file:${resolvedPath}:${resolvedPath}`;\n const edge: CodeEdge = {\n id: generateEdgeId(fileNodeId, targetNodeId, 'imports'),\n source: fileNodeId,\n target: targetNodeId,\n kind: 'imports',\n weight: 0.95,\n label: imp.rawPath,\n };\n edges.push(edge);\n\n for (const localName of imp.localNames) {\n const binding: ImportBinding = {\n localName,\n sourcePath: resolvedPath,\n exportedName: localName,\n isDefault: imp.isDefault,\n isNamespace: imp.isNamespace,\n };\n bindings.addBinding(filePath, binding);\n }\n }\n\n return { edges, bindings };\n}\n","import type { CodeEdge, CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport type { BindingTracker } from '../resolver/binding-tracker.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\nimport type { CallSite } from './call-classifier.js';\n\ninterface ResolutionTier {\n name: string;\n confidence: number;\n resolve(callSite: CallSite): string | null;\n}\n\nexport function buildCallEdges(\n callSites: CallSite[],\n graph: KnowledgeGraph,\n bindings: BindingTracker,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const symbolIndex = buildSymbolIndex(graph);\n\n const tiers: ResolutionTier[] = [\n {\n name: 'same-file',\n confidence: 0.95,\n resolve(cs: CallSite) {\n const key = `${cs.callerFilePath}:${cs.name}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'imported',\n confidence: 0.9,\n resolve(cs: CallSite) {\n const binding = bindings.getBinding(cs.callerFilePath, cs.name);\n if (!binding) return null;\n const key = `${binding.sourcePath}:${binding.exportedName}`;\n return symbolIndex.get(key) ?? null;\n },\n },\n {\n name: 'global',\n confidence: 0.5,\n resolve(cs: CallSite) {\n return globalSymbolIndex.get(cs.name) ?? null;\n },\n },\n ];\n\n const globalSymbolIndex = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor'].includes(node.kind)) {\n if (!globalSymbolIndex.has(node.name)) {\n globalSymbolIndex.set(node.name, node.id);\n }\n }\n }\n\n for (const cs of callSites) {\n for (const tier of tiers) {\n const targetId = tier.resolve(cs);\n if (targetId && targetId !== cs.callerNodeId) {\n edges.push({\n id: generateEdgeId(cs.callerNodeId, targetId, 'calls'),\n source: cs.callerNodeId,\n target: targetId,\n kind: 'calls',\n weight: tier.confidence,\n label: cs.name,\n });\n break;\n }\n }\n }\n\n return edges;\n}\n\nfunction buildSymbolIndex(graph: KnowledgeGraph): Map<string, string> {\n const index = new Map<string, string>();\n for (const node of graph.allNodes()) {\n if (['function', 'method', 'class', 'constructor', 'variable'].includes(node.kind)) {\n const key = `${node.filePath}:${node.name}`;\n index.set(key, node.id);\n }\n }\n return index;\n}\n","export type CallKind = 'free' | 'member' | 'constructor';\n\nexport interface CallSite {\n callerNodeId: string;\n callerFilePath: string;\n name: string;\n receiverText?: string;\n kind: CallKind;\n line: number;\n argCount: number;\n}\n\nexport function classifyCall(\n name: string,\n hasReceiver: boolean,\n isNew: boolean,\n): CallKind {\n if (isNew) return 'constructor';\n if (hasReceiver) return 'member';\n if (name[0] === name[0].toUpperCase() && name[0] !== name[0].toLowerCase()) {\n return 'constructor';\n }\n return 'free';\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport interface HeritageInfo {\n classNodeId: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\nexport function buildHeritageEdges(\n heritages: HeritageInfo[],\n graph: KnowledgeGraph,\n): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const classIndex = new Map<string, string>();\n\n for (const node of graph.allNodes()) {\n if (['class', 'interface', 'struct', 'trait'].includes(node.kind)) {\n classIndex.set(node.name, node.id);\n }\n }\n\n for (const h of heritages) {\n for (const name of h.extendsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'extends'),\n source: h.classNodeId,\n target: targetId,\n kind: 'extends',\n weight: 1.0,\n label: `extends ${name}`,\n });\n }\n }\n\n for (const name of h.implementsNames) {\n const targetId = classIndex.get(name);\n if (targetId) {\n edges.push({\n id: generateEdgeId(h.classNodeId, targetId, 'implements'),\n source: h.classNodeId,\n target: targetId,\n kind: 'implements',\n weight: 1.0,\n label: `implements ${name}`,\n });\n }\n }\n }\n\n return edges;\n}\n","export type MroStrategy = 'depth-first' | 'c3' | 'mixin-aware' | 'none';\n\nexport function computeMRO(\n classId: string,\n parentMap: Map<string, string[]>,\n strategy: MroStrategy,\n): string[] {\n switch (strategy) {\n case 'depth-first':\n return depthFirstMRO(classId, parentMap);\n case 'c3':\n return c3Linearize(classId, parentMap);\n case 'mixin-aware':\n return mixinAwareMRO(classId, parentMap);\n case 'none':\n return [classId];\n }\n}\n\nfunction depthFirstMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n const result: string[] = [];\n const visited = new Set<string>();\n const stack = [classId];\n\n while (stack.length > 0) {\n const current = stack.pop()!;\n if (visited.has(current)) continue;\n visited.add(current);\n result.push(current);\n const parents = parentMap.get(current) ?? [];\n for (let i = parents.length - 1; i >= 0; i--) {\n stack.push(parents[i]);\n }\n }\n\n return result;\n}\n\nfunction c3Linearize(classId: string, parentMap: Map<string, string[]>): string[] {\n const cache = new Map<string, string[]>();\n const inProgress = new Set<string>();\n\n function linearize(cls: string): string[] {\n if (cache.has(cls)) return cache.get(cls)!;\n if (inProgress.has(cls)) return [cls]; // cycle detected\n\n inProgress.add(cls);\n const parents = parentMap.get(cls) ?? [];\n\n if (parents.length === 0) {\n const result = [cls];\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n const parentLinearizations = parents.map((p) => linearize(p));\n const sequences = [...parentLinearizations, parents];\n const result = [cls];\n\n while (sequences.some((s) => s.length > 0)) {\n let found = false;\n for (const seq of sequences) {\n if (seq.length === 0) continue;\n const head = seq[0];\n const inTail = sequences.some((s) => s.indexOf(head) > 0);\n if (!inTail) {\n result.push(head);\n for (const s of sequences) {\n const idx = s.indexOf(head);\n if (idx >= 0) s.splice(idx, 1);\n }\n found = true;\n break;\n }\n }\n if (!found) break; // inconsistent hierarchy\n }\n\n cache.set(cls, result);\n inProgress.delete(cls);\n return result;\n }\n\n return linearize(classId);\n}\n\nfunction mixinAwareMRO(classId: string, parentMap: Map<string, string[]>): string[] {\n // Simplified: prepend → direct → included\n return depthFirstMRO(classId, parentMap);\n}\n","import type { CodeEdge } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateEdgeId } from '../graph/id-generator.js';\n\nexport function detectOverrides(graph: KnowledgeGraph): CodeEdge[] {\n const edges: CodeEdge[] = [];\n const methodsByOwner = new Map<string, Map<string, string>>();\n\n // Build owner → methods map\n for (const edge of graph.findEdgesByKind('has_member')) {\n const member = graph.getNode(edge.target);\n if (member && member.kind === 'method') {\n let methods = methodsByOwner.get(edge.source);\n if (!methods) {\n methods = new Map();\n methodsByOwner.set(edge.source, methods);\n }\n methods.set(member.name, member.id);\n }\n }\n\n // Check extends edges\n for (const extendsEdge of graph.findEdgesByKind('extends')) {\n const childMethods = methodsByOwner.get(extendsEdge.source);\n const parentMethods = methodsByOwner.get(extendsEdge.target);\n if (!childMethods || !parentMethods) continue;\n\n for (const [methodName, childMethodId] of childMethods) {\n const parentMethodId = parentMethods.get(methodName);\n if (parentMethodId) {\n edges.push({\n id: generateEdgeId(childMethodId, parentMethodId, 'overrides'),\n source: childMethodId,\n target: parentMethodId,\n kind: 'overrides',\n weight: 1.0,\n label: `overrides ${methodName}`,\n });\n }\n }\n }\n\n return edges;\n}\n","import type { Phase } from './types.js';\n\nexport interface ValidationError {\n type: 'duplicate' | 'missing-dep' | 'cycle';\n message: string;\n}\n\nexport function validateDAG(phases: Phase[]): ValidationError[] {\n const errors: ValidationError[] = [];\n const names = new Set<string>();\n\n // Check duplicates\n for (const phase of phases) {\n if (names.has(phase.name)) {\n errors.push({ type: 'duplicate', message: `Duplicate phase name: ${phase.name}` });\n }\n names.add(phase.name);\n }\n\n // Check missing deps\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n if (!names.has(dep)) {\n errors.push({\n type: 'missing-dep',\n message: `Phase \"${phase.name}\" depends on missing phase \"${dep}\"`,\n });\n }\n }\n }\n\n // Check cycles using DFS\n const visiting = new Set<string>();\n const visited = new Set<string>();\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n\n function dfs(name: string, path: string[]): boolean {\n if (visiting.has(name)) {\n const cycleStart = path.indexOf(name);\n const cycle = path.slice(cycleStart).concat(name);\n errors.push({ type: 'cycle', message: `Cycle detected: ${cycle.join(' → ')}` });\n return true;\n }\n if (visited.has(name)) return false;\n\n visiting.add(name);\n path.push(name);\n\n const phase = phaseMap.get(name);\n if (phase) {\n for (const dep of phase.dependencies) {\n if (dfs(dep, path)) return true;\n }\n }\n\n visiting.delete(name);\n visited.add(name);\n path.pop();\n return false;\n }\n\n for (const phase of phases) {\n if (!visited.has(phase.name)) {\n dfs(phase.name, []);\n }\n }\n\n return errors;\n}\n\nexport function topologicalSort(phases: Phase[]): Phase[] {\n const phaseMap = new Map(phases.map((p) => [p.name, p]));\n const inDegree = new Map<string, number>();\n const adjList = new Map<string, string[]>();\n\n for (const phase of phases) {\n inDegree.set(phase.name, 0);\n adjList.set(phase.name, []);\n }\n\n for (const phase of phases) {\n for (const dep of phase.dependencies) {\n adjList.get(dep)?.push(phase.name);\n inDegree.set(phase.name, (inDegree.get(phase.name) ?? 0) + 1);\n }\n }\n\n const queue: string[] = [];\n for (const [name, degree] of inDegree) {\n if (degree === 0) queue.push(name);\n }\n\n const sorted: Phase[] = [];\n while (queue.length > 0) {\n const current = queue.shift()!;\n sorted.push(phaseMap.get(current)!);\n for (const neighbor of adjList.get(current) ?? []) {\n const newDegree = (inDegree.get(neighbor) ?? 1) - 1;\n inDegree.set(neighbor, newDegree);\n if (newDegree === 0) queue.push(neighbor);\n }\n }\n\n return sorted;\n}\n","import type { Phase, PhaseResult, PipelineContext } from './types.js';\nimport { validateDAG, topologicalSort } from './dag-validator.js';\n\nexport interface PipelineRunResult {\n success: boolean;\n results: Map<string, PhaseResult>;\n totalDuration: number;\n}\n\nexport async function runPipeline(\n phases: Phase[],\n context: PipelineContext,\n): Promise<PipelineRunResult> {\n const errors = validateDAG(phases);\n if (errors.length > 0) {\n throw new Error(`Pipeline validation failed:\\n${errors.map((e) => e.message).join('\\n')}`);\n }\n\n const sorted = topologicalSort(phases);\n const results = new Map<string, PhaseResult>();\n const startTime = Date.now();\n let success = true;\n\n for (const phase of sorted) {\n context.onProgress?.(phase.name, 'running');\n const phaseStart = Date.now();\n\n try {\n const depResults = new Map<string, PhaseResult>();\n for (const dep of phase.dependencies) {\n const depResult = results.get(dep);\n if (depResult) depResults.set(dep, depResult);\n }\n\n const result = await phase.execute(context, depResults);\n results.set(phase.name, result);\n context.onProgress?.(phase.name, result.status);\n\n if (result.status === 'failed') {\n success = false;\n break;\n }\n } catch (err) {\n const result: PhaseResult = {\n status: 'failed',\n duration: Date.now() - phaseStart,\n message: err instanceof Error ? err.message : String(err),\n };\n results.set(phase.name, result);\n context.onProgress?.(phase.name, 'failed');\n success = false;\n break;\n }\n }\n\n return {\n success,\n results,\n totalDuration: Date.now() - startTime,\n };\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, getSupportedExtensions } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId } from '../../graph/id-generator.js';\n\nconst IGNORED_DIRS = new Set([\n 'node_modules', '.git', '.svn', '.hg', 'dist', 'dist-tests', 'build', 'out',\n '__pycache__', '.tox', '.pytest_cache', '.mypy_cache',\n 'vendor', 'target', '.code-intel', 'coverage', '.next',\n '.turbo', '.cache', 'tmp', 'temp', '.parcel-cache', '.venv', 'venv',\n '.env', 'env', '__snapshots__', '.nyc_output', 'storybook-static',\n]);\n\n/**\n * Load extra ignore patterns from .codeintelignore in the workspace root.\n * Format: one glob/dir name per line, # for comments.\n */\nfunction loadIgnorePatterns(workspaceRoot: string): Set<string> {\n try {\n const raw = fs.readFileSync(path.join(workspaceRoot, '.codeintelignore'), 'utf-8');\n const extras = new Set<string>();\n for (const line of raw.split('\\n')) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) extras.add(trimmed);\n }\n return extras;\n } catch {\n return new Set();\n }\n}\n\nconst IGNORED_FILE_SUFFIXES = ['.d.ts', '.js.map', '.d.ts.map', '.min.js', '.min.css'];\nconst MAX_FILE_SIZE_BYTES = 512 * 1024; // skip files > 512 KB\n\nexport const scanPhase: Phase = {\n name: 'scan',\n dependencies: [],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const extensions = new Set(getSupportedExtensions());\n const filePaths: string[] = [];\n const extraIgnore = loadIgnorePatterns(context.workspaceRoot);\n\n function walk(dir: string): void {\n let entries: fs.Dirent[];\n try {\n entries = fs.readdirSync(dir, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of entries) {\n // Skip hidden directories and ignored directories\n if (entry.isDirectory()) {\n if (entry.name.startsWith('.')) continue;\n if (IGNORED_DIRS.has(entry.name)) continue;\n if (extraIgnore.has(entry.name)) continue;\n walk(path.join(dir, entry.name));\n } else if (entry.isFile()) {\n const name = entry.name;\n // Skip known non-source suffixes\n if (IGNORED_FILE_SUFFIXES.some((s) => name.endsWith(s))) continue;\n const ext = path.extname(name);\n if (!extensions.has(ext)) continue;\n const fullPath = path.join(dir, name);\n // Skip very large files (generated code, minified assets)\n try {\n const stat = fs.statSync(fullPath);\n if (stat.size > MAX_FILE_SIZE_BYTES) continue;\n } catch {\n continue;\n }\n filePaths.push(fullPath);\n }\n }\n }\n\n walk(context.workspaceRoot);\n context.filePaths.push(...filePaths);\n context.onPhaseProgress?.('scan', filePaths.length, filePaths.length);\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${filePaths.length} source files`,\n };\n },\n};\n\nexport const structurePhase: Phase = {\n name: 'structure',\n dependencies: ['scan'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const dirs = new Set<string>();\n\n let structDone = 0;\n for (const filePath of context.filePaths) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const lang = detectLanguage(filePath);\n\n context.graph.addNode({\n id: generateNodeId('file', relativePath, relativePath),\n kind: 'file',\n name: path.basename(filePath),\n filePath: relativePath,\n metadata: lang ? { language: lang } : undefined,\n });\n\n // Collect directories\n let dir = path.dirname(relativePath);\n while (dir && dir !== '.' && dir !== '') {\n if (dirs.has(dir)) break;\n dirs.add(dir);\n dir = path.dirname(dir);\n }\n structDone++;\n context.onPhaseProgress?.('structure', structDone, context.filePaths.length);\n }\n\n for (const dir of dirs) {\n context.graph.addNode({\n id: generateNodeId('directory', dir, dir),\n kind: 'directory',\n name: path.basename(dir),\n filePath: dir,\n });\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${context.filePaths.length} file nodes, ${dirs.size} directory nodes`,\n };\n },\n};\n","/**\n * Logger with sensitive data masking.\n * Uses winston + winston-daily-rotate-file.\n *\n * - In production / CI (NODE_ENV=production): Console only (stdout, structured).\n * - Otherwise: Daily-rotating file logs under ./logs/ + Console.\n * - Log level controlled by LOG_LEVEL env var (default: \"info\").\n * - Sensitive keys and patterns are masked before output.\n *\n * @module shared/Logger\n */\nimport winston from 'winston';\nimport DailyRotateFile from 'winston-daily-rotate-file';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\n// ─── Sensitive-data masking ───────────────────────────────────────────────────\n\nconst SENSITIVE_KEYS: string[] = [\n 'password', 'passwd', 'pass', 'pwd', 'secret', 'secretkey', 'secret_key', 'secretaccesskey', 'accesskeyid',\n 'credentials', 'auth', 'authentication', 'login',\n 'api_key', 'apikey', 'api', 'access_key', 'access_token', 'accesskey',\n 'auth_key', 'auth_token', 'authkey', 'token', 'jwt', 'bearer_token',\n 'refresh_token', 'session_token', 'session_key', 'oauth_token',\n 'connection_string', 'conn_string', 'db_uri', 'db_url', 'database_url',\n 'mongodb_uri', 'mysql_uri', 'postgres_uri', 'sql_uri',\n 'db_username', 'db_password', 'db_host', 'db_port', 'db_name',\n 'encryption_key', 'crypto_key', 'private_key', 'public_key', 'ssl_key',\n 'ssh_key', 'pgp_key', 'rsa_key', 'aes_key',\n 'email', 'phone', 'telephone', 'mobile', 'ssn', 'social_security',\n 'credit_card', 'cc_number', 'card_number', 'cvv', 'expiry_date',\n 'birth_date', 'dob', 'address', 'zip_code', 'postal_code',\n 'bank_account', 'iban', 'swift_code', 'routing_number',\n 'tax_id', 'vat_number', 'financial_id',\n 'certificate', 'client_cert', 'server_cert', 'ca_cert',\n 'aws_key', 'aws_secret', 'azure_key', 'gcp_key', 's3_key',\n 'cloudinary_key', 'stripe_key', 'paypal_key', 'twilio_key',\n 'app_secret', 'client_secret', 'consumer_secret', 'encryption_secret',\n 'master_key', 'root_password', 'admin_password',\n 'config_secret', 'env_secret', 'deploy_key', 'ci_key',\n 'session_id', 'cookie_secret', 'csrf_token', 'xsrf_token',\n 'license_key', 'product_key', 'serial_number', 'activation_code',\n];\n\nconst SENSITIVE_PATTERNS: RegExp[] = [\n /(?:password|passwd|secret|api_key|access_token|auth_token|token)\\s*[:=]\\s*([^\\s,]+)/gi,\n /\\b\\d{16}\\b/gi,\n /\\b\\d{3}-\\d{2}-\\d{4}\\b/gi,\n /\\b[A-Za-z0-9]{32}\\b/gi,\n /\\b[A-Za-z0-9_-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,6}\\b/gi,\n /\\b\\d{10}\\b/gi,\n /\\b[A-Za-z0-9]{64}\\b/gi,\n /(?:connection_string|db_uri|db_url|mongodb_uri)\\s*[:=]\\s*([^\\s,]+)/gi,\n /(?:apikey|api_key|auth_key)\\s*[:=]\\s*([^\\s,]+)/gi,\n /(?:bearer\\s+)[a-zA-Z0-9\\-_]+\\.[a-zA-Z0-9\\-_]+\\.[a-zA-Z0-9\\-_]+/gi,\n];\n\nconst SENSITIVE_KEYS_REGEX = new RegExp(`^(${SENSITIVE_KEYS.join('|')})$`, 'i');\n\nclass Logger {\n private static instance: winston.Logger | null = null;\n\n static maskSensitiveData(value: string): string {\n if (typeof value === 'string' && value.length > 5) {\n const firstChar = value.at(0)!;\n const lastChar = value.at(-1)!;\n return firstChar + '*'.repeat(value.length - 2) + lastChar;\n }\n return value;\n }\n\n static maskSensitive(message: string, args: unknown[] = []): { maskedMessage: string; maskedArgs: unknown[] } {\n const maskString = (input: string): string => {\n if (typeof input !== 'string') return input;\n return SENSITIVE_PATTERNS.reduce((str, pattern) => {\n return str.replace(pattern, (match: string, value: string) =>\n value ? match.replace(value, Logger.maskSensitiveData(value)) : match,\n );\n }, input);\n };\n\n const deepMask = (obj: unknown): unknown => {\n if (typeof obj === 'string') return maskString(obj);\n if (Array.isArray(obj)) return obj.map((item: unknown) => deepMask(item));\n if (typeof obj === 'object' && obj !== null) {\n return Object.entries(obj as Record<string, unknown>).reduce(\n (acc: Record<string, unknown>, [key, value]) => {\n if (value === undefined) return acc;\n const isSensitiveKey = SENSITIVE_KEYS_REGEX.test(key);\n acc[key] = isSensitiveKey && typeof value === 'string'\n ? Logger.maskSensitiveData(value)\n : deepMask(value);\n return acc;\n },\n {},\n );\n }\n return obj;\n };\n\n return {\n maskedMessage: maskString(message),\n maskedArgs: args.map((arg: unknown) => deepMask(arg)),\n };\n }\n\n /** Global log directory: ~/.code-intel/logs */\n static readonly LOG_DIR = path.join(os.homedir(), '.code-intel', 'logs');\n\n static getLogger(): winston.Logger {\n if (!Logger.instance) {\n const isProduction = process.env.NODE_ENV === 'production';\n const logLevel = process.env.LOG_LEVEL ?? 'info';\n const transports: winston.transport[] = [];\n\n // Always add console transport\n transports.push(new winston.transports.Console());\n\n if (!isProduction) {\n // Dev + global installs: rotate logs into ~/.code-intel/logs/\n try {\n if (!fs.existsSync(Logger.LOG_DIR)) {\n fs.mkdirSync(Logger.LOG_DIR, { recursive: true });\n }\n transports.push(\n new DailyRotateFile({\n filename: path.join(Logger.LOG_DIR, '%DATE%-code-intel.log'),\n datePattern: 'YYYY-MM-DD',\n maxSize: '20m',\n maxFiles: '14d',\n }),\n );\n } catch {\n // If we can't write to the log dir (e.g. read-only FS), continue console-only\n }\n }\n\n Logger.instance = winston.createLogger({\n level: logLevel,\n format: winston.format.combine(\n winston.format.timestamp(),\n winston.format.printf(({ timestamp, level, message, ...meta }) => {\n const args = (meta[Symbol.for('splat') as unknown as string] as unknown[]) || [];\n const { maskedMessage, maskedArgs } = Logger.maskSensitive(message as string, args);\n const formattedArgs = maskedArgs.map((arg: unknown) =>\n typeof arg === 'object' ? JSON.stringify(arg) : String(arg),\n );\n const suffix = formattedArgs.length ? ' ' + formattedArgs.join(' ') : '';\n return `${timestamp} [${level.toUpperCase()}]: ${maskedMessage}${suffix}`;\n }),\n ),\n transports,\n });\n }\n return Logger.instance;\n }\n\n static info(message: string, ...args: unknown[]): void {\n Logger.getLogger().info(message, ...args);\n }\n\n static warn(message: string, ...args: unknown[]): void {\n Logger.getLogger().warn(message, ...args);\n }\n\n static error(message: string, ...args: unknown[]): void {\n Logger.getLogger().error(message, ...args);\n }\n\n static debug(message: string, ...args: unknown[]): void {\n Logger.getLogger().debug(message, ...args);\n }\n}\n\nexport default Logger;\n\n// Eagerly initialize so the log directory and file transport are created on import,\n// even if no log messages are emitted during a short run.\nLogger.getLogger();\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { detectLanguage, Language } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\nimport type { CodeNode, CodeEdge } from '../../shared/index.js';\nimport Logger from '../../shared/logger.js';\n\nexport const parsePhase: Phase = {\n name: 'parse',\n dependencies: ['structure'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n let symbolCount = 0;\n\n // Initialise shared caches that resolve phase will reuse\n if (!context.fileCache) context.fileCache = new Map();\n if (!context.fileFunctionIndex) context.fileFunctionIndex = new Map();\n\n // Batch-read all files in parallel (Node.js async I/O pool)\n const CONCURRENCY = 64;\n const filePaths = context.filePaths;\n\n // Read files in parallel batches\n let readDone = 0;\n for (let i = 0; i < filePaths.length; i += CONCURRENCY) {\n const batch = filePaths.slice(i, i + CONCURRENCY);\n await Promise.all(batch.map(async (filePath) => {\n try {\n const source = await fs.promises.readFile(filePath, 'utf-8');\n context.fileCache!.set(filePath, source);\n } catch {\n // Unreadable file — skip silently\n }\n }));\n readDone += batch.length;\n context.onPhaseProgress?.('parse:read', readDone, filePaths.length);\n }\n\n // Parse symbols from cached content\n let parseDone = 0;\n for (const filePath of filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) {\n if (context.verbose) {\n const relativePath = path.relative(context.workspaceRoot, filePath);\n Logger.info(` [parse] skipped (no parser): ${relativePath}`);\n }\n continue;\n }\n\n const source = context.fileCache.get(filePath);\n if (!source) continue;\n\n const relativePath = path.relative(context.workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n // Store a snippet on the file node for full-text search\n const fileNode = context.graph.getNode(fileNodeId);\n if (fileNode) {\n fileNode.content = source.slice(0, 2000);\n }\n\n const nodes: CodeNode[] = [];\n const edges: CodeEdge[] = [];\n const seen = new Set<string>();\n\n const lines = source.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n const trimmed = line.trim();\n\n // Skip comments\n if (\n trimmed.startsWith('//') ||\n trimmed.startsWith('#') ||\n trimmed.startsWith('*') ||\n trimmed.startsWith('/*')\n ) continue;\n\n const extracted = extractSymbol(trimmed, lang, i + 1, relativePath);\n if (!extracted) continue;\n\n const dedupeKey = extracted.name + ':' + extracted.kind;\n if (seen.has(dedupeKey)) continue;\n seen.add(dedupeKey);\n\n const nodeId = generateNodeId(extracted.kind, relativePath, extracted.name);\n\n // Estimate endLine by scanning forward for the closing brace / dedent (max 200 lines)\n const endLine = estimateEndLine(lines, i, lang);\n\n nodes.push({\n id: nodeId,\n kind: extracted.kind,\n name: extracted.name,\n filePath: relativePath,\n startLine: i + 1,\n endLine,\n exported: extracted.exported,\n content: extractBlock(lines, i, 20),\n });\n edges.push({\n id: generateEdgeId(fileNodeId, nodeId, 'contains'),\n source: fileNodeId,\n target: nodeId,\n kind: 'contains',\n weight: 1.0,\n });\n\n // has_member edge for methods inside classes\n if (extracted.ownerName) {\n const ownerId = generateNodeId('class', relativePath, extracted.ownerName);\n if (context.graph.getNode(ownerId) || nodes.some((n) => n.id === ownerId)) {\n edges.push({\n id: generateEdgeId(ownerId, nodeId, 'has_member'),\n source: ownerId,\n target: nodeId,\n kind: 'has_member',\n weight: 1.0,\n });\n }\n }\n\n symbolCount++;\n }\n\n for (const n of nodes) context.graph.addNode(n);\n for (const e of edges) context.graph.addEdge(e);\n\n // Build per-file sorted function/method index for fast enclosing-function lookup in resolve phase\n const funcs = nodes\n .filter((n) => n.kind === 'function' || n.kind === 'method')\n .map((n) => ({ id: n.id, startLine: n.startLine ?? 0, endLine: n.endLine }))\n .sort((a, b) => a.startLine - b.startLine);\n if (funcs.length > 0) {\n context.fileFunctionIndex!.set(relativePath, funcs);\n }\n parseDone++;\n context.onPhaseProgress?.('parse', parseDone, filePaths.length);\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Extracted ${symbolCount} symbols from ${filePaths.length} files`,\n };\n },\n};\n\n// ─── Symbol extraction ────────────────────────────────────────────────────────\n\ninterface ExtractedSymbol {\n kind: CodeNode['kind'];\n name: string;\n exported: boolean;\n ownerName?: string;\n}\n\nfunction extractSymbol(\n line: string,\n lang: Language,\n _lineNum: number,\n _filePath: string,\n): ExtractedSymbol | null {\n // --- TypeScript/JavaScript ---\n if (lang === Language.TypeScript || lang === Language.JavaScript) {\n const func = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:async\\s+)?function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('export') };\n\n const arrowFunc = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?\\(/);\n if (arrowFunc) return { kind: 'function', name: arrowFunc[1], exported: line.includes('export') };\n\n const arrowFunc2 = line.match(/^(?:export\\s+)?(?:const|let|var)\\s+(\\w+)\\s*=\\s*(?:async\\s+)?(?:\\([^)]*\\)|[a-zA-Z_]\\w*)\\s*=>/);\n if (arrowFunc2) return { kind: 'function', name: arrowFunc2[1], exported: line.includes('export') };\n\n const cls = line.match(/^(?:export\\s+)?(?:default\\s+)?(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('export') };\n\n const iface = line.match(/^(?:export\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('export') };\n\n const enumM = line.match(/^(?:export\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('export') };\n\n const typeAlias = line.match(/^(?:export\\s+)?type\\s+(\\w+)\\s*[=<]/);\n if (typeAlias) return { kind: 'type_alias', name: typeAlias[1], exported: line.includes('export') };\n\n const constVar = line.match(/^(?:export\\s+)?const\\s+(\\w+)\\s*(?::\\s*\\w[^=]*)?\\s*=/);\n if (constVar && /^[A-Z_]+$/.test(constVar[1])) {\n return { kind: 'constant', name: constVar[1], exported: line.includes('export') };\n }\n }\n\n // --- Python ---\n if (lang === Language.Python) {\n const func = line.match(/^(?:async\\s+)?def\\s+(\\w+)/);\n if (func) return { kind: func[1].startsWith('__') ? 'method' : 'function', name: func[1], exported: !func[1].startsWith('_') };\n\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n }\n\n // --- Java ---\n if (lang === Language.Java) {\n const cls = line.match(/(?:public|private|protected)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected)\\s+(?:static\\s+)?(?:[\\w<>\\[\\]]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n }\n\n // --- Go ---\n if (lang === Language.Go) {\n const func = line.match(/^func\\s+(\\w+)\\s*\\(/);\n if (func) return { kind: 'function', name: func[1], exported: func[1][0] === func[1][0].toUpperCase() };\n\n const method = line.match(/^func\\s+\\([^)]+\\)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: method[1][0] === method[1][0].toUpperCase() };\n\n const structM = line.match(/^type\\s+(\\w+)\\s+struct\\b/);\n if (structM) return { kind: 'struct', name: structM[1], exported: structM[1][0] === structM[1][0].toUpperCase() };\n\n const ifaceM = line.match(/^type\\s+(\\w+)\\s+interface\\b/);\n if (ifaceM) return { kind: 'interface', name: ifaceM[1], exported: ifaceM[1][0] === ifaceM[1][0].toUpperCase() };\n }\n\n // --- Rust ---\n if (lang === Language.Rust) {\n const func = line.match(/^(?:pub\\s+)?(?:async\\s+)?fn\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.startsWith('pub') };\n\n const structM = line.match(/^(?:pub\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.startsWith('pub') };\n\n const enumM = line.match(/^(?:pub\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: line.startsWith('pub') };\n\n const traitM = line.match(/^(?:pub\\s+)?trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: line.startsWith('pub') };\n\n const implM = line.match(/^impl(?:<[^>]*>)?\\s+(\\w+)/);\n if (implM) return { kind: 'class', name: implM[1], exported: false };\n }\n\n // --- C/C++ ---\n if (lang === Language.C || lang === Language.Cpp) {\n const cls = line.match(/^(?:class|struct)\\s+(\\w+)/);\n if (cls) return { kind: lang === Language.Cpp ? 'class' : 'struct', name: cls[1], exported: true };\n\n const nsM = line.match(/^namespace\\s+(\\w+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n\n const func = line.match(/^(?:[\\w:*&<>\\[\\]]+\\s+)+(\\w+)\\s*\\([^;]*$/);\n if (func && !['if', 'for', 'while', 'switch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: true };\n }\n }\n\n // --- C# ---\n if (lang === Language.CSharp) {\n const cls = line.match(/(?:public|internal|private)?\\s*(?:static\\s+)?(?:abstract\\s+)?(?:partial\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: line.includes('public') };\n\n const iface = line.match(/(?:public\\s+)?interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: line.includes('public') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: line.includes('public') };\n\n const method = line.match(/(?:public|private|protected|internal)\\s+(?:static\\s+)?(?:async\\s+)?(?:[\\w<>\\[\\]?]+)\\s+(\\w+)\\s*\\(/);\n if (method) return { kind: 'method', name: method[1], exported: line.includes('public') };\n\n const nsM = line.match(/namespace\\s+([\\w.]+)/);\n if (nsM) return { kind: 'namespace', name: nsM[1], exported: true };\n }\n\n // --- PHP ---\n if (lang === Language.PHP) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const func = line.match(/(?:public|private|protected|static\\s+)*function\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: line.includes('public') || !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: true };\n\n const traitM = line.match(/trait\\s+(\\w+)/);\n if (traitM) return { kind: 'trait', name: traitM[1], exported: true };\n }\n\n // --- Kotlin ---\n if (lang === Language.Kotlin) {\n const cls = line.match(/(?:data\\s+|sealed\\s+|abstract\\s+|open\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const iface = line.match(/interface\\s+(\\w+)/);\n if (iface) return { kind: 'interface', name: iface[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:suspend\\s+)?fun\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n\n const obj = line.match(/object\\s+(\\w+)/);\n if (obj) return { kind: 'class', name: obj[1], exported: !line.includes('private') };\n }\n\n // --- Ruby ---\n if (lang === Language.Ruby) {\n const cls = line.match(/^class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: true };\n\n const modM = line.match(/^module\\s+(\\w+)/);\n if (modM) return { kind: 'module', name: modM[1], exported: true };\n\n const method = line.match(/^(?:def\\s+(?:self\\.)?(\\w+))/);\n if (method) return { kind: 'method', name: method[1], exported: true };\n }\n\n // --- Swift ---\n if (lang === Language.Swift) {\n const cls = line.match(/(?:public\\s+|open\\s+)?(?:final\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !line.includes('private') };\n\n const structM = line.match(/(?:public\\s+)?struct\\s+(\\w+)/);\n if (structM) return { kind: 'struct', name: structM[1], exported: !line.includes('private') };\n\n const proto = line.match(/(?:public\\s+)?protocol\\s+(\\w+)/);\n if (proto) return { kind: 'interface', name: proto[1], exported: !line.includes('private') };\n\n const enumM = line.match(/(?:public\\s+)?enum\\s+(\\w+)/);\n if (enumM) return { kind: 'enum', name: enumM[1], exported: !line.includes('private') };\n\n const func = line.match(/(?:public\\s+|private\\s+|internal\\s+)?(?:static\\s+)?func\\s+(\\w+)/);\n if (func) return { kind: 'function', name: func[1], exported: !line.includes('private') };\n }\n\n // --- Dart ---\n if (lang === Language.Dart) {\n const cls = line.match(/(?:abstract\\s+)?class\\s+(\\w+)/);\n if (cls) return { kind: 'class', name: cls[1], exported: !cls[1].startsWith('_') };\n\n const func = line.match(/^(?:\\w+\\s+)?(\\w+)\\s*\\(/);\n if (func && !['if', 'for', 'while', 'switch', 'catch', 'return'].includes(func[1])) {\n return { kind: 'function', name: func[1], exported: !func[1].startsWith('_') };\n }\n }\n\n return null;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\n/**\n * Estimate the end line of a block by counting braces/indents (max 200-line scan).\n * Returns undefined when a reliable estimate is not possible.\n */\nfunction estimateEndLine(lines: string[], startIdx: number, lang: Language): number | undefined {\n const MAX_SCAN = 200;\n const end = Math.min(startIdx + MAX_SCAN, lines.length);\n\n // Brace-delimited languages\n if (\n lang !== Language.Python &&\n lang !== Language.Ruby\n ) {\n let depth = 0;\n let foundOpen = false;\n for (let i = startIdx; i < end; i++) {\n for (const ch of lines[i]) {\n if (ch === '{') { depth++; foundOpen = true; }\n else if (ch === '}') {\n depth--;\n if (foundOpen && depth === 0) return i + 1;\n }\n }\n }\n return undefined;\n }\n\n // Indent-based (Python, Ruby) — look for next same-level line\n const startIndent = (lines[startIdx].match(/^(\\s*)/) ?? ['', ''])[1].length;\n for (let i = startIdx + 1; i < end; i++) {\n const l = lines[i];\n if (l.trim() === '') continue;\n const indent = (l.match(/^(\\s*)/) ?? ['', ''])[1].length;\n if (indent <= startIndent && l.trim() !== '') return i;\n }\n return undefined;\n}\n\nfunction extractBlock(lines: string[], startIdx: number, maxLines: number): string {\n const end = Math.min(startIdx + maxLines, lines.length);\n return lines.slice(startIdx, end).join('\\n');\n}\n","import path from 'node:path';\nimport { detectLanguage } from '../../shared/index.js';\nimport type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\ninterface ParsedImport {\n rawPath: string;\n localNames: string[];\n isDefault: boolean;\n line: number;\n}\n\ninterface ParsedCall {\n name: string;\n receiverText?: string;\n isNew: boolean;\n line: number;\n}\n\ninterface ParsedHeritage {\n className: string;\n extendsNames: string[];\n implementsNames: string[];\n}\n\n// ─── Keywords to skip when extracting calls ───────────────────────────────────\nconst CALL_KEYWORDS = new Set([\n 'if', 'for', 'while', 'switch', 'catch', 'return', 'throw',\n 'typeof', 'instanceof', 'delete', 'void', 'new', 'import', 'export',\n 'from', 'const', 'let', 'var', 'function', 'class', 'interface',\n 'type', 'enum', 'extends', 'implements',\n]);\n\nexport const resolvePhase: Phase = {\n name: 'resolve',\n dependencies: ['parse'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph, workspaceRoot, filePaths } = context;\n\n // Reuse content cache populated by parse phase — eliminates all double I/O\n const fileCache = context.fileCache ?? new Map<string, string>();\n // Fast sorted function index built by parse phase — O(log n) enclosing-function lookup\n const fileFunctionIndex = context.fileFunctionIndex ?? new Map<\n string,\n { id: string; startLine: number; endLine: number | undefined }[]\n >();\n\n let importEdges = 0;\n let callEdges = 0;\n let heritageEdges = 0;\n\n // ── Build file index for import resolution ────────────────────────────────\n const fileIndex = new Map<string, string>();\n for (const fp of filePaths) {\n const rel = path.relative(workspaceRoot, fp);\n fileIndex.set(rel, fp);\n const noExt = rel.replace(/\\.\\w+$/, '');\n if (!fileIndex.has(noExt)) fileIndex.set(noExt, fp);\n const base = path.basename(rel, path.extname(rel));\n if (!fileIndex.has(base)) fileIndex.set(base, fp);\n }\n\n // ── Build symbol index: name → nodeId ─────────────────────────────────────\n const symbolIndex = new Map<string, string>();\n const fileSymbolIndex = new Map<string, Map<string, string>>();\n for (const node of graph.allNodes()) {\n if ([\n 'function', 'class', 'interface', 'method', 'enum',\n 'type_alias', 'variable', 'constant', 'struct', 'trait',\n ].includes(node.kind)) {\n symbolIndex.set(node.name, node.id);\n let fileMap = fileSymbolIndex.get(node.filePath);\n if (!fileMap) { fileMap = new Map(); fileSymbolIndex.set(node.filePath, fileMap); }\n fileMap.set(node.name, node.id);\n }\n }\n\n // ── Process each file ─────────────────────────────────────────────────────\n let fileDone = 0;\n for (const filePath of filePaths) {\n const lang = detectLanguage(filePath);\n if (!lang) continue;\n\n const relativePath = path.relative(workspaceRoot, filePath);\n const fileNodeId = generateNodeId('file', relativePath, relativePath);\n\n // Use cached content — zero additional disk I/O\n const source = fileCache.get(filePath);\n if (!source) continue;\n\n const lines = source.split('\\n');\n const imports = extractImports(lines, lang === 'python');\n const calls = extractCalls(lines);\n const heritages = extractHeritage(lines);\n\n // ── Imports → IMPORTS edges ───────────────────────────────────────────\n for (const imp of imports) {\n const cleaned = imp.rawPath.replace(/['\"]/g, '');\n let resolvedRelPath: string | null = null;\n\n if (cleaned.startsWith('.')) {\n // Relative import — strip .js/.jsx since TS imports use .js but files are .ts\n const cleanedNoJs = cleaned.replace(/\\.(js|jsx)$/, '');\n const fromDir = path.dirname(relativePath);\n for (const ext of ['', '.ts', '.tsx', '.js', '.jsx', '.py', '.java', '.go', '/index.ts', '/index.js']) {\n const candidate = path.join(fromDir, cleanedNoJs + ext);\n const normalized = path.normalize(candidate);\n if (fileIndex.has(normalized)) {\n const absPath = fileIndex.get(normalized)!;\n resolvedRelPath = path.relative(workspaceRoot, absPath);\n break;\n }\n }\n } else {\n // Package import — try to find in file index\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go']) {\n if (fileIndex.has(cleaned + ext)) { resolvedRelPath = cleaned + ext; break; }\n }\n if (!resolvedRelPath) {\n const asPath = cleaned.replace(/\\./g, '/');\n for (const ext of ['', '.ts', '.js', '.py', '.java', '.go', '/index.ts', '/__init__.py']) {\n if (fileIndex.has(asPath + ext)) { resolvedRelPath = asPath + ext; break; }\n }\n }\n }\n\n if (resolvedRelPath) {\n const targetFileId = generateNodeId('file', resolvedRelPath, resolvedRelPath);\n if (graph.getNode(targetFileId)) {\n const edgeId = generateEdgeId(fileNodeId, targetFileId, 'imports');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: fileNodeId,\n target: targetFileId,\n kind: 'imports',\n weight: 0.95,\n label: cleaned,\n });\n importEdges++;\n }\n }\n }\n }\n\n // ── Calls → CALLS edges ───────────────────────────────────────────────\n const localSymbols = fileSymbolIndex.get(relativePath);\n const funcList = fileFunctionIndex.get(relativePath); // sorted by startLine\n\n for (const call of calls) {\n // Tier 1: same-file symbol (high confidence)\n let targetId = localSymbols?.get(call.name);\n let confidence = 0.95;\n\n if (!targetId) {\n // Tier 2: global symbol (lower confidence)\n targetId = symbolIndex.get(call.name);\n confidence = 0.5;\n }\n\n if (targetId) {\n // Use fast sorted-list lookup instead of iterating all graph nodes\n const callerNodeId = funcList\n ? findEnclosingFunctionFast(funcList, call.line)\n : null;\n const sourceId = callerNodeId ?? fileNodeId;\n\n if (sourceId !== targetId) {\n const edgeId = generateEdgeId(sourceId, targetId, 'calls');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId,\n source: sourceId,\n target: targetId,\n kind: 'calls',\n weight: confidence,\n label: call.name,\n });\n callEdges++;\n }\n }\n }\n }\n\n // ── Heritage → EXTENDS/IMPLEMENTS edges ──────────────────────────────\n for (const h of heritages) {\n const classNodeId = localSymbols?.get(h.className) ?? symbolIndex.get(h.className);\n if (!classNodeId) continue;\n\n for (const ext of h.extendsNames) {\n const targetId = symbolIndex.get(ext);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'extends');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId, source: classNodeId, target: targetId,\n kind: 'extends', weight: 1.0, label: `extends ${ext}`,\n });\n heritageEdges++;\n }\n }\n }\n\n for (const impl of h.implementsNames) {\n const targetId = symbolIndex.get(impl);\n if (targetId) {\n const edgeId = generateEdgeId(classNodeId, targetId, 'implements');\n if (!graph.getEdge(edgeId)) {\n graph.addEdge({\n id: edgeId, source: classNodeId, target: targetId,\n kind: 'implements', weight: 1.0, label: `implements ${impl}`,\n });\n heritageEdges++;\n }\n }\n }\n }\n fileDone++;\n context.onPhaseProgress?.('resolve', fileDone, filePaths.length);\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Resolved ${importEdges} imports, ${callEdges} calls, ${heritageEdges} heritage edges. Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`,\n };\n },\n};\n\n// ─── Import extraction ────────────────────────────────────────────────────────\n\nfunction extractImports(lines: string[], isPython: boolean): ParsedImport[] {\n const imports: ParsedImport[] = [];\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i].trim();\n\n // TypeScript/JavaScript: import ... from '...'\n const tsImport = line.match(/import\\s+.*?from\\s+['\"]([^'\"]+)['\"]/);\n if (tsImport) {\n const names: string[] = [];\n const namedMatch = line.match(/\\{([^}]+)\\}/);\n if (namedMatch) {\n names.push(\n ...namedMatch[1]\n .split(',')\n .map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim())\n .filter(Boolean),\n );\n }\n const defaultMatch = line.match(/import\\s+(\\w+)/);\n if (defaultMatch && defaultMatch[1] !== 'type') names.push(defaultMatch[1]);\n imports.push({ rawPath: tsImport[1], localNames: names, isDefault: !namedMatch, line: i + 1 });\n continue;\n }\n\n // Python: from X import Y / import X\n if (isPython) {\n const fromImport = line.match(/from\\s+([\\w.]+)\\s+import\\s+(.+)/);\n if (fromImport) {\n const names = fromImport[2].split(',').map((n) => n.trim().split(/\\s+as\\s+/).pop()!.trim()).filter(Boolean);\n imports.push({ rawPath: fromImport[1], localNames: names, isDefault: false, line: i + 1 });\n continue;\n }\n const directImport = line.match(/^import\\s+([\\w.]+)(?:\\s+as\\s+(\\w+))?/);\n if (directImport) {\n imports.push({\n rawPath: directImport[1],\n localNames: [directImport[2] ?? directImport[1].split('.').pop()!],\n isDefault: false,\n line: i + 1,\n });\n continue;\n }\n }\n\n // Java/Kotlin: import com.example.Foo\n const javaImport = line.match(/^import\\s+(?:static\\s+)?([\\w.]+)/);\n if (javaImport && !line.includes('from')) {\n const parts = javaImport[1].split('.');\n imports.push({ rawPath: javaImport[1], localNames: [parts[parts.length - 1]], isDefault: false, line: i + 1 });\n continue;\n }\n\n // Go: import \"path\"\n const goImport = line.match(/^\\s*\"([^\"]+)\"/);\n if (goImport && (i > 0 && lines[i - 1]?.includes('import') || line.match(/^import\\s+\"/))) {\n const parts = goImport[1].split('/');\n imports.push({ rawPath: goImport[1], localNames: [parts[parts.length - 1]], isDefault: false, line: i + 1 });\n continue;\n }\n\n // C/C++: #include\n const includeMatch = line.match(/#include\\s+[<\"]([^>\"]+)[>\"]/);\n if (includeMatch) {\n imports.push({ rawPath: includeMatch[1], localNames: [], isDefault: false, line: i + 1 });\n continue;\n }\n\n // Rust: use crate::... / use super::...\n const rustUse = line.match(/^use\\s+([\\w:]+)/);\n if (rustUse) {\n const parts = rustUse[1].split('::');\n imports.push({ rawPath: rustUse[1], localNames: [parts[parts.length - 1]], isDefault: false, line: i + 1 });\n continue;\n }\n\n // C#: using\n const usingMatch = line.match(/^using\\s+([\\w.]+)/);\n if (usingMatch) {\n const parts = usingMatch[1].split('.');\n imports.push({ rawPath: usingMatch[1], localNames: [parts[parts.length - 1]], isDefault: false, line: i + 1 });\n }\n\n // Ruby: require\n const requireMatch = line.match(/require\\s+['\"]([^'\"]+)['\"]/);\n if (requireMatch) {\n imports.push({ rawPath: requireMatch[1], localNames: [], isDefault: false, line: i + 1 });\n }\n }\n\n return imports;\n}\n\n// ─── Call extraction ──────────────────────────────────────────────────────────\n\nfunction extractCalls(lines: string[]): ParsedCall[] {\n const calls: ParsedCall[] = [];\n const callRegex = /(?:new\\s+)?(\\w+)\\s*\\(/g;\n\n for (let i = 0; i < lines.length; i++) {\n const line = lines[i];\n // Skip declaration lines\n if (/^\\s*(export\\s+)?(async\\s+)?function\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?(abstract\\s+)?class\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?interface\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?enum\\s/.test(line)) continue;\n if (/^\\s*(export\\s+)?type\\s+\\w+\\s*=/.test(line)) continue;\n if (/^\\s*import\\s/.test(line)) continue;\n if (/^\\s*\\/\\//.test(line)) continue;\n\n let match;\n callRegex.lastIndex = 0;\n while ((match = callRegex.exec(line)) !== null) {\n const name = match[1];\n if (CALL_KEYWORDS.has(name)) continue;\n const isNew = line.substring(Math.max(0, match.index - 4), match.index).includes('new');\n calls.push({ name, isNew, line: i + 1 });\n }\n\n // Member calls: receiver.method(\n const memberCallRegex = /(\\w+)\\.(\\w+)\\s*\\(/g;\n memberCallRegex.lastIndex = 0;\n while ((match = memberCallRegex.exec(line)) !== null) {\n calls.push({ name: match[2], receiverText: match[1], isNew: false, line: i + 1 });\n }\n }\n\n return calls;\n}\n\n// ─── Heritage extraction ──────────────────────────────────────────────────────\n\nfunction extractHeritage(lines: string[]): ParsedHeritage[] {\n const heritages: ParsedHeritage[] = [];\n\n for (const line of lines) {\n const classMatch = line.match(/class\\s+(\\w+)(?:\\s+extends\\s+(\\w+))?(?:\\s+implements\\s+([\\w,\\s]+))?/);\n if (classMatch) {\n const extendsNames = classMatch[2] ? [classMatch[2]] : [];\n const implementsNames = classMatch[3] ? classMatch[3].split(',').map((n) => n.trim()).filter(Boolean) : [];\n heritages.push({ className: classMatch[1], extendsNames, implementsNames });\n continue;\n }\n // Python: class Foo(Bar, Baz):\n const pyClassMatch = line.match(/class\\s+(\\w+)\\(([^)]+)\\)/);\n if (pyClassMatch) {\n const bases = pyClassMatch[2].split(',').map((n) => n.trim()).filter(Boolean);\n heritages.push({ className: pyClassMatch[1], extendsNames: bases, implementsNames: [] });\n }\n }\n\n return heritages;\n}\n\n// ─── Enclosing function lookup (O(log n) binary search on sorted list) ────────\n\nfunction findEnclosingFunctionFast(\n funcs: { id: string; startLine: number; endLine: number | undefined }[],\n line: number,\n): string | null {\n // Binary search for the last function whose startLine <= line\n let lo = 0;\n let hi = funcs.length - 1;\n let best: string | null = null;\n\n while (lo <= hi) {\n const mid = (lo + hi) >> 1;\n const fn = funcs[mid];\n if (fn.startLine <= line) {\n // Candidate — check endLine if available\n if (fn.endLine === undefined || line <= fn.endLine) {\n best = fn.id;\n }\n lo = mid + 1;\n } else {\n hi = mid - 1;\n }\n }\n\n return best;\n}\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const clusterPhase: Phase = {\n name: 'cluster',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct', 'trait', 'enum']);\n const nodesByDir = new Map<string, { id: string; name: string }[]>();\n\n for (const node of graph.allNodes()) {\n if (!relevantKinds.has(node.kind)) continue;\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = nodesByDir.get(dir);\n if (!group) {\n group = [];\n nodesByDir.set(dir, group);\n }\n group.push({ id: node.id, name: node.name });\n }\n\n let clusterCount = 0;\n const dirEntries = [...nodesByDir.entries()];\n let clusterDone = 0;\n for (const [dir, members] of dirEntries) {\n clusterDone++;\n context.onPhaseProgress?.('cluster', clusterDone, dirEntries.length);\n if (members.length < 2) continue;\n\n const clusterId = generateNodeId('cluster', dir, `cluster-${clusterCount}`);\n const label = dir.split('/').filter(Boolean).pop() ?? `cluster-${clusterCount}`;\n\n graph.addNode({\n id: clusterId,\n kind: 'cluster',\n name: label,\n filePath: dir,\n metadata: { memberCount: members.length },\n });\n\n for (const member of members) {\n graph.addEdge({\n id: generateEdgeId(member.id, clusterId, 'belongs_to'),\n source: member.id,\n target: clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n clusterCount++;\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Created ${clusterCount} clusters`,\n };\n },\n};\n","import type { Phase, PhaseResult, PipelineContext } from '../types.js';\nimport { generateNodeId, generateEdgeId } from '../../graph/id-generator.js';\n\nexport const flowPhase: Phase = {\n name: 'flow',\n dependencies: ['resolve'],\n async execute(context: PipelineContext): Promise<PhaseResult> {\n const start = Date.now();\n const { graph } = context;\n\n // Find entry points: exported functions with no incoming call edges\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: { id: string; name: string; score: number; filePath: string }[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n let score = 0;\n const hasCallers = calledNodes.has(node.id);\n const outCalls = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n\n if (!hasCallers && outCalls.length > 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen|bootstrap)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec') || node.filePath.includes('__test')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller') || node.filePath.includes('handler')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({ id: node.id, name: node.name, score, filePath: node.filePath });\n }\n }\n\n entryPoints.sort((a, b) => b.score - a.score);\n\n // Trace flows from top entry points (max 20)\n const maxFlows = 75;\n const maxDepth = 10;\n const maxBranching = 4;\n let flowCount = 0;\n const epSlice = entryPoints.slice(0, 20);\n\n for (let epIdx = 0; epIdx < epSlice.length; epIdx++) {\n const ep = epSlice[epIdx];\n context.onPhaseProgress?.('flow', epIdx + 1, epSlice.length);\n if (flowCount >= maxFlows) break;\n\n // BFS trace\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: ep.id, path: [ep.id] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flowCount < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n // Record flow\n const flowId = generateNodeId('flow', ep.filePath, `flow-${flowCount}`);\n graph.addNode({\n id: flowId,\n kind: 'flow',\n name: `${ep.name} flow ${flowCount}`,\n filePath: ep.filePath,\n metadata: { steps: path, entryPoint: ep.name },\n });\n\n // Add step_of edges\n for (let i = 0; i < path.length; i++) {\n graph.addEdge({\n id: generateEdgeId(path[i], flowId, `step_of_${i}`),\n source: path[i],\n target: flowId,\n kind: 'step_of',\n weight: 1.0,\n label: `step ${i + 1}`,\n });\n }\n\n flowCount++;\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n return {\n status: 'completed',\n duration: Date.now() - start,\n message: `Found ${entryPoints.length} entry points, traced ${flowCount} flows`,\n };\n },\n};\n","export interface Scope {\n name: string;\n kind: 'module' | 'function' | 'block' | 'class';\n parent: Scope | null;\n bindings: Map<string, ScopeBinding>;\n children: Scope[];\n}\n\nexport interface ScopeBinding {\n name: string;\n nodeId: string;\n kind: 'variable' | 'function' | 'class' | 'parameter' | 'import';\n}\n\nexport function createScope(\n name: string,\n kind: Scope['kind'],\n parent: Scope | null = null,\n): Scope {\n const scope: Scope = { name, kind, parent, bindings: new Map(), children: [] };\n parent?.children.push(scope);\n return scope;\n}\n\nexport function resolveBinding(name: string, scope: Scope): ScopeBinding | null {\n let current: Scope | null = scope;\n while (current !== null) {\n const binding = current.bindings.get(name);\n if (binding) return binding;\n current = current.parent;\n }\n return null;\n}\n\nexport function addBinding(scope: Scope, binding: ScopeBinding): void {\n scope.bindings.set(binding.name, binding);\n}\n","import type { CodeNode } from '../shared/index.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { generateNodeId, generateEdgeId } from '../graph/id-generator.js';\n\nexport interface ClusterResult {\n clusterId: string;\n label: string;\n memberIds: string[];\n}\n\nexport function detectCommunities(graph: KnowledgeGraph): ClusterResult[] {\n // Build adjacency for relevant node kinds\n const relevantKinds = new Set(['function', 'class', 'method', 'interface', 'struct']);\n const nodes: CodeNode[] = [];\n\n for (const node of graph.allNodes()) {\n if (relevantKinds.has(node.kind)) {\n nodes.push(node);\n }\n }\n\n if (nodes.length < 10) return [];\n\n // Group by file directory as simple heuristic clustering\n const dirGroups = new Map<string, CodeNode[]>();\n for (const node of nodes) {\n const dir = node.filePath.split('/').slice(0, -1).join('/') || '.';\n let group = dirGroups.get(dir);\n if (!group) {\n group = [];\n dirGroups.set(dir, group);\n }\n group.push(node);\n }\n\n const clusters: ClusterResult[] = [];\n let idx = 0;\n\n for (const [dir, members] of dirGroups) {\n if (members.length < 2) continue;\n const clusterId = generateNodeId('cluster', dir, `cluster-${idx}`);\n const label = generateLabel(dir, members);\n\n clusters.push({\n clusterId,\n label,\n memberIds: members.map((m) => m.id),\n });\n idx++;\n }\n\n return clusters;\n}\n\nfunction generateLabel(dir: string, members: CodeNode[]): string {\n const parts = dir.split('/').filter(Boolean);\n if (parts.length > 0) {\n return parts[parts.length - 1];\n }\n return `cluster-${members[0]?.name ?? 'unknown'}`;\n}\n\nexport function addClustersToGraph(graph: KnowledgeGraph, clusters: ClusterResult[]): void {\n for (const cluster of clusters) {\n graph.addNode({\n id: cluster.clusterId,\n kind: 'cluster',\n name: cluster.label,\n filePath: '',\n metadata: { memberCount: cluster.memberIds.length },\n });\n\n for (const memberId of cluster.memberIds) {\n graph.addEdge({\n id: generateEdgeId(memberId, cluster.clusterId, 'belongs_to'),\n source: memberId,\n target: cluster.clusterId,\n kind: 'belongs_to',\n weight: 1.0,\n });\n }\n }\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface EntryPoint {\n nodeId: string;\n name: string;\n score: number;\n filePath: string;\n}\n\nexport function findEntryPoints(graph: KnowledgeGraph): EntryPoint[] {\n const calledNodes = new Set<string>();\n for (const edge of graph.findEdgesByKind('calls')) {\n calledNodes.add(edge.target);\n }\n\n const entryPoints: EntryPoint[] = [];\n\n for (const node of graph.allNodes()) {\n if (!['function', 'method'].includes(node.kind)) continue;\n\n const outEdges = [...graph.findEdgesFrom(node.id)].filter((e) => e.kind === 'calls');\n const inDegree = calledNodes.has(node.id) ? 1 : 0;\n\n let score = 0;\n if (outEdges.length > 0 && inDegree === 0) score += 10;\n if (node.exported) score += 5;\n if (/^(main|handle|init|start|run|execute|process|serve|listen)/.test(node.name)) score += 3;\n if (node.filePath.includes('test') || node.filePath.includes('spec')) score -= 20;\n if (node.filePath.includes('route') || node.filePath.includes('controller')) score += 8;\n\n if (score >= 5) {\n entryPoints.push({\n nodeId: node.id,\n name: node.name,\n score,\n filePath: node.filePath,\n });\n }\n }\n\n return entryPoints.sort((a, b) => b.score - a.score);\n}\n\nexport interface FlowTrace {\n entryPointId: string;\n steps: string[];\n}\n\nexport function traceFlow(\n entryId: string,\n graph: KnowledgeGraph,\n maxDepth = 10,\n maxBranching = 4,\n): FlowTrace[] {\n const flows: FlowTrace[] = [];\n const maxFlows = 75;\n\n function bfs(): void {\n const queue: { nodeId: string; path: string[] }[] = [{ nodeId: entryId, path: [entryId] }];\n const visited = new Set<string>();\n\n while (queue.length > 0 && flows.length < maxFlows) {\n const { nodeId, path } = queue.shift()!;\n if (path.length > maxDepth) continue;\n\n const callEdges = [...graph.findEdgesFrom(nodeId)]\n .filter((e) => e.kind === 'calls')\n .slice(0, maxBranching);\n\n if (callEdges.length === 0 && path.length >= 3) {\n flows.push({ entryPointId: entryId, steps: [...path] });\n continue;\n }\n\n for (const edge of callEdges) {\n if (visited.has(edge.target)) continue;\n visited.add(edge.target);\n queue.push({ nodeId: edge.target, path: [...path, edge.target] });\n }\n }\n }\n\n bfs();\n return deduplicateFlows(flows);\n}\n\nfunction deduplicateFlows(flows: FlowTrace[]): FlowTrace[] {\n const result: FlowTrace[] = [];\n\n for (const flow of flows) {\n const edges = new Set<string>();\n for (let i = 0; i < flow.steps.length - 1; i++) {\n edges.add(`${flow.steps[i]}->${flow.steps[i + 1]}`);\n }\n\n const isDuplicate = result.some((existing) => {\n const existingEdges = new Set<string>();\n for (let i = 0; i < existing.steps.length - 1; i++) {\n existingEdges.add(`${existing.steps[i]}->${existing.steps[i + 1]}`);\n }\n let overlap = 0;\n for (const e of edges) {\n if (existingEdges.has(e)) overlap++;\n }\n return overlap / Math.max(edges.size, 1) > 0.7;\n });\n\n if (!isDuplicate) result.push(flow);\n }\n\n return result;\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\n\nexport interface SearchResult {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number;\n snippet?: string;\n}\n\nexport function textSearch(\n graph: KnowledgeGraph,\n query: string,\n limit = 20,\n): SearchResult[] {\n const terms = query.toLowerCase().split(/\\s+/).filter(Boolean);\n const results: SearchResult[] = [];\n\n // Deprioritize test/dist paths\n const isTestPath = (fp: string) =>\n fp.includes('test') || fp.includes('spec') || fp.includes('__test');\n const isDistPath = (fp: string) =>\n fp.includes('/dist') || fp.includes('\\\\dist') || fp.includes('.d.ts');\n\n for (const node of graph.allNodes()) {\n if (['directory', 'cluster', 'flow'].includes(node.kind)) continue;\n\n let score = 0;\n const nameLC = node.name.toLowerCase();\n const pathLC = node.filePath.toLowerCase();\n\n for (const term of terms) {\n if (nameLC === term) score += 10;\n else if (nameLC.startsWith(term)) score += 7;\n else if (nameLC.includes(term)) score += 5;\n if (pathLC.includes(term)) score += 2;\n if (node.content?.toLowerCase().includes(term)) score += 3;\n }\n\n // Boost source files over compiled/test files\n if (score > 0) {\n if (isDistPath(node.filePath)) score -= 8;\n if (isTestPath(node.filePath)) score -= 4;\n // Boost by kind relevance\n if (['function', 'class', 'interface', 'method'].includes(node.kind)) score += 1;\n }\n\n if (score > 0) {\n results.push({\n nodeId: node.id,\n name: node.name,\n kind: node.kind,\n filePath: node.filePath,\n score,\n snippet: node.content?.slice(0, 200),\n });\n }\n }\n\n results.sort((a, b) => b.score - a.score);\n return results.slice(0, limit);\n}\n\nexport function reciprocalRankFusion(\n ...rankings: SearchResult[][]\n): SearchResult[] {\n const K = 60;\n const scoreMap = new Map<string, { result: SearchResult; rrfScore: number }>();\n\n for (const ranking of rankings) {\n for (let rank = 0; rank < ranking.length; rank++) {\n const result = ranking[rank];\n const existing = scoreMap.get(result.nodeId);\n const rrfContribution = 1 / (K + rank + 1);\n\n if (existing) {\n existing.rrfScore += rrfContribution;\n } else {\n scoreMap.set(result.nodeId, {\n result,\n rrfScore: rrfContribution,\n });\n }\n }\n }\n\n return [...scoreMap.values()]\n .sort((a, b) => b.rrfScore - a.rrfScore)\n .map((entry) => ({ ...entry.result, score: entry.rrfScore }));\n}\n","export { textSearch, reciprocalRankFusion } from './text-search.js';\nexport type { SearchResult } from './text-search.js';\nexport { embedNodes } from './embedder.js';\nexport type { EmbeddedNode } from './embedder.js';\nexport { VectorIndex } from './vector-index.js';\nexport type { VectorHit } from './vector-index.js';\n\n","import { DbManager } from '../storage/db-manager.js';\nimport type { EmbeddedNode } from './embedder.js';\n\nconst EMBED_TABLE = 'embed_nodes';\nconst EMBED_DIM = 384; // all-MiniLM-L6-v2 output dimension\nconst INDEX_NAME = 'embed_vec_idx';\n\nexport class VectorIndex {\n private db: DbManager;\n\n constructor(db: DbManager) {\n this.db = db;\n }\n\n async init(): Promise<void> {\n // Install + load VECTOR extension\n await this.db.execute('INSTALL VECTOR');\n await this.db.execute('LOAD EXTENSION VECTOR');\n\n // Create node table for embeddings\n await this.db.execute(`\n CREATE NODE TABLE IF NOT EXISTS ${EMBED_TABLE} (\n id STRING,\n name STRING,\n kind STRING,\n file_path STRING,\n text STRING,\n embedding FLOAT[${EMBED_DIM}],\n PRIMARY KEY (id)\n )\n `);\n }\n\n async buildIndex(nodes: EmbeddedNode[]): Promise<void> {\n // Drop existing data\n await this.db.execute(`MATCH (n:${EMBED_TABLE}) DETACH DELETE n`).catch(() => {});\n\n // Insert embeddings\n for (const node of nodes) {\n const vecLiteral = `[${node.embedding.join(',')}]`;\n await this.db.execute(\n `CREATE (:${EMBED_TABLE} {\n id: '${esc(node.id)}',\n name: '${esc(node.name)}',\n kind: '${esc(node.kind)}',\n file_path: '${esc(node.filePath)}',\n text: '${esc(node.text)}',\n embedding: ${vecLiteral}\n })`,\n );\n }\n\n // Drop and recreate vector index (signature: tableName, indexName, propertyName)\n await this.db.execute(`CALL DROP_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}')`).catch(() => {});\n await this.db.execute(`CALL CREATE_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', 'embedding')`);\n // Do NOT close the DB - keep connection open for searches\n }\n\n async search(queryEmbedding: number[], topK = 10): Promise<VectorHit[]> {\n const vecLiteral = `[${queryEmbedding.join(',')}]`;\n const rows = await this.db.query(\n `CALL QUERY_VECTOR_INDEX('${EMBED_TABLE}', '${INDEX_NAME}', ${vecLiteral}, ${topK}) RETURN node.id, node.name, node.kind, node.file_path, distance`,\n );\n return rows.map((r) => ({\n nodeId: String(r['node.id']),\n name: String(r['node.name']),\n kind: String(r['node.kind']),\n filePath: String(r['node.file_path']),\n score: 1 - Number(r['distance']), // cosine distance → similarity\n }));\n }\n\n async isBuilt(): Promise<boolean> {\n try {\n const rows = await this.db.query(`MATCH (n:${EMBED_TABLE}) RETURN count(n) AS cnt`);\n return Number(rows[0]?.cnt ?? 0) > 0;\n } catch {\n return false;\n }\n }\n}\n\nexport interface VectorHit {\n nodeId: string;\n name: string;\n kind: string;\n filePath: string;\n score: number; // 0..1 where 1 = most similar\n}\n\nfunction esc(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport os from 'node:os';\n\nexport interface RepoEntry {\n name: string;\n path: string;\n indexedAt: string;\n stats: { nodes: number; edges: number; files: number };\n}\n\nconst GLOBAL_DIR = path.join(os.homedir(), '.code-intel');\nconst REPOS_FILE = path.join(GLOBAL_DIR, 'repos.json');\n\nexport function loadRegistry(): RepoEntry[] {\n try {\n const data = fs.readFileSync(REPOS_FILE, 'utf-8');\n return JSON.parse(data);\n } catch {\n return [];\n }\n}\n\nexport function saveRegistry(entries: RepoEntry[]): void {\n fs.mkdirSync(GLOBAL_DIR, { recursive: true });\n fs.writeFileSync(REPOS_FILE, JSON.stringify(entries, null, 2));\n}\n\nexport function upsertRepo(entry: RepoEntry): void {\n const entries = loadRegistry();\n const idx = entries.findIndex((e) => e.path === entry.path);\n if (idx >= 0) {\n entries[idx] = entry;\n } else {\n entries.push(entry);\n }\n saveRegistry(entries);\n}\n\nexport function removeRepo(repoPath: string): void {\n const entries = loadRegistry().filter((e) => e.path !== repoPath);\n saveRegistry(entries);\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport interface IndexMetadata {\n indexedAt: string;\n commitHash?: string;\n stats: {\n nodes: number;\n edges: number;\n files: number;\n duration: number;\n };\n}\n\nexport function saveMetadata(repoDir: string, metadata: IndexMetadata): void {\n const metaDir = path.join(repoDir, '.code-intel');\n fs.mkdirSync(metaDir, { recursive: true });\n fs.writeFileSync(path.join(metaDir, 'meta.json'), JSON.stringify(metadata, null, 2));\n}\n\nexport function loadMetadata(repoDir: string): IndexMetadata | null {\n try {\n const data = fs.readFileSync(path.join(repoDir, '.code-intel', 'meta.json'), 'utf-8');\n return JSON.parse(data);\n } catch {\n return null;\n }\n}\n\nexport function getDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'graph.db');\n}\n\nexport function getVectorDbPath(repoDir: string): string {\n return path.join(repoDir, '.code-intel', 'vector.db');\n}\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js';\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n ListResourcesRequestSchema,\n ReadResourceRequestSchema,\n} from '@modelcontextprotocol/sdk/types.js';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { loadMetadata } from '../storage/metadata.js';\nimport {\n listGroups,\n loadGroup,\n saveGroup,\n loadSyncResult,\n saveSyncResult,\n} from '../multi-repo/group-registry.js';\nimport { syncGroup } from '../multi-repo/group-sync.js';\nimport { queryGroup } from '../multi-repo/group-query.js';\nimport { execSync } from 'node:child_process';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nexport function createMcpServer(graph: KnowledgeGraph, repoName: string, workspaceRoot?: string): Server {\n const server = new Server(\n { name: 'code-intel', version: '0.1.0' },\n { capabilities: { tools: {}, resources: {} } },\n );\n\n // ─── Tool Definitions ──────────────────────────────────────────────────────\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: [\n // ── Core repo tools ──────────────────────────────────────────────────\n {\n name: 'repos',\n description: 'List all indexed repositories with node and edge counts',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'overview',\n description: 'Repository summary: total nodes/edges and a full breakdown of node and edge counts by kind. Use this first to understand the shape of the codebase.',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n\n // ── Search & inspect ─────────────────────────────────────────────────\n {\n name: 'search',\n description: 'BM25 keyword search across all indexed symbols — functions, classes, files, routes, etc.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n query: { type: 'string', description: 'Search query (symbol name, keyword, or partial match)' },\n limit: { type: 'number', description: 'Max results to return (default: 20)' },\n },\n required: ['query'],\n },\n },\n {\n name: 'inspect',\n description: '360° view of a symbol: definition location, callers, callees, heritage (extends/implements), members, cluster, and source preview (first 500 chars)',\n inputSchema: {\n type: 'object' as const,\n properties: {\n symbol_name: { type: 'string', description: 'Exact symbol name to inspect' },\n },\n required: ['symbol_name'],\n },\n },\n {\n name: 'blast_radius',\n description: 'Impact analysis: traverse the call/import graph to find all symbols that depend on or are affected by a given symbol. Returns risk level (LOW / MEDIUM / HIGH).',\n inputSchema: {\n type: 'object' as const,\n properties: {\n target: { type: 'string', description: 'Target symbol name' },\n direction: {\n type: 'string',\n enum: ['callers', 'callees', 'both'],\n description: 'Which direction to trace — callers (who depends on it), callees (what it depends on), or both (default: both)',\n },\n max_hops: { type: 'number', description: 'Maximum traversal depth (default: 5)' },\n },\n required: ['target'],\n },\n },\n {\n name: 'file_symbols',\n description: 'List all symbols defined in a specific file — useful to understand what a file exports or contains without reading raw source.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n file_path: { type: 'string', description: 'File path (partial match is supported, e.g. \"auth/login.ts\")' },\n },\n required: ['file_path'],\n },\n },\n {\n name: 'find_path',\n description: 'Find the shortest call/import path between two symbols. Useful for tracing how one module reaches another.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n from: { type: 'string', description: 'Source symbol name' },\n to: { type: 'string', description: 'Target symbol name' },\n max_hops: { type: 'number', description: 'Maximum path length to search (default: 8)' },\n },\n required: ['from', 'to'],\n },\n },\n {\n name: 'list_exports',\n description: 'List all exported symbols in the repository. Helps AI understand the public API surface of the codebase.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n kind: {\n type: 'string',\n description: 'Filter by node kind: function | class | interface | method | type_alias | constant | enum (optional)',\n },\n limit: { type: 'number', description: 'Max results (default: 100)' },\n },\n },\n },\n\n // ── Routes, clusters, flows ──────────────────────────────────────────\n {\n name: 'routes',\n description: 'List all HTTP route handler mappings detected in the codebase (kind=route or route/handler/controller files)',\n inputSchema: { type: 'object' as const, properties: {} },\n },\n {\n name: 'clusters',\n description: 'List detected code clusters (directory-based communities) with member counts and top 10 symbols each. Useful for understanding code organisation.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n limit: { type: 'number', description: 'Max clusters to return (default: 50)' },\n },\n },\n },\n {\n name: 'flows',\n description: 'List all detected execution flows — entry points traced through the call graph. Each flow has a name, entry point, and ordered steps.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n limit: { type: 'number', description: 'Max flows to return (default: 50)' },\n },\n },\n },\n\n // ── Git change impact ─────────────────────────────────────────────────\n {\n name: 'detect_changes',\n description: 'Git-diff impact analysis: detects which source files and line ranges changed (HEAD vs working tree or a custom diff), maps them to graph symbols, and computes the combined blast radius. Ideal for PR review or pre-commit analysis.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n base_ref: {\n type: 'string',\n description: 'Git ref to diff against (default: HEAD). Examples: \"HEAD~1\", \"main\", a commit SHA.',\n },\n diff_text: {\n type: 'string',\n description: 'Raw unified diff text. If provided, base_ref is ignored and this diff is parsed directly.',\n },\n },\n },\n },\n\n // ── Raw query ─────────────────────────────────────────────────────────\n {\n name: 'raw_query',\n description: 'Execute a simplified Cypher-like graph query. Supports: name=\\'X\\' (exact name match) or :kind (list nodes of a kind, max 50)',\n inputSchema: {\n type: 'object' as const,\n properties: {\n cypher: { type: 'string', description: \"Query string — e.g. name='runPipeline' or :function\" },\n },\n required: ['cypher'],\n },\n },\n\n // ── Group / multi-repo tools ──────────────────────────────────────────\n {\n name: 'group_list',\n description: 'List all configured repository groups, or show the full membership of one group. Repository groups track multiple repos as a logical system.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Group name to inspect (optional — omit to list all groups)' },\n },\n },\n },\n {\n name: 'group_sync',\n description: 'Extract cross-repo contracts (exports, routes, schemas, events) from every member repo in a group and detect provider→consumer links via name matching and RRF scoring.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Group name to sync' },\n },\n required: ['name'],\n },\n },\n {\n name: 'group_contracts',\n description: 'Inspect extracted contracts and confidence-ranked cross-repo links from the last group sync. Supports filtering by kind, repo, and minimum confidence.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Group name' },\n kind: {\n type: 'string',\n enum: ['export', 'route', 'schema', 'event'],\n description: 'Filter by contract kind (optional)',\n },\n repo: { type: 'string', description: 'Filter by registry name (optional)' },\n min_confidence: { type: 'number', description: 'Minimum link confidence 0–1 (default: 0)' },\n },\n required: ['name'],\n },\n },\n {\n name: 'group_query',\n description: 'BM25 search across all repos in a group, merged via Reciprocal Rank Fusion (RRF). Returns a unified ranked list plus per-repo breakdown.',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Group name' },\n query: { type: 'string', description: 'Search query' },\n limit: { type: 'number', description: 'Max results per repo (default: 10)' },\n },\n required: ['name', 'query'],\n },\n },\n {\n name: 'group_status',\n description: 'Check index freshness and sync staleness for all repos in a group. Flags repos that have not been indexed or are stale (>24h).',\n inputSchema: {\n type: 'object' as const,\n properties: {\n name: { type: 'string', description: 'Group name' },\n },\n required: ['name'],\n },\n },\n ],\n }));\n\n // ─── Tool Handlers ─────────────────────────────────────────────────────────\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n const a = (args ?? {}) as Record<string, unknown>;\n\n switch (name) {\n\n // ── repos ──────────────────────────────────────────────────────────────\n case 'repos': {\n const registry = loadRegistry();\n return {\n content: [{\n type: 'text',\n text: JSON.stringify(\n registry.map((r) => ({ name: r.name, path: r.path, indexedAt: r.indexedAt, stats: r.stats })),\n null, 2,\n ),\n }],\n };\n }\n\n // ── overview ───────────────────────────────────────────────────────────\n case 'overview': {\n const kindCounts: Record<string, number> = {};\n for (const node of graph.allNodes()) {\n kindCounts[node.kind] = (kindCounts[node.kind] ?? 0) + 1;\n }\n const edgeCounts: Record<string, number> = {};\n for (const edge of graph.allEdges()) {\n edgeCounts[edge.kind] = (edgeCounts[edge.kind] ?? 0) + 1;\n }\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n repo: repoName,\n stats: graph.size,\n nodeCounts: kindCounts,\n edgeCounts,\n }, null, 2),\n }],\n };\n }\n\n // ── search ─────────────────────────────────────────────────────────────\n case 'search': {\n const query = a.query as string;\n const limit = (a.limit as number) ?? 20;\n const results = textSearch(graph, query, limit);\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n\n // ── inspect ────────────────────────────────────────────────────────────\n case 'inspect': {\n const symbolName = a.symbol_name as string;\n const node = findNodeByName(graph, symbolName);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${symbolName}\" not found. Try search first.` }] };\n\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n node: {\n id: node.id,\n kind: node.kind,\n name: node.name,\n filePath: node.filePath,\n startLine: node.startLine,\n endLine: node.endLine,\n exported: node.exported,\n },\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.source, name: graph.getNode(e.source)?.name, file: graph.getNode(e.source)?.filePath,\n })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.target, name: graph.getNode(e.target)?.name, file: graph.getNode(e.target)?.filePath,\n })),\n imports: incoming.filter((e) => e.kind === 'imports').map((e) => graph.getNode(e.source)?.name),\n importedBy: outgoing.filter((e) => e.kind === 'imports').map((e) => graph.getNode(e.target)?.name),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => graph.getNode(e.target)?.name),\n implements: outgoing.filter((e) => e.kind === 'implements').map((e) => graph.getNode(e.target)?.name),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({\n name: graph.getNode(e.target)?.name, kind: graph.getNode(e.target)?.kind,\n })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => graph.getNode(e.target)?.name)[0],\n content: node.content?.slice(0, 500),\n }, null, 2),\n }],\n };\n }\n\n // ── blast_radius ───────────────────────────────────────────────────────\n case 'blast_radius': {\n const target = a.target as string;\n const direction = (a.direction as string) ?? 'both';\n const maxHops = (a.max_hops as number) ?? 5;\n const node = findNodeByName(graph, target);\n if (!node) return { content: [{ type: 'text', text: `Symbol \"${target}\" not found.` }] };\n\n const affected = new Set<string>();\n const queue: { id: string; depth: number }[] = [{ id: node.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > maxHops) continue;\n visited.add(id);\n affected.add(id);\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n if (direction === 'callees' || direction === 'both') {\n for (const edge of graph.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n\n const affectedDetails = [...affected].map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n const risk = affected.size > 10 ? 'HIGH' : affected.size > 5 ? 'MEDIUM' : 'LOW';\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n target: node.name,\n affectedCount: affected.size,\n riskLevel: risk,\n affected: affectedDetails,\n }, null, 2),\n }],\n };\n }\n\n // ── file_symbols ───────────────────────────────────────────────────────\n case 'file_symbols': {\n const filePath = a.file_path as string;\n const matches: { kind: string; name: string; startLine: number | undefined; exported: boolean | undefined }[] = [];\n for (const node of graph.allNodes()) {\n if (node.filePath && node.filePath.includes(filePath)) {\n matches.push({ kind: node.kind, name: node.name, startLine: node.startLine, exported: node.exported });\n }\n }\n if (matches.length === 0) {\n return { content: [{ type: 'text', text: `No symbols found for file path matching \"${filePath}\".` }] };\n }\n matches.sort((a, b) => (a.startLine ?? 0) - (b.startLine ?? 0));\n return { content: [{ type: 'text', text: JSON.stringify(matches, null, 2) }] };\n }\n\n // ── find_path ──────────────────────────────────────────────────────────\n case 'find_path': {\n const fromName = a.from as string;\n const toName = a.to as string;\n const maxHops = (a.max_hops as number) ?? 8;\n\n const fromNode = findNodeByName(graph, fromName);\n const toNode = findNodeByName(graph, toName);\n\n if (!fromNode) return { content: [{ type: 'text', text: `Source symbol \"${fromName}\" not found.` }] };\n if (!toNode) return { content: [{ type: 'text', text: `Target symbol \"${toName}\" not found.` }] };\n\n // BFS for shortest path\n type PathNode = { id: string; path: string[] };\n const queue: PathNode[] = [{ id: fromNode.id, path: [fromNode.id] }];\n const visited = new Set<string>();\n\n let foundPath: string[] | null = null;\n while (queue.length > 0) {\n const { id, path: currentPath } = queue.shift()!;\n if (visited.has(id)) continue;\n visited.add(id);\n\n if (id === toNode.id) { foundPath = currentPath; break; }\n if (currentPath.length > maxHops) continue;\n\n for (const edge of graph.findEdgesFrom(id)) {\n if ((edge.kind === 'calls' || edge.kind === 'imports') && !visited.has(edge.target)) {\n queue.push({ id: edge.target, path: [...currentPath, edge.target] });\n }\n }\n }\n\n if (!foundPath) {\n return { content: [{ type: 'text', text: `No path found from \"${fromName}\" to \"${toName}\" within ${maxHops} hops.` }] };\n }\n\n const pathDetails = foundPath.map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({ from: fromName, to: toName, hops: foundPath.length - 1, path: pathDetails }, null, 2),\n }],\n };\n }\n\n // ── list_exports ───────────────────────────────────────────────────────\n case 'list_exports': {\n const kindFilter = a.kind as string | undefined;\n const limit = (a.limit as number) ?? 100;\n const exports: { kind: string; name: string; filePath: string; startLine: number | undefined }[] = [];\n\n for (const node of graph.allNodes()) {\n if (!node.exported) continue;\n if (kindFilter && node.kind !== kindFilter) continue;\n exports.push({ kind: node.kind, name: node.name, filePath: node.filePath, startLine: node.startLine });\n if (exports.length >= limit) break;\n }\n\n return { content: [{ type: 'text', text: JSON.stringify({ total: exports.length, exports }, null, 2) }] };\n }\n\n // ── routes ─────────────────────────────────────────────────────────────\n case 'routes': {\n const routes: { name: string; filePath: string; startLine: number | undefined }[] = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'route' || (node.kind === 'function' && /route|handler|controller/i.test(node.filePath))) {\n routes.push({ name: node.name, filePath: node.filePath, startLine: node.startLine });\n }\n }\n return { content: [{ type: 'text', text: JSON.stringify(routes, null, 2) }] };\n }\n\n // ── clusters ───────────────────────────────────────────────────────────\n case 'clusters': {\n const limit = (a.limit as number) ?? 50;\n const clusters: {\n id: string;\n name: string;\n memberCount: number;\n topSymbols: { name: string; kind: string }[];\n }[] = [];\n\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') {\n const members: { name: string; kind: string }[] = [];\n for (const edge of graph.findEdgesTo(node.id)) {\n if (edge.kind === 'belongs_to') {\n const member = graph.getNode(edge.source);\n if (member && member.kind !== 'cluster') {\n members.push({ name: member.name, kind: member.kind });\n }\n }\n }\n clusters.push({\n id: node.id,\n name: node.name,\n memberCount: (node.metadata?.memberCount as number | undefined) ?? members.length,\n topSymbols: members.slice(0, 10),\n });\n if (clusters.length >= limit) break;\n }\n }\n return { content: [{ type: 'text', text: JSON.stringify(clusters, null, 2) }] };\n }\n\n // ── flows ──────────────────────────────────────────────────────────────\n case 'flows': {\n const limit = (a.limit as number) ?? 50;\n const flows: {\n id: string;\n name: string;\n entryPoint: string | undefined;\n steps: unknown;\n stepCount: number;\n }[] = [];\n\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') {\n const steps = node.metadata?.steps as unknown[] | undefined;\n flows.push({\n id: node.id,\n name: node.name,\n entryPoint: node.metadata?.entryPoint as string | undefined,\n steps: steps ?? [],\n stepCount: Array.isArray(steps) ? steps.length : 0,\n });\n if (flows.length >= limit) break;\n }\n }\n return { content: [{ type: 'text', text: JSON.stringify(flows, null, 2) }] };\n }\n\n // ── detect_changes ─────────────────────────────────────────────────────\n case 'detect_changes': {\n const baseRef = (a.base_ref as string) ?? 'HEAD';\n const diffTextInput = a.diff_text as string | undefined;\n\n let diffText: string;\n const repoRoot = workspaceRoot ?? process.cwd();\n\n if (diffTextInput) {\n diffText = diffTextInput;\n } else {\n try {\n diffText = execSync(`git diff ${baseRef}`, { cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });\n if (!diffText.trim()) {\n // Fall back to staged + unstaged\n diffText = execSync(`git diff HEAD`, { cwd: repoRoot, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });\n }\n } catch {\n return { content: [{ type: 'text', text: `Could not run git diff in ${repoRoot}. Ensure the path is a Git repository.` }] };\n }\n }\n\n if (!diffText.trim()) {\n return { content: [{ type: 'text', text: 'No changes detected in git diff.' }] };\n }\n\n // Parse unified diff → { filePath, changedLines: number[] }\n const changedFiles = parseDiff(diffText);\n\n // Map changed lines to graph nodes\n const hitNodes = new Set<string>();\n for (const { filePath: changedFile, changedLines } of changedFiles) {\n for (const node of graph.allNodes()) {\n if (!node.filePath) continue;\n // Normalize path comparison (strip repo root prefix)\n const normNode = node.filePath.replace(repoRoot + '/', '').replace(repoRoot + path.sep, '');\n const normChanged = changedFile.replace(/^a\\/|^b\\//, '');\n if (!normNode.endsWith(normChanged) && !normChanged.endsWith(normNode)) continue;\n\n if (node.startLine !== undefined && node.endLine !== undefined) {\n const overlaps = changedLines.some((l) => l >= node.startLine! && l <= node.endLine!);\n if (overlaps) hitNodes.add(node.id);\n } else if (node.startLine !== undefined) {\n const overlaps = changedLines.some((l) => Math.abs(l - node.startLine!) <= 3);\n if (overlaps) hitNodes.add(node.id);\n }\n }\n }\n\n // Compute combined blast radius from all hit nodes\n const allAffected = new Set<string>();\n for (const startId of hitNodes) {\n const queue: { id: string; depth: number }[] = [{ id: startId, depth: 0 }];\n const visited = new Set<string>();\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > 5) continue;\n visited.add(id);\n allAffected.add(id);\n for (const edge of graph.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n }\n\n const changedSymbols = [...hitNodes].map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n const affectedSymbols = [...allAffected]\n .filter((id) => !hitNodes.has(id))\n .map((id) => {\n const n = graph.getNode(id);\n return n ? { id, name: n.name, kind: n.kind, filePath: n.filePath } : { id };\n });\n\n const risk = allAffected.size > 10 ? 'HIGH' : allAffected.size > 4 ? 'MEDIUM' : 'LOW';\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n baseRef,\n changedFiles: changedFiles.map((f) => f.filePath),\n directlyChangedSymbols: changedSymbols,\n transitivelyAffectedSymbols: affectedSymbols,\n totalAffected: allAffected.size,\n riskLevel: risk,\n }, null, 2),\n }],\n };\n }\n\n // ── raw_query ──────────────────────────────────────────────────────────\n case 'raw_query': {\n const q = a.cypher as string;\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === nameMatch[1]) results.push(node);\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kindMatch[1]) results.push(node);\n if (results.length >= 50) break;\n }\n return { content: [{ type: 'text', text: JSON.stringify(results, null, 2) }] };\n }\n return { content: [{ type: 'text', text: 'Query not recognized. Use name=\\'X\\' or :kind syntax.' }] };\n }\n\n // ── group_list ─────────────────────────────────────────────────────────\n case 'group_list': {\n const groupName = a.name as string | undefined;\n if (groupName) {\n const group = loadGroup(groupName);\n if (!group) return { content: [{ type: 'text', text: `Group \"${groupName}\" not found.` }] };\n return { content: [{ type: 'text', text: JSON.stringify(group, null, 2) }] };\n }\n const groups = listGroups();\n return {\n content: [{\n type: 'text',\n text: JSON.stringify(\n groups.map((g) => ({ name: g.name, createdAt: g.createdAt, lastSync: g.lastSync, memberCount: g.members.length, members: g.members })),\n null, 2,\n ),\n }],\n };\n }\n\n // ── group_sync ─────────────────────────────────────────────────────────\n case 'group_sync': {\n const groupName = a.name as string;\n const group = loadGroup(groupName);\n if (!group) return { content: [{ type: 'text', text: `Group \"${groupName}\" not found.` }] };\n if (group.members.length === 0) return { content: [{ type: 'text', text: `Group \"${groupName}\" has no members.` }] };\n\n const result = await syncGroup(group);\n saveSyncResult(result);\n group.lastSync = result.syncedAt;\n saveGroup(group);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n groupName: result.groupName,\n syncedAt: result.syncedAt,\n memberCount: result.memberCount,\n contractCount: result.contracts.length,\n linkCount: result.links.length,\n topLinks: result.links.slice(0, 20),\n }, null, 2),\n }],\n };\n }\n\n // ── group_contracts ────────────────────────────────────────────────────\n case 'group_contracts': {\n const groupName = a.name as string;\n const kindFilter = a.kind as string | undefined;\n const repoFilter = a.repo as string | undefined;\n const minConf = (a.min_confidence as number) ?? 0;\n\n const result = loadSyncResult(groupName);\n if (!result) return { content: [{ type: 'text', text: `No sync data for group \"${groupName}\". Run group_sync first.` }] };\n\n let contracts = result.contracts;\n if (kindFilter) contracts = contracts.filter((c) => c.kind === kindFilter);\n if (repoFilter) contracts = contracts.filter((c) => c.repoName === repoFilter);\n\n let links = result.links.filter((l) => l.confidence >= minConf);\n if (repoFilter) links = links.filter((l) => l.providerRepo === repoFilter || l.consumerRepo === repoFilter);\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({ syncedAt: result.syncedAt, contracts, links }, null, 2),\n }],\n };\n }\n\n // ── group_query ────────────────────────────────────────────────────────\n case 'group_query': {\n const groupName = a.name as string;\n const query = a.query as string;\n const limit = (a.limit as number) ?? 10;\n\n const group = loadGroup(groupName);\n if (!group) return { content: [{ type: 'text', text: `Group \"${groupName}\" not found.` }] };\n\n const { perRepo, merged } = await queryGroup(group, query, limit);\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({ query, merged, perRepo }, null, 2),\n }],\n };\n }\n\n // ── group_status ───────────────────────────────────────────────────────\n case 'group_status': {\n const groupName = a.name as string;\n const group = loadGroup(groupName);\n if (!group) return { content: [{ type: 'text', text: `Group \"${groupName}\" not found.` }] };\n\n const registry = loadRegistry();\n const now = Date.now();\n\n const memberStatus = group.members.map((m) => {\n const regEntry = registry.find((r) => r.name === m.registryName);\n if (!regEntry) return { groupPath: m.groupPath, registryName: m.registryName, status: 'NOT_IN_REGISTRY' };\n\n const meta = loadMetadata(regEntry.path);\n if (!meta) return { groupPath: m.groupPath, registryName: m.registryName, repoPath: regEntry.path, status: 'NOT_INDEXED' };\n\n const ageMin = Math.round((now - new Date(meta.indexedAt).getTime()) / 60000);\n const stale = ageMin > 1440;\n return {\n groupPath: m.groupPath,\n registryName: m.registryName,\n repoPath: regEntry.path,\n indexedAt: meta.indexedAt,\n ageMinutes: ageMin,\n status: stale ? 'STALE' : 'OK',\n stats: meta.stats,\n };\n });\n\n const syncAge = group.lastSync\n ? Math.round((now - new Date(group.lastSync).getTime()) / 60000)\n : null;\n\n return {\n content: [{\n type: 'text',\n text: JSON.stringify({\n group: groupName,\n lastSync: group.lastSync ?? null,\n syncAgeMinutes: syncAge,\n members: memberStatus,\n }, null, 2),\n }],\n };\n }\n\n default:\n return { content: [{ type: 'text', text: `Unknown tool: ${name}` }] };\n }\n });\n\n // ─── Resources ─────────────────────────────────────────────────────────────\n\n server.setRequestHandler(ListResourcesRequestSchema, async () => ({\n resources: [\n { uri: `codeintel://repo/${repoName}/overview`, name: `${repoName} Overview`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/clusters`, name: `${repoName} Clusters`, mimeType: 'application/json' },\n { uri: `codeintel://repo/${repoName}/flows`, name: `${repoName} Flows`, mimeType: 'application/json' },\n ],\n }));\n\n server.setRequestHandler(ReadResourceRequestSchema, async (request) => {\n const { uri } = request.params;\n\n if (uri.endsWith('/overview')) {\n const kindCounts: Record<string, number> = {};\n for (const node of graph.allNodes()) {\n kindCounts[node.kind] = (kindCounts[node.kind] ?? 0) + 1;\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify({ repo: repoName, stats: graph.size, nodeCounts: kindCounts }) }] };\n }\n\n if (uri.endsWith('/clusters')) {\n const clusters = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'cluster') clusters.push({ id: node.id, name: node.name, memberCount: node.metadata?.memberCount });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(clusters) }] };\n }\n\n if (uri.endsWith('/flows')) {\n const flows = [];\n for (const node of graph.allNodes()) {\n if (node.kind === 'flow') flows.push({ id: node.id, name: node.name, steps: node.metadata?.steps, entryPoint: node.metadata?.entryPoint });\n }\n return { contents: [{ uri, mimeType: 'application/json', text: JSON.stringify(flows) }] };\n }\n\n throw new Error(`Unknown resource: ${uri}`);\n });\n\n return server;\n}\n\nexport async function startMcpStdio(graph: KnowledgeGraph, repoName: string, workspaceRoot?: string): Promise<void> {\n const server = createMcpServer(graph, repoName, workspaceRoot);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n}\n\n// ─── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction findNodeByName(graph: KnowledgeGraph, name: string) {\n for (const node of graph.allNodes()) {\n if (node.name === name) return node;\n }\n return undefined;\n}\n\n/**\n * Parse a unified diff text and return a list of changed files with their\n * changed line numbers (new-file side, i.e. \"+\" lines).\n */\nfunction parseDiff(diffText: string): { filePath: string; changedLines: number[] }[] {\n const result: { filePath: string; changedLines: number[] }[] = [];\n let currentFile: string | null = null;\n let currentNewLine = 0;\n const changedLinesMap = new Map<string, number[]>();\n\n for (const raw of diffText.split('\\n')) {\n // diff --git a/src/foo.ts b/src/foo.ts OR +++ b/src/foo.ts\n const fileMatch = raw.match(/^\\+\\+\\+ b\\/(.+)/);\n if (fileMatch) {\n currentFile = fileMatch[1];\n if (!changedLinesMap.has(currentFile)) changedLinesMap.set(currentFile, []);\n continue;\n }\n\n // @@ -oldStart,oldLen +newStart,newLen @@\n const hunkMatch = raw.match(/^@@ -\\d+(?:,\\d+)? \\+(\\d+)(?:,\\d+)? @@/);\n if (hunkMatch) {\n currentNewLine = parseInt(hunkMatch[1], 10);\n continue;\n }\n\n if (!currentFile) continue;\n\n if (raw.startsWith('+') && !raw.startsWith('+++')) {\n changedLinesMap.get(currentFile)!.push(currentNewLine);\n currentNewLine++;\n } else if (raw.startsWith('-') && !raw.startsWith('---')) {\n // deleted line: don't advance new-side line counter\n } else if (!raw.startsWith('\\\\')) {\n currentNewLine++;\n }\n }\n\n for (const [filePath, changedLines] of changedLinesMap) {\n result.push({ filePath, changedLines });\n }\n return result;\n}\n","import { Database, Connection } from '@ladybugdb/core';\nimport path from 'node:path';\nimport fs from 'node:fs';\n\nexport class DbManager {\n private db: InstanceType<typeof Database> | null = null;\n private conn: InstanceType<typeof Connection> | null = null;\n private dbPath: string;\n\n constructor(dbPath: string) {\n this.dbPath = dbPath;\n }\n\n async init(): Promise<void> {\n fs.mkdirSync(path.dirname(this.dbPath), { recursive: true });\n this.db = new Database(this.dbPath);\n await this.db.init();\n this.conn = new Connection(this.db);\n await this.conn.init();\n }\n\n async query(cypher: string): Promise<Record<string, unknown>[]> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n const rows = await qr.getAll();\n qr.close();\n return rows as Record<string, unknown>[];\n }\n\n async execute(cypher: string): Promise<void> {\n if (!this.conn) throw new Error('Database not initialized');\n const result = await this.conn.query(cypher);\n const qr = Array.isArray(result) ? result[0] : result;\n qr.close();\n }\n\n close(): void {\n try {\n this.conn?.close();\n } catch { /* ignore */ }\n try {\n this.db?.close();\n } catch { /* ignore */ }\n this.conn = null;\n this.db = null;\n }\n\n get isOpen(): boolean {\n return this.conn !== null;\n }\n}\n","import type { NodeKind } from '../shared/index.js';\n\nexport const NODE_TABLE_MAP: Record<NodeKind, string> = {\n file: 'file_nodes',\n directory: 'dir_nodes',\n function: 'func_nodes',\n class: 'class_nodes',\n interface: 'iface_nodes',\n method: 'method_nodes',\n constructor: 'ctor_nodes',\n variable: 'var_nodes',\n property: 'prop_nodes',\n struct: 'struct_nodes',\n enum: 'enum_nodes',\n trait: 'trait_nodes',\n namespace: 'ns_nodes',\n module: 'mod_nodes',\n type_alias: 'type_nodes',\n constant: 'const_nodes',\n route: 'route_nodes',\n cluster: 'cluster_nodes',\n flow: 'flow_nodes',\n};\n\nexport const ALL_NODE_TABLES = [...new Set(Object.values(NODE_TABLE_MAP))];\n\nexport function getCreateNodeTableDDL(tableName: string): string {\n return `CREATE NODE TABLE IF NOT EXISTS ${tableName} (\n id STRING,\n name STRING,\n file_path STRING,\n start_line INT64,\n end_line INT64,\n exported BOOLEAN,\n content STRING,\n metadata STRING,\n PRIMARY KEY (id)\n)`;\n}\n\nexport function getCreateEdgeTableDDL(): string[] {\n const ddls: string[] = [];\n const uniqueTables = ALL_NODE_TABLES;\n\n // Create edge table connecting all node table pairs\n const fromToPairs: string[] = [];\n for (const from of uniqueTables) {\n for (const to of uniqueTables) {\n fromToPairs.push(`FROM ${from} TO ${to}`);\n }\n }\n\n ddls.push(`CREATE REL TABLE IF NOT EXISTS code_edges (\n ${fromToPairs.join(',\\n ')},\n kind STRING,\n weight DOUBLE,\n label STRING\n)`);\n\n return ddls;\n}\n","/**\n * graph-from-db.ts\n * Loads a KnowledgeGraph from a persisted LadybugDB graph.db.\n * Used by group-sync to read each repo's index without re-analyzing.\n */\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { ALL_NODE_TABLES, NODE_TABLE_MAP } from '../storage/schema.js';\nimport type { CodeNode, CodeEdge, NodeKind, EdgeKind } from '../shared/index.js';\n\n// Reverse map: tableName → NodeKind\nconst TABLE_TO_KIND: Record<string, NodeKind> = Object.fromEntries(\n Object.entries(NODE_TABLE_MAP).map(([kind, table]) => [table, kind as NodeKind]),\n);\n\nfunction parseRow(row: Record<string, unknown>, kind: NodeKind): CodeNode {\n return {\n id: String(row['id'] ?? ''),\n kind,\n name: String(row['name'] ?? ''),\n filePath: String(row['file_path'] ?? ''),\n startLine: row['start_line'] != null ? Number(row['start_line']) : undefined,\n endLine: row['end_line'] != null ? Number(row['end_line']) : undefined,\n exported: row['exported'] != null ? Boolean(row['exported']) : undefined,\n content: row['content'] ? String(row['content']) : undefined,\n metadata: row['metadata'] ? (() => {\n try { return JSON.parse(String(row['metadata'])) as Record<string, unknown>; } catch { return undefined; }\n })() : undefined,\n };\n}\n\nexport async function loadGraphFromDB(\n graph: KnowledgeGraph,\n db: DbManager,\n): Promise<void> {\n // Load all node tables\n for (const table of ALL_NODE_TABLES) {\n const kind = TABLE_TO_KIND[table];\n if (!kind) continue;\n let rows: Record<string, unknown>[] = [];\n try {\n rows = await db.query(`MATCH (n:${table}) RETURN n.id, n.name, n.file_path, n.start_line, n.end_line, n.exported, n.content, n.metadata`);\n } catch {\n // table may not exist in older DBs\n continue;\n }\n for (const row of rows) {\n // kuzu returns column names as aliases\n const node = parseRow({\n id: row['n.id'],\n name: row['n.name'],\n file_path: row['n.file_path'],\n start_line: row['n.start_line'],\n end_line: row['n.end_line'],\n exported: row['n.exported'],\n content: row['n.content'],\n metadata: row['n.metadata'],\n }, kind);\n if (node.id && node.name) graph.addNode(node);\n }\n }\n\n // Load edges\n try {\n const edgeRows = await db.query(\n `MATCH (a)-[e:code_edges]->(b) RETURN a.id, b.id, e.kind, e.weight, e.label`,\n );\n for (const row of edgeRows) {\n const sourceId = String(row['a.id'] ?? '');\n const targetId = String(row['b.id'] ?? '');\n const kind = String(row['e.kind'] ?? '') as EdgeKind;\n if (!sourceId || !targetId || !kind) continue;\n const edge: CodeEdge = {\n id: `${sourceId}::${kind}::${targetId}`,\n source: sourceId,\n target: targetId,\n kind,\n weight: row['e.weight'] != null ? Number(row['e.weight']) : undefined,\n label: row['e.label'] ? String(row['e.label']) : undefined,\n };\n graph.addEdge(edge);\n }\n } catch {\n // edges table may not exist in older DBs\n }\n}\n","/**\n * group-sync.ts\n * Loads each member repo's knowledge graph from its .code-intel/graph.db,\n * extracts contracts (exports, routes, events, schemas), and matches them\n * across repos to produce ContractLinks.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup, Contract, ContractLink, GroupSyncResult } from './types.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph, type KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\nimport Logger from '../shared/logger.js';\n\n// ─── Extract contracts from a single repo's graph ────────────────────────────\n\nfunction extractContracts(\n graph: KnowledgeGraph,\n repoName: string,\n repoPath: string,\n): Contract[] {\n const contracts: Contract[] = [];\n\n for (const node of graph.allNodes()) {\n // exported symbols → 'export' contracts\n if (\n node.exported === true &&\n ['function', 'class', 'interface', 'method', 'type_alias', 'constant', 'enum', 'struct', 'trait'].includes(node.kind)\n ) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'export',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // route nodes → 'route' contracts\n if (node.kind === 'route') {\n contracts.push({\n repoName,\n repoPath,\n kind: 'route',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n signature: node.content?.split('\\n')[0]?.trim(),\n });\n }\n\n // interfaces / type aliases with \"event\" or \"schema\" in name → schema/event contracts\n if (['interface', 'type_alias'].includes(node.kind)) {\n const nameLower = node.name.toLowerCase();\n if (nameLower.includes('event') || nameLower.includes('message')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'event',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n } else if (nameLower.includes('schema') || nameLower.includes('dto') || nameLower.includes('request') || nameLower.includes('response')) {\n contracts.push({\n repoName,\n repoPath,\n kind: 'schema',\n name: node.name,\n nodeId: node.id,\n nodeKind: node.kind,\n filePath: node.filePath,\n });\n }\n }\n }\n\n return contracts;\n}\n\n// ─── Match contracts across repos ────────────────────────────────────────────\n\nfunction matchContracts(allContracts: Contract[]): ContractLink[] {\n const links: ContractLink[] = [];\n\n // Group contracts by repo\n const byRepo = new Map<string, Contract[]>();\n for (const c of allContracts) {\n const arr = byRepo.get(c.repoName) ?? [];\n arr.push(c);\n byRepo.set(c.repoName, arr);\n }\n\n const repoNames = [...byRepo.keys()];\n\n for (let i = 0; i < repoNames.length; i++) {\n for (let j = 0; j < repoNames.length; j++) {\n if (i === j) continue;\n const providerContracts = byRepo.get(repoNames[i])!;\n const consumerContracts = byRepo.get(repoNames[j])!;\n\n // Build a name map for the consumer\n const consumerByName = new Map<string, Contract>();\n for (const c of consumerContracts) consumerByName.set(c.name, c);\n\n for (const provider of providerContracts) {\n const consumer = consumerByName.get(provider.name);\n if (consumer) {\n // same-kind matches are more confident\n const sameKind = provider.kind === consumer.kind;\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: consumer.repoName,\n consumerContract: consumer.name,\n matchKind: provider.kind === 'route' ? 'route-match' : 'name-match',\n confidence: sameKind ? 0.9 : 0.6,\n });\n } else {\n // partial-name match (camelCase contained)\n const providerLC = provider.name.toLowerCase();\n for (const c of consumerContracts) {\n if (c.name.toLowerCase().includes(providerLC) || providerLC.includes(c.name.toLowerCase())) {\n if (c.name.length >= 4 && provider.name.length >= 4) {\n links.push({\n providerRepo: provider.repoName,\n providerContract: provider.name,\n consumerRepo: c.repoName,\n consumerContract: c.name,\n matchKind: 'name-match',\n confidence: 0.4,\n });\n }\n }\n }\n }\n }\n }\n }\n\n // Deduplicate: keep highest-confidence for a given (pRepo, pContract, cRepo) triple\n const seen = new Map<string, ContractLink>();\n for (const link of links) {\n const key = `${link.providerRepo}:${link.providerContract}:${link.consumerRepo}:${link.consumerContract}`;\n const existing = seen.get(key);\n if (!existing || link.confidence > existing.confidence) {\n seen.set(key, link);\n }\n }\n\n return [...seen.values()].sort((a, b) => b.confidence - a.confidence);\n}\n\n// ─── Main sync function ───────────────────────────────────────────────────────\n\nexport async function syncGroup(group: RepoGroup): Promise<GroupSyncResult> {\n const registry = loadRegistry();\n const allContracts: Contract[] = [];\n\n for (const member of group.members) {\n // Resolve the actual repo path from the registry\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) {\n Logger.warn(` ⚠ Registry entry \"${member.registryName}\" not found — skipping ${member.groupPath}`);\n continue;\n }\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) {\n Logger.warn(` ⚠ No index at ${dbPath} — run \\`code-intel analyze ${regEntry.path}\\` first`);\n continue;\n }\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch (err) {\n db.close();\n Logger.warn(` ⚠ Could not load graph for \"${member.registryName}\": ${err instanceof Error ? err.message : err}`);\n continue;\n }\n\n const contracts = extractContracts(graph, member.registryName, regEntry.path);\n Logger.info(` ✓ ${member.registryName} (${member.groupPath}): ${contracts.length} contracts`);\n allContracts.push(...contracts);\n }\n\n const links = matchContracts(allContracts);\n\n return {\n groupName: group.name,\n syncedAt: new Date().toISOString(),\n memberCount: group.members.length,\n contracts: allContracts,\n links,\n };\n}\n","/**\n * group-query.ts\n * Search execution flows across all repos in a group.\n * Loads each repo's graph, runs text search, and merges via RRF.\n */\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport type { RepoGroup } from './types.js';\nimport type { SearchResult } from '../search/text-search.js';\nimport { textSearch, reciprocalRankFusion } from '../search/text-search.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport { DbManager } from '../storage/db-manager.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from './graph-from-db.js';\n\nexport interface GroupQueryResult {\n repoName: string;\n repoPath: string;\n groupPath: string;\n results: SearchResult[];\n}\n\nexport async function queryGroup(\n group: RepoGroup,\n query: string,\n limit = 20,\n): Promise<{ perRepo: GroupQueryResult[]; merged: SearchResult[] }> {\n const registry = loadRegistry();\n const perRepo: GroupQueryResult[] = [];\n const allRankings: SearchResult[][] = [];\n\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n\n const graph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(graph, db);\n db.close();\n } catch {\n db.close();\n continue;\n }\n\n const results = textSearch(graph, query, limit);\n // Tag each result with repo info via snippet prefix\n const taggedResults: SearchResult[] = results.map((r) => ({\n ...r,\n snippet: `[${member.registryName}] ${r.snippet ?? ''}`.trim(),\n }));\n\n perRepo.push({\n repoName: member.registryName,\n repoPath: regEntry.path,\n groupPath: member.groupPath,\n results: taggedResults,\n });\n allRankings.push(taggedResults);\n }\n\n const merged = reciprocalRankFusion(...allRankings).slice(0, limit);\n return { perRepo, merged };\n}\n","import type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { DbManager } from './db-manager.js';\nimport { ALL_NODE_TABLES, getCreateNodeTableDDL, getCreateEdgeTableDDL, NODE_TABLE_MAP } from './schema.js';\nimport type { CodeNode } from '../shared/index.js';\n\nexport async function loadGraphToDB(\n graph: KnowledgeGraph,\n dbManager: DbManager,\n): Promise<{ nodeCount: number; edgeCount: number }> {\n // Create all node tables\n for (const table of ALL_NODE_TABLES) {\n await dbManager.execute(getCreateNodeTableDDL(table));\n }\n\n // Create edge table\n const edgeDDLs = getCreateEdgeTableDDL();\n for (const ddl of edgeDDLs) {\n try {\n await dbManager.execute(ddl);\n } catch {\n // Edge table with all pairs might fail, use simpler approach\n }\n }\n\n // Insert nodes via Cypher\n let nodeCount = 0;\n for (const node of graph.allNodes()) {\n const table = NODE_TABLE_MAP[node.kind];\n const props = buildNodeProps(node);\n try {\n await dbManager.execute(`CREATE (:${table} ${props})`);\n nodeCount++;\n } catch {\n // Skip duplicate or invalid nodes\n }\n }\n\n // Insert edges via Cypher\n let edgeCount = 0;\n for (const edge of graph.allEdges()) {\n const sourceNode = graph.getNode(edge.source);\n const targetNode = graph.getNode(edge.target);\n if (!sourceNode || !targetNode) continue;\n\n const fromTable = NODE_TABLE_MAP[sourceNode.kind];\n const toTable = NODE_TABLE_MAP[targetNode.kind];\n\n try {\n await dbManager.execute(\n `MATCH (a:${fromTable} {id: '${escCypher(edge.source)}'}), (b:${toTable} {id: '${escCypher(edge.target)}'}) ` +\n `CREATE (a)-[:code_edges {kind: '${edge.kind}', weight: ${edge.weight ?? 1.0}, label: '${escCypher(edge.label ?? '')}'}]->(b)`,\n );\n edgeCount++;\n } catch {\n // Skip invalid edges\n }\n }\n\n return { nodeCount, edgeCount };\n}\n\nfunction buildNodeProps(node: CodeNode): string {\n const parts: string[] = [\n `id: '${escCypher(node.id)}'`,\n `name: '${escCypher(node.name)}'`,\n `file_path: '${escCypher(node.filePath)}'`,\n ];\n if (node.startLine !== undefined) parts.push(`start_line: ${node.startLine}`);\n if (node.endLine !== undefined) parts.push(`end_line: ${node.endLine}`);\n if (node.exported !== undefined) parts.push(`exported: ${node.exported}`);\n if (node.content) parts.push(`content: '${escCypher(node.content.slice(0, 500))}'`);\n if (node.metadata) parts.push(`metadata: '${escCypher(JSON.stringify(node.metadata))}'`);\n return `{${parts.join(', ')}}`;\n}\n\nfunction escCypher(s: string): string {\n return s.replace(/\\\\/g, '\\\\\\\\').replace(/'/g, \"\\\\'\").replace(/\\n/g, '\\\\n').replace(/\\r/g, '');\n}\n","import express from 'express';\nimport cors from 'cors';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport type { KnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { textSearch } from '../search/text-search.js';\nimport { findEntryPoints, traceFlow } from '../flow-detection/entry-point-finder.js';\nimport { DbManager, getDbPath, getVectorDbPath } from '../storage/index.js';\nimport { VectorIndex } from '../search/vector-index.js';\nimport fs from 'node:fs';\nimport os from 'node:os';\nimport { listGroups, loadGroup, loadSyncResult, saveSyncResult } from '../multi-repo/group-registry.js';\nimport { syncGroup } from '../multi-repo/group-sync.js';\nimport { queryGroup } from '../multi-repo/group-query.js';\nimport { createKnowledgeGraph } from '../graph/knowledge-graph.js';\nimport { loadGraphFromDB } from '../multi-repo/graph-from-db.js';\nimport { loadRegistry } from '../storage/repo-registry.js';\nimport Logger from '../shared/logger.js';\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url));\n// Resolve web dist: <core>/dist/http -> ../../web/dist\nconst WEB_DIST = path.resolve(__dirname, '..', '..', '..', 'web', 'dist');\n\nexport function createApp(graph: KnowledgeGraph, repoName: string, workspaceRoot?: string): express.Application {\n const app = express();\n\n app.use(cors({ origin: true }));\n app.use(express.json({ limit: '10mb' }));\n\n // Lazy-init vector index state\n let vectorIndex: VectorIndex | null = null;\n let vectorIndexBuilding = false;\n let vectorIndexReady = false;\n\n async function ensureVectorIndex(): Promise<VectorIndex | null> {\n if (vectorIndexReady && vectorIndex) return vectorIndex;\n if (!workspaceRoot || vectorIndexBuilding) return null;\n vectorIndexBuilding = true;\n try {\n const { embedNodes } = await import('../search/embedder.js');\n const dbPath = getVectorDbPath(workspaceRoot);\n const db = new DbManager(dbPath);\n await db.init();\n const idx = new VectorIndex(db);\n await idx.init();\n const alreadyBuilt = await idx.isBuilt();\n if (!alreadyBuilt) {\n Logger.info(' [vector] Building embeddings…');\n const nodes = await embedNodes(graph, {\n onProgress: (done, total) => {\n if (done % 50 === 0 || done === total) process.stdout.write(`\\r [vector] ${done}/${total}`);\n },\n });\n Logger.info('');\n await idx.buildIndex(nodes);\n Logger.info(` [vector] Index built: ${nodes.length} embeddings`);\n } else {\n Logger.info(' [vector] Index already exists, skipping rebuild.');\n }\n vectorIndex = idx;\n vectorIndexReady = true;\n return idx;\n } catch (err) {\n Logger.warn(' [vector] Index build failed:', err instanceof Error ? err.message : err);\n return null;\n } finally {\n vectorIndexBuilding = false;\n }\n }\n\n // Kick off in background when workspace is available\n if (workspaceRoot) {\n setImmediate(() => ensureVectorIndex().catch(() => {}));\n }\n\n // Health check\n app.get('/api/health', (_req, res) => {\n res.json({ status: 'ok', nodes: graph.size.nodes, edges: graph.size.edges });\n });\n\n // List ALL indexed repos from the global registry (not just the current one)\n app.get('/api/repos', (_req, res) => {\n const registry = loadRegistry();\n if (registry.length === 0) {\n // Fallback: return only the in-memory repo\n res.json([{ name: repoName, path: workspaceRoot ?? '', nodes: graph.size.nodes, edges: graph.size.edges, indexedAt: null }]);\n return;\n }\n res.json(registry.map((r) => ({\n name: r.name,\n path: r.path,\n nodes: r.stats.nodes,\n edges: r.stats.edges,\n indexedAt: r.indexedAt,\n active: r.path === workspaceRoot,\n })));\n });\n\n // Helper: load graph for a repo by name from its DB (returns in-memory graph if it matches)\n async function loadRepoGraph(requestedRepo: string): Promise<KnowledgeGraph | null> {\n // If the requested repo is the currently loaded in-memory graph, return it directly\n if (requestedRepo === repoName) return graph;\n\n // Otherwise look up in the global registry and load from DB\n const registry = loadRegistry();\n const entry = registry.find((r) => r.name === requestedRepo || r.path === requestedRepo);\n if (!entry) return null;\n\n const dbPath = path.join(entry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) return null;\n\n const repoGraph = createKnowledgeGraph();\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(repoGraph, db);\n db.close();\n return repoGraph;\n } catch {\n db.close();\n return null;\n }\n }\n\n // Download full graph — supports any registered repo by name\n app.get('/api/graph/:repo', async (req, res) => {\n const requestedRepo = decodeURIComponent(req.params.repo);\n const g = await loadRepoGraph(requestedRepo);\n if (!g) {\n res.status(404).json({ error: `Repo \"${requestedRepo}\" not found or not indexed. Run: code-intel analyze <path>` });\n return;\n }\n const nodes = [...g.allNodes()];\n const edges = [...g.allEdges()];\n res.json({ nodes, edges });\n });\n\n // Helper: resolve graph for a repo (in-memory if matches, else load from DB)\n async function getGraphForRepo(requestedRepo: string | undefined): Promise<KnowledgeGraph> {\n if (!requestedRepo || requestedRepo === repoName) return graph;\n const g = await loadRepoGraph(requestedRepo);\n return g ?? graph; // fallback to in-memory\n }\n\n // Hybrid search (BM25-like text) — repo-aware\n app.post('/api/search', async (req, res) => {\n const { query, limit, repo } = req.body;\n const g = await getGraphForRepo(repo as string | undefined);\n const results = textSearch(g, query, limit ?? 20);\n res.json({ results });\n });\n\n // Vector search (semantic)\n app.post('/api/vector-search', async (req, res) => {\n const { query, limit = 10 } = req.body;\n if (!query) { res.status(400).json({ error: 'Missing query' }); return; }\n\n const idx = await ensureVectorIndex();\n if (!idx) {\n // Fall back to text search\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false });\n return;\n }\n\n try {\n // Embed the query using @huggingface/transformers\n const { pipeline } = await import('@huggingface/transformers');\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const embedder = (await pipeline('feature-extraction', 'Xenova/all-MiniLM-L6-v2')) as unknown as (text: string, opts: Record<string, unknown>) => Promise<{ data: Float32Array }>;\n const out = await embedder(query, { pooling: 'mean', normalize: true });\n const queryEmbedding = Array.from(out.data);\n const hits = await idx.search(queryEmbedding, limit);\n // Map to SearchResult shape\n const results = hits.map((h) => ({\n nodeId: h.nodeId,\n name: h.name,\n kind: h.kind,\n filePath: h.filePath,\n score: h.score,\n }));\n res.json({ results, source: 'vector', vectorReady: true });\n } catch (err) {\n const results = textSearch(graph, query, limit);\n res.json({ results, source: 'text-fallback', vectorReady: false, error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n // Vector index status\n app.get('/api/vector-status', (_req, res) => {\n res.json({ ready: vectorIndexReady, building: vectorIndexBuilding });\n });\n\n // Read file\n app.post('/api/files/read', (req, res) => {\n const { file_path } = req.body;\n try {\n const content = fs.readFileSync(file_path, 'utf-8');\n res.json({ content });\n } catch {\n res.status(404).json({ error: 'File not found' });\n }\n });\n\n // Grep (regex search in files)\n app.post('/api/grep', (req, res) => {\n const { pattern, file_paths } = req.body;\n const results: { file: string; line: number; text: string }[] = [];\n\n try {\n const regex = new RegExp(pattern, 'gi');\n const paths: string[] = file_paths ?? [];\n\n // If no paths, search from graph nodes\n if (paths.length === 0) {\n for (const node of graph.allNodes()) {\n if (node.kind === 'file' && node.content) {\n const lines = node.content.split('\\n');\n for (let i = 0; i < lines.length; i++) {\n if (regex.test(lines[i])) {\n results.push({ file: node.filePath, line: i + 1, text: lines[i].trim() });\n }\n regex.lastIndex = 0;\n }\n }\n }\n }\n\n res.json({ results: results.slice(0, 100) });\n } catch {\n res.status(400).json({ error: 'Invalid regex pattern' });\n }\n });\n\n // Cypher query — routed to LadybugDB if available, else falls back to in-memory\n app.post('/api/cypher', async (req, res) => {\n const { query: q } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query' }); return; }\n\n // Try LadybugDB first\n if (workspaceRoot) {\n try {\n const dbPath = getDbPath(workspaceRoot);\n const dbm = new DbManager(dbPath);\n await dbm.init();\n const rows = await dbm.query(q);\n dbm.close();\n res.json({ results: rows });\n return;\n } catch (err) {\n // Fall through to in-memory fallback\n }\n }\n\n // In-memory fallback\n try {\n const nameMatch = q?.match(/name\\s*=\\s*['\"]([^'\"]+)['\"]/i);\n if (nameMatch) {\n const name = nameMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.name === name) {\n const incoming = [...graph.findEdgesTo(node.id)];\n const outgoing = [...graph.findEdgesFrom(node.id)];\n results.push({ node, incoming: incoming.length, outgoing: outgoing.length });\n }\n }\n res.json({ results });\n return;\n }\n const kindMatch = q?.match(/:\\s*(\\w+)/);\n if (kindMatch) {\n const kind = kindMatch[1];\n const results = [];\n for (const node of graph.allNodes()) {\n if (node.kind === kind) results.push(node);\n if (results.length >= 50) break;\n }\n res.json({ results });\n return;\n }\n res.json({ results: [], message: 'Query not recognized.' });\n } catch {\n res.status(400).json({ error: 'Invalid query' });\n }\n });\n\n // Get node detail (inspect) — repo-aware via ?repo= query param\n app.get('/api/nodes/:id', async (req, res) => {\n const nodeId = decodeURIComponent(req.params.id);\n const g = await getGraphForRepo(req.query.repo as string | undefined);\n const node = g.getNode(nodeId);\n if (!node) {\n res.status(404).json({ error: 'Node not found' });\n return;\n }\n\n const incoming = [...g.findEdgesTo(nodeId)];\n const outgoing = [...g.findEdgesFrom(nodeId)];\n\n res.json({\n node,\n callers: incoming.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.source,\n name: g.getNode(e.source)?.name,\n weight: e.weight,\n })),\n callees: outgoing.filter((e) => e.kind === 'calls').map((e) => ({\n id: e.target,\n name: g.getNode(e.target)?.name,\n weight: e.weight,\n })),\n imports: outgoing.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.target,\n name: g.getNode(e.target)?.name,\n })),\n importedBy: incoming.filter((e) => e.kind === 'imports').map((e) => ({\n id: e.source,\n name: g.getNode(e.source)?.name,\n })),\n extends: outgoing.filter((e) => e.kind === 'extends').map((e) => ({\n id: e.target,\n name: g.getNode(e.target)?.name,\n })),\n implementsEdges: outgoing.filter((e) => e.kind === 'implements').map((e) => ({\n id: e.target,\n name: g.getNode(e.target)?.name,\n })),\n members: outgoing.filter((e) => e.kind === 'has_member').map((e) => ({\n id: e.target,\n name: g.getNode(e.target)?.name,\n kind: g.getNode(e.target)?.kind,\n })),\n cluster: incoming.filter((e) => e.kind === 'belongs_to').map((e) => g.getNode(e.target)?.name)[0],\n });\n });\n\n // Blast radius — repo-aware\n app.post('/api/blast-radius', async (req, res) => {\n const { target, direction = 'both', max_hops = 5, repo } = req.body;\n const g = await getGraphForRepo(repo as string | undefined);\n\n let targetNode = null;\n for (const node of g.allNodes()) {\n if (node.name === target || node.id === target) { targetNode = node; break; }\n }\n\n if (!targetNode) {\n res.status(404).json({ error: `Symbol \"${target}\" not found` });\n return;\n }\n\n const affected = new Map<string, { name: string; kind: string; depth: number }>();\n const queue: { id: string; depth: number }[] = [{ id: targetNode.id, depth: 0 }];\n const visited = new Set<string>();\n\n while (queue.length > 0) {\n const { id, depth } = queue.shift()!;\n if (visited.has(id) || depth > max_hops) continue;\n visited.add(id);\n const node = g.getNode(id);\n if (node) affected.set(id, { name: node.name, kind: node.kind, depth });\n\n if (direction === 'callers' || direction === 'both') {\n for (const edge of g.findEdgesTo(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.source, depth: depth + 1 });\n }\n }\n if (direction === 'callees' || direction === 'both') {\n for (const edge of g.findEdgesFrom(id)) {\n if (edge.kind === 'calls' || edge.kind === 'imports') queue.push({ id: edge.target, depth: depth + 1 });\n }\n }\n }\n\n res.json({\n target: targetNode.name,\n affectedCount: [...affected.values()].filter((a) => a.depth > 0).length,\n affected: [...affected.entries()].map(([id, info]) => ({ id, ...info })).filter((a) => a.depth > 0),\n });\n });\n\n // Flows — repo-aware via ?repo=\n app.get('/api/flows', async (req, res) => {\n const g = await getGraphForRepo(req.query.repo as string | undefined);\n const flows: { id: string; name: string; steps: unknown }[] = [];\n for (const node of g.allNodes()) {\n if (node.kind === 'flow') flows.push({ id: node.id, name: node.name, steps: node.metadata?.steps });\n }\n res.json({ flows });\n });\n\n // Clusters — repo-aware via ?repo=\n app.get('/api/clusters', async (req, res) => {\n const g = await getGraphForRepo(req.query.repo as string | undefined);\n const clusters: { id: string; name: string; memberCount: number }[] = [];\n for (const node of g.allNodes()) {\n if (node.kind === 'cluster') {\n clusters.push({ id: node.id, name: node.name, memberCount: (node.metadata?.memberCount as number) ?? 0 });\n }\n }\n res.json({ clusters });\n });\n\n // ── Group routes ──────────────────────────────────────────────────────────────\n app.get('/api/groups', (_req, res) => {\n const groups = listGroups();\n res.json(groups.map((g) => ({\n name: g.name,\n memberCount: g.members.length,\n lastSync: g.lastSync ?? null,\n createdAt: g.createdAt,\n })));\n });\n\n app.get('/api/groups/:name', (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n res.json(group);\n });\n\n app.get('/api/groups/:name/contracts', (req, res) => {\n const result = loadSyncResult(req.params.name);\n if (!result) { res.status(404).json({ error: 'No sync result. Run sync first.' }); return; }\n res.json(result);\n });\n\n app.post('/api/groups/:name/sync', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n try {\n const result = await syncGroup(group);\n saveSyncResult(result);\n // Update lastSync on group\n group.lastSync = result.syncedAt;\n const { saveGroup } = await import('../multi-repo/group-registry.js');\n saveGroup(group);\n res.json(result);\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.post('/api/groups/:name/search', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const { q, limit = 20 } = req.body;\n if (!q) { res.status(400).json({ error: 'Missing query q' }); return; }\n try {\n const { perRepo, merged } = await queryGroup(group, q, limit);\n res.json({ perRepo, merged });\n } catch (err) {\n res.status(500).json({ error: err instanceof Error ? err.message : String(err) });\n }\n });\n\n app.get('/api/groups/:name/graph', async (req, res) => {\n const group = loadGroup(req.params.name);\n if (!group) { res.status(404).json({ error: 'Group not found' }); return; }\n const registry = loadRegistry();\n const mergedGraph = createKnowledgeGraph();\n for (const member of group.members) {\n const regEntry = registry.find((r) => r.name === member.registryName);\n if (!regEntry) continue;\n const dbPath = path.join(regEntry.path, '.code-intel', 'graph.db');\n if (!fs.existsSync(dbPath)) continue;\n const db = new DbManager(dbPath);\n try {\n await db.init();\n await loadGraphFromDB(mergedGraph, db);\n db.close();\n } catch { db.close(); }\n }\n res.json({ nodes: [...mergedGraph.allNodes()], edges: [...mergedGraph.allEdges()] });\n });\n\n // Serve web UI static files\n if (fs.existsSync(WEB_DIST)) {\n app.use(express.static(WEB_DIST));\n app.get('/{*path}', (_req, res) => {\n res.sendFile(path.join(WEB_DIST, 'index.html'));\n });\n }\n\n return app;\n}\n\nexport function startHttpServer(\n graph: KnowledgeGraph,\n repoName: string,\n port = 4747,\n workspaceRoot?: string,\n): void {\n const app = createApp(graph, repoName, workspaceRoot);\n app.listen(port, () => {\n Logger.info(`Code Intelligence server running at http://localhost:${port}`);\n Logger.info(` Graph: ${graph.size.nodes} nodes, ${graph.size.edges} edges`);\n });\n}\n","export type { RepoGroup, GroupMember, Contract, ContractLink, ContractKind, GroupSyncResult, LinkKind } from './types.js';\nexport { loadGroup, saveGroup, listGroups, deleteGroup, groupExists, addMember, removeMember, saveSyncResult, loadSyncResult } from './group-registry.js';\nexport { syncGroup } from './group-sync.js';\nexport { queryGroup } from './group-query.js';\nexport type { GroupQueryResult } from './group-query.js';\nexport { loadGraphFromDB } from './graph-from-db.js';\n\n// Legacy export kept for backwards compatibility\nexport { mergeSearchResults } from './cross-repo-search.js';\n","import type { SearchResult } from '../search/text-search.js';\nimport { reciprocalRankFusion } from '../search/text-search.js';\n\nexport function mergeSearchResults(...perRepoResults: SearchResult[][]): SearchResult[] {\n return reciprocalRankFusion(...perRepoResults);\n}\n"]}