autoremediator 0.21.0 → 0.21.2

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 (327) hide show
  1. package/README.md +71 -37
  2. package/dist/api/change-request/index.d.ts.map +1 -1
  3. package/dist/api/change-request/index.js +404 -0
  4. package/dist/api/change-request/index.js.map +1 -0
  5. package/dist/api/context.d.ts.map +1 -1
  6. package/dist/api/context.js +41 -0
  7. package/dist/api/context.js.map +1 -0
  8. package/dist/api/contracts.js +2 -0
  9. package/dist/api/contracts.js.map +1 -0
  10. package/dist/api/delta-scan/index.js +5 -0
  11. package/dist/api/delta-scan/index.js.map +1 -0
  12. package/dist/api/evaluate/index.js +5 -0
  13. package/dist/api/evaluate/index.js.map +1 -0
  14. package/dist/api/index.js +16 -0
  15. package/dist/api/index.js.map +1 -0
  16. package/dist/api/jobs/index.d.ts.map +1 -1
  17. package/dist/api/jobs/index.js +54 -0
  18. package/dist/api/jobs/index.js.map +1 -0
  19. package/dist/api/options-schema.js +367 -0
  20. package/dist/api/options-schema.js.map +1 -0
  21. package/dist/api/patches/helpers.d.ts.map +1 -1
  22. package/dist/api/patches/helpers.js +71 -0
  23. package/dist/api/patches/helpers.js.map +1 -0
  24. package/dist/api/patches/index.js +4 -0
  25. package/dist/api/patches/index.js.map +1 -0
  26. package/dist/api/patches/inspection.d.ts.map +1 -1
  27. package/dist/api/patches/inspection.js +66 -0
  28. package/dist/api/patches/inspection.js.map +1 -0
  29. package/dist/api/patches/reconcile.d.ts.map +1 -1
  30. package/dist/api/patches/reconcile.js +245 -0
  31. package/dist/api/patches/reconcile.js.map +1 -0
  32. package/dist/api/patches/validation.d.ts.map +1 -1
  33. package/dist/api/patches/validation.js +105 -0
  34. package/dist/api/patches/validation.js.map +1 -0
  35. package/dist/api/portfolio/index.d.ts.map +1 -1
  36. package/dist/api/portfolio/index.js +127 -0
  37. package/dist/api/portfolio/index.js.map +1 -0
  38. package/dist/api/portfolio/risk-score.js +32 -0
  39. package/dist/api/portfolio/risk-score.js.map +1 -0
  40. package/dist/api/reachability/index.d.ts.map +1 -1
  41. package/dist/api/reachability/index.js +9 -0
  42. package/dist/api/reachability/index.js.map +1 -0
  43. package/dist/api/remediate/index.js +97 -0
  44. package/dist/api/remediate/index.js.map +1 -0
  45. package/dist/api/remediate/validators.js +11 -0
  46. package/dist/api/remediate/validators.js.map +1 -0
  47. package/dist/api/remediate-from-scan/index.d.ts.map +1 -1
  48. package/dist/api/remediate-from-scan/index.js +132 -0
  49. package/dist/api/remediate-from-scan/index.js.map +1 -0
  50. package/dist/api/remediate-from-scan/report-metrics.js +21 -0
  51. package/dist/api/remediate-from-scan/report-metrics.js.map +1 -0
  52. package/dist/api/remediate.evidence.d.ts +1 -1
  53. package/dist/api/remediate.evidence.d.ts.map +1 -1
  54. package/dist/api/remediate.evidence.js +109 -0
  55. package/dist/api/remediate.evidence.js.map +1 -0
  56. package/dist/api/reporting.js +351 -0
  57. package/dist/api/reporting.js.map +1 -0
  58. package/dist/api/sarif.js +67 -0
  59. package/dist/api/sarif.js.map +1 -0
  60. package/dist/api/scan-execution.d.ts +1 -2
  61. package/dist/api/scan-execution.d.ts.map +1 -1
  62. package/dist/api/scan-execution.js +48 -0
  63. package/dist/api/scan-execution.js.map +1 -0
  64. package/dist/api/scan-outcome.js +41 -0
  65. package/dist/api/scan-outcome.js.map +1 -0
  66. package/dist/api/update-outdated/index.d.ts.map +1 -1
  67. package/dist/api/update-outdated/index.js +255 -0
  68. package/dist/api/update-outdated/index.js.map +1 -0
  69. package/dist/api/vex/index.d.ts.map +1 -1
  70. package/dist/api/vex/index.js +138 -0
  71. package/dist/api/vex/index.js.map +1 -0
  72. package/dist/cli/index.d.ts +1 -1
  73. package/dist/cli/index.d.ts.map +1 -1
  74. package/dist/cli/index.js +18 -0
  75. package/dist/cli/index.js.map +1 -0
  76. package/dist/cli/output.js +12 -0
  77. package/dist/cli/output.js.map +1 -0
  78. package/dist/cli/program.d.ts.map +1 -1
  79. package/dist/cli/program.js +294 -0
  80. package/dist/cli/program.js.map +1 -0
  81. package/dist/cli/runners.d.ts +1 -1
  82. package/dist/cli/runners.d.ts.map +1 -1
  83. package/dist/cli/runners.js +622 -0
  84. package/dist/cli/runners.js.map +1 -0
  85. package/dist/cli/triage.d.ts.map +1 -1
  86. package/dist/cli/triage.js +183 -0
  87. package/dist/cli/triage.js.map +1 -0
  88. package/dist/cli/types.js +4 -0
  89. package/dist/cli/types.js.map +1 -0
  90. package/dist/cli/validators.js +33 -0
  91. package/dist/cli/validators.js.map +1 -0
  92. package/dist/intelligence/sources/cisa-kev.d.ts.map +1 -1
  93. package/dist/intelligence/sources/cisa-kev.js +38 -0
  94. package/dist/intelligence/sources/cisa-kev.js.map +1 -0
  95. package/dist/intelligence/sources/epss.d.ts.map +1 -1
  96. package/dist/intelligence/sources/epss.js +33 -0
  97. package/dist/intelligence/sources/epss.js.map +1 -0
  98. package/dist/intelligence/sources/github-advisory.d.ts.map +1 -1
  99. package/dist/intelligence/sources/github-advisory.js +109 -0
  100. package/dist/intelligence/sources/github-advisory.js.map +1 -0
  101. package/dist/intelligence/sources/nvd.d.ts.map +1 -1
  102. package/dist/intelligence/sources/nvd.js +64 -0
  103. package/dist/intelligence/sources/nvd.js.map +1 -0
  104. package/dist/intelligence/sources/osv.d.ts.map +1 -1
  105. package/dist/intelligence/sources/osv.js +184 -0
  106. package/dist/intelligence/sources/osv.js.map +1 -0
  107. package/dist/intelligence/sources/registry.d.ts.map +1 -1
  108. package/dist/intelligence/sources/registry.js +303 -0
  109. package/dist/intelligence/sources/registry.js.map +1 -0
  110. package/dist/intelligence/sources/snapshot.d.ts.map +1 -1
  111. package/dist/intelligence/sources/snapshot.js +109 -0
  112. package/dist/intelligence/sources/snapshot.js.map +1 -0
  113. package/dist/mcp/server.d.ts.map +1 -1
  114. package/dist/mcp/server.js +429 -479
  115. package/dist/mcp/server.js.map +1 -0
  116. package/dist/openapi/handlers/index.d.ts +1 -1
  117. package/dist/openapi/handlers/index.d.ts.map +1 -1
  118. package/dist/openapi/handlers/index.js +53 -0
  119. package/dist/openapi/handlers/index.js.map +1 -0
  120. package/dist/openapi/handlers/routes.d.ts +1 -1
  121. package/dist/openapi/handlers/routes.d.ts.map +1 -1
  122. package/dist/openapi/handlers/routes.js +122 -0
  123. package/dist/openapi/handlers/routes.js.map +1 -0
  124. package/dist/openapi/handlers/validators.d.ts +1 -1
  125. package/dist/openapi/handlers/validators.d.ts.map +1 -1
  126. package/dist/openapi/handlers/validators.js +45 -0
  127. package/dist/openapi/handlers/validators.js.map +1 -0
  128. package/dist/openapi/http-utils.d.ts +1 -1
  129. package/dist/openapi/http-utils.d.ts.map +1 -1
  130. package/dist/openapi/http-utils.js +99 -0
  131. package/dist/openapi/http-utils.js.map +1 -0
  132. package/dist/openapi/path-guard.d.ts.map +1 -1
  133. package/dist/openapi/path-guard.js +79 -0
  134. package/dist/openapi/path-guard.js.map +1 -0
  135. package/dist/openapi/rbac.d.ts.map +1 -1
  136. package/dist/openapi/rbac.js +150 -0
  137. package/dist/openapi/rbac.js.map +1 -0
  138. package/dist/openapi/server.d.ts.map +1 -1
  139. package/dist/openapi/server.js +51 -1267
  140. package/dist/openapi/server.js.map +1 -0
  141. package/dist/openapi/spec/index.d.ts +3 -3
  142. package/dist/openapi/spec/index.js +24 -0
  143. package/dist/openapi/spec/index.js.map +1 -0
  144. package/dist/openapi/spec/paths.d.ts +3 -3
  145. package/dist/openapi/spec/paths.d.ts.map +1 -1
  146. package/dist/openapi/spec/paths.js +623 -0
  147. package/dist/openapi/spec/paths.js.map +1 -0
  148. package/dist/openapi/spec/schemas.js +32 -0
  149. package/dist/openapi/spec/schemas.js.map +1 -0
  150. package/dist/platform/config.js +18 -0
  151. package/dist/platform/config.js.map +1 -0
  152. package/dist/platform/entrypoint.js +19 -0
  153. package/dist/platform/entrypoint.js.map +1 -0
  154. package/dist/platform/escalation.js +18 -0
  155. package/dist/platform/escalation.js.map +1 -0
  156. package/dist/platform/evidence.d.ts.map +1 -1
  157. package/dist/platform/evidence.js +40 -0
  158. package/dist/platform/evidence.js.map +1 -0
  159. package/dist/platform/http-client.d.ts.map +1 -1
  160. package/dist/platform/http-client.js +107 -0
  161. package/dist/platform/http-client.js.map +1 -0
  162. package/dist/platform/idempotency.d.ts.map +1 -1
  163. package/dist/platform/idempotency.js +49 -0
  164. package/dist/platform/idempotency.js.map +1 -0
  165. package/dist/platform/jobs.d.ts.map +1 -1
  166. package/dist/platform/jobs.js +154 -0
  167. package/dist/platform/jobs.js.map +1 -0
  168. package/dist/platform/package-manager/index.d.ts.map +1 -1
  169. package/dist/platform/package-manager/index.js +213 -0
  170. package/dist/platform/package-manager/index.js.map +1 -0
  171. package/dist/platform/package-manager/list-parser.d.ts.map +1 -1
  172. package/dist/platform/package-manager/list-parser.js +141 -0
  173. package/dist/platform/package-manager/list-parser.js.map +1 -0
  174. package/dist/platform/patch-generator.js +2 -0
  175. package/dist/platform/patch-generator.js.map +1 -0
  176. package/dist/platform/policy.d.ts +5 -0
  177. package/dist/platform/policy.d.ts.map +1 -1
  178. package/dist/platform/policy.js +361 -0
  179. package/dist/platform/policy.js.map +1 -0
  180. package/dist/platform/repo-lock.d.ts.map +1 -1
  181. package/dist/platform/repo-lock.js +42 -0
  182. package/dist/platform/repo-lock.js.map +1 -0
  183. package/dist/platform/rollback.d.ts.map +1 -1
  184. package/dist/platform/rollback.js +397 -0
  185. package/dist/platform/rollback.js.map +1 -0
  186. package/dist/platform/safe-exec-command.d.ts +8 -0
  187. package/dist/platform/safe-exec-command.d.ts.map +1 -0
  188. package/dist/platform/safe-exec-command.js +13 -0
  189. package/dist/platform/safe-exec-command.js.map +1 -0
  190. package/dist/platform/safe-exec.d.ts.map +1 -1
  191. package/dist/platform/safe-exec.js +66 -0
  192. package/dist/platform/safe-exec.js.map +1 -0
  193. package/dist/platform/supply-chain.js +84 -0
  194. package/dist/platform/supply-chain.js.map +1 -0
  195. package/dist/platform/timeouts.js +3 -0
  196. package/dist/platform/timeouts.js.map +1 -0
  197. package/dist/platform/trim.d.ts +7 -0
  198. package/dist/platform/trim.d.ts.map +1 -0
  199. package/dist/platform/trim.js +19 -0
  200. package/dist/platform/trim.js.map +1 -0
  201. package/dist/platform/types.js +2 -0
  202. package/dist/platform/types.js.map +1 -0
  203. package/dist/platform/workspace.d.ts.map +1 -1
  204. package/dist/platform/workspace.js +181 -0
  205. package/dist/platform/workspace.js.map +1 -0
  206. package/dist/remediation/evaluate-package.d.ts.map +1 -1
  207. package/dist/remediation/evaluate-package.js +142 -0
  208. package/dist/remediation/evaluate-package.js.map +1 -0
  209. package/dist/remediation/local/disposition.d.ts +1 -1
  210. package/dist/remediation/local/disposition.d.ts.map +1 -1
  211. package/dist/remediation/local/disposition.js +99 -0
  212. package/dist/remediation/local/disposition.js.map +1 -0
  213. package/dist/remediation/local/fallback.d.ts.map +1 -1
  214. package/dist/remediation/local/fallback.js +129 -0
  215. package/dist/remediation/local/fallback.js.map +1 -0
  216. package/dist/remediation/local/index.js +2 -0
  217. package/dist/remediation/local/index.js.map +1 -0
  218. package/dist/remediation/local/options.d.ts.map +1 -1
  219. package/dist/remediation/local/options.js +54 -0
  220. package/dist/remediation/local/options.js.map +1 -0
  221. package/dist/remediation/local/primary-strategy.d.ts.map +1 -1
  222. package/dist/remediation/local/primary-strategy.js +170 -0
  223. package/dist/remediation/local/primary-strategy.js.map +1 -0
  224. package/dist/remediation/local/run.d.ts.map +1 -1
  225. package/dist/remediation/local/run.js +234 -0
  226. package/dist/remediation/local/run.js.map +1 -0
  227. package/dist/remediation/local/sbom.js +36 -0
  228. package/dist/remediation/local/sbom.js.map +1 -0
  229. package/dist/remediation/local/secops-preflight.d.ts.map +1 -1
  230. package/dist/remediation/local/secops-preflight.js +37 -0
  231. package/dist/remediation/local/secops-preflight.js.map +1 -0
  232. package/dist/remediation/local/summary.js +7 -0
  233. package/dist/remediation/local/summary.js.map +1 -0
  234. package/dist/remediation/local/vulnerability-match.d.ts.map +1 -1
  235. package/dist/remediation/local/vulnerability-match.js +31 -0
  236. package/dist/remediation/local/vulnerability-match.js.map +1 -0
  237. package/dist/remediation/patch/diff.d.ts.map +1 -1
  238. package/dist/remediation/patch/diff.js +204 -0
  239. package/dist/remediation/patch/diff.js.map +1 -0
  240. package/dist/remediation/patch/generate.d.ts +1 -1
  241. package/dist/remediation/patch/generate.d.ts.map +1 -1
  242. package/dist/remediation/patch/generate.js +72 -0
  243. package/dist/remediation/patch/generate.js.map +1 -0
  244. package/dist/remediation/patch/llm-generator.d.ts.map +1 -1
  245. package/dist/remediation/patch/llm-generator.js +41 -0
  246. package/dist/remediation/patch/llm-generator.js.map +1 -0
  247. package/dist/remediation/patch/model.js +37 -0
  248. package/dist/remediation/patch/model.js.map +1 -0
  249. package/dist/remediation/patch/prompt.js +22 -0
  250. package/dist/remediation/patch/prompt.js.map +1 -0
  251. package/dist/remediation/patch/resolve.d.ts.map +1 -1
  252. package/dist/remediation/patch/resolve.js +15 -0
  253. package/dist/remediation/patch/resolve.js.map +1 -0
  254. package/dist/remediation/patch/syntax.js +50 -0
  255. package/dist/remediation/patch/syntax.js.map +1 -0
  256. package/dist/remediation/proof-of-fix/runner.d.ts.map +1 -1
  257. package/dist/remediation/proof-of-fix/runner.js +359 -0
  258. package/dist/remediation/proof-of-fix/runner.js.map +1 -0
  259. package/dist/remediation/refactor/call-site-finder.d.ts.map +1 -1
  260. package/dist/remediation/refactor/call-site-finder.js +286 -0
  261. package/dist/remediation/refactor/call-site-finder.js.map +1 -0
  262. package/dist/remediation/refactor/codemods.d.ts.map +1 -1
  263. package/dist/remediation/refactor/codemods.js +540 -0
  264. package/dist/remediation/refactor/codemods.js.map +1 -0
  265. package/dist/remediation/strategies/patch-utils.d.ts.map +1 -1
  266. package/dist/remediation/strategies/patch-utils.js +195 -0
  267. package/dist/remediation/strategies/patch-utils.js.map +1 -0
  268. package/dist/remediation/tools/apply-package-override/helpers.d.ts.map +1 -1
  269. package/dist/remediation/tools/apply-package-override/helpers.js +134 -0
  270. package/dist/remediation/tools/apply-package-override/helpers.js.map +1 -0
  271. package/dist/remediation/tools/apply-package-override/index.d.ts.map +1 -1
  272. package/dist/remediation/tools/apply-package-override/index.js +517 -0
  273. package/dist/remediation/tools/apply-package-override/index.js.map +1 -0
  274. package/dist/remediation/tools/apply-patch-file/helpers.d.ts.map +1 -1
  275. package/dist/remediation/tools/apply-patch-file/helpers.js +246 -0
  276. package/dist/remediation/tools/apply-patch-file/helpers.js.map +1 -0
  277. package/dist/remediation/tools/apply-patch-file/index.d.ts.map +1 -1
  278. package/dist/remediation/tools/apply-patch-file/index.js +562 -0
  279. package/dist/remediation/tools/apply-patch-file/index.js.map +1 -0
  280. package/dist/remediation/tools/apply-version-bump.d.ts.map +1 -1
  281. package/dist/remediation/tools/apply-version-bump.js +425 -0
  282. package/dist/remediation/tools/apply-version-bump.js.map +1 -0
  283. package/dist/remediation/tools/check-exploit-signal.d.ts.map +1 -1
  284. package/dist/remediation/tools/check-exploit-signal.js +81 -0
  285. package/dist/remediation/tools/check-exploit-signal.js.map +1 -0
  286. package/dist/remediation/tools/check-inventory.d.ts.map +1 -1
  287. package/dist/remediation/tools/check-inventory.js +132 -0
  288. package/dist/remediation/tools/check-inventory.js.map +1 -0
  289. package/dist/remediation/tools/check-reachability.d.ts.map +1 -1
  290. package/dist/remediation/tools/check-reachability.js +464 -0
  291. package/dist/remediation/tools/check-reachability.js.map +1 -0
  292. package/dist/remediation/tools/fetch-package-source.d.ts.map +1 -1
  293. package/dist/remediation/tools/fetch-package-source.js +134 -0
  294. package/dist/remediation/tools/fetch-package-source.js.map +1 -0
  295. package/dist/remediation/tools/tool-compat.js +8 -0
  296. package/dist/remediation/tools/tool-compat.js.map +1 -0
  297. package/dist/scanner/adapters/npm-audit.d.ts.map +1 -1
  298. package/dist/scanner/adapters/npm-audit.js +44 -0
  299. package/dist/scanner/adapters/npm-audit.js.map +1 -0
  300. package/dist/scanner/adapters/sarif.d.ts.map +1 -1
  301. package/dist/scanner/adapters/sarif.js +44 -0
  302. package/dist/scanner/adapters/sarif.js.map +1 -0
  303. package/dist/scanner/adapters/yarn-audit.d.ts.map +1 -1
  304. package/dist/scanner/adapters/yarn-audit.js +58 -0
  305. package/dist/scanner/adapters/yarn-audit.js.map +1 -0
  306. package/dist/scanner/delta-scan.d.ts.map +1 -1
  307. package/dist/scanner/delta-scan.js +291 -0
  308. package/dist/scanner/delta-scan.js.map +1 -0
  309. package/dist/scanner/index.js +3 -0
  310. package/dist/scanner/index.js.map +1 -0
  311. package/dist/scanner/lockfile-diff.d.ts.map +1 -1
  312. package/dist/scanner/lockfile-diff.js +181 -0
  313. package/dist/scanner/lockfile-diff.js.map +1 -0
  314. package/dist/scanner/parse-input.d.ts +1 -1
  315. package/dist/scanner/parse-input.d.ts.map +1 -1
  316. package/dist/scanner/parse-input.js +98 -0
  317. package/dist/scanner/parse-input.js.map +1 -0
  318. package/dist/scanner/unique-cve-ids.js +4 -0
  319. package/dist/scanner/unique-cve-ids.js.map +1 -0
  320. package/dist/version.js +11 -0
  321. package/dist/version.js.map +1 -0
  322. package/llms.txt +7 -4
  323. package/package.json +8 -9
  324. package/dist/chunk-Z3G2MQPR.js +0 -10191
  325. package/dist/cli.js +0 -1196
  326. package/dist/index.js +0 -10030
  327. package/dist/index.js.map +0 -1
package/README.md CHANGED
@@ -1,54 +1,88 @@
1
- # Autoremediator
1
+ <h1 align="center">Autoremediator</h1>
2
+
3
+ <p align="center"><strong>Your scanner finds vulnerabilities. Autoremediator fixes them.</strong></p>
4
+
5
+ <p align="center">
6
+ <a href="https://www.npmjs.com/package/autoremediator"><img alt="npm version" src="https://img.shields.io/npm/v/autoremediator?color=cb3837&logo=npm"></a>
7
+ <a href="https://www.npmjs.com/package/autoremediator"><img alt="npm downloads" src="https://img.shields.io/npm/dm/autoremediator?logo=npm"></a>
8
+ <a href="https://github.com/Rawlings/autoremediator/actions/workflows/ci.yml"><img alt="CI" src="https://img.shields.io/github/actions/workflow/status/Rawlings/autoremediator/ci.yml?branch=master&logo=github&label=CI"></a>
9
+ <a href="https://www.npmjs.com/package/autoremediator"><img alt="node" src="https://img.shields.io/node/v/autoremediator?logo=nodedotjs&logoColor=white"></a>
10
+ <a href="https://www.npmjs.com/package/autoremediator"><img alt="types" src="https://img.shields.io/npm/types/autoremediator?logo=typescript&logoColor=white"></a>
11
+ <a href="LICENSE"><img alt="license" src="https://img.shields.io/npm/l/autoremediator"></a>
12
+ <a href="https://github.com/Rawlings/autoremediator/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/Rawlings/autoremediator?style=flat&logo=github"></a>
13
+ </p>
14
+
15
+ <p align="center">
16
+ <a href="docs/getting-started.md">Getting started</a> ·
17
+ <a href="docs/how-it-works.md">How it works</a> ·
18
+ <a href="docs/integrations/github-action.md">GitHub Action</a> ·
19
+ <a href="docs/README.md">Docs</a>
20
+ </p>
21
+
22
+ Hand it a CVE or GHSA id, or your scanner's report (package manager audit or SARIF). It works out
23
+ the safest fix, applies it, runs your tests, and rolls back if anything breaks. What it cannot fix,
24
+ it tells you, with the reason.
2
25
 
3
- [![npm version](https://img.shields.io/npm/v/autoremediator.svg)](https://www.npmjs.com/package/autoremediator)
4
- [![license](https://img.shields.io/npm/l/autoremediator.svg)](LICENSE)
5
- [![node](https://img.shields.io/node/v/autoremediator.svg)](https://www.npmjs.com/package/autoremediator)
26
+ ```bash
27
+ npx autoremediator --audit --run-tests
28
+ ```
6
29
 
7
- Fixes vulnerable npm dependencies. Give it a CVE or GHSA id, or the output of a scanner, and it
8
- upgrades, overrides or patches the affected packages, verifies the result, and reports exactly what
9
- it did and what it could not fix.
30
+ ## The problem
10
31
 
11
- > [!WARNING]
12
- > Automated dependency changes carry operational and supply-chain risk. Run with `--dry-run` first,
13
- > keep CI gates and branch protection in place, and set a [policy](docs/policy.md).
32
+ Scanners and update bots tell you what is wrong, or open a pull request for one bump at a time.
33
+ Turning findings into a safe change is still manual work: which version is actually fixed, is the
34
+ vulnerable package buried three levels deep, will the upgrade break the build, and what do you do
35
+ when no fixed version exists? Findings pile up, and the one being exploited in the wild waits in the
36
+ same queue as the rest.
14
37
 
15
- ```bash
16
- npx autoremediator CVE-2021-23337 --dry-run # preview
17
- npx autoremediator CVE-2021-23337 --run-tests # apply and verify
18
- npx autoremediator --audit # remediate whatever `npm audit` reports
19
- ```
38
+ ## What it does for each vulnerable package
20
39
 
21
- Requires Node.js 26+.
40
+ | Situation | What Autoremediator does |
41
+ | --------- | ------------------------ |
42
+ | A fixed version exists | Bumps to the **lowest** safe version, keeping the change small |
43
+ | The package is transitive | Pins the fix with your package manager's own `overrides` or `resolutions` |
44
+ | No fixed version exists | Generates a reviewable `.patch` file, if you configure a model |
45
+ | It cannot be fixed safely | Leaves your code alone and reports exactly why |
22
46
 
23
- ## What it does
47
+ Every change is installed, tested if you ask, and **rolled back on failure**. Nothing is reported as
48
+ fixed that was not verified.
24
49
 
25
- For each installed package in a vulnerable range, it tries, in order:
50
+ ## Why you can rely on it
26
51
 
27
- 1. a **version bump** to the lowest safe version;
28
- 2. a **package-manager override** when the package is transitive;
29
- 3. a **generated patch**, only when no safe version exists and you have configured a model.
52
+ - **Verified, not hopeful.** Install, tests, type check and an optional proof-of-fix run before a
53
+ change is kept.
54
+ - **Honest reports.** Unfixed findings carry a machine-readable reason, never a silent skip.
55
+ - **Exploit-aware.** CISA KEV and EPSS signals and your SLA windows decide what is urgent.
56
+ - **You set the autonomy.** A [policy file](docs/reference/policy-file.md) controls what may change.
57
+ Each result is applied, held for approval or escalated.
58
+ - **The model is optional and boxed in.** It is used only to draft patches when no fix exists. Its
59
+ output is syntax-checked and confidence-gated, and its tests are never run.
60
+ - **Deterministic everywhere else.** The same input gives the same plan, and `--offline` runs from a
61
+ local advisory snapshot.
30
62
 
31
- Every change is installed, optionally tested and type-checked, and rolled back if anything fails.
32
- Unfixed findings are reported with an explicit reason, never dropped.
63
+ ## Run it where you work
33
64
 
34
- Advisories come from OSV, the GitHub Advisory Database and NVD; CISA KEV and EPSS add exploit
35
- signals. A [policy file](docs/policy.md) controls which packages may change, how confident a patch
36
- must be, and whether a result is applied automatically, held for approval, or escalated.
65
+ | | |
66
+ | --- | --- |
67
+ | **CLI and [SDK](docs/reference/sdk.md)** | Local runs, scripts, pipelines |
68
+ | **[GitHub Action](docs/integrations/github-action.md)** | A nightly pull request that fixes what audit finds |
69
+ | **[GitHub App](docs/integrations/github-app.md)** | Remediation across every repository you install it on |
70
+ | **[MCP server](docs/integrations/mcp-server.md)** | Give your editor or agent a safe way to fix dependencies |
71
+ | **[HTTP server](docs/integrations/http-server.md)** | Call it from internal services |
72
+ | **[VS Code](packages/vscode-extension/README.md)** | Findings and one-click fixes in `package.json` |
37
73
 
38
- ## Ways to run it
74
+ Works with npm, pnpm, Yarn, Bun and Deno projects. Requires Node.js 26 or later.
39
75
 
40
- CLI · SDK · [GitHub Action](docs/integrations.md#github-action) ·
41
- [GitHub App](docs/integrations.md#github-app) · [MCP server](docs/integrations.md#mcp-server) ·
42
- [HTTP server](docs/integrations.md#http-server)
76
+ > [!WARNING]
77
+ > Automated dependency changes carry operational and supply-chain risk. Start with `--dry-run`, keep
78
+ > CI and branch protection in place, and set a policy. See [Safety](docs/safety.md).
43
79
 
44
- ## Documentation
80
+ ## Learn more
45
81
 
46
- - [Usage](docs/usage.md): commands, how fixes are chosen, scanner inputs, SDK
47
- - [Policy and safety](docs/policy.md): the policy file and the guarantees
48
- - [Integrations](docs/integrations.md): Action, MCP, HTTP, GitHub App
49
- - [Architecture](docs/architecture.md) and [Contributing](CONTRIBUTING.md)
50
- - [AGENTS.md](AGENTS.md), [llms.txt](llms.txt): machine-readable summaries
82
+ [Getting started](docs/getting-started.md) · [How it works](docs/how-it-works.md) ·
83
+ [CLI](docs/reference/cli.md) · [All documentation](docs/README.md) ·
84
+ [Contributing](CONTRIBUTING.md)
51
85
 
52
86
  ## License
53
87
 
54
- MIT
88
+ [MIT](LICENSE)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/change-request/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvC,GAAG,IAAI,CAMP;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAehE;AA2ED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,qBAAqB,GAC9B,iBAAiB,EAAE,EAAE,CAgDvB;AA0JD,wBAAsB,8BAA8B,CAAC,MAAM,EAAE;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgKjC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/api/change-request/index.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,EACnB,iBAAiB,EAClB,MAAM,yBAAyB,CAAC;AAEjC;;;GAGG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;CACvC,GAAG,IAAI,CAMP;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAehE;AAuED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,iBAAiB,EAAE,EAC5B,QAAQ,EAAE,qBAAqB,GAC9B,iBAAiB,EAAE,EAAE,CAgDvB;AA4JD,wBAAsB,8BAA8B,CAAC,MAAM,EAAE;IAC3D,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,oBAAoB,CAAC;IAC9B,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAgKjC"}
@@ -0,0 +1,404 @@
1
+ import { randomBytes } from "node:crypto";
2
+ import { existsSync } from "node:fs";
3
+ import { isAbsolute, relative, resolve } from "node:path";
4
+ import { safeExeca } from "../../platform/safe-exec.js";
5
+ import { trimChar } from "../../platform/trim.js";
6
+ /**
7
+ * Change requests commit and push, so they must never run for dry-run/preview/plan flows.
8
+ * Enforced here (not only in the CLI) so SDK, MCP and HTTP callers get the same guarantee.
9
+ */
10
+ export function assertChangeRequestAllowed(options) {
11
+ if (options.changeRequest?.enabled && (options.dryRun || options.preview)) {
12
+ throw new Error("changeRequest cannot be combined with dryRun/preview (or planRemediation): change requests commit and push.");
13
+ }
14
+ }
15
+ /**
16
+ * Remove option fields that redirect credentials or API traffic. These are host configuration,
17
+ * never something an untrusted MCP/HTTP caller may set. Walks nested objects (e.g. portfolio targets).
18
+ */
19
+ export function stripUntrustedChangeRequestFields(value) {
20
+ if (Array.isArray(value)) {
21
+ return value.map((entry) => stripUntrustedChangeRequestFields(entry));
22
+ }
23
+ if (typeof value !== "object" || value === null)
24
+ return value;
25
+ const out = {};
26
+ for (const [key, entry] of Object.entries(value)) {
27
+ if (key === "changeRequest" && typeof entry === "object" && entry !== null) {
28
+ const { tokenEnvVar: _t, githubApiUrl: _u, ...rest } = entry;
29
+ out[key] = rest;
30
+ }
31
+ else {
32
+ out[key] = stripUntrustedChangeRequestFields(entry);
33
+ }
34
+ }
35
+ return out;
36
+ }
37
+ async function stageRunChanges(cwd, reports) {
38
+ // Stage modifications to tracked files only; never sweep up unrelated untracked files.
39
+ await safeExeca("git", ["add", "-u"], { cwd, stdio: "pipe" });
40
+ // New artifacts the run itself produced (generated patch files) are staged explicitly.
41
+ const produced = new Set();
42
+ for (const report of reports) {
43
+ for (const result of report.results) {
44
+ if (!result.patchFilePath)
45
+ continue;
46
+ const abs = isAbsolute(result.patchFilePath)
47
+ ? result.patchFilePath
48
+ : resolve(cwd, result.patchFilePath);
49
+ const rel = relative(cwd, abs);
50
+ if (rel.startsWith("..") || isAbsolute(rel) || !existsSync(abs))
51
+ continue;
52
+ produced.add(rel);
53
+ }
54
+ }
55
+ if (produced.size > 0) {
56
+ await safeExeca("git", ["add", "--", ...produced], { cwd, stdio: "pipe" });
57
+ }
58
+ }
59
+ function sanitizeBranchToken(value) {
60
+ return trimChar(value.toLowerCase().replaceAll(/[^a-z0-9._/-]+/g, "-"), "-").slice(0, 80);
61
+ }
62
+ function buildPlan(reports) {
63
+ const cveIds = [...new Set(reports.map((report) => report.cveId))];
64
+ const packageNames = [
65
+ ...new Set(reports.flatMap((report) => report.results.map((result) => result.packageName))),
66
+ ];
67
+ const titleSuffix = cveIds.length === 1 ? cveIds[0] : `${cveIds.length} CVEs`;
68
+ const title = `security remediation: ${titleSuffix}`;
69
+ const body = [
70
+ "Automated remediation generated by autoremediator.",
71
+ "",
72
+ `CVEs: ${cveIds.join(", ")}`,
73
+ `Packages: ${packageNames.join(", ")}`,
74
+ ].join("\n");
75
+ return {
76
+ cveIds,
77
+ packageNames,
78
+ title,
79
+ body,
80
+ };
81
+ }
82
+ function resolveProvider(options) {
83
+ return options.provider ?? "github";
84
+ }
85
+ function resolveGrouping(options) {
86
+ const allowed = ["all", "per-cve", "per-package", "by-severity"];
87
+ if (options.grouping && !allowed.includes(options.grouping)) {
88
+ throw new Error(`Unsupported changeRequest.grouping: "${options.grouping}". Supported values: ${allowed.join(", ")}`);
89
+ }
90
+ return options.grouping ?? "all";
91
+ }
92
+ export function groupReports(reports, grouping) {
93
+ if (reports.length === 0)
94
+ return [];
95
+ if (grouping === "all") {
96
+ return [reports];
97
+ }
98
+ if (grouping === "per-cve") {
99
+ const map = new Map();
100
+ for (const report of reports) {
101
+ const key = report.cveId.toUpperCase();
102
+ const list = map.get(key) ?? [];
103
+ list.push(report);
104
+ map.set(key, list);
105
+ }
106
+ return [...map.values()];
107
+ }
108
+ if (grouping === "per-package") {
109
+ const map = new Map();
110
+ for (const report of reports) {
111
+ const pkgs = new Set(report.results.map((r) => r.packageName));
112
+ if (pkgs.size === 0) {
113
+ const list = map.get("misc") ?? [];
114
+ list.push(report);
115
+ map.set("misc", list);
116
+ }
117
+ else {
118
+ for (const pkg of pkgs) {
119
+ const list = map.get(pkg) ?? [];
120
+ list.push(report);
121
+ map.set(pkg, list);
122
+ }
123
+ }
124
+ }
125
+ return [...map.values()];
126
+ }
127
+ if (grouping === "by-severity") {
128
+ const map = new Map();
129
+ for (const report of reports) {
130
+ const sev = report.cveDetails?.severity ?? "UNKNOWN";
131
+ const list = map.get(sev) ?? [];
132
+ list.push(report);
133
+ map.set(sev, list);
134
+ }
135
+ return [...map.values()];
136
+ }
137
+ return [reports];
138
+ }
139
+ async function detectCurrentBranch(cwd) {
140
+ const result = await safeExeca("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
141
+ cwd,
142
+ stdio: "pipe",
143
+ });
144
+ return result.stdout.trim();
145
+ }
146
+ async function ensureRepoHasChanges(cwd) {
147
+ const diff = await safeExeca("git", ["status", "--porcelain"], {
148
+ cwd,
149
+ stdio: "pipe",
150
+ });
151
+ return diff.stdout.trim().length > 0;
152
+ }
153
+ function toBranchName(prefix, cveIds) {
154
+ const token = sanitizeBranchToken(cveIds.join("-") || "remediation");
155
+ return `${sanitizeBranchToken(prefix)}/${token}-${randomBytes(6).toString("hex")}`;
156
+ }
157
+ async function detectRepoFromRemote(cwd) {
158
+ const result = await safeExeca("git", ["config", "--get", "remote.origin.url"], {
159
+ cwd,
160
+ stdio: "pipe",
161
+ }).catch(() => ({ stdout: "" }));
162
+ const url = result.stdout.trim();
163
+ const match = /[:/]([^/]+)\/([^/]+?)(?:\.git)?$/.exec(url);
164
+ if (match) {
165
+ return `${match[1]}/${match[2]}`;
166
+ }
167
+ return undefined;
168
+ }
169
+ async function ensureRepoHasStagedChanges(cwd) {
170
+ const result = await safeExeca("git", ["diff", "--cached", "--name-only"], {
171
+ cwd,
172
+ stdio: "pipe",
173
+ }).catch(() => ({ stdout: "" }));
174
+ return result.stdout.trim().length > 0;
175
+ }
176
+ async function createGitHubRequest(params) {
177
+ const token = params.token ?? process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN;
178
+ let repository = params.repository;
179
+ if (!repository) {
180
+ repository = await detectRepoFromRemote(params.cwd);
181
+ }
182
+ if (token && repository) {
183
+ const [owner, repo] = repository.split("/");
184
+ const baseUrl = (params.githubApiUrl ? trimChar(params.githubApiUrl, "/", "end") : undefined) ||
185
+ "https://api.github.com";
186
+ const endpoint = `${baseUrl}/repos/${owner}/${repo}/pulls`;
187
+ const response = await fetch(endpoint, {
188
+ method: "POST",
189
+ headers: {
190
+ authorization: `Bearer ${token}`,
191
+ accept: "application/vnd.github+json",
192
+ "content-type": "application/json",
193
+ "user-agent": "autoremediator",
194
+ "x-github-api-version": "2022-11-28",
195
+ },
196
+ body: JSON.stringify({
197
+ title: params.title,
198
+ head: params.head,
199
+ base: params.base,
200
+ body: params.body,
201
+ draft: Boolean(params.draft),
202
+ }),
203
+ });
204
+ if (!response.ok) {
205
+ const errText = await response.text().catch(() => "");
206
+ throw new Error(`GitHub API create pull request failed (${response.status}): ${errText}`);
207
+ }
208
+ const data = (await response.json());
209
+ return data.html_url || undefined;
210
+ }
211
+ const args = [
212
+ "pr",
213
+ "create",
214
+ "--head",
215
+ params.head,
216
+ "--base",
217
+ params.base,
218
+ "--title",
219
+ params.title,
220
+ "--body",
221
+ params.body,
222
+ ];
223
+ if (params.repository) {
224
+ args.push("--repo", params.repository);
225
+ }
226
+ if (params.draft) {
227
+ args.push("--draft");
228
+ }
229
+ const result = await safeExeca("gh", args, {
230
+ cwd: params.cwd,
231
+ stdio: "pipe",
232
+ });
233
+ return result.stdout.trim() || undefined;
234
+ }
235
+ async function createGitLabRequest(params) {
236
+ const args = [
237
+ "mr",
238
+ "create",
239
+ "--source-branch",
240
+ params.source,
241
+ "--target-branch",
242
+ params.target,
243
+ "--title",
244
+ params.title,
245
+ "--description",
246
+ params.body,
247
+ ];
248
+ if (params.repository) {
249
+ args.push("-R", params.repository);
250
+ }
251
+ if (params.draft) {
252
+ args.push("--draft");
253
+ }
254
+ const result = await safeExeca("glab", args, {
255
+ cwd: params.cwd,
256
+ stdio: "pipe",
257
+ });
258
+ return result.stdout.trim() || undefined;
259
+ }
260
+ export async function createChangeRequestsForReports(params) {
261
+ const { cwd, options, reports } = params;
262
+ const provider = resolveProvider(options);
263
+ const grouping = resolveGrouping(options);
264
+ const groups = groupReports(reports, grouping);
265
+ if (groups.length === 0) {
266
+ return [];
267
+ }
268
+ const results = [];
269
+ const token = options.token ??
270
+ (options.tokenEnvVar ? process.env[options.tokenEnvVar] : undefined) ??
271
+ process.env.GITHUB_TOKEN ??
272
+ process.env.GH_TOKEN;
273
+ const baseBranch = options.baseBranch ?? (await detectCurrentBranch(cwd).catch(() => "main"));
274
+ const branchPrefix = options.branchPrefix ?? "autoremediator";
275
+ const pushRemote = options.pushRemote ?? "origin";
276
+ if (options.pushRemote && !/^[a-zA-Z0-9._-]+$/.test(options.pushRemote)) {
277
+ throw new Error(`Invalid pushRemote value: ${options.pushRemote}`);
278
+ }
279
+ if (options.repository && !/^[a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+$/.test(options.repository)) {
280
+ throw new Error(`Invalid repository format: ${options.repository}`);
281
+ }
282
+ for (const group of groups) {
283
+ const plan = buildPlan(group);
284
+ const titlePrefix = options.titlePrefix?.trim().slice(0, 200);
285
+ const bodyFooter = options.bodyFooter ? options.bodyFooter.slice(0, 2000) : undefined;
286
+ const title = titlePrefix ? `${titlePrefix} ${plan.title}` : plan.title;
287
+ const body = bodyFooter ? `${plan.body}\n\n${bodyFooter}` : plan.body;
288
+ const hasChanges = await ensureRepoHasChanges(cwd).catch(() => false);
289
+ if (!hasChanges) {
290
+ results.push({
291
+ provider,
292
+ grouping,
293
+ repository: options.repository,
294
+ branchName: "",
295
+ title,
296
+ body,
297
+ created: false,
298
+ cveIds: plan.cveIds,
299
+ packageNames: plan.packageNames,
300
+ error: "No repository changes to include in change request.",
301
+ });
302
+ continue;
303
+ }
304
+ const branchName = toBranchName(branchPrefix, plan.cveIds);
305
+ let branchCreated = false;
306
+ try {
307
+ await safeExeca("git", ["checkout", "-b", branchName], { cwd, stdio: "pipe" });
308
+ branchCreated = true;
309
+ await stageRunChanges(cwd, group);
310
+ const hasStaged = await ensureRepoHasStagedChanges(cwd);
311
+ if (!hasStaged) {
312
+ results.push({
313
+ provider,
314
+ grouping,
315
+ repository: options.repository,
316
+ branchName: "",
317
+ title,
318
+ body,
319
+ created: false,
320
+ cveIds: plan.cveIds,
321
+ packageNames: plan.packageNames,
322
+ error: "No repository changes to include in change request.",
323
+ });
324
+ continue;
325
+ }
326
+ await safeExeca("git", [
327
+ "-c",
328
+ "user.name=autoremediator[bot]",
329
+ "-c",
330
+ "user.email=41898282+github-actions[bot]@users.noreply.github.com",
331
+ "commit",
332
+ "-m",
333
+ title,
334
+ ], { cwd, stdio: "pipe" });
335
+ const pushArgs = token
336
+ ? [
337
+ "-c",
338
+ `http.extraheader=AUTHORIZATION: basic ${Buffer.from(`x-access-token:${token}`).toString("base64")}`,
339
+ "push",
340
+ "-u",
341
+ pushRemote,
342
+ branchName,
343
+ ]
344
+ : ["push", "-u", pushRemote, branchName];
345
+ await safeExeca("git", pushArgs, { cwd, stdio: "pipe" });
346
+ const url = provider === "github"
347
+ ? await createGitHubRequest({
348
+ cwd,
349
+ repository: options.repository,
350
+ head: branchName,
351
+ base: baseBranch,
352
+ title,
353
+ body,
354
+ draft: options.draft,
355
+ token,
356
+ githubApiUrl: options.githubApiUrl,
357
+ })
358
+ : await createGitLabRequest({
359
+ cwd,
360
+ repository: options.repository,
361
+ source: branchName,
362
+ target: baseBranch,
363
+ title,
364
+ body,
365
+ draft: options.draft,
366
+ });
367
+ results.push({
368
+ provider,
369
+ grouping,
370
+ repository: options.repository,
371
+ branchName,
372
+ title,
373
+ body,
374
+ created: true,
375
+ draft: options.draft,
376
+ url,
377
+ cveIds: plan.cveIds,
378
+ packageNames: plan.packageNames,
379
+ });
380
+ }
381
+ catch (error) {
382
+ results.push({
383
+ provider,
384
+ grouping,
385
+ repository: options.repository,
386
+ branchName: "",
387
+ title,
388
+ body,
389
+ created: false,
390
+ draft: options.draft,
391
+ cveIds: plan.cveIds,
392
+ packageNames: plan.packageNames,
393
+ error: error instanceof Error ? error.message : String(error),
394
+ });
395
+ }
396
+ finally {
397
+ if (branchCreated) {
398
+ await safeExeca("git", ["checkout", baseBranch], { cwd, stdio: "pipe" }).catch(() => { });
399
+ }
400
+ }
401
+ }
402
+ return results;
403
+ }
404
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/change-request/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAO9B,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,GACxB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,GAAG,kBAAkB,CAMtE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,CAKrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,sBAAsB,CA8BjG"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACvB,MAAM,sBAAsB,CAAC;AAM9B,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,GACxB,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC,GAAG,kBAAkB,CAMtE;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,gBAAgB,GAAG,iBAAiB,CAKrF;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,sBAAsB,CA8BjG"}
@@ -0,0 +1,41 @@
1
+ import { loadPolicy } from "../platform/policy.js";
2
+ function buildRequestId() {
3
+ return `req-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
4
+ }
5
+ export function resolveCorrelationContext(options) {
6
+ return {
7
+ requestId: options.requestId ?? buildRequestId(),
8
+ sessionId: options.sessionId,
9
+ parentRunId: options.parentRunId,
10
+ };
11
+ }
12
+ export function resolveProvenanceContext(options) {
13
+ return {
14
+ actor: options.actor,
15
+ source: options.source ?? "sdk",
16
+ };
17
+ }
18
+ export function resolveConstraints(options, cwd) {
19
+ const policy = loadPolicy(cwd, options.policy);
20
+ return {
21
+ directDependenciesOnly: options.constraints?.directDependenciesOnly ??
22
+ policy.constraints?.directDependenciesOnly ??
23
+ false,
24
+ preferVersionBump: options.constraints?.preferVersionBump ?? policy.constraints?.preferVersionBump ?? false,
25
+ installMode: options.constraints?.installMode ?? policy.constraints?.installMode ?? "deterministic",
26
+ installPreferOffline: options.constraints?.installPreferOffline ?? policy.constraints?.installPreferOffline,
27
+ enforceFrozenLockfile: options.constraints?.enforceFrozenLockfile ?? policy.constraints?.enforceFrozenLockfile,
28
+ workspace: options.constraints?.workspace ?? policy.constraints?.workspace,
29
+ typecheck: options.typecheck ?? options.constraints?.typecheck ?? policy.constraints?.typecheck,
30
+ requireProofOfFix: options.requireProofOfFix ??
31
+ options.constraints?.requireProofOfFix ??
32
+ policy.constraints?.requireProofOfFix,
33
+ enableBreakingChangeRefactor: options.breakingChangeRefactor ??
34
+ options.constraints?.enableBreakingChangeRefactor ??
35
+ policy.constraints?.enableBreakingChangeRefactor,
36
+ supplyChainPolicy: options.supplyChainPolicy ??
37
+ options.constraints?.supplyChainPolicy ??
38
+ policy.constraints?.supplyChainPolicy,
39
+ };
40
+ }
41
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/api/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAQnD,SAAS,cAAc;IACrB,OAAO,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,OAAyB;IAEzB,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,cAAc,EAAE;QAChD,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW;KACjC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,OAAyB;IAChE,OAAO;QACL,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM,IAAI,KAAK;KAChC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAyB,EAAE,GAAW;IACvE,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO;QACL,sBAAsB,EACpB,OAAO,CAAC,WAAW,EAAE,sBAAsB;YAC3C,MAAM,CAAC,WAAW,EAAE,sBAAsB;YAC1C,KAAK;QACP,iBAAiB,EACf,OAAO,CAAC,WAAW,EAAE,iBAAiB,IAAI,MAAM,CAAC,WAAW,EAAE,iBAAiB,IAAI,KAAK;QAC1F,WAAW,EACT,OAAO,CAAC,WAAW,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,WAAW,IAAI,eAAe;QACxF,oBAAoB,EAClB,OAAO,CAAC,WAAW,EAAE,oBAAoB,IAAI,MAAM,CAAC,WAAW,EAAE,oBAAoB;QACvF,qBAAqB,EACnB,OAAO,CAAC,WAAW,EAAE,qBAAqB,IAAI,MAAM,CAAC,WAAW,EAAE,qBAAqB;QACzF,SAAS,EAAE,OAAO,CAAC,WAAW,EAAE,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS;QAC1E,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,EAAE,SAAS,IAAI,MAAM,CAAC,WAAW,EAAE,SAAS;QAC/F,iBAAiB,EACf,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,WAAW,EAAE,iBAAiB;YACtC,MAAM,CAAC,WAAW,EAAE,iBAAiB;QACvC,4BAA4B,EAC1B,OAAO,CAAC,sBAAsB;YAC9B,OAAO,CAAC,WAAW,EAAE,4BAA4B;YACjD,MAAM,CAAC,WAAW,EAAE,4BAA4B;QAClD,iBAAiB,EACf,OAAO,CAAC,iBAAiB;YACzB,OAAO,CAAC,WAAW,EAAE,iBAAiB;YACtC,MAAM,CAAC,WAAW,EAAE,iBAAiB;KACxC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/api/contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public SDK API: scanDelta
3
+ */
4
+ export { scanDelta } from "../../scanner/delta-scan.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/delta-scan/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Public SDK API: evaluatePackage
3
+ */
4
+ export { evaluatePackage } from "../../remediation/evaluate-package.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/api/evaluate/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC"}