codesearch-mcp 0.2.3-alpha → 0.4.0-alpha

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (317) hide show
  1. package/CHANGELOG.md +88 -5
  2. package/LICENSE +661 -21
  3. package/README.md +76 -40
  4. package/dist/app.js +17 -38
  5. package/dist/src/ast/CallExtractor.d.ts +8 -0
  6. package/dist/src/ast/CallExtractor.js +68 -0
  7. package/dist/src/ast/GraphqlNameExtractor.d.ts +22 -0
  8. package/dist/src/ast/GraphqlNameExtractor.js +240 -0
  9. package/dist/src/ast/ImportEdgeExtractor.d.ts +11 -0
  10. package/dist/src/ast/ImportEdgeExtractor.js +129 -0
  11. package/dist/src/ast/IndexedNodeResolver.d.ts +14 -0
  12. package/dist/src/ast/IndexedNodeResolver.js +217 -0
  13. package/dist/src/ast/MemberExtractor.d.ts +8 -0
  14. package/dist/src/ast/MemberExtractor.js +129 -0
  15. package/dist/src/ast/TopLevelSymbolExtractor.d.ts +5 -0
  16. package/dist/src/ast/TopLevelSymbolExtractor.js +86 -0
  17. package/dist/src/ast/graphql-grammar.d.ts +24 -0
  18. package/dist/src/ast/graphql-grammar.js +93 -0
  19. package/dist/src/ast/node-helpers.d.ts +11 -0
  20. package/dist/src/ast/node-helpers.js +55 -0
  21. package/dist/src/chunking/AstChunker.d.ts +12 -0
  22. package/dist/src/chunking/AstChunker.js +30 -0
  23. package/dist/src/chunking/CharacterChunkStrategy.d.ts +8 -0
  24. package/dist/src/chunking/CharacterChunkStrategy.js +15 -0
  25. package/dist/src/chunking/DeclarationChunkStrategy.d.ts +15 -0
  26. package/dist/src/chunking/DeclarationChunkStrategy.js +87 -0
  27. package/dist/src/chunking/FragmentMerger.d.ts +11 -0
  28. package/dist/src/chunking/FragmentMerger.js +61 -0
  29. package/dist/src/chunking/ImportOnlyFilter.d.ts +5 -0
  30. package/dist/src/chunking/ImportOnlyFilter.js +14 -0
  31. package/dist/src/chunking/LangchainTextSplitter.d.ts +21 -0
  32. package/dist/src/chunking/LangchainTextSplitter.js +133 -0
  33. package/dist/src/chunking/MinSizeSplitPolicy.d.ts +9 -0
  34. package/dist/src/chunking/MinSizeSplitPolicy.js +18 -0
  35. package/dist/src/chunking/RunPacker.d.ts +12 -0
  36. package/dist/src/chunking/RunPacker.js +84 -0
  37. package/dist/src/chunking/create-chunker.d.ts +3 -0
  38. package/dist/src/chunking/create-chunker.js +15 -0
  39. package/dist/src/chunking/interfaces.d.ts +27 -0
  40. package/dist/src/commands/ConfigCommand.js +1 -9
  41. package/dist/src/commands/EvalCommand.d.ts +10 -5
  42. package/dist/src/commands/EvalCommand.js +60 -149
  43. package/dist/src/commands/IndexCommand.d.ts +10 -4
  44. package/dist/src/commands/IndexCommand.js +52 -146
  45. package/dist/src/commands/McpCommand.d.ts +6 -3
  46. package/dist/src/commands/McpCommand.js +19 -20
  47. package/dist/src/commands/WebCommand.d.ts +9 -3
  48. package/dist/src/commands/WebCommand.js +17 -11
  49. package/dist/src/commands/eval/baseline-comparison.d.ts +6 -0
  50. package/dist/src/commands/eval/baseline-comparison.js +54 -0
  51. package/dist/src/commands/eval/eval-args.d.ts +6 -0
  52. package/dist/src/commands/eval/eval-args.js +71 -0
  53. package/dist/src/commands/eval/eval-corpora.d.ts +6 -0
  54. package/dist/src/commands/eval/eval-corpora.js +76 -0
  55. package/dist/src/commands/eval/eval-metadata.d.ts +17 -0
  56. package/dist/src/commands/eval/eval-metadata.js +75 -0
  57. package/dist/src/commands/eval/index-inspector.d.ts +3 -0
  58. package/dist/src/commands/eval/index-inspector.js +21 -0
  59. package/dist/src/commands/eval/staged-search.d.ts +3 -0
  60. package/dist/src/commands/eval/staged-search.js +20 -0
  61. package/dist/src/commands/eval/suite-loader.d.ts +8 -0
  62. package/dist/src/commands/eval/suite-loader.js +52 -0
  63. package/dist/src/commands/index/backend-probe.d.ts +2 -0
  64. package/dist/src/commands/index/backend-probe.js +15 -0
  65. package/dist/src/commands/index/embedding-setup.d.ts +3 -0
  66. package/dist/src/commands/index/embedding-setup.js +16 -0
  67. package/dist/src/commands/index/index-summary.d.ts +2 -0
  68. package/dist/src/commands/index/index-summary.js +22 -0
  69. package/dist/src/commands/index/legacy-ollama-guard.d.ts +3 -0
  70. package/dist/src/commands/index/legacy-ollama-guard.js +23 -0
  71. package/dist/src/commands/index/prune-step.d.ts +3 -0
  72. package/dist/src/commands/index/prune-step.js +22 -0
  73. package/dist/src/commands/index/scan-targets.d.ts +8 -0
  74. package/dist/src/commands/index/scan-targets.js +107 -0
  75. package/dist/src/config-error.d.ts +0 -4
  76. package/dist/src/config-error.js +0 -4
  77. package/dist/src/config-store.d.ts +1 -55
  78. package/dist/src/config-store.js +11 -73
  79. package/dist/src/config.d.ts +9 -18
  80. package/dist/src/config.js +36 -35
  81. package/dist/src/constants.d.ts +17 -28
  82. package/dist/src/constants.js +35 -29
  83. package/dist/src/container.d.ts +10 -2
  84. package/dist/src/container.js +19 -8
  85. package/dist/src/db/drizzle-types.d.ts +7 -0
  86. package/dist/src/db/drizzle-types.js +2 -0
  87. package/dist/src/db/index.d.ts +1 -0
  88. package/dist/src/db/schema-steps.d.ts +8 -0
  89. package/dist/src/db/schema-steps.js +105 -0
  90. package/dist/src/db/schema.d.ts +17 -0
  91. package/dist/src/db/schema.js +1 -6
  92. package/dist/src/declarations/DeclarationTree.d.ts +19 -0
  93. package/dist/src/declarations/DeclarationTree.js +66 -0
  94. package/dist/src/declarations/DeclarationTreeBuilder.d.ts +22 -0
  95. package/dist/src/declarations/DeclarationTreeBuilder.js +179 -0
  96. package/dist/src/declarations/SourceLines.d.ts +37 -0
  97. package/dist/src/declarations/SourceLines.js +415 -0
  98. package/dist/src/dependency-traversal.d.ts +0 -6
  99. package/dist/src/dependency-traversal.js +0 -6
  100. package/dist/src/enriched-prompt.d.ts +0 -6
  101. package/dist/src/enriched-prompt.js +0 -6
  102. package/dist/src/error-record.d.ts +12 -0
  103. package/dist/src/error-record.js +248 -0
  104. package/dist/src/eval-corpus.d.ts +16 -0
  105. package/dist/src/eval-corpus.js +169 -0
  106. package/dist/src/eval-results.d.ts +6 -3
  107. package/dist/src/eval-results.js +323 -26
  108. package/dist/src/eval-vector-index.d.ts +5 -0
  109. package/dist/src/eval-vector-index.js +60 -0
  110. package/dist/src/file-utils.d.ts +0 -5
  111. package/dist/src/file-utils.js +0 -5
  112. package/dist/src/graph.d.ts +0 -25
  113. package/dist/src/graph.js +0 -28
  114. package/dist/src/help.js +9 -1
  115. package/dist/src/hnsw-settings.d.ts +3 -0
  116. package/dist/src/hnsw-settings.js +24 -0
  117. package/dist/src/index-args.d.ts +13 -0
  118. package/dist/src/index-args.js +48 -0
  119. package/dist/src/indexing/AnalysisBatcher.d.ts +12 -0
  120. package/dist/src/indexing/AnalysisBatcher.js +28 -0
  121. package/dist/src/indexing/ChunkEmbedder.d.ts +24 -0
  122. package/dist/src/indexing/ChunkEmbedder.js +37 -0
  123. package/dist/src/indexing/ConsoleScanReporter.d.ts +10 -0
  124. package/dist/src/indexing/ConsoleScanReporter.js +73 -0
  125. package/dist/src/indexing/EmbeddingSchemaPreparer.d.ts +14 -0
  126. package/dist/src/indexing/EmbeddingSchemaPreparer.js +66 -0
  127. package/dist/src/indexing/FileIngestor.d.ts +22 -0
  128. package/dist/src/indexing/FileIngestor.js +116 -0
  129. package/dist/src/indexing/IndexStore.d.ts +24 -0
  130. package/dist/src/indexing/IndexStore.js +69 -0
  131. package/dist/src/indexing/StaleFilePruner.d.ts +8 -0
  132. package/dist/src/indexing/StaleFilePruner.js +55 -0
  133. package/dist/src/indexing/analysis-rows.d.ts +4 -0
  134. package/dist/src/indexing/analysis-rows.js +65 -0
  135. package/dist/src/indexing/project-notices.d.ts +2 -0
  136. package/dist/src/indexing/project-notices.js +63 -0
  137. package/dist/src/interfaces/IAstParser.d.ts +4 -40
  138. package/dist/src/interfaces/ICallGraph.d.ts +28 -0
  139. package/dist/src/interfaces/ICallGraph.js +2 -0
  140. package/dist/src/interfaces/IChunkSearch.d.ts +42 -0
  141. package/dist/src/interfaces/IChunkSearch.js +2 -0
  142. package/dist/src/interfaces/IChunker.d.ts +3 -12
  143. package/dist/src/interfaces/ICorpusInspector.d.ts +7 -0
  144. package/dist/src/interfaces/ICorpusInspector.js +2 -0
  145. package/dist/src/interfaces/IDatabase.d.ts +8 -24
  146. package/dist/src/interfaces/IDependencyGraph.d.ts +24 -0
  147. package/dist/src/interfaces/IDependencyGraph.js +2 -0
  148. package/dist/src/interfaces/IEmbedder.d.ts +0 -9
  149. package/dist/src/interfaces/IIndexIdentityGuard.d.ts +3 -0
  150. package/dist/src/interfaces/IIndexIdentityGuard.js +2 -0
  151. package/dist/src/interfaces/IIndexedNodeResolver.d.ts +10 -0
  152. package/dist/src/interfaces/IIndexedNodeResolver.js +2 -0
  153. package/dist/src/interfaces/ILogger.d.ts +1 -11
  154. package/dist/src/interfaces/IMcpReadiness.d.ts +12 -0
  155. package/dist/src/interfaces/IMcpReadiness.js +2 -0
  156. package/dist/src/interfaces/IMcpToolHandler.d.ts +0 -5
  157. package/dist/src/interfaces/IMonorepoResolver.d.ts +0 -22
  158. package/dist/src/interfaces/IProjectCatalog.d.ts +13 -0
  159. package/dist/src/interfaces/IProjectCatalog.js +2 -0
  160. package/dist/src/interfaces/IProjectDiscovery.d.ts +0 -17
  161. package/dist/src/interfaces/IProjectRoots.d.ts +3 -0
  162. package/dist/src/interfaces/IProjectRoots.js +2 -0
  163. package/dist/src/interfaces/IRetrievalEvaluator.d.ts +153 -12
  164. package/dist/src/interfaces/IScanReporter.d.ts +13 -0
  165. package/dist/src/interfaces/IScanReporter.js +2 -0
  166. package/dist/src/interfaces/ISymbolLookup.d.ts +49 -0
  167. package/dist/src/interfaces/ISymbolLookup.js +2 -0
  168. package/dist/src/interfaces/IToolPaths.d.ts +62 -0
  169. package/dist/src/interfaces/IToolPaths.js +2 -0
  170. package/dist/src/interfaces/IWorkspaceFiles.d.ts +28 -0
  171. package/dist/src/interfaces/IWorkspaceFiles.js +2 -0
  172. package/dist/src/interfaces/SymbolKind.d.ts +1 -0
  173. package/dist/src/interfaces/SymbolKind.js +2 -0
  174. package/dist/src/interfaces/index.d.ts +12 -1
  175. package/dist/src/interrupt.js +0 -2
  176. package/dist/src/owner-path.d.ts +9 -10
  177. package/dist/src/owner-path.js +11 -23
  178. package/dist/src/project-scope.d.ts +1 -12
  179. package/dist/src/project-scope.js +5 -12
  180. package/dist/src/project-selector.d.ts +0 -5
  181. package/dist/src/project-selector.js +0 -11
  182. package/dist/src/retrieval-eval.d.ts +15 -6
  183. package/dist/src/retrieval-eval.js +388 -59
  184. package/dist/src/search/CallGraph.d.ts +9 -0
  185. package/dist/src/search/CallGraph.js +84 -0
  186. package/dist/src/search/ChunkSearch.d.ts +23 -0
  187. package/dist/src/search/ChunkSearch.js +115 -0
  188. package/dist/src/search/DependencyGraph.d.ts +19 -0
  189. package/dist/src/search/DependencyGraph.js +180 -0
  190. package/dist/src/search/IndexIdentityGuard.d.ts +11 -0
  191. package/dist/src/search/IndexIdentityGuard.js +37 -0
  192. package/dist/src/search/ProjectCatalog.d.ts +11 -0
  193. package/dist/src/search/ProjectCatalog.js +38 -0
  194. package/dist/src/search/SymbolLookup.d.ts +24 -0
  195. package/dist/src/search/SymbolLookup.js +97 -0
  196. package/dist/src/search/chunks/CandidateFetcher.d.ts +19 -0
  197. package/dist/src/search/chunks/CandidateFetcher.js +40 -0
  198. package/dist/src/search/chunks/IterativeScanGate.d.ts +10 -0
  199. package/dist/src/search/chunks/IterativeScanGate.js +42 -0
  200. package/dist/src/search/chunks/RerankStage.d.ts +15 -0
  201. package/dist/src/search/chunks/RerankStage.js +42 -0
  202. package/dist/src/search/chunks/search-metrics.d.ts +18 -0
  203. package/dist/src/search/chunks/search-metrics.js +32 -0
  204. package/dist/src/search/chunks/search-plan.d.ts +18 -0
  205. package/dist/src/search/chunks/search-plan.js +19 -0
  206. package/dist/src/search/create-search-services.d.ts +26 -0
  207. package/dist/src/search/create-search-services.js +29 -0
  208. package/dist/src/search/index-paths.d.ts +1 -0
  209. package/dist/src/search/index-paths.js +5 -0
  210. package/dist/src/search/result-shaping.d.ts +4 -0
  211. package/dist/src/search/result-shaping.js +19 -0
  212. package/dist/src/search/symbol-sql.d.ts +13 -0
  213. package/dist/src/search/symbol-sql.js +66 -0
  214. package/dist/src/search/symbols/SymbolGrepFallback.d.ts +19 -0
  215. package/dist/src/search/symbols/SymbolGrepFallback.js +106 -0
  216. package/dist/src/search/symbols/SymbolIndexQuery.d.ts +14 -0
  217. package/dist/src/search/symbols/SymbolIndexQuery.js +52 -0
  218. package/dist/src/search/symbols/SymbolTextSearch.d.ts +13 -0
  219. package/dist/src/search/symbols/SymbolTextSearch.js +84 -0
  220. package/dist/src/search/symbols/TargetColumnGate.d.ts +7 -0
  221. package/dist/src/search/symbols/TargetColumnGate.js +23 -0
  222. package/dist/src/search/symbols/find-symbol-constants.d.ts +4 -0
  223. package/dist/src/search/symbols/find-symbol-constants.js +8 -0
  224. package/dist/src/search/symbols/grep-args.d.ts +3 -0
  225. package/dist/src/search/symbols/grep-args.js +7 -0
  226. package/dist/src/search/symbols/grep-patterns.d.ts +4 -0
  227. package/dist/src/search/symbols/grep-patterns.js +60 -0
  228. package/dist/src/services/AstParserService.d.ts +10 -106
  229. package/dist/src/services/AstParserService.js +37 -1068
  230. package/dist/src/services/DatabaseService.d.ts +10 -17
  231. package/dist/src/services/DatabaseService.js +71 -115
  232. package/dist/src/services/EmbedderFactory.d.ts +0 -4
  233. package/dist/src/services/EmbedderFactory.js +0 -5
  234. package/dist/src/services/IndexerService.d.ts +7 -26
  235. package/dist/src/services/IndexerService.js +38 -286
  236. package/dist/src/services/InfinityEmbedder.d.ts +0 -21
  237. package/dist/src/services/InfinityEmbedder.js +0 -15
  238. package/dist/src/services/LoggerService.d.ts +7 -5
  239. package/dist/src/services/LoggerService.js +37 -41
  240. package/dist/src/services/McpReadiness.d.ts +18 -0
  241. package/dist/src/services/McpReadiness.js +73 -0
  242. package/dist/src/services/McpServer.d.ts +50 -19
  243. package/dist/src/services/McpServer.js +132 -62
  244. package/dist/src/services/MonorepoAwareDiscoveryService.d.ts +1 -45
  245. package/dist/src/services/MonorepoAwareDiscoveryService.js +1 -51
  246. package/dist/src/services/NxMonorepoResolver.d.ts +0 -29
  247. package/dist/src/services/NxMonorepoResolver.js +5 -56
  248. package/dist/src/services/OpenAICompatibleEmbedder.d.ts +0 -6
  249. package/dist/src/services/OpenAICompatibleEmbedder.js +0 -14
  250. package/dist/src/services/ProjectDiscoveryService.d.ts +0 -4
  251. package/dist/src/services/ProjectDiscoveryService.js +0 -4
  252. package/dist/src/services/VoyageEmbedder.d.ts +0 -6
  253. package/dist/src/services/VoyageEmbedder.js +0 -6
  254. package/dist/src/services/WebServerService.d.ts +5 -56
  255. package/dist/src/services/WebServerService.js +25 -63
  256. package/dist/src/services/http-retry.d.ts +0 -7
  257. package/dist/src/services/http-retry.js +1 -10
  258. package/dist/src/services/infinity-provisioning.d.ts +0 -74
  259. package/dist/src/services/infinity-provisioning.js +5 -88
  260. package/dist/src/services/legacy-ollama-index.d.ts +0 -16
  261. package/dist/src/services/legacy-ollama-index.js +0 -23
  262. package/dist/src/services/reranker.d.ts +0 -9
  263. package/dist/src/services/reranker.js +46 -12
  264. package/dist/src/setup.d.ts +24 -24
  265. package/dist/src/setup.js +205 -103
  266. package/dist/src/symbol-name.d.ts +1 -12
  267. package/dist/src/symbol-name.js +16 -25
  268. package/dist/src/symbol-rows.d.ts +0 -14
  269. package/dist/src/symbol-rows.js +0 -14
  270. package/dist/src/tool-call-log.d.ts +2 -0
  271. package/dist/src/tool-call-log.js +24 -0
  272. package/dist/src/tools/FindSymbolTool.d.ts +17 -7
  273. package/dist/src/tools/FindSymbolTool.js +54 -35
  274. package/dist/src/tools/GetCallersTool.d.ts +16 -8
  275. package/dist/src/tools/GetCallersTool.js +65 -35
  276. package/dist/src/tools/GetDependenciesTool.d.ts +16 -8
  277. package/dist/src/tools/GetDependenciesTool.js +36 -29
  278. package/dist/src/tools/GetDependentsTool.d.ts +20 -8
  279. package/dist/src/tools/GetDependentsTool.js +48 -34
  280. package/dist/src/tools/ListFilesTool.d.ts +16 -8
  281. package/dist/src/tools/ListFilesTool.js +20 -26
  282. package/dist/src/tools/ListProjectsTool.d.ts +11 -7
  283. package/dist/src/tools/ListProjectsTool.js +13 -11
  284. package/dist/src/tools/McpTool.d.ts +17 -0
  285. package/dist/src/tools/McpTool.js +28 -0
  286. package/dist/src/tools/ReadFileRangeTool.d.ts +16 -8
  287. package/dist/src/tools/ReadFileRangeTool.js +23 -25
  288. package/dist/src/tools/ReadFileTool.d.ts +15 -8
  289. package/dist/src/tools/ReadFileTool.js +19 -24
  290. package/dist/src/tools/SearchCodebaseTool.d.ts +22 -10
  291. package/dist/src/tools/SearchCodebaseTool.js +71 -50
  292. package/dist/src/tools/format-helpers.d.ts +9 -9
  293. package/dist/src/tools/format-helpers.js +146 -28
  294. package/dist/src/tools/tool-args.d.ts +38 -0
  295. package/dist/src/tools/tool-args.js +95 -0
  296. package/dist/src/web/dashboard.d.ts +0 -8
  297. package/dist/src/web/dashboard.js +7 -10
  298. package/dist/src/workspace/GrepRunner.d.ts +15 -0
  299. package/dist/src/workspace/GrepRunner.js +104 -0
  300. package/dist/src/workspace/ProjectRoots.d.ts +22 -0
  301. package/dist/src/workspace/ProjectRoots.js +102 -0
  302. package/dist/src/workspace/ToolPaths.d.ts +31 -0
  303. package/dist/src/workspace/ToolPaths.js +312 -0
  304. package/dist/src/workspace/WorkspaceFiles.d.ts +19 -0
  305. package/dist/src/workspace/WorkspaceFiles.js +285 -0
  306. package/dist/src/workspace/fs-access.d.ts +9 -0
  307. package/dist/src/workspace/fs-access.js +47 -0
  308. package/dist/src/workspace/path-helpers.d.ts +3 -0
  309. package/dist/src/workspace/path-helpers.js +43 -0
  310. package/package.json +5 -4
  311. package/dist/src/interfaces/ISearcher.d.ts +0 -35
  312. package/dist/src/services/AstChunker.d.ts +0 -42
  313. package/dist/src/services/AstChunker.js +0 -158
  314. package/dist/src/services/SearcherService.d.ts +0 -342
  315. package/dist/src/services/SearcherService.js +0 -1199
  316. package/docs/web-dashboard.md +0 -206
  317. /package/dist/src/{interfaces/ISearcher.js → chunking/interfaces.js} +0 -0
@@ -0,0 +1,415 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SourceLines = void 0;
4
+ const PUNCTUATION_ONLY = /^[}\)\];,]+$/;
5
+ const DIRECTIVE = /^(['"])use [\w -]+\1;?$/;
6
+ const IMPORT_START = /^(import(?=\s*['"{*]|\s+[\w$])|export\s+(\*|type\s+[{*]|\{|import\s+[A-Za-z_$]))/;
7
+ const BARE_IMPORT_NEXT = /^([*{'"]|type\s|[A-Za-z_$][\w$]*\s*(,|from\b|=))/;
8
+ const BARE_IMPORT_LIST = /^[A-Za-z_$][\w$]*\s*,/;
9
+ const MODULE_REFERENCE = /\bfrom\s*(['"]|$)|\brequire\s*\(/;
10
+ const STATEMENT_END = /(['"]|\}|\))\s*;?$|;$|^(export\s+)?import\s+[A-Za-z_$][\w$]*\s*=\s*[A-Za-z_$][\w$.]*$/;
11
+ const DISQUALIFY = /^export\s+(default|async\b|function\b|const\b|let\b|var\b|class\b|abstract\b|interface\b|enum\b|namespace\b|declare\b|type\s+[A-Za-z_$])/;
12
+ const SPECIFIER = String.raw `['"][^'"]+['"]`;
13
+ const NAME = String.raw `(type\s+)?([A-Za-z_$][\w$]*|${SPECIFIER})(\s+as\s+([A-Za-z_$][\w$]*|${SPECIFIER}))?`;
14
+ const ATTRIBUTES = String.raw `(\s+(with|assert)\s*\{[^}]*\}?)?`;
15
+ const CONTINUATION = new RegExp([
16
+ String.raw `^(\{?\s*${NAME}(\s*,\s*${NAME})*\s*,?\s*)?(\}\s*)?(from(\s+${SPECIFIER}${ATTRIBUTES})?)?\s*;?$`,
17
+ String.raw `^['"][^'"]*['"]${ATTRIBUTES}\s*;?$`,
18
+ String.raw `^\)\s*;?$`,
19
+ String.raw `^\*\s+as\s+[A-Za-z_$][\w$]*(\s+from(\s+${SPECIFIER}${ATTRIBUTES})?)?\s*;?$`,
20
+ String.raw `^(${SPECIFIER}|[A-Za-z_$][\w$]*)\s*:\s*${SPECIFIER}\s*,?$`,
21
+ ].join('|'));
22
+ const MAX_IMPORT_LINE = 100_000;
23
+ const REGEX_PRECEDER = /(^|[(,=:[!&|?{};+\-*%<>~^]|(^|\.\.\.|[^\w$.])(return|typeof|instanceof|in|of|new|delete|void|throw|case|do|else|yield|await))$/;
24
+ const CONDITION_KEYWORDS = new Set(['if', 'while', 'for', 'with']);
25
+ const JSX_OPEN = /^<(>|(?!(const\s+)?[A-Za-z_$][\w$]*\s*(,|extends\b|=|>\s*\())[A-Za-z_$][\w$.:-]*[\s/>{<])/;
26
+ const TYPE_PARAMS_OR_TAG = /^<([A-Za-z_$][\w$]*)\s*>\s*\(/;
27
+ class SourceLines {
28
+ text;
29
+ lines;
30
+ stripped;
31
+ code;
32
+ startsInCode;
33
+ importLines;
34
+ constructor(text, { jsx = false } = {}) {
35
+ this.text = text;
36
+ this.lines = text.split('\n');
37
+ ({ stripped: this.stripped, startsInCode: this.startsInCode } = SourceLines.scanCode(text, this.lines.length, jsx));
38
+ this.code = this.stripped.map(l => l.replace(/\s+/g, ''));
39
+ }
40
+ get count() {
41
+ return this.lines.length;
42
+ }
43
+ line(n) {
44
+ return this.lines[n - 1] ?? '';
45
+ }
46
+ slice(start, end) {
47
+ return this.lines.slice(start - 1, end).join('\n');
48
+ }
49
+ length(start, end) {
50
+ return this.slice(start, end).length;
51
+ }
52
+ isBlank(n) {
53
+ return this.line(n).trim() === '';
54
+ }
55
+ isCommentOnly(n) {
56
+ return !this.isBlank(n) && this.code[n - 1] === '';
57
+ }
58
+ isDirective(n) {
59
+ return DIRECTIVE.test(this.stripped[n - 1]?.trim() ?? '');
60
+ }
61
+ isPunctuationOnly(n) {
62
+ return PUNCTUATION_ONLY.test(this.code[n - 1] ?? '');
63
+ }
64
+ isSignificant(n) {
65
+ const code = this.code[n - 1] ?? '';
66
+ return code !== '' && !PUNCTUATION_ONLY.test(code);
67
+ }
68
+ significantLength(start, end) {
69
+ let n = 0;
70
+ for (let i = start; i <= end; i++)
71
+ n += (this.code[i - 1] ?? '').length;
72
+ return n;
73
+ }
74
+ importRegions(start, end) {
75
+ const regions = [];
76
+ let i = start;
77
+ while (i <= end) {
78
+ const stmtEnd = this.importStatementEnd(i, end);
79
+ if (stmtEnd === null) {
80
+ i++;
81
+ continue;
82
+ }
83
+ let regionEnd = stmtEnd;
84
+ let k = stmtEnd + 1;
85
+ while (k <= end) {
86
+ if (this.isBlank(k) || this.isCommentOnly(k)) {
87
+ k++;
88
+ continue;
89
+ }
90
+ const next = this.importStatementEnd(k, end);
91
+ if (next === null)
92
+ break;
93
+ regionEnd = next;
94
+ k = next + 1;
95
+ }
96
+ regions.push({ start: i, end: regionEnd });
97
+ i = regionEnd + 1;
98
+ }
99
+ return regions;
100
+ }
101
+ importStatementEnd(n, limit) {
102
+ if (!this.startsInCode[n - 1] || !this.startsImport(n, limit))
103
+ return null;
104
+ let needsModule = this.stripped[n - 1].trim() === 'import' && BARE_IMPORT_LIST.test(this.nextCode(n, limit));
105
+ let depth = 0;
106
+ for (let j = n; j <= limit; j++) {
107
+ const line = this.stripped[j - 1].trim();
108
+ if (line === '')
109
+ continue;
110
+ if (!SourceLines.isImportLine(line))
111
+ return null;
112
+ depth += SourceLines.bracketDepth(line);
113
+ if (MODULE_REFERENCE.test(line))
114
+ needsModule = false;
115
+ if (depth > 0 || !STATEMENT_END.test(line))
116
+ continue;
117
+ if (line.endsWith('}') && /^from\b/.test(this.nextCode(j, limit)))
118
+ continue;
119
+ return needsModule ? null : j;
120
+ }
121
+ return null;
122
+ }
123
+ startsImport(n, limit) {
124
+ const line = this.stripped[n - 1].trim();
125
+ return IMPORT_START.test(line) || (line === 'import' && BARE_IMPORT_NEXT.test(this.nextCode(n, limit)));
126
+ }
127
+ nextCode(n, limit) {
128
+ for (let j = n + 1; j <= limit; j++) {
129
+ const line = this.stripped[j - 1].trim();
130
+ if (line !== '')
131
+ return line;
132
+ }
133
+ return '';
134
+ }
135
+ static bracketDepth(line) {
136
+ let depth = 0;
137
+ let quote = '';
138
+ for (let i = 0; i < line.length; i++) {
139
+ const ch = line[i];
140
+ if (quote) {
141
+ if (ch === '\\')
142
+ i++;
143
+ else if (ch === quote)
144
+ quote = '';
145
+ }
146
+ else if (ch === '\'' || ch === '"' || ch === '`')
147
+ quote = ch;
148
+ else if (ch === '{' || ch === '(')
149
+ depth++;
150
+ else if (ch === '}' || ch === ')')
151
+ depth--;
152
+ }
153
+ return depth;
154
+ }
155
+ static isImportOrReexportOnly(content) {
156
+ const src = new SourceLines(content);
157
+ return src.isImportOnly(1, src.count);
158
+ }
159
+ isImportOnly(start, end) {
160
+ const member = this.importStatementLines();
161
+ let any = false;
162
+ for (let n = start; n <= end; n++) {
163
+ if ((this.code[n - 1] ?? '') === '')
164
+ continue;
165
+ if (!member[n - 1])
166
+ return false;
167
+ any = true;
168
+ }
169
+ return any;
170
+ }
171
+ importStatementLines() {
172
+ if (this.importLines)
173
+ return this.importLines;
174
+ const member = Array.from({ length: this.count }, () => false);
175
+ for (let n = 1; n <= this.count;) {
176
+ const end = this.importStatementEnd(n, this.count);
177
+ if (end === null) {
178
+ n++;
179
+ continue;
180
+ }
181
+ for (let k = n; k <= end; k++)
182
+ member[k - 1] = true;
183
+ n = end + 1;
184
+ }
185
+ return (this.importLines = member);
186
+ }
187
+ static isImportLine(line) {
188
+ if (line.length > MAX_IMPORT_LINE)
189
+ return false;
190
+ for (const [i, statement] of SourceLines.statements(line).entries()) {
191
+ if (DISQUALIFY.test(statement))
192
+ return false;
193
+ if (IMPORT_START.test(statement))
194
+ continue;
195
+ if (i === 0 && CONTINUATION.test(statement))
196
+ continue;
197
+ return false;
198
+ }
199
+ return true;
200
+ }
201
+ static statements(line) {
202
+ const out = [];
203
+ let from = 0;
204
+ let quote = '';
205
+ for (let i = 0; i < line.length; i++) {
206
+ const ch = line[i];
207
+ if (quote) {
208
+ if (ch === '\\')
209
+ i++;
210
+ else if (ch === quote)
211
+ quote = '';
212
+ }
213
+ else if (ch === '\'' || ch === '"' || ch === '`')
214
+ quote = ch;
215
+ else if (ch === ';') {
216
+ out.push(line.slice(from, i + 1));
217
+ from = i + 1;
218
+ }
219
+ }
220
+ out.push(line.slice(from));
221
+ return out.map(t => t.trim()).filter(t => t !== '' && t !== ';');
222
+ }
223
+ static opensElement(text, i) {
224
+ const head = text.slice(i, i + 64);
225
+ if (JSX_OPEN.test(head))
226
+ return true;
227
+ const name = TYPE_PARAMS_OR_TAG.exec(head)?.[1];
228
+ return name !== undefined && text.includes(`</${name}>`, i);
229
+ }
230
+ static scanCode(text, lineCount, jsx) {
231
+ const stripped = Array.from({ length: lineCount }, () => '');
232
+ const startsInCode = Array.from({ length: lineCount }, () => true);
233
+ let line = 0;
234
+ let state = 'code';
235
+ const frames = [{ kind: 'code', braces: 0 }];
236
+ const parens = [];
237
+ let afterCondition = false;
238
+ let word = '';
239
+ let jsxString = false;
240
+ let continued = false;
241
+ let inClass = false;
242
+ let tail = '';
243
+ const emit = (chars) => {
244
+ stripped[line] += chars;
245
+ tail = (tail + chars.replace(/\s+/g, '')).slice(-16);
246
+ };
247
+ for (let i = 0; i < text.length; i++) {
248
+ const ch = text[i];
249
+ const next = text[i + 1];
250
+ const frame = frames[frames.length - 1];
251
+ if (ch === '\n') {
252
+ line++;
253
+ if (state === 'line' || state === 'regex')
254
+ state = 'code';
255
+ if ((state === '\'' || state === '"') && !jsxString && !continued)
256
+ state = 'code';
257
+ continued = false;
258
+ if (line < lineCount)
259
+ startsInCode[line] = state === 'code' && frame.kind === 'code';
260
+ continue;
261
+ }
262
+ switch (state) {
263
+ case 'line':
264
+ continue;
265
+ case 'block':
266
+ if (ch === '*' && next === '/') {
267
+ state = 'code';
268
+ i++;
269
+ }
270
+ continue;
271
+ case '\'':
272
+ case '"':
273
+ if (!jsxString && ch === '\\' && next !== undefined) {
274
+ continued = next === '\n' || (next === '\r' && text[i + 2] === '\n');
275
+ if (next === '\n') {
276
+ emit(ch);
277
+ continue;
278
+ }
279
+ emit(ch + next);
280
+ i++;
281
+ continue;
282
+ }
283
+ if (ch === state)
284
+ state = 'code';
285
+ emit(ch);
286
+ continue;
287
+ case 'regex':
288
+ if (ch === '\\' && next !== undefined && next !== '\n') {
289
+ emit(ch + next);
290
+ i++;
291
+ continue;
292
+ }
293
+ if (inClass) {
294
+ if (ch === ']')
295
+ inClass = false;
296
+ }
297
+ else if (ch === '[')
298
+ inClass = true;
299
+ else if (ch === '/')
300
+ state = 'code';
301
+ emit(ch);
302
+ continue;
303
+ }
304
+ switch (frame.kind) {
305
+ case 'template':
306
+ if (ch === '\\' && next !== undefined && next !== '\n') {
307
+ emit(ch + next);
308
+ i++;
309
+ continue;
310
+ }
311
+ if (ch === '`')
312
+ frames.pop();
313
+ else if (ch === '$' && next === '{') {
314
+ frames.push({ kind: 'code', braces: 0 });
315
+ emit('${');
316
+ i++;
317
+ continue;
318
+ }
319
+ emit(ch);
320
+ continue;
321
+ case 'children':
322
+ if (ch === '{')
323
+ frames.push({ kind: 'code', braces: 0 });
324
+ else if (ch === '<' && next === '/') {
325
+ frames.push({ kind: 'tag', closing: true, angles: 0 });
326
+ emit('</');
327
+ i++;
328
+ continue;
329
+ }
330
+ else if (ch === '<')
331
+ frames.push({ kind: 'tag', closing: false, angles: 0 });
332
+ emit(ch);
333
+ continue;
334
+ case 'tag':
335
+ if (ch === '/' && next === '/') {
336
+ state = 'line';
337
+ i++;
338
+ continue;
339
+ }
340
+ if (ch === '/' && next === '*') {
341
+ state = 'block';
342
+ emit(' ');
343
+ i++;
344
+ continue;
345
+ }
346
+ if (ch === '/' && next === '>') {
347
+ frames.pop();
348
+ emit('/>');
349
+ i++;
350
+ continue;
351
+ }
352
+ if (ch === '\'' || ch === '"') {
353
+ state = ch;
354
+ jsxString = true;
355
+ }
356
+ else if (ch === '{')
357
+ frames.push({ kind: 'code', braces: 0 });
358
+ else if (ch === '<')
359
+ frame.angles++;
360
+ else if (ch === '>' && frame.angles > 0)
361
+ frame.angles--;
362
+ else if (ch === '>') {
363
+ frames.pop();
364
+ if (frame.closing)
365
+ frames.pop();
366
+ else
367
+ frames.push({ kind: 'children' });
368
+ }
369
+ emit(ch);
370
+ continue;
371
+ }
372
+ if (ch === '/' && next === '/') {
373
+ state = 'line';
374
+ i++;
375
+ continue;
376
+ }
377
+ if (ch === '/' && next === '*') {
378
+ state = 'block';
379
+ emit(' ');
380
+ i++;
381
+ continue;
382
+ }
383
+ if (ch === '/' && (afterCondition || REGEX_PRECEDER.test(tail))) {
384
+ state = 'regex';
385
+ inClass = false;
386
+ }
387
+ else if (ch === '\'' || ch === '"') {
388
+ state = ch;
389
+ jsxString = false;
390
+ }
391
+ else if (ch === '`')
392
+ frames.push({ kind: 'template' });
393
+ else if (ch === '{')
394
+ frame.braces++;
395
+ else if (ch === '}' && frame.braces > 0)
396
+ frame.braces--;
397
+ else if (ch === '}' && frames.length > 1)
398
+ frames.pop();
399
+ else if (ch === '(')
400
+ parens.push(CONDITION_KEYWORDS.has(word));
401
+ else if (jsx && ch === '<' && !tail.endsWith('<') && REGEX_PRECEDER.test(tail) && SourceLines.opensElement(text, i)) {
402
+ frames.push({ kind: 'tag', closing: false, angles: 0 });
403
+ }
404
+ if (/[\w$]/.test(ch))
405
+ word = /[\w$]/.test(text[i - 1] ?? '') ? word + ch : ch;
406
+ else if (!/\s/.test(ch))
407
+ word = '';
408
+ if (!/\s/.test(ch))
409
+ afterCondition = ch === ')' && (parens.pop() ?? false);
410
+ emit(ch);
411
+ }
412
+ return { stripped, startsInCode };
413
+ }
414
+ }
415
+ exports.SourceLines = SourceLines;
@@ -1,4 +1,3 @@
1
- /** One edge in the traversal direction: forward (fromFile → toFile) for dependencies, backward for dependents. */
2
1
  export interface Edge {
3
2
  from: string;
4
3
  to: string;
@@ -8,9 +7,4 @@ export interface IndirectRow {
8
7
  depth: number;
9
8
  via: string;
10
9
  }
11
- /**
12
- * Breadth-first, one `neighbours` call per depth level. Each reachable file is expanded
13
- * at most once; `via` ties within a level are broken by byte order, not call order.
14
- * Does not catch — a rejecting `neighbours` call rejects the whole traversal.
15
- */
16
10
  export declare function traverse(root: string, neighbours: (frontier: string[]) => Promise<Edge[]>, maxDepth?: number): Promise<IndirectRow[]>;
@@ -1,15 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.traverse = traverse;
4
- /** UTF-8 byte order (`COLLATE "C"`), not the platform locale or UTF-16 code-unit order. */
5
4
  function byteCompare(a, b) {
6
5
  return Buffer.compare(Buffer.from(a, 'utf8'), Buffer.from(b, 'utf8'));
7
6
  }
8
- /**
9
- * Breadth-first, one `neighbours` call per depth level. Each reachable file is expanded
10
- * at most once; `via` ties within a level are broken by byte order, not call order.
11
- * Does not catch — a rejecting `neighbours` call rejects the whole traversal.
12
- */
13
7
  async function traverse(root, neighbours, maxDepth = 20) {
14
8
  const visited = new Map();
15
9
  visited.set(root, 0);
@@ -1,9 +1,3 @@
1
1
  import type { ChunkPiece } from './interfaces/IChunker';
2
2
  import type { DepEdge, SymbolEntry } from './interfaces/IAstParser';
3
- /**
4
- * Build the embedding-input prompt for one chunk. `symbols` is the file's
5
- * top-level declarations only (never members) — the prompt-owner-line
6
- * experiment measured adding members and an owner line and found neither met
7
- * the required MRR@10 gain, so this stays the shipped prompt.
8
- */
9
3
  export declare function getEnrichedPrompt(piece: ChunkPiece, relPath: string, serviceName: string, edges: DepEdge[], symbols: SymbolEntry[]): string;
@@ -59,12 +59,6 @@ function inferRole(relPath) {
59
59
  return 'Utility';
60
60
  return null;
61
61
  }
62
- /**
63
- * Build the embedding-input prompt for one chunk. `symbols` is the file's
64
- * top-level declarations only (never members) — the prompt-owner-line
65
- * experiment measured adding members and an owner line and found neither met
66
- * the required MRR@10 gain, so this stays the shipped prompt.
67
- */
68
62
  function getEnrichedPrompt(piece, relPath, serviceName, edges, symbols) {
69
63
  const chunkStart = piece.startLine;
70
64
  const chunkEnd = piece.endLine;
@@ -0,0 +1,12 @@
1
+ export declare const MAX_CAUSES = 5;
2
+ export declare const MAX_FRAMES = 30;
3
+ export declare const MAX_QUERY_CHARS = 500;
4
+ export declare const MAX_PARAMS = 30;
5
+ export declare const MAX_PARAM_CHARS = 120;
6
+ export declare const MAX_AGGREGATED = 10;
7
+ export declare function serializeError(value: unknown): unknown;
8
+ export declare function rootCauseMessage(value: unknown): string;
9
+ export declare function errorMessage(value: unknown): string;
10
+ export declare const LOG_SERIALIZERS: {
11
+ err: typeof serializeError;
12
+ };