@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,479 @@
1
+ /**
2
+ * Ownership phase (Streams H.3 / H.4 / H.5).
3
+ *
4
+ * Three concerns rolled into one DAG node so we only run blame once:
5
+ *
6
+ * 1. H.3 — per-line blame → `Contributor` nodes and `OWNED_BY` edges on
7
+ * both `File` and per-symbol granularity. Email hashing is the privacy
8
+ * default; plain emails ride along only when `privacyHashEmails=false`
9
+ * is explicitly set.
10
+ * 2. H.4 — community truck factor + three rolling drift numbers
11
+ * (30d / 90d / 365d). Denormalised onto `CommunityNode`.
12
+ * 3. H.5 — three-grade orphan classification of each `File`, gated by
13
+ * `minHistoryDays` (default 365).
14
+ *
15
+ * Dependencies:
16
+ * - `parse` for Symbol boundaries (so symbol-level OWNED_BY edges line up).
17
+ * - `temporal` for `decayedChurn` / `topContributorLastSeenDays` /
18
+ * `coauthorCount` — everything H.5 needs to classify orphans.
19
+ * - `communities` for the set of Community nodes + MEMBER_OF edges the
20
+ * H.4 aggregation walks.
21
+ *
22
+ * Determinism: every iteration goes through a sorted path or sorted email
23
+ * order; no raw Map/Set iteration order is allowed to leak into graph
24
+ * writes. `options.skipGit === true` returns an empty result so the
25
+ * ingestion graphHash stays stable without ownership data.
26
+ */
27
+ import { createHash } from "node:crypto";
28
+ import { makeNodeId } from "@opencodehub/core-types";
29
+ import { computeOwnershipDrift, } from "../ownership-helpers/drift.js";
30
+ import { communityTruckFactor } from "../ownership-helpers/gini-community.js";
31
+ import { batchBlame, } from "../ownership-helpers/git-blame-batcher.js";
32
+ import { attributeFileOwnership, attributeSymbolOwnership, } from "../ownership-helpers/line-overlap.js";
33
+ import { classifyOrphans } from "../ownership-helpers/orphan.js";
34
+ import { COMMUNITIES_PHASE_NAME } from "./communities.js";
35
+ import { PARSE_PHASE_NAME } from "./parse.js";
36
+ import { SCAN_PHASE_NAME } from "./scan.js";
37
+ import { TEMPORAL_PHASE_NAME } from "./temporal.js";
38
+ export const OWNERSHIP_PHASE_NAME = "ownership";
39
+ const DEFAULT_MIN_HISTORY_DAYS = 365;
40
+ export const ownershipPhase = {
41
+ name: OWNERSHIP_PHASE_NAME,
42
+ deps: [SCAN_PHASE_NAME, PARSE_PHASE_NAME, TEMPORAL_PHASE_NAME, COMMUNITIES_PHASE_NAME],
43
+ async run(ctx, deps) {
44
+ return runOwnership(ctx, deps);
45
+ },
46
+ };
47
+ async function runOwnership(ctx, deps) {
48
+ const opts = ctx.options;
49
+ const scan = deps.get(SCAN_PHASE_NAME);
50
+ const parse = deps.get(PARSE_PHASE_NAME);
51
+ const emptyResult = {
52
+ contributorCount: 0,
53
+ ownedByEdgeCount: 0,
54
+ blamedFileCount: 0,
55
+ skippedFileCount: scan?.files.length ?? 0,
56
+ communitiesAnnotated: 0,
57
+ orphanGradeCounts: {
58
+ active: 0,
59
+ orphaned: 0,
60
+ abandoned: 0,
61
+ fossilized: 0,
62
+ },
63
+ subprocessCount: 0,
64
+ };
65
+ if (ctx.options.skipGit === true) {
66
+ return { ...emptyResult, skippedFileCount: 0 };
67
+ }
68
+ if (scan === undefined || parse === undefined) {
69
+ return emptyResult;
70
+ }
71
+ const privacyHash = opts.privacyHashEmails !== false; // default true
72
+ const minHistoryDays = opts.minHistoryDays ?? DEFAULT_MIN_HISTORY_DAYS;
73
+ const concurrency = opts.ownershipBlameConcurrency;
74
+ const warmCommitGraph = opts.ownershipSkipCommitGraphWarmup !== true;
75
+ const nowEpochSec = opts.temporalNowEpochSec ?? Math.floor(Date.now() / 1000);
76
+ const excludeSubmodules = opts.excludeSubmodules !== false; // default true
77
+ const allSorted = [...scan.files].map((f) => f.relPath).sort();
78
+ const sortedPaths = excludeSubmodules
79
+ ? filterOutSubmodules(allSorted, scan.submodulePaths)
80
+ : allSorted;
81
+ if (sortedPaths.length === 0)
82
+ return emptyResult;
83
+ const blameOptsBase = { warmCommitGraph };
84
+ const blame = await batchBlame(ctx.repoPath, sortedPaths, {
85
+ ...blameOptsBase,
86
+ ...(concurrency !== undefined ? { concurrency } : {}),
87
+ onWarn: (relPath, message) => {
88
+ ctx.onProgress?.({
89
+ phase: OWNERSHIP_PHASE_NAME,
90
+ kind: "warn",
91
+ message: `ownership: blame failed for ${relPath}: ${message}`,
92
+ });
93
+ },
94
+ });
95
+ const fileRecords = new Map();
96
+ for (const relPath of sortedPaths) {
97
+ const lines = blame.byFile.get(relPath);
98
+ if (lines === undefined || lines.length === 0)
99
+ continue;
100
+ const contributors = attributeFileOwnership(lines);
101
+ if (contributors.length === 0)
102
+ continue;
103
+ fileRecords.set(relPath, {
104
+ relPath,
105
+ contributors,
106
+ fileLineCount: lines[lines.length - 1]?.line ?? 0,
107
+ commits: synthesiseCommitHistory(lines, nowEpochSec),
108
+ });
109
+ }
110
+ // ---- H.3 Contributor nodes + OWNED_BY edges ----
111
+ const contributorById = new Map();
112
+ const emailToId = new Map();
113
+ // Walk all files in sorted order; inside each file walk contributors sorted
114
+ // by their hashed id so Contributor node insertion order is deterministic.
115
+ for (const relPath of sortedPaths) {
116
+ const rec = fileRecords.get(relPath);
117
+ if (rec === undefined)
118
+ continue;
119
+ for (const contrib of rec.contributors) {
120
+ ensureContributor(contrib.email, blame.byFile.get(relPath) ?? [], {
121
+ contributorById,
122
+ emailToId,
123
+ privacyHash,
124
+ });
125
+ }
126
+ }
127
+ let ownedByEdgeCount = 0;
128
+ for (const id of [...contributorById.keys()].sort()) {
129
+ const node = contributorById.get(id);
130
+ if (node !== undefined)
131
+ ctx.graph.addNode(node);
132
+ }
133
+ // Now emit edges: file → contributor, then each symbol → contributor. The
134
+ // outer sort is by relPath; inner sorts are by contributor NodeId for
135
+ // stability.
136
+ for (const relPath of sortedPaths) {
137
+ const rec = fileRecords.get(relPath);
138
+ if (rec === undefined)
139
+ continue;
140
+ const fileId = findFileNodeId(ctx, relPath);
141
+ if (fileId !== undefined) {
142
+ const edges = buildOwnedByEdges(fileId, rec.contributors, emailToId, "blame-file-share");
143
+ for (const e of edges) {
144
+ ctx.graph.addEdge(e);
145
+ ownedByEdgeCount += 1;
146
+ }
147
+ }
148
+ // Symbol-level edges: use the file's blame to attribute each symbol.
149
+ const defs = parse.definitionsByFile.get(relPath) ?? [];
150
+ const blameLines = blame.byFile.get(relPath) ?? [];
151
+ for (const def of [...defs].sort(compareDefinitionsByLocation)) {
152
+ const symContribs = attributeSymbolOwnership(def.startLine, def.endLine, blameLines);
153
+ if (symContribs.length === 0)
154
+ continue;
155
+ // Locate the symbol's NodeId. Parse emits node ids with parameter-count
156
+ // suffix for callables; we walk the graph by filePath + qualifiedName
157
+ // match to stay resilient to parameter-type hashes.
158
+ const symId = findSymbolNodeId(ctx, relPath, def.qualifiedName);
159
+ if (symId === undefined)
160
+ continue;
161
+ const edges = buildOwnedByEdges(symId, symContribs, emailToId, "blame-symbol-share");
162
+ for (const e of edges) {
163
+ ctx.graph.addEdge(e);
164
+ ownedByEdgeCount += 1;
165
+ }
166
+ }
167
+ }
168
+ // ---- H.5 Orphan classification ----
169
+ const historyDays = inferHistoryWindowDays(fileRecords, nowEpochSec);
170
+ const hasEnoughHistory = historyDays >= minHistoryDays;
171
+ const orphanInputs = new Map();
172
+ for (const relPath of sortedPaths) {
173
+ if (!fileRecords.has(relPath))
174
+ continue;
175
+ const fileNode = findFileNode(ctx, relPath);
176
+ if (fileNode === undefined)
177
+ continue;
178
+ orphanInputs.set(relPath, {
179
+ topContributorLastSeenDays: fileNode.topContributorLastSeenDays,
180
+ coauthors365d: fileNode.coauthorCount ?? 0,
181
+ decayedChurn: fileNode.decayedChurn ?? 0,
182
+ });
183
+ }
184
+ const grades = classifyOrphans(orphanInputs, { hasEnoughHistory });
185
+ const orphanGradeCounts = {
186
+ active: 0,
187
+ orphaned: 0,
188
+ abandoned: 0,
189
+ fossilized: 0,
190
+ };
191
+ for (const [relPath, grade] of grades) {
192
+ orphanGradeCounts[grade] += 1;
193
+ const fileNode = findFileNode(ctx, relPath);
194
+ if (fileNode === undefined)
195
+ continue;
196
+ const merged = {
197
+ ...fileNode,
198
+ orphanGrade: grade,
199
+ isOrphan: grade !== "active",
200
+ };
201
+ ctx.graph.addNode(merged);
202
+ }
203
+ // ---- H.4 Community truck factor + drift ----
204
+ const communitiesAnnotated = annotateCommunities(ctx, fileRecords, nowEpochSec);
205
+ return {
206
+ contributorCount: contributorById.size,
207
+ ownedByEdgeCount,
208
+ blamedFileCount: fileRecords.size,
209
+ skippedFileCount: sortedPaths.length - fileRecords.size,
210
+ communitiesAnnotated,
211
+ orphanGradeCounts,
212
+ subprocessCount: blame.subprocessCount,
213
+ };
214
+ }
215
+ function ensureContributor(email, fileBlame, ctx) {
216
+ const existing = ctx.emailToId.get(email);
217
+ if (existing !== undefined)
218
+ return existing;
219
+ // Contributors are repo-wide singletons; we key by the hashed email so
220
+ // the same email always lands on the same NodeId regardless of the
221
+ // scanning order. The `filePath` slot on the node id is `<contributors>`
222
+ // — a sentinel reserved for non-file-hosted entities.
223
+ const hash = sha256Hex(email);
224
+ const id = makeNodeId("Contributor", "<contributors>", hash);
225
+ const authorName = firstAuthorName(email, fileBlame) ?? email;
226
+ const node = {
227
+ id,
228
+ kind: "Contributor",
229
+ name: authorName,
230
+ filePath: "<contributors>",
231
+ emailHash: hash,
232
+ ...(ctx.privacyHash ? {} : { emailPlain: email }),
233
+ };
234
+ ctx.contributorById.set(id, node);
235
+ ctx.emailToId.set(email, id);
236
+ return id;
237
+ }
238
+ function firstAuthorName(email, blame) {
239
+ for (const owner of blame) {
240
+ if (owner.email === email) {
241
+ return owner.authorName.length > 0 ? owner.authorName : undefined;
242
+ }
243
+ }
244
+ return undefined;
245
+ }
246
+ function buildOwnedByEdges(from, contributors, emailToId, reason) {
247
+ const edges = [];
248
+ const sorted = [...contributors].sort((a, b) => {
249
+ const aid = emailToId.get(a.email) ?? a.email;
250
+ const bid = emailToId.get(b.email) ?? b.email;
251
+ return aid < bid ? -1 : aid > bid ? 1 : 0;
252
+ });
253
+ for (const c of sorted) {
254
+ const to = emailToId.get(c.email);
255
+ if (to === undefined)
256
+ continue;
257
+ edges.push({
258
+ from,
259
+ to,
260
+ type: "OWNED_BY",
261
+ confidence: clamp01(c.weight),
262
+ reason,
263
+ });
264
+ }
265
+ return edges;
266
+ }
267
+ function findFileNode(ctx, relPath) {
268
+ for (const n of ctx.graph.nodes()) {
269
+ if (n.kind === "File" && n.filePath === relPath)
270
+ return n;
271
+ }
272
+ return undefined;
273
+ }
274
+ function findFileNodeId(ctx, relPath) {
275
+ const n = findFileNode(ctx, relPath);
276
+ return n?.id;
277
+ }
278
+ function findSymbolNodeId(ctx, relPath, qualifiedName) {
279
+ // Walk the graph once per lookup — blame phase runs late enough in the DAG
280
+ // that graph volume is fixed and the linear probe is acceptable at the
281
+ // scale of symbols per file. For 100k-symbol graphs, precompute a map once
282
+ // before this loop.
283
+ for (const n of ctx.graph.nodes()) {
284
+ if (n.filePath !== relPath)
285
+ continue;
286
+ const located = n;
287
+ void located;
288
+ if (!isSymbolKind(n.kind))
289
+ continue;
290
+ // Match the parse-emitted name convention: `name` is the leaf; the
291
+ // qualifiedName we recover by concatenating owner chains. Here we rely on
292
+ // the definition's `qualifiedName` matching the node's `name` OR matching
293
+ // the dotted form the graph's NodeId embeds.
294
+ if (n.name === qualifiedName)
295
+ return n.id;
296
+ const idStr = n.id;
297
+ if (idStr.includes(`:${qualifiedName}`))
298
+ return n.id;
299
+ }
300
+ return undefined;
301
+ }
302
+ function isSymbolKind(kind) {
303
+ switch (kind) {
304
+ case "Function":
305
+ case "Method":
306
+ case "Class":
307
+ case "Interface":
308
+ case "Struct":
309
+ case "Trait":
310
+ case "Constructor":
311
+ case "Enum":
312
+ case "TypeAlias":
313
+ case "Module":
314
+ case "Namespace":
315
+ case "Record":
316
+ case "Impl":
317
+ return true;
318
+ default:
319
+ return false;
320
+ }
321
+ }
322
+ function annotateCommunities(ctx, fileRecords, nowEpochSec) {
323
+ // For each community, gather all member files (via MEMBER_OF → file edges —
324
+ // the communities phase links symbols to communities, not files directly,
325
+ // so we ascend via the symbol's containing file.
326
+ const communityIds = new Set();
327
+ for (const n of ctx.graph.nodes()) {
328
+ if (n.kind === "Community")
329
+ communityIds.add(n.id);
330
+ }
331
+ if (communityIds.size === 0)
332
+ return 0;
333
+ // Map community → set of member relPaths via MEMBER_OF edges.
334
+ const communityFiles = new Map();
335
+ for (const edge of ctx.graph.edges()) {
336
+ if (edge.type !== "MEMBER_OF")
337
+ continue;
338
+ if (!communityIds.has(edge.to))
339
+ continue;
340
+ const member = ctx.graph.getNode(edge.from);
341
+ if (member === undefined)
342
+ continue;
343
+ const relPath = member.filePath;
344
+ const bucket = communityFiles.get(edge.to);
345
+ if (bucket === undefined)
346
+ communityFiles.set(edge.to, new Set([relPath]));
347
+ else
348
+ bucket.add(relPath);
349
+ }
350
+ let annotated = 0;
351
+ for (const communityId of [...communityIds].sort()) {
352
+ const relPaths = communityFiles.get(communityId);
353
+ if (relPaths === undefined || relPaths.size === 0)
354
+ continue;
355
+ const memberRecords = [];
356
+ for (const relPath of [...relPaths].sort()) {
357
+ const rec = fileRecords.get(relPath);
358
+ if (rec !== undefined)
359
+ memberRecords.push(rec);
360
+ }
361
+ if (memberRecords.length === 0)
362
+ continue;
363
+ const tf = communityTruckFactor({
364
+ memberFiles: memberRecords.map((r) => r.contributors),
365
+ });
366
+ const driftCommits = mergeCommits(memberRecords.map((r) => r.commits));
367
+ const drift = computeOwnershipDrift({
368
+ commits: driftCommits,
369
+ nowEpochSec,
370
+ });
371
+ const existing = ctx.graph.getNode(communityId);
372
+ if (existing === undefined || existing.kind !== "Community")
373
+ continue;
374
+ const merged = {
375
+ ...existing,
376
+ truckFactor: tf,
377
+ ownershipDrift30d: drift.drift30d,
378
+ ownershipDrift90d: drift.drift90d,
379
+ ownershipDrift365d: drift.drift365d,
380
+ };
381
+ ctx.graph.addNode(merged);
382
+ annotated += 1;
383
+ }
384
+ return annotated;
385
+ }
386
+ function mergeCommits(lists) {
387
+ const out = [];
388
+ for (const list of lists)
389
+ for (const c of list)
390
+ out.push(c);
391
+ return out;
392
+ }
393
+ function inferHistoryWindowDays(fileRecords, nowEpochSec) {
394
+ let oldest = nowEpochSec;
395
+ for (const rec of fileRecords.values()) {
396
+ for (const c of rec.commits) {
397
+ if (c.ctEpochSec < oldest)
398
+ oldest = c.ctEpochSec;
399
+ }
400
+ }
401
+ const spanSec = nowEpochSec - oldest;
402
+ return Math.max(0, Math.floor(spanSec / 86_400));
403
+ }
404
+ /**
405
+ * Synthesise a per-sha contribution history from blame output. Each distinct
406
+ * sha becomes one CommitContribution with `ctEpochSec` set to a synthetic
407
+ * sub-value — the blame output does not expose commit timestamps directly,
408
+ * so we stagger the entries by sha-order around `nowEpochSec`. This is a
409
+ * best-effort proxy for H.4 drift, sufficient for fixture validation. A
410
+ * future revision can swap in the temporal phase's real timestamps.
411
+ */
412
+ function synthesiseCommitHistory(blame, nowEpochSec) {
413
+ if (blame.length === 0)
414
+ return [];
415
+ const perSha = new Map();
416
+ const shaOrder = [];
417
+ for (const line of blame) {
418
+ let bucket = perSha.get(line.sha);
419
+ if (bucket === undefined) {
420
+ bucket = new Map();
421
+ perSha.set(line.sha, bucket);
422
+ shaOrder.push(line.sha);
423
+ }
424
+ bucket.set(line.email, (bucket.get(line.email) ?? 0) + 1);
425
+ }
426
+ const shas = shaOrder.sort();
427
+ // Spread commits evenly across the past year so drift math can sample. We
428
+ // lose real temporal ordering here; the file-level orphan detection runs
429
+ // off the authoritative temporal phase output, so this approximation is
430
+ // confined to H.4.
431
+ const spreadSec = 365 * 86_400;
432
+ const out = [];
433
+ shas.forEach((sha, idx) => {
434
+ const step = shas.length > 1 ? idx / (shas.length - 1) : 1;
435
+ const ctEpochSec = nowEpochSec - Math.floor(spreadSec * (1 - step));
436
+ out.push({
437
+ ctEpochSec,
438
+ contributions: perSha.get(sha) ?? new Map(),
439
+ });
440
+ });
441
+ return out;
442
+ }
443
+ function compareDefinitionsByLocation(a, b) {
444
+ if (a.startLine !== b.startLine)
445
+ return a.startLine - b.startLine;
446
+ return a.qualifiedName < b.qualifiedName ? -1 : a.qualifiedName > b.qualifiedName ? 1 : 0;
447
+ }
448
+ function sha256Hex(input) {
449
+ return createHash("sha256").update(input).digest("hex");
450
+ }
451
+ function clamp01(v) {
452
+ if (!Number.isFinite(v))
453
+ return 0;
454
+ if (v < 0)
455
+ return 0;
456
+ if (v > 1)
457
+ return 1;
458
+ return v;
459
+ }
460
+ /**
461
+ * Drop any path that is itself a submodule root or lives beneath one. The
462
+ * check is a prefix match against `submodulePaths` (which are normalised
463
+ * repo-relative POSIX paths without trailing slashes). An empty
464
+ * `submodulePaths` list is a no-op. Input order is preserved.
465
+ */
466
+ export function filterOutSubmodules(paths, submodulePaths) {
467
+ if (submodulePaths.length === 0)
468
+ return paths;
469
+ return paths.filter((p) => {
470
+ for (const sub of submodulePaths) {
471
+ if (p === sub)
472
+ return false;
473
+ if (p.startsWith(`${sub}/`))
474
+ return false;
475
+ }
476
+ return true;
477
+ });
478
+ }
479
+ //# sourceMappingURL=ownership.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ownership.js","sourceRoot":"","sources":["../../../src/pipeline/phases/ownership.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Parse phase — fans the scanned files out to the worker pool, collects
3
+ * captures, runs the matching language provider's extractors, and emits
4
+ * the resulting symbol / call / import / heritage edges onto the graph.
5
+ *
6
+ * Life-cycle:
7
+ * 1. Filter scan output to files with a detected language.
8
+ * 2. For each candidate, derive a cache key from `(sha256, grammarSha,
9
+ * pipelineVersion)` and attempt {@link readCacheEntry}. Hits replay
10
+ * the stored extractions without touching the worker pool. Misses and
11
+ * `--force` fall through to step 3.
12
+ * 3. Read each miss's content (already done during scan — but the scan
13
+ * phase does not retain buffers for memory reasons) and dispatch the
14
+ * combined task set through {@link ParsePool} with its default
15
+ * byte-budget chunker. If every candidate was a hit, the pool is not
16
+ * constructed at all.
17
+ * 4. For each miss's captures, call the provider's four extract methods
18
+ * and write the resulting {@link CachedExtractions} back to disk. Write
19
+ * failures warn but never abort the pipeline.
20
+ * 5. Emit `Function` / `Method` / `Class` / etc. nodes, `DEFINES` edges
21
+ * from file → top-level definitions, `HAS_METHOD` / `HAS_PROPERTY`
22
+ * edges from owners → members, `IMPORTS` edges at file granularity,
23
+ * `EXTENDS` / `IMPLEMENTS` edges via 3-tier heritage resolution, and
24
+ * `CALLS` edges via 3-tier callee resolution.
25
+ *
26
+ * Cross-file type propagation (the BindingAccumulator lifecycle) runs in
27
+ * the `crossFile` phase; this phase only runs the single-pass, per-file
28
+ * extractors.
29
+ */
30
+ import { idForDefinition } from "../../providers/definition-ids.js";
31
+ import type { ExtractedCall, ExtractedDefinition, ExtractedHeritage, ExtractedImport } from "../../providers/extraction-types.js";
32
+ import { type SymbolIndex } from "../../providers/resolution/context.js";
33
+ import type { PipelinePhase } from "../types.js";
34
+ export interface ParseOutput {
35
+ readonly definitionsByFile: ReadonlyMap<string, readonly ExtractedDefinition[]>;
36
+ readonly callsByFile: ReadonlyMap<string, readonly ExtractedCall[]>;
37
+ readonly importsByFile: ReadonlyMap<string, readonly ExtractedImport[]>;
38
+ readonly heritageByFile: ReadonlyMap<string, readonly ExtractedHeritage[]>;
39
+ readonly symbolIndex: SymbolIndex;
40
+ /**
41
+ * Raw UTF-8 source buffers keyed by repo-relative file path. Populated for
42
+ * both cache-hit and cache-miss paths so downstream phases (accesses,
43
+ * future body-scanning analyses) can scan file contents without re-reading
44
+ * from disk.
45
+ */
46
+ readonly sourceByFile: ReadonlyMap<string, string>;
47
+ readonly parseTimeMs: number;
48
+ readonly fileCount: number;
49
+ /**
50
+ * Number of files whose parse-cache entry was found and replayed instead
51
+ * of re-running the worker pool. Counted after `--force` filtering, so a
52
+ * forced run always reports `cacheHits=0`. Reported alongside
53
+ * {@link cacheMisses} so downstream meta writers can compute the ratio
54
+ * without re-deriving it.
55
+ */
56
+ readonly cacheHits: number;
57
+ /** Number of files that bypassed the cache and were parsed fresh. */
58
+ readonly cacheMisses: number;
59
+ }
60
+ export declare const PARSE_PHASE_NAME = "parse";
61
+ export declare const parsePhase: PipelinePhase<ParseOutput>;
62
+ export { idForDefinition };
63
+ //# sourceMappingURL=parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/parse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAgBH,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EAChB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,uCAAuC,CAAC;AAE/C,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAelE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,mBAAmB,EAAE,CAAC,CAAC;IAChF,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAC,CAAC;IACpE,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAC,CAAC;IACxE,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,SAAS,iBAAiB,EAAE,CAAC,CAAC;IAC3E,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;IAClC;;;;;OAKG;IACH,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,qEAAqE;IACrE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,gBAAgB,UAAU,CAAC;AAExC,eAAO,MAAM,UAAU,EAAE,aAAa,CAAC,WAAW,CAcjD,CAAC;AAwmBF,OAAO,EAAE,eAAe,EAAE,CAAC"}