@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,411 @@
1
+ /**
2
+ * Cross-file phase — upgrade low-confidence CALLS edges after every file
3
+ * has contributed its exports.
4
+ *
5
+ * At parse time every call site is resolved through the three-tier
6
+ * {@link resolve} helper (same-file → import-scoped → global). A call that
7
+ * only matches at the global tier is emitted with confidence 0.5 because we
8
+ * cannot prove which declaration the call targets. Once the whole repo has
9
+ * been parsed we can do better: if the caller file imports a module that
10
+ * now exports a matching identifier, the call is *import-scoped* in
11
+ * hindsight and deserves confidence 0.9.
12
+ *
13
+ * Strategy:
14
+ * 1. Build a directed import graph of repository files (skip external npm
15
+ * specifiers — they were already dropped at parse time).
16
+ * 2. Run Tarjan's SCC algorithm on that graph. Circular imports collapse
17
+ * into a single component; we still visit every file in a component.
18
+ * 3. Topologically sort the condensation so dependencies of file F are
19
+ * processed before F. Inside a component, order by filename for
20
+ * determinism.
21
+ * 4. For each file, walk every low-confidence (0.5) CALLS edge. Re-run
22
+ * the resolution strategy with the symbol index. If it now produces a
23
+ * higher-tier candidate, re-add the edge with the better confidence;
24
+ * the graph's dedupe keeps the stronger edge.
25
+ *
26
+ * Determinism: SCC discovery order is driven by sorted file iteration, and
27
+ * condensation order is produced by Kahn's algorithm with a lexical tie
28
+ * break. Two runs on the same repo produce identical edge upgrades.
29
+ */
30
+ import { makeNodeId } from "@opencodehub/core-types";
31
+ import { getProvider } from "../../providers/registry.js";
32
+ import { CONFIDENCE_BY_TIER, resolve, } from "../../providers/resolution/context.js";
33
+ import { buildFilePathLookup, partitionPriorEdges, resolveIncrementalView, } from "./incremental-helper.js";
34
+ import { INCREMENTAL_SCOPE_PHASE_NAME } from "./incremental-scope.js";
35
+ import { ORM_PHASE_NAME } from "./orm.js";
36
+ import { PARSE_PHASE_NAME } from "./parse.js";
37
+ import { ROUTES_PHASE_NAME } from "./routes.js";
38
+ import { TOOLS_PHASE_NAME } from "./tools.js";
39
+ export const CROSS_FILE_PHASE_NAME = "crossFile";
40
+ export const crossFilePhase = {
41
+ name: CROSS_FILE_PHASE_NAME,
42
+ deps: [
43
+ PARSE_PHASE_NAME,
44
+ ROUTES_PHASE_NAME,
45
+ TOOLS_PHASE_NAME,
46
+ ORM_PHASE_NAME,
47
+ INCREMENTAL_SCOPE_PHASE_NAME,
48
+ ],
49
+ async run(ctx, deps) {
50
+ const parse = deps.get(PARSE_PHASE_NAME);
51
+ if (parse === undefined) {
52
+ throw new Error("crossFile: parse output missing from dependency map");
53
+ }
54
+ return runCrossFile(ctx, parse);
55
+ },
56
+ };
57
+ function runCrossFile(ctx, parse) {
58
+ // ---- 0. : incremental-scope carry-forward. --------------------
59
+ //
60
+ // When the incremental view is active we first splat every prior-graph
61
+ // CALLS upgrade whose endpoints both live OUTSIDE the current closure
62
+ // into `ctx.graph`. The post-parse graph already carries the 0.5-tier
63
+ // CALLS; replaying the prior cross-file upgrades lets us skip work for
64
+ // non-closure files while keeping the final edge set byte-identical to
65
+ // a full run at the same commit. Determinism gate: see
66
+ // `packages/ingestion/src/pipeline/incremental-determinism.test.ts`.
67
+ const view = resolveIncrementalView(ctx);
68
+ if (view.active &&
69
+ view.previousGraph?.edges !== undefined &&
70
+ view.previousGraph.nodes !== undefined) {
71
+ const filePathByNodeId = buildFilePathLookup(view.previousGraph.nodes);
72
+ const carried = partitionPriorEdges(view.previousGraph.edges, filePathByNodeId, view.closure, new Set(["CALLS"]));
73
+ for (const e of carried) {
74
+ if (e.confidence <= CONFIDENCE_BY_TIER.global)
75
+ continue;
76
+ ctx.graph.addEdge({
77
+ from: e.from,
78
+ to: e.to,
79
+ type: e.type,
80
+ confidence: e.confidence,
81
+ ...(e.reason !== undefined ? { reason: e.reason } : {}),
82
+ });
83
+ }
84
+ }
85
+ // ---- 1. Build the import graph restricted to files we actually parsed. -
86
+ // In incremental mode we narrow the SCC+upgrade walk to closure files;
87
+ // the carry-forward above covers the non-closure tail.
88
+ const parsedFiles = view.active
89
+ ? [...parse.definitionsByFile.keys()].filter((f) => view.closure.has(f)).sort()
90
+ : [...parse.definitionsByFile.keys()].sort();
91
+ const parsedSet = new Set(parsedFiles);
92
+ const adjacency = new Map();
93
+ for (const f of parsedFiles)
94
+ adjacency.set(f, []);
95
+ // Walk the graph's IMPORTS edges — they were already resolved to in-repo
96
+ // File nodes at parse time, so we get the import graph for free without
97
+ // re-running path resolution.
98
+ for (const edge of ctx.graph.edges()) {
99
+ if (edge.type !== "IMPORTS")
100
+ continue;
101
+ const from = nodeIdToFilePath(edge.from);
102
+ const to = nodeIdToFilePath(edge.to);
103
+ if (from === undefined || to === undefined)
104
+ continue;
105
+ if (!parsedSet.has(from) || !parsedSet.has(to))
106
+ continue;
107
+ const list = adjacency.get(from);
108
+ if (list !== undefined && !list.includes(to))
109
+ list.push(to);
110
+ }
111
+ for (const [n, list] of adjacency) {
112
+ list.sort();
113
+ adjacency.set(n, list);
114
+ }
115
+ // ---- 2. Tarjan SCC on the import graph. -------------------------------
116
+ const sccs = tarjanScc(parsedFiles, adjacency);
117
+ const sccIndex = new Map();
118
+ sccs.forEach((members, i) => {
119
+ for (const m of members)
120
+ sccIndex.set(m, i);
121
+ });
122
+ // ---- 3. Kahn topo-sort over the condensation. -------------------------
123
+ const condensationAdj = new Map();
124
+ for (let i = 0; i < sccs.length; i++)
125
+ condensationAdj.set(i, new Set());
126
+ for (const [from, neighbors] of adjacency) {
127
+ const fi = sccIndex.get(from);
128
+ if (fi === undefined)
129
+ continue;
130
+ for (const to of neighbors) {
131
+ const ti = sccIndex.get(to);
132
+ if (ti === undefined || ti === fi)
133
+ continue;
134
+ condensationAdj.get(fi)?.add(ti);
135
+ }
136
+ }
137
+ const condensationOrder = kahnCondensation(condensationAdj);
138
+ // ---- 4. Process files in SCC-topo order; inside a component, by name. -
139
+ let upgradedCallsCount = 0;
140
+ let unresolvedRemaining = 0;
141
+ const largeSccs = [];
142
+ for (const idx of condensationOrder) {
143
+ const members = sccs[idx];
144
+ if (members === undefined)
145
+ continue;
146
+ if (members.length > 5) {
147
+ // Name the component by its lexicographically smallest member for a
148
+ // stable identifier across runs.
149
+ const smallest = [...members].sort()[0];
150
+ if (smallest !== undefined)
151
+ largeSccs.push(smallest);
152
+ }
153
+ const sortedMembers = [...members].sort();
154
+ for (const filePath of sortedMembers) {
155
+ const upgraded = reresolveCallsForFile(ctx, parse.symbolIndex, parse, filePath);
156
+ upgradedCallsCount += upgraded.upgraded;
157
+ unresolvedRemaining += upgraded.stillUnresolved;
158
+ }
159
+ }
160
+ return {
161
+ upgradedCallsCount,
162
+ unresolvedRemaining,
163
+ sccCount: sccs.length,
164
+ largeSccs,
165
+ };
166
+ }
167
+ function reresolveCallsForFile(ctx, symbolIndex, parse, filePath) {
168
+ // We compare against the edges already emitted at parse time: pick only
169
+ // CALLS edges whose source file matches `filePath` and whose confidence
170
+ // is capped at the global tier (0.5). Anything higher is already as
171
+ // strong as we can make it.
172
+ const defs = parse.definitionsByFile.get(filePath) ?? [];
173
+ const calls = parse.callsByFile.get(filePath) ?? [];
174
+ if (calls.length === 0)
175
+ return { upgraded: 0, stillUnresolved: 0 };
176
+ // Build a quick lookup from qualified name → current definition's id so we
177
+ // can re-derive the caller id without walking the whole graph per call.
178
+ const callerIdByQualifiedName = new Map();
179
+ for (const d of defs) {
180
+ const id = makeNodeId(d.kind, d.filePath, d.qualifiedName, {
181
+ ...(d.parameterCount !== undefined ? { parameterCount: d.parameterCount } : {}),
182
+ ...(d.parameterTypes !== undefined ? { parameterTypes: d.parameterTypes } : {}),
183
+ ...(d.isConst !== undefined ? { isConst: d.isConst } : {}),
184
+ });
185
+ callerIdByQualifiedName.set(d.qualifiedName, id);
186
+ }
187
+ const fileNodeId = makeNodeId("File", filePath, filePath);
188
+ const language = parse.definitionsByFile.has(filePath)
189
+ ? inferLanguageFromFile(filePath)
190
+ : undefined;
191
+ if (language === undefined)
192
+ return { upgraded: 0, stillUnresolved: 0 };
193
+ const provider = getProvider(language);
194
+ let upgraded = 0;
195
+ let stillUnresolved = 0;
196
+ for (const call of calls) {
197
+ const callerId = call.callerQualifiedName === "<module>"
198
+ ? fileNodeId
199
+ : callerIdByQualifiedName.get(call.callerQualifiedName);
200
+ if (callerId === undefined)
201
+ continue;
202
+ const candidates = resolve({ callerFile: filePath, calleeName: call.calleeName, provider }, symbolIndex);
203
+ const first = candidates[0];
204
+ if (first === undefined) {
205
+ stillUnresolved += 1;
206
+ continue;
207
+ }
208
+ // Only upgrade when the resolved tier is above the global floor.
209
+ if (first.confidence > CONFIDENCE_BY_TIER.global) {
210
+ ctx.graph.addEdge({
211
+ from: callerId,
212
+ to: first.targetId,
213
+ type: "CALLS",
214
+ confidence: first.confidence,
215
+ reason: `cross-file-${first.tier}`,
216
+ });
217
+ upgraded += 1;
218
+ }
219
+ }
220
+ return { upgraded, stillUnresolved };
221
+ }
222
+ function inferLanguageFromFile(filePath) {
223
+ const idx = filePath.lastIndexOf(".");
224
+ if (idx < 0)
225
+ return undefined;
226
+ const ext = filePath.slice(idx).toLowerCase();
227
+ switch (ext) {
228
+ case ".ts":
229
+ case ".mts":
230
+ case ".cts":
231
+ return "typescript";
232
+ case ".tsx":
233
+ return "tsx";
234
+ case ".js":
235
+ case ".mjs":
236
+ case ".cjs":
237
+ case ".jsx":
238
+ return "javascript";
239
+ case ".py":
240
+ case ".pyi":
241
+ return "python";
242
+ case ".go":
243
+ return "go";
244
+ case ".rs":
245
+ return "rust";
246
+ case ".java":
247
+ return "java";
248
+ case ".cs":
249
+ return "csharp";
250
+ case ".c":
251
+ case ".h":
252
+ // .h is ambiguous between C/C++; default to C. A dedicated C++ header
253
+ // detector can upgrade the classification later.
254
+ return "c";
255
+ case ".cpp":
256
+ case ".cc":
257
+ case ".cxx":
258
+ case ".hpp":
259
+ case ".hh":
260
+ case ".hxx":
261
+ return "cpp";
262
+ case ".rb":
263
+ return "ruby";
264
+ case ".kt":
265
+ case ".kts":
266
+ return "kotlin";
267
+ case ".swift":
268
+ return "swift";
269
+ case ".php":
270
+ case ".php3":
271
+ case ".php4":
272
+ case ".php5":
273
+ case ".php7":
274
+ case ".phtml":
275
+ return "php";
276
+ case ".dart":
277
+ return "dart";
278
+ default:
279
+ return undefined;
280
+ }
281
+ }
282
+ /**
283
+ * Recover a File's relative path from a `File:<path>:<qn>` node id. Returns
284
+ * undefined for non-file ids.
285
+ */
286
+ function nodeIdToFilePath(id) {
287
+ if (!id.startsWith("File:"))
288
+ return undefined;
289
+ const after = id.slice("File:".length);
290
+ // File ids are `File:<path>:<path>` — the qualifiedName equals the path.
291
+ // Splitting on the middle colon is robust even when the path contains
292
+ // colons on Windows (we normalize to POSIX at scan time).
293
+ const colonIdx = after.indexOf(":");
294
+ if (colonIdx < 0)
295
+ return after;
296
+ return after.slice(0, colonIdx);
297
+ }
298
+ /**
299
+ * Iterative Tarjan strongly-connected-components.
300
+ * Input: sorted `nodes` list + adjacency map with sorted neighbor lists.
301
+ * Output: array of SCCs; each SCC is the sorted list of its members.
302
+ * Components are emitted in the order Tarjan discovers them, which — given
303
+ * pre-sorted inputs — is deterministic.
304
+ */
305
+ function tarjanScc(nodes, adjacency) {
306
+ const index = new Map();
307
+ const lowlink = new Map();
308
+ const onStack = new Set();
309
+ const stack = [];
310
+ let counter = 0;
311
+ const result = [];
312
+ // Iterative simulation so deep call chains don't blow the stack.
313
+ function strongConnect(start) {
314
+ const dfsStack = [{ node: start, it: 0 }];
315
+ index.set(start, counter);
316
+ lowlink.set(start, counter);
317
+ counter += 1;
318
+ stack.push(start);
319
+ onStack.add(start);
320
+ while (dfsStack.length > 0) {
321
+ const frame = dfsStack[dfsStack.length - 1];
322
+ if (frame === undefined)
323
+ break;
324
+ const neighbors = adjacency.get(frame.node) ?? [];
325
+ if (frame.it < neighbors.length) {
326
+ const next = neighbors[frame.it];
327
+ frame.it += 1;
328
+ if (!index.has(next)) {
329
+ index.set(next, counter);
330
+ lowlink.set(next, counter);
331
+ counter += 1;
332
+ stack.push(next);
333
+ onStack.add(next);
334
+ dfsStack.push({ node: next, it: 0 });
335
+ }
336
+ else if (onStack.has(next)) {
337
+ const cur = lowlink.get(frame.node) ?? 0;
338
+ const nxt = index.get(next) ?? 0;
339
+ lowlink.set(frame.node, Math.min(cur, nxt));
340
+ }
341
+ }
342
+ else {
343
+ // Finished `frame.node`: propagate to parent and maybe emit a SCC.
344
+ const low = lowlink.get(frame.node) ?? 0;
345
+ const idx = index.get(frame.node) ?? 0;
346
+ if (low === idx) {
347
+ const component = [];
348
+ while (stack.length > 0) {
349
+ const w = stack.pop();
350
+ onStack.delete(w);
351
+ component.push(w);
352
+ if (w === frame.node)
353
+ break;
354
+ }
355
+ component.sort();
356
+ result.push(component);
357
+ }
358
+ dfsStack.pop();
359
+ const parent = dfsStack[dfsStack.length - 1];
360
+ if (parent !== undefined) {
361
+ const parentLow = lowlink.get(parent.node) ?? 0;
362
+ const childLow = lowlink.get(frame.node) ?? 0;
363
+ lowlink.set(parent.node, Math.min(parentLow, childLow));
364
+ }
365
+ }
366
+ }
367
+ }
368
+ for (const n of nodes) {
369
+ if (!index.has(n))
370
+ strongConnect(n);
371
+ }
372
+ return result;
373
+ }
374
+ /**
375
+ * Kahn's algorithm on a condensation (DAG over SCC indices). Returns an
376
+ * ordering of SCC indices such that each component is emitted before any
377
+ * component that depends on it. Tiebreak: smaller index first (the index
378
+ * already corresponds to SCC discovery order, which is deterministic).
379
+ */
380
+ function kahnCondensation(adj) {
381
+ const indeg = new Map();
382
+ for (const i of adj.keys())
383
+ indeg.set(i, 0);
384
+ for (const [, outs] of adj) {
385
+ for (const o of outs)
386
+ indeg.set(o, (indeg.get(o) ?? 0) + 1);
387
+ }
388
+ const ready = [];
389
+ for (const [i, d] of indeg)
390
+ if (d === 0)
391
+ ready.push(i);
392
+ ready.sort((a, b) => a - b);
393
+ const out = [];
394
+ while (ready.length > 0) {
395
+ const n = ready.shift();
396
+ out.push(n);
397
+ const outs = adj.get(n) ?? new Set();
398
+ for (const next of outs) {
399
+ const d = (indeg.get(next) ?? 1) - 1;
400
+ indeg.set(next, d);
401
+ if (d === 0) {
402
+ let i = 0;
403
+ while (i < ready.length && (ready[i] ?? 0) < next)
404
+ i += 1;
405
+ ready.splice(i, 0, next);
406
+ }
407
+ }
408
+ }
409
+ return out;
410
+ }
411
+ //# sourceMappingURL=cross-file.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cross-file.js","sourceRoot":"","sources":["../../../src/pipeline/phases/cross-file.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Dead-code phase.
3
+ *
4
+ * Runs after cross-file resolution, MRO, and community clustering so every
5
+ * referrer edge and community membership is available. For each classifiable
6
+ * Symbol in the in-memory graph we compute one of three verdicts via
7
+ * `@opencodehub/analysis::classifyDeadnessInMemory`:
8
+ *
9
+ * - `live` — at least one inbound referrer exists.
10
+ * - `dead` — non-exported, no inbound referrers.
11
+ * - `unreachable-export` — exported but no cross-module referrer.
12
+ *
13
+ * The phase denormalises the verdict onto each callable / type node so the
14
+ * downstream persistence layer writes it to the `deadness` column, and
15
+ * emits a warning log for every community whose entire membership is
16
+ * non-live (a "ghost community").
17
+ */
18
+ import type { PipelinePhase } from "../types.js";
19
+ export declare const DEAD_CODE_PHASE_NAME = "dead-code";
20
+ export interface DeadCodeOutput {
21
+ readonly classifiedCount: number;
22
+ readonly deadCount: number;
23
+ readonly unreachableExportCount: number;
24
+ readonly ghostCommunityCount: number;
25
+ readonly ghostCommunities: readonly string[];
26
+ }
27
+ export declare const deadCodePhase: PipelinePhase<DeadCodeOutput>;
28
+ //# sourceMappingURL=dead-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAaH,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAElE,eAAO,MAAM,oBAAoB,cAAc,CAAC;AAShD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,sBAAsB,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C;AAED,eAAO,MAAM,aAAa,EAAE,aAAa,CAAC,cAAc,CAMvD,CAAC"}
@@ -0,0 +1,157 @@
1
+ /**
2
+ * Dead-code phase.
3
+ *
4
+ * Runs after cross-file resolution, MRO, and community clustering so every
5
+ * referrer edge and community membership is available. For each classifiable
6
+ * Symbol in the in-memory graph we compute one of three verdicts via
7
+ * `@opencodehub/analysis::classifyDeadnessInMemory`:
8
+ *
9
+ * - `live` — at least one inbound referrer exists.
10
+ * - `dead` — non-exported, no inbound referrers.
11
+ * - `unreachable-export` — exported but no cross-module referrer.
12
+ *
13
+ * The phase denormalises the verdict onto each callable / type node so the
14
+ * downstream persistence layer writes it to the `deadness` column, and
15
+ * emits a warning log for every community whose entire membership is
16
+ * non-live (a "ghost community").
17
+ */
18
+ import { classifyDeadnessInMemory, deadCodeReferrerRelations, deadCodeSymbolKinds, } from "@opencodehub/analysis";
19
+ export const DEAD_CODE_PHASE_NAME = "dead-code";
20
+ // Inline phase-name constants so this module stays independent of other
21
+ // phases' source files — keeps the DAG declaration self-contained and avoids
22
+ // dragging in unrelated modules when the phase is imported in isolation.
23
+ const CROSS_FILE_PHASE_NAME = "crossFile";
24
+ const MRO_PHASE_NAME = "mro";
25
+ const COMMUNITIES_PHASE_NAME = "communities";
26
+ export const deadCodePhase = {
27
+ name: DEAD_CODE_PHASE_NAME,
28
+ deps: [CROSS_FILE_PHASE_NAME, MRO_PHASE_NAME, COMMUNITIES_PHASE_NAME],
29
+ async run(ctx) {
30
+ return runDeadCode(ctx);
31
+ },
32
+ };
33
+ function runDeadCode(ctx) {
34
+ const symbolKinds = deadCodeSymbolKinds();
35
+ const referrerTypes = new Set(deadCodeReferrerRelations());
36
+ // ---- 1. Project the in-memory graph into the analyzer's row shapes. ----
37
+ const symbols = [];
38
+ const filePathById = new Map();
39
+ for (const node of ctx.graph.nodes()) {
40
+ filePathById.set(node.id, node.filePath);
41
+ if (!symbolKinds.has(node.kind))
42
+ continue;
43
+ const located = node;
44
+ symbols.push({
45
+ id: node.id,
46
+ name: node.name,
47
+ kind: node.kind,
48
+ filePath: node.filePath,
49
+ startLine: typeof located.startLine === "number" ? located.startLine : 0,
50
+ isExported: located.isExported === true,
51
+ });
52
+ }
53
+ if (symbols.length === 0) {
54
+ return {
55
+ classifiedCount: 0,
56
+ deadCount: 0,
57
+ unreachableExportCount: 0,
58
+ ghostCommunityCount: 0,
59
+ ghostCommunities: [],
60
+ };
61
+ }
62
+ const symbolIdSet = new Set(symbols.map((s) => s.id));
63
+ const referrers = [];
64
+ const memberships = [];
65
+ for (const edge of ctx.graph.edges()) {
66
+ const fromId = edge.from;
67
+ const toId = edge.to;
68
+ if (edge.type === "MEMBER_OF" && symbolIdSet.has(fromId)) {
69
+ memberships.push({ symbolId: fromId, communityId: toId });
70
+ continue;
71
+ }
72
+ if (!referrerTypes.has(edge.type))
73
+ continue;
74
+ if (!symbolIdSet.has(toId))
75
+ continue;
76
+ referrers.push({
77
+ targetId: toId,
78
+ sourceFile: filePathById.get(fromId) ?? "",
79
+ });
80
+ }
81
+ // ---- 2. Classify + denormalise onto each touched Symbol node. ----------
82
+ const result = classifyDeadnessInMemory(symbols, referrers, memberships);
83
+ for (const node of ctx.graph.nodes()) {
84
+ if (!symbolKinds.has(node.kind))
85
+ continue;
86
+ const verdict = result.symbols[node.id];
87
+ if (verdict === undefined)
88
+ continue;
89
+ ctx.graph.addNode(withDeadness(node, verdict));
90
+ }
91
+ // ---- 3. Emit a warning for each ghost community. -----------------------
92
+ //
93
+ // `result.ghostCommunities` catches two very different situations:
94
+ //
95
+ // (a) every member is truly `dead` — actual leaked code in an
96
+ // application. Worth surfacing.
97
+ // (b) every member is `unreachable-export` — a library's public surface.
98
+ // From this graph's internal view no local caller reaches them,
99
+ // but the whole point of an exported symbol is that *external*
100
+ // consumers do. On sdk-python this fired 110 times; on any
101
+ // library it is pure noise.
102
+ //
103
+ // We keep the classification on each node unchanged (so `deadness` still
104
+ // rides along), but only warn on (a). We also skip tiny singleton
105
+ // communities because a lone unreferenced symbol rarely rewards the
106
+ // reader's attention at ingest time — it will show up via `codehub
107
+ // verdict` or a targeted `impact` call instead.
108
+ const MIN_COMMUNITY_MEMBERS_FOR_WARNING = 2;
109
+ const membersByCommunity = new Map();
110
+ for (const m of memberships) {
111
+ const bucket = membersByCommunity.get(m.communityId);
112
+ if (bucket !== undefined)
113
+ bucket.push(m.symbolId);
114
+ else
115
+ membersByCommunity.set(m.communityId, [m.symbolId]);
116
+ }
117
+ for (const communityId of result.ghostCommunities) {
118
+ const members = membersByCommunity.get(communityId) ?? [];
119
+ if (members.length < MIN_COMMUNITY_MEMBERS_FOR_WARNING)
120
+ continue;
121
+ let allDead = true;
122
+ for (const memberId of members) {
123
+ if (result.symbols[memberId] !== "dead") {
124
+ allDead = false;
125
+ break;
126
+ }
127
+ }
128
+ if (!allDead)
129
+ continue;
130
+ ctx.onProgress?.({
131
+ phase: DEAD_CODE_PHASE_NAME,
132
+ kind: "warn",
133
+ message: `dead-code: ghost community detected (${communityId}) — ${members.length} members, all dead`,
134
+ });
135
+ }
136
+ return {
137
+ classifiedCount: symbols.length,
138
+ deadCount: result.dead.length,
139
+ unreachableExportCount: result.unreachableExports.length,
140
+ ghostCommunityCount: result.ghostCommunities.length,
141
+ ghostCommunities: result.ghostCommunities,
142
+ };
143
+ }
144
+ /**
145
+ * Return a copy of `node` with `deadness` populated. Only callable / type
146
+ * kinds carry the field in the schema — the caller is responsible for
147
+ * filtering to those kinds. Retains every other field via spread so the
148
+ * graph's "most-defined-wins" deduplication keeps the new node. We round-trip
149
+ * through `unknown` because `GraphNode` is a tagged union and not every
150
+ * variant declares a `deadness` key — TypeScript rejects the literal spread
151
+ * otherwise.
152
+ */
153
+ function withDeadness(node, deadness) {
154
+ const extended = { ...node, deadness };
155
+ return extended;
156
+ }
157
+ //# sourceMappingURL=dead-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-code.js","sourceRoot":"","sources":["../../../src/pipeline/phases/dead-code.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Default pipeline phase set — full 14-phase DAG.
3
+ *
4
+ * The runner treats this array as the canonical ordering source. Adding or
5
+ * removing a phase is a one-line change here; the DAG validator catches
6
+ * missing dependencies and cycles on the next run.
7
+ *
8
+ * Phase ordering (topologically):
9
+ * scan → profile
10
+ * → structure → markdown → parse → complexity → routes → tools →
11
+ * orm → crossFile → mro →
12
+ * communities → dead-code →
13
+ * processes → temporal → annotate
14
+ *
15
+ * `markdown` depends on `structure` and could run alongside `parse`; the
16
+ * runner serialises everything since determinism dominates the latency
17
+ * win at MVP scale. `profile` and `temporal` are pure leaves on `scan`
18
+ * and could run in parallel with any post-scan phase once the runner
19
+ * learns to fan out. `profile` emits a single ProjectProfile node that
20
+ * scanner phases will consult to decide which scanners to invoke.
21
+ */
22
+ import type { PipelinePhase } from "../types.js";
23
+ export declare const DEFAULT_PHASES: readonly PipelinePhase[];
24
+ //# sourceMappingURL=default-set.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-set.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/default-set.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAgCjD,eAAO,MAAM,cAAc,EAAE,SAAS,aAAa,EAgFlD,CAAC"}