@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,620 @@
1
+ /**
2
+ * Processes phase — approximate end-to-end request flows by BFS-ing
3
+ * forward along the CALLS graph from scored entry points.
4
+ *
5
+ * Entry-point scoring:
6
+ * score =
7
+ * (callees / (callers + 1)) // high fan-out, low fan-in = flow start
8
+ * + (isExported ? 0.5 : 0)
9
+ * + (isReExportedFromEntry ? 0.4 : 0) // re-exported from index/__init__/mod/lib
10
+ * + filename hint (+0.3 when the basename stem matches a known entry-file
11
+ * hint; e.g. `main.rs`, `routes.py`)
12
+ * + dir hint (+0.3 when the file sits under a framework-specific
13
+ * handler directory; e.g. app/(star-star)/route.ts,
14
+ * controllers/(star-star), app/Http/Controllers/(star-star))
15
+ * + name hint (+0.3 for verbs like handle*, *Controller, *Handler,
16
+ * *Service, *Middleware, serveXxx, etc.)
17
+ * − ∞ for files with /test/ or /spec/ segments.
18
+ *
19
+ * We keep the top N entry points where N scales with the symbol count,
20
+ * clamped to [20, 300].
21
+ *
22
+ * BFS:
23
+ * - Max depth 10
24
+ * - Max branching 4 per node (neighbours sorted by id; take the first 4)
25
+ * - Max 30 unique nodes per process
26
+ * - Only CALLS edges with confidence ≥ 0.5 are traversed
27
+ *
28
+ * Only processes with ≥ 2 PROCESS_STEP edges make it into the graph; trivial
29
+ * one-hop flows are dropped.
30
+ *
31
+ * Route / Tool linkage: when a Route or Tool node's handler file matches
32
+ * the entry point's file, we emit an `ENTRY_POINT_OF` edge from the
33
+ * Route/Tool to the Process.
34
+ *
35
+ * Cohesion label: the process's `inferredLabel` is derived by
36
+ * tokenising every symbol that participates in the flow (camel/snake/kebab
37
+ * splits), dropping stop-verbs, and joining the top-3 tokens by frequency.
38
+ * Fallback to `<entry-name>-flow` when too few informative tokens exist.
39
+ */
40
+ import { makeNodeId } from "@opencodehub/core-types";
41
+ import { COMMUNITIES_PHASE_NAME } from "./communities.js";
42
+ import { resolveIncrementalView } from "./incremental-helper.js";
43
+ import { INCREMENTAL_SCOPE_PHASE_NAME } from "./incremental-scope.js";
44
+ import { ROUTES_PHASE_NAME } from "./routes.js";
45
+ import { STRUCTURE_PHASE_NAME } from "./structure.js";
46
+ import { TOOLS_PHASE_NAME } from "./tools.js";
47
+ export const PROCESSES_PHASE_NAME = "processes";
48
+ const MAX_DEPTH = 10;
49
+ const MAX_BRANCHING = 4;
50
+ const MAX_NODES_PER_PROCESS = 30;
51
+ const MIN_STEPS_PER_PROCESS = 2;
52
+ const MIN_ENTRY_POINTS = 20;
53
+ const MAX_ENTRY_POINTS = 300;
54
+ const MIN_EDGE_CONFIDENCE = 0.5;
55
+ const CALLABLE_KINDS = new Set(["Function", "Method", "Constructor"]);
56
+ /**
57
+ * Filename stems that hint at an entry point across all 14 supported
58
+ * languages (Python/Django/Flask/FastAPI, Express/Next.js/NestJS, Spring,
59
+ * ASP.NET, Axum/Actix, Rails, Laravel, Kotlin, Swift, PHP, Dart). Matched
60
+ * against the basename stem (before the first `.`).
61
+ */
62
+ const FILE_HINTS = [
63
+ "main",
64
+ "handler",
65
+ "handlers",
66
+ "controller",
67
+ "controllers",
68
+ "route",
69
+ "routes",
70
+ "router",
71
+ "view",
72
+ "views",
73
+ "api",
74
+ "index",
75
+ "mod",
76
+ "lib",
77
+ "app",
78
+ "application",
79
+ "server",
80
+ "entry",
81
+ "urls",
82
+ "endpoints",
83
+ "middleware",
84
+ "service",
85
+ "services",
86
+ "resource",
87
+ "resources",
88
+ "page",
89
+ "pages",
90
+ ];
91
+ /**
92
+ * Directory-path substrings that hint at handler code. Framework-aware:
93
+ * - Next.js App Router: `app/**\/route.*`, `pages/api/**`
94
+ * - Express / NestJS: `controllers/**`, `routes/**`, `handlers/**`
95
+ * - Gin/Go: `cmd/**`, `handlers/**`, `api/**`
96
+ * - Spring Boot: captured via NAME_SUFFIXES (`*Controller.java`)
97
+ * - ASP.NET: captured via NAME_SUFFIXES (`*Controller.cs`)
98
+ * - Axum/Actix: `src/handlers/**`, `src/routes/**`
99
+ * - Rails: `app/controllers/**`
100
+ * - Laravel: `app/http/controllers/**`
101
+ * - Kotlin: captured via NAME_SUFFIXES (`*Controller.kt`)
102
+ * - Swift: `sources/*\/handlers/**`
103
+ * - PHP: `src/controller/**`, `public/index.php`
104
+ * - Dart: `lib/pages/**`
105
+ *
106
+ * All comparisons are lowercase path-substring matches, so subtle variants
107
+ * (e.g. `Controllers/` vs `controllers/`) still hit.
108
+ */
109
+ const DIR_HINT_SUBSTRINGS = [
110
+ "/app/api/",
111
+ "/pages/api/",
112
+ "/app/controllers/",
113
+ "/app/http/controllers/",
114
+ "/controllers/",
115
+ "/handlers/",
116
+ "/routes/",
117
+ "/router/",
118
+ "/views/",
119
+ "/endpoints/",
120
+ "/api/",
121
+ "/cmd/",
122
+ "/src/handlers/",
123
+ "/src/routes/",
124
+ "/src/controller/",
125
+ "/src/controllers/",
126
+ "/lib/pages/",
127
+ "/handlers.",
128
+ ];
129
+ /** Suffix patterns within a full relative path that also count as dir hints. */
130
+ const PATH_SUFFIX_HINTS = [
131
+ "/route.ts",
132
+ "/route.tsx",
133
+ "/route.js",
134
+ "/route.mjs",
135
+ "/handler.ts",
136
+ "/handler.py",
137
+ "/main.go",
138
+ "/main.rs",
139
+ "/mod.rs",
140
+ "/lib.rs",
141
+ "/main.py",
142
+ "/urls.py",
143
+ "/routes.py",
144
+ "/views.py",
145
+ "/public/index.php",
146
+ ];
147
+ /**
148
+ * Identifier prefixes that hint at an entry point. Stored lowercase; we
149
+ * match either `prefixCamel` or `prefix_snake` at the identifier start.
150
+ */
151
+ const NAME_PREFIXES = [
152
+ "handle",
153
+ "on",
154
+ "serve",
155
+ "main",
156
+ "route",
157
+ "dispatch",
158
+ "get",
159
+ "post",
160
+ "put",
161
+ "patch",
162
+ "delete",
163
+ "do",
164
+ "process",
165
+ "index",
166
+ "show",
167
+ "list",
168
+ "create",
169
+ "update",
170
+ "destroy",
171
+ "setup",
172
+ "run",
173
+ ];
174
+ /** Identifier suffixes that hint at an entry-point role. */
175
+ const NAME_SUFFIXES = [
176
+ "Controller",
177
+ "Handler",
178
+ "Middleware",
179
+ "Service",
180
+ "Endpoint",
181
+ "Resource",
182
+ "View",
183
+ "Route",
184
+ "RouteHandler",
185
+ "Action",
186
+ ];
187
+ /** Files that often re-export symbols as a module's public API. */
188
+ const REEXPORT_FILE_BASENAMES = new Set([
189
+ "index.ts",
190
+ "index.tsx",
191
+ "index.js",
192
+ "index.mjs",
193
+ "index.cjs",
194
+ "index.jsx",
195
+ "mod.rs",
196
+ "lib.rs",
197
+ "__init__.py",
198
+ "main.py",
199
+ "index.php",
200
+ "index.dart",
201
+ "library.dart",
202
+ ]);
203
+ /** Stop-words we exclude when deriving cohesion labels. */
204
+ const STOP_TOKENS = new Set([
205
+ "get",
206
+ "set",
207
+ "is",
208
+ "has",
209
+ "new",
210
+ "make",
211
+ "do",
212
+ "handle",
213
+ "on",
214
+ "to",
215
+ "from",
216
+ "of",
217
+ "the",
218
+ "a",
219
+ "an",
220
+ "or",
221
+ "and",
222
+ "for",
223
+ "with",
224
+ "fn",
225
+ "func",
226
+ "function",
227
+ "method",
228
+ "impl",
229
+ "cls",
230
+ "self",
231
+ "this",
232
+ "ctx",
233
+ "run",
234
+ "exec",
235
+ "init",
236
+ "start",
237
+ "stop",
238
+ "main",
239
+ ]);
240
+ const MAX_COHESION_TOKENS = 3;
241
+ const MIN_TOKEN_LEN = 3;
242
+ export const processesPhase = {
243
+ name: PROCESSES_PHASE_NAME,
244
+ deps: [
245
+ COMMUNITIES_PHASE_NAME,
246
+ ROUTES_PHASE_NAME,
247
+ TOOLS_PHASE_NAME,
248
+ STRUCTURE_PHASE_NAME,
249
+ INCREMENTAL_SCOPE_PHASE_NAME,
250
+ ],
251
+ async run(ctx) {
252
+ return runProcesses(ctx);
253
+ },
254
+ };
255
+ function runProcesses(ctx) {
256
+ // ---- Incremental carry-forward short-circuit. -------------------------
257
+ //
258
+ // BFS re-rooting is expensive and its outputs (Process nodes, PROCESS_STEP
259
+ // edges, ENTRY_POINT_OF edges) are deterministic functions of the post-
260
+ // parse call graph + route/tool set. When the incremental view is active
261
+ // the current call graph matches the prior run under no-semantic-change,
262
+ // so the safest byte-identical incremental path is to carry forward every
263
+ // Process node and PROCESS_STEP / ENTRY_POINT_OF edge from the prior
264
+ // graph and skip BFS altogether. The 30% safety valve keeps us honest:
265
+ // whenever the closure balloons past threshold the phase falls through
266
+ // to a fresh BFS that observes any new entry points.
267
+ const view = resolveIncrementalView(ctx);
268
+ if (view.active &&
269
+ view.previousGraph?.edges !== undefined &&
270
+ view.previousGraph.nodes !== undefined) {
271
+ let carriedProcesses = 0;
272
+ let carriedSteps = 0;
273
+ for (const n of view.previousGraph.nodes) {
274
+ if (n.kind !== "Process")
275
+ continue;
276
+ ctx.graph.addNode(n);
277
+ carriedProcesses += 1;
278
+ }
279
+ for (const e of view.previousGraph.edges) {
280
+ if (e.type !== "PROCESS_STEP" && e.type !== "ENTRY_POINT_OF")
281
+ continue;
282
+ ctx.graph.addEdge({
283
+ from: e.from,
284
+ to: e.to,
285
+ type: e.type,
286
+ confidence: e.confidence,
287
+ ...(e.reason !== undefined ? { reason: e.reason } : {}),
288
+ ...(e.step !== undefined ? { step: e.step } : {}),
289
+ });
290
+ if (e.type === "PROCESS_STEP")
291
+ carriedSteps += 1;
292
+ }
293
+ return {
294
+ processCount: carriedProcesses,
295
+ avgStepsPerProcess: carriedProcesses === 0 ? 0 : carriedSteps / carriedProcesses,
296
+ };
297
+ }
298
+ // ---- Collect candidate nodes + adjacency. -----------------------------
299
+ const metaById = new Map();
300
+ const nameById = new Map();
301
+ for (const n of ctx.graph.nodes()) {
302
+ nameById.set(n.id, n.name);
303
+ if (!CALLABLE_KINDS.has(n.kind))
304
+ continue;
305
+ const exported = "isExported" in n &&
306
+ typeof n.isExported === "boolean"
307
+ ? n.isExported
308
+ : false;
309
+ metaById.set(n.id, {
310
+ id: n.id,
311
+ name: n.name,
312
+ filePath: n.filePath,
313
+ kind: n.kind,
314
+ isExported: exported,
315
+ callersCount: 0,
316
+ calleesCount: 0,
317
+ });
318
+ }
319
+ // Directed adjacency: caller → list of callee ids (sorted for determinism).
320
+ const adjacency = new Map();
321
+ for (const edge of ctx.graph.edges()) {
322
+ if (edge.type !== "CALLS")
323
+ continue;
324
+ if (edge.confidence < MIN_EDGE_CONFIDENCE)
325
+ continue;
326
+ const from = edge.from;
327
+ const to = edge.to;
328
+ const fromMeta = metaById.get(from);
329
+ const toMeta = metaById.get(to);
330
+ if (fromMeta === undefined || toMeta === undefined)
331
+ continue;
332
+ fromMeta.calleesCount += 1;
333
+ toMeta.callersCount += 1;
334
+ const list = adjacency.get(from);
335
+ if (list === undefined)
336
+ adjacency.set(from, [to]);
337
+ else if (!list.includes(to))
338
+ list.push(to);
339
+ }
340
+ for (const list of adjacency.values())
341
+ list.sort();
342
+ // ---- Re-export detection. --------------------------------------------
343
+ // Walk IMPORTS edges and flag every File node whose basename matches a
344
+ // known public-API entry (index.ts, __init__.py, mod.rs, ...). Then for
345
+ // each File node so flagged, record every symbol defined in the same
346
+ // package directory that the re-export file exposes. We approximate
347
+ // "re-export" at MVP: a callable defined in a file whose directory is the
348
+ // parent of a REEXPORT_FILE gets a bonus, because languages vary in how
349
+ // they surface names (named re-export in JS, pub use in Rust, `from x
350
+ // import y` in Python). False positives are fine here — the bonus is
351
+ // small and the final cap is bounded.
352
+ const reExportDirs = new Set();
353
+ for (const n of ctx.graph.nodes()) {
354
+ if (n.kind !== "File")
355
+ continue;
356
+ const base = basenameOf(n.filePath).toLowerCase();
357
+ if (REEXPORT_FILE_BASENAMES.has(base)) {
358
+ reExportDirs.add(parentDir(n.filePath));
359
+ }
360
+ }
361
+ // ---- Score candidates. ------------------------------------------------
362
+ const scored = [];
363
+ for (const meta of metaById.values()) {
364
+ if (isTestPath(meta.filePath))
365
+ continue;
366
+ const callRatio = meta.calleesCount / (meta.callersCount + 1);
367
+ let score = callRatio;
368
+ if (meta.isExported)
369
+ score += 0.5;
370
+ if (hasFileHint(meta.filePath))
371
+ score += 0.3;
372
+ if (hasDirHint(meta.filePath))
373
+ score += 0.3;
374
+ if (hasNameHint(meta.name))
375
+ score += 0.3;
376
+ if (meta.isExported && reExportDirs.has(parentDir(meta.filePath)))
377
+ score += 0.4;
378
+ if (meta.calleesCount === 0)
379
+ continue; // a leaf can't root a flow.
380
+ scored.push({ id: meta.id, score, meta });
381
+ }
382
+ scored.sort((a, b) => {
383
+ if (b.score !== a.score)
384
+ return b.score - a.score;
385
+ // Deterministic tiebreak: lexicographic by id.
386
+ return a.id < b.id ? -1 : a.id > b.id ? 1 : 0;
387
+ });
388
+ const symbolCount = metaById.size;
389
+ // Scale N: ~5% of callables, clamped to [MIN, MAX].
390
+ const targetN = Math.max(MIN_ENTRY_POINTS, Math.min(MAX_ENTRY_POINTS, Math.floor(symbolCount * 0.05)));
391
+ const entryPoints = scored.slice(0, targetN);
392
+ // ---- Route / Tool index by handler file, for ENTRY_POINT_OF. ----------
393
+ const routesByFile = new Map();
394
+ const toolsByFile = new Map();
395
+ for (const n of ctx.graph.nodes()) {
396
+ if (n.kind === "Route") {
397
+ const list = routesByFile.get(n.filePath) ?? [];
398
+ list.push(n.id);
399
+ routesByFile.set(n.filePath, list);
400
+ }
401
+ else if (n.kind === "Tool") {
402
+ const list = toolsByFile.get(n.filePath) ?? [];
403
+ list.push(n.id);
404
+ toolsByFile.set(n.filePath, list);
405
+ }
406
+ }
407
+ for (const list of routesByFile.values())
408
+ list.sort();
409
+ for (const list of toolsByFile.values())
410
+ list.sort();
411
+ // ---- BFS from each entry point and emit Process nodes/edges. ----------
412
+ let processCount = 0;
413
+ let totalSteps = 0;
414
+ for (const ep of entryPoints) {
415
+ const steps = bfs(ep.id, adjacency);
416
+ if (steps.length < MIN_STEPS_PER_PROCESS)
417
+ continue;
418
+ const processNodeId = makeNodeId("Process", ep.meta.filePath, `process-${ep.id}`);
419
+ // Cohesion label: tokenize entry-point name + every symbol reached.
420
+ const tokenCounts = new Map();
421
+ countTokens(ep.meta.name, tokenCounts);
422
+ for (const s of steps) {
423
+ const name = nameById.get(s.to);
424
+ if (name !== undefined)
425
+ countTokens(name, tokenCounts);
426
+ }
427
+ const topTokens = pickTopTokens(tokenCounts, MAX_COHESION_TOKENS);
428
+ const inferredLabel = topTokens.length >= 2 ? topTokens.join(" ") : `${ep.meta.name}-flow`;
429
+ const processNode = {
430
+ id: processNodeId,
431
+ kind: "Process",
432
+ name: `${ep.meta.name}-flow`,
433
+ filePath: ep.meta.filePath,
434
+ entryPointId: ep.id,
435
+ stepCount: steps.length,
436
+ inferredLabel,
437
+ };
438
+ ctx.graph.addNode(processNode);
439
+ // Emit PROCESS_STEP edges: ctx.graph.addEdge dedupes on
440
+ // (from, type, to, step), so we thread `step` through to preserve
441
+ // multiple transitions along a chain that revisits the same pair at
442
+ // different depths.
443
+ for (const s of steps) {
444
+ ctx.graph.addEdge({
445
+ from: s.from,
446
+ to: s.to,
447
+ type: "PROCESS_STEP",
448
+ confidence: 0.85,
449
+ reason: "bfs-from-entry-point",
450
+ step: s.depth,
451
+ });
452
+ }
453
+ // ENTRY_POINT_OF edges from Route / Tool whose file matches the EP.
454
+ const routes = routesByFile.get(ep.meta.filePath) ?? [];
455
+ for (const r of routes) {
456
+ ctx.graph.addEdge({
457
+ from: r,
458
+ to: processNodeId,
459
+ type: "ENTRY_POINT_OF",
460
+ confidence: 0.85,
461
+ reason: "route-matches-entry-file",
462
+ });
463
+ }
464
+ const tools = toolsByFile.get(ep.meta.filePath) ?? [];
465
+ for (const t of tools) {
466
+ ctx.graph.addEdge({
467
+ from: t,
468
+ to: processNodeId,
469
+ type: "ENTRY_POINT_OF",
470
+ confidence: 0.85,
471
+ reason: "tool-matches-entry-file",
472
+ });
473
+ }
474
+ processCount += 1;
475
+ totalSteps += steps.length;
476
+ }
477
+ return {
478
+ processCount,
479
+ avgStepsPerProcess: processCount === 0 ? 0 : totalSteps / processCount,
480
+ };
481
+ }
482
+ /**
483
+ * Deterministic forward BFS along the CALLS adjacency. Neighbours are
484
+ * pre-sorted in `adjacency`; we limit branching and total coverage to keep
485
+ * processes bounded.
486
+ */
487
+ function bfs(start, adjacency) {
488
+ const visited = new Set([start]);
489
+ const queue = [{ id: start, depth: 0 }];
490
+ const steps = [];
491
+ while (queue.length > 0 && visited.size < MAX_NODES_PER_PROCESS) {
492
+ const head = queue.shift();
493
+ if (head.depth >= MAX_DEPTH)
494
+ continue;
495
+ const neighbours = adjacency.get(head.id) ?? [];
496
+ const limited = neighbours.slice(0, MAX_BRANCHING);
497
+ for (const nb of limited) {
498
+ if (visited.has(nb)) {
499
+ // Skip cycles; still emit no edge (would create duplicate step).
500
+ continue;
501
+ }
502
+ visited.add(nb);
503
+ steps.push({ from: head.id, to: nb, depth: head.depth + 1 });
504
+ queue.push({ id: nb, depth: head.depth + 1 });
505
+ if (visited.size >= MAX_NODES_PER_PROCESS)
506
+ break;
507
+ }
508
+ }
509
+ return steps;
510
+ }
511
+ function isTestPath(filePath) {
512
+ const lower = filePath.toLowerCase();
513
+ const segments = lower.split("/");
514
+ for (const s of segments) {
515
+ if (s === "test" || s === "tests" || s === "spec" || s === "specs" || s === "__tests__") {
516
+ return true;
517
+ }
518
+ }
519
+ // Also catch `foo.test.ts`, `foo.spec.ts`, etc.
520
+ if (lower.includes(".test.") || lower.includes(".spec."))
521
+ return true;
522
+ return false;
523
+ }
524
+ function hasFileHint(filePath) {
525
+ const slash = filePath.lastIndexOf("/");
526
+ const base = (slash >= 0 ? filePath.slice(slash + 1) : filePath).toLowerCase();
527
+ const dot = base.indexOf(".");
528
+ const stem = dot >= 0 ? base.slice(0, dot) : base;
529
+ for (const h of FILE_HINTS) {
530
+ if (stem === h)
531
+ return true;
532
+ }
533
+ return false;
534
+ }
535
+ function hasDirHint(filePath) {
536
+ const lower = filePath.toLowerCase();
537
+ // Wrap with slashes so leading segments also match.
538
+ const anchored = `/${lower}`;
539
+ for (const sub of DIR_HINT_SUBSTRINGS) {
540
+ if (anchored.includes(sub))
541
+ return true;
542
+ }
543
+ for (const suffix of PATH_SUFFIX_HINTS) {
544
+ if (anchored.endsWith(suffix))
545
+ return true;
546
+ }
547
+ return false;
548
+ }
549
+ function hasNameHint(name) {
550
+ if (name.length === 0)
551
+ return false;
552
+ if (name === "main")
553
+ return true;
554
+ for (const p of NAME_PREFIXES) {
555
+ if (name === p)
556
+ return true;
557
+ if (name.length <= p.length)
558
+ continue;
559
+ // CamelCase boundary: `handleRequest`, `serveHttp`, etc.
560
+ if (name.startsWith(p) &&
561
+ name[p.length] >= "A" &&
562
+ name[p.length] <= "Z") {
563
+ return true;
564
+ }
565
+ // snake/kebab boundary: `handle_request`, `handle-request`.
566
+ if (name.startsWith(p) && (name[p.length] === "_" || name[p.length] === "-")) {
567
+ return true;
568
+ }
569
+ }
570
+ for (const s of NAME_SUFFIXES) {
571
+ if (name.endsWith(s) && name.length > s.length)
572
+ return true;
573
+ }
574
+ return false;
575
+ }
576
+ function basenameOf(filePath) {
577
+ const slash = filePath.lastIndexOf("/");
578
+ return slash >= 0 ? filePath.slice(slash + 1) : filePath;
579
+ }
580
+ function parentDir(filePath) {
581
+ const slash = filePath.lastIndexOf("/");
582
+ return slash >= 0 ? filePath.slice(0, slash) : "";
583
+ }
584
+ /**
585
+ * Split an identifier into camelCase / snake_case / kebab-case / dot.case
586
+ * components, lowercase everything, and bump frequency counts.
587
+ */
588
+ function countTokens(name, counts) {
589
+ for (const tok of splitIdentifier(name)) {
590
+ if (tok.length < MIN_TOKEN_LEN)
591
+ continue;
592
+ if (STOP_TOKENS.has(tok))
593
+ continue;
594
+ counts.set(tok, (counts.get(tok) ?? 0) + 1);
595
+ }
596
+ }
597
+ function splitIdentifier(name) {
598
+ // Normalize separators to spaces, then split camelCase.
599
+ const separatorSplit = name.replace(/[_\-.]+/g, " ").trim();
600
+ // Split runs like `HTTPServer` into `HTTP Server`, and `serveHttp` into
601
+ // `serve Http` before lowercasing.
602
+ const camelSplit = separatorSplit
603
+ .replace(/([a-z0-9])([A-Z])/g, "$1 $2")
604
+ .replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2")
605
+ .toLowerCase();
606
+ return camelSplit.split(/\s+/).filter((t) => t.length > 0);
607
+ }
608
+ function pickTopTokens(counts, limit) {
609
+ const entries = [];
610
+ for (const [token, count] of counts)
611
+ entries.push({ token, count });
612
+ entries.sort((a, b) => {
613
+ if (b.count !== a.count)
614
+ return b.count - a.count;
615
+ // Deterministic tiebreak on token text.
616
+ return a.token < b.token ? -1 : a.token > b.token ? 1 : 0;
617
+ });
618
+ return entries.slice(0, limit).map((e) => e.token);
619
+ }
620
+ //# sourceMappingURL=processes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"processes.js","sourceRoot":"","sources":["../../../src/pipeline/phases/processes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Profile phase — single-pass repo profiling.
3
+ *
4
+ * Consumes the scan phase output and emits one `ProjectProfile` node per
5
+ * repo with six sorted arrays:
6
+ * - languages — file-count-threshold filtered, sorted by count desc
7
+ * - frameworks — evidence-based (file markers OR manifest deps)
8
+ * - iacTypes — terraform / docker / kubernetes / cloudformation / …
9
+ * - apiContracts — openapi / graphql / grpc / asyncapi
10
+ * - manifests — linguist-style priority cascade per ecosystem
11
+ * - srcDirs — top-level source directories (>10 code files)
12
+ *
13
+ * The phase runs after `scan`, has no outbound deps, and is a pure leaf:
14
+ * downstream phases (scanners gated on ProjectProfile) will read the
15
+ * profile node from the graph, not from the phase output.
16
+ *
17
+ * Determinism: every detector returns a sorted array; the profile node is a
18
+ * singleton per repo, so its id uses a constant qualified name ("repo")
19
+ * rather than a hash of the absolute path. This keeps the node id stable
20
+ * across checkouts of the same repo on different paths / machines, which is
21
+ * required for the graphHash determinism gate (two clones of the same
22
+ * commit must produce byte-identical graphs). Two runs of the same repo at
23
+ * the same commit produce byte-identical profile nodes.
24
+ */
25
+ import type { PipelinePhase } from "../types.js";
26
+ export declare const PROFILE_PHASE_NAME: "profile";
27
+ export interface ProfileOutput {
28
+ readonly profileEmitted: boolean;
29
+ readonly languagesDetected: number;
30
+ readonly frameworksDetected: number;
31
+ }
32
+ export declare const profilePhase: PipelinePhase<ProfileOutput>;
33
+ //# sourceMappingURL=profile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../../src/pipeline/phases/profile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AASH,OAAO,KAAK,EAAmB,aAAa,EAAE,MAAM,aAAa,CAAC;AAGlE,eAAO,MAAM,kBAAkB,EAAG,SAAkB,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,eAAO,MAAM,YAAY,EAAE,aAAa,CAAC,aAAa,CAUrD,CAAC"}