@opencodehub/ingestion 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 (563) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +69 -0
  3. package/dist/extract/index.d.ts +8 -0
  4. package/dist/extract/index.d.ts.map +1 -0
  5. package/dist/extract/index.js +6 -0
  6. package/dist/extract/index.js.map +1 -0
  7. package/dist/extract/orm-detector.d.ts +19 -0
  8. package/dist/extract/orm-detector.d.ts.map +1 -0
  9. package/dist/extract/orm-detector.js +209 -0
  10. package/dist/extract/orm-detector.js.map +1 -0
  11. package/dist/extract/property-access.d.ts +76 -0
  12. package/dist/extract/property-access.d.ts.map +1 -0
  13. package/dist/extract/property-access.js +260 -0
  14. package/dist/extract/property-access.js.map +1 -0
  15. package/dist/extract/receiver-resolver.d.ts +86 -0
  16. package/dist/extract/receiver-resolver.d.ts.map +1 -0
  17. package/dist/extract/receiver-resolver.js +77 -0
  18. package/dist/extract/receiver-resolver.js.map +1 -0
  19. package/dist/extract/route-detector-java.d.ts +29 -0
  20. package/dist/extract/route-detector-java.d.ts.map +1 -0
  21. package/dist/extract/route-detector-java.js +190 -0
  22. package/dist/extract/route-detector-java.js.map +1 -0
  23. package/dist/extract/route-detector-nestjs.d.ts +30 -0
  24. package/dist/extract/route-detector-nestjs.d.ts.map +1 -0
  25. package/dist/extract/route-detector-nestjs.js +134 -0
  26. package/dist/extract/route-detector-nestjs.js.map +1 -0
  27. package/dist/extract/route-detector-python.d.ts +28 -0
  28. package/dist/extract/route-detector-python.d.ts.map +1 -0
  29. package/dist/extract/route-detector-python.js +100 -0
  30. package/dist/extract/route-detector-python.js.map +1 -0
  31. package/dist/extract/route-detector-rails.d.ts +28 -0
  32. package/dist/extract/route-detector-rails.d.ts.map +1 -0
  33. package/dist/extract/route-detector-rails.js +162 -0
  34. package/dist/extract/route-detector-rails.js.map +1 -0
  35. package/dist/extract/route-detector.d.ts +45 -0
  36. package/dist/extract/route-detector.d.ts.map +1 -0
  37. package/dist/extract/route-detector.js +467 -0
  38. package/dist/extract/route-detector.js.map +1 -0
  39. package/dist/extract/tool-detector.d.ts +26 -0
  40. package/dist/extract/tool-detector.d.ts.map +1 -0
  41. package/dist/extract/tool-detector.js +364 -0
  42. package/dist/extract/tool-detector.js.map +1 -0
  43. package/dist/extract/types.d.ts +89 -0
  44. package/dist/extract/types.d.ts.map +1 -0
  45. package/dist/extract/types.js +11 -0
  46. package/dist/extract/types.js.map +1 -0
  47. package/dist/index.d.ts +10 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +10 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/parse/cobol-regex.d.ts +85 -0
  52. package/dist/parse/cobol-regex.d.ts.map +1 -0
  53. package/dist/parse/cobol-regex.js +355 -0
  54. package/dist/parse/cobol-regex.js.map +1 -0
  55. package/dist/parse/grammar-registry.d.ts +115 -0
  56. package/dist/parse/grammar-registry.d.ts.map +1 -0
  57. package/dist/parse/grammar-registry.js +278 -0
  58. package/dist/parse/grammar-registry.js.map +1 -0
  59. package/dist/parse/index.d.ts +14 -0
  60. package/dist/parse/index.d.ts.map +1 -0
  61. package/dist/parse/index.js +10 -0
  62. package/dist/parse/index.js.map +1 -0
  63. package/dist/parse/language-detector.d.ts +17 -0
  64. package/dist/parse/language-detector.d.ts.map +1 -0
  65. package/dist/parse/language-detector.js +104 -0
  66. package/dist/parse/language-detector.js.map +1 -0
  67. package/dist/parse/parse-worker.d.ts +24 -0
  68. package/dist/parse/parse-worker.d.ts.map +1 -0
  69. package/dist/parse/parse-worker.js +230 -0
  70. package/dist/parse/parse-worker.js.map +1 -0
  71. package/dist/parse/types.d.ts +49 -0
  72. package/dist/parse/types.d.ts.map +1 -0
  73. package/dist/parse/types.js +11 -0
  74. package/dist/parse/types.js.map +1 -0
  75. package/dist/parse/unified-queries.d.ts +37 -0
  76. package/dist/parse/unified-queries.d.ts.map +1 -0
  77. package/dist/parse/unified-queries.js +623 -0
  78. package/dist/parse/unified-queries.js.map +1 -0
  79. package/dist/parse/wasm-fallback.d.ts +88 -0
  80. package/dist/parse/wasm-fallback.d.ts.map +1 -0
  81. package/dist/parse/wasm-fallback.js +258 -0
  82. package/dist/parse/wasm-fallback.js.map +1 -0
  83. package/dist/parse/worker-pool.d.ts +48 -0
  84. package/dist/parse/worker-pool.d.ts.map +1 -0
  85. package/dist/parse/worker-pool.js +97 -0
  86. package/dist/parse/worker-pool.js.map +1 -0
  87. package/dist/pipeline/dep-parsers/go.d.ts +25 -0
  88. package/dist/pipeline/dep-parsers/go.d.ts.map +1 -0
  89. package/dist/pipeline/dep-parsers/go.js +146 -0
  90. package/dist/pipeline/dep-parsers/go.js.map +1 -0
  91. package/dist/pipeline/dep-parsers/index.d.ts +17 -0
  92. package/dist/pipeline/dep-parsers/index.d.ts.map +1 -0
  93. package/dist/pipeline/dep-parsers/index.js +16 -0
  94. package/dist/pipeline/dep-parsers/index.js.map +1 -0
  95. package/dist/pipeline/dep-parsers/maven.d.ts +24 -0
  96. package/dist/pipeline/dep-parsers/maven.d.ts.map +1 -0
  97. package/dist/pipeline/dep-parsers/maven.js +131 -0
  98. package/dist/pipeline/dep-parsers/maven.js.map +1 -0
  99. package/dist/pipeline/dep-parsers/npm.d.ts +30 -0
  100. package/dist/pipeline/dep-parsers/npm.d.ts.map +1 -0
  101. package/dist/pipeline/dep-parsers/npm.js +309 -0
  102. package/dist/pipeline/dep-parsers/npm.js.map +1 -0
  103. package/dist/pipeline/dep-parsers/nuget.d.ts +24 -0
  104. package/dist/pipeline/dep-parsers/nuget.d.ts.map +1 -0
  105. package/dist/pipeline/dep-parsers/nuget.js +178 -0
  106. package/dist/pipeline/dep-parsers/nuget.js.map +1 -0
  107. package/dist/pipeline/dep-parsers/python.d.ts +21 -0
  108. package/dist/pipeline/dep-parsers/python.d.ts.map +1 -0
  109. package/dist/pipeline/dep-parsers/python.js +369 -0
  110. package/dist/pipeline/dep-parsers/python.js.map +1 -0
  111. package/dist/pipeline/dep-parsers/rust.d.ts +18 -0
  112. package/dist/pipeline/dep-parsers/rust.d.ts.map +1 -0
  113. package/dist/pipeline/dep-parsers/rust.js +134 -0
  114. package/dist/pipeline/dep-parsers/rust.js.map +1 -0
  115. package/dist/pipeline/dep-parsers/spdx-normalize.d.ts +15 -0
  116. package/dist/pipeline/dep-parsers/spdx-normalize.d.ts.map +1 -0
  117. package/dist/pipeline/dep-parsers/spdx-normalize.js +31 -0
  118. package/dist/pipeline/dep-parsers/spdx-normalize.js.map +1 -0
  119. package/dist/pipeline/dep-parsers/types.d.ts +63 -0
  120. package/dist/pipeline/dep-parsers/types.d.ts.map +1 -0
  121. package/dist/pipeline/dep-parsers/types.js +56 -0
  122. package/dist/pipeline/dep-parsers/types.js.map +1 -0
  123. package/dist/pipeline/gitignore-stack.d.ts +44 -0
  124. package/dist/pipeline/gitignore-stack.d.ts.map +1 -0
  125. package/dist/pipeline/gitignore-stack.js +69 -0
  126. package/dist/pipeline/gitignore-stack.js.map +1 -0
  127. package/dist/pipeline/gitignore.d.ts +67 -0
  128. package/dist/pipeline/gitignore.d.ts.map +1 -0
  129. package/dist/pipeline/gitignore.js +210 -0
  130. package/dist/pipeline/gitignore.js.map +1 -0
  131. package/dist/pipeline/index.d.ts +53 -0
  132. package/dist/pipeline/index.d.ts.map +1 -0
  133. package/dist/pipeline/index.js +29 -0
  134. package/dist/pipeline/index.js.map +1 -0
  135. package/dist/pipeline/orchestrator.d.ts +105 -0
  136. package/dist/pipeline/orchestrator.d.ts.map +1 -0
  137. package/dist/pipeline/orchestrator.js +175 -0
  138. package/dist/pipeline/orchestrator.js.map +1 -0
  139. package/dist/pipeline/ownership-helpers/drift.d.ts +41 -0
  140. package/dist/pipeline/ownership-helpers/drift.d.ts.map +1 -0
  141. package/dist/pipeline/ownership-helpers/drift.js +122 -0
  142. package/dist/pipeline/ownership-helpers/drift.js.map +1 -0
  143. package/dist/pipeline/ownership-helpers/gini-community.d.ts +24 -0
  144. package/dist/pipeline/ownership-helpers/gini-community.d.ts.map +1 -0
  145. package/dist/pipeline/ownership-helpers/gini-community.js +32 -0
  146. package/dist/pipeline/ownership-helpers/gini-community.js.map +1 -0
  147. package/dist/pipeline/ownership-helpers/git-blame-batcher.d.ts +71 -0
  148. package/dist/pipeline/ownership-helpers/git-blame-batcher.d.ts.map +1 -0
  149. package/dist/pipeline/ownership-helpers/git-blame-batcher.js +178 -0
  150. package/dist/pipeline/ownership-helpers/git-blame-batcher.js.map +1 -0
  151. package/dist/pipeline/ownership-helpers/line-overlap.d.ts +35 -0
  152. package/dist/pipeline/ownership-helpers/line-overlap.d.ts.map +1 -0
  153. package/dist/pipeline/ownership-helpers/line-overlap.js +62 -0
  154. package/dist/pipeline/ownership-helpers/line-overlap.js.map +1 -0
  155. package/dist/pipeline/ownership-helpers/orphan.d.ts +73 -0
  156. package/dist/pipeline/ownership-helpers/orphan.d.ts.map +1 -0
  157. package/dist/pipeline/ownership-helpers/orphan.js +117 -0
  158. package/dist/pipeline/ownership-helpers/orphan.js.map +1 -0
  159. package/dist/pipeline/phases/accesses.d.ts +44 -0
  160. package/dist/pipeline/phases/accesses.d.ts.map +1 -0
  161. package/dist/pipeline/phases/accesses.js +194 -0
  162. package/dist/pipeline/phases/accesses.js.map +1 -0
  163. package/dist/pipeline/phases/annotate.d.ts +28 -0
  164. package/dist/pipeline/phases/annotate.d.ts.map +1 -0
  165. package/dist/pipeline/phases/annotate.js +60 -0
  166. package/dist/pipeline/phases/annotate.js.map +1 -0
  167. package/dist/pipeline/phases/cochange.d.ts +42 -0
  168. package/dist/pipeline/phases/cochange.d.ts.map +1 -0
  169. package/dist/pipeline/phases/cochange.js +0 -0
  170. package/dist/pipeline/phases/cochange.js.map +1 -0
  171. package/dist/pipeline/phases/communities.d.ts +34 -0
  172. package/dist/pipeline/phases/communities.d.ts.map +1 -0
  173. package/dist/pipeline/phases/communities.js +412 -0
  174. package/dist/pipeline/phases/communities.js.map +1 -0
  175. package/dist/pipeline/phases/complexity.d.ts +50 -0
  176. package/dist/pipeline/phases/complexity.d.ts.map +1 -0
  177. package/dist/pipeline/phases/complexity.js +794 -0
  178. package/dist/pipeline/phases/complexity.js.map +1 -0
  179. package/dist/pipeline/phases/confidence-demote.d.ts +23 -0
  180. package/dist/pipeline/phases/confidence-demote.d.ts.map +1 -0
  181. package/dist/pipeline/phases/confidence-demote.js +113 -0
  182. package/dist/pipeline/phases/confidence-demote.js.map +1 -0
  183. package/dist/pipeline/phases/content-cache.d.ts +166 -0
  184. package/dist/pipeline/phases/content-cache.d.ts.map +1 -0
  185. package/dist/pipeline/phases/content-cache.js +323 -0
  186. package/dist/pipeline/phases/content-cache.js.map +1 -0
  187. package/dist/pipeline/phases/coverage-parsers/cobertura.d.ts +25 -0
  188. package/dist/pipeline/phases/coverage-parsers/cobertura.d.ts.map +1 -0
  189. package/dist/pipeline/phases/coverage-parsers/cobertura.js +139 -0
  190. package/dist/pipeline/phases/coverage-parsers/cobertura.js.map +1 -0
  191. package/dist/pipeline/phases/coverage-parsers/coverage-py.d.ts +25 -0
  192. package/dist/pipeline/phases/coverage-parsers/coverage-py.d.ts.map +1 -0
  193. package/dist/pipeline/phases/coverage-parsers/coverage-py.js +51 -0
  194. package/dist/pipeline/phases/coverage-parsers/coverage-py.js.map +1 -0
  195. package/dist/pipeline/phases/coverage-parsers/jacoco.d.ts +32 -0
  196. package/dist/pipeline/phases/coverage-parsers/jacoco.d.ts.map +1 -0
  197. package/dist/pipeline/phases/coverage-parsers/jacoco.js +98 -0
  198. package/dist/pipeline/phases/coverage-parsers/jacoco.js.map +1 -0
  199. package/dist/pipeline/phases/coverage-parsers/lcov.d.ts +21 -0
  200. package/dist/pipeline/phases/coverage-parsers/lcov.d.ts.map +1 -0
  201. package/dist/pipeline/phases/coverage-parsers/lcov.js +104 -0
  202. package/dist/pipeline/phases/coverage-parsers/lcov.js.map +1 -0
  203. package/dist/pipeline/phases/coverage-parsers/types.d.ts +27 -0
  204. package/dist/pipeline/phases/coverage-parsers/types.d.ts.map +1 -0
  205. package/dist/pipeline/phases/coverage-parsers/types.js +39 -0
  206. package/dist/pipeline/phases/coverage-parsers/types.js.map +1 -0
  207. package/dist/pipeline/phases/coverage.d.ts +39 -0
  208. package/dist/pipeline/phases/coverage.d.ts.map +1 -0
  209. package/dist/pipeline/phases/coverage.js +154 -0
  210. package/dist/pipeline/phases/coverage.js.map +1 -0
  211. package/dist/pipeline/phases/cross-file.d.ts +40 -0
  212. package/dist/pipeline/phases/cross-file.d.ts.map +1 -0
  213. package/dist/pipeline/phases/cross-file.js +411 -0
  214. package/dist/pipeline/phases/cross-file.js.map +1 -0
  215. package/dist/pipeline/phases/dead-code.d.ts +28 -0
  216. package/dist/pipeline/phases/dead-code.d.ts.map +1 -0
  217. package/dist/pipeline/phases/dead-code.js +157 -0
  218. package/dist/pipeline/phases/dead-code.js.map +1 -0
  219. package/dist/pipeline/phases/default-set.d.ts +24 -0
  220. package/dist/pipeline/phases/default-set.d.ts.map +1 -0
  221. package/dist/pipeline/phases/default-set.js +133 -0
  222. package/dist/pipeline/phases/default-set.js.map +1 -0
  223. package/dist/pipeline/phases/dependencies.d.ts +59 -0
  224. package/dist/pipeline/phases/dependencies.d.ts.map +1 -0
  225. package/dist/pipeline/phases/dependencies.js +281 -0
  226. package/dist/pipeline/phases/dependencies.js.map +1 -0
  227. package/dist/pipeline/phases/embedder-pool.d.ts +31 -0
  228. package/dist/pipeline/phases/embedder-pool.d.ts.map +1 -0
  229. package/dist/pipeline/phases/embedder-pool.js +79 -0
  230. package/dist/pipeline/phases/embedder-pool.js.map +1 -0
  231. package/dist/pipeline/phases/embedder-worker.d.ts +28 -0
  232. package/dist/pipeline/phases/embedder-worker.d.ts.map +1 -0
  233. package/dist/pipeline/phases/embedder-worker.js +43 -0
  234. package/dist/pipeline/phases/embedder-worker.js.map +1 -0
  235. package/dist/pipeline/phases/embeddings.d.ts +117 -0
  236. package/dist/pipeline/phases/embeddings.d.ts.map +1 -0
  237. package/dist/pipeline/phases/embeddings.js +697 -0
  238. package/dist/pipeline/phases/embeddings.js.map +1 -0
  239. package/dist/pipeline/phases/fetches.d.ts +47 -0
  240. package/dist/pipeline/phases/fetches.d.ts.map +1 -0
  241. package/dist/pipeline/phases/fetches.js +207 -0
  242. package/dist/pipeline/phases/fetches.js.map +1 -0
  243. package/dist/pipeline/phases/incremental-helper.d.ts +96 -0
  244. package/dist/pipeline/phases/incremental-helper.d.ts.map +1 -0
  245. package/dist/pipeline/phases/incremental-helper.js +125 -0
  246. package/dist/pipeline/phases/incremental-helper.js.map +1 -0
  247. package/dist/pipeline/phases/incremental-scope.d.ts +67 -0
  248. package/dist/pipeline/phases/incremental-scope.d.ts.map +1 -0
  249. package/dist/pipeline/phases/incremental-scope.js +225 -0
  250. package/dist/pipeline/phases/incremental-scope.js.map +1 -0
  251. package/dist/pipeline/phases/markdown.d.ts +29 -0
  252. package/dist/pipeline/phases/markdown.d.ts.map +1 -0
  253. package/dist/pipeline/phases/markdown.js +298 -0
  254. package/dist/pipeline/phases/markdown.js.map +1 -0
  255. package/dist/pipeline/phases/mro.d.ts +24 -0
  256. package/dist/pipeline/phases/mro.d.ts.map +1 -0
  257. package/dist/pipeline/phases/mro.js +303 -0
  258. package/dist/pipeline/phases/mro.js.map +1 -0
  259. package/dist/pipeline/phases/openapi.d.ts +52 -0
  260. package/dist/pipeline/phases/openapi.d.ts.map +1 -0
  261. package/dist/pipeline/phases/openapi.js +285 -0
  262. package/dist/pipeline/phases/openapi.js.map +1 -0
  263. package/dist/pipeline/phases/orm.d.ts +26 -0
  264. package/dist/pipeline/phases/orm.d.ts.map +1 -0
  265. package/dist/pipeline/phases/orm.js +183 -0
  266. package/dist/pipeline/phases/orm.js.map +1 -0
  267. package/dist/pipeline/phases/ownership.d.ts +88 -0
  268. package/dist/pipeline/phases/ownership.d.ts.map +1 -0
  269. package/dist/pipeline/phases/ownership.js +479 -0
  270. package/dist/pipeline/phases/ownership.js.map +1 -0
  271. package/dist/pipeline/phases/parse.d.ts +63 -0
  272. package/dist/pipeline/phases/parse.d.ts.map +1 -0
  273. package/dist/pipeline/phases/parse.js +994 -0
  274. package/dist/pipeline/phases/parse.js.map +1 -0
  275. package/dist/pipeline/phases/processes.d.ts +47 -0
  276. package/dist/pipeline/phases/processes.d.ts.map +1 -0
  277. package/dist/pipeline/phases/processes.js +620 -0
  278. package/dist/pipeline/phases/processes.js.map +1 -0
  279. package/dist/pipeline/phases/profile.d.ts +33 -0
  280. package/dist/pipeline/phases/profile.d.ts.map +1 -0
  281. package/dist/pipeline/phases/profile.js +91 -0
  282. package/dist/pipeline/phases/profile.js.map +1 -0
  283. package/dist/pipeline/phases/repo-node.d.ts +112 -0
  284. package/dist/pipeline/phases/repo-node.d.ts.map +1 -0
  285. package/dist/pipeline/phases/repo-node.js +272 -0
  286. package/dist/pipeline/phases/repo-node.js.map +1 -0
  287. package/dist/pipeline/phases/risk-snapshot.d.ts +34 -0
  288. package/dist/pipeline/phases/risk-snapshot.d.ts.map +1 -0
  289. package/dist/pipeline/phases/risk-snapshot.js +63 -0
  290. package/dist/pipeline/phases/risk-snapshot.js.map +1 -0
  291. package/dist/pipeline/phases/routes.d.ts +31 -0
  292. package/dist/pipeline/phases/routes.d.ts.map +1 -0
  293. package/dist/pipeline/phases/routes.js +262 -0
  294. package/dist/pipeline/phases/routes.js.map +1 -0
  295. package/dist/pipeline/phases/sbom.d.ts +45 -0
  296. package/dist/pipeline/phases/sbom.d.ts.map +1 -0
  297. package/dist/pipeline/phases/sbom.js +289 -0
  298. package/dist/pipeline/phases/sbom.js.map +1 -0
  299. package/dist/pipeline/phases/scan.d.ts +54 -0
  300. package/dist/pipeline/phases/scan.d.ts.map +1 -0
  301. package/dist/pipeline/phases/scan.js +340 -0
  302. package/dist/pipeline/phases/scan.js.map +1 -0
  303. package/dist/pipeline/phases/scip-index.d.ts +54 -0
  304. package/dist/pipeline/phases/scip-index.d.ts.map +1 -0
  305. package/dist/pipeline/phases/scip-index.js +469 -0
  306. package/dist/pipeline/phases/scip-index.js.map +1 -0
  307. package/dist/pipeline/phases/structure.d.ts +21 -0
  308. package/dist/pipeline/phases/structure.d.ts.map +1 -0
  309. package/dist/pipeline/phases/structure.js +115 -0
  310. package/dist/pipeline/phases/structure.js.map +1 -0
  311. package/dist/pipeline/phases/summarize.d.ts +126 -0
  312. package/dist/pipeline/phases/summarize.d.ts.map +1 -0
  313. package/dist/pipeline/phases/summarize.js +401 -0
  314. package/dist/pipeline/phases/summarize.js.map +1 -0
  315. package/dist/pipeline/phases/temporal-helpers/branch-divergence.d.ts +42 -0
  316. package/dist/pipeline/phases/temporal-helpers/branch-divergence.d.ts.map +1 -0
  317. package/dist/pipeline/phases/temporal-helpers/branch-divergence.js +96 -0
  318. package/dist/pipeline/phases/temporal-helpers/branch-divergence.js.map +1 -0
  319. package/dist/pipeline/phases/temporal-helpers/churn-decay.d.ts +22 -0
  320. package/dist/pipeline/phases/temporal-helpers/churn-decay.d.ts.map +1 -0
  321. package/dist/pipeline/phases/temporal-helpers/churn-decay.js +32 -0
  322. package/dist/pipeline/phases/temporal-helpers/churn-decay.js.map +1 -0
  323. package/dist/pipeline/phases/temporal-helpers/conventional-commits.d.ts +21 -0
  324. package/dist/pipeline/phases/temporal-helpers/conventional-commits.d.ts.map +1 -0
  325. package/dist/pipeline/phases/temporal-helpers/conventional-commits.js +37 -0
  326. package/dist/pipeline/phases/temporal-helpers/conventional-commits.js.map +1 -0
  327. package/dist/pipeline/phases/temporal-helpers/gini.d.ts +32 -0
  328. package/dist/pipeline/phases/temporal-helpers/gini.d.ts.map +1 -0
  329. package/dist/pipeline/phases/temporal-helpers/gini.js +78 -0
  330. package/dist/pipeline/phases/temporal-helpers/gini.js.map +1 -0
  331. package/dist/pipeline/phases/temporal-helpers/revert-detect.d.ts +14 -0
  332. package/dist/pipeline/phases/temporal-helpers/revert-detect.d.ts.map +1 -0
  333. package/dist/pipeline/phases/temporal-helpers/revert-detect.js +25 -0
  334. package/dist/pipeline/phases/temporal-helpers/revert-detect.js.map +1 -0
  335. package/dist/pipeline/phases/temporal-helpers/test-pair.d.ts +18 -0
  336. package/dist/pipeline/phases/temporal-helpers/test-pair.d.ts.map +1 -0
  337. package/dist/pipeline/phases/temporal-helpers/test-pair.js +119 -0
  338. package/dist/pipeline/phases/temporal-helpers/test-pair.js.map +1 -0
  339. package/dist/pipeline/phases/temporal.d.ts +65 -0
  340. package/dist/pipeline/phases/temporal.d.ts.map +1 -0
  341. package/dist/pipeline/phases/temporal.js +621 -0
  342. package/dist/pipeline/phases/temporal.js.map +1 -0
  343. package/dist/pipeline/phases/tools.d.ts +21 -0
  344. package/dist/pipeline/phases/tools.d.ts.map +1 -0
  345. package/dist/pipeline/phases/tools.js +118 -0
  346. package/dist/pipeline/phases/tools.js.map +1 -0
  347. package/dist/pipeline/profile-detectors/api-contracts.d.ts +18 -0
  348. package/dist/pipeline/profile-detectors/api-contracts.d.ts.map +1 -0
  349. package/dist/pipeline/profile-detectors/api-contracts.js +78 -0
  350. package/dist/pipeline/profile-detectors/api-contracts.js.map +1 -0
  351. package/dist/pipeline/profile-detectors/framework-detector.d.ts +11 -0
  352. package/dist/pipeline/profile-detectors/framework-detector.d.ts.map +1 -0
  353. package/dist/pipeline/profile-detectors/framework-detector.js +11 -0
  354. package/dist/pipeline/profile-detectors/framework-detector.js.map +1 -0
  355. package/dist/pipeline/profile-detectors/frameworks-catalog.d.ts +7 -0
  356. package/dist/pipeline/profile-detectors/frameworks-catalog.d.ts.map +1 -0
  357. package/dist/pipeline/profile-detectors/frameworks-catalog.js +7 -0
  358. package/dist/pipeline/profile-detectors/frameworks-catalog.js.map +1 -0
  359. package/dist/pipeline/profile-detectors/frameworks.d.ts +7 -0
  360. package/dist/pipeline/profile-detectors/frameworks.d.ts.map +1 -0
  361. package/dist/pipeline/profile-detectors/frameworks.js +7 -0
  362. package/dist/pipeline/profile-detectors/frameworks.js.map +1 -0
  363. package/dist/pipeline/profile-detectors/iac.d.ts +22 -0
  364. package/dist/pipeline/profile-detectors/iac.d.ts.map +1 -0
  365. package/dist/pipeline/profile-detectors/iac.js +97 -0
  366. package/dist/pipeline/profile-detectors/iac.js.map +1 -0
  367. package/dist/pipeline/profile-detectors/languages.d.ts +18 -0
  368. package/dist/pipeline/profile-detectors/languages.d.ts.map +1 -0
  369. package/dist/pipeline/profile-detectors/languages.js +60 -0
  370. package/dist/pipeline/profile-detectors/languages.js.map +1 -0
  371. package/dist/pipeline/profile-detectors/manifests.d.ts +7 -0
  372. package/dist/pipeline/profile-detectors/manifests.d.ts.map +1 -0
  373. package/dist/pipeline/profile-detectors/manifests.js +7 -0
  374. package/dist/pipeline/profile-detectors/manifests.js.map +1 -0
  375. package/dist/pipeline/profile-detectors/src-dirs.d.ts +17 -0
  376. package/dist/pipeline/profile-detectors/src-dirs.d.ts.map +1 -0
  377. package/dist/pipeline/profile-detectors/src-dirs.js +89 -0
  378. package/dist/pipeline/profile-detectors/src-dirs.js.map +1 -0
  379. package/dist/pipeline/profile-detectors/variant-detectors.d.ts +7 -0
  380. package/dist/pipeline/profile-detectors/variant-detectors.d.ts.map +1 -0
  381. package/dist/pipeline/profile-detectors/variant-detectors.js +7 -0
  382. package/dist/pipeline/profile-detectors/variant-detectors.js.map +1 -0
  383. package/dist/pipeline/runner.d.ts +54 -0
  384. package/dist/pipeline/runner.d.ts.map +1 -0
  385. package/dist/pipeline/runner.js +247 -0
  386. package/dist/pipeline/runner.js.map +1 -0
  387. package/dist/pipeline/types.d.ts +235 -0
  388. package/dist/pipeline/types.d.ts.map +1 -0
  389. package/dist/pipeline/types.js +15 -0
  390. package/dist/pipeline/types.js.map +1 -0
  391. package/dist/providers/c.d.ts +3 -0
  392. package/dist/providers/c.d.ts.map +1 -0
  393. package/dist/providers/c.js +162 -0
  394. package/dist/providers/c.js.map +1 -0
  395. package/dist/providers/cobol.d.ts +19 -0
  396. package/dist/providers/cobol.d.ts.map +1 -0
  397. package/dist/providers/cobol.js +44 -0
  398. package/dist/providers/cobol.js.map +1 -0
  399. package/dist/providers/cpp.d.ts +3 -0
  400. package/dist/providers/cpp.d.ts.map +1 -0
  401. package/dist/providers/cpp.js +200 -0
  402. package/dist/providers/cpp.js.map +1 -0
  403. package/dist/providers/csharp.d.ts +3 -0
  404. package/dist/providers/csharp.d.ts.map +1 -0
  405. package/dist/providers/csharp.js +292 -0
  406. package/dist/providers/csharp.js.map +1 -0
  407. package/dist/providers/dart.d.ts +3 -0
  408. package/dist/providers/dart.d.ts.map +1 -0
  409. package/dist/providers/dart.js +214 -0
  410. package/dist/providers/dart.js.map +1 -0
  411. package/dist/providers/definition-ids.d.ts +18 -0
  412. package/dist/providers/definition-ids.d.ts.map +1 -0
  413. package/dist/providers/definition-ids.js +23 -0
  414. package/dist/providers/definition-ids.js.map +1 -0
  415. package/dist/providers/extract-helpers.d.ts +60 -0
  416. package/dist/providers/extract-helpers.d.ts.map +1 -0
  417. package/dist/providers/extract-helpers.js +296 -0
  418. package/dist/providers/extract-helpers.js.map +1 -0
  419. package/dist/providers/extraction-types.d.ts +85 -0
  420. package/dist/providers/extraction-types.d.ts.map +1 -0
  421. package/dist/providers/extraction-types.js +13 -0
  422. package/dist/providers/extraction-types.js.map +1 -0
  423. package/dist/providers/go.d.ts +3 -0
  424. package/dist/providers/go.d.ts.map +1 -0
  425. package/dist/providers/go.js +359 -0
  426. package/dist/providers/go.js.map +1 -0
  427. package/dist/providers/http-detect.d.ts +44 -0
  428. package/dist/providers/http-detect.d.ts.map +1 -0
  429. package/dist/providers/http-detect.js +307 -0
  430. package/dist/providers/http-detect.js.map +1 -0
  431. package/dist/providers/index.d.ts +38 -0
  432. package/dist/providers/index.d.ts.map +1 -0
  433. package/dist/providers/index.js +33 -0
  434. package/dist/providers/index.js.map +1 -0
  435. package/dist/providers/java.d.ts +3 -0
  436. package/dist/providers/java.d.ts.map +1 -0
  437. package/dist/providers/java.js +259 -0
  438. package/dist/providers/java.js.map +1 -0
  439. package/dist/providers/javascript.d.ts +3 -0
  440. package/dist/providers/javascript.d.ts.map +1 -0
  441. package/dist/providers/javascript.js +139 -0
  442. package/dist/providers/javascript.js.map +1 -0
  443. package/dist/providers/kotlin.d.ts +3 -0
  444. package/dist/providers/kotlin.d.ts.map +1 -0
  445. package/dist/providers/kotlin.js +175 -0
  446. package/dist/providers/kotlin.js.map +1 -0
  447. package/dist/providers/php.d.ts +3 -0
  448. package/dist/providers/php.d.ts.map +1 -0
  449. package/dist/providers/php.js +218 -0
  450. package/dist/providers/php.js.map +1 -0
  451. package/dist/providers/python-accesses.d.ts +9 -0
  452. package/dist/providers/python-accesses.d.ts.map +1 -0
  453. package/dist/providers/python-accesses.js +22 -0
  454. package/dist/providers/python-accesses.js.map +1 -0
  455. package/dist/providers/python.d.ts +3 -0
  456. package/dist/providers/python.d.ts.map +1 -0
  457. package/dist/providers/python.js +323 -0
  458. package/dist/providers/python.js.map +1 -0
  459. package/dist/providers/registry.d.ts +4 -0
  460. package/dist/providers/registry.d.ts.map +1 -0
  461. package/dist/providers/registry.js +46 -0
  462. package/dist/providers/registry.js.map +1 -0
  463. package/dist/providers/resolution/c3.d.ts +6 -0
  464. package/dist/providers/resolution/c3.d.ts.map +1 -0
  465. package/dist/providers/resolution/c3.js +76 -0
  466. package/dist/providers/resolution/c3.js.map +1 -0
  467. package/dist/providers/resolution/context.d.ts +38 -0
  468. package/dist/providers/resolution/context.d.ts.map +1 -0
  469. package/dist/providers/resolution/context.js +45 -0
  470. package/dist/providers/resolution/context.js.map +1 -0
  471. package/dist/providers/resolution/first-wins.d.ts +3 -0
  472. package/dist/providers/resolution/first-wins.d.ts.map +1 -0
  473. package/dist/providers/resolution/first-wins.js +27 -0
  474. package/dist/providers/resolution/first-wins.js.map +1 -0
  475. package/dist/providers/resolution/mro.d.ts +16 -0
  476. package/dist/providers/resolution/mro.d.ts.map +1 -0
  477. package/dist/providers/resolution/mro.js +14 -0
  478. package/dist/providers/resolution/mro.js.map +1 -0
  479. package/dist/providers/resolution/none.d.ts +3 -0
  480. package/dist/providers/resolution/none.d.ts.map +1 -0
  481. package/dist/providers/resolution/none.js +11 -0
  482. package/dist/providers/resolution/none.js.map +1 -0
  483. package/dist/providers/resolution/python-all-filter.d.ts +25 -0
  484. package/dist/providers/resolution/python-all-filter.d.ts.map +1 -0
  485. package/dist/providers/resolution/python-all-filter.js +64 -0
  486. package/dist/providers/resolution/python-all-filter.js.map +1 -0
  487. package/dist/providers/resolution/resolver-strategy.d.ts +42 -0
  488. package/dist/providers/resolution/resolver-strategy.d.ts.map +1 -0
  489. package/dist/providers/resolution/resolver-strategy.js +50 -0
  490. package/dist/providers/resolution/resolver-strategy.js.map +1 -0
  491. package/dist/providers/resolution/single-inheritance.d.ts +3 -0
  492. package/dist/providers/resolution/single-inheritance.d.ts.map +1 -0
  493. package/dist/providers/resolution/single-inheritance.js +21 -0
  494. package/dist/providers/resolution/single-inheritance.js.map +1 -0
  495. package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.d.ts +16 -0
  496. package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.d.ts.map +1 -0
  497. package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.js +50 -0
  498. package/dist/providers/resolution/stack-graphs/__fixtures__/mock-tree.js.map +1 -0
  499. package/dist/providers/resolution/stack-graphs/glue.d.ts +15 -0
  500. package/dist/providers/resolution/stack-graphs/glue.d.ts.map +1 -0
  501. package/dist/providers/resolution/stack-graphs/glue.js +44 -0
  502. package/dist/providers/resolution/stack-graphs/glue.js.map +1 -0
  503. package/dist/providers/resolution/stack-graphs/node-edge-builder.d.ts +30 -0
  504. package/dist/providers/resolution/stack-graphs/node-edge-builder.d.ts.map +1 -0
  505. package/dist/providers/resolution/stack-graphs/node-edge-builder.js +366 -0
  506. package/dist/providers/resolution/stack-graphs/node-edge-builder.js.map +1 -0
  507. package/dist/providers/resolution/stack-graphs/partial-path-engine.d.ts +9 -0
  508. package/dist/providers/resolution/stack-graphs/partial-path-engine.d.ts.map +1 -0
  509. package/dist/providers/resolution/stack-graphs/partial-path-engine.js +152 -0
  510. package/dist/providers/resolution/stack-graphs/partial-path-engine.js.map +1 -0
  511. package/dist/providers/resolution/stack-graphs/rule-parser.d.ts +11 -0
  512. package/dist/providers/resolution/stack-graphs/rule-parser.d.ts.map +1 -0
  513. package/dist/providers/resolution/stack-graphs/rule-parser.js +247 -0
  514. package/dist/providers/resolution/stack-graphs/rule-parser.js.map +1 -0
  515. package/dist/providers/resolution/stack-graphs/types.d.ts +93 -0
  516. package/dist/providers/resolution/stack-graphs/types.d.ts.map +1 -0
  517. package/dist/providers/resolution/stack-graphs/types.js +11 -0
  518. package/dist/providers/resolution/stack-graphs/types.js.map +1 -0
  519. package/dist/providers/resolution/stack-graphs-python.d.ts +27 -0
  520. package/dist/providers/resolution/stack-graphs-python.d.ts.map +1 -0
  521. package/dist/providers/resolution/stack-graphs-python.js +104 -0
  522. package/dist/providers/resolution/stack-graphs-python.js.map +1 -0
  523. package/dist/providers/resolution/stack-graphs-ts.d.ts +134 -0
  524. package/dist/providers/resolution/stack-graphs-ts.d.ts.map +1 -0
  525. package/dist/providers/resolution/stack-graphs-ts.js +372 -0
  526. package/dist/providers/resolution/stack-graphs-ts.js.map +1 -0
  527. package/dist/providers/ruby.d.ts +3 -0
  528. package/dist/providers/ruby.d.ts.map +1 -0
  529. package/dist/providers/ruby.js +259 -0
  530. package/dist/providers/ruby.js.map +1 -0
  531. package/dist/providers/rust.d.ts +3 -0
  532. package/dist/providers/rust.d.ts.map +1 -0
  533. package/dist/providers/rust.js +318 -0
  534. package/dist/providers/rust.js.map +1 -0
  535. package/dist/providers/swift.d.ts +3 -0
  536. package/dist/providers/swift.d.ts.map +1 -0
  537. package/dist/providers/swift.js +177 -0
  538. package/dist/providers/swift.js.map +1 -0
  539. package/dist/providers/test-helpers.d.ts +24 -0
  540. package/dist/providers/test-helpers.d.ts.map +1 -0
  541. package/dist/providers/test-helpers.js +33 -0
  542. package/dist/providers/test-helpers.js.map +1 -0
  543. package/dist/providers/ts-shared.d.ts +30 -0
  544. package/dist/providers/ts-shared.d.ts.map +1 -0
  545. package/dist/providers/ts-shared.js +328 -0
  546. package/dist/providers/ts-shared.js.map +1 -0
  547. package/dist/providers/tsx.d.ts +7 -0
  548. package/dist/providers/tsx.d.ts.map +1 -0
  549. package/dist/providers/tsx.js +79 -0
  550. package/dist/providers/tsx.js.map +1 -0
  551. package/dist/providers/types.d.ts +166 -0
  552. package/dist/providers/types.d.ts.map +1 -0
  553. package/dist/providers/types.js +7 -0
  554. package/dist/providers/types.js.map +1 -0
  555. package/dist/providers/typescript-family-accesses.d.ts +14 -0
  556. package/dist/providers/typescript-family-accesses.d.ts.map +1 -0
  557. package/dist/providers/typescript-family-accesses.js +27 -0
  558. package/dist/providers/typescript-family-accesses.js.map +1 -0
  559. package/dist/providers/typescript.d.ts +9 -0
  560. package/dist/providers/typescript.d.ts.map +1 -0
  561. package/dist/providers/typescript.js +84 -0
  562. package/dist/providers/typescript.js.map +1 -0
  563. package/package.json +108 -0
@@ -0,0 +1,126 @@
1
+ /**
2
+ * Summarize phase — emit structured LLM summaries for callable symbols.
3
+ *
4
+ * This is the first hop of the SACL-style two-lane retrieval stack. Every
5
+ * Function / Method / Class that the LSP oracle has independently confirmed
6
+ * gets a Zod 4-validated `SymbolSummary` generated by `@opencodehub/summarizer`
7
+ * (Bedrock Haiku 4.5 via Converse + tool_use). The summaries live in a
8
+ * separate `symbol_summaries` storage table; they never participate in the
9
+ * graph edge set.
10
+ *
11
+ * The phase is gated four ways, in strict precedence:
12
+ * 1. `opts.offline === true` → skip with `skippedReason: "offline"`. The
13
+ * offline invariant is non-negotiable; no summarizer call path may
14
+ * execute when offline is set.
15
+ * 2. `opts.summaries !== true` → skip with `skippedReason: "not-enabled"`.
16
+ * The flag defaults off so re-index runs stay free until the operator
17
+ * explicitly opts in.
18
+ * 3. Trust filter — a symbol is summarized only when at least one edge
19
+ * incident on it is SCIP-confirmed (confidence 1.0 and
20
+ * `reason` starts with an {@link SCIP_PROVENANCE_PREFIXES} entry). This
21
+ * cuts noise from tree-sitter-only resolution where the symbol's
22
+ * existence is uncertain.
23
+ * 4. Cost cap — `maxSummariesPerRun` bounds how many Bedrock calls we
24
+ * actually issue. `maxSummariesPerRun = 0` (the default) runs the
25
+ * phase in dry-run mode: we record how many symbols WOULD have been
26
+ * summarized, but never contact Bedrock. Session A ships in this
27
+ * mode so the operator can inspect the counter before spending
28
+ * anything on Session B.
29
+ *
30
+ * The LSP phases run upstream, so by the time we get here every high-
31
+ * confidence edge carries its `scip:scip-python@…` / `scip:scip-typescript@…`
32
+ * / `scip:scip-go@…` / `scip:rust-analyzer@…` provenance. The trust filter reads that
33
+ * directly off `ctx.graph`.
34
+ *
35
+ * Cache semantics:
36
+ * - Content hash = sha256 hex of the UTF-8 bytes of the symbol's source
37
+ * span `[startLine, endLine]`. A whitespace-only edit to a different
38
+ * symbol leaves the target symbol's hash stable → cache hit.
39
+ * - The cache key is `(nodeId, contentHash, promptVersion)`. Bumping
40
+ * `SUMMARIZER_PROMPT_VERSION` invalidates prior rows without deleting
41
+ * them; multiple prompt versions can coexist during rollout.
42
+ * - Cache hits are counted but do NOT re-enter the output `rows` array
43
+ * — the CLI only persists freshly produced rows. The prior row is
44
+ * already on disk.
45
+ *
46
+ * Provenance:
47
+ * - The phase never emits graph edges.
48
+ * - The phase never mutates graph nodes (no summary text stored inline).
49
+ * - All output is side-channel, keyed by node id.
50
+ */
51
+ import type { SymbolSummaryRow } from "@opencodehub/storage";
52
+ import { type SummarizeInput, type SummarizerResult } from "@opencodehub/summarizer";
53
+ import type { PipelinePhase } from "../types.js";
54
+ export declare const SUMMARIZE_PHASE_NAME: "summarize";
55
+ export interface SummarizePhaseOutput {
56
+ /** `true` when the phase actually considered symbols for summarization. */
57
+ readonly enabled: boolean;
58
+ /** Populated when `enabled=false`; a human-readable hint for logs. */
59
+ readonly skippedReason?: string;
60
+ /** Prompt version that gated the cache key for this run. */
61
+ readonly promptVersion: string;
62
+ /** Model id that WOULD (or did) be invoked — resolved for diagnostics. */
63
+ readonly modelId: string;
64
+ /** Symbols walked after kind filtering. */
65
+ readonly considered: number;
66
+ /** Symbols dropped by the LSP trust filter. */
67
+ readonly skippedUnconfirmed: number;
68
+ /** Symbols whose cached summary already covered the content hash. */
69
+ readonly cacheHits: number;
70
+ /**
71
+ * Symbols eligible but dropped by the cost cap (dry-run or when the
72
+ * batch exceeds `maxSummariesPerRun`).
73
+ */
74
+ readonly wouldHaveSummarized: number;
75
+ /** Bedrock calls that returned a validated summary. */
76
+ readonly summarized: number;
77
+ /** Bedrock calls that threw (retry loop exhausted or transport error). */
78
+ readonly failed: number;
79
+ /** Fresh rows the CLI will persist via `store.bulkLoadSymbolSummaries`. */
80
+ readonly rows: readonly SymbolSummaryRow[];
81
+ readonly durationMs: number;
82
+ }
83
+ /**
84
+ * Shape the phase uses to talk to the summarizer. Narrower than the full
85
+ * Bedrock client so tests can substitute a fake without instantiating
86
+ * `@aws-sdk/client-bedrock-runtime`. The production path wraps
87
+ * {@link summarizeSymbol} against a real `BedrockRuntimeClient`.
88
+ */
89
+ export interface SummarizerAdapter {
90
+ summarize(input: SummarizeInput): Promise<SummarizerResult>;
91
+ }
92
+ export interface SummarizePhaseTestHooks {
93
+ /**
94
+ * Override the summarizer adapter. When provided, the phase uses this
95
+ * instead of instantiating a real Bedrock client. Tests MUST set this
96
+ * so Bedrock is never contacted.
97
+ */
98
+ readonly summarizerFactory?: (opts: {
99
+ readonly modelId: string;
100
+ }) => SummarizerAdapter;
101
+ /** Override the source-text reader (test-only). */
102
+ readonly sourceReader?: (absPath: string) => string;
103
+ /** Override the clock so `createdAt` is deterministic in tests. */
104
+ readonly now?: () => Date;
105
+ }
106
+ export declare function __setSummarizePhaseTestHooks__(hooks: SummarizePhaseTestHooks | undefined): void;
107
+ export declare const summarizePhase: PipelinePhase<SummarizePhaseOutput>;
108
+ /**
109
+ * Lightweight cache adapter a caller can plug onto `ctx.options` to let the
110
+ * phase probe existing summaries before emitting work. The `summarize`
111
+ * phase has no direct `IGraphStore` handle — phases are pure over
112
+ * `PipelineContext` — so we expose a narrow hook (`__summaryCache`) the
113
+ * CLI fills before invoking `runIngestion`. Tests plug in a fake
114
+ * adapter; production may or may not depending on how aggressive the
115
+ * operator wants cache hits to be.
116
+ */
117
+ export interface SummaryCacheAdapter {
118
+ lookup(nodeId: string, contentHash: string, promptVersion: string): Promise<SymbolSummaryRow | undefined>;
119
+ }
120
+ /**
121
+ * Options-bag extension point. Callers attach the cache adapter via a
122
+ * non-enumerable-looking well-known key so existing snapshot tests that
123
+ * assert on option shape don't break.
124
+ */
125
+ export declare const SUMMARY_CACHE_OPTIONS_KEY: "__summaryCache";
126
+ //# sourceMappingURL=summarize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/summarize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAMH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACtB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,oBAAoB,EAAG,WAAoB,CAAC;AAKzD,MAAM,WAAW,oBAAoB;IACnC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,sEAAsE;IACtE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,4DAA4D;IAC5D,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2CAA2C;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,+CAA+C;IAC/C,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,qEAAqE;IACrE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,uDAAuD;IACvD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC3C,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC7D;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,iBAAiB,CAAC;IACvF,mDAAmD;IACnD,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,CAAC;IACpD,mEAAmE;IACnE,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAC3B;AAGD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,uBAAuB,GAAG,SAAS,GAAG,IAAI,CAE/F;AAED,eAAO,MAAM,cAAc,EAAE,aAAa,CAAC,oBAAoB,CAU9D,CAAC;AA+UF;;;;;;;;GAQG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,CACJ,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC,CAAC;CAC1C;AAED;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,EAAG,gBAAyB,CAAC"}
@@ -0,0 +1,401 @@
1
+ /**
2
+ * Summarize phase — emit structured LLM summaries for callable symbols.
3
+ *
4
+ * This is the first hop of the SACL-style two-lane retrieval stack. Every
5
+ * Function / Method / Class that the LSP oracle has independently confirmed
6
+ * gets a Zod 4-validated `SymbolSummary` generated by `@opencodehub/summarizer`
7
+ * (Bedrock Haiku 4.5 via Converse + tool_use). The summaries live in a
8
+ * separate `symbol_summaries` storage table; they never participate in the
9
+ * graph edge set.
10
+ *
11
+ * The phase is gated four ways, in strict precedence:
12
+ * 1. `opts.offline === true` → skip with `skippedReason: "offline"`. The
13
+ * offline invariant is non-negotiable; no summarizer call path may
14
+ * execute when offline is set.
15
+ * 2. `opts.summaries !== true` → skip with `skippedReason: "not-enabled"`.
16
+ * The flag defaults off so re-index runs stay free until the operator
17
+ * explicitly opts in.
18
+ * 3. Trust filter — a symbol is summarized only when at least one edge
19
+ * incident on it is SCIP-confirmed (confidence 1.0 and
20
+ * `reason` starts with an {@link SCIP_PROVENANCE_PREFIXES} entry). This
21
+ * cuts noise from tree-sitter-only resolution where the symbol's
22
+ * existence is uncertain.
23
+ * 4. Cost cap — `maxSummariesPerRun` bounds how many Bedrock calls we
24
+ * actually issue. `maxSummariesPerRun = 0` (the default) runs the
25
+ * phase in dry-run mode: we record how many symbols WOULD have been
26
+ * summarized, but never contact Bedrock. Session A ships in this
27
+ * mode so the operator can inspect the counter before spending
28
+ * anything on Session B.
29
+ *
30
+ * The LSP phases run upstream, so by the time we get here every high-
31
+ * confidence edge carries its `scip:scip-python@…` / `scip:scip-typescript@…`
32
+ * / `scip:scip-go@…` / `scip:rust-analyzer@…` provenance. The trust filter reads that
33
+ * directly off `ctx.graph`.
34
+ *
35
+ * Cache semantics:
36
+ * - Content hash = sha256 hex of the UTF-8 bytes of the symbol's source
37
+ * span `[startLine, endLine]`. A whitespace-only edit to a different
38
+ * symbol leaves the target symbol's hash stable → cache hit.
39
+ * - The cache key is `(nodeId, contentHash, promptVersion)`. Bumping
40
+ * `SUMMARIZER_PROMPT_VERSION` invalidates prior rows without deleting
41
+ * them; multiple prompt versions can coexist during rollout.
42
+ * - Cache hits are counted but do NOT re-enter the output `rows` array
43
+ * — the CLI only persists freshly produced rows. The prior row is
44
+ * already on disk.
45
+ *
46
+ * Provenance:
47
+ * - The phase never emits graph edges.
48
+ * - The phase never mutates graph nodes (no summary text stored inline).
49
+ * - All output is side-channel, keyed by node id.
50
+ */
51
+ import { createHash } from "node:crypto";
52
+ import { readFileSync } from "node:fs";
53
+ import path from "node:path";
54
+ import { SCIP_PROVENANCE_PREFIXES } from "@opencodehub/core-types";
55
+ import { DEFAULT_MODEL_ID, SUMMARIZER_PROMPT_VERSION, } from "@opencodehub/summarizer";
56
+ import { CONFIDENCE_DEMOTE_PHASE_NAME } from "./confidence-demote.js";
57
+ export const SUMMARIZE_PHASE_NAME = "summarize";
58
+ const LSP_CONFIDENCE = 1.0;
59
+ const SUMMARIZABLE_KINDS = new Set(["Function", "Method", "Class"]);
60
+ let testHooks;
61
+ export function __setSummarizePhaseTestHooks__(hooks) {
62
+ testHooks = hooks;
63
+ }
64
+ export const summarizePhase = {
65
+ name: SUMMARIZE_PHASE_NAME,
66
+ // Depend on confidence-demote so every LSP phase (and the demotion pass)
67
+ // has finished before we inspect edge provenance. The dep graph guarantees
68
+ // all four lsp-* phases ran upstream, so trust filtering sees the final
69
+ // confidence scores.
70
+ deps: [CONFIDENCE_DEMOTE_PHASE_NAME],
71
+ async run(ctx) {
72
+ return runSummarize(ctx);
73
+ },
74
+ };
75
+ async function runSummarize(ctx) {
76
+ const start = Date.now();
77
+ // Accept `summaryModel` via the options bag — the CLI surface threads
78
+ // `--summary-model <id>` through `PipelineOptions.summaryModel`. A string
79
+ // override replaces the compile-time default; anything else falls back to
80
+ // `DEFAULT_MODEL_ID` so production deployments stay pinned.
81
+ const summaryModelOpt = ctx.options.summaryModel;
82
+ const modelId = typeof summaryModelOpt === "string" && summaryModelOpt.length > 0
83
+ ? summaryModelOpt
84
+ : DEFAULT_MODEL_ID;
85
+ const promptVersion = SUMMARIZER_PROMPT_VERSION;
86
+ // ---- Offline gate (INVARIANT) ----------------------------------------
87
+ if (ctx.options.offline === true) {
88
+ return emptyOutput(start, {
89
+ skippedReason: "offline",
90
+ promptVersion,
91
+ modelId,
92
+ });
93
+ }
94
+ // ---- Feature flag gate -----------------------------------------------
95
+ if (ctx.options.summaries !== true) {
96
+ return emptyOutput(start, {
97
+ skippedReason: "not-enabled",
98
+ promptVersion,
99
+ modelId,
100
+ });
101
+ }
102
+ // ---- Walk candidates --------------------------------------------------
103
+ // Build per-node inbound/outbound incidence sets so we can apply the LSP
104
+ // trust filter in O(|edges| + |nodes|) rather than O(|edges| × |nodes|).
105
+ const lspConfirmedNodes = new Set();
106
+ for (const edge of ctx.graph.edges()) {
107
+ if (edge.confidence < LSP_CONFIDENCE)
108
+ continue;
109
+ if (!isLspReason(edge.reason))
110
+ continue;
111
+ lspConfirmedNodes.add(edge.from);
112
+ lspConfirmedNodes.add(edge.to);
113
+ }
114
+ let considered = 0;
115
+ let skippedUnconfirmed = 0;
116
+ const candidates = [];
117
+ for (const node of ctx.graph.nodes()) {
118
+ if (!SUMMARIZABLE_KINDS.has(node.kind))
119
+ continue;
120
+ considered += 1;
121
+ if (!lspConfirmedNodes.has(node.id)) {
122
+ skippedUnconfirmed += 1;
123
+ continue;
124
+ }
125
+ const startLine = node.startLine;
126
+ const endLine = node.endLine;
127
+ if (startLine === undefined || endLine === undefined)
128
+ continue;
129
+ const enclosingClass = typeof node.enclosingClass === "string"
130
+ ? (node.enclosingClass ?? null)
131
+ : null;
132
+ const docstring = typeof node.description === "string"
133
+ ? (node.description ?? null)
134
+ : null;
135
+ candidates.push({
136
+ nodeId: node.id,
137
+ filePath: node.filePath,
138
+ startLine,
139
+ endLine,
140
+ enclosingClass,
141
+ docstring,
142
+ });
143
+ }
144
+ // Deterministic order: sort by node id so cap truncation picks a stable
145
+ // subset across runs.
146
+ candidates.sort((a, b) => (a.nodeId < b.nodeId ? -1 : a.nodeId > b.nodeId ? 1 : 0));
147
+ // ---- Read source + hash, classify hit vs miss -------------------------
148
+ const readSource = testHooks?.sourceReader ?? defaultSourceReader;
149
+ let cacheHits = 0;
150
+ const misses = [];
151
+ // Resolve a cache adapter from the options bag if the CLI attached one.
152
+ // Phases have no direct store handle, so we route cache probes through a
153
+ // narrow hook on `ctx.options`. Production attaches the DuckDB-backed
154
+ // adapter; tests supply an in-memory fake.
155
+ const cacheAdapter = resolveCacheAdapter(ctx);
156
+ for (const c of candidates) {
157
+ const source = safeReadSpan(readSource, ctx.repoPath, c.filePath, c.startLine, c.endLine);
158
+ if (source === undefined)
159
+ continue;
160
+ const contentHash = sha256Hex(source);
161
+ if (cacheAdapter !== undefined) {
162
+ const hit = await cacheAdapter.lookup(c.nodeId, contentHash, promptVersion);
163
+ if (hit !== undefined) {
164
+ cacheHits += 1;
165
+ continue;
166
+ }
167
+ }
168
+ misses.push({ candidate: c, source, contentHash });
169
+ }
170
+ // ---- Cost cap ---------------------------------------------------------
171
+ const cap = Math.max(0, Math.floor(ctx.options.maxSummariesPerRun ?? 0));
172
+ // When cap === 0 the phase runs in dry-run mode: every miss contributes
173
+ // to wouldHaveSummarized and we skip Bedrock entirely. When cap > 0 we
174
+ // slice the first `cap` misses into the effective batch and count the
175
+ // overflow (if any) as wouldHaveSummarized too.
176
+ const effectiveBatch = cap === 0 ? [] : misses.slice(0, cap);
177
+ const effectiveWouldHave = cap === 0 ? misses.length : misses.length - effectiveBatch.length;
178
+ if (effectiveBatch.length === 0) {
179
+ return {
180
+ enabled: true,
181
+ promptVersion,
182
+ modelId,
183
+ considered,
184
+ skippedUnconfirmed,
185
+ cacheHits,
186
+ wouldHaveSummarized: effectiveWouldHave,
187
+ summarized: 0,
188
+ failed: 0,
189
+ rows: [],
190
+ durationMs: Date.now() - start,
191
+ };
192
+ }
193
+ // ---- Summarize --------------------------------------------------------
194
+ // Instantiating the summarizer resolves the AWS SDK credential chain, which
195
+ // throws `CredentialsProviderError` / `NoCredentialsError` when no creds
196
+ // are configured. Catch that family here so contributors without Bedrock
197
+ // access still get a green analyze — the missing-credentials path emits a
198
+ // skip note and zero rows, while every other factory error continues to
199
+ // surface so real bugs don't go silent.
200
+ let summarizer;
201
+ try {
202
+ summarizer = (testHooks?.summarizerFactory ?? defaultSummarizerFactory)({ modelId });
203
+ }
204
+ catch (err) {
205
+ if (isMissingCredentialsError(err)) {
206
+ ctx.onProgress?.({
207
+ phase: SUMMARIZE_PHASE_NAME,
208
+ kind: "note",
209
+ message: "summarize: skipped (no AWS credentials)",
210
+ });
211
+ return emptyOutput(start, {
212
+ skippedReason: "no-credentials",
213
+ promptVersion,
214
+ modelId,
215
+ });
216
+ }
217
+ throw err;
218
+ }
219
+ const now = testHooks?.now ?? (() => new Date());
220
+ const rows = [];
221
+ let summarized = 0;
222
+ let failed = 0;
223
+ for (const [idx, entry] of effectiveBatch.entries()) {
224
+ const input = {
225
+ source: entry.source,
226
+ filePath: entry.candidate.filePath,
227
+ lineStart: entry.candidate.startLine,
228
+ lineEnd: entry.candidate.endLine,
229
+ docstring: entry.candidate.docstring,
230
+ enclosingClass: entry.candidate.enclosingClass,
231
+ };
232
+ try {
233
+ const result = await summarizer.summarize(input);
234
+ const summary = result.summary;
235
+ const signatureSummary = buildSignatureSummary(summary);
236
+ const row = {
237
+ nodeId: entry.candidate.nodeId,
238
+ contentHash: entry.contentHash,
239
+ promptVersion,
240
+ modelId,
241
+ summaryText: summary.purpose,
242
+ ...(signatureSummary !== undefined ? { signatureSummary } : {}),
243
+ returnsTypeSummary: summary.returns.type_summary,
244
+ createdAt: now().toISOString(),
245
+ };
246
+ rows.push(row);
247
+ summarized += 1;
248
+ }
249
+ catch (err) {
250
+ // Credential errors can surface on the first Bedrock call rather than
251
+ // at client construction (e.g. SSO profile expired mid-run). Treat
252
+ // the first such error on the first candidate as a soft-fail for the
253
+ // whole phase so we don't waste the batch on a guaranteed-failing
254
+ // credential chain.
255
+ if (idx === 0 && isMissingCredentialsError(err)) {
256
+ ctx.onProgress?.({
257
+ phase: SUMMARIZE_PHASE_NAME,
258
+ kind: "note",
259
+ message: "summarize: skipped (no AWS credentials)",
260
+ });
261
+ return emptyOutput(start, {
262
+ skippedReason: "no-credentials",
263
+ promptVersion,
264
+ modelId,
265
+ });
266
+ }
267
+ failed += 1;
268
+ ctx.onProgress?.({
269
+ phase: SUMMARIZE_PHASE_NAME,
270
+ kind: "warn",
271
+ message: `summarize: ${entry.candidate.nodeId} failed: ${err.message}`,
272
+ });
273
+ }
274
+ }
275
+ return {
276
+ enabled: true,
277
+ promptVersion,
278
+ modelId,
279
+ considered,
280
+ skippedUnconfirmed,
281
+ cacheHits,
282
+ wouldHaveSummarized: effectiveWouldHave,
283
+ summarized,
284
+ failed,
285
+ rows,
286
+ durationMs: Date.now() - start,
287
+ };
288
+ }
289
+ // ---- Helpers ------------------------------------------------------------
290
+ function emptyOutput(start, partial) {
291
+ return {
292
+ enabled: false,
293
+ skippedReason: partial.skippedReason,
294
+ promptVersion: partial.promptVersion,
295
+ modelId: partial.modelId,
296
+ considered: 0,
297
+ skippedUnconfirmed: 0,
298
+ cacheHits: 0,
299
+ wouldHaveSummarized: 0,
300
+ summarized: 0,
301
+ failed: 0,
302
+ rows: [],
303
+ durationMs: Date.now() - start,
304
+ };
305
+ }
306
+ function isLspReason(reason) {
307
+ if (reason === undefined)
308
+ return false;
309
+ for (const prefix of SCIP_PROVENANCE_PREFIXES) {
310
+ if (reason.startsWith(prefix))
311
+ return true;
312
+ }
313
+ return false;
314
+ }
315
+ function sha256Hex(s) {
316
+ return createHash("sha256").update(s, "utf8").digest("hex");
317
+ }
318
+ /**
319
+ * Recognize the AWS SDK v3 credential-missing error family. The SDK
320
+ * throws `CredentialsProviderError` (name) / `NoCredentialsError`
321
+ * depending on the provider in the chain, plus pure-string errors from
322
+ * `from*` providers ("Could not load credentials from any providers").
323
+ *
324
+ * We match on a small set of well-known shapes rather than importing
325
+ * `@smithy/types` to keep the phase independent of the SDK's type
326
+ * surface and safe to call with a test fake that merely sets `name`.
327
+ */
328
+ function isMissingCredentialsError(err) {
329
+ if (err === null || err === undefined)
330
+ return false;
331
+ const errObj = err;
332
+ const name = typeof errObj.name === "string" ? errObj.name : "";
333
+ if (name === "CredentialsProviderError" ||
334
+ name === "NoCredentialsError" ||
335
+ name === "ExpiredTokenException") {
336
+ return true;
337
+ }
338
+ const message = typeof errObj.message === "string" ? errObj.message : "";
339
+ return (message.includes("Could not load credentials") ||
340
+ message.includes("credentials is missing") ||
341
+ message.includes("Unable to load credentials") ||
342
+ message.includes("The security token included in the request is expired"));
343
+ }
344
+ function defaultSourceReader(absPath) {
345
+ return readFileSync(absPath, "utf-8");
346
+ }
347
+ function safeReadSpan(reader, repoPath, filePath, startLine, endLine) {
348
+ try {
349
+ const abs = path.isAbsolute(filePath) ? filePath : path.join(repoPath, filePath);
350
+ const all = reader(abs);
351
+ const lines = all.split(/\r?\n/);
352
+ const from = Math.max(0, startLine - 1);
353
+ const to = Math.min(lines.length, endLine);
354
+ if (to <= from)
355
+ return undefined;
356
+ return lines.slice(from, to).join("\n");
357
+ }
358
+ catch {
359
+ return undefined;
360
+ }
361
+ }
362
+ function buildSignatureSummary(summary) {
363
+ if (summary.inputs.length === 0)
364
+ return undefined;
365
+ return summary.inputs.map((i) => `${i.name}: ${i.type}`).join(", ");
366
+ }
367
+ /**
368
+ * Options-bag extension point. Callers attach the cache adapter via a
369
+ * non-enumerable-looking well-known key so existing snapshot tests that
370
+ * assert on option shape don't break.
371
+ */
372
+ export const SUMMARY_CACHE_OPTIONS_KEY = "__summaryCache";
373
+ function resolveCacheAdapter(ctx) {
374
+ const opts = ctx.options;
375
+ const cache = opts[SUMMARY_CACHE_OPTIONS_KEY];
376
+ if (cache === undefined || cache === null || typeof cache !== "object")
377
+ return undefined;
378
+ const adapter = cache;
379
+ if (typeof adapter.lookup !== "function")
380
+ return undefined;
381
+ return adapter;
382
+ }
383
+ /**
384
+ * Default summarizer factory. Defers importing `@aws-sdk/client-bedrock-runtime`
385
+ * until the phase actually needs to issue a call, so test runs with
386
+ * `maxSummariesPerRun=0` or `summaries=false` never touch the SDK's
387
+ * credential provider chain.
388
+ */
389
+ function defaultSummarizerFactory(opts) {
390
+ return {
391
+ summarize: async (input) => {
392
+ const [{ BedrockRuntimeClient }, { summarizeSymbol }] = await Promise.all([
393
+ import("@aws-sdk/client-bedrock-runtime"),
394
+ import("@opencodehub/summarizer"),
395
+ ]);
396
+ const client = new BedrockRuntimeClient({});
397
+ return summarizeSymbol(client, input, { modelId: opts.modelId });
398
+ },
399
+ };
400
+ }
401
+ //# sourceMappingURL=summarize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summarize.js","sourceRoot":"","sources":["../../../src/pipeline/phases/summarize.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Branch divergence — counts `ahead` and `behind` commits relative to the
3
+ * configured base branch, plus the list of files uniquely touched by the
4
+ * ahead commits.
5
+ *
6
+ * Uses two git subprocesses per branch:
7
+ * 1. `git rev-list --left-right --count <base>...<ref>` → tab-separated
8
+ * pair "behind<TAB>ahead".
9
+ * 2. `git log <base>..<ref> --name-only --format=` → newline-separated
10
+ * file paths, deduplicated in first-seen order.
11
+ *
12
+ * The caller supplies the base branch name (typically `main`) and the list
13
+ * of candidate head refs. The function fails open: any git error leaves the
14
+ * affected branch's entry absent from the returned map.
15
+ */
16
+ export interface BranchDivergenceEntry {
17
+ readonly ahead: number;
18
+ readonly behind: number;
19
+ readonly overlapFiles: readonly string[];
20
+ }
21
+ export interface BranchDivergenceResult {
22
+ readonly entries: ReadonlyMap<string, BranchDivergenceEntry>;
23
+ }
24
+ export interface BranchDivergenceOptions {
25
+ readonly repoPath: string;
26
+ readonly baseBranch: string;
27
+ readonly branches: readonly string[];
28
+ readonly maxOverlapFiles?: number;
29
+ }
30
+ /**
31
+ * List local branches via `git for-each-ref refs/heads/`. Returns short ref
32
+ * names sorted lexicographically so downstream iteration is deterministic.
33
+ */
34
+ export declare function listLocalBranches(repoPath: string): Promise<readonly string[]>;
35
+ /**
36
+ * Compute divergence for each branch relative to `baseBranch`.
37
+ *
38
+ * Branches equal to the base or failing to resolve are omitted from the
39
+ * result map.
40
+ */
41
+ export declare function computeBranchDivergence(opts: BranchDivergenceOptions): Promise<BranchDivergenceResult>;
42
+ //# sourceMappingURL=branch-divergence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-divergence.d.ts","sourceRoot":"","sources":["../../../../src/pipeline/phases/temporal-helpers/branch-divergence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAUH,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAC9D;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC,CAepF;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,sBAAsB,CAAC,CAYjC"}