0sec-cli 0.23.0 → 0.24.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 (213) hide show
  1. package/0.js +66 -67
  2. package/README.md +37 -11
  3. package/chunks/{adapt-loop-V3JFWOKC.js → adapt-loop-L77BWMNE.js} +4 -4
  4. package/chunks/{artifact-scraper-NYKUF2M5.js → artifact-scraper-BV67RAP5.js} +2 -2
  5. package/chunks/{assumption-mining-ZX3YVWEH.js → assumption-mining-RPVR77A3.js} +18 -18
  6. package/chunks/{backend-connections-H52NIVH2.js → backend-connections-ACIXNYZN.js} +3 -3
  7. package/chunks/{chunk-MQJVU2GZ.js → chunk-2NBZZFRG.js} +79 -9
  8. package/chunks/{chunk-A2ADXAC5.js → chunk-2XGBEH53.js} +1288 -2313
  9. package/chunks/{chunk-3E54JYS4.js → chunk-3LPBJMHB.js} +1 -1
  10. package/chunks/{chunk-XORZUR2H.js → chunk-3WUPCZGF.js} +1 -1
  11. package/chunks/{chunk-65H3MRBF.js → chunk-4ROZFLSR.js} +1 -1
  12. package/chunks/chunk-56UTQKXO.js +56 -0
  13. package/chunks/{chunk-YYS2H33A.js → chunk-5ETI27Q3.js} +2 -2
  14. package/chunks/{chunk-3ZNI7F42.js → chunk-5NFIY2SJ.js} +3 -3
  15. package/chunks/{chunk-A5QO7N3S.js → chunk-5PFRE522.js} +1 -1
  16. package/chunks/{chunk-EH2WTNY7.js → chunk-5WAHHZBF.js} +1424 -859
  17. package/chunks/{chunk-WIYNYNL2.js → chunk-6XMFCVJS.js} +1 -1
  18. package/chunks/chunk-7UHAXEOV.js +289 -0
  19. package/chunks/{chunk-CP6HANBE.js → chunk-BD7WULFS.js} +4 -3
  20. package/chunks/{chunk-T7ZEVY5G.js → chunk-BMDG6T7D.js} +815 -41
  21. package/chunks/{chunk-QMICC5O2.js → chunk-BOBIAHKA.js} +2 -2
  22. package/chunks/{chunk-VDOWARMJ.js → chunk-BPU6M42R.js} +15 -1
  23. package/chunks/{chunk-UELXHK2Y.js → chunk-CGBDEST2.js} +16 -5
  24. package/chunks/{remote-workflow-runtime-RGQ5ECMN.js → chunk-CJRZSWII.js} +39 -8
  25. package/chunks/chunk-F2P25DJY.js +5421 -0
  26. package/chunks/{chunk-TO35Y326.js → chunk-GTED3FSZ.js} +5 -2
  27. package/chunks/{chunk-LT7BFGXA.js → chunk-GV5WXDHY.js} +10 -10
  28. package/chunks/{chunk-LTEE2JWK.js → chunk-GXXX7AGH.js} +251 -8
  29. package/chunks/chunk-GZA7RGK7.js +5198 -0
  30. package/chunks/{chunk-KHPOSLCF.js → chunk-H5QURBBK.js} +174 -710
  31. package/chunks/chunk-I43YYHDU.js +566 -0
  32. package/chunks/{chunk-62ENS6XO.js → chunk-IIBNQTOK.js} +3 -2
  33. package/chunks/{chunk-BF5FIK7H.js → chunk-IJ6UPW3H.js} +108 -24
  34. package/chunks/{chunk-TPUJZ74W.js → chunk-ILRMLA6J.js} +2 -2
  35. package/chunks/{chunk-I3OCJ2OA.js → chunk-JWSOUKFF.js} +5 -3
  36. package/chunks/{chunk-UZUELPFW.js → chunk-K74DRDC5.js} +1 -1
  37. package/chunks/chunk-LMP2T4G2.js +700 -0
  38. package/chunks/{chunk-K55B4OH4.js → chunk-NBV4I237.js} +1 -1
  39. package/chunks/chunk-OOMBOLAF.js +295 -0
  40. package/chunks/{chunk-YAEJAZYW.js → chunk-PJU24AKR.js} +2 -2
  41. package/chunks/{chunk-NI6QYQSK.js → chunk-PVJUPIQG.js} +6 -6
  42. package/chunks/{chunk-WYNZFNMF.js → chunk-Q7JKIKKF.js} +289 -10
  43. package/chunks/{chunk-ITES7BCY.js → chunk-QNRYOJEB.js} +3 -111
  44. package/chunks/{chunk-PIR6BNE7.js → chunk-R2XBH476.js} +2 -2
  45. package/chunks/{chunk-O6Z4XPOM.js → chunk-RURJYCWY.js} +1 -1
  46. package/chunks/chunk-RVJVM5L4.js +164 -0
  47. package/chunks/{chunk-NX4H6L4M.js → chunk-S2GITRD5.js} +2 -2
  48. package/chunks/{chunk-W5VNCB57.js → chunk-SU4IHQQI.js} +1 -1
  49. package/chunks/{chunk-V2BWXPZP.js → chunk-SZDD77KX.js} +6 -6
  50. package/chunks/{chunk-EJH2TNVH.js → chunk-TVS6WVSK.js} +3 -3
  51. package/chunks/{chunk-LVGZGG63.js → chunk-UJE4WOQS.js} +1 -1
  52. package/chunks/chunk-VU7V2SDW.js +284 -0
  53. package/chunks/chunk-W624J7NF.js +117 -0
  54. package/chunks/{chunk-OLSKXTQZ.js → chunk-WUPN3D37.js} +22 -248
  55. package/chunks/{chunk-HFDSIHTE.js → chunk-X2IPO5JO.js} +202 -30
  56. package/chunks/{chunk-JEYIWMGL.js → chunk-X2ZMSRTP.js} +1 -1
  57. package/chunks/{chunk-F344NYUN.js → chunk-XA2IBHPB.js} +1 -1
  58. package/chunks/{chunk-Y4HJRUFE.js → chunk-YERUDEXT.js} +876 -817
  59. package/chunks/{chunk-AAA4PRWK.js → chunk-YKWARO3T.js} +2 -2
  60. package/chunks/{chunk-P7KDN5PK.js → chunk-YSQWZ67M.js} +14 -14
  61. package/chunks/{chunk-4HGGNBKK.js → chunk-ZM6ANQZJ.js} +2593 -1563
  62. package/chunks/{codex-models-Y457ND6Q.js → codex-models-6XVNFRXZ.js} +7 -7
  63. package/chunks/{commands-PBDAOZKA.js → commands-FRPOFIO4.js} +1603 -6945
  64. package/chunks/dashboard-5HDSNBAU.js +76 -0
  65. package/chunks/{db-TPSI552V.js → db-BXJNWUYJ.js} +3 -3
  66. package/chunks/{deep-review-DKED6EN5.js → deep-review-GSJEBLCG.js} +34 -33
  67. package/chunks/{disclose-LDNKAVRH.js → disclose-OU6Z6GVT.js} +4 -2
  68. package/chunks/{dist-RLPNLRZD.js → dist-7KSYDDSG.js} +33 -1
  69. package/chunks/{dist-7Q5A6TQM.js → dist-RKLQIXDT.js} +18 -2
  70. package/chunks/{dist-4LGRIBOC.js → dist-TQMHMSBZ.js} +99 -64
  71. package/chunks/eval-runner-A2DIGVP7.js +31 -0
  72. package/chunks/{exploit-agent-RMFYNG7H.js → exploit-agent-Y2P4GFIY.js} +1 -1
  73. package/chunks/{exploit-autoclimb-2A2PQI4E.js → exploit-autoclimb-YRZ3TMS2.js} +1 -1
  74. package/chunks/{exploit-climb-DEJ232QN.js → exploit-climb-4LEY4SDW.js} +2 -2
  75. package/chunks/{fix-JGBW7XUN.js → fix-RQSIG75B.js} +7 -7
  76. package/chunks/{harness-CBOLMUHB.js → harness-3NVC3DDY.js} +3 -3
  77. package/chunks/{hunt-scan-MIRMABY4.js → hunt-scan-W246VWJC.js} +16 -16
  78. package/chunks/{kernel-primitive-NAPDMJC7.js → kernel-primitive-T47V3RD3.js} +2 -2
  79. package/chunks/{kernel-vm-runner-PR5OSDQ2.js → kernel-vm-runner-AEL5E3SV.js} +2 -2
  80. package/chunks/local-engine-ZCW4YC6E.js +21 -0
  81. package/chunks/managed-operation-6R2QPPW5.js +60 -0
  82. package/chunks/{memsafety-scan-RPS446CD.js → memsafety-scan-L2Z7E7TE.js} +2 -2
  83. package/chunks/{native-loop-CGOJMNHV.js → native-loop-26X2CHBV.js} +14 -13
  84. package/chunks/orchestrate-OBS37FWQ.js +63 -0
  85. package/chunks/{prepare-YVNENPNL.js → prepare-C3KGMBXT.js} +5 -5
  86. package/chunks/provider-model-discovery-QGUGL3XW.js +277 -0
  87. package/chunks/remote-workflow-runtime-DB52SINR.js +12 -0
  88. package/chunks/{run-VH4OIDKF.js → run-MU3MFL2Z.js} +902 -322
  89. package/chunks/{runtime-4TAJFVF7.js → runtime-AUBLQUOH.js} +2 -2
  90. package/chunks/{runtime-HWL6HG7A.js → runtime-U66JNSAY.js} +7 -7
  91. package/chunks/{scan-stream-HJAZJONE.js → scan-stream-34F3LTPV.js} +3 -2
  92. package/chunks/{scope-Q5PIX2IS.js → scope-HSTG63TQ.js} +2 -2
  93. package/chunks/service-plugins-5B23PWXC.js +64 -0
  94. package/chunks/{session-store-2FEIZGSV.js → session-store-MKAAP3WL.js} +2 -2
  95. package/chunks/{variant-candidates-TX5V6XOT.js → variant-candidates-LG767HWH.js} +7 -7
  96. package/chunks/{web-recon-prepass-6HOUGF7Q.js → web-recon-prepass-NJP6J3E4.js} +5 -5
  97. package/chunks/workflow-runtime-AR627I26.js +178 -0
  98. package/dashboard/assets/{abnfDiagram-VCTEODGH-BuvumFYR.js → abnfDiagram-VCTEODGH-Cq149Jpk.js} +1 -1
  99. package/dashboard/assets/{arc-DZzWDuCG.js → arc-CpP-3TRW.js} +1 -1
  100. package/dashboard/assets/architecture-7GRP2DOG-z5EHYkyH.js +1 -0
  101. package/dashboard/assets/{architectureDiagram-5GKGNRK7-Bw5el_EL.js → architectureDiagram-5GKGNRK7-ewtXpjR_.js} +1 -1
  102. package/dashboard/assets/{blockDiagram-I7D4REHJ-BjVLEApp.js → blockDiagram-I7D4REHJ-CZYkRRDi.js} +1 -1
  103. package/dashboard/assets/{c4Diagram-7LVT6UL2-B9nNzx2J.js → c4Diagram-7LVT6UL2-CV7Iu3_Z.js} +1 -1
  104. package/dashboard/assets/channel-CuYjfiC5.js +1 -0
  105. package/dashboard/assets/{chunk-4HAMMTFA-y72Q95nW.js → chunk-4HAMMTFA-PKCyW4m-.js} +1 -1
  106. package/dashboard/assets/{chunk-75Z2AOVW-BOhrOGMO.js → chunk-75Z2AOVW-C5MlFTc_.js} +1 -1
  107. package/dashboard/assets/{chunk-DU6HZSFF-B0EhAaNb.js → chunk-DU6HZSFF-3M37ulcO.js} +2 -2
  108. package/dashboard/assets/{chunk-F27PBJKO-BR-hiDvM.js → chunk-F27PBJKO-DTAok0qM.js} +1 -1
  109. package/dashboard/assets/{chunk-GMAD6QVW-H15vJYXg.js → chunk-GMAD6QVW-CPsr2F33.js} +1 -1
  110. package/dashboard/assets/{chunk-GVQU2GXP-BRndps0o.js → chunk-GVQU2GXP-C2AXGf9A.js} +1 -1
  111. package/dashboard/assets/{chunk-IMKFNOWR-CIzC_OWx.js → chunk-IMKFNOWR-DMG6yD_O.js} +1 -1
  112. package/dashboard/assets/{chunk-L3NEJ4N5-NR4P1Vko.js → chunk-L3NEJ4N5-BSvwdbXx.js} +1 -1
  113. package/dashboard/assets/{chunk-OSK3NFVY-DtjTDf8S.js → chunk-OSK3NFVY-CfB8V7FU.js} +1 -1
  114. package/dashboard/assets/{chunk-P2QGCYS3-CYT11Qjx.js → chunk-P2QGCYS3-CvmZvq6n.js} +1 -1
  115. package/dashboard/assets/{chunk-POPQ4Y6H-Duj2Ygwu.js → chunk-POPQ4Y6H-D_TvwDxL.js} +1 -1
  116. package/dashboard/assets/{chunk-PWAF6VOD-z4p5Tf_y.js → chunk-PWAF6VOD-Da5GnuOY.js} +1 -1
  117. package/dashboard/assets/{chunk-SHT3W25Y-DYeLYLS3.js → chunk-SHT3W25Y-CcsMJpR-.js} +1 -1
  118. package/dashboard/assets/{chunk-SVP7TREG-BKowxCVI.js → chunk-SVP7TREG-COojjieJ.js} +1 -1
  119. package/dashboard/assets/{chunk-TICWLB2K-GDAwEFlH.js → chunk-TICWLB2K-nBAmJwx6.js} +1 -1
  120. package/dashboard/assets/{chunk-XXDRQBXY-DRD79Mjx.js → chunk-XXDRQBXY-r5HyhWDv.js} +1 -1
  121. package/dashboard/assets/classDiagram-ZZMXUADV-DCuOrWUV.js +1 -0
  122. package/dashboard/assets/classDiagram-v2-VYDZK3BY-DCuOrWUV.js +1 -0
  123. package/dashboard/assets/{common-vnzd7UOF.js → common-C6snVPsk.js} +1 -1
  124. package/dashboard/assets/{cose-bilkent-JH36ORCC-GqCLsRyf.js → cose-bilkent-JH36ORCC-BLGcaZHk.js} +1 -1
  125. package/dashboard/assets/{cynefin-OW5HDTMX-CJN9YwWN.js → cynefin-OW5HDTMX-DbZMK00I.js} +1 -1
  126. package/dashboard/assets/{cynefinDiagram-5FMLGOSQ-DVJHCYQY.js → cynefinDiagram-5FMLGOSQ-xodkuQtW.js} +1 -1
  127. package/dashboard/assets/{dagre-GXQ25YYZ-BMCrrJJR.js → dagre-GXQ25YYZ-CRk9qfSG.js} +1 -1
  128. package/dashboard/assets/{diagram-S7CK7UJ4-CLYDdOEm.js → diagram-S7CK7UJ4-DNoTMlCO.js} +1 -1
  129. package/dashboard/assets/{diagram-UQ7AKVKN-CnPuAZK7.js → diagram-UQ7AKVKN-COccuyew.js} +1 -1
  130. package/dashboard/assets/{diagram-VSXAHHWV-Cr2I2DnG.js → diagram-VSXAHHWV-g6D1tWRb.js} +1 -1
  131. package/dashboard/assets/{diagram-VX7I27RA-_mGW1wpp.js → diagram-VX7I27RA-DhO4eVIC.js} +1 -1
  132. package/dashboard/assets/{diagram-Z3DM3KII-igybB0l9.js → diagram-Z3DM3KII-DeOQFexd.js} +1 -1
  133. package/dashboard/assets/{dist-Bb7_-x5y.js → dist-BQYeOQg3.js} +1 -1
  134. package/dashboard/assets/{ebnfDiagram-PWID7BFC-CVCICf2R.js → ebnfDiagram-PWID7BFC-MtkX2feM.js} +1 -1
  135. package/dashboard/assets/{erDiagram-RLTQ6QDP-CRjnfgxj.js → erDiagram-RLTQ6QDP-DIWSsoYZ.js} +1 -1
  136. package/dashboard/assets/eventmodeling-NTZA5JFV-D_3ez4Gv.js +1 -0
  137. package/dashboard/assets/flowDiagram-HODETNUW-D2boyYEd.js +1 -0
  138. package/dashboard/assets/{ganttDiagram-EL5Y4UJY-DppD7sD7.js → ganttDiagram-EL5Y4UJY-DKggkJe0.js} +1 -1
  139. package/dashboard/assets/{gitGraph-4MIJSDKK-Tw0vNnQc.js → gitGraph-4MIJSDKK-DFOQYwXc.js} +1 -1
  140. package/dashboard/assets/{gitGraphDiagram-WWUBYQGX-Cpf96-z3.js → gitGraphDiagram-WWUBYQGX-r_iR8Qzo.js} +1 -1
  141. package/dashboard/assets/{info-A6RAGUB7-DLyt9arx.js → info-A6RAGUB7-DeednLoB.js} +1 -1
  142. package/dashboard/assets/{infoDiagram-27XIBGKW-B6_piSNS.js → infoDiagram-27XIBGKW-ClQk7UyQ.js} +1 -1
  143. package/dashboard/assets/{ishikawaDiagram-5VMMS53U-DvMO0B0X.js → ishikawaDiagram-5VMMS53U-tR7Vziog.js} +1 -1
  144. package/dashboard/assets/{journeyDiagram-3NMN7TZE-f7ZK98b6.js → journeyDiagram-3NMN7TZE-Cpb9IqKL.js} +1 -1
  145. package/dashboard/assets/{kanban-definition-UXKFOSKX-Dso0nAxL.js → kanban-definition-UXKFOSKX-BzUuKbA9.js} +1 -1
  146. package/dashboard/assets/katex-BdBmVSus.js +257 -0
  147. package/dashboard/assets/{line-VcKaFG0G.js → line-BHY_tSHu.js} +1 -1
  148. package/dashboard/assets/{linear-D7YnpiWh.js → linear-naZZ1pHk.js} +1 -1
  149. package/dashboard/assets/{mermaid-parser.core-DriL2hrV.js → mermaid-parser.core-CPvd4cEx.js} +3 -3
  150. package/dashboard/assets/{mermaid.core-DJWYDh_P.js → mermaid.core-D_QsUPU8.js} +4 -4
  151. package/dashboard/assets/{mindmap-definition-YA3MSWOX-DZsoIeac.js → mindmap-definition-YA3MSWOX-CtfLTPPJ.js} +1 -1
  152. package/dashboard/assets/operations-BwCzhVnT.js +130 -0
  153. package/dashboard/assets/operations-QjKT0Hwi.css +1 -0
  154. package/dashboard/assets/{packet-AYTQ26CC-BQBIXKxk.js → packet-AYTQ26CC-DDQbkT9I.js} +1 -1
  155. package/dashboard/assets/{pegDiagram-XKGWAZYB-B0-lslgW.js → pegDiagram-XKGWAZYB-C1Dclbzj.js} +1 -1
  156. package/dashboard/assets/{pie-WAS4IAKB-DoY6dwQs.js → pie-WAS4IAKB-LpU4ULAs.js} +1 -1
  157. package/dashboard/assets/{pieDiagram-E7YTZNPT-ElmdRjp5.js → pieDiagram-E7YTZNPT-Cd7XwYo5.js} +1 -1
  158. package/dashboard/assets/{quadrantDiagram-AXDQQJYC-Ci1h98Q2.js → quadrantDiagram-AXDQQJYC-CaS-GQ4X.js} +1 -1
  159. package/dashboard/assets/{radar-RG4KPBEZ-DHod2WgB.js → radar-RG4KPBEZ-CcxW3NJm.js} +1 -1
  160. package/dashboard/assets/{railroad-74A4TZTK-90JxB4xV.js → railroad-74A4TZTK-9P5Rl8fP.js} +1 -1
  161. package/dashboard/assets/railroad-abnf-HS5TGJTU-CSfpwjna.js +1 -0
  162. package/dashboard/assets/railroad-ebnf-LZEXJU2U-D6R5qzr-.js +1 -0
  163. package/dashboard/assets/railroad-peg-WCYAUIDC-DKEX7ITG.js +1 -0
  164. package/dashboard/assets/{railroadDiagram-O6MQD6OU-k3190A6L.js → railroadDiagram-O6MQD6OU-BeesTrqn.js} +1 -1
  165. package/dashboard/assets/{requirementDiagram-BXWQKSXE-C3-eR7I5.js → requirementDiagram-BXWQKSXE-IjyK0DhW.js} +1 -1
  166. package/dashboard/assets/{sankeyDiagram-P5KCCOFB-Bc86pi8w.js → sankeyDiagram-P5KCCOFB-DmIluQqo.js} +1 -1
  167. package/dashboard/assets/{sequenceDiagram-WJ2MYXX4-Bv_MvEmz.js → sequenceDiagram-WJ2MYXX4-CUp8ZjTc.js} +1 -1
  168. package/dashboard/assets/{src-D7Dqq5yP.js → src-r61wDjcA.js} +1 -1
  169. package/dashboard/assets/{stateDiagram-D77RDMKH-Bq_GVmeW.js → stateDiagram-D77RDMKH-Dy9TQb8P.js} +1 -1
  170. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-CQb0ZtPr.js +1 -0
  171. package/dashboard/assets/{swimlanes-42K2YHIH-q0iK-e0P.js → swimlanes-42K2YHIH-CZuDV7V5.js} +1 -1
  172. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-BxgWMq8X.js +8 -0
  173. package/dashboard/assets/{timeline-definition-24CTP7MA-CNfF07hM.js → timeline-definition-24CTP7MA-BGdXW-iY.js} +1 -1
  174. package/dashboard/assets/{treeView-Q6P3EWNA-m629ePnS.js → treeView-Q6P3EWNA-DlRrayjM.js} +1 -1
  175. package/dashboard/assets/{treemap-WGGIJYW6-D9Cb2ETv.js → treemap-WGGIJYW6-C6UqLKfI.js} +1 -1
  176. package/dashboard/assets/{vennDiagram-4TSXK5OY-v4dKF-FE.js → vennDiagram-4TSXK5OY-DzKWHJsl.js} +1 -1
  177. package/dashboard/assets/{wardley-WFR3VGLG-DkwH_nRe.js → wardley-WFR3VGLG-thmyHKb0.js} +1 -1
  178. package/dashboard/assets/{wardleyDiagram-VM6X3IG4-3ImohVu4.js → wardleyDiagram-VM6X3IG4-DGsjYmNJ.js} +1 -1
  179. package/dashboard/assets/{xychartDiagram-S5SC5T6Z-QJu3dm7K.js → xychartDiagram-S5SC5T6Z-C7_T_tWt.js} +1 -1
  180. package/dashboard/index.html +3 -3
  181. package/package.json +3 -2
  182. package/worker-assets/demo-target/README.md +15 -0
  183. package/worker-assets/demo-target/include/decoder.h +27 -0
  184. package/worker-assets/demo-target/patched-decoder.c +40 -0
  185. package/worker-assets/demo-target/src/decoder.c +50 -0
  186. package/worker-assets/demo-target/witness-65537x1.bin +0 -0
  187. package/chunks/chunk-3P3XXSIJ.js +0 -463
  188. package/chunks/chunk-EWXOG6D3.js +0 -1695
  189. package/chunks/chunk-FXR3BT2G.js +0 -226
  190. package/chunks/chunk-R35KKJA4.js +0 -90
  191. package/chunks/eval-runner-RZKDOQ2G.js +0 -30
  192. package/chunks/managed-operation-YNQQEA5V.js +0 -59
  193. package/chunks/orchestrate-5NK34H3W.js +0 -62
  194. package/chunks/service-plugins-QYFITODK.js +0 -63
  195. package/chunks/workflow-runtime-ZEEBJFQG.js +0 -64
  196. package/dashboard/assets/architecture-7GRP2DOG-DK9bv1Md.js +0 -1
  197. package/dashboard/assets/channel-Ck17eKdX.js +0 -1
  198. package/dashboard/assets/classDiagram-ZZMXUADV-BaeZA6LE.js +0 -1
  199. package/dashboard/assets/classDiagram-v2-VYDZK3BY-BaeZA6LE.js +0 -1
  200. package/dashboard/assets/eventmodeling-NTZA5JFV-po5oDydv.js +0 -1
  201. package/dashboard/assets/flowDiagram-HODETNUW-TSV9s7q4.js +0 -1
  202. package/dashboard/assets/katex-CXMH3UgJ.js +0 -257
  203. package/dashboard/assets/operations-BIaUSnYv.js +0 -121
  204. package/dashboard/assets/operations-BeCdkT4S.css +0 -1
  205. package/dashboard/assets/railroad-abnf-HS5TGJTU-BkXGl114.js +0 -1
  206. package/dashboard/assets/railroad-ebnf-LZEXJU2U-QVAERn2C.js +0 -1
  207. package/dashboard/assets/railroad-peg-WCYAUIDC-B1-PM01z.js +0 -1
  208. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-z1XRaftz.js +0 -1
  209. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-C9L6XBQj.js +0 -8
  210. package/dashboard/assets/zero-connect-BGDY0PMZ.webp +0 -0
  211. package/dashboard/assets/zero-curious-DovTLOs8.webp +0 -0
  212. package/dashboard/assets/zero-peek-Dzm3MT3X.png +0 -0
  213. package/dashboard/assets/zero-planning-CBeHDrG_.webp +0 -0
@@ -0,0 +1,566 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __0CreateRequire } from "node:module";
3
+ const require = __0CreateRequire(import.meta.url);
4
+ import {
5
+ source_default
6
+ } from "./chunk-HLFS6WV2.js";
7
+ import {
8
+ formatHtml,
9
+ formatMarkdown,
10
+ formatSarif
11
+ } from "./chunk-H5QURBBK.js";
12
+ import {
13
+ compareFindingsByBusinessPriority,
14
+ createAuditReportDocument,
15
+ createReviewReportDocument,
16
+ createScanReportDocument,
17
+ getFindingPriority
18
+ } from "./chunk-GXXX7AGH.js";
19
+
20
+ // packages/cli/src/utils.ts
21
+ import { gzipSync } from "zlib";
22
+ async function getRuntimeAvailability() {
23
+ const { detectAvailableRuntimes, LlmApiRuntime } = await import("./dist-TQMHMSBZ.js");
24
+ const apiRuntimeDiagnostics = new LlmApiRuntime({ type: "api", timeout: 5e3 }).getConfigurationDiagnostics();
25
+ const hasApiKey = apiRuntimeDiagnostics.valid;
26
+ const availableRuntimes = [...await detectAvailableRuntimes()];
27
+ return {
28
+ hasApiKey,
29
+ availableRuntimes,
30
+ apiRuntime: {
31
+ configured: apiRuntimeDiagnostics.reason !== "missing_key",
32
+ valid: apiRuntimeDiagnostics.valid,
33
+ providerLabel: apiRuntimeDiagnostics.providerLabel,
34
+ error: apiRuntimeDiagnostics.fatalError
35
+ }
36
+ };
37
+ }
38
+ async function checkRuntimeAvailability(runtime) {
39
+ const availability = await getRuntimeAvailability();
40
+ const { hasApiKey, availableRuntimes, apiRuntime } = availability;
41
+ if (hasApiKey) return;
42
+ console.log("");
43
+ if ((runtime === "api" || runtime === "auto") && apiRuntime.configured && apiRuntime.error) {
44
+ console.log(source_default.red(` ${apiRuntime.providerLabel} config error: ${apiRuntime.error.split("\n")[0]}`));
45
+ }
46
+ if (runtime === "api") {
47
+ console.log(source_default.yellow(
48
+ apiRuntime.configured ? " Warning: `--runtime api` needs a valid provider configuration. AI analysis will fail until this is fixed." : " Warning: `--runtime api` needs provider credentials. AI analysis may be skipped."
49
+ ));
50
+ } else if (availableRuntimes.length > 0) {
51
+ console.log(source_default.cyan(` Using local runtime(s): ${availableRuntimes.join(", ")}`));
52
+ } else {
53
+ console.log(source_default.yellow(" Warning: No API key or local agent runtime detected. AI analysis will be skipped."));
54
+ }
55
+ console.log(source_default.gray(" Provider credentials: ZERO_CHATGPT_ACCESS_TOKEN | ZERO_CHATGPT_OAUTH_REFRESH_TOKEN, OPENROUTER_API_KEY, ANTHROPIC_API_KEY, AZURE_OPENAI_API_KEY, OPENAI_API_KEY"));
56
+ console.log("");
57
+ }
58
+ function buildShareUrl(report) {
59
+ const json = JSON.stringify(report);
60
+ const compressed = gzipSync(Buffer.from(json, "utf-8"));
61
+ const b64 = compressed.toString("base64url");
62
+ return `https://0.security/r#${b64}`;
63
+ }
64
+
65
+ // packages/cli/src/formatters/terminal.ts
66
+ var SEVERITY_COUNT_COLOR = {
67
+ critical: source_default.red.bold,
68
+ high: source_default.redBright.bold,
69
+ medium: source_default.yellow.bold,
70
+ low: source_default.blue,
71
+ info: source_default.gray
72
+ };
73
+ function formatTerminal(report) {
74
+ const W = 60;
75
+ const lines = [];
76
+ lines.push("");
77
+ if (report.warnings.length > 0) {
78
+ lines.push(` ${source_default.yellow.bold("WARNINGS")}`);
79
+ lines.push("");
80
+ for (const warning of report.warnings) {
81
+ lines.push(
82
+ ` ${source_default.yellow.bold("!")} ${source_default.yellow(`[${warning.stage}] ${warning.message}`)}`
83
+ );
84
+ }
85
+ lines.push("");
86
+ }
87
+ if (report.findings.length === 0) {
88
+ lines.push("");
89
+ if (report.warnings.length > 0 || report.executionSuccessful === false) {
90
+ lines.push(
91
+ ` ${source_default.yellow.bold("!")} ${source_default.yellow("No vulnerabilities confirmed. Scan finished with warnings.")}`
92
+ );
93
+ } else if (report.reviewChecks?.some((check) => check.status !== "pass")) {
94
+ lines.push(` ${source_default.yellow.bold("!")} ${source_default.yellow("No security vulnerabilities found. Advisory review checks need attention.")}`);
95
+ } else {
96
+ lines.push(` ${source_default.green.bold("\u2713")} ${source_default.green("No vulnerabilities found.")}`);
97
+ }
98
+ } else {
99
+ lines.push(` ${source_default.bold.white("FINDINGS")}`);
100
+ lines.push("");
101
+ const sorted = [...report.findings].sort(compareFindingsByBusinessPriority);
102
+ for (const finding of sorted) {
103
+ lines.push(formatFinding(finding));
104
+ }
105
+ }
106
+ if (report.reviewChecks?.length) {
107
+ lines.push("", ` ${source_default.bold.white("REVIEW CHECKS (advisory)")}`, "");
108
+ for (const check of report.reviewChecks) {
109
+ const color = check.status === "pass" ? source_default.green : source_default.yellow;
110
+ lines.push(` ${color(check.status.toUpperCase())} ${check.name} (${check.id})`);
111
+ lines.push(` Reason: ${check.reason}`);
112
+ if (check.fix) lines.push(` Suggested fix: ${check.fix}`);
113
+ lines.push("");
114
+ }
115
+ }
116
+ lines.push("");
117
+ lines.push(` ${source_default.gray("\u2500".repeat(50))}`);
118
+ lines.push("");
119
+ const { summary } = report;
120
+ const sev = [
121
+ summary.critical > 0 ? source_default.red.bold(`${summary.critical} critical`) : source_default.gray(`${summary.critical} critical`),
122
+ summary.high > 0 ? source_default.hex("#f97316").bold(`${summary.high} high`) : source_default.gray(`${summary.high} high`),
123
+ summary.medium > 0 ? source_default.yellow.bold(`${summary.medium} medium`) : source_default.gray(`${summary.medium} medium`),
124
+ source_default.gray(`${summary.low} low`),
125
+ source_default.gray(`${summary.info} info`)
126
+ ].join(source_default.gray(" "));
127
+ for (const label of ["Urgent", "High", "Moderate", "Low", "Not assessed"]) {
128
+ const count = report.findings.filter((finding) => getFindingPriority(finding).label === label).length;
129
+ if (count) lines.push(` Business priority ${label}: ${count}`);
130
+ }
131
+ lines.push(` ${source_default.gray("Technical severity:")} ${sev}`);
132
+ lines.push(` ${source_default.white.bold(String(summary.totalFindings))} findings ${source_default.gray("in")} ${source_default.white(formatDuration(report.durationMs))}`);
133
+ lines.push(` ${source_default.gray("Share:")} ${source_default.cyan(buildShareUrl(report))}`);
134
+ lines.push("");
135
+ return lines.join("\n");
136
+ }
137
+ function formatFinding(finding) {
138
+ const priority = getFindingPriority(finding);
139
+ const lines = [];
140
+ lines.push(` ${source_default.bold(`Business priority: ${priority.label}`)} ${source_default.bold.white(finding.title)}`);
141
+ lines.push(` ${source_default.gray("Business impact rationale:")} ${priority.rationale}`);
142
+ lines.push(` ${source_default.gray("Technical severity:")} ${finding.severity}${finding.cvssScore !== void 0 ? ` CVSS: ${finding.cvssScore}` : ""}${finding.cvssVector ? ` CVSS vector: ${finding.cvssVector}` : ""}`);
143
+ const meta = [];
144
+ meta.push(`${source_default.gray("Category:")} ${formatCategory(finding.category)}`);
145
+ if (finding.status === "confirmed") {
146
+ meta.push(source_default.green("\u2713 Confirmed"));
147
+ }
148
+ lines.push(` ${" ".repeat(11)}${meta.join(source_default.gray(" \xB7 "))}`);
149
+ if (finding.description) {
150
+ const desc = finding.description.length > 100 ? finding.description.slice(0, 97) + "..." : finding.description;
151
+ lines.push(` ${" ".repeat(11)}${source_default.gray(desc)}`);
152
+ }
153
+ if (finding.evidence.analysis) {
154
+ const ev = finding.evidence.analysis.length > 100 ? finding.evidence.analysis.slice(0, 97) + "..." : finding.evidence.analysis;
155
+ lines.push(` ${" ".repeat(11)}${source_default.gray.italic("\u21B3 " + ev)}`);
156
+ }
157
+ lines.push("");
158
+ return lines.join("\n");
159
+ }
160
+ function formatCategory(cat) {
161
+ return cat.split("-").map((w) => w.charAt(0).toUpperCase() + w.slice(1)).join(" ");
162
+ }
163
+ function formatDuration(ms) {
164
+ if (ms < 1e3) return `${ms}ms`;
165
+ return `${(ms / 1e3).toFixed(1)}s`;
166
+ }
167
+
168
+ // packages/cli/src/formatters/json.ts
169
+ function formatJson(report) {
170
+ return JSON.stringify(report, null, 2);
171
+ }
172
+
173
+ // packages/cli/src/formatters/replay.ts
174
+ function sleep(ms) {
175
+ return new Promise((resolve) => setTimeout(resolve, ms));
176
+ }
177
+ function stripAnsi(s) {
178
+ return s.replace(/\x1b\[[0-9;]*m/g, "");
179
+ }
180
+ var BOX_WIDTH = 55;
181
+ function boxTop(label) {
182
+ const inner = ` ${label} `;
183
+ const remaining = BOX_WIDTH - inner.length - 1;
184
+ return source_default.dim("\u250C\u2500 ") + source_default.bold.white(label) + source_default.dim(" " + "\u2500".repeat(Math.max(0, remaining)) + "\u2510");
185
+ }
186
+ function boxRow(content) {
187
+ const visible = stripAnsi(content);
188
+ const pad = Math.max(0, BOX_WIDTH - visible.length - 2);
189
+ return source_default.dim("\u2502") + " " + content + " ".repeat(pad) + source_default.dim("\u2502");
190
+ }
191
+ function boxBottom(withArrow) {
192
+ if (withArrow) {
193
+ const half = Math.floor((BOX_WIDTH - 1) / 2);
194
+ const rest = BOX_WIDTH - half - 1;
195
+ return source_default.dim("\u2514" + "\u2500".repeat(half) + "\u2534" + "\u2500".repeat(rest) + "\u2518");
196
+ }
197
+ return source_default.dim("\u2514" + "\u2500".repeat(BOX_WIDTH) + "\u2518");
198
+ }
199
+ function connector() {
200
+ const half = Math.floor((BOX_WIDTH + 1) / 2);
201
+ return " ".repeat(half) + source_default.dim("\u25BC");
202
+ }
203
+ function outcomeLabel(outcome) {
204
+ switch (outcome) {
205
+ case "vulnerable":
206
+ return source_default.red.bold("VULNERABLE");
207
+ case "leaked":
208
+ return source_default.red.bold("LEAKED");
209
+ case "bypassed":
210
+ return source_default.red.bold("BYPASSED");
211
+ case "safe":
212
+ return source_default.green("SAFE");
213
+ case "error":
214
+ return source_default.yellow("ERROR");
215
+ default:
216
+ return source_default.gray(outcome.toUpperCase());
217
+ }
218
+ }
219
+ function buildReplayLines(data) {
220
+ const lines = [];
221
+ const FAST = 50;
222
+ const MED = 75;
223
+ const SLOW = 100;
224
+ const PAUSE = 200;
225
+ lines.push({ text: boxTop("DISCOVER"), delay: PAUSE });
226
+ if (data.targetInfo) {
227
+ const t = data.targetInfo;
228
+ const truncUrl = t.url.length > 30 ? t.url.slice(0, 27) + "..." : t.url;
229
+ lines.push({
230
+ text: boxRow(
231
+ source_default.dim("\u25B8") + " " + source_default.white(`GET ${truncUrl}`) + source_default.dim(" \u2192 ") + source_default.white(`200`) + source_default.gray(` (${t.type} endpoint detected)`)
232
+ ),
233
+ delay: MED
234
+ });
235
+ if (t.systemPrompt) {
236
+ lines.push({
237
+ text: boxRow(
238
+ source_default.dim("\u25B8") + " " + source_default.white(`System prompt extracted`) + source_default.gray(` (${t.systemPrompt.length} chars)`)
239
+ ),
240
+ delay: MED
241
+ });
242
+ }
243
+ if (t.detectedFeatures && t.detectedFeatures.length > 0) {
244
+ lines.push({
245
+ text: boxRow(
246
+ source_default.dim("\u25B8") + " " + source_default.white(`${t.detectedFeatures.length} features detected: `) + source_default.gray(t.detectedFeatures.slice(0, 3).join(", "))
247
+ ),
248
+ delay: MED
249
+ });
250
+ }
251
+ if (t.endpoints && t.endpoints.length > 0) {
252
+ lines.push({
253
+ text: boxRow(
254
+ source_default.dim("\u25B8") + " " + source_default.white(`${t.endpoints.length} endpoints found`)
255
+ ),
256
+ delay: MED
257
+ });
258
+ }
259
+ } else {
260
+ const truncTarget = data.target.length > 30 ? data.target.slice(0, 27) + "..." : data.target;
261
+ lines.push({
262
+ text: boxRow(
263
+ source_default.dim("\u25B8") + " " + source_default.white(`GET ${truncTarget}`) + source_default.dim(" \u2192 ") + source_default.white("200") + source_default.gray(" (LLM API detected)")
264
+ ),
265
+ delay: MED
266
+ });
267
+ }
268
+ lines.push({ text: boxBottom(true), delay: FAST });
269
+ lines.push({ text: connector(), delay: PAUSE });
270
+ lines.push({ text: boxTop("ATTACK"), delay: PAUSE });
271
+ const vulnerableFindings = data.findings.filter(
272
+ (f) => f.status !== "false-positive"
273
+ );
274
+ if (vulnerableFindings.length > 0) {
275
+ for (const finding of vulnerableFindings.slice(0, 8)) {
276
+ const truncTitle = finding.title.length > 30 ? finding.title.slice(0, 27) + "..." : finding.title;
277
+ let outcome = "VULNERABLE";
278
+ const cat = finding.category;
279
+ if (cat === "system-prompt-extraction") outcome = "LEAKED";
280
+ if (cat === "jailbreak") outcome = "BYPASSED";
281
+ lines.push({
282
+ text: boxRow(
283
+ source_default.dim("\u25B8") + " " + source_default.white(truncTitle) + source_default.dim(" \u2192 ") + " " + outcomeLabel(outcome.toLowerCase())
284
+ ),
285
+ delay: MED
286
+ });
287
+ }
288
+ if (vulnerableFindings.length > 8) {
289
+ lines.push({
290
+ text: boxRow(
291
+ source_default.gray(
292
+ ` ... and ${vulnerableFindings.length - 8} more attacks`
293
+ )
294
+ ),
295
+ delay: FAST
296
+ });
297
+ }
298
+ } else {
299
+ lines.push({
300
+ text: boxRow(
301
+ source_default.dim("\u25B8") + " " + source_default.white(`${data.summary.totalAttacks} probes executed`) + source_default.dim(" \u2192 ") + source_default.green("ALL SAFE")
302
+ ),
303
+ delay: MED
304
+ });
305
+ }
306
+ lines.push({ text: boxBottom(true), delay: FAST });
307
+ lines.push({ text: connector(), delay: PAUSE });
308
+ lines.push({ text: boxTop("VERIFY"), delay: PAUSE });
309
+ const confirmed = data.findings.filter(
310
+ (f) => f.status === "confirmed" || f.status === "verified" || f.status === "scored" || f.status === "reported"
311
+ );
312
+ const falsePositives = data.findings.filter(
313
+ (f) => f.status === "false-positive"
314
+ );
315
+ if (confirmed.length > 0 || data.findings.length > 0) {
316
+ const reproduced = confirmed.length > 0 ? confirmed.length : data.findings.length;
317
+ lines.push({
318
+ text: boxRow(
319
+ source_default.green("\u2713") + " " + source_default.white(`Reproduced ${reproduced}/${reproduced} findings`)
320
+ ),
321
+ delay: MED
322
+ });
323
+ }
324
+ if (falsePositives.length > 0) {
325
+ lines.push({
326
+ text: boxRow(
327
+ source_default.red("\u2717") + " " + source_default.white(`Eliminated ${falsePositives.length} false positives`)
328
+ ),
329
+ delay: MED
330
+ });
331
+ }
332
+ if (confirmed.length === 0 && falsePositives.length === 0 && data.findings.length === 0) {
333
+ lines.push({
334
+ text: boxRow(source_default.green("\u2713") + " " + source_default.white("No findings to verify")),
335
+ delay: MED
336
+ });
337
+ }
338
+ lines.push({ text: boxBottom(true), delay: FAST });
339
+ lines.push({ text: connector(), delay: PAUSE });
340
+ lines.push({ text: boxTop("REPORT"), delay: PAUSE });
341
+ const totalFindings = data.summary.totalFindings;
342
+ if (totalFindings > 0) {
343
+ const parts = [];
344
+ if (data.summary.critical > 0) parts.push(source_default.red.bold(`${data.summary.critical} CRITICAL`));
345
+ if (data.summary.high > 0) parts.push(source_default.redBright(`${data.summary.high} HIGH`));
346
+ if (data.summary.medium > 0) parts.push(source_default.yellow(`${data.summary.medium} MEDIUM`));
347
+ if (data.summary.low > 0) parts.push(source_default.blue(`${data.summary.low} LOW`));
348
+ if (data.summary.info > 0) parts.push(source_default.gray(`${data.summary.info} INFO`));
349
+ lines.push({
350
+ text: boxRow(
351
+ source_default.white(`${totalFindings} verified findings: `) + parts.join(source_default.dim(", "))
352
+ ),
353
+ delay: MED
354
+ });
355
+ } else {
356
+ lines.push({
357
+ text: boxRow(source_default.green.bold("0 findings") + source_default.white(" - target appears secure")),
358
+ delay: MED
359
+ });
360
+ }
361
+ const duration = data.durationMs < 1e3 ? `${data.durationMs}ms` : `${(data.durationMs / 1e3).toFixed(1)}s`;
362
+ lines.push({
363
+ text: boxRow(
364
+ source_default.white(`Completed in ${duration}`) + source_default.dim(" \u2192 ") + source_default.gray("./0-report.json")
365
+ ),
366
+ delay: MED
367
+ });
368
+ lines.push({ text: boxBottom(false), delay: FAST });
369
+ return lines;
370
+ }
371
+ async function renderReplay(data) {
372
+ const lines = buildReplayLines(data);
373
+ process.stdout.write("\n");
374
+ process.stdout.write(
375
+ source_default.red.bold(" \u25C6 0") + source_default.gray(" attack replay") + "\n"
376
+ );
377
+ process.stdout.write(
378
+ source_default.dim(" " + "\u2500".repeat(BOX_WIDTH + 1)) + "\n"
379
+ );
380
+ process.stdout.write("\n");
381
+ await sleep(200);
382
+ for (const line of lines) {
383
+ await sleep(line.delay);
384
+ process.stdout.write(" " + line.text + "\n");
385
+ }
386
+ process.stdout.write("\n");
387
+ }
388
+
389
+ // packages/cli/src/formatters/timeline.ts
390
+ var TIMELINE_FORMATS = ["json", "csv", "markdown"];
391
+ function isTimelineFormat(value) {
392
+ return TIMELINE_FORMATS.includes(value);
393
+ }
394
+ function formatTimeline(record, format) {
395
+ switch (format) {
396
+ case "json":
397
+ return formatTimelineJson(record);
398
+ case "csv":
399
+ return formatTimelineCsv(record);
400
+ case "markdown":
401
+ return formatTimelineMarkdown(record);
402
+ }
403
+ }
404
+ function formatTimelineJson(record) {
405
+ return JSON.stringify(record, null, 2);
406
+ }
407
+ var CSV_COLUMNS = [
408
+ "timestamp",
409
+ "stage",
410
+ "eventType",
411
+ "agentRole",
412
+ "findingId",
413
+ "action",
414
+ "attackTechniqueIds",
415
+ "attackTactics",
416
+ // Appended, never interleaved with the ATT&CK columns — an importer that
417
+ // only knows the ATT&CK pair keeps working, and the two taxonomies stay
418
+ // visibly distinct in a spreadsheet.
419
+ "atlasTechniqueIds",
420
+ "atlasTactics"
421
+ ];
422
+ function formatTimelineCsv(record) {
423
+ const lines = [CSV_COLUMNS.join(",")];
424
+ for (const entry of record.entries) {
425
+ lines.push(
426
+ [
427
+ entry.timestamp,
428
+ entry.stage,
429
+ entry.eventType,
430
+ entry.agentRole ?? "",
431
+ entry.findingId ?? "",
432
+ entry.action,
433
+ entry.techniques.map((t) => t.id).join(" "),
434
+ uniq(entry.techniques.map((t) => t.tactic)).join(" "),
435
+ entry.atlasTechniques.map((t) => t.id).join(" "),
436
+ uniq(entry.atlasTechniques.map((t) => t.tactic)).join(" ")
437
+ ].map(csvCell).join(",")
438
+ );
439
+ }
440
+ return lines.join("\n") + "\n";
441
+ }
442
+ function csvCell(value) {
443
+ if (!/[",\r\n]/.test(value)) return value;
444
+ return `"${value.replace(/"/g, '""')}"`;
445
+ }
446
+ function formatTimelineMarkdown(record) {
447
+ const out = [];
448
+ out.push(`# Forensic timeline \u2014 scan \`${record.scanId}\``);
449
+ out.push("");
450
+ if (record.target) out.push(`- **Target:** ${record.target}`);
451
+ out.push(`- **Generated:** ${record.generatedAt}`);
452
+ out.push(`- **Events:** ${record.eventCount} of ${record.totalEventCount} recorded`);
453
+ if (record.filters.since) out.push(`- **Since:** ${record.filters.since}`);
454
+ if (record.filters.until) out.push(`- **Until:** ${record.filters.until}`);
455
+ if (record.filters.attackOnly) {
456
+ out.push(`- **Filter:** technique-mapped events only (pipeline lifecycle events omitted)`);
457
+ }
458
+ out.push("");
459
+ out.push("All timestamps are UTC (ISO-8601).");
460
+ out.push("");
461
+ out.push(
462
+ "ATT&CK (Enterprise) and ATLAS (AI systems) are separate matrices; a row may carry either, both, or neither."
463
+ );
464
+ out.push("");
465
+ if (record.entries.length === 0) {
466
+ out.push("_No pipeline events recorded for this scan in the selected window._");
467
+ out.push("");
468
+ return out.join("\n");
469
+ }
470
+ out.push("| # | Timestamp (UTC) | Stage | Event | Agent | Finding | Action | ATT&CK | ATLAS |");
471
+ out.push("| --- | --- | --- | --- | --- | --- | --- | --- | --- |");
472
+ record.entries.forEach((entry, i) => {
473
+ out.push(
474
+ "| " + [
475
+ String(i + 1),
476
+ entry.timestamp,
477
+ mdCell(entry.stage),
478
+ mdCell(entry.eventType),
479
+ mdCell(entry.agentRole ?? "\u2014"),
480
+ mdCell(entry.findingId ?? "\u2014"),
481
+ mdCell(entry.action),
482
+ mdTechniques(entry.techniques),
483
+ mdTechniques(entry.atlasTechniques)
484
+ ].join(" | ") + " |"
485
+ );
486
+ });
487
+ out.push("");
488
+ return out.join("\n");
489
+ }
490
+ function mdTechniques(techniques) {
491
+ return techniques.length > 0 ? techniques.map(mdTechnique).join(", ") : "\u2014";
492
+ }
493
+ function mdTechnique(technique) {
494
+ const label = mdCell(`${technique.id} ${technique.name}`);
495
+ return technique.url ? `[${label}](${technique.url})` : label;
496
+ }
497
+ function mdCell(value) {
498
+ return value.replace(/\s+/g, " ").replace(/\|/g, "\\|").trim();
499
+ }
500
+ function uniq(values) {
501
+ return [...new Set(values.filter((v) => v.length > 0))];
502
+ }
503
+
504
+ // packages/cli/src/formatters/index.ts
505
+ function formatPresentationDocument(document, format) {
506
+ if (format === "json" && document.documentType !== "scan-report") {
507
+ return JSON.stringify(document.report, null, 2);
508
+ }
509
+ const report = document.documentType === "scan-report" ? document.report : document.documentType === "audit-report" ? {
510
+ target: `${document.report.package}@${document.report.version}`,
511
+ scanDepth: "deep",
512
+ startedAt: document.report.startedAt,
513
+ completedAt: document.report.completedAt,
514
+ durationMs: document.report.durationMs,
515
+ summary: document.report.summary,
516
+ findings: document.report.findings,
517
+ warnings: []
518
+ } : {
519
+ target: document.report.repo,
520
+ scanDepth: "deep",
521
+ startedAt: document.report.startedAt,
522
+ completedAt: document.report.completedAt,
523
+ durationMs: document.report.durationMs,
524
+ summary: document.report.summary,
525
+ findings: document.report.findings,
526
+ warnings: document.report.warnings?.map((warning) => ({ stage: "report", message: `[${warning.stage}] ${warning.message}` })) ?? [],
527
+ executionSuccessful: document.report.researchFailed ? false : void 0,
528
+ reviewChecks: document.report.reviewChecks
529
+ };
530
+ switch (format) {
531
+ case "terminal":
532
+ return formatTerminal(report);
533
+ case "json":
534
+ return formatJson(report);
535
+ case "markdown":
536
+ return formatMarkdown(report);
537
+ case "html":
538
+ return formatHtml(report);
539
+ case "sarif":
540
+ return formatSarif(report);
541
+ case "pdf":
542
+ return "[PDF output requires generatePdfReport()]";
543
+ }
544
+ }
545
+ function formatReport(report, format) {
546
+ return formatPresentationDocument(createScanReportDocument(report), format);
547
+ }
548
+ function formatAuditReport(report, format) {
549
+ return formatPresentationDocument(createAuditReportDocument(report), format);
550
+ }
551
+ function formatReviewReport(report, format) {
552
+ return formatPresentationDocument(createReviewReportDocument(report), format);
553
+ }
554
+
555
+ export {
556
+ renderReplay,
557
+ getRuntimeAvailability,
558
+ checkRuntimeAvailability,
559
+ buildShareUrl,
560
+ TIMELINE_FORMATS,
561
+ isTimelineFormat,
562
+ formatTimeline,
563
+ formatReport,
564
+ formatAuditReport,
565
+ formatReviewReport
566
+ };
@@ -5,7 +5,7 @@ import {
5
5
  buildPlaybookInjection,
6
6
  parseSanitizerLog,
7
7
  verifyOracleByCategory
8
- } from "./chunk-Y4HJRUFE.js";
8
+ } from "./chunk-YERUDEXT.js";
9
9
  import {
10
10
  allowlistedChildEnv
11
11
  } from "./chunk-5IBCBQEH.js";
@@ -558,6 +558,7 @@ async function runCLoop(opts, ctx) {
558
558
  ctx.log(`[userspace-fuzz] compiling Tier-2 harness: ${compile_command}`);
559
559
  const compileRes = await runChild("sh", ["-c", compile_command], sourceRoot, ctx.timeoutMs);
560
560
  if (compileRes.signalled || /error:|fatal error:/i.test(compileRes.output)) {
561
+ ctx.toolingMissing.push("tier2-harness-compile");
561
562
  ctx.log(`[userspace-fuzz] Tier-2 harness failed to compile:
562
563
  ${compileRes.output.slice(-2e3)}`);
563
564
  return finish(crashes, iterations, sourceRoot, ctx, "tier2");
@@ -1317,7 +1318,7 @@ async function adjudicateWithOracle(finding, target, submitted, turnsUsed, maxTu
1317
1318
  oracle: oracleKind
1318
1319
  };
1319
1320
  }
1320
- if (isOracleInfraError(oracleResult.reason)) {
1321
+ if (oracleResult.inconclusive || isOracleInfraError(oracleResult.reason)) {
1321
1322
  return {
1322
1323
  hasPov: false,
1323
1324
  povArtifact: submitted.artifact || null,