@dataparade/cli 0.0.1

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 (621) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +592 -0
  3. package/dist/bin/cli.d.ts +2 -0
  4. package/dist/bin/cli.js +7 -0
  5. package/dist/bin/load-env.d.ts +2 -0
  6. package/dist/bin/load-env.js +4 -0
  7. package/dist/src/ai-enrichment/agent-orchestrator.d.ts +28 -0
  8. package/dist/src/ai-enrichment/agent-orchestrator.js +476 -0
  9. package/dist/src/ai-enrichment/agents/index.d.ts +4 -0
  10. package/dist/src/ai-enrichment/agents/index.js +50 -0
  11. package/dist/src/ai-enrichment/candidate-selector.d.ts +10 -0
  12. package/dist/src/ai-enrichment/candidate-selector.js +158 -0
  13. package/dist/src/ai-enrichment/fallbacks.d.ts +6 -0
  14. package/dist/src/ai-enrichment/fallbacks.js +762 -0
  15. package/dist/src/ai-enrichment/index.d.ts +15 -0
  16. package/dist/src/ai-enrichment/index.js +31 -0
  17. package/dist/src/ai-enrichment/merge-rules.d.ts +12 -0
  18. package/dist/src/ai-enrichment/merge-rules.js +321 -0
  19. package/dist/src/ai-enrichment/non-pii-signal-rules.d.ts +10 -0
  20. package/dist/src/ai-enrichment/non-pii-signal-rules.js +72 -0
  21. package/dist/src/ai-enrichment/openai-proposals-response.schema.d.ts +94 -0
  22. package/dist/src/ai-enrichment/openai-proposals-response.schema.js +82 -0
  23. package/dist/src/ai-enrichment/pii-signal-rules.d.ts +8 -0
  24. package/dist/src/ai-enrichment/pii-signal-rules.js +68 -0
  25. package/dist/src/ai-enrichment/pipeline.d.ts +2 -0
  26. package/dist/src/ai-enrichment/pipeline.js +48 -0
  27. package/dist/src/ai-enrichment/planner.d.ts +2 -0
  28. package/dist/src/ai-enrichment/planner.js +60 -0
  29. package/dist/src/ai-enrichment/prompts/provider-enrichment-prompts.d.ts +12 -0
  30. package/dist/src/ai-enrichment/prompts/provider-enrichment-prompts.js +45 -0
  31. package/dist/src/ai-enrichment/provider-prompt.d.ts +32 -0
  32. package/dist/src/ai-enrichment/provider-prompt.js +222 -0
  33. package/dist/src/ai-enrichment/provider-topology-rules.d.ts +52 -0
  34. package/dist/src/ai-enrichment/provider-topology-rules.js +190 -0
  35. package/dist/src/ai-enrichment/provider-topology-shared.d.ts +48 -0
  36. package/dist/src/ai-enrichment/provider-topology-shared.js +329 -0
  37. package/dist/src/ai-enrichment/providers/endpoint-resolution.d.ts +13 -0
  38. package/dist/src/ai-enrichment/providers/endpoint-resolution.js +41 -0
  39. package/dist/src/ai-enrichment/providers/families/chat-completions-family.d.ts +13 -0
  40. package/dist/src/ai-enrichment/providers/families/chat-completions-family.js +181 -0
  41. package/dist/src/ai-enrichment/providers/families/generate-content-family.d.ts +10 -0
  42. package/dist/src/ai-enrichment/providers/families/generate-content-family.js +93 -0
  43. package/dist/src/ai-enrichment/providers/families/messages-family.d.ts +10 -0
  44. package/dist/src/ai-enrichment/providers/families/messages-family.js +86 -0
  45. package/dist/src/ai-enrichment/providers/families/ollama-generate-family.d.ts +10 -0
  46. package/dist/src/ai-enrichment/providers/families/ollama-generate-family.js +69 -0
  47. package/dist/src/ai-enrichment/providers/fetch-with-timeout.d.ts +2 -0
  48. package/dist/src/ai-enrichment/providers/fetch-with-timeout.js +22 -0
  49. package/dist/src/ai-enrichment/providers/index.d.ts +16 -0
  50. package/dist/src/ai-enrichment/providers/index.js +40 -0
  51. package/dist/src/ai-enrichment/providers/mock.d.ts +5 -0
  52. package/dist/src/ai-enrichment/providers/mock.js +12 -0
  53. package/dist/src/ai-enrichment/providers/platform-proxy-provider.d.ts +20 -0
  54. package/dist/src/ai-enrichment/providers/platform-proxy-provider.js +116 -0
  55. package/dist/src/ai-enrichment/providers/presets.d.ts +14 -0
  56. package/dist/src/ai-enrichment/providers/presets.js +50 -0
  57. package/dist/src/ai-enrichment/providers/provider-contract.d.ts +20 -0
  58. package/dist/src/ai-enrichment/providers/provider-contract.js +703 -0
  59. package/dist/src/ai-enrichment/providers/provider-json-parse.d.ts +23 -0
  60. package/dist/src/ai-enrichment/providers/provider-json-parse.js +96 -0
  61. package/dist/src/ai-enrichment/providers/provider-output-token-budget.d.ts +5 -0
  62. package/dist/src/ai-enrichment/providers/provider-output-token-budget.js +11 -0
  63. package/dist/src/ai-enrichment/providers/provider-pricing.d.ts +7 -0
  64. package/dist/src/ai-enrichment/providers/provider-pricing.js +32 -0
  65. package/dist/src/ai-enrichment/providers/provider-runtime.d.ts +9 -0
  66. package/dist/src/ai-enrichment/providers/provider-runtime.js +54 -0
  67. package/dist/src/ai-enrichment/providers/resolve-provider.d.ts +27 -0
  68. package/dist/src/ai-enrichment/providers/resolve-provider.js +41 -0
  69. package/dist/src/ai-enrichment/providers/types.d.ts +24 -0
  70. package/dist/src/ai-enrichment/providers/types.js +2 -0
  71. package/dist/src/ai-enrichment/scan-paths.d.ts +9 -0
  72. package/dist/src/ai-enrichment/scan-paths.js +28 -0
  73. package/dist/src/ai-enrichment/sensitive-paths.d.ts +5 -0
  74. package/dist/src/ai-enrichment/sensitive-paths.js +10 -0
  75. package/dist/src/ai-enrichment/third-party-data-flow.d.ts +27 -0
  76. package/dist/src/ai-enrichment/third-party-data-flow.js +518 -0
  77. package/dist/src/ai-enrichment/third-party-evidence.d.ts +14 -0
  78. package/dist/src/ai-enrichment/third-party-evidence.js +426 -0
  79. package/dist/src/ai-enrichment/third-party-property-matrix.d.ts +14 -0
  80. package/dist/src/ai-enrichment/third-party-property-matrix.js +52 -0
  81. package/dist/src/ai-enrichment/third-party-subtype.d.ts +14 -0
  82. package/dist/src/ai-enrichment/third-party-subtype.js +166 -0
  83. package/dist/src/ai-enrichment/tools/index.d.ts +39 -0
  84. package/dist/src/ai-enrichment/tools/index.js +121 -0
  85. package/dist/src/ai-enrichment/types.d.ts +170 -0
  86. package/dist/src/ai-enrichment/types.js +12 -0
  87. package/dist/src/analyzers/python/dependency-manifests.d.ts +8 -0
  88. package/dist/src/analyzers/python/dependency-manifests.js +131 -0
  89. package/dist/src/analyzers/python/detector.d.ts +3 -0
  90. package/dist/src/analyzers/python/detector.js +22 -0
  91. package/dist/src/analyzers/python/index.d.ts +2 -0
  92. package/dist/src/analyzers/python/index.js +11 -0
  93. package/dist/src/analyzers/python/manifest-parsers.d.ts +3 -0
  94. package/dist/src/analyzers/python/manifest-parsers.js +134 -0
  95. package/dist/src/analyzers/python/parser.d.ts +26 -0
  96. package/dist/src/analyzers/python/parser.js +187 -0
  97. package/dist/src/analyzers/python/patterns.d.ts +7 -0
  98. package/dist/src/analyzers/python/patterns.js +106 -0
  99. package/dist/src/analyzers/python/python-detection-config.d.ts +75 -0
  100. package/dist/src/analyzers/python/python-detection-config.js +148 -0
  101. package/dist/src/analyzers/registry.d.ts +13 -0
  102. package/dist/src/analyzers/registry.js +60 -0
  103. package/dist/src/analyzers/shared/manifest-budgets.d.ts +19 -0
  104. package/dist/src/analyzers/shared/manifest-budgets.js +21 -0
  105. package/dist/src/analyzers/shared/manifest-fs.d.ts +13 -0
  106. package/dist/src/analyzers/shared/manifest-fs.js +138 -0
  107. package/dist/src/analyzers/shared/property-inference.d.ts +8 -0
  108. package/dist/src/analyzers/shared/property-inference.js +165 -0
  109. package/dist/src/analyzers/terraform/detector.d.ts +10 -0
  110. package/dist/src/analyzers/terraform/detector.js +198 -0
  111. package/dist/src/analyzers/terraform/index.d.ts +2 -0
  112. package/dist/src/analyzers/terraform/index.js +13 -0
  113. package/dist/src/analyzers/terraform/parser.d.ts +29 -0
  114. package/dist/src/analyzers/terraform/parser.js +202 -0
  115. package/dist/src/analyzers/terraform/terraform-detection-config.d.ts +48 -0
  116. package/dist/src/analyzers/terraform/terraform-detection-config.js +218 -0
  117. package/dist/src/analyzers/terraform/terraform-exec.d.ts +11 -0
  118. package/dist/src/analyzers/terraform/terraform-exec.js +35 -0
  119. package/dist/src/analyzers/terraform/terraform-module-manifest.d.ts +19 -0
  120. package/dist/src/analyzers/terraform/terraform-module-manifest.js +75 -0
  121. package/dist/src/analyzers/terraform/terraform-show-json.d.ts +15 -0
  122. package/dist/src/analyzers/terraform/terraform-show-json.js +188 -0
  123. package/dist/src/analyzers/terraform/terraform-utility-resource.d.ts +12 -0
  124. package/dist/src/analyzers/terraform/terraform-utility-resource.js +30 -0
  125. package/dist/src/analyzers/types.d.ts +5 -0
  126. package/dist/src/analyzers/types.js +2 -0
  127. package/dist/src/analyzers/typescript/actor-detection.d.ts +4 -0
  128. package/dist/src/analyzers/typescript/actor-detection.js +15 -0
  129. package/dist/src/analyzers/typescript/dependency-manifests.d.ts +9 -0
  130. package/dist/src/analyzers/typescript/dependency-manifests.js +131 -0
  131. package/dist/src/analyzers/typescript/detector.d.ts +3 -0
  132. package/dist/src/analyzers/typescript/detector.js +23 -0
  133. package/dist/src/analyzers/typescript/index.d.ts +2 -0
  134. package/dist/src/analyzers/typescript/index.js +11 -0
  135. package/dist/src/analyzers/typescript/manifest-parsers.d.ts +1 -0
  136. package/dist/src/analyzers/typescript/manifest-parsers.js +30 -0
  137. package/dist/src/analyzers/typescript/parser.d.ts +44 -0
  138. package/dist/src/analyzers/typescript/parser.js +287 -0
  139. package/dist/src/analyzers/typescript/third-party-detection.d.ts +4 -0
  140. package/dist/src/analyzers/typescript/third-party-detection.js +16 -0
  141. package/dist/src/analyzers/typescript/typescript-detection-config.d.ts +68 -0
  142. package/dist/src/analyzers/typescript/typescript-detection-config.js +171 -0
  143. package/dist/src/analyzers/typescript/typescript-detection.d.ts +10 -0
  144. package/dist/src/analyzers/typescript/typescript-detection.js +57 -0
  145. package/dist/src/classifier/application-injection.d.ts +12 -0
  146. package/dist/src/classifier/application-injection.js +335 -0
  147. package/dist/src/classifier/classify.d.ts +3 -0
  148. package/dist/src/classifier/classify.js +15 -0
  149. package/dist/src/classifier/component-factory.d.ts +3 -0
  150. package/dist/src/classifier/component-factory.js +488 -0
  151. package/dist/src/classifier/config.d.ts +38 -0
  152. package/dist/src/classifier/config.js +260 -0
  153. package/dist/src/classifier/enhance-defaults.d.ts +28 -0
  154. package/dist/src/classifier/enhance-defaults.js +369 -0
  155. package/dist/src/classifier/enhance.d.ts +13 -0
  156. package/dist/src/classifier/enhance.js +295 -0
  157. package/dist/src/classifier/external-url-third-party.d.ts +26 -0
  158. package/dist/src/classifier/external-url-third-party.js +195 -0
  159. package/dist/src/classifier/grouping.d.ts +1 -0
  160. package/dist/src/classifier/grouping.js +2 -0
  161. package/dist/src/classifier/main-application-selection.d.ts +41 -0
  162. package/dist/src/classifier/main-application-selection.js +222 -0
  163. package/dist/src/classifier/naming.d.ts +4 -0
  164. package/dist/src/classifier/naming.js +78 -0
  165. package/dist/src/classifier/postprocessing.d.ts +12 -0
  166. package/dist/src/classifier/postprocessing.js +510 -0
  167. package/dist/src/classifier/sectioning.d.ts +5 -0
  168. package/dist/src/classifier/sectioning.js +60 -0
  169. package/dist/src/classifier/terraform-provider-hub.d.ts +6 -0
  170. package/dist/src/classifier/terraform-provider-hub.js +38 -0
  171. package/dist/src/cli.d.ts +2 -0
  172. package/dist/src/cli.js +498 -0
  173. package/dist/src/config/actor-detection-config.d.ts +21 -0
  174. package/dist/src/config/actor-detection-config.js +97 -0
  175. package/dist/src/config/env.d.ts +2 -0
  176. package/dist/src/config/env.js +75 -0
  177. package/dist/src/config/file.d.ts +6 -0
  178. package/dist/src/config/file.js +74 -0
  179. package/dist/src/config/inference-scope.d.ts +2 -0
  180. package/dist/src/config/inference-scope.js +15 -0
  181. package/dist/src/config/load-cli-env.d.ts +1 -0
  182. package/dist/src/config/load-cli-env.js +54 -0
  183. package/dist/src/config/normalize-ai-provider.d.ts +5 -0
  184. package/dist/src/config/normalize-ai-provider.js +18 -0
  185. package/dist/src/config/property-detection-config.d.ts +27 -0
  186. package/dist/src/config/property-detection-config.js +355 -0
  187. package/dist/src/config/redact.d.ts +3 -0
  188. package/dist/src/config/redact.js +14 -0
  189. package/dist/src/config/resolve.d.ts +15 -0
  190. package/dist/src/config/resolve.js +361 -0
  191. package/dist/src/config/scan-env.d.ts +7 -0
  192. package/dist/src/config/scan-env.js +38 -0
  193. package/dist/src/config/third-party-detection-config.d.ts +25 -0
  194. package/dist/src/config/third-party-detection-config.js +97 -0
  195. package/dist/src/config/types.d.ts +106 -0
  196. package/dist/src/config/types.js +2 -0
  197. package/dist/src/config/validate-scan-ai.d.ts +3 -0
  198. package/dist/src/config/validate-scan-ai.js +33 -0
  199. package/dist/src/core/pipeline/ai-orchestrator-options.d.ts +6 -0
  200. package/dist/src/core/pipeline/ai-orchestrator-options.js +46 -0
  201. package/dist/src/core/pipeline/classifier-phase.d.ts +7 -0
  202. package/dist/src/core/pipeline/classifier-phase.js +78 -0
  203. package/dist/src/core/pipeline/dataflow-phase.d.ts +7 -0
  204. package/dist/src/core/pipeline/dataflow-phase.js +10 -0
  205. package/dist/src/core/pipeline/diagram-layout/app-section-layout.d.ts +7 -0
  206. package/dist/src/core/pipeline/diagram-layout/app-section-layout.js +74 -0
  207. package/dist/src/core/pipeline/diagram-layout/constants.d.ts +11 -0
  208. package/dist/src/core/pipeline/diagram-layout/constants.js +14 -0
  209. package/dist/src/core/pipeline/diagram-layout/edge-handles.d.ts +3 -0
  210. package/dist/src/core/pipeline/diagram-layout/edge-handles.js +26 -0
  211. package/dist/src/core/pipeline/diagram-layout/managed-provider-layout.d.ts +3 -0
  212. package/dist/src/core/pipeline/diagram-layout/managed-provider-layout.js +40 -0
  213. package/dist/src/core/pipeline/diagram-layout/minimal-terraform-layout.d.ts +6 -0
  214. package/dist/src/core/pipeline/diagram-layout/minimal-terraform-layout.js +53 -0
  215. package/dist/src/core/pipeline/diagram-layout/section-helpers.d.ts +30 -0
  216. package/dist/src/core/pipeline/diagram-layout/section-helpers.js +62 -0
  217. package/dist/src/core/pipeline/diagram-layout/terraform-lane-layout.d.ts +3 -0
  218. package/dist/src/core/pipeline/diagram-layout/terraform-lane-layout.js +109 -0
  219. package/dist/src/core/pipeline/diagram-layout/types.d.ts +2 -0
  220. package/dist/src/core/pipeline/diagram-layout/types.js +2 -0
  221. package/dist/src/core/pipeline/graph-mapping.d.ts +6 -0
  222. package/dist/src/core/pipeline/graph-mapping.js +308 -0
  223. package/dist/src/core/pipeline/mixed-app-terraform-scan.d.ts +13 -0
  224. package/dist/src/core/pipeline/mixed-app-terraform-scan.js +81 -0
  225. package/dist/src/core/pipeline/orchestrator-result.d.ts +6 -0
  226. package/dist/src/core/pipeline/orchestrator-result.js +2 -0
  227. package/dist/src/core/pipeline/orchestrator.d.ts +26 -0
  228. package/dist/src/core/pipeline/orchestrator.js +79 -0
  229. package/dist/src/core/pipeline/resolve-path-under-scan-root.d.ts +7 -0
  230. package/dist/src/core/pipeline/resolve-path-under-scan-root.js +55 -0
  231. package/dist/src/core/pipeline/scan-pipeline.d.ts +6 -0
  232. package/dist/src/core/pipeline/scan-pipeline.js +364 -0
  233. package/dist/src/core/pipeline/sorting.d.ts +3 -0
  234. package/dist/src/core/pipeline/sorting.js +48 -0
  235. package/dist/src/core/pipeline/stable-component-ids.d.ts +15 -0
  236. package/dist/src/core/pipeline/stable-component-ids.js +68 -0
  237. package/dist/src/core/pipeline/structural-scan.d.ts +19 -0
  238. package/dist/src/core/pipeline/structural-scan.js +304 -0
  239. package/dist/src/core/pipeline/terraform-flow-utils.d.ts +6 -0
  240. package/dist/src/core/pipeline/terraform-flow-utils.js +32 -0
  241. package/dist/src/core/pipeline/terraform-minimal-services.d.ts +31 -0
  242. package/dist/src/core/pipeline/terraform-minimal-services.js +225 -0
  243. package/dist/src/core/schema/dataflow-wrapper.schema.d.ts +83 -0
  244. package/dist/src/core/schema/dataflow-wrapper.schema.js +40 -0
  245. package/dist/src/core/schema/diagram-graph.schema.d.ts +93 -0
  246. package/dist/src/core/schema/diagram-graph.schema.js +55 -0
  247. package/dist/src/core/schema/index.d.ts +4 -0
  248. package/dist/src/core/schema/index.js +20 -0
  249. package/dist/src/core/schema/scan-config.schema.d.ts +66 -0
  250. package/dist/src/core/schema/scan-config.schema.js +67 -0
  251. package/dist/src/core/schema/scan-result.schema.d.ts +450 -0
  252. package/dist/src/core/schema/scan-result.schema.js +236 -0
  253. package/dist/src/core/sectioning/discover-service-sections.d.ts +80 -0
  254. package/dist/src/core/sectioning/discover-service-sections.js +468 -0
  255. package/dist/src/core/sectioning/section-runtime.d.ts +21 -0
  256. package/dist/src/core/sectioning/section-runtime.js +148 -0
  257. package/dist/src/core/terraform/component-predicates.d.ts +13 -0
  258. package/dist/src/core/terraform/component-predicates.js +71 -0
  259. package/dist/src/core/types/component.d.ts +18 -0
  260. package/dist/src/core/types/component.js +2 -0
  261. package/dist/src/core/types/config.d.ts +57 -0
  262. package/dist/src/core/types/config.js +2 -0
  263. package/dist/src/core/types/data-flow.d.ts +24 -0
  264. package/dist/src/core/types/data-flow.js +2 -0
  265. package/dist/src/core/types/detection.d.ts +12 -0
  266. package/dist/src/core/types/detection.js +19 -0
  267. package/dist/src/core/types/file.d.ts +14 -0
  268. package/dist/src/core/types/file.js +2 -0
  269. package/dist/src/core/types/index.d.ts +7 -0
  270. package/dist/src/core/types/index.js +23 -0
  271. package/dist/src/core/types/progress.d.ts +9 -0
  272. package/dist/src/core/types/progress.js +2 -0
  273. package/dist/src/core/types/result.d.ts +140 -0
  274. package/dist/src/core/types/result.js +2 -0
  275. package/dist/src/data-flow/application-hub.d.ts +7 -0
  276. package/dist/src/data-flow/application-hub.js +88 -0
  277. package/dist/src/data-flow/dedupe.d.ts +7 -0
  278. package/dist/src/data-flow/dedupe.js +92 -0
  279. package/dist/src/data-flow/detect.d.ts +16 -0
  280. package/dist/src/data-flow/detect.js +203 -0
  281. package/dist/src/data-flow/detector.d.ts +15 -0
  282. package/dist/src/data-flow/detector.js +18 -0
  283. package/dist/src/data-flow/drop-cross-section-flows.d.ts +8 -0
  284. package/dist/src/data-flow/drop-cross-section-flows.js +32 -0
  285. package/dist/src/data-flow/ensure-actor-flow.d.ts +16 -0
  286. package/dist/src/data-flow/ensure-actor-flow.js +101 -0
  287. package/dist/src/data-flow/ensure-manifest-declared-flows.d.ts +14 -0
  288. package/dist/src/data-flow/ensure-manifest-declared-flows.js +76 -0
  289. package/dist/src/data-flow/ensure-section-api-flows.d.ts +6 -0
  290. package/dist/src/data-flow/ensure-section-api-flows.js +57 -0
  291. package/dist/src/data-flow/flow-builder.d.ts +5 -0
  292. package/dist/src/data-flow/flow-builder.js +80 -0
  293. package/dist/src/data-flow/import-graph.d.ts +10 -0
  294. package/dist/src/data-flow/import-graph.js +147 -0
  295. package/dist/src/data-flow/index.d.ts +8 -0
  296. package/dist/src/data-flow/index.js +20 -0
  297. package/dist/src/data-flow/internal-fetch.d.ts +8 -0
  298. package/dist/src/data-flow/internal-fetch.js +209 -0
  299. package/dist/src/data-flow/postprocess.d.ts +9 -0
  300. package/dist/src/data-flow/postprocess.js +63 -0
  301. package/dist/src/data-flow/rewire.d.ts +10 -0
  302. package/dist/src/data-flow/rewire.js +93 -0
  303. package/dist/src/data-flow/source-attribution.d.ts +8 -0
  304. package/dist/src/data-flow/source-attribution.js +131 -0
  305. package/dist/src/data-flow/source-resolution.d.ts +13 -0
  306. package/dist/src/data-flow/source-resolution.js +61 -0
  307. package/dist/src/data-flow/target-matching.d.ts +21 -0
  308. package/dist/src/data-flow/target-matching.js +253 -0
  309. package/dist/src/data-flow/terraform-flows.d.ts +32 -0
  310. package/dist/src/data-flow/terraform-flows.js +170 -0
  311. package/dist/src/evals/metrics.d.ts +18 -0
  312. package/dist/src/evals/metrics.js +58 -0
  313. package/dist/src/evals/run-model-matrix.d.ts +1 -0
  314. package/dist/src/evals/run-model-matrix.js +68 -0
  315. package/dist/src/index.d.ts +2 -0
  316. package/dist/src/index.js +20 -0
  317. package/dist/src/ingest/file-system.d.ts +17 -0
  318. package/dist/src/ingest/file-system.js +239 -0
  319. package/dist/src/ingest/gitignore.d.ts +12 -0
  320. package/dist/src/ingest/gitignore.js +127 -0
  321. package/dist/src/ingest/sensitive-paths.d.ts +2 -0
  322. package/dist/src/ingest/sensitive-paths.js +8 -0
  323. package/dist/src/observability/scan-sentry.d.ts +20 -0
  324. package/dist/src/observability/scan-sentry.js +133 -0
  325. package/dist/src/output/json.d.ts +51 -0
  326. package/dist/src/output/json.js +59 -0
  327. package/dist/src/patterns/config.d.ts +22 -0
  328. package/dist/src/patterns/config.js +119 -0
  329. package/dist/src/patterns/detectors/helpers.d.ts +19 -0
  330. package/dist/src/patterns/detectors/helpers.js +68 -0
  331. package/dist/src/patterns/detectors/python.d.ts +8 -0
  332. package/dist/src/patterns/detectors/python.js +412 -0
  333. package/dist/src/patterns/detectors/typescript.d.ts +8 -0
  334. package/dist/src/patterns/detectors/typescript.js +328 -0
  335. package/dist/src/patterns/engine.d.ts +40 -0
  336. package/dist/src/patterns/engine.js +111 -0
  337. package/dist/src/patterns/flow-source-patterns.d.ts +6 -0
  338. package/dist/src/patterns/flow-source-patterns.js +39 -0
  339. package/dist/src/patterns/frontend-frameworks.d.ts +4 -0
  340. package/dist/src/patterns/frontend-frameworks.js +25 -0
  341. package/dist/src/patterns/scan-exclusions.d.ts +14 -0
  342. package/dist/src/patterns/scan-exclusions.js +76 -0
  343. package/dist/src/platform-api/dataparade-api-base-url.d.ts +8 -0
  344. package/dist/src/platform-api/dataparade-api-base-url.js +17 -0
  345. package/dist/src/platform-api/estimate-scan-footprint.d.ts +8 -0
  346. package/dist/src/platform-api/estimate-scan-footprint.js +120 -0
  347. package/dist/src/platform-api/scan-quota-client.d.ts +28 -0
  348. package/dist/src/platform-api/scan-quota-client.js +79 -0
  349. package/dist/src/tracing/langsmith-tracing.d.ts +37 -0
  350. package/dist/src/tracing/langsmith-tracing.js +171 -0
  351. package/dist/tests/cli/cli.spec.d.ts +1 -0
  352. package/dist/tests/cli/cli.spec.js +87 -0
  353. package/dist/tests/fixtures/e2e-ts-sample/db-client-import.d.ts +2 -0
  354. package/dist/tests/fixtures/e2e-ts-sample/db-client-import.js +8 -0
  355. package/dist/tests/fixtures/e2e-ts-sample/db.d.ts +3 -0
  356. package/dist/tests/fixtures/e2e-ts-sample/db.js +7 -0
  357. package/dist/tests/fixtures/e2e-ts-sample/external-api.d.ts +1 -0
  358. package/dist/tests/fixtures/e2e-ts-sample/external-api.js +18 -0
  359. package/dist/tests/fixtures/e2e-ts-sample/pg-client.d.ts +3 -0
  360. package/dist/tests/fixtures/e2e-ts-sample/pg-client.js +7 -0
  361. package/dist/tests/fixtures/e2e-ts-sample/server.d.ts +14 -0
  362. package/dist/tests/fixtures/e2e-ts-sample/server.js +4 -0
  363. package/dist/tests/fixtures/e2e-ts-sentry-route-env/server.d.ts +1 -0
  364. package/dist/tests/fixtures/e2e-ts-sentry-route-env/server.js +24 -0
  365. package/dist/tests/fixtures/ingest-basic/src/index.d.ts +1 -0
  366. package/dist/tests/fixtures/ingest-basic/src/index.js +6 -0
  367. package/dist/tests/fixtures/mixed-language-basic/api.d.ts +2 -0
  368. package/dist/tests/fixtures/mixed-language-basic/api.js +12 -0
  369. package/dist/tests/fixtures/monorepo-app-plus-terraform/packages/app/app/route.d.ts +1 -0
  370. package/dist/tests/fixtures/monorepo-app-plus-terraform/packages/app/app/route.js +6 -0
  371. package/dist/tests/fixtures/monorepo-front-back-sections/backend/app/route.d.ts +1 -0
  372. package/dist/tests/fixtures/monorepo-front-back-sections/backend/app/route.js +6 -0
  373. package/dist/tests/fixtures/monorepo-front-back-sections/frontend/app/route.d.ts +1 -0
  374. package/dist/tests/fixtures/monorepo-front-back-sections/frontend/app/route.js +7 -0
  375. package/dist/tests/fixtures/typescript-basic/app/route.d.ts +1 -0
  376. package/dist/tests/fixtures/typescript-basic/app/route.js +7 -0
  377. package/dist/tests/fixtures/typescript-basic/db-client-import.d.ts +2 -0
  378. package/dist/tests/fixtures/typescript-basic/db-client-import.js +8 -0
  379. package/dist/tests/fixtures/typescript-basic/db.d.ts +3 -0
  380. package/dist/tests/fixtures/typescript-basic/db.js +7 -0
  381. package/dist/tests/fixtures/typescript-basic/external-api.d.ts +1 -0
  382. package/dist/tests/fixtures/typescript-basic/external-api.js +18 -0
  383. package/dist/tests/fixtures/typescript-basic/pg-client.d.ts +3 -0
  384. package/dist/tests/fixtures/typescript-basic/pg-client.js +7 -0
  385. package/dist/tests/fixtures/typescript-basic/server.d.ts +14 -0
  386. package/dist/tests/fixtures/typescript-basic/server.js +4 -0
  387. package/dist/tests/fixtures/typescript-dependency-manifests-basic/src/index.d.ts +0 -0
  388. package/dist/tests/fixtures/typescript-dependency-manifests-basic/src/index.js +2 -0
  389. package/dist/tests/helpers/scan-result-builders.d.ts +2 -0
  390. package/dist/tests/helpers/scan-result-builders.js +15 -0
  391. package/dist/tests/schema/dataflow-wrapper.schema.spec.d.ts +1 -0
  392. package/dist/tests/schema/dataflow-wrapper.schema.spec.js +89 -0
  393. package/dist/tests/schema/diagram-graph.schema.spec.d.ts +1 -0
  394. package/dist/tests/schema/diagram-graph.schema.spec.js +48 -0
  395. package/dist/tests/schema/scan-config.schema.spec.d.ts +1 -0
  396. package/dist/tests/schema/scan-config.schema.spec.js +135 -0
  397. package/dist/tests/schema/scan-result.schema.spec.d.ts +1 -0
  398. package/dist/tests/schema/scan-result.schema.spec.js +177 -0
  399. package/dist/tests/unit/ai-enrichment/agent-orchestrator.spec.d.ts +1 -0
  400. package/dist/tests/unit/ai-enrichment/agent-orchestrator.spec.js +483 -0
  401. package/dist/tests/unit/ai-enrichment/candidate-selector.spec.d.ts +1 -0
  402. package/dist/tests/unit/ai-enrichment/candidate-selector.spec.js +106 -0
  403. package/dist/tests/unit/ai-enrichment/create-ai-provider.spec.d.ts +1 -0
  404. package/dist/tests/unit/ai-enrichment/create-ai-provider.spec.js +32 -0
  405. package/dist/tests/unit/ai-enrichment/endpoint-resolution.spec.d.ts +1 -0
  406. package/dist/tests/unit/ai-enrichment/endpoint-resolution.spec.js +47 -0
  407. package/dist/tests/unit/ai-enrichment/fallbacks.spec.d.ts +1 -0
  408. package/dist/tests/unit/ai-enrichment/fallbacks.spec.js +1304 -0
  409. package/dist/tests/unit/ai-enrichment/families/chat-completions-family.spec.d.ts +1 -0
  410. package/dist/tests/unit/ai-enrichment/families/chat-completions-family.spec.js +219 -0
  411. package/dist/tests/unit/ai-enrichment/families/generate-content-family.spec.d.ts +1 -0
  412. package/dist/tests/unit/ai-enrichment/families/generate-content-family.spec.js +119 -0
  413. package/dist/tests/unit/ai-enrichment/families/messages-family.spec.d.ts +1 -0
  414. package/dist/tests/unit/ai-enrichment/families/messages-family.spec.js +129 -0
  415. package/dist/tests/unit/ai-enrichment/families/ollama-generate-family.spec.d.ts +1 -0
  416. package/dist/tests/unit/ai-enrichment/families/ollama-generate-family.spec.js +69 -0
  417. package/dist/tests/unit/ai-enrichment/merge-rules.spec.d.ts +1 -0
  418. package/dist/tests/unit/ai-enrichment/merge-rules.spec.js +422 -0
  419. package/dist/tests/unit/ai-enrichment/openai-proposals-response.schema.spec.d.ts +1 -0
  420. package/dist/tests/unit/ai-enrichment/openai-proposals-response.schema.spec.js +30 -0
  421. package/dist/tests/unit/ai-enrichment/pipeline.spec.d.ts +1 -0
  422. package/dist/tests/unit/ai-enrichment/pipeline.spec.js +120 -0
  423. package/dist/tests/unit/ai-enrichment/planner.spec.d.ts +1 -0
  424. package/dist/tests/unit/ai-enrichment/planner.spec.js +106 -0
  425. package/dist/tests/unit/ai-enrichment/platform-proxy-provider.spec.d.ts +1 -0
  426. package/dist/tests/unit/ai-enrichment/platform-proxy-provider.spec.js +51 -0
  427. package/dist/tests/unit/ai-enrichment/provider-contract.spec.d.ts +1 -0
  428. package/dist/tests/unit/ai-enrichment/provider-contract.spec.js +244 -0
  429. package/dist/tests/unit/ai-enrichment/provider-json-parse.spec.d.ts +1 -0
  430. package/dist/tests/unit/ai-enrichment/provider-json-parse.spec.js +24 -0
  431. package/dist/tests/unit/ai-enrichment/provider-output-token-budget.spec.d.ts +1 -0
  432. package/dist/tests/unit/ai-enrichment/provider-output-token-budget.spec.js +15 -0
  433. package/dist/tests/unit/ai-enrichment/provider-prompt-env.spec.d.ts +1 -0
  434. package/dist/tests/unit/ai-enrichment/provider-prompt-env.spec.js +54 -0
  435. package/dist/tests/unit/ai-enrichment/provider-prompt.spec.d.ts +1 -0
  436. package/dist/tests/unit/ai-enrichment/provider-prompt.spec.js +206 -0
  437. package/dist/tests/unit/ai-enrichment/provider-topology-terraform-aws.spec.d.ts +1 -0
  438. package/dist/tests/unit/ai-enrichment/provider-topology-terraform-aws.spec.js +43 -0
  439. package/dist/tests/unit/ai-enrichment/provider-topology-terraform-kubernetes.spec.d.ts +1 -0
  440. package/dist/tests/unit/ai-enrichment/provider-topology-terraform-kubernetes.spec.js +40 -0
  441. package/dist/tests/unit/ai-enrichment/providers/fetch-with-timeout.spec.d.ts +1 -0
  442. package/dist/tests/unit/ai-enrichment/providers/fetch-with-timeout.spec.js +22 -0
  443. package/dist/tests/unit/ai-enrichment/resolve-provider.spec.d.ts +1 -0
  444. package/dist/tests/unit/ai-enrichment/resolve-provider.spec.js +67 -0
  445. package/dist/tests/unit/ai-enrichment/scan-paths-exact.spec.d.ts +1 -0
  446. package/dist/tests/unit/ai-enrichment/scan-paths-exact.spec.js +35 -0
  447. package/dist/tests/unit/ai-enrichment/scan-paths.spec.d.ts +1 -0
  448. package/dist/tests/unit/ai-enrichment/scan-paths.spec.js +21 -0
  449. package/dist/tests/unit/ai-enrichment/sensitive-paths.spec.d.ts +1 -0
  450. package/dist/tests/unit/ai-enrichment/sensitive-paths.spec.js +20 -0
  451. package/dist/tests/unit/ai-enrichment/third-party-data-flow.spec.d.ts +1 -0
  452. package/dist/tests/unit/ai-enrichment/third-party-data-flow.spec.js +963 -0
  453. package/dist/tests/unit/ai-enrichment/third-party-evidence.spec.d.ts +1 -0
  454. package/dist/tests/unit/ai-enrichment/third-party-evidence.spec.js +117 -0
  455. package/dist/tests/unit/ai-enrichment/third-party-subtype.spec.d.ts +1 -0
  456. package/dist/tests/unit/ai-enrichment/third-party-subtype.spec.js +45 -0
  457. package/dist/tests/unit/ai-enrichment/tools-validation.spec.d.ts +1 -0
  458. package/dist/tests/unit/ai-enrichment/tools-validation.spec.js +66 -0
  459. package/dist/tests/unit/analyzers/python/parser.spec.d.ts +1 -0
  460. package/dist/tests/unit/analyzers/python/parser.spec.js +104 -0
  461. package/dist/tests/unit/analyzers/python/patterns.spec.d.ts +1 -0
  462. package/dist/tests/unit/analyzers/python/patterns.spec.js +289 -0
  463. package/dist/tests/unit/analyzers/registry.spec.d.ts +1 -0
  464. package/dist/tests/unit/analyzers/registry.spec.js +234 -0
  465. package/dist/tests/unit/analyzers/terraform/classifier-subtype-parity.spec.d.ts +1 -0
  466. package/dist/tests/unit/analyzers/terraform/classifier-subtype-parity.spec.js +87 -0
  467. package/dist/tests/unit/analyzers/terraform/detector.spec.d.ts +1 -0
  468. package/dist/tests/unit/analyzers/terraform/detector.spec.js +110 -0
  469. package/dist/tests/unit/analyzers/terraform/generated-provider-hints.spec.d.ts +1 -0
  470. package/dist/tests/unit/analyzers/terraform/generated-provider-hints.spec.js +53 -0
  471. package/dist/tests/unit/analyzers/terraform/parser.spec.d.ts +1 -0
  472. package/dist/tests/unit/analyzers/terraform/parser.spec.js +56 -0
  473. package/dist/tests/unit/analyzers/terraform/terraform-module-manifest.spec.d.ts +1 -0
  474. package/dist/tests/unit/analyzers/terraform/terraform-module-manifest.spec.js +63 -0
  475. package/dist/tests/unit/analyzers/terraform/terraform-utility-resource.spec.d.ts +1 -0
  476. package/dist/tests/unit/analyzers/terraform/terraform-utility-resource.spec.js +19 -0
  477. package/dist/tests/unit/analyzers/terraform-exec.spec.d.ts +1 -0
  478. package/dist/tests/unit/analyzers/terraform-exec.spec.js +27 -0
  479. package/dist/tests/unit/analyzers/terraform-show-json.spec.d.ts +1 -0
  480. package/dist/tests/unit/analyzers/terraform-show-json.spec.js +77 -0
  481. package/dist/tests/unit/analyzers/typescript/dependency-manifests.spec.d.ts +1 -0
  482. package/dist/tests/unit/analyzers/typescript/dependency-manifests.spec.js +61 -0
  483. package/dist/tests/unit/analyzers/typescript/detector.spec.d.ts +1 -0
  484. package/dist/tests/unit/analyzers/typescript/detector.spec.js +225 -0
  485. package/dist/tests/unit/analyzers/typescript/external-apis-auth0.spec.d.ts +1 -0
  486. package/dist/tests/unit/analyzers/typescript/external-apis-auth0.spec.js +49 -0
  487. package/dist/tests/unit/analyzers/typescript/external-apis-sentry.spec.d.ts +1 -0
  488. package/dist/tests/unit/analyzers/typescript/external-apis-sentry.spec.js +27 -0
  489. package/dist/tests/unit/analyzers/typescript/fixture-integration.spec.d.ts +1 -0
  490. package/dist/tests/unit/analyzers/typescript/fixture-integration.spec.js +64 -0
  491. package/dist/tests/unit/analyzers/typescript/parser.spec.d.ts +1 -0
  492. package/dist/tests/unit/analyzers/typescript/parser.spec.js +99 -0
  493. package/dist/tests/unit/analyzers/typescript/pattern-config.spec.d.ts +1 -0
  494. package/dist/tests/unit/analyzers/typescript/pattern-config.spec.js +24 -0
  495. package/dist/tests/unit/analyzers/typescript/property-detection.spec.d.ts +1 -0
  496. package/dist/tests/unit/analyzers/typescript/property-detection.spec.js +138 -0
  497. package/dist/tests/unit/classifier/classify.spec.d.ts +1 -0
  498. package/dist/tests/unit/classifier/classify.spec.js +1453 -0
  499. package/dist/tests/unit/classifier/enhance.spec.d.ts +1 -0
  500. package/dist/tests/unit/classifier/enhance.spec.js +400 -0
  501. package/dist/tests/unit/classifier/external-url-third-party.spec.d.ts +1 -0
  502. package/dist/tests/unit/classifier/external-url-third-party.spec.js +83 -0
  503. package/dist/tests/unit/classifier/frontend-framework-grouping.spec.d.ts +1 -0
  504. package/dist/tests/unit/classifier/frontend-framework-grouping.spec.js +44 -0
  505. package/dist/tests/unit/classifier/terraform-grouping.spec.d.ts +1 -0
  506. package/dist/tests/unit/classifier/terraform-grouping.spec.js +96 -0
  507. package/dist/tests/unit/cli/config-command.spec.d.ts +1 -0
  508. package/dist/tests/unit/cli/config-command.spec.js +51 -0
  509. package/dist/tests/unit/cli/scan-command-ai-flags.spec.d.ts +0 -0
  510. package/dist/tests/unit/cli/scan-command-ai-flags.spec.js +149 -0
  511. package/dist/tests/unit/cli/scan-command-diagram-graph.spec.d.ts +1 -0
  512. package/dist/tests/unit/cli/scan-command-diagram-graph.spec.js +26 -0
  513. package/dist/tests/unit/cli/scan-command-e2e-monorepo-app-plus-terraform.spec.d.ts +1 -0
  514. package/dist/tests/unit/cli/scan-command-e2e-monorepo-app-plus-terraform.spec.js +107 -0
  515. package/dist/tests/unit/cli/scan-command-e2e-monorepo-front-back-sections.spec.d.ts +1 -0
  516. package/dist/tests/unit/cli/scan-command-e2e-monorepo-front-back-sections.spec.js +74 -0
  517. package/dist/tests/unit/cli/scan-command-e2e-python-basic.spec.d.ts +1 -0
  518. package/dist/tests/unit/cli/scan-command-e2e-python-basic.spec.js +43 -0
  519. package/dist/tests/unit/cli/scan-command-e2e-terraform-basic.spec.d.ts +1 -0
  520. package/dist/tests/unit/cli/scan-command-e2e-terraform-basic.spec.js +62 -0
  521. package/dist/tests/unit/cli/scan-command-e2e-ts-sample.spec.d.ts +1 -0
  522. package/dist/tests/unit/cli/scan-command-e2e-ts-sample.spec.js +41 -0
  523. package/dist/tests/unit/cli/scan-command-e2e-ts-sentry-route-env.spec.d.ts +1 -0
  524. package/dist/tests/unit/cli/scan-command-e2e-ts-sentry-route-env.spec.js +85 -0
  525. package/dist/tests/unit/cli/scan-command-exit-code.spec.d.ts +1 -0
  526. package/dist/tests/unit/cli/scan-command-exit-code.spec.js +131 -0
  527. package/dist/tests/unit/cli/scan-quota-flow.spec.d.ts +1 -0
  528. package/dist/tests/unit/cli/scan-quota-flow.spec.js +76 -0
  529. package/dist/tests/unit/config/property-detection-config.spec.d.ts +1 -0
  530. package/dist/tests/unit/config/property-detection-config.spec.js +38 -0
  531. package/dist/tests/unit/config/redact.spec.d.ts +1 -0
  532. package/dist/tests/unit/config/redact.spec.js +19 -0
  533. package/dist/tests/unit/config/resolve-config.spec.d.ts +1 -0
  534. package/dist/tests/unit/config/resolve-config.spec.js +172 -0
  535. package/dist/tests/unit/config/scan-env-debug.spec.d.ts +1 -0
  536. package/dist/tests/unit/config/scan-env-debug.spec.js +17 -0
  537. package/dist/tests/unit/config/validate-scan-ai.spec.d.ts +1 -0
  538. package/dist/tests/unit/config/validate-scan-ai.spec.js +53 -0
  539. package/dist/tests/unit/core/classifier-phase-regressions.spec.d.ts +1 -0
  540. package/dist/tests/unit/core/classifier-phase-regressions.spec.js +68 -0
  541. package/dist/tests/unit/core/dependency-manifest-performance-budgets.spec.d.ts +1 -0
  542. package/dist/tests/unit/core/dependency-manifest-performance-budgets.spec.js +66 -0
  543. package/dist/tests/unit/core/dependency-manifest-toggles-confidence.spec.d.ts +1 -0
  544. package/dist/tests/unit/core/dependency-manifest-toggles-confidence.spec.js +132 -0
  545. package/dist/tests/unit/core/discover-service-sections.spec.d.ts +1 -0
  546. package/dist/tests/unit/core/discover-service-sections.spec.js +204 -0
  547. package/dist/tests/unit/core/graph-mapping.spec.d.ts +1 -0
  548. package/dist/tests/unit/core/graph-mapping.spec.js +779 -0
  549. package/dist/tests/unit/core/invariant-tests-dedupe-determinism.spec.d.ts +1 -0
  550. package/dist/tests/unit/core/invariant-tests-dedupe-determinism.spec.js +64 -0
  551. package/dist/tests/unit/core/manifest-package-hub.spec.d.ts +1 -0
  552. package/dist/tests/unit/core/manifest-package-hub.spec.js +53 -0
  553. package/dist/tests/unit/core/monorepo-package-sections.spec.d.ts +1 -0
  554. package/dist/tests/unit/core/monorepo-package-sections.spec.js +121 -0
  555. package/dist/tests/unit/core/no-source-code-leakage.spec.d.ts +1 -0
  556. package/dist/tests/unit/core/no-source-code-leakage.spec.js +48 -0
  557. package/dist/tests/unit/core/orchestrator.spec.d.ts +1 -0
  558. package/dist/tests/unit/core/orchestrator.spec.js +252 -0
  559. package/dist/tests/unit/core/output-json.spec.d.ts +1 -0
  560. package/dist/tests/unit/core/output-json.spec.js +65 -0
  561. package/dist/tests/unit/core/parsing-error-handling-nonfatal.spec.d.ts +1 -0
  562. package/dist/tests/unit/core/parsing-error-handling-nonfatal.spec.js +42 -0
  563. package/dist/tests/unit/core/resolve-path-under-scan-root.spec.d.ts +1 -0
  564. package/dist/tests/unit/core/resolve-path-under-scan-root.spec.js +54 -0
  565. package/dist/tests/unit/core/scan-result-language-stats.spec.d.ts +1 -0
  566. package/dist/tests/unit/core/scan-result-language-stats.spec.js +15 -0
  567. package/dist/tests/unit/core/section-discovery-excludes.spec.d.ts +1 -0
  568. package/dist/tests/unit/core/section-discovery-excludes.spec.js +49 -0
  569. package/dist/tests/unit/core/section-runtime.spec.d.ts +1 -0
  570. package/dist/tests/unit/core/section-runtime.spec.js +166 -0
  571. package/dist/tests/unit/core/stable-component-ids.spec.d.ts +1 -0
  572. package/dist/tests/unit/core/stable-component-ids.spec.js +112 -0
  573. package/dist/tests/unit/core/structural-scan.spec.d.ts +1 -0
  574. package/dist/tests/unit/core/structural-scan.spec.js +83 -0
  575. package/dist/tests/unit/core/terraform-json-overlay.spec.d.ts +1 -0
  576. package/dist/tests/unit/core/terraform-json-overlay.spec.js +36 -0
  577. package/dist/tests/unit/core/terraform-minimal-services.spec.d.ts +1 -0
  578. package/dist/tests/unit/core/terraform-minimal-services.spec.js +378 -0
  579. package/dist/tests/unit/data-flow/application-hub.spec.d.ts +1 -0
  580. package/dist/tests/unit/data-flow/application-hub.spec.js +48 -0
  581. package/dist/tests/unit/data-flow/cross-section-terraform-bridge.spec.d.ts +1 -0
  582. package/dist/tests/unit/data-flow/cross-section-terraform-bridge.spec.js +95 -0
  583. package/dist/tests/unit/data-flow/dedupe.spec.d.ts +1 -0
  584. package/dist/tests/unit/data-flow/dedupe.spec.js +134 -0
  585. package/dist/tests/unit/data-flow/detector.spec.d.ts +1 -0
  586. package/dist/tests/unit/data-flow/detector.spec.js +1254 -0
  587. package/dist/tests/unit/data-flow/drop-cross-section-flows.spec.d.ts +1 -0
  588. package/dist/tests/unit/data-flow/drop-cross-section-flows.spec.js +132 -0
  589. package/dist/tests/unit/data-flow/ensure-actor-flow.spec.d.ts +1 -0
  590. package/dist/tests/unit/data-flow/ensure-actor-flow.spec.js +233 -0
  591. package/dist/tests/unit/data-flow/ensure-manifest-declared-flows.spec.d.ts +1 -0
  592. package/dist/tests/unit/data-flow/ensure-manifest-declared-flows.spec.js +125 -0
  593. package/dist/tests/unit/data-flow/ensure-section-api-flows.spec.d.ts +1 -0
  594. package/dist/tests/unit/data-flow/ensure-section-api-flows.spec.js +40 -0
  595. package/dist/tests/unit/data-flow/postprocess.spec.d.ts +1 -0
  596. package/dist/tests/unit/data-flow/postprocess.spec.js +78 -0
  597. package/dist/tests/unit/data-flow/rewire.spec.d.ts +1 -0
  598. package/dist/tests/unit/data-flow/rewire.spec.js +194 -0
  599. package/dist/tests/unit/data-flow/terraform-flows.spec.d.ts +1 -0
  600. package/dist/tests/unit/data-flow/terraform-flows.spec.js +199 -0
  601. package/dist/tests/unit/evals/metrics.spec.d.ts +1 -0
  602. package/dist/tests/unit/evals/metrics.spec.js +54 -0
  603. package/dist/tests/unit/ingest/env-exclusion.spec.d.ts +1 -0
  604. package/dist/tests/unit/ingest/env-exclusion.spec.js +43 -0
  605. package/dist/tests/unit/ingest/file-system.spec.d.ts +1 -0
  606. package/dist/tests/unit/ingest/file-system.spec.js +180 -0
  607. package/dist/tests/unit/ingest/gitignore.spec.d.ts +1 -0
  608. package/dist/tests/unit/ingest/gitignore.spec.js +30 -0
  609. package/dist/tests/unit/observability/scan-sentry.spec.d.ts +1 -0
  610. package/dist/tests/unit/observability/scan-sentry.spec.js +60 -0
  611. package/dist/tests/unit/patterns/scan-exclusions.spec.d.ts +1 -0
  612. package/dist/tests/unit/patterns/scan-exclusions.spec.js +58 -0
  613. package/dist/tests/unit/pipeline/ai-orchestrator-options.spec.d.ts +1 -0
  614. package/dist/tests/unit/pipeline/ai-orchestrator-options.spec.js +19 -0
  615. package/dist/tests/unit/platform-api/dataparade-api-base-url.spec.d.ts +1 -0
  616. package/dist/tests/unit/platform-api/dataparade-api-base-url.spec.js +19 -0
  617. package/dist/tests/unit/platform-api/estimate-scan-footprint.spec.d.ts +1 -0
  618. package/dist/tests/unit/platform-api/estimate-scan-footprint.spec.js +50 -0
  619. package/dist/tests/unit/tracing/langsmith-tracing.spec.d.ts +1 -0
  620. package/dist/tests/unit/tracing/langsmith-tracing.spec.js +118 -0
  621. package/package.json +84 -0
@@ -0,0 +1,80 @@
1
+ import type { RawFinding } from "../types/detection";
2
+ export interface ServiceSection {
3
+ /**
4
+ * Stable identifier used by the CLI import/layout layer.
5
+ * Stored as `node.data.section_id`.
6
+ */
7
+ id: string;
8
+ /**
9
+ * Human readable label stored as `node.data.section_label`.
10
+ */
11
+ label: string;
12
+ /**
13
+ * Role stored as `node.data.section_role`.
14
+ *
15
+ * - `root`: fallback scan-root / non-manifest-tagged files
16
+ * - `service`: directories that contain at least one discovered manifest
17
+ */
18
+ role: "root" | "service";
19
+ /**
20
+ * Relative directory path (POSIX, relative to scan root) used for matching.
21
+ * The root/fallback section uses ''.
22
+ */
23
+ sectionDir: string;
24
+ /**
25
+ * Manifest files discovered under this section directory (relative, POSIX).
26
+ */
27
+ manifestPaths: string[];
28
+ /** npm/pnpm `name` from package.json when this section has one. */
29
+ packageName?: string;
30
+ /**
31
+ * Workspace-level package hub for monorepo rollup (see inferred monorepo depth).
32
+ * When unset, all `service` sections are treated as primary.
33
+ */
34
+ isPrimaryMonorepoPackage?: boolean;
35
+ /**
36
+ * Section registered from Terraform config only (no `package.json` under `sectionDir`).
37
+ * Set at discovery; used by {@link isTerraformStackSection} instead of path heuristics.
38
+ */
39
+ isTerraformStack?: boolean;
40
+ }
41
+ export interface DiscoverServiceSectionsOptions {
42
+ excludePaths?: string[];
43
+ terraformStackSectionPathDepth?: number;
44
+ /**
45
+ * When `terraformStackSectionPathDepth` is omitted, infer `N` from `.tf` layout.
46
+ * Defaults to true via `createDefaultScanConfiguration`; set false to disable.
47
+ */
48
+ autoInferTerraformStackSectionPathDepth?: boolean;
49
+ /** Override inferred workspace package depth (POSIX segments under scan root). */
50
+ monorepoPackageSectionPathDepth?: number;
51
+ /**
52
+ * When `monorepoPackageSectionPathDepth` is omitted, infer workspace depth from
53
+ * `package.json` layout. Defaults to true via `createDefaultScanConfiguration`.
54
+ */
55
+ autoInferMonorepoPackageSectionPathDepth?: boolean;
56
+ }
57
+ export interface DiscoverServiceSectionsResult {
58
+ sections: ServiceSection[];
59
+ /** Set when depth was inferred (not passed explicitly). */
60
+ inferredTerraformStackSectionPathDepth?: number;
61
+ inferredMonorepoPackageSectionPathDepth?: number;
62
+ /** Effective monorepo depth after inference or explicit override. */
63
+ monorepoPackageSectionPathDepth?: number;
64
+ }
65
+ /**
66
+ * Pick path depth `N` where the most Terraform stack directories live.
67
+ * Prefers directories that contain `main.tf`; falls back to any `*.tf` directory.
68
+ * Tie-break: deeper `N` (more specific stack roots).
69
+ */
70
+ export declare function inferTerraformStackSectionPathDepth(tfConfigRelPaths: string[]): number | undefined;
71
+ /**
72
+ * Pick workspace package depth: shallowest path depth with at least two
73
+ * `package.json` directories (typical `packages/*` monorepo layout).
74
+ */
75
+ export declare function inferMonorepoPackageSectionPathDepth(packageJsonRelPaths: string[]): number | undefined;
76
+ export declare function rollupSectionIdToMonorepoDepth(sectionId: string, depth: number): string;
77
+ export declare function discoverServiceSections(rootPath: string, opts?: DiscoverServiceSectionsOptions): Promise<DiscoverServiceSectionsResult>;
78
+ export declare function tagFindingsWithServiceSections(findings: RawFinding[], sections: ServiceSection[], opts?: {
79
+ monorepoPackageSectionPathDepth?: number;
80
+ }): void;
@@ -0,0 +1,468 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.inferTerraformStackSectionPathDepth = inferTerraformStackSectionPathDepth;
7
+ exports.inferMonorepoPackageSectionPathDepth = inferMonorepoPackageSectionPathDepth;
8
+ exports.rollupSectionIdToMonorepoDepth = rollupSectionIdToMonorepoDepth;
9
+ exports.discoverServiceSections = discoverServiceSections;
10
+ exports.tagFindingsWithServiceSections = tagFindingsWithServiceSections;
11
+ const promises_1 = __importDefault(require("fs/promises"));
12
+ const path_1 = __importDefault(require("path"));
13
+ const gitignore_1 = require("../../ingest/gitignore");
14
+ const scan_exclusions_1 = require("../../patterns/scan-exclusions");
15
+ function patternToRegex(pattern) {
16
+ let escaped = pattern.replace(/[-\\^$+?.()|[\]{}*?]/g, "\\$&");
17
+ escaped = escaped.replace(/\\\*\\\*/g, ".*");
18
+ escaped = escaped.replace(/\\\*/g, "[^/]*");
19
+ escaped = escaped.replace(/\\\?/g, "[^/]");
20
+ return new RegExp(`^${escaped}$`);
21
+ }
22
+ function normalizeUserPattern(pattern) {
23
+ return (0, gitignore_1.toPosixPath)(pattern.replace(/^\.\/+/, "").trim());
24
+ }
25
+ function isExcludedByUserPatterns(relativePath, excludePaths) {
26
+ const rel = (0, gitignore_1.toPosixPath)(relativePath);
27
+ for (const rawPattern of excludePaths) {
28
+ const pattern = normalizeUserPattern(rawPattern);
29
+ if (!pattern)
30
+ continue;
31
+ if (pattern.endsWith("/**")) {
32
+ const prefix = pattern.slice(0, -3).replace(/\/$/, "");
33
+ if (rel === prefix || rel.startsWith(`${prefix}/`))
34
+ return true;
35
+ }
36
+ if (patternToRegex(pattern).test(rel))
37
+ return true;
38
+ }
39
+ return false;
40
+ }
41
+ async function walkForManifests(currentDirAbs, rootDirAbs, excludePaths, accumulatedGitignoreRules, onManifestRelPath) {
42
+ const gitignoreRules = await (0, gitignore_1.gitignoreRulesForDir)(currentDirAbs, accumulatedGitignoreRules);
43
+ let entries;
44
+ try {
45
+ entries = await promises_1.default.readdir(currentDirAbs, { withFileTypes: true });
46
+ }
47
+ catch {
48
+ return;
49
+ }
50
+ for (const entry of entries) {
51
+ const entryPathAbs = path_1.default.join(currentDirAbs, entry.name);
52
+ const entryRelPosix = (0, gitignore_1.toPosixPath)(path_1.default.relative(rootDirAbs, entryPathAbs));
53
+ if (entry.isDirectory()) {
54
+ if ((0, scan_exclusions_1.shouldSkipDirectoryName)(entry.name))
55
+ continue;
56
+ if (entryRelPosix &&
57
+ isExcludedByUserPatterns(entryRelPosix, excludePaths)) {
58
+ continue;
59
+ }
60
+ if ((0, gitignore_1.isPathIgnored)(entryPathAbs, true, gitignoreRules)) {
61
+ continue;
62
+ }
63
+ await walkForManifests(entryPathAbs, rootDirAbs, excludePaths, gitignoreRules, onManifestRelPath);
64
+ continue;
65
+ }
66
+ if (!entry.isFile())
67
+ continue;
68
+ if ((0, gitignore_1.isPathIgnored)(entryPathAbs, false, gitignoreRules)) {
69
+ continue;
70
+ }
71
+ const name = entry.name;
72
+ const lower = name.toLowerCase();
73
+ const isTsManifest = lower === "package.json";
74
+ const isRequirements = lower.startsWith("requirements") && lower.endsWith(".txt");
75
+ const isPyproject = lower === "pyproject.toml";
76
+ const isPipfile = lower === "pipfile";
77
+ if (!isTsManifest && !isRequirements && !isPyproject && !isPipfile) {
78
+ continue;
79
+ }
80
+ const manifestRel = path_1.default.relative(rootDirAbs, entryPathAbs);
81
+ if (manifestRel.startsWith("..") || path_1.default.isAbsolute(manifestRel))
82
+ continue;
83
+ if (isExcludedByUserPatterns((0, gitignore_1.toPosixPath)(manifestRel), excludePaths)) {
84
+ continue;
85
+ }
86
+ onManifestRelPath((0, gitignore_1.toPosixPath)(manifestRel));
87
+ }
88
+ }
89
+ /**
90
+ * True for Terraform HCL module files in a directory (any `*.tf`).
91
+ * Excludes `.tf.json` (Terraform JSON syntax). Does not treat `.tfvars` as a
92
+ * module root marker — those files use a different suffix.
93
+ */
94
+ function isTerraformConfigFileName(fileName) {
95
+ const lower = fileName.toLowerCase();
96
+ if (!lower.endsWith(".tf"))
97
+ return false;
98
+ if (lower.endsWith(".tf.json"))
99
+ return false;
100
+ return true;
101
+ }
102
+ async function walkForTerraformConfigFiles(currentDirAbs, rootDirAbs, excludePaths, accumulatedGitignoreRules, onTerraformConfigRelPosix) {
103
+ const gitignoreRules = await (0, gitignore_1.gitignoreRulesForDir)(currentDirAbs, accumulatedGitignoreRules);
104
+ let entries;
105
+ try {
106
+ entries = await promises_1.default.readdir(currentDirAbs, { withFileTypes: true });
107
+ }
108
+ catch {
109
+ return;
110
+ }
111
+ for (const entry of entries) {
112
+ const entryPathAbs = path_1.default.join(currentDirAbs, entry.name);
113
+ const entryRelPosix = (0, gitignore_1.toPosixPath)(path_1.default.relative(rootDirAbs, entryPathAbs));
114
+ if (entry.isDirectory()) {
115
+ if ((0, scan_exclusions_1.shouldSkipDirectoryName)(entry.name))
116
+ continue;
117
+ if (entryRelPosix &&
118
+ isExcludedByUserPatterns(entryRelPosix, excludePaths)) {
119
+ continue;
120
+ }
121
+ if ((0, gitignore_1.isPathIgnored)(entryPathAbs, true, gitignoreRules)) {
122
+ continue;
123
+ }
124
+ await walkForTerraformConfigFiles(entryPathAbs, rootDirAbs, excludePaths, gitignoreRules, onTerraformConfigRelPosix);
125
+ continue;
126
+ }
127
+ if (!entry.isFile())
128
+ continue;
129
+ if ((0, gitignore_1.isPathIgnored)(entryPathAbs, false, gitignoreRules)) {
130
+ continue;
131
+ }
132
+ if (!isTerraformConfigFileName(entry.name))
133
+ continue;
134
+ const manifestRel = path_1.default.relative(rootDirAbs, entryPathAbs);
135
+ if (manifestRel.startsWith("..") || path_1.default.isAbsolute(manifestRel))
136
+ continue;
137
+ const relPosix = (0, gitignore_1.toPosixPath)(manifestRel);
138
+ if (isExcludedByUserPatterns(relPosix, excludePaths))
139
+ continue;
140
+ onTerraformConfigRelPosix(relPosix);
141
+ }
142
+ }
143
+ function sectionKeyFromDir(sectionDirPosix) {
144
+ // dirname('package.json') === '.' in POSIX; treat it as scan-root.
145
+ if (!sectionDirPosix || sectionDirPosix === ".")
146
+ return "root";
147
+ return sectionDirPosix;
148
+ }
149
+ function labelFromPackageName(packageName, fallbackBasename) {
150
+ const trimmed = packageName.trim();
151
+ if (!trimmed)
152
+ return fallbackBasename;
153
+ const slash = trimmed.lastIndexOf("/");
154
+ const base = slash >= 0 ? trimmed.slice(slash + 1) : trimmed;
155
+ const withoutScope = base.replace(/^@/, "").trim();
156
+ return withoutScope || fallbackBasename;
157
+ }
158
+ function labelFromSectionDir(sectionDirPosix, packageName) {
159
+ const key = sectionKeyFromDir(sectionDirPosix);
160
+ if (key === "root")
161
+ return "root";
162
+ const basename = path_1.default.posix.basename(sectionDirPosix);
163
+ if (packageName)
164
+ return labelFromPackageName(packageName, basename);
165
+ return basename;
166
+ }
167
+ async function readPackageJsonName(manifestAbsPath) {
168
+ try {
169
+ const raw = await promises_1.default.readFile(manifestAbsPath, "utf8");
170
+ const parsed = JSON.parse(raw);
171
+ if (typeof parsed.name === "string" && parsed.name.trim()) {
172
+ return parsed.name.trim();
173
+ }
174
+ }
175
+ catch {
176
+ // ignore unreadable or invalid package.json
177
+ }
178
+ return undefined;
179
+ }
180
+ function sectionHasPackageManifest(manifestPaths) {
181
+ return manifestPaths.some((p) => path_1.default.posix.basename(p) === "package.json");
182
+ }
183
+ function manifestPathIsTerraformConfig(manifestRelPosix) {
184
+ return isTerraformConfigFileName(path_1.default.posix.basename(manifestRelPosix));
185
+ }
186
+ /** True when `manifestPaths` are exclusively `*.tf` files (no app manifests). */
187
+ function sectionIsTerraformOnlyStack(manifestPaths) {
188
+ if (manifestPaths.length === 0)
189
+ return false;
190
+ if (sectionHasPackageManifest(manifestPaths))
191
+ return false;
192
+ return manifestPaths.every(manifestPathIsTerraformConfig);
193
+ }
194
+ function roleFromSectionDir(sectionDirPosix) {
195
+ const key = sectionKeyFromDir(sectionDirPosix);
196
+ return key === "root" ? "root" : "service";
197
+ }
198
+ function registerTerraformStackSections(bySectionDir, tfConfigRelPaths, tfDepth, excludePaths) {
199
+ for (const tfConfigRelPosix of tfConfigRelPaths) {
200
+ const dir = path_1.default.posix.dirname(tfConfigRelPosix);
201
+ const sectionDir = dir === "." ? "" : dir;
202
+ if (!sectionDir)
203
+ continue;
204
+ const segmentCount = sectionDir.split("/").length;
205
+ if (segmentCount !== tfDepth)
206
+ continue;
207
+ if (isExcludedByUserPatterns(sectionDir, excludePaths))
208
+ continue;
209
+ const existing = bySectionDir.get(sectionDir);
210
+ if (existing) {
211
+ if (!existing.manifestPaths.includes(tfConfigRelPosix)) {
212
+ existing.manifestPaths.push(tfConfigRelPosix);
213
+ }
214
+ }
215
+ else {
216
+ bySectionDir.set(sectionDir, { manifestPaths: [tfConfigRelPosix] });
217
+ }
218
+ }
219
+ }
220
+ /**
221
+ * Pick path depth `N` where the most Terraform stack directories live.
222
+ * Prefers directories that contain `main.tf`; falls back to any `*.tf` directory.
223
+ * Tie-break: deeper `N` (more specific stack roots).
224
+ */
225
+ function inferTerraformStackSectionPathDepth(tfConfigRelPaths) {
226
+ const mainTfDirs = new Set();
227
+ const anyTfDirs = new Set();
228
+ for (const rel of tfConfigRelPaths) {
229
+ const dir = path_1.default.posix.dirname(rel);
230
+ if (!dir || dir === ".")
231
+ continue;
232
+ anyTfDirs.add(dir);
233
+ if (path_1.default.posix.basename(rel).toLowerCase() === "main.tf") {
234
+ mainTfDirs.add(dir);
235
+ }
236
+ }
237
+ const stackDirs = mainTfDirs.size > 0 ? mainTfDirs : anyTfDirs;
238
+ if (stackDirs.size === 0)
239
+ return undefined;
240
+ const depthCounts = new Map();
241
+ for (const dir of stackDirs) {
242
+ const depth = dir.split("/").length;
243
+ depthCounts.set(depth, (depthCounts.get(depth) ?? 0) + 1);
244
+ }
245
+ let bestDepth;
246
+ let bestCount = 0;
247
+ for (const [depth, count] of depthCounts) {
248
+ if (count > bestCount ||
249
+ (count === bestCount &&
250
+ bestDepth != null &&
251
+ depth > bestDepth)) {
252
+ bestCount = count;
253
+ bestDepth = depth;
254
+ }
255
+ }
256
+ return bestDepth;
257
+ }
258
+ /**
259
+ * Pick workspace package depth: shallowest path depth with at least two
260
+ * `package.json` directories (typical `packages/*` monorepo layout).
261
+ */
262
+ function inferMonorepoPackageSectionPathDepth(packageJsonRelPaths) {
263
+ const dirs = new Set();
264
+ for (const rel of packageJsonRelPaths) {
265
+ const dir = path_1.default.posix.dirname(rel);
266
+ if (!dir || dir === ".")
267
+ continue;
268
+ dirs.add(dir);
269
+ }
270
+ if (dirs.size < 2)
271
+ return undefined;
272
+ const depthCounts = new Map();
273
+ for (const dir of dirs) {
274
+ const depth = dir.split("/").length;
275
+ depthCounts.set(depth, (depthCounts.get(depth) ?? 0) + 1);
276
+ }
277
+ let bestDepth;
278
+ let bestCount = 0;
279
+ for (const [depth, count] of depthCounts) {
280
+ if (count < 2)
281
+ continue;
282
+ if (count > bestCount ||
283
+ (count === bestCount && bestDepth != null && depth < bestDepth)) {
284
+ bestCount = count;
285
+ bestDepth = depth;
286
+ }
287
+ }
288
+ return bestDepth;
289
+ }
290
+ function rollupSectionIdToMonorepoDepth(sectionId, depth) {
291
+ if (sectionId === "root" || !sectionId.includes("/"))
292
+ return sectionId;
293
+ const segments = sectionId.split("/");
294
+ if (segments.length <= depth)
295
+ return sectionId;
296
+ return segments.slice(0, depth).join("/");
297
+ }
298
+ function ensureMonorepoParentPackageSections(bySectionDir, monorepoDepth) {
299
+ for (const sectionDir of [...bySectionDir.keys()]) {
300
+ if (!sectionDir)
301
+ continue;
302
+ const segments = sectionDir.split("/");
303
+ if (segments.length <= monorepoDepth)
304
+ continue;
305
+ const parentDir = segments.slice(0, monorepoDepth).join("/");
306
+ if (!bySectionDir.has(parentDir)) {
307
+ bySectionDir.set(parentDir, { manifestPaths: [] });
308
+ }
309
+ }
310
+ }
311
+ function markPrimaryMonorepoPackageSections(sections, monorepoDepth) {
312
+ if (monorepoDepth == null)
313
+ return;
314
+ for (const section of sections) {
315
+ if (section.role !== "service" || !section.sectionDir)
316
+ continue;
317
+ section.isPrimaryMonorepoPackage =
318
+ section.sectionDir.split("/").length === monorepoDepth;
319
+ }
320
+ }
321
+ async function discoverServiceSections(rootPath, opts = {}) {
322
+ const rootDirAbs = path_1.default.resolve(rootPath);
323
+ const excludePaths = opts.excludePaths ?? [];
324
+ // Keyed by directory (relative to root). Root uses ''.
325
+ const bySectionDir = new Map();
326
+ const packageJsonRelPaths = [];
327
+ await walkForManifests(rootDirAbs, rootDirAbs, excludePaths, [], (manifestRelPosix) => {
328
+ const dir = path_1.default.posix.dirname(manifestRelPosix);
329
+ const sectionDir = dir === "." ? "" : dir;
330
+ const isPackageJson = path_1.default.posix.basename(manifestRelPosix) === "package.json";
331
+ if (isPackageJson)
332
+ packageJsonRelPaths.push(manifestRelPosix);
333
+ const entry = bySectionDir.get(sectionDir);
334
+ if (entry) {
335
+ entry.manifestPaths.push(manifestRelPosix);
336
+ }
337
+ else {
338
+ bySectionDir.set(sectionDir, { manifestPaths: [manifestRelPosix] });
339
+ }
340
+ });
341
+ for (const manifestRelPosix of packageJsonRelPaths) {
342
+ const dir = path_1.default.posix.dirname(manifestRelPosix);
343
+ const sectionDir = dir === "." ? "" : dir;
344
+ const entry = bySectionDir.get(sectionDir);
345
+ if (!entry)
346
+ continue;
347
+ const packageName = await readPackageJsonName(path_1.default.join(rootDirAbs, manifestRelPosix));
348
+ if (packageName)
349
+ entry.packageName = packageName;
350
+ }
351
+ let monorepoDepth = opts.monorepoPackageSectionPathDepth;
352
+ let inferredMonorepoPackageSectionPathDepth;
353
+ const autoInferMonorepo = opts.autoInferMonorepoPackageSectionPathDepth !== false;
354
+ if (monorepoDepth == null &&
355
+ autoInferMonorepo &&
356
+ packageJsonRelPaths.length >= 2) {
357
+ const inferred = inferMonorepoPackageSectionPathDepth(packageJsonRelPaths);
358
+ if (inferred != null && inferred > 0) {
359
+ monorepoDepth = inferred;
360
+ inferredMonorepoPackageSectionPathDepth = inferred;
361
+ ensureMonorepoParentPackageSections(bySectionDir, monorepoDepth);
362
+ }
363
+ }
364
+ else if (typeof monorepoDepth === "number" &&
365
+ Number.isInteger(monorepoDepth) &&
366
+ monorepoDepth > 0) {
367
+ ensureMonorepoParentPackageSections(bySectionDir, monorepoDepth);
368
+ }
369
+ const tfConfigRelPaths = [];
370
+ await walkForTerraformConfigFiles(rootDirAbs, rootDirAbs, excludePaths, [], (rel) => tfConfigRelPaths.push(rel));
371
+ let tfDepth = opts.terraformStackSectionPathDepth;
372
+ let inferredTerraformStackSectionPathDepth;
373
+ const autoInfer = opts.autoInferTerraformStackSectionPathDepth !== false;
374
+ if (tfDepth == null &&
375
+ autoInfer &&
376
+ tfConfigRelPaths.length > 0) {
377
+ const inferred = inferTerraformStackSectionPathDepth(tfConfigRelPaths);
378
+ if (inferred != null && inferred > 0) {
379
+ tfDepth = inferred;
380
+ inferredTerraformStackSectionPathDepth = inferred;
381
+ }
382
+ }
383
+ if (typeof tfDepth === "number" &&
384
+ Number.isInteger(tfDepth) &&
385
+ tfDepth > 0) {
386
+ registerTerraformStackSections(bySectionDir, tfConfigRelPaths, tfDepth, excludePaths);
387
+ }
388
+ // Always include a fallback section to avoid "no section_id" surprises.
389
+ if (!bySectionDir.has(""))
390
+ bySectionDir.set("", { manifestPaths: [] });
391
+ const sections = Array.from(bySectionDir.entries())
392
+ .map(([sectionDir, v]) => {
393
+ const id = sectionKeyFromDir(sectionDir);
394
+ const isTerraformStack = sectionIsTerraformOnlyStack(v.manifestPaths);
395
+ return {
396
+ id,
397
+ label: labelFromSectionDir(sectionDir, v.packageName),
398
+ role: roleFromSectionDir(sectionDir),
399
+ sectionDir,
400
+ manifestPaths: v.manifestPaths.sort((a, b) => a.localeCompare(b)),
401
+ packageName: v.packageName,
402
+ ...(isTerraformStack ? { isTerraformStack: true } : {}),
403
+ };
404
+ })
405
+ .sort((a, b) => a.id.localeCompare(b.id));
406
+ markPrimaryMonorepoPackageSections(sections, monorepoDepth);
407
+ return {
408
+ sections,
409
+ inferredTerraformStackSectionPathDepth,
410
+ inferredMonorepoPackageSectionPathDepth,
411
+ monorepoPackageSectionPathDepth: monorepoDepth,
412
+ };
413
+ }
414
+ function findNearestSectionForFile(filePathRelPosix, sections) {
415
+ // Longest prefix match on section directory.
416
+ let best;
417
+ let bestLen = -1;
418
+ for (const s of sections) {
419
+ if (!s.sectionDir)
420
+ continue; // root handled as fallback
421
+ if (filePathRelPosix === s.sectionDir ||
422
+ filePathRelPosix.startsWith(`${s.sectionDir}/`)) {
423
+ if (s.sectionDir.length > bestLen) {
424
+ best = s;
425
+ bestLen = s.sectionDir.length;
426
+ }
427
+ }
428
+ }
429
+ return best ?? sections.find((s) => s.id === "root") ?? sections[0];
430
+ }
431
+ function resolveSectionForFinding(filePathRelPosix, sections, monorepoRollupDepth) {
432
+ const section = findNearestSectionForFile(filePathRelPosix, sections);
433
+ if (monorepoRollupDepth == null ||
434
+ !section.sectionDir ||
435
+ !sectionHasPackageManifest(section.manifestPaths)) {
436
+ return section;
437
+ }
438
+ const segmentCount = section.sectionDir.split("/").length;
439
+ if (segmentCount <= monorepoRollupDepth)
440
+ return section;
441
+ const rolledId = rollupSectionIdToMonorepoDepth(section.id, monorepoRollupDepth);
442
+ const rolled = sections.find((s) => s.id === rolledId);
443
+ if (rolled)
444
+ return rolled;
445
+ return {
446
+ ...section,
447
+ id: rolledId,
448
+ label: path_1.default.posix.basename(rolledId),
449
+ sectionDir: rolledId,
450
+ isPrimaryMonorepoPackage: true,
451
+ };
452
+ }
453
+ function tagFindingsWithServiceSections(findings, sections, opts) {
454
+ if (!findings.length)
455
+ return;
456
+ const monorepoRollupDepth = opts?.monorepoPackageSectionPathDepth;
457
+ for (const finding of findings) {
458
+ const filePathRelPosix = (0, gitignore_1.toPosixPath)(finding.location.filePath);
459
+ const section = resolveSectionForFinding(filePathRelPosix, sections, monorepoRollupDepth);
460
+ // Thread through classification via component.properties.
461
+ finding.properties.section_id = section.id;
462
+ finding.properties.section_label = section.label;
463
+ finding.properties.section_role = section.role;
464
+ if (section.packageName) {
465
+ finding.properties.package_name = section.packageName;
466
+ }
467
+ }
468
+ }
@@ -0,0 +1,21 @@
1
+ import type { DetectedComponent } from "../types/component";
2
+ import type { ServiceSection } from "./discover-service-sections";
3
+ /** True when this section discovered a `package.json` under `sectionDir`. */
4
+ export declare function sectionHasPackageJsonManifest(section: Pick<ServiceSection, "manifestPaths">): boolean;
5
+ /** Generator templates / placeholder manifests (not deployable workspace apps). */
6
+ export declare function isScaffoldOrTemplatePackageSection(section: Pick<ServiceSection, "id" | "packageName" | "sectionDir">): boolean;
7
+ /** At least one classified component is scoped to this section. */
8
+ export declare function sectionHasClassifiedComponents(components: DetectedComponent[], sectionId: string): boolean;
9
+ export declare function isConcreteServiceSectionId(sectionId: string | undefined): boolean;
10
+ export { TERRAFORM_DETECTED_FROM_PATTERNS, } from "../terraform/component-predicates";
11
+ /** Classified from Terraform analysis (HCL or show-json), not application source code. */
12
+ export declare function isTerraformDerivedComponent(component: DetectedComponent): boolean;
13
+ /** Section created for a Terraform stack root or module directory. */
14
+ export declare function isTerraformStackSection(section: Pick<ServiceSection, "id" | "sectionDir" | "isTerraformStack">): boolean;
15
+ export declare function sectionHasRuntimeCodeComponents(components: DetectedComponent[], sectionId: string): boolean;
16
+ /**
17
+ * Whether a workspace section should receive a synthetic application hub and
18
+ * default User actor (tooling-only packages like cli/docs/utils are skipped).
19
+ */
20
+ export declare function sectionQualifiesForSyntheticApplication(section: ServiceSection, components: DetectedComponent[]): boolean;
21
+ export declare function shouldInjectUserActorForMainApp(mainApp: DetectedComponent, components: DetectedComponent[]): boolean;