autoremediator 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/dist/api/change-request/index.d.ts.map +1 -1
  2. package/dist/api/options-schema.d.ts.map +1 -1
  3. package/dist/api/patches/reconcile.d.ts.map +1 -1
  4. package/dist/api/scan-execution.d.ts.map +1 -1
  5. package/dist/api/vex/index.d.ts +6 -2
  6. package/dist/api/vex/index.d.ts.map +1 -1
  7. package/dist/{chunk-7BORIBPY.js → chunk-ZGLGT4XQ.js} +2589 -885
  8. package/dist/cli/program.d.ts.map +1 -1
  9. package/dist/cli/runners.d.ts.map +1 -1
  10. package/dist/cli/triage.d.ts +9 -1
  11. package/dist/cli/triage.d.ts.map +1 -1
  12. package/dist/cli/types.d.ts.map +1 -1
  13. package/dist/cli.js +74 -33
  14. package/dist/index.js +2464 -882
  15. package/dist/index.js.map +1 -1
  16. package/dist/intelligence/snapshot.d.ts +2 -0
  17. package/dist/intelligence/snapshot.d.ts.map +1 -0
  18. package/dist/intelligence/sources/registry.d.ts +1 -0
  19. package/dist/intelligence/sources/registry.d.ts.map +1 -1
  20. package/dist/intelligence/sources/snapshot.d.ts +1 -1
  21. package/dist/intelligence/sources/snapshot.d.ts.map +1 -1
  22. package/dist/mcp/server.js +1 -1
  23. package/dist/openapi/handlers/routes.d.ts.map +1 -1
  24. package/dist/openapi/handlers/validators.d.ts.map +1 -1
  25. package/dist/openapi/http-utils.d.ts.map +1 -1
  26. package/dist/openapi/server.js +20 -7
  27. package/dist/platform/jobs.d.ts +39 -1
  28. package/dist/platform/jobs.d.ts.map +1 -1
  29. package/dist/platform/policy.d.ts +10 -0
  30. package/dist/platform/policy.d.ts.map +1 -1
  31. package/dist/platform/rollback.d.ts +11 -0
  32. package/dist/platform/rollback.d.ts.map +1 -1
  33. package/dist/platform/types.d.ts +5 -0
  34. package/dist/platform/types.d.ts.map +1 -1
  35. package/dist/remediation/local/disposition.d.ts +5 -2
  36. package/dist/remediation/local/disposition.d.ts.map +1 -1
  37. package/dist/remediation/local/fallback.d.ts.map +1 -1
  38. package/dist/remediation/local/options.d.ts.map +1 -1
  39. package/dist/remediation/local/primary-strategy.d.ts +4 -0
  40. package/dist/remediation/local/primary-strategy.d.ts.map +1 -1
  41. package/dist/remediation/local/run.d.ts.map +1 -1
  42. package/dist/remediation/pipeline-runtime/tool-wrappers.d.ts.map +1 -1
  43. package/dist/remediation/proof-of-fix/runner.d.ts +52 -0
  44. package/dist/remediation/proof-of-fix/runner.d.ts.map +1 -1
  45. package/dist/remediation/refactor/call-site-finder.d.ts +21 -0
  46. package/dist/remediation/refactor/call-site-finder.d.ts.map +1 -1
  47. package/dist/remediation/refactor/refactor-agent.d.ts +18 -0
  48. package/dist/remediation/refactor/refactor-agent.d.ts.map +1 -1
  49. package/dist/remediation/tools/apply-package-override/index.d.ts +4 -0
  50. package/dist/remediation/tools/apply-package-override/index.d.ts.map +1 -1
  51. package/dist/remediation/tools/apply-patch-file/index.d.ts +2 -1
  52. package/dist/remediation/tools/apply-patch-file/index.d.ts.map +1 -1
  53. package/dist/remediation/tools/apply-version-bump.d.ts +4 -0
  54. package/dist/remediation/tools/apply-version-bump.d.ts.map +1 -1
  55. package/dist/remediation/tools/check-inventory.d.ts +1 -0
  56. package/dist/remediation/tools/check-inventory.d.ts.map +1 -1
  57. package/dist/remediation/tools/fetch-package-source.d.ts.map +1 -1
  58. package/dist/remediation/tools/find-fixed-version.d.ts.map +1 -1
  59. package/dist/remediation/tools/generate-patch/helpers.d.ts +3 -3
  60. package/dist/remediation/tools/generate-patch/helpers.d.ts.map +1 -1
  61. package/package.json +6 -4
  62. package/dist/api/change-request/index.test.d.ts +0 -2
  63. package/dist/api/change-request/index.test.d.ts.map +0 -1
  64. package/dist/api/delta-scan/delta-scan.test.d.ts +0 -2
  65. package/dist/api/delta-scan/delta-scan.test.d.ts.map +0 -1
  66. package/dist/api/evaluate/evaluate.test.d.ts +0 -2
  67. package/dist/api/evaluate/evaluate.test.d.ts.map +0 -1
  68. package/dist/api/index.test.d.ts +0 -2
  69. package/dist/api/index.test.d.ts.map +0 -1
  70. package/dist/api/jobs/index.test.d.ts +0 -2
  71. package/dist/api/jobs/index.test.d.ts.map +0 -1
  72. package/dist/api/patches/reconcile.test.d.ts +0 -2
  73. package/dist/api/patches/reconcile.test.d.ts.map +0 -1
  74. package/dist/api/patches.test.d.ts +0 -2
  75. package/dist/api/patches.test.d.ts.map +0 -1
  76. package/dist/api/portfolio/portfolio.test.d.ts +0 -2
  77. package/dist/api/portfolio/portfolio.test.d.ts.map +0 -1
  78. package/dist/api/portfolio/risk-score.test.d.ts +0 -2
  79. package/dist/api/portfolio/risk-score.test.d.ts.map +0 -1
  80. package/dist/api/reachability/reachability.test.d.ts +0 -2
  81. package/dist/api/reachability/reachability.test.d.ts.map +0 -1
  82. package/dist/api/update-outdated/index.test.d.ts +0 -2
  83. package/dist/api/update-outdated/index.test.d.ts.map +0 -1
  84. package/dist/api/vex/index.test.d.ts +0 -2
  85. package/dist/api/vex/index.test.d.ts.map +0 -1
  86. package/dist/cli/index.test.d.ts +0 -2
  87. package/dist/cli/index.test.d.ts.map +0 -1
  88. package/dist/intelligence/sources/certcc.test.d.ts +0 -2
  89. package/dist/intelligence/sources/certcc.test.d.ts.map +0 -1
  90. package/dist/intelligence/sources/cisa-kev.test.d.ts +0 -2
  91. package/dist/intelligence/sources/cisa-kev.test.d.ts.map +0 -1
  92. package/dist/intelligence/sources/cve-services.test.d.ts +0 -2
  93. package/dist/intelligence/sources/cve-services.test.d.ts.map +0 -1
  94. package/dist/intelligence/sources/deps-dev.test.d.ts +0 -2
  95. package/dist/intelligence/sources/deps-dev.test.d.ts.map +0 -1
  96. package/dist/intelligence/sources/epss.test.d.ts +0 -2
  97. package/dist/intelligence/sources/epss.test.d.ts.map +0 -1
  98. package/dist/intelligence/sources/external-feeds.test.d.ts +0 -2
  99. package/dist/intelligence/sources/external-feeds.test.d.ts.map +0 -1
  100. package/dist/intelligence/sources/gitlab-advisory.test.d.ts +0 -2
  101. package/dist/intelligence/sources/gitlab-advisory.test.d.ts.map +0 -1
  102. package/dist/intelligence/sources/nvd.test.d.ts +0 -2
  103. package/dist/intelligence/sources/nvd.test.d.ts.map +0 -1
  104. package/dist/intelligence/sources/ossf-scorecard.test.d.ts +0 -2
  105. package/dist/intelligence/sources/ossf-scorecard.test.d.ts.map +0 -1
  106. package/dist/intelligence/sources/osv.test.d.ts +0 -2
  107. package/dist/intelligence/sources/osv.test.d.ts.map +0 -1
  108. package/dist/intelligence/sources/registry.test.d.ts +0 -2
  109. package/dist/intelligence/sources/registry.test.d.ts.map +0 -1
  110. package/dist/intelligence/sources/snapshot.test.d.ts +0 -2
  111. package/dist/intelligence/sources/snapshot.test.d.ts.map +0 -1
  112. package/dist/mcp/server.test.d.ts +0 -2
  113. package/dist/mcp/server.test.d.ts.map +0 -1
  114. package/dist/openapi/server.test.d.ts +0 -2
  115. package/dist/openapi/server.test.d.ts.map +0 -1
  116. package/dist/platform/architecture-guardrails.test.d.ts +0 -2
  117. package/dist/platform/architecture-guardrails.test.d.ts.map +0 -1
  118. package/dist/platform/audit-logger.test.d.ts +0 -2
  119. package/dist/platform/audit-logger.test.d.ts.map +0 -1
  120. package/dist/platform/escalation.test.d.ts +0 -2
  121. package/dist/platform/escalation.test.d.ts.map +0 -1
  122. package/dist/platform/evidence.test.d.ts +0 -2
  123. package/dist/platform/evidence.test.d.ts.map +0 -1
  124. package/dist/platform/package-manager/index.test.d.ts +0 -2
  125. package/dist/platform/package-manager/index.test.d.ts.map +0 -1
  126. package/dist/platform/package-manager/list-parser.test.d.ts +0 -2
  127. package/dist/platform/package-manager/list-parser.test.d.ts.map +0 -1
  128. package/dist/platform/package-manager.test.d.ts +0 -2
  129. package/dist/platform/package-manager.test.d.ts.map +0 -1
  130. package/dist/platform/policy.test.d.ts +0 -2
  131. package/dist/platform/policy.test.d.ts.map +0 -1
  132. package/dist/platform/repo-lock.test.d.ts +0 -2
  133. package/dist/platform/repo-lock.test.d.ts.map +0 -1
  134. package/dist/platform/rollback.test.d.ts +0 -2
  135. package/dist/platform/rollback.test.d.ts.map +0 -1
  136. package/dist/platform/safe-exec.test.d.ts +0 -2
  137. package/dist/platform/safe-exec.test.d.ts.map +0 -1
  138. package/dist/platform/sla.test.d.ts +0 -2
  139. package/dist/platform/sla.test.d.ts.map +0 -1
  140. package/dist/platform/supply-chain.test.d.ts +0 -2
  141. package/dist/platform/supply-chain.test.d.ts.map +0 -1
  142. package/dist/platform/workspace.test.d.ts +0 -2
  143. package/dist/platform/workspace.test.d.ts.map +0 -1
  144. package/dist/remediation/local/consensus-gate.test.d.ts +0 -2
  145. package/dist/remediation/local/consensus-gate.test.d.ts.map +0 -1
  146. package/dist/remediation/local/disposition.test.d.ts +0 -2
  147. package/dist/remediation/local/disposition.test.d.ts.map +0 -1
  148. package/dist/remediation/local/run.secops.test.d.ts +0 -2
  149. package/dist/remediation/local/run.secops.test.d.ts.map +0 -1
  150. package/dist/remediation/local/sbom.test.d.ts +0 -2
  151. package/dist/remediation/local/sbom.test.d.ts.map +0 -1
  152. package/dist/remediation/local/vulnerability-match.test.d.ts +0 -2
  153. package/dist/remediation/local/vulnerability-match.test.d.ts.map +0 -1
  154. package/dist/remediation/pipeline.test.d.ts +0 -2
  155. package/dist/remediation/pipeline.test.d.ts.map +0 -1
  156. package/dist/remediation/proof-of-fix/runner.test.d.ts +0 -2
  157. package/dist/remediation/proof-of-fix/runner.test.d.ts.map +0 -1
  158. package/dist/remediation/refactor/refactor.test.d.ts +0 -2
  159. package/dist/remediation/refactor/refactor.test.d.ts.map +0 -1
  160. package/dist/remediation/tools/apply-package-override.test.d.ts +0 -2
  161. package/dist/remediation/tools/apply-package-override.test.d.ts.map +0 -1
  162. package/dist/remediation/tools/apply-patch-file.test.d.ts +0 -2
  163. package/dist/remediation/tools/apply-patch-file.test.d.ts.map +0 -1
  164. package/dist/remediation/tools/apply-version-bump.test.d.ts +0 -2
  165. package/dist/remediation/tools/apply-version-bump.test.d.ts.map +0 -1
  166. package/dist/remediation/tools/check-exploit-signal.test.d.ts +0 -2
  167. package/dist/remediation/tools/check-exploit-signal.test.d.ts.map +0 -1
  168. package/dist/remediation/tools/check-reachability.test.d.ts +0 -2
  169. package/dist/remediation/tools/check-reachability.test.d.ts.map +0 -1
  170. package/dist/remediation/tools/check-suppression.test.d.ts +0 -2
  171. package/dist/remediation/tools/check-suppression.test.d.ts.map +0 -1
  172. package/dist/remediation/tools/generate-patch/helpers.test.d.ts +0 -2
  173. package/dist/remediation/tools/generate-patch/helpers.test.d.ts.map +0 -1
  174. package/dist/remediation/tools/lookup-cve.test.d.ts +0 -2
  175. package/dist/remediation/tools/lookup-cve.test.d.ts.map +0 -1
  176. package/dist/scanner/adapters/npm-audit.test.d.ts +0 -2
  177. package/dist/scanner/adapters/npm-audit.test.d.ts.map +0 -1
  178. package/dist/scanner/adapters/sarif.test.d.ts +0 -2
  179. package/dist/scanner/adapters/sarif.test.d.ts.map +0 -1
  180. package/dist/scanner/adapters/yarn-audit.test.d.ts +0 -2
  181. package/dist/scanner/adapters/yarn-audit.test.d.ts.map +0 -1
  182. package/dist/scanner/lockfile-diff.test.d.ts +0 -2
  183. package/dist/scanner/lockfile-diff.test.d.ts.map +0 -1
  184. package/dist/scanner/parse-input.test.d.ts +0 -2
  185. package/dist/scanner/parse-input.test.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuJpC,wBAAgB,aAAa,IAAI,OAAO,CA+TvC"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkJpC,wBAAgB,aAAa,IAAI,OAAO,CA+TvC"}
@@ -1 +1 @@
1
- {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/cli/runners.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAGhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkFjD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkJrF;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+KzF;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,gBAAgB,GAAG,cAAc,CAAC,GACnF,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C3E;AAED,wBAAsB,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F/F;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,CACR,cAAc,EACd,KAAK,GAAG,YAAY,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CACtE,GAAG;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
1
+ {"version":3,"file":"runners.d.ts","sourceRoot":"","sources":["../../src/cli/runners.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAGhC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAkFjD,wBAAsB,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAiJrF;AAED,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA8KzF;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC,CA2Bf;AAED,wBAAsB,eAAe,CACnC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,cAAc,CAAC,GAChE,OAAO,CAAC,IAAI,CAAC,CA4Bf;AAED,wBAAsB,gBAAgB,CACpC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,KAAK,GAAG,YAAY,GAAG,gBAAgB,GAAG,cAAc,CAAC,GACnF,OAAO,CAAC,IAAI,CAAC,CAgCf;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+C3E;AAED,wBAAsB,YAAY,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA6F/F;AAED,wBAAsB,eAAe,CAAC,IAAI,EAAE;IAC1C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBhB;AAED,wBAAsB,WAAW,CAC/B,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GACA,OAAO,CAAC,IAAI,CAAC,CA6Bf;AAED,wBAAsB,YAAY,CAAC,IAAI,EAAE;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,EAAE,CAAC,EAAE,OAAO,CAAC;CACd,GAAG,OAAO,CAAC,IAAI,CAAC,CAiChB;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,IAAI,CACR,cAAc,EACd,KAAK,GAAG,YAAY,GAAG,gBAAgB,GAAG,UAAU,GAAG,cAAc,CACtE,GAAG;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,GACA,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
@@ -1,7 +1,15 @@
1
+ import * as readline from "node:readline/promises";
1
2
  import type { CommandOptions } from "./types.js";
3
+ export interface InteractiveTriageOptions extends Omit<Partial<CommandOptions>, "input"> {
4
+ input?: string | NodeJS.ReadableStream;
5
+ output?: NodeJS.WritableStream;
6
+ rl?: readline.Interface;
7
+ vexOut?: string;
8
+ }
2
9
  /**
3
10
  * Interactive developer CLI triage workflow.
4
11
  * Prompts developer through security findings with actions to apply, skip, suppress, or quit.
12
+ * Persists suppression actions to .github/autoremediator.yml, suppressions file, or CycloneDX VEX document.
5
13
  */
6
- export declare function runInteractiveTriage(inputPathOrOpts: string | Partial<CommandOptions>, maybeOpts?: Partial<CommandOptions>): Promise<void>;
14
+ export declare function runInteractiveTriage(inputPathOrOpts: string | Partial<InteractiveTriageOptions>, maybeOpts?: Partial<InteractiveTriageOptions>): Promise<void>;
7
15
  //# sourceMappingURL=triage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/cli/triage.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,EACjD,SAAS,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAClC,OAAO,CAAC,IAAI,CAAC,CAyIf"}
1
+ {"version":3,"file":"triage.d.ts","sourceRoot":"","sources":["../../src/cli/triage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAQnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,wBAAyB,SAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC;IACtF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,EAAE,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC,EAC3D,SAAS,CAAC,EAAE,OAAO,CAAC,wBAAwB,CAAC,GAC5C,OAAO,CAAC,IAAI,CAAC,CAgMf"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -16,6 +16,9 @@ import {
16
16
  remediate,
17
17
  remediateFromScan,
18
18
  remediatePortfolio,
19
+ saveSuppressionToFile,
20
+ saveSuppressionToPolicy,
21
+ saveSuppressionToVexDocument,
19
22
  scanDelta,
20
23
  toCiSummary,
21
24
  toCycloneDxVex,
@@ -23,7 +26,7 @@ import {
23
26
  uniqueCveIds,
24
27
  updateOutdated,
25
28
  validatePatchArtifact
26
- } from "./chunk-7BORIBPY.js";
29
+ } from "./chunk-ZGLGT4XQ.js";
27
30
 
28
31
  // src/cli/index.ts
29
32
  import { fileURLToPath } from "url";
@@ -34,15 +37,17 @@ import { existsSync } from "fs";
34
37
 
35
38
  // src/cli/triage.ts
36
39
  import * as readline from "readline/promises";
37
- import { stdin as input, stdout as output } from "process";
40
+ import { stdin as defaultInput, stdout as defaultOutput } from "process";
38
41
  async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
39
- const inputPath = typeof inputPathOrOpts === "string" ? inputPathOrOpts : inputPathOrOpts.input;
42
+ const inputPath = typeof inputPathOrOpts === "string" ? inputPathOrOpts : typeof inputPathOrOpts.input === "string" ? inputPathOrOpts.input : void 0;
40
43
  const opts = (typeof inputPathOrOpts === "object" ? inputPathOrOpts : maybeOpts) ?? {};
41
44
  const cwd = opts.cwd ?? process.cwd();
42
- output.write("\n\u{1F50D} Scanning for security findings to triage...\n");
45
+ const outStream = opts.output ?? defaultOutput;
46
+ const inStream = opts.input && typeof opts.input !== "string" ? opts.input : defaultInput;
47
+ outStream.write("\n\u{1F50D} Scanning for security findings to triage...\n");
43
48
  let findings = [];
44
49
  try {
45
- if (inputPath) {
50
+ if (inputPath && typeof inputPath === "string") {
46
51
  findings = parseScanInput(inputPath, opts.format ?? "auto");
47
52
  } else {
48
53
  findings = await parseScanInputFromAudit({
@@ -53,7 +58,7 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
53
58
  });
54
59
  }
55
60
  } catch (err) {
56
- output.write(
61
+ outStream.write(
57
62
  `Failed to load scan findings: ${err instanceof Error ? err.message : String(err)}
58
63
  `
59
64
  );
@@ -61,12 +66,15 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
61
66
  }
62
67
  const cveIds = uniqueCveIds(findings);
63
68
  if (cveIds.length === 0) {
64
- output.write("\u2728 No vulnerabilities found to triage!\n\n");
69
+ outStream.write("\u2728 No vulnerabilities found to triage!\n\n");
65
70
  return;
66
71
  }
67
- output.write(`Found ${cveIds.length} unique vulnerability(ies) to triage.
72
+ outStream.write(`Found ${cveIds.length} unique vulnerability(ies) to triage.
68
73
  `);
69
- const rl = readline.createInterface({ input, output });
74
+ const rl = opts.rl ?? readline.createInterface({
75
+ input: inStream,
76
+ output: outStream
77
+ });
70
78
  let remediatedCount = 0;
71
79
  let skippedCount = 0;
72
80
  let suppressedCount = 0;
@@ -90,18 +98,18 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
90
98
  } catch {
91
99
  }
92
100
  }
93
- output.write("\n" + "=".repeat(60) + "\n");
94
- output.write(`[${i + 1}/${cveIds.length}] Vulnerability: ${cveId}
101
+ outStream.write("\n" + "=".repeat(60) + "\n");
102
+ outStream.write(`[${i + 1}/${cveIds.length}] Vulnerability: ${cveId}
95
103
  `);
96
- output.write(` Package: ${pkgName}
104
+ outStream.write(` Package: ${pkgName}
97
105
  `);
98
- output.write(` Severity: ${severity}
106
+ outStream.write(` Severity: ${severity}
99
107
  `);
100
108
  if (safeVersion) {
101
- output.write(` Safe Upstream Version: ${safeVersion}
109
+ outStream.write(` Safe Upstream Version: ${safeVersion}
102
110
  `);
103
111
  }
104
- output.write("=".repeat(60) + "\n");
112
+ outStream.write("=".repeat(60) + "\n");
105
113
  let answered = false;
106
114
  while (!answered) {
107
115
  const answer = await rl.question(
@@ -109,7 +117,7 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
109
117
  );
110
118
  const choice = answer.trim().toLowerCase();
111
119
  if (choice === "a" || choice === "apply") {
112
- output.write(`Applying remediation for ${cveId}...
120
+ outStream.write(`Applying remediation for ${cveId}...
113
121
  `);
114
122
  try {
115
123
  const report = await remediate(cveId, {
@@ -126,17 +134,17 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
126
134
  });
127
135
  const applied = report.results.some((r) => r.applied);
128
136
  if (applied) {
129
- output.write(`\u2705 Successfully applied remediation for ${cveId}!
137
+ outStream.write(`\u2705 Successfully applied remediation for ${cveId}!
130
138
  `);
131
139
  remediatedCount++;
132
140
  } else {
133
141
  const reason = report.results[0]?.unresolvedReason ?? "unresolved";
134
- output.write(`\u26A0\uFE0F Remediation could not be applied automatically (${reason}).
142
+ outStream.write(`\u26A0\uFE0F Remediation could not be applied automatically (${reason}).
135
143
  `);
136
144
  skippedCount++;
137
145
  }
138
146
  } catch (err) {
139
- output.write(
147
+ outStream.write(
140
148
  `\u274C Error remediating ${cveId}: ${err instanceof Error ? err.message : String(err)}
141
149
  `
142
150
  );
@@ -144,33 +152,70 @@ async function runInteractiveTriage(inputPathOrOpts, maybeOpts) {
144
152
  }
145
153
  answered = true;
146
154
  } else if (choice === "s" || choice === "skip" || choice === "") {
147
- output.write(`Skipped ${cveId}.
155
+ outStream.write(`Skipped ${cveId}.
148
156
  `);
149
157
  skippedCount++;
150
158
  answered = true;
151
159
  } else if (choice === "x" || choice === "suppress") {
152
- output.write(`Marked ${cveId} as suppressed / VEX excluded.
160
+ outStream.write(`Configuring suppression / VEX record for ${cveId}...
161
+ `);
162
+ const justAnswer = await rl.question(
163
+ "Justification: [1] not_affected (default), [2] mitigated, [3] under_investigation, [4] fixed: "
164
+ );
165
+ const justChoice = justAnswer.trim().toLowerCase();
166
+ let justification = "not_affected";
167
+ if (justChoice === "2" || justChoice === "mitigated") {
168
+ justification = "mitigated";
169
+ } else if (justChoice === "3" || justChoice === "under_investigation") {
170
+ justification = "under_investigation";
171
+ } else if (justChoice === "4" || justChoice === "fixed") {
172
+ justification = "fixed";
173
+ } else {
174
+ justification = "not_affected";
175
+ }
176
+ const notesAnswer = await rl.question(
177
+ "Notes/rationale for suppression (optional, press Enter to skip): "
178
+ );
179
+ const notes = notesAnswer.trim() || void 0;
180
+ const suppression = {
181
+ cveId,
182
+ justification,
183
+ notes
184
+ };
185
+ let persistedTarget = "";
186
+ if (opts.suppressionsFile) {
187
+ saveSuppressionToFile(opts.suppressionsFile, suppression);
188
+ persistedTarget = opts.suppressionsFile;
189
+ } else {
190
+ persistedTarget = saveSuppressionToPolicy(cwd, suppression, opts.policy);
191
+ }
192
+ if (opts.vexOut) {
193
+ saveSuppressionToVexDocument(opts.vexOut, suppression);
194
+ outStream.write(` \u{1F4C4} Saved VEX statement to: ${opts.vexOut}
195
+ `);
196
+ }
197
+ outStream.write(`\u2705 Persisted suppression for ${cveId} to ${persistedTarget}
153
198
  `);
154
199
  suppressedCount++;
155
200
  answered = true;
156
201
  } else if (choice === "q" || choice === "quit") {
157
- output.write("Exiting triage session.\n");
202
+ outStream.write("Exiting triage session.\n");
158
203
  return;
159
204
  } else {
160
- output.write("Invalid option. Please choose 'a', 's', 'x', or 'q'.\n");
205
+ outStream.write("Invalid option. Please choose 'a', 's', 'x', or 'q'.\n");
161
206
  }
162
207
  }
163
208
  }
164
209
  } finally {
165
210
  rl.close();
166
- output.write("\n=== Triage Summary ===\n");
167
- output.write(`Total evaluated: ${cveIds.length}
211
+ outStream.write("\n=== Triage Summary ===\n");
212
+ outStream.write(`Total evaluated: ${cveIds.length}
168
213
  `);
169
- output.write(`Remediated: ${remediatedCount}
214
+ outStream.write(`Remediated: ${remediatedCount}
170
215
  `);
171
- output.write(`Suppressed: ${suppressedCount}
216
+ outStream.write(`Suppressed: ${suppressedCount}
172
217
  `);
173
- output.write(`Skipped: ${skippedCount}
218
+ outStream.write(`Skipped: ${skippedCount}
174
219
 
175
220
  `);
176
221
  }
@@ -984,11 +1029,7 @@ function addSharedOptions(program, includeInput = false, includeSimulationMode =
984
1029
  ).option("--hold-for-transitive", OPTION_DESCRIPTIONS.dispositionPolicyHoldForTransitive, false).option("--escalate-on-kev", OPTION_DESCRIPTIONS.dispositionPolicyEscalateOnKev, false).option("--containment-mode", OPTION_DESCRIPTIONS.containmentMode, false).option("--campaign-mode", OPTION_DESCRIPTIONS.campaignMode, false).option("--offline", OPTION_DESCRIPTIONS.offlineIntelligence, false).option("--intelligence-snapshot <path>", OPTION_DESCRIPTIONS.intelligenceSnapshotPath).option("--create-change-request", OPTION_DESCRIPTIONS.createChangeRequest, false).option("--change-request-provider <provider>", OPTION_DESCRIPTIONS.changeRequestProvider).option("--change-request-grouping <grouping>", OPTION_DESCRIPTIONS.changeRequestGrouping).option("--change-request-repository <repository>", OPTION_DESCRIPTIONS.changeRequestRepository).option("--change-request-base-branch <branch>", OPTION_DESCRIPTIONS.changeRequestBaseBranch).option(
985
1030
  "--change-request-branch-prefix <prefix>",
986
1031
  OPTION_DESCRIPTIONS.changeRequestBranchPrefix
987
- ).option("--change-request-title-prefix <prefix>", OPTION_DESCRIPTIONS.changeRequestTitlePrefix).option("--proof-of-fix", OPTION_DESCRIPTIONS.proofOfFix, false).option("--require-proof-of-fix", OPTION_DESCRIPTIONS.requireProofOfFix, false).option(
988
- "--breaking-change-refactor",
989
- OPTION_DESCRIPTIONS.breakingChangeRefactor,
990
- false
991
- );
1032
+ ).option("--change-request-title-prefix <prefix>", OPTION_DESCRIPTIONS.changeRequestTitlePrefix).option("--proof-of-fix", OPTION_DESCRIPTIONS.proofOfFix, false).option("--require-proof-of-fix", OPTION_DESCRIPTIONS.requireProofOfFix, false).option("--breaking-change-refactor", OPTION_DESCRIPTIONS.breakingChangeRefactor, false);
992
1033
  if (includeSimulationMode) {
993
1034
  program.option("--simulation-mode", OPTION_DESCRIPTIONS.simulationMode, false);
994
1035
  }