@code-rag/core 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (347) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/auth/audit-log.d.ts +35 -0
  4. package/dist/auth/audit-log.js +110 -0
  5. package/dist/auth/audit-log.js.map +1 -0
  6. package/dist/auth/audit-log.test.d.ts +1 -0
  7. package/dist/auth/audit-log.test.js +261 -0
  8. package/dist/auth/audit-log.test.js.map +1 -0
  9. package/dist/auth/index.d.ts +6 -0
  10. package/dist/auth/index.js +5 -0
  11. package/dist/auth/index.js.map +1 -0
  12. package/dist/auth/oidc-provider.d.ts +49 -0
  13. package/dist/auth/oidc-provider.js +358 -0
  14. package/dist/auth/oidc-provider.js.map +1 -0
  15. package/dist/auth/oidc-provider.test.d.ts +1 -0
  16. package/dist/auth/oidc-provider.test.js +520 -0
  17. package/dist/auth/oidc-provider.test.js.map +1 -0
  18. package/dist/auth/rbac.d.ts +29 -0
  19. package/dist/auth/rbac.js +75 -0
  20. package/dist/auth/rbac.js.map +1 -0
  21. package/dist/auth/rbac.test.d.ts +1 -0
  22. package/dist/auth/rbac.test.js +224 -0
  23. package/dist/auth/rbac.test.js.map +1 -0
  24. package/dist/auth/saml-provider.d.ts +51 -0
  25. package/dist/auth/saml-provider.js +355 -0
  26. package/dist/auth/saml-provider.js.map +1 -0
  27. package/dist/auth/saml-provider.test.d.ts +1 -0
  28. package/dist/auth/saml-provider.test.js +422 -0
  29. package/dist/auth/saml-provider.test.js.map +1 -0
  30. package/dist/auth/types.d.ts +81 -0
  31. package/dist/auth/types.js +11 -0
  32. package/dist/auth/types.js.map +1 -0
  33. package/dist/auth/types.test.d.ts +1 -0
  34. package/dist/auth/types.test.js +147 -0
  35. package/dist/auth/types.test.js.map +1 -0
  36. package/dist/backlog/ab-reference-scanner.d.ts +10 -0
  37. package/dist/backlog/ab-reference-scanner.js +22 -0
  38. package/dist/backlog/ab-reference-scanner.js.map +1 -0
  39. package/dist/backlog/ab-reference-scanner.test.d.ts +1 -0
  40. package/dist/backlog/ab-reference-scanner.test.js +83 -0
  41. package/dist/backlog/ab-reference-scanner.test.js.map +1 -0
  42. package/dist/backlog/azure-devops-provider.d.ts +59 -0
  43. package/dist/backlog/azure-devops-provider.js +283 -0
  44. package/dist/backlog/azure-devops-provider.js.map +1 -0
  45. package/dist/backlog/backlog-provider.d.ts +13 -0
  46. package/dist/backlog/backlog-provider.js +6 -0
  47. package/dist/backlog/backlog-provider.js.map +1 -0
  48. package/dist/backlog/backlog-provider.test.d.ts +1 -0
  49. package/dist/backlog/backlog-provider.test.js +426 -0
  50. package/dist/backlog/backlog-provider.test.js.map +1 -0
  51. package/dist/backlog/clickup-provider.d.ts +55 -0
  52. package/dist/backlog/clickup-provider.js +301 -0
  53. package/dist/backlog/clickup-provider.js.map +1 -0
  54. package/dist/backlog/clickup-provider.test.d.ts +1 -0
  55. package/dist/backlog/clickup-provider.test.js +426 -0
  56. package/dist/backlog/clickup-provider.test.js.map +1 -0
  57. package/dist/backlog/clickup-reference-scanner.d.ts +10 -0
  58. package/dist/backlog/clickup-reference-scanner.js +32 -0
  59. package/dist/backlog/clickup-reference-scanner.js.map +1 -0
  60. package/dist/backlog/clickup-reference-scanner.test.d.ts +1 -0
  61. package/dist/backlog/clickup-reference-scanner.test.js +92 -0
  62. package/dist/backlog/clickup-reference-scanner.test.js.map +1 -0
  63. package/dist/backlog/code-linker.d.ts +63 -0
  64. package/dist/backlog/code-linker.js +90 -0
  65. package/dist/backlog/code-linker.js.map +1 -0
  66. package/dist/backlog/code-linker.test.d.ts +1 -0
  67. package/dist/backlog/code-linker.test.js +325 -0
  68. package/dist/backlog/code-linker.test.js.map +1 -0
  69. package/dist/backlog/index.d.ts +14 -0
  70. package/dist/backlog/index.js +8 -0
  71. package/dist/backlog/index.js.map +1 -0
  72. package/dist/backlog/jira-provider.d.ts +60 -0
  73. package/dist/backlog/jira-provider.js +272 -0
  74. package/dist/backlog/jira-provider.js.map +1 -0
  75. package/dist/backlog/jira-provider.test.d.ts +1 -0
  76. package/dist/backlog/jira-provider.test.js +449 -0
  77. package/dist/backlog/jira-provider.test.js.map +1 -0
  78. package/dist/backlog/jira-reference-scanner.d.ts +11 -0
  79. package/dist/backlog/jira-reference-scanner.js +26 -0
  80. package/dist/backlog/jira-reference-scanner.js.map +1 -0
  81. package/dist/backlog/jira-reference-scanner.test.d.ts +1 -0
  82. package/dist/backlog/jira-reference-scanner.test.js +127 -0
  83. package/dist/backlog/jira-reference-scanner.test.js.map +1 -0
  84. package/dist/backlog/types.d.ts +22 -0
  85. package/dist/backlog/types.js +1 -0
  86. package/dist/backlog/types.js.map +1 -0
  87. package/dist/chunker/ast-chunker.d.ts +45 -0
  88. package/dist/chunker/ast-chunker.js +292 -0
  89. package/dist/chunker/ast-chunker.js.map +1 -0
  90. package/dist/chunker/ast-chunker.test.d.ts +1 -0
  91. package/dist/chunker/ast-chunker.test.js +391 -0
  92. package/dist/chunker/ast-chunker.test.js.map +1 -0
  93. package/dist/chunker/chunker.d.ts +8 -0
  94. package/dist/chunker/chunker.js +1 -0
  95. package/dist/chunker/chunker.js.map +1 -0
  96. package/dist/chunker/index.d.ts +3 -0
  97. package/dist/chunker/index.js +2 -0
  98. package/dist/chunker/index.js.map +1 -0
  99. package/dist/config/config-parser.d.ts +15 -0
  100. package/dist/config/config-parser.js +283 -0
  101. package/dist/config/config-parser.js.map +1 -0
  102. package/dist/config/config-parser.test.d.ts +1 -0
  103. package/dist/config/config-parser.test.js +699 -0
  104. package/dist/config/config-parser.test.js.map +1 -0
  105. package/dist/docs/confluence-provider.d.ts +121 -0
  106. package/dist/docs/confluence-provider.js +459 -0
  107. package/dist/docs/confluence-provider.js.map +1 -0
  108. package/dist/docs/confluence-provider.test.d.ts +1 -0
  109. package/dist/docs/confluence-provider.test.js +765 -0
  110. package/dist/docs/confluence-provider.test.js.map +1 -0
  111. package/dist/docs/index.d.ts +4 -0
  112. package/dist/docs/index.js +2 -0
  113. package/dist/docs/index.js.map +1 -0
  114. package/dist/docs/sharepoint-provider.d.ts +150 -0
  115. package/dist/docs/sharepoint-provider.js +637 -0
  116. package/dist/docs/sharepoint-provider.js.map +1 -0
  117. package/dist/docs/sharepoint-provider.test.d.ts +1 -0
  118. package/dist/docs/sharepoint-provider.test.js +873 -0
  119. package/dist/docs/sharepoint-provider.test.js.map +1 -0
  120. package/dist/embedding/bm25-index.d.ts +12 -0
  121. package/dist/embedding/bm25-index.js +89 -0
  122. package/dist/embedding/bm25-index.js.map +1 -0
  123. package/dist/embedding/bm25-index.test.d.ts +1 -0
  124. package/dist/embedding/bm25-index.test.js +289 -0
  125. package/dist/embedding/bm25-index.test.js.map +1 -0
  126. package/dist/embedding/hybrid-search.d.ts +13 -0
  127. package/dist/embedding/hybrid-search.js +124 -0
  128. package/dist/embedding/hybrid-search.js.map +1 -0
  129. package/dist/embedding/hybrid-search.test.d.ts +1 -0
  130. package/dist/embedding/hybrid-search.test.js +266 -0
  131. package/dist/embedding/hybrid-search.test.js.map +1 -0
  132. package/dist/embedding/index.d.ts +11 -0
  133. package/dist/embedding/index.js +7 -0
  134. package/dist/embedding/index.js.map +1 -0
  135. package/dist/embedding/lancedb-store.d.ts +21 -0
  136. package/dist/embedding/lancedb-store.js +172 -0
  137. package/dist/embedding/lancedb-store.js.map +1 -0
  138. package/dist/embedding/lancedb-store.test.d.ts +1 -0
  139. package/dist/embedding/lancedb-store.test.js +268 -0
  140. package/dist/embedding/lancedb-store.test.js.map +1 -0
  141. package/dist/embedding/model-lifecycle-manager.d.ts +83 -0
  142. package/dist/embedding/model-lifecycle-manager.js +419 -0
  143. package/dist/embedding/model-lifecycle-manager.js.map +1 -0
  144. package/dist/embedding/model-lifecycle-manager.test.d.ts +1 -0
  145. package/dist/embedding/model-lifecycle-manager.test.js +642 -0
  146. package/dist/embedding/model-lifecycle-manager.test.js.map +1 -0
  147. package/dist/embedding/ollama-embedding-provider.d.ts +16 -0
  148. package/dist/embedding/ollama-embedding-provider.js +74 -0
  149. package/dist/embedding/ollama-embedding-provider.js.map +1 -0
  150. package/dist/embedding/ollama-embedding-provider.test.d.ts +1 -0
  151. package/dist/embedding/ollama-embedding-provider.test.js +198 -0
  152. package/dist/embedding/ollama-embedding-provider.test.js.map +1 -0
  153. package/dist/embedding/openai-compatible-embedding-provider.d.ts +19 -0
  154. package/dist/embedding/openai-compatible-embedding-provider.js +108 -0
  155. package/dist/embedding/openai-compatible-embedding-provider.js.map +1 -0
  156. package/dist/embedding/openai-compatible-embedding-provider.test.d.ts +1 -0
  157. package/dist/embedding/openai-compatible-embedding-provider.test.js +456 -0
  158. package/dist/embedding/openai-compatible-embedding-provider.test.js.map +1 -0
  159. package/dist/embedding/qdrant-store.d.ts +28 -0
  160. package/dist/embedding/qdrant-store.js +174 -0
  161. package/dist/embedding/qdrant-store.js.map +1 -0
  162. package/dist/embedding/qdrant-store.test.d.ts +1 -0
  163. package/dist/embedding/qdrant-store.test.js +359 -0
  164. package/dist/embedding/qdrant-store.test.js.map +1 -0
  165. package/dist/enrichment/index.d.ts +4 -0
  166. package/dist/enrichment/index.js +2 -0
  167. package/dist/enrichment/index.js.map +1 -0
  168. package/dist/enrichment/nl-enricher.d.ts +16 -0
  169. package/dist/enrichment/nl-enricher.js +47 -0
  170. package/dist/enrichment/nl-enricher.js.map +1 -0
  171. package/dist/enrichment/nl-enricher.test.d.ts +1 -0
  172. package/dist/enrichment/nl-enricher.test.js +154 -0
  173. package/dist/enrichment/nl-enricher.test.js.map +1 -0
  174. package/dist/enrichment/ollama-client.d.ts +18 -0
  175. package/dist/enrichment/ollama-client.js +55 -0
  176. package/dist/enrichment/ollama-client.js.map +1 -0
  177. package/dist/enrichment/ollama-client.test.d.ts +1 -0
  178. package/dist/enrichment/ollama-client.test.js +129 -0
  179. package/dist/enrichment/ollama-client.test.js.map +1 -0
  180. package/dist/git/git-client.d.ts +22 -0
  181. package/dist/git/git-client.js +6 -0
  182. package/dist/git/git-client.js.map +1 -0
  183. package/dist/git/git-client.test.d.ts +1 -0
  184. package/dist/git/git-client.test.js +200 -0
  185. package/dist/git/git-client.test.js.map +1 -0
  186. package/dist/git/ignore-filter.d.ts +2 -0
  187. package/dist/git/ignore-filter.js +31 -0
  188. package/dist/git/ignore-filter.js.map +1 -0
  189. package/dist/git/ignore-filter.test.d.ts +1 -0
  190. package/dist/git/ignore-filter.test.js +87 -0
  191. package/dist/git/ignore-filter.test.js.map +1 -0
  192. package/dist/git/index.d.ts +4 -0
  193. package/dist/git/index.js +3 -0
  194. package/dist/git/index.js.map +1 -0
  195. package/dist/git/simple-git-client.d.ts +12 -0
  196. package/dist/git/simple-git-client.js +138 -0
  197. package/dist/git/simple-git-client.js.map +1 -0
  198. package/dist/graph/cross-repo-resolver.d.ts +50 -0
  199. package/dist/graph/cross-repo-resolver.js +315 -0
  200. package/dist/graph/cross-repo-resolver.js.map +1 -0
  201. package/dist/graph/cross-repo-resolver.test.d.ts +1 -0
  202. package/dist/graph/cross-repo-resolver.test.js +548 -0
  203. package/dist/graph/cross-repo-resolver.test.js.map +1 -0
  204. package/dist/graph/dependency-graph.d.ts +44 -0
  205. package/dist/graph/dependency-graph.js +108 -0
  206. package/dist/graph/dependency-graph.js.map +1 -0
  207. package/dist/graph/dependency-graph.test.d.ts +1 -0
  208. package/dist/graph/dependency-graph.test.js +276 -0
  209. package/dist/graph/dependency-graph.test.js.map +1 -0
  210. package/dist/graph/graph-builder.d.ts +11 -0
  211. package/dist/graph/graph-builder.js +113 -0
  212. package/dist/graph/graph-builder.js.map +1 -0
  213. package/dist/graph/graph-builder.test.d.ts +1 -0
  214. package/dist/graph/graph-builder.test.js +178 -0
  215. package/dist/graph/graph-builder.test.js.map +1 -0
  216. package/dist/graph/import-resolver.d.ts +11 -0
  217. package/dist/graph/import-resolver.js +199 -0
  218. package/dist/graph/import-resolver.js.map +1 -0
  219. package/dist/graph/import-resolver.test.d.ts +1 -0
  220. package/dist/graph/import-resolver.test.js +282 -0
  221. package/dist/graph/import-resolver.test.js.map +1 -0
  222. package/dist/graph/index.d.ts +7 -0
  223. package/dist/graph/index.js +4 -0
  224. package/dist/graph/index.js.map +1 -0
  225. package/dist/index.d.ts +31 -0
  226. package/dist/index.js +15 -0
  227. package/dist/index.js.map +1 -0
  228. package/dist/indexer/file-scanner.d.ts +34 -0
  229. package/dist/indexer/file-scanner.js +69 -0
  230. package/dist/indexer/file-scanner.js.map +1 -0
  231. package/dist/indexer/file-scanner.test.d.ts +1 -0
  232. package/dist/indexer/file-scanner.test.js +110 -0
  233. package/dist/indexer/file-scanner.test.js.map +1 -0
  234. package/dist/indexer/file-watcher.d.ts +79 -0
  235. package/dist/indexer/file-watcher.js +148 -0
  236. package/dist/indexer/incremental-indexer.d.ts +67 -0
  237. package/dist/indexer/incremental-indexer.js +142 -0
  238. package/dist/indexer/incremental-indexer.js.map +1 -0
  239. package/dist/indexer/incremental-indexer.test.d.ts +1 -0
  240. package/dist/indexer/incremental-indexer.test.js +266 -0
  241. package/dist/indexer/incremental-indexer.test.js.map +1 -0
  242. package/dist/indexer/index-check.d.ts +22 -0
  243. package/dist/indexer/index-check.js +74 -0
  244. package/dist/indexer/index-check.js.map +1 -0
  245. package/dist/indexer/index-check.test.d.ts +1 -0
  246. package/dist/indexer/index-check.test.js +100 -0
  247. package/dist/indexer/index-check.test.js.map +1 -0
  248. package/dist/indexer/index-state.d.ts +61 -0
  249. package/dist/indexer/index-state.js +82 -0
  250. package/dist/indexer/index-state.js.map +1 -0
  251. package/dist/indexer/index-state.test.d.ts +1 -0
  252. package/dist/indexer/index-state.test.js +140 -0
  253. package/dist/indexer/index-state.test.js.map +1 -0
  254. package/dist/indexer/index.d.ts +12 -0
  255. package/dist/indexer/index.js +6 -0
  256. package/dist/indexer/index.js.map +1 -0
  257. package/dist/indexer/multi-repo-indexer.d.ts +63 -0
  258. package/dist/indexer/multi-repo-indexer.js +144 -0
  259. package/dist/indexer/multi-repo-indexer.js.map +1 -0
  260. package/dist/indexer/multi-repo-indexer.test.d.ts +1 -0
  261. package/dist/indexer/multi-repo-indexer.test.js +238 -0
  262. package/dist/indexer/multi-repo-indexer.test.js.map +1 -0
  263. package/dist/parser/index.d.ts +4 -0
  264. package/dist/parser/index.js +3 -0
  265. package/dist/parser/index.js.map +1 -0
  266. package/dist/parser/language-registry.d.ts +46 -0
  267. package/dist/parser/language-registry.js +219 -0
  268. package/dist/parser/language-registry.js.map +1 -0
  269. package/dist/parser/language-registry.test.d.ts +1 -0
  270. package/dist/parser/language-registry.test.js +225 -0
  271. package/dist/parser/language-registry.test.js.map +1 -0
  272. package/dist/parser/markdown-parser.d.ts +124 -0
  273. package/dist/parser/markdown-parser.js +487 -0
  274. package/dist/parser/markdown-parser.js.map +1 -0
  275. package/dist/parser/markdown-parser.test.d.ts +1 -0
  276. package/dist/parser/markdown-parser.test.js +600 -0
  277. package/dist/parser/markdown-parser.test.js.map +1 -0
  278. package/dist/parser/tree-sitter-parser.d.ts +32 -0
  279. package/dist/parser/tree-sitter-parser.js +146 -0
  280. package/dist/parser/tree-sitter-parser.js.map +1 -0
  281. package/dist/retrieval/context-expander.d.ts +51 -0
  282. package/dist/retrieval/context-expander.js +218 -0
  283. package/dist/retrieval/context-expander.js.map +1 -0
  284. package/dist/retrieval/context-expander.test.d.ts +1 -0
  285. package/dist/retrieval/context-expander.test.js +339 -0
  286. package/dist/retrieval/context-expander.test.js.map +1 -0
  287. package/dist/retrieval/cross-encoder-reranker.d.ts +16 -0
  288. package/dist/retrieval/cross-encoder-reranker.js +90 -0
  289. package/dist/retrieval/cross-encoder-reranker.js.map +1 -0
  290. package/dist/retrieval/cross-encoder-reranker.test.d.ts +1 -0
  291. package/dist/retrieval/cross-encoder-reranker.test.js +305 -0
  292. package/dist/retrieval/cross-encoder-reranker.test.js.map +1 -0
  293. package/dist/retrieval/index.d.ts +8 -0
  294. package/dist/retrieval/index.js +4 -0
  295. package/dist/retrieval/index.js.map +1 -0
  296. package/dist/retrieval/query-analyzer.d.ts +29 -0
  297. package/dist/retrieval/query-analyzer.js +238 -0
  298. package/dist/retrieval/query-analyzer.js.map +1 -0
  299. package/dist/retrieval/query-analyzer.test.d.ts +1 -0
  300. package/dist/retrieval/query-analyzer.test.js +236 -0
  301. package/dist/retrieval/query-analyzer.test.js.map +1 -0
  302. package/dist/retrieval/token-budget.d.ts +51 -0
  303. package/dist/retrieval/token-budget.js +141 -0
  304. package/dist/retrieval/token-budget.js.map +1 -0
  305. package/dist/retrieval/token-budget.test.d.ts +1 -0
  306. package/dist/retrieval/token-budget.test.js +404 -0
  307. package/dist/retrieval/token-budget.test.js.map +1 -0
  308. package/dist/storage/azure-blob-provider.d.ts +19 -0
  309. package/dist/storage/azure-blob-provider.js +199 -0
  310. package/dist/storage/azure-blob-provider.js.map +1 -0
  311. package/dist/storage/azure-blob-provider.test.d.ts +1 -0
  312. package/dist/storage/azure-blob-provider.test.js +250 -0
  313. package/dist/storage/azure-blob-provider.test.js.map +1 -0
  314. package/dist/storage/gcs-provider.d.ts +22 -0
  315. package/dist/storage/gcs-provider.js +241 -0
  316. package/dist/storage/gcs-provider.js.map +1 -0
  317. package/dist/storage/gcs-provider.test.d.ts +1 -0
  318. package/dist/storage/gcs-provider.test.js +299 -0
  319. package/dist/storage/gcs-provider.test.js.map +1 -0
  320. package/dist/storage/index.d.ts +5 -0
  321. package/dist/storage/index.js +4 -0
  322. package/dist/storage/index.js.map +1 -0
  323. package/dist/storage/s3-provider.d.ts +21 -0
  324. package/dist/storage/s3-provider.js +220 -0
  325. package/dist/storage/s3-provider.js.map +1 -0
  326. package/dist/storage/s3-provider.test.d.ts +1 -0
  327. package/dist/storage/s3-provider.test.js +329 -0
  328. package/dist/storage/s3-provider.test.js.map +1 -0
  329. package/dist/storage/types.d.ts +65 -0
  330. package/dist/storage/types.js +12 -0
  331. package/dist/storage/types.js.map +1 -0
  332. package/dist/types/chunk.d.ts +32 -0
  333. package/dist/types/chunk.js +1 -0
  334. package/dist/types/chunk.js.map +1 -0
  335. package/dist/types/config.d.ts +71 -0
  336. package/dist/types/config.js +1 -0
  337. package/dist/types/config.js.map +1 -0
  338. package/dist/types/index.d.ts +5 -0
  339. package/dist/types/index.js +1 -0
  340. package/dist/types/index.js.map +1 -0
  341. package/dist/types/provider.d.ts +54 -0
  342. package/dist/types/provider.js +36 -0
  343. package/dist/types/provider.js.map +1 -0
  344. package/dist/types/search.d.ts +27 -0
  345. package/dist/types/search.js +1 -0
  346. package/dist/types/search.js.map +1 -0
  347. package/package.json +70 -0
@@ -0,0 +1,146 @@
1
+ import TSParser from 'web-tree-sitter';
2
+ import { ok, err } from 'neverthrow';
3
+ import { ParseError } from '../types/provider.js';
4
+ import { LanguageRegistry } from './language-registry.js';
5
+ /**
6
+ * Extract a human-readable name from a tree-sitter AST node.
7
+ *
8
+ * Tries the following strategies in order:
9
+ * 1. `childForFieldName('name')` — works for most declarations
10
+ * 2. `childForFieldName('declaration')` then its 'name' child — for export wrappers
11
+ * 3. `childForFieldName('declarator')` then its 'name' child — for C/C++ style declarations
12
+ *
13
+ * Returns undefined if no name can be extracted.
14
+ */
15
+ function extractNodeName(node) {
16
+ // Strategy 1: direct 'name' field
17
+ const nameNode = node.childForFieldName('name');
18
+ if (nameNode) {
19
+ return nameNode.text;
20
+ }
21
+ // Strategy 2: 'declaration' field with a 'name' sub-field
22
+ const declarationNode = node.childForFieldName('declaration');
23
+ if (declarationNode) {
24
+ const declName = declarationNode.childForFieldName('name');
25
+ if (declName) {
26
+ return declName.text;
27
+ }
28
+ }
29
+ // Strategy 3: 'declarator' field with a 'name' sub-field
30
+ const declaratorNode = node.childForFieldName('declarator');
31
+ if (declaratorNode) {
32
+ const declrName = declaratorNode.childForFieldName('name');
33
+ if (declrName) {
34
+ return declrName.text;
35
+ }
36
+ // Some declarators (e.g. simple variable declarators) have the name directly as text
37
+ if (declaratorNode.type === 'identifier') {
38
+ return declaratorNode.text;
39
+ }
40
+ }
41
+ return undefined;
42
+ }
43
+ /**
44
+ * Walk the top-level children of a root AST node and extract declaration names.
45
+ *
46
+ * Only nodes whose type is in the provided `declarationTypes` set are considered.
47
+ */
48
+ function extractDeclarations(rootNode, declarationTypes) {
49
+ const declarations = [];
50
+ for (let i = 0; i < rootNode.childCount; i++) {
51
+ const child = rootNode.child(i);
52
+ if (!child)
53
+ continue;
54
+ if (!declarationTypes.has(child.type))
55
+ continue;
56
+ const name = extractNodeName(child);
57
+ if (name) {
58
+ declarations.push(name);
59
+ }
60
+ }
61
+ return declarations;
62
+ }
63
+ /**
64
+ * A Parser implementation that uses tree-sitter WASM bindings
65
+ * to parse source files and extract top-level declarations.
66
+ */
67
+ export class TreeSitterParser {
68
+ parser = null;
69
+ registry = null;
70
+ initialized = false;
71
+ /**
72
+ * Initialize the tree-sitter WASM runtime and create internal instances.
73
+ * Must be called before `parse()`.
74
+ */
75
+ async initialize() {
76
+ try {
77
+ await TSParser.init();
78
+ this.parser = new TSParser();
79
+ this.registry = new LanguageRegistry();
80
+ this.initialized = true;
81
+ return ok(undefined);
82
+ }
83
+ catch (error) {
84
+ const message = error instanceof Error ? error.message : String(error);
85
+ return err(new ParseError(`Failed to initialize tree-sitter: ${message}`));
86
+ }
87
+ }
88
+ /**
89
+ * Parse a source file and extract its top-level declarations.
90
+ *
91
+ * Detects the language from the file path, loads the corresponding WASM grammar,
92
+ * parses the content into an AST, and extracts declaration names.
93
+ */
94
+ async parse(filePath, content) {
95
+ if (!this.initialized || !this.parser || !this.registry) {
96
+ return err(new ParseError('TreeSitterParser not initialized. Call initialize() first.'));
97
+ }
98
+ const language = this.registry.detectLanguage(filePath);
99
+ if (!language) {
100
+ return err(new ParseError(`Unsupported file type: ${filePath}`));
101
+ }
102
+ try {
103
+ const tsLanguage = await this.registry.loadLanguage(language);
104
+ this.parser.setLanguage(tsLanguage);
105
+ const tree = this.parser.parse(content);
106
+ if (!tree) {
107
+ return err(new ParseError(`Failed to parse file: ${filePath}`));
108
+ }
109
+ const declarationTypes = this.registry.getDeclarationNodeTypes(language);
110
+ const declarations = extractDeclarations(tree.rootNode, declarationTypes);
111
+ tree.delete();
112
+ return ok({
113
+ filePath,
114
+ language,
115
+ content,
116
+ declarations,
117
+ });
118
+ }
119
+ catch (error) {
120
+ const message = error instanceof Error
121
+ ? (error.message || error.constructor.name)
122
+ : String(error);
123
+ return err(new ParseError(`Error parsing ${filePath}: ${message}`));
124
+ }
125
+ }
126
+ /**
127
+ * Get the list of all file extensions / languages this parser supports.
128
+ */
129
+ supportedLanguages() {
130
+ if (!this.registry) {
131
+ return [];
132
+ }
133
+ return this.registry.supportedLanguages();
134
+ }
135
+ /**
136
+ * Clean up parser resources.
137
+ */
138
+ dispose() {
139
+ if (this.parser) {
140
+ this.parser.delete();
141
+ this.parser = null;
142
+ }
143
+ this.registry = null;
144
+ this.initialized = false;
145
+ }
146
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tree-sitter-parser.js","sourceRoot":"","sources":["../../src/parser/tree-sitter-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import type { SearchResult } from '../types/index.js';
2
+ import type { GraphNode, GraphEdge } from '../graph/index.js';
3
+ /** Read-only graph interface for dependency inversion. */
4
+ export interface ReadonlyGraph {
5
+ getNode(id: string): GraphNode | undefined;
6
+ getEdges(nodeId: string): GraphEdge[];
7
+ getIncomingEdges(nodeId: string): GraphEdge[];
8
+ }
9
+ export type RelationshipType = 'imports' | 'imported_by' | 'test_for' | 'interface_of' | 'sibling' | 'backlog';
10
+ export interface RelatedChunk {
11
+ chunk: SearchResult;
12
+ relationship: RelationshipType;
13
+ distance: number;
14
+ }
15
+ export interface GraphExcerpt {
16
+ nodes: string[];
17
+ edges: Array<{
18
+ from: string;
19
+ to: string;
20
+ type: string;
21
+ }>;
22
+ }
23
+ export interface ExpandedContext {
24
+ primaryResults: SearchResult[];
25
+ relatedChunks: RelatedChunk[];
26
+ graphExcerpt: GraphExcerpt;
27
+ }
28
+ export declare class ContextExpander {
29
+ private readonly graph;
30
+ private readonly chunkLookup;
31
+ constructor(dependencyGraph: ReadonlyGraph, chunkLookup: (chunkId: string) => SearchResult | undefined);
32
+ /**
33
+ * Expand search results with graph-based context.
34
+ * For each result, walks the dependency graph to find related chunks
35
+ * and classifies their relationships.
36
+ */
37
+ expand(results: SearchResult[], maxRelated?: number): ExpandedContext;
38
+ /**
39
+ * Classify the relationship between two nodes based on graph edges and naming conventions.
40
+ */
41
+ private classifyRelationship;
42
+ /**
43
+ * Single-pass BFS from source, returning a Map of nodeId → distance
44
+ * for all nodes reachable within 2 hops (excludes the source itself).
45
+ */
46
+ private computeDistances;
47
+ /**
48
+ * Collect graph edges from a node and its related nodes for the excerpt.
49
+ */
50
+ private collectEdges;
51
+ }
@@ -0,0 +1,218 @@
1
+ const DEFAULT_MAX_RELATED = 10;
2
+ export class ContextExpander {
3
+ graph;
4
+ chunkLookup;
5
+ constructor(dependencyGraph, chunkLookup) {
6
+ this.graph = dependencyGraph;
7
+ this.chunkLookup = chunkLookup;
8
+ }
9
+ /**
10
+ * Expand search results with graph-based context.
11
+ * For each result, walks the dependency graph to find related chunks
12
+ * and classifies their relationships.
13
+ */
14
+ expand(results, maxRelated = DEFAULT_MAX_RELATED) {
15
+ const relatedMap = new Map();
16
+ const graphNodes = new Set();
17
+ const graphEdges = [];
18
+ const primaryIds = new Set(results.map((r) => r.chunkId));
19
+ for (const result of results) {
20
+ const nodeId = result.chunkId;
21
+ graphNodes.add(nodeId);
22
+ // Single BFS pass: get related nodes and their distances in one traversal
23
+ const distanceMap = this.computeDistances(nodeId);
24
+ const relatedNodeIds = new Set(distanceMap.keys());
25
+ for (const relatedId of relatedNodeIds) {
26
+ graphNodes.add(relatedId);
27
+ // Don't add primary results as related chunks
28
+ if (primaryIds.has(relatedId))
29
+ continue;
30
+ // Don't add duplicates — keep the one with shortest distance
31
+ if (relatedMap.has(relatedId))
32
+ continue;
33
+ const relatedResult = this.chunkLookup(relatedId);
34
+ if (!relatedResult)
35
+ continue;
36
+ const relationship = this.classifyRelationship(nodeId, relatedId);
37
+ const distance = distanceMap.get(relatedId) ?? 3;
38
+ relatedMap.set(relatedId, {
39
+ chunk: relatedResult,
40
+ relationship,
41
+ distance,
42
+ });
43
+ }
44
+ // Collect edges for graph excerpt
45
+ this.collectEdges(nodeId, relatedNodeIds, graphEdges);
46
+ }
47
+ // Sort related chunks by distance (closest first), then limit
48
+ const relatedChunks = [...relatedMap.values()]
49
+ .sort((a, b) => a.distance - b.distance)
50
+ .slice(0, maxRelated);
51
+ return {
52
+ primaryResults: results,
53
+ relatedChunks,
54
+ graphExcerpt: {
55
+ nodes: [...graphNodes],
56
+ edges: deduplicateEdges(graphEdges),
57
+ },
58
+ };
59
+ }
60
+ /**
61
+ * Classify the relationship between two nodes based on graph edges and naming conventions.
62
+ */
63
+ classifyRelationship(sourceId, relatedId) {
64
+ const sourceNode = this.graph.getNode(sourceId);
65
+ const relatedNode = this.graph.getNode(relatedId);
66
+ // Check if either node is a backlog item
67
+ if (sourceNode?.type === 'backlog' || relatedNode?.type === 'backlog') {
68
+ return 'backlog';
69
+ }
70
+ // Check if the related file is a test file for the source
71
+ if (relatedNode?.filePath && isTestFileFor(relatedNode.filePath, sourceNode?.filePath)) {
72
+ return 'test_for';
73
+ }
74
+ if (sourceNode?.filePath && isTestFileFor(sourceNode.filePath, relatedNode?.filePath)) {
75
+ return 'test_for';
76
+ }
77
+ // Check direct edges for imports / imported_by
78
+ const outgoingEdges = this.graph.getEdges(sourceId);
79
+ for (const edge of outgoingEdges) {
80
+ if (edge.target === relatedId) {
81
+ if (edge.type === 'implements') {
82
+ return 'interface_of';
83
+ }
84
+ return 'imports';
85
+ }
86
+ }
87
+ const incomingEdges = this.graph.getIncomingEdges(sourceId);
88
+ for (const edge of incomingEdges) {
89
+ if (edge.source === relatedId) {
90
+ if (edge.type === 'implements') {
91
+ return 'interface_of';
92
+ }
93
+ return 'imported_by';
94
+ }
95
+ }
96
+ // Check if they share the same directory (siblings)
97
+ if (sourceNode?.filePath &&
98
+ relatedNode?.filePath &&
99
+ sameDirectory(sourceNode.filePath, relatedNode.filePath)) {
100
+ return 'sibling';
101
+ }
102
+ // Default: treat as imports if connected at all
103
+ return 'imports';
104
+ }
105
+ /**
106
+ * Single-pass BFS from source, returning a Map of nodeId → distance
107
+ * for all nodes reachable within 2 hops (excludes the source itself).
108
+ */
109
+ computeDistances(sourceId) {
110
+ const distances = new Map();
111
+ const visited = new Set();
112
+ const queue = [
113
+ { id: sourceId, depth: 0 },
114
+ ];
115
+ while (queue.length > 0) {
116
+ const current = queue.shift();
117
+ if (visited.has(current.id))
118
+ continue;
119
+ visited.add(current.id);
120
+ if (current.id !== sourceId) {
121
+ distances.set(current.id, current.depth);
122
+ }
123
+ if (current.depth < 2) {
124
+ const neighbors = [
125
+ ...this.graph.getEdges(current.id).map((e) => e.target),
126
+ ...this.graph.getIncomingEdges(current.id).map((e) => e.source),
127
+ ];
128
+ for (const neighbor of neighbors) {
129
+ if (!visited.has(neighbor)) {
130
+ queue.push({ id: neighbor, depth: current.depth + 1 });
131
+ }
132
+ }
133
+ }
134
+ }
135
+ return distances;
136
+ }
137
+ /**
138
+ * Collect graph edges from a node and its related nodes for the excerpt.
139
+ */
140
+ collectEdges(nodeId, relatedNodeIds, graphEdges) {
141
+ const relevantIds = new Set([nodeId, ...relatedNodeIds]);
142
+ // Add outgoing edges from the node
143
+ for (const edge of this.graph.getEdges(nodeId)) {
144
+ if (relevantIds.has(edge.target)) {
145
+ graphEdges.push({
146
+ from: edge.source,
147
+ to: edge.target,
148
+ type: edge.type,
149
+ });
150
+ }
151
+ }
152
+ // Add incoming edges to the node
153
+ for (const edge of this.graph.getIncomingEdges(nodeId)) {
154
+ if (relevantIds.has(edge.source)) {
155
+ graphEdges.push({
156
+ from: edge.source,
157
+ to: edge.target,
158
+ type: edge.type,
159
+ });
160
+ }
161
+ }
162
+ // Add edges between related nodes
163
+ for (const relatedId of relatedNodeIds) {
164
+ for (const edge of this.graph.getEdges(relatedId)) {
165
+ if (relevantIds.has(edge.target)) {
166
+ graphEdges.push({
167
+ from: edge.source,
168
+ to: edge.target,
169
+ type: edge.type,
170
+ });
171
+ }
172
+ }
173
+ }
174
+ }
175
+ }
176
+ /** Check if `testPath` is a test file for `sourcePath`. */
177
+ function isTestFileFor(testPath, sourcePath) {
178
+ if (!sourcePath)
179
+ return false;
180
+ // Check patterns: foo.test.ts, foo.spec.ts, __tests__/foo.ts
181
+ const testPatterns = ['.test.', '.spec.', '/__tests__/'];
182
+ const isTestFile = testPatterns.some((p) => testPath.includes(p));
183
+ if (!isTestFile)
184
+ return false;
185
+ // Check if the base file names match
186
+ const sourceBase = getBaseName(sourcePath);
187
+ const testBase = getBaseName(testPath)
188
+ .replace(/\.test$/, '')
189
+ .replace(/\.spec$/, '');
190
+ return sourceBase === testBase;
191
+ }
192
+ /** Extract base file name without extension. */
193
+ function getBaseName(filePath) {
194
+ const parts = filePath.split('/');
195
+ const fileName = parts[parts.length - 1] ?? '';
196
+ // Remove all extensions
197
+ const dotIndex = fileName.indexOf('.');
198
+ return dotIndex === -1 ? fileName : fileName.substring(0, dotIndex);
199
+ }
200
+ /** Check if two file paths share the same directory. */
201
+ function sameDirectory(pathA, pathB) {
202
+ const dirA = pathA.substring(0, pathA.lastIndexOf('/'));
203
+ const dirB = pathB.substring(0, pathB.lastIndexOf('/'));
204
+ return dirA === dirB && dirA.length > 0;
205
+ }
206
+ /** Deduplicate graph edges by from+to+type. */
207
+ function deduplicateEdges(edges) {
208
+ const seen = new Set();
209
+ const result = [];
210
+ for (const edge of edges) {
211
+ const key = `${edge.from}|${edge.to}|${edge.type}`;
212
+ if (!seen.has(key)) {
213
+ seen.add(key);
214
+ result.push(edge);
215
+ }
216
+ }
217
+ return result;
218
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-expander.js","sourceRoot":"","sources":["../../src/retrieval/context-expander.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};