0sec-cli 0.23.0 → 0.24.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 (213) hide show
  1. package/0.js +66 -67
  2. package/README.md +37 -11
  3. package/chunks/{adapt-loop-V3JFWOKC.js → adapt-loop-TEJPXWFG.js} +4 -4
  4. package/chunks/{artifact-scraper-NYKUF2M5.js → artifact-scraper-AJZ3LOQY.js} +2 -2
  5. package/chunks/{assumption-mining-ZX3YVWEH.js → assumption-mining-EATDC4BB.js} +18 -18
  6. package/chunks/{backend-connections-H52NIVH2.js → backend-connections-QE4NASAK.js} +3 -3
  7. package/chunks/chunk-3XLEDCFX.js +566 -0
  8. package/chunks/{chunk-I3OCJ2OA.js → chunk-3XLFB46W.js} +5 -3
  9. package/chunks/{chunk-TPUJZ74W.js → chunk-4TUR47H5.js} +2 -2
  10. package/chunks/{chunk-3ZNI7F42.js → chunk-4YRXIVPZ.js} +3 -3
  11. package/chunks/{chunk-A5QO7N3S.js → chunk-52AWIBCT.js} +1 -1
  12. package/chunks/{chunk-TO35Y326.js → chunk-554D4AYM.js} +5 -2
  13. package/chunks/{chunk-KHPOSLCF.js → chunk-5FHFG5P2.js} +174 -710
  14. package/chunks/{chunk-LT7BFGXA.js → chunk-5POT5OYF.js} +10 -10
  15. package/chunks/chunk-62PGWN7Y.js +700 -0
  16. package/chunks/{chunk-EH2WTNY7.js → chunk-A3EKBUEM.js} +1424 -859
  17. package/chunks/{chunk-YYS2H33A.js → chunk-A6AZZ6XX.js} +2 -2
  18. package/chunks/{chunk-A2ADXAC5.js → chunk-AV5BF4V7.js} +1288 -2313
  19. package/chunks/{chunk-NI6QYQSK.js → chunk-BIJPMYFA.js} +6 -6
  20. package/chunks/{chunk-JEYIWMGL.js → chunk-CIMN2AO6.js} +1 -1
  21. package/chunks/{chunk-P7KDN5PK.js → chunk-CSPF47S3.js} +14 -14
  22. package/chunks/{chunk-F344NYUN.js → chunk-DNV3ZMPX.js} +1 -1
  23. package/chunks/{chunk-YAEJAZYW.js → chunk-E42XEJTK.js} +2 -2
  24. package/chunks/{chunk-VDOWARMJ.js → chunk-ESM447R6.js} +15 -1
  25. package/chunks/{chunk-UZUELPFW.js → chunk-EXTN4SQV.js} +1 -1
  26. package/chunks/{chunk-BF5FIK7H.js → chunk-EYBMTELO.js} +108 -24
  27. package/chunks/chunk-FEOPHBMY.js +56 -0
  28. package/chunks/{chunk-XORZUR2H.js → chunk-FKGFHLLS.js} +1 -1
  29. package/chunks/chunk-G2EJ3R5I.js +5198 -0
  30. package/chunks/chunk-GHEBZKUS.js +5417 -0
  31. package/chunks/chunk-GNR3APR6.js +295 -0
  32. package/chunks/{chunk-EJH2TNVH.js → chunk-H76JYUPE.js} +3 -3
  33. package/chunks/{chunk-WIYNYNL2.js → chunk-HRBOZBMC.js} +1 -1
  34. package/chunks/{chunk-62ENS6XO.js → chunk-IIBNQTOK.js} +3 -2
  35. package/chunks/{chunk-UELXHK2Y.js → chunk-IK27KMVV.js} +16 -5
  36. package/chunks/{chunk-O6Z4XPOM.js → chunk-J6G73WYF.js} +1 -1
  37. package/chunks/chunk-JSTLXPJS.js +284 -0
  38. package/chunks/{chunk-K55B4OH4.js → chunk-O3ADFN2A.js} +1 -1
  39. package/chunks/chunk-O7Q2G2KW.js +117 -0
  40. package/chunks/{chunk-HFDSIHTE.js → chunk-QEA2VHBD.js} +202 -30
  41. package/chunks/{chunk-ITES7BCY.js → chunk-RBOMXUYL.js} +3 -111
  42. package/chunks/{chunk-T7ZEVY5G.js → chunk-RCHAFSWS.js} +815 -41
  43. package/chunks/{chunk-W5VNCB57.js → chunk-RD4FKFWR.js} +1 -1
  44. package/chunks/{chunk-LVGZGG63.js → chunk-RPTO5FY2.js} +1 -1
  45. package/chunks/{chunk-LTEE2JWK.js → chunk-RZR2XXAK.js} +251 -8
  46. package/chunks/chunk-SGILXLR3.js +289 -0
  47. package/chunks/{chunk-QMICC5O2.js → chunk-TOAAYJVN.js} +2 -2
  48. package/chunks/{chunk-PIR6BNE7.js → chunk-TOFIGQ63.js} +2 -2
  49. package/chunks/{chunk-V2BWXPZP.js → chunk-TTDFBFNZ.js} +6 -6
  50. package/chunks/{chunk-WYNZFNMF.js → chunk-TZRHWP7R.js} +289 -10
  51. package/chunks/chunk-UHUW45S3.js +164 -0
  52. package/chunks/{chunk-NX4H6L4M.js → chunk-V4BD7GSP.js} +2 -2
  53. package/chunks/{chunk-4HGGNBKK.js → chunk-V5I5GAQH.js} +2593 -1563
  54. package/chunks/{chunk-MQJVU2GZ.js → chunk-W6IYTSZH.js} +79 -9
  55. package/chunks/{chunk-OLSKXTQZ.js → chunk-WUPN3D37.js} +22 -248
  56. package/chunks/{chunk-AAA4PRWK.js → chunk-Y7KV7WV6.js} +2 -2
  57. package/chunks/{chunk-Y4HJRUFE.js → chunk-YERUDEXT.js} +876 -817
  58. package/chunks/{chunk-65H3MRBF.js → chunk-YJU7QACE.js} +1 -1
  59. package/chunks/{chunk-3E54JYS4.js → chunk-YORL5S5V.js} +1 -1
  60. package/chunks/{chunk-CP6HANBE.js → chunk-YYOQADBB.js} +4 -3
  61. package/chunks/{remote-workflow-runtime-RGQ5ECMN.js → chunk-ZPFBQ3SD.js} +39 -8
  62. package/chunks/{codex-models-Y457ND6Q.js → codex-models-FQPCWRPC.js} +7 -7
  63. package/chunks/{commands-PBDAOZKA.js → commands-I5L3VD2A.js} +1603 -6945
  64. package/chunks/dashboard-B2AEGCFM.js +76 -0
  65. package/chunks/{db-TPSI552V.js → db-P5EIKMLP.js} +3 -3
  66. package/chunks/{deep-review-DKED6EN5.js → deep-review-I7RD5QSS.js} +34 -33
  67. package/chunks/{disclose-LDNKAVRH.js → disclose-PFBWESVJ.js} +4 -2
  68. package/chunks/{dist-7Q5A6TQM.js → dist-3SWWY5FZ.js} +18 -2
  69. package/chunks/{dist-4LGRIBOC.js → dist-AJU25UXA.js} +99 -64
  70. package/chunks/{dist-RLPNLRZD.js → dist-VK2M4HNW.js} +33 -1
  71. package/chunks/eval-runner-XVRX3R2Y.js +31 -0
  72. package/chunks/{exploit-agent-RMFYNG7H.js → exploit-agent-A4RTIJ4J.js} +1 -1
  73. package/chunks/{exploit-autoclimb-2A2PQI4E.js → exploit-autoclimb-ABMMBC3M.js} +1 -1
  74. package/chunks/{exploit-climb-DEJ232QN.js → exploit-climb-BQ2SVU63.js} +2 -2
  75. package/chunks/{fix-JGBW7XUN.js → fix-4YCLHFDT.js} +7 -7
  76. package/chunks/{harness-CBOLMUHB.js → harness-DHWULEIZ.js} +3 -3
  77. package/chunks/{hunt-scan-MIRMABY4.js → hunt-scan-DXV5H6YN.js} +16 -16
  78. package/chunks/{kernel-primitive-NAPDMJC7.js → kernel-primitive-SF4NALVR.js} +2 -2
  79. package/chunks/{kernel-vm-runner-PR5OSDQ2.js → kernel-vm-runner-WEBEZEIC.js} +2 -2
  80. package/chunks/local-engine-XUG7XRKM.js +21 -0
  81. package/chunks/managed-operation-SQFMBWHG.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-ZNAELJGB.js} +14 -13
  84. package/chunks/orchestrate-YHFJXGID.js +63 -0
  85. package/chunks/{prepare-YVNENPNL.js → prepare-SODWQN6O.js} +5 -5
  86. package/chunks/provider-model-discovery-QGUGL3XW.js +277 -0
  87. package/chunks/remote-workflow-runtime-XNNGI2PG.js +12 -0
  88. package/chunks/{run-VH4OIDKF.js → run-5T4Z3Q2D.js} +902 -322
  89. package/chunks/{runtime-4TAJFVF7.js → runtime-HFFRUOPL.js} +2 -2
  90. package/chunks/{runtime-HWL6HG7A.js → runtime-MB4GEFBY.js} +7 -7
  91. package/chunks/{scan-stream-HJAZJONE.js → scan-stream-GXBJHCDF.js} +3 -2
  92. package/chunks/{scope-Q5PIX2IS.js → scope-M7L3CD6X.js} +2 -2
  93. package/chunks/service-plugins-BGS6QKSZ.js +64 -0
  94. package/chunks/{session-store-2FEIZGSV.js → session-store-K7I4GLNH.js} +2 -2
  95. package/chunks/{variant-candidates-TX5V6XOT.js → variant-candidates-2KSP5EHH.js} +7 -7
  96. package/chunks/{web-recon-prepass-6HOUGF7Q.js → web-recon-prepass-RAXXTEWH.js} +5 -5
  97. package/chunks/workflow-runtime-V26HIJO3.js +178 -0
  98. package/dashboard/assets/{abnfDiagram-VCTEODGH-BuvumFYR.js → abnfDiagram-VCTEODGH-CGCueOp5.js} +1 -1
  99. package/dashboard/assets/{arc-DZzWDuCG.js → arc-BjZaQcCc.js} +1 -1
  100. package/dashboard/assets/architecture-7GRP2DOG-hcbO-9zX.js +1 -0
  101. package/dashboard/assets/{architectureDiagram-5GKGNRK7-Bw5el_EL.js → architectureDiagram-5GKGNRK7-DReOXTSq.js} +1 -1
  102. package/dashboard/assets/{blockDiagram-I7D4REHJ-BjVLEApp.js → blockDiagram-I7D4REHJ-C-byT12_.js} +1 -1
  103. package/dashboard/assets/{c4Diagram-7LVT6UL2-B9nNzx2J.js → c4Diagram-7LVT6UL2-DoYjz-Uv.js} +1 -1
  104. package/dashboard/assets/channel-CUURBnpZ.js +1 -0
  105. package/dashboard/assets/{chunk-4HAMMTFA-y72Q95nW.js → chunk-4HAMMTFA-NBNp2zdt.js} +1 -1
  106. package/dashboard/assets/{chunk-75Z2AOVW-BOhrOGMO.js → chunk-75Z2AOVW-BHmkuP0B.js} +1 -1
  107. package/dashboard/assets/{chunk-DU6HZSFF-B0EhAaNb.js → chunk-DU6HZSFF-DgfLNaL2.js} +2 -2
  108. package/dashboard/assets/{chunk-F27PBJKO-BR-hiDvM.js → chunk-F27PBJKO-3wwNFUgZ.js} +1 -1
  109. package/dashboard/assets/{chunk-GMAD6QVW-H15vJYXg.js → chunk-GMAD6QVW-Btg7huZW.js} +1 -1
  110. package/dashboard/assets/{chunk-GVQU2GXP-BRndps0o.js → chunk-GVQU2GXP-ihCURK5O.js} +1 -1
  111. package/dashboard/assets/{chunk-IMKFNOWR-CIzC_OWx.js → chunk-IMKFNOWR-FsXj7slg.js} +1 -1
  112. package/dashboard/assets/{chunk-L3NEJ4N5-NR4P1Vko.js → chunk-L3NEJ4N5-DorFIxJY.js} +1 -1
  113. package/dashboard/assets/{chunk-OSK3NFVY-DtjTDf8S.js → chunk-OSK3NFVY-DKun_KfC.js} +1 -1
  114. package/dashboard/assets/{chunk-P2QGCYS3-CYT11Qjx.js → chunk-P2QGCYS3-XGgiU1Bz.js} +1 -1
  115. package/dashboard/assets/{chunk-POPQ4Y6H-Duj2Ygwu.js → chunk-POPQ4Y6H-BTXEnGhJ.js} +1 -1
  116. package/dashboard/assets/{chunk-PWAF6VOD-z4p5Tf_y.js → chunk-PWAF6VOD-DYZcGkTL.js} +1 -1
  117. package/dashboard/assets/{chunk-SHT3W25Y-DYeLYLS3.js → chunk-SHT3W25Y-C4WQfwf8.js} +1 -1
  118. package/dashboard/assets/{chunk-SVP7TREG-BKowxCVI.js → chunk-SVP7TREG-C4nCh0-1.js} +1 -1
  119. package/dashboard/assets/{chunk-TICWLB2K-GDAwEFlH.js → chunk-TICWLB2K-DSB-IiGc.js} +1 -1
  120. package/dashboard/assets/{chunk-XXDRQBXY-DRD79Mjx.js → chunk-XXDRQBXY-CS6fjUcj.js} +1 -1
  121. package/dashboard/assets/classDiagram-ZZMXUADV-CD1Buc26.js +1 -0
  122. package/dashboard/assets/classDiagram-v2-VYDZK3BY-CD1Buc26.js +1 -0
  123. package/dashboard/assets/{common-vnzd7UOF.js → common-BMdQBwfR.js} +1 -1
  124. package/dashboard/assets/{cose-bilkent-JH36ORCC-GqCLsRyf.js → cose-bilkent-JH36ORCC-CUjQHTML.js} +1 -1
  125. package/dashboard/assets/{cynefin-OW5HDTMX-CJN9YwWN.js → cynefin-OW5HDTMX-BC7zCtFq.js} +1 -1
  126. package/dashboard/assets/{cynefinDiagram-5FMLGOSQ-DVJHCYQY.js → cynefinDiagram-5FMLGOSQ-CgDOOY67.js} +1 -1
  127. package/dashboard/assets/{dagre-GXQ25YYZ-BMCrrJJR.js → dagre-GXQ25YYZ-Dqc8FS9x.js} +1 -1
  128. package/dashboard/assets/{diagram-S7CK7UJ4-CLYDdOEm.js → diagram-S7CK7UJ4-CrKqRXZb.js} +1 -1
  129. package/dashboard/assets/{diagram-UQ7AKVKN-CnPuAZK7.js → diagram-UQ7AKVKN-Cu6Es0-v.js} +1 -1
  130. package/dashboard/assets/{diagram-VSXAHHWV-Cr2I2DnG.js → diagram-VSXAHHWV-eK4d8FwS.js} +1 -1
  131. package/dashboard/assets/{diagram-VX7I27RA-_mGW1wpp.js → diagram-VX7I27RA-bFxeFKOc.js} +1 -1
  132. package/dashboard/assets/{diagram-Z3DM3KII-igybB0l9.js → diagram-Z3DM3KII-C0ClmnhC.js} +1 -1
  133. package/dashboard/assets/{dist-Bb7_-x5y.js → dist-BZh8Kb3O.js} +1 -1
  134. package/dashboard/assets/{ebnfDiagram-PWID7BFC-CVCICf2R.js → ebnfDiagram-PWID7BFC-CUqxFPzf.js} +1 -1
  135. package/dashboard/assets/{erDiagram-RLTQ6QDP-CRjnfgxj.js → erDiagram-RLTQ6QDP-CcYM7pLi.js} +1 -1
  136. package/dashboard/assets/eventmodeling-NTZA5JFV-D8ZNnPkV.js +1 -0
  137. package/dashboard/assets/flowDiagram-HODETNUW-pDb1AYm8.js +1 -0
  138. package/dashboard/assets/{ganttDiagram-EL5Y4UJY-DppD7sD7.js → ganttDiagram-EL5Y4UJY-UmZfbMyD.js} +1 -1
  139. package/dashboard/assets/{gitGraph-4MIJSDKK-Tw0vNnQc.js → gitGraph-4MIJSDKK-mvNUo0ZA.js} +1 -1
  140. package/dashboard/assets/{gitGraphDiagram-WWUBYQGX-Cpf96-z3.js → gitGraphDiagram-WWUBYQGX-CvzeCxVy.js} +1 -1
  141. package/dashboard/assets/{info-A6RAGUB7-DLyt9arx.js → info-A6RAGUB7-DChKqZMi.js} +1 -1
  142. package/dashboard/assets/{infoDiagram-27XIBGKW-B6_piSNS.js → infoDiagram-27XIBGKW-DjkpNtVW.js} +1 -1
  143. package/dashboard/assets/{ishikawaDiagram-5VMMS53U-DvMO0B0X.js → ishikawaDiagram-5VMMS53U-8FhjJaWT.js} +1 -1
  144. package/dashboard/assets/{journeyDiagram-3NMN7TZE-f7ZK98b6.js → journeyDiagram-3NMN7TZE-DyNJ755f.js} +1 -1
  145. package/dashboard/assets/{kanban-definition-UXKFOSKX-Dso0nAxL.js → kanban-definition-UXKFOSKX-_jCmtaY1.js} +1 -1
  146. package/dashboard/assets/katex-BdBmVSus.js +257 -0
  147. package/dashboard/assets/{line-VcKaFG0G.js → line-Bf0nxyWf.js} +1 -1
  148. package/dashboard/assets/{linear-D7YnpiWh.js → linear-Bl6JKbf4.js} +1 -1
  149. package/dashboard/assets/{mermaid-parser.core-DriL2hrV.js → mermaid-parser.core-Cc6sgCzs.js} +3 -3
  150. package/dashboard/assets/{mermaid.core-DJWYDh_P.js → mermaid.core-B4yCwiN-.js} +4 -4
  151. package/dashboard/assets/{mindmap-definition-YA3MSWOX-DZsoIeac.js → mindmap-definition-YA3MSWOX-D5DjWyXj.js} +1 -1
  152. package/dashboard/assets/operations-B7JAWOi6.js +130 -0
  153. package/dashboard/assets/operations-QjKT0Hwi.css +1 -0
  154. package/dashboard/assets/{packet-AYTQ26CC-BQBIXKxk.js → packet-AYTQ26CC-bQXLDhQC.js} +1 -1
  155. package/dashboard/assets/{pegDiagram-XKGWAZYB-B0-lslgW.js → pegDiagram-XKGWAZYB-Bf6a1vaf.js} +1 -1
  156. package/dashboard/assets/{pie-WAS4IAKB-DoY6dwQs.js → pie-WAS4IAKB-DfzoABIi.js} +1 -1
  157. package/dashboard/assets/{pieDiagram-E7YTZNPT-ElmdRjp5.js → pieDiagram-E7YTZNPT-D0L1qbch.js} +1 -1
  158. package/dashboard/assets/{quadrantDiagram-AXDQQJYC-Ci1h98Q2.js → quadrantDiagram-AXDQQJYC-CbFyy2Pe.js} +1 -1
  159. package/dashboard/assets/{radar-RG4KPBEZ-DHod2WgB.js → radar-RG4KPBEZ-CZ2pyeUT.js} +1 -1
  160. package/dashboard/assets/{railroad-74A4TZTK-90JxB4xV.js → railroad-74A4TZTK-CP4Jazfd.js} +1 -1
  161. package/dashboard/assets/railroad-abnf-HS5TGJTU-3MvEiHwD.js +1 -0
  162. package/dashboard/assets/railroad-ebnf-LZEXJU2U-BWto6cXE.js +1 -0
  163. package/dashboard/assets/railroad-peg-WCYAUIDC-DasEjbyf.js +1 -0
  164. package/dashboard/assets/{railroadDiagram-O6MQD6OU-k3190A6L.js → railroadDiagram-O6MQD6OU-t7Gp9g2R.js} +1 -1
  165. package/dashboard/assets/{requirementDiagram-BXWQKSXE-C3-eR7I5.js → requirementDiagram-BXWQKSXE-LYmqeBXi.js} +1 -1
  166. package/dashboard/assets/{sankeyDiagram-P5KCCOFB-Bc86pi8w.js → sankeyDiagram-P5KCCOFB-DnpfA_94.js} +1 -1
  167. package/dashboard/assets/{sequenceDiagram-WJ2MYXX4-Bv_MvEmz.js → sequenceDiagram-WJ2MYXX4-C8s3pTUE.js} +1 -1
  168. package/dashboard/assets/{src-D7Dqq5yP.js → src-CaNUT1AQ.js} +1 -1
  169. package/dashboard/assets/{stateDiagram-D77RDMKH-Bq_GVmeW.js → stateDiagram-D77RDMKH-BMzm6fK1.js} +1 -1
  170. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-B3REMjpY.js +1 -0
  171. package/dashboard/assets/{swimlanes-42K2YHIH-q0iK-e0P.js → swimlanes-42K2YHIH-uJE05Tt_.js} +1 -1
  172. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-CIaVMZEy.js +8 -0
  173. package/dashboard/assets/{timeline-definition-24CTP7MA-CNfF07hM.js → timeline-definition-24CTP7MA-BfLJMVeG.js} +1 -1
  174. package/dashboard/assets/{treeView-Q6P3EWNA-m629ePnS.js → treeView-Q6P3EWNA-ZOE2enu2.js} +1 -1
  175. package/dashboard/assets/{treemap-WGGIJYW6-D9Cb2ETv.js → treemap-WGGIJYW6-yIZoPBF5.js} +1 -1
  176. package/dashboard/assets/{vennDiagram-4TSXK5OY-v4dKF-FE.js → vennDiagram-4TSXK5OY-BYJRHEaL.js} +1 -1
  177. package/dashboard/assets/{wardley-WFR3VGLG-DkwH_nRe.js → wardley-WFR3VGLG-D5V-jLbB.js} +1 -1
  178. package/dashboard/assets/{wardleyDiagram-VM6X3IG4-3ImohVu4.js → wardleyDiagram-VM6X3IG4-DgPN4nSe.js} +1 -1
  179. package/dashboard/assets/{xychartDiagram-S5SC5T6Z-QJu3dm7K.js → xychartDiagram-S5SC5T6Z-BhkAMAOT.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
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  homeStateDir
6
- } from "./chunk-LTEE2JWK.js";
6
+ } from "./chunk-RZR2XXAK.js";
7
7
 
8
8
  // packages/core/dist/cve/artifact-scraper.js
9
9
  import { createHash } from "node:crypto";
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  severityRank
6
- } from "./chunk-LTEE2JWK.js";
6
+ } from "./chunk-RZR2XXAK.js";
7
7
 
8
8
  // packages/core/dist/triage/kernel-primitive.js
9
9
  function maxSeverity(a, b) {
@@ -67,7 +67,7 @@ import { fileURLToPath } from "node:url";
67
67
  import { dirname, join } from "node:path";
68
68
  function loadVersion() {
69
69
  if (true) {
70
- return "0.23.0";
70
+ return "0.24.0";
71
71
  }
72
72
  try {
73
73
  const here = dirname(fileURLToPath(import.meta.url));
@@ -189,6 +189,22 @@ var MANUAL_PRICING = {
189
189
  "qwen3.7-plus": { input: 0.5, output: 3, cachedInput: 0.05 },
190
190
  "qwen3.6-plus": { input: 0.5, output: 3, cachedInput: 0.05 },
191
191
  "qwen3.6-flash": { input: 0.1875, output: 1.125 },
192
+ // ClinePass reference quota rates, not incremental subscription charges.
193
+ // https://github.com/cline/cline/blob/main/docs/getting-started/clinepass.mdx
194
+ // checked 2026-10-05; DeepSeek uses peak rates; Qwen Plus <=256K only.
195
+ "cline-pass/glm-5.3": { input: 1.4, output: 4.4, cachedInput: 0.26 },
196
+ "cline-pass/glm-5.2": { input: 1.4, output: 4.4, cachedInput: 0.26 },
197
+ "cline-pass/kimi-k3": { input: 3, output: 15, cachedInput: 0.3 },
198
+ "cline-pass/kimi-k2.7-code": { input: 0.95, output: 4, cachedInput: 0.19 },
199
+ "cline-pass/kimi-k2.6": { input: 0.95, output: 4, cachedInput: 0.16 },
200
+ "cline-pass/deepseek-v4-pro": { input: 1.32, output: 3.96, cachedInput: 0.044 },
201
+ "cline-pass/deepseek-v4-flash": { input: 0.44, output: 1.32, cachedInput: 0.014 },
202
+ "cline-pass/mimo-v2.5": { input: 0.14, output: 0.28, cachedInput: 28e-4 },
203
+ "cline-pass/mimo-v2.5-pro": { input: 1.74, output: 3.48, cachedInput: 0.0145 },
204
+ "cline-pass/minimax-m3": { input: 0.3, output: 1.2, cachedInput: 0.06 },
205
+ "cline-pass/qwen3.8-max": { input: 2, output: 6, cachedInput: 0.25, cacheWrite: 2.5 },
206
+ "cline-pass/qwen3.7-max": { input: 2.5, output: 7.5, cachedInput: 0.5, cacheWrite: 3.125 },
207
+ "cline-pass/qwen3.7-plus": { input: 0.4, output: 1.6, cachedInput: 0.04, cacheWrite: 0.5 },
192
208
  // OpenCode Zen free tier (https://opencode.ai/docs/zen/) — zero-rate gateway
193
209
  // models; actual spend is $0 while the free period lasts.
194
210
  "muse-spark-1.3-contributor-free": { input: 0, output: 0 },
@@ -293,7 +309,9 @@ var MODEL_VENDOR_PREFIXES = [
293
309
  "openrouter/",
294
310
  "opencode/",
295
311
  "xai/",
296
- "x-ai/"
312
+ "x-ai/",
313
+ "cline/",
314
+ "cline-pass/"
297
315
  ];
298
316
  function normalizeModel(model) {
299
317
  let key = model;
@@ -313,7 +331,7 @@ function normalizeModel(model) {
313
331
  function getRates(model) {
314
332
  const key = model ? normalizeModel(model) : "";
315
333
  const aliasKey = azureDeploymentPriceKey(key);
316
- const rates = (model && Object.hasOwn(MODEL_PRICING, model) ? MODEL_PRICING[model] : void 0) ?? (model ? DISCOVERED_PRICING.get(model) : void 0) ?? (Object.hasOwn(MODEL_PRICING, key) ? MODEL_PRICING[key] : void 0) ?? (aliasKey ? MODEL_PRICING[aliasKey] : void 0) ?? DISCOVERED_PRICING.get(key);
334
+ const rates = (model && Object.hasOwn(MODEL_PRICING, model) ? MODEL_PRICING[model] : void 0) ?? (model ? DISCOVERED_PRICING.get(model) : void 0) ?? (model?.startsWith("cline/") && Object.hasOwn(MODEL_PRICING, model.slice(6)) ? MODEL_PRICING[model.slice(6)] : void 0) ?? (Object.hasOwn(MODEL_PRICING, key) ? MODEL_PRICING[key] : void 0) ?? (aliasKey ? MODEL_PRICING[aliasKey] : void 0) ?? DISCOVERED_PRICING.get(key);
317
335
  if (!rates) {
318
336
  if (model)
319
337
  console.warn(`[0] Unknown model for cost estimation: ${model}`);
@@ -336,6 +354,8 @@ function modelProvider(model) {
336
354
  if (!model)
337
355
  return "unknown";
338
356
  const lowered = model.toLowerCase();
357
+ if (lowered.startsWith("cline/") || lowered.startsWith("cline-pass/"))
358
+ return "cline";
339
359
  if (lowered.startsWith("openai/"))
340
360
  return "openai";
341
361
  if (lowered.startsWith("azure/"))
@@ -1820,7 +1840,8 @@ var BACKEND_CAPABILITIES = [
1820
1840
  "artifacts",
1821
1841
  "model-connections",
1822
1842
  "process-controls",
1823
- "operator-services"
1843
+ "operator-services",
1844
+ "learning"
1824
1845
  ];
1825
1846
  var BackendCapabilitySchema = external_exports.enum(BACKEND_CAPABILITIES);
1826
1847
  var BackendIdSchema = external_exports.string().min(1).max(128).regex(/^[A-Za-z0-9][A-Za-z0-9_.-]*$/).refine((value) => !["__proto__", "constructor", "prototype"].includes(value), "Reserved backend identifier.");
@@ -1918,9 +1939,14 @@ function backendCapabilitiesForApiPath(pathname) {
1918
1939
  return ["workflow-engine"];
1919
1940
  if (parts[0] === "control" && parts.length === 2 && ["recover-stale-workers", "prune-stopped-workers", "reset-database", "start-daemon", "stop-daemon", "launch-run"].includes(parts[1]))
1920
1941
  return ["process-controls"];
1921
- if (pathname === "/api/dashboard" || parts[0] === "scans" || parts[0] === "finding-family")
1942
+ if (pathname === "/api/dashboard" || parts[0] === "scans" || parts[0] === "finding-family" || pathname === "/api/findings/export")
1922
1943
  add("artifacts");
1923
- else if (parts[0] === "events" || pathname === "/api/v1/presentation/events")
1944
+ if (parts[0] === "findings" && parts.length === 3 && parts[2] === "impact-assessment")
1945
+ add("artifacts");
1946
+ if (parts[0] === "scans" && parts[2] === "resume") {
1947
+ add("workflows");
1948
+ add("sessions");
1949
+ } else if (parts[0] === "events" || pathname === "/api/v1/presentation/events")
1924
1950
  add("events");
1925
1951
  else if (parts[0] === "console") {
1926
1952
  const family = parts[1];
@@ -1935,7 +1961,9 @@ function backendCapabilitiesForApiPath(pathname) {
1935
1961
  add("model-connections");
1936
1962
  if (["files", "directories", "paths", "workspace", "project"].includes(operation ?? ""))
1937
1963
  add("workspaces");
1938
- } else if (["workflow-triggers", "workflow-schedules"].includes(family ?? ""))
1964
+ } else if (family === "learning")
1965
+ add("learning");
1966
+ else if (["workflow-triggers", "workflow-schedules"].includes(family ?? ""))
1939
1967
  add("schedules");
1940
1968
  else if (["workflows", "workflow-definitions", "workflow-executions", "workflow-tool-catalog", "fixes"].includes(family ?? "")) {
1941
1969
  add("workflows");
@@ -1958,6 +1986,205 @@ function backendCapabilitiesForApiPath(pathname) {
1958
1986
  return [...capabilities];
1959
1987
  }
1960
1988
 
1989
+ // packages/shared/dist/scan-resume.js
1990
+ var ScanResumeRequestSchema = external_exports.object({
1991
+ sessionId: external_exports.string().trim().min(1).max(160),
1992
+ approval: external_exports.literal("launch-authorized-run"),
1993
+ branchFromEntry: external_exports.number().int().nonnegative().max(Number.MAX_SAFE_INTEGER).optional(),
1994
+ timeCapMs: external_exports.number().int().positive().max(864e5).optional(),
1995
+ costCapUsd: external_exports.number().finite().positive().max(1e3).optional()
1996
+ }).strict();
1997
+ function resolvePersistedScanResume(scan) {
1998
+ if (!scan.id || scan.id.startsWith("console-"))
1999
+ throw new Error("Choose a persisted assessment scan, not a console conversation.");
2000
+ const depth = external_exports.enum(["quick", "default", "deep"]).parse(scan.depth);
2001
+ const storedMode = scan.mode ? external_exports.enum(["probe", "deep", "mcp", "web", "http_audit", "llm-ipi"]).parse(scan.mode) : void 0;
2002
+ const raw = external_exports.string().trim().min(1).max(4096).parse(scan.target);
2003
+ let parsed;
2004
+ let impliedMode;
2005
+ if (/^https?:\/\//.test(raw))
2006
+ parsed = { target: raw, targetType: "url", sourceDescription: "url" };
2007
+ else if (raw.startsWith("web:")) {
2008
+ parsed = { target: raw.slice(4), targetType: "web-app", sourceDescription: "web-app" };
2009
+ impliedMode = "web";
2010
+ } else if (raw.startsWith("mcp://")) {
2011
+ parsed = { target: raw, targetType: "url", sourceDescription: "mcp target" };
2012
+ impliedMode = "mcp";
2013
+ } else if (raw.startsWith("scan:"))
2014
+ parsed = { target: raw.slice(5), targetType: "url", sourceDescription: "url" };
2015
+ else if (raw.startsWith("repo:"))
2016
+ parsed = { target: raw.slice(5), targetType: "source-code", sourceDescription: "repository" };
2017
+ else {
2018
+ const match = /^(npm|pypi|cargo|oci):(.+)$/.exec(raw);
2019
+ if (!match)
2020
+ throw new Error(`Resume does not know how to route this persisted target yet: ${raw}`);
2021
+ const ecosystem = match[1];
2022
+ const spec = match[2];
2023
+ const at = spec.lastIndexOf("@");
2024
+ const target = at > 0 ? spec.slice(0, at) : spec;
2025
+ const packageVersion = at > 0 ? spec.slice(at + 1) : void 0;
2026
+ if (!target.trim() || packageVersion === "")
2027
+ throw new Error("Persisted package identity is incomplete.");
2028
+ const types = { npm: "npm-package", pypi: "pypi-package", cargo: "cargo-package", oci: "oci-image" };
2029
+ parsed = { target, targetType: types[ecosystem], ...packageVersion ? { packageVersion } : {}, sourceDescription: `${ecosystem} package` };
2030
+ }
2031
+ if (!parsed.target.trim())
2032
+ throw new Error("Persisted scan target is empty.");
2033
+ const targetType = storedMode === "web" ? "web-app" : parsed.targetType;
2034
+ return { ...parsed, targetType, depth, mode: impliedMode ?? storedMode ?? (targetType === "web-app" ? "web" : "deep") };
2035
+ }
2036
+
2037
+ // packages/shared/dist/engine-operations.js
2038
+ var ENGINE_OPERATION_DEFINITIONS = [
2039
+ { id: "get_capabilities", capability: "operator-services", effect: "read" },
2040
+ { id: "start_assessment", capability: "workflows", effect: "execute" },
2041
+ { id: "attach_session", capability: "sessions", effect: "read" },
2042
+ { id: "get_session_events", capability: "events", effect: "read" },
2043
+ { id: "list_templates", capability: "workflows", effect: "read" },
2044
+ { id: "get_template", capability: "workflows", effect: "read" },
2045
+ { id: "list_workflows", capability: "workflows", effect: "read" },
2046
+ { id: "get_workflow", capability: "workflows", effect: "read" },
2047
+ { id: "save_workflow", capability: "workflows", effect: "write" },
2048
+ { id: "start_run", capability: "workflows", effect: "execute" },
2049
+ { id: "list_runs", capability: "workflows", effect: "read" },
2050
+ { id: "get_run", capability: "workflows", effect: "read" },
2051
+ { id: "get_run_results", capability: "workflows", effect: "read" },
2052
+ { id: "cancel_run", capability: "workflows", effect: "cancel" },
2053
+ { id: "list_sessions", capability: "sessions", effect: "read" },
2054
+ { id: "create_session", capability: "sessions", effect: "write" },
2055
+ { id: "get_session", capability: "sessions", effect: "read" },
2056
+ { id: "send_message", capability: "sessions", effect: "execute" },
2057
+ { id: "continue_session", capability: "sessions", effect: "execute" },
2058
+ { id: "cancel_session", capability: "sessions", effect: "cancel" },
2059
+ { id: "resolve_decision", capability: "approvals", effect: "approve" },
2060
+ { id: "list_saved_sessions", capability: "sessions", effect: "read" },
2061
+ { id: "resume_session", capability: "sessions", effect: "execute" },
2062
+ { id: "resume_scan", capability: "scan-resume", effect: "execute" }
2063
+ ];
2064
+ var ENGINE_REPORT_FORMATS = ["json", "md", "html", "sarif", "pdf"];
2065
+ var operationIds = ENGINE_OPERATION_DEFINITIONS.map((operation) => operation.id);
2066
+ var OperationIdSchema = external_exports.enum(operationIds);
2067
+ var unique = (values) => new Set(values).size === values.length;
2068
+ var EngineCapabilityManifestSchema = external_exports.object({
2069
+ schemaVersion: external_exports.literal(1),
2070
+ operations: external_exports.array(OperationIdSchema).refine(unique, "Engine operations must be unique"),
2071
+ reportExport: external_exports.object({ formats: external_exports.array(external_exports.enum(ENGINE_REPORT_FORMATS)).refine(unique, "Report formats must be unique") }).strict(),
2072
+ resume: external_exports.object({ session: external_exports.boolean(), scan: external_exports.boolean(), workflow: external_exports.literal(false) }).strict()
2073
+ }).strict().superRefine((manifest, context) => {
2074
+ if (manifest.resume.session !== manifest.operations.includes("resume_session") || manifest.resume.scan !== manifest.operations.includes("resume_scan")) {
2075
+ context.addIssue({ code: external_exports.ZodIssueCode.custom, message: "Resume support must match registered operations" });
2076
+ }
2077
+ });
2078
+ function createEngineCapabilityManifest(options) {
2079
+ return EngineCapabilityManifestSchema.parse({
2080
+ schemaVersion: 1,
2081
+ operations: [...options.operations],
2082
+ reportExport: { formats: [...options.reportFormats ?? []] },
2083
+ resume: { session: options.operations.includes("resume_session"), scan: options.operations.includes("resume_scan"), workflow: false }
2084
+ });
2085
+ }
2086
+ function requireEngineOperation(manifest, operation) {
2087
+ const valid = EngineCapabilityManifestSchema.parse(manifest);
2088
+ if (!valid.operations.includes(operation))
2089
+ throw new Error(`Engine does not support operation ${operation}.`);
2090
+ }
2091
+ var ENGINE_COMMAND_COVERAGE = [
2092
+ { id: "assessment", classification: "workflow", cliCommands: ["scan", "review", "audit", "secure"], workflowSteps: ["audit"], templateIds: ["repository-review", "dependency-review", "api-security", "web-configuration", "scoped-penetration-test", "package-behavior", "contract-review", "native-code-review"], chatTools: [], limits: "Target-specific assessment options and admission still apply.", source: "packages/core/src/assessment.ts" },
2093
+ { id: "fix", classification: "workflow", cliCommands: ["fix"], workflowSteps: ["fix"], templateIds: ["fix-candidate"], chatTools: ["generate_fix"], limits: "Chat generation is distinct from workflow candidate validation; applying requires exact live candidate proof and host/request approval.", source: "packages/cli/src/finding-workflow-executors.ts" },
2094
+ { id: "verification", classification: "workflow", cliCommands: ["verify", "replay"], workflowSteps: ["verify"], templateIds: ["finding-verification"], chatTools: ["verify_finding"], limits: "Managed verification uses supported replay runners; CLI kernel verification is not a portable workflow operation.", source: "packages/cli/src/finding-workflow-executors.ts" },
2095
+ { id: "research", classification: "workflow", cliCommands: ["research pipeline", "research mobile", "research linux-matrix"], workflowSteps: ["research"], templateIds: ["security-research"], chatTools: [], limits: "Managed modes pipeline/mobile/linux-matrix require authorized local workspace; pipeline is source-only. linux-matrix imports external evidence and does not execute boots.", source: "packages/cli/src/workflow-research-executors.ts" },
2096
+ { id: "deep-review", classification: "workflow", cliCommands: ["deep-review"], workflowSteps: ["deep-review"], templateIds: ["deep-source-review"], chatTools: [], limits: "Authorized local source workspace and provider prerequisites apply.", source: "packages/cli/src/workflow-research-executors.ts" },
2097
+ { id: "offensive-tools", classification: "chat-tool", cliCommands: ["hunt", "assumption-hunt", "protocol-check", "specdrift", "memsafety", "npm-discovery", "kernel", "cve"], workflowSteps: [], templateIds: [], chatTools: ["variant_hunt", "assumption_hunt", "protocol_conformance", "spec_drift", "safety_eval", "memsafety_fuzz", "npm_dynamic_discovery", "weaponize_kernel", "cve_adapt"], limits: "Tool availability is scope/feature/prerequisite gated. CLI engines and tools have different contracts; no portable specialist workflow executor is registered by this manifest.", source: "packages/core/src/agent/tools/offensive-engines.ts" },
2098
+ { id: "kernel-research", classification: "cli-specialist", cliCommands: ["research linux"], workflowSteps: [], templateIds: [], chatTools: [], limits: "Managed kernel research rejects execution until the VM/build runner supports workflow cancellation and deadlines.", source: "packages/cli/src/workflow-research-executors.ts" },
2099
+ { id: "specialist-cli", classification: "cli-specialist", cliCommands: ["binary", "exploit", "recency-hunt", "lens-synth", "xnu-fuzz", "disclose", "eval", "bench", "ingest"], workflowSteps: [], templateIds: [], chatTools: [], limits: "These CLI contracts are not exposed as portable workflow steps here; model-driven source review is not equivalent to their native proof engines.", source: "packages/cli/src/index.ts" },
2100
+ { id: "maintenance", classification: "cli-maintenance", cliCommands: ["doctor", "db", "upgrade", "config", "plugin", "theme", "login", "logout"], workflowSteps: [], templateIds: [], chatTools: [], limits: "Host maintenance and credential changes are not workflow execution or model-tool grants.", source: "packages/cli/src/index.ts" }
2101
+ ];
2102
+
2103
+ // packages/shared/dist/finding-priority.js
2104
+ var ImpactAssessmentSchema = external_exports.object({
2105
+ reachability_tier: external_exports.enum(["remote-unauth", "remote-auth", "proximity-rf", "local-unpriv", "local-priv", "needs-hardware", "needs-host-migration", "unknown"]),
2106
+ blast_radius: external_exports.string().trim().min(1).max(4096),
2107
+ weaponizability: external_exports.enum(["dos-crash", "info-leak", "integrity-tampering", "lpe-to-root", "rce", "unknown"]),
2108
+ business_impact: external_exports.enum(["headline", "notable", "modest", "noise", "unassessed"]),
2109
+ rationale: external_exports.string().trim().min(1).max(8192),
2110
+ assessment_source: external_exports.enum(["model", "provided", "heuristic"]).optional()
2111
+ }).strip();
2112
+ var UNKNOWN_PRIORITY = {
2113
+ rank: 1.5,
2114
+ label: "Not assessed",
2115
+ assessed: false,
2116
+ rationale: "Business impact has not been assessed. Establish the affected services, customers, data, and operational consequences."
2117
+ };
2118
+ var PRIORITIES = {
2119
+ headline: { rank: 3, label: "Urgent" },
2120
+ notable: { rank: 2, label: "High" },
2121
+ modest: { rank: 1, label: "Moderate" },
2122
+ noise: { rank: 0, label: "Low" }
2123
+ };
2124
+ function isHeuristicImpactAssessment(assessment) {
2125
+ return assessment.assessment_source === "heuristic" || /^deterministic fallback derived from severity\s*\+\s*category/i.test(assessment.rationale) || /^heuristic baseline for a /i.test(assessment.blast_radius);
2126
+ }
2127
+ function getFindingPriority(finding) {
2128
+ const parsed = ImpactAssessmentSchema.safeParse(finding.impactAssessment);
2129
+ if (!parsed.success || parsed.data.business_impact === "unassessed" || isHeuristicImpactAssessment(parsed.data)) {
2130
+ return { ...UNKNOWN_PRIORITY };
2131
+ }
2132
+ const priority = PRIORITIES[parsed.data.business_impact];
2133
+ return { ...priority, assessed: true, rationale: parsed.data.rationale };
2134
+ }
2135
+ var TECHNICAL_SEVERITY = { critical: 4, high: 3, medium: 2, low: 1, info: 0 };
2136
+ function technicalCvss(value) {
2137
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 && value <= 10 ? value : -1;
2138
+ }
2139
+ function compareFindingsByBusinessPriority(a, b) {
2140
+ return getFindingPriority(b).rank - getFindingPriority(a).rank || (TECHNICAL_SEVERITY[b.severity?.toLowerCase() ?? ""] ?? -1) - (TECHNICAL_SEVERITY[a.severity?.toLowerCase() ?? ""] ?? -1) || technicalCvss(b.cvssScore) - technicalCvss(a.cvssScore);
2141
+ }
2142
+
2143
+ // packages/shared/dist/access-milestone.js
2144
+ var record = (value) => value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
2145
+ var successfulObservation = (value) => {
2146
+ const item = record(value);
2147
+ return item && typeof item.status === "number" && Number.isInteger(item.status) && item.status >= 200 && item.status < 300 && item.truncated === false && item.field_present === true && (typeof item.json_pointer_value === "string" || item.json_pointer_value === null) ? item : void 0;
2148
+ };
2149
+ function accessMilestoneFromArtifact(eventType, value, scopeId, evidenceEventId) {
2150
+ const item = record(value);
2151
+ if (eventType !== "tool_artifact" || !item || item.tool !== "access_control_workflow" || item.workflow !== "access_control_workflow" || item.verdict !== "confirmed" || typeof item.owner_identity !== "string" || !item.owner_identity || typeof item.actor_identity !== "string" || !item.actor_identity || item.owner_identity === item.actor_identity || typeof item.expected_state !== "string" || item.expected_state.length > 500 || typeof item.observation_url !== "string" || item.observation_url.length > 8192 || !scopeId || scopeId.length > 512)
2152
+ return null;
2153
+ const before = successfulObservation(item.observation_before);
2154
+ const after = successfulObservation(item.observation_after);
2155
+ if (!before || !after || before.json_pointer_value === item.expected_state || after.json_pointer_value !== item.expected_state || !Array.isArray(item.steps) || item.steps.length === 0 || item.steps.length > 10)
2156
+ return null;
2157
+ if (item.steps.some((value2, index) => {
2158
+ const step = record(value2);
2159
+ return !step || step.step_index !== index || typeof step.url !== "string" || !["GET", "POST", "PUT", "DELETE", "PATCH"].includes(String(step.method)) || typeof step.status !== "number" || !Number.isInteger(step.status) || step.status < 100 || step.status > 599 || step.error !== void 0;
2160
+ }))
2161
+ return null;
2162
+ let asset;
2163
+ try {
2164
+ const url = new URL(item.observation_url);
2165
+ if (!["https:", "http:"].includes(url.protocol) || url.username || url.password)
2166
+ return null;
2167
+ asset = url.origin;
2168
+ } catch {
2169
+ return null;
2170
+ }
2171
+ return {
2172
+ key: JSON.stringify([scopeId, "cross-identity-write", item.observation_url]),
2173
+ asset,
2174
+ status: "conditional",
2175
+ accessClass: "cross-identity-write",
2176
+ headline: "State change confirmed across request contexts",
2177
+ summary: "The observing context saw the declared marker after requests using different configured authentication headers. Authorization impact requires validation. Cleanup was not verified.",
2178
+ cleanup: "unknown",
2179
+ ...evidenceEventId && evidenceEventId.length <= 512 ? { evidenceEventId } : {}
2180
+ };
2181
+ }
2182
+ function appendAccessMilestone(current, next, limit = 80) {
2183
+ if (current.some((item) => item.milestone.key === next.milestone.key))
2184
+ return [...current];
2185
+ return [...current, next].slice(-Math.max(1, Math.min(80, limit)));
2186
+ }
2187
+
1961
2188
  export {
1962
2189
  validateScanPlan,
1963
2190
  defaultRoleFor,
@@ -1992,6 +2219,8 @@ export {
1992
2219
  VerificationAssertionSchema,
1993
2220
  EvidenceArtifactSchema,
1994
2221
  VerificationResultSchema,
2222
+ pocStepActionSchema,
2223
+ pocStepExpectSchema,
1995
2224
  pocStepSchema,
1996
2225
  pocStepArraySchema,
1997
2226
  findingSchema,
@@ -2076,5 +2305,19 @@ export {
2076
2305
  BackendEventCursorSchema,
2077
2306
  BackendApprovalRefSchema,
2078
2307
  assertBackendReference,
2079
- backendCapabilitiesForApiPath
2308
+ backendCapabilitiesForApiPath,
2309
+ ScanResumeRequestSchema,
2310
+ resolvePersistedScanResume,
2311
+ ENGINE_OPERATION_DEFINITIONS,
2312
+ ENGINE_REPORT_FORMATS,
2313
+ EngineCapabilityManifestSchema,
2314
+ createEngineCapabilityManifest,
2315
+ requireEngineOperation,
2316
+ ENGINE_COMMAND_COVERAGE,
2317
+ ImpactAssessmentSchema,
2318
+ isHeuristicImpactAssessment,
2319
+ getFindingPriority,
2320
+ compareFindingsByBusinessPriority,
2321
+ accessMilestoneFromArtifact,
2322
+ appendAccessMilestone
2080
2323
  };
@@ -0,0 +1,289 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire as __0CreateRequire } from "node:module";
3
+ const require = __0CreateRequire(import.meta.url);
4
+ import {
5
+ spinnerGlyph
6
+ } from "./chunk-GNR3APR6.js";
7
+ import {
8
+ loadLayeredSettings
9
+ } from "./chunk-QEA2VHBD.js";
10
+ import {
11
+ homeStateDir
12
+ } from "./chunk-RZR2XXAK.js";
13
+
14
+ // packages/cli/src/utils/update-check.ts
15
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
16
+ import { join } from "node:path";
17
+ import { spawn } from "node:child_process";
18
+
19
+ // packages/cli/src/utils/terminal-progress.ts
20
+ function terminalProgress(label, output = process.stderr, reduceMotion = false) {
21
+ const animated = Boolean(output.isTTY && process.env["TERM"] !== "dumb");
22
+ const started = Date.now();
23
+ let frame = 0;
24
+ let stage = label;
25
+ let finished = false;
26
+ const clean = (text) => text.replace(/\x1b\[[0-?]*[ -/]*[@-~]/g, "").replace(/[\x00-\x1f\x7f-\x9f]/g, " ").trim();
27
+ const paint = () => {
28
+ const elapsed = Math.floor((Date.now() - started) / 1e3);
29
+ const line = `${spinnerGlyph(frame++, { reduceMotion })} ${stage} \xB7 ${elapsed}s`;
30
+ output.write(`\r\x1B[2K${Array.from(line).slice(0, Math.max(12, (output.columns ?? 80) - 1)).join("")}`);
31
+ };
32
+ if (animated) paint();
33
+ else output.write(`${clean(label)}\u2026
34
+ `);
35
+ const timer = animated && !reduceMotion ? setInterval(paint, 120) : void 0;
36
+ timer?.unref();
37
+ return {
38
+ update(text) {
39
+ if (finished) return;
40
+ stage = clean(text) || label;
41
+ if (animated) paint();
42
+ },
43
+ finish(text) {
44
+ if (finished) return;
45
+ finished = true;
46
+ clearInterval(timer);
47
+ if (animated) output.write("\r\x1B[2K");
48
+ if (text) output.write(`${clean(text)}
49
+ `);
50
+ }
51
+ };
52
+ }
53
+
54
+ // packages/cli/src/utils/update-check.ts
55
+ var REPO = "0sec-labs/0";
56
+ var INSTALL_URL = `https://raw.githubusercontent.com/${REPO}/main/install.sh`;
57
+ var CHECK_INTERVAL_MS = 24 * 60 * 60 * 1e3;
58
+ var FETCH_TIMEOUT_MS = 4e3;
59
+ var INSTALL_TIMEOUT_MS = 12e4;
60
+ function parseVersion(value) {
61
+ if (value.length > 128) return null;
62
+ const match = /^v?(0|[1-9]\d*)(?:\.(0|[1-9]\d*)(?:\.(0|[1-9]\d*))?)?(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?(?:\+[0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*)?$/.exec(value);
63
+ if (!match) return null;
64
+ const parts = [Number(match[1]), Number(match[2] ?? 0), Number(match[3] ?? 0)];
65
+ if (!parts.every(Number.isSafeInteger)) return null;
66
+ const prerelease = match[4]?.split(".") ?? [];
67
+ if (prerelease.some((part) => /^\d+$/.test(part) && part.length > 1 && part.startsWith("0"))) return null;
68
+ return { parts, prerelease, complete: match[3] !== void 0 };
69
+ }
70
+ function compareVersions(a, b) {
71
+ const left = parseVersion(a);
72
+ const right = parseVersion(b);
73
+ if (!left || !right) return 0;
74
+ for (let i = 0; i < 3; i++) {
75
+ if (left.parts[i] !== right.parts[i]) return left.parts[i] < right.parts[i] ? -1 : 1;
76
+ }
77
+ if (!left.prerelease.length || !right.prerelease.length) {
78
+ return left.prerelease.length ? -1 : right.prerelease.length ? 1 : 0;
79
+ }
80
+ for (let i = 0; i < Math.max(left.prerelease.length, right.prerelease.length); i++) {
81
+ const l = left.prerelease[i];
82
+ const r = right.prerelease[i];
83
+ if (l === void 0) return -1;
84
+ if (r === void 0) return 1;
85
+ if (l === r) continue;
86
+ const ln = /^\d+$/.test(l);
87
+ const rn = /^\d+$/.test(r);
88
+ if (ln !== rn) return ln ? -1 : 1;
89
+ if (ln && l.length !== r.length) return l.length < r.length ? -1 : 1;
90
+ return l < r ? -1 : 1;
91
+ }
92
+ return 0;
93
+ }
94
+ function disabled(value) {
95
+ return value !== void 0 && value !== "" && value !== "0" && value.toLowerCase() !== "false";
96
+ }
97
+ function shouldRunCheck(env = process.env, isTty = Boolean(process.stdout.isTTY), policy) {
98
+ if (!isTty || disabled(env.CI) || disabled(env["ZERO_OFFLINE"]) || disabled(env["ZERO_NO_UPDATE_CHECK"])) return false;
99
+ if (policy !== void 0) return policy !== "off";
100
+ return env["ZERO_UPDATE_CHECK"] === "1";
101
+ }
102
+ function recent(timestamp, now) {
103
+ const age = now - Date.parse(timestamp ?? "");
104
+ return Number.isFinite(age) && age >= 0 && age < CHECK_INTERVAL_MS;
105
+ }
106
+ function readCache() {
107
+ try {
108
+ const raw = JSON.parse(readFileSync(join(homeStateDir(), "last-update-check"), "utf8"));
109
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) return null;
110
+ const value = raw;
111
+ if (typeof value.lastCheckedAt !== "string") return null;
112
+ return {
113
+ lastCheckedAt: value.lastCheckedAt,
114
+ latestVersion: typeof value.latestVersion === "string" ? value.latestVersion : void 0,
115
+ lastInstallAttemptAt: typeof value.lastInstallAttemptAt === "string" ? value.lastInstallAttemptAt : void 0,
116
+ lastInstallTag: typeof value.lastInstallTag === "string" ? value.lastInstallTag : void 0
117
+ };
118
+ } catch {
119
+ return null;
120
+ }
121
+ }
122
+ function writeCache(cache) {
123
+ try {
124
+ mkdirSync(homeStateDir(), { recursive: true });
125
+ writeFileSync(join(homeStateDir(), "last-update-check"), JSON.stringify(cache));
126
+ } catch {
127
+ }
128
+ }
129
+ async function fetchLatestTag() {
130
+ const controller = new AbortController();
131
+ const timer = setTimeout(() => controller.abort(), FETCH_TIMEOUT_MS);
132
+ try {
133
+ const response = await fetch(`https://api.github.com/repos/${REPO}/releases/latest`, {
134
+ headers: { Accept: "application/vnd.github+json", "User-Agent": "@0/cli/update-check" },
135
+ signal: controller.signal
136
+ });
137
+ if (!response.ok) return null;
138
+ const data = await response.json();
139
+ if (typeof data.tag_name !== "string" || data.prerelease === true || data.draft === true) return null;
140
+ const version = parseVersion(data.tag_name);
141
+ return version?.complete && version.prerelease.length === 0 ? data.tag_name : null;
142
+ } catch {
143
+ return null;
144
+ } finally {
145
+ clearTimeout(timer);
146
+ }
147
+ }
148
+ var installInProgress = false;
149
+ var attemptedAutomaticTags = /* @__PURE__ */ new Set();
150
+ async function performAutoUpdate(options = {}) {
151
+ if (process.platform === "win32") return { success: false, installed: false, error: "Automatic installation is unavailable on Windows; download a release from https://github.com/0sec-labs/0/releases/latest." };
152
+ if (disabled(process.env["ZERO_OFFLINE"]) || disabled(process.env["ZERO_NO_UPDATE_CHECK"])) {
153
+ return { success: false, installed: false, error: "Updates are disabled by the current offline/update policy." };
154
+ }
155
+ if (installInProgress) return { success: false, installed: false, error: "An update is already in progress." };
156
+ installInProgress = true;
157
+ try {
158
+ const tag = options.version ?? await fetchLatestTag();
159
+ const version = tag ? parseVersion(tag) : null;
160
+ if (!tag || !version?.complete) return { success: false, installed: false, error: "Could not resolve a valid release tag." };
161
+ const normalizedTag = tag.startsWith("v") ? tag : `v${tag}`;
162
+ const env = { ...process.env, RELEASE_BASE_URL: `https://github.com/${REPO}/releases/download/${normalizedTag}` };
163
+ const installDir = options.installDir ?? process.env["ZERO_INSTALL_DIR"];
164
+ if (installDir !== void 0) env.INSTALL_DIR = installDir;
165
+ const timeoutMs = Number.isFinite(options.timeoutMs) && options.timeoutMs > 0 ? Math.min(options.timeoutMs, INSTALL_TIMEOUT_MS) : INSTALL_TIMEOUT_MS;
166
+ return await new Promise((resolve) => {
167
+ const interactive = Boolean(process.stderr.isTTY && process.env["TERM"] !== "dumb");
168
+ const progress = interactive ? terminalProgress(`Updating 0 to ${normalizedTag}`, process.stderr, loadLayeredSettings().settings.reduceMotion) : void 0;
169
+ const child = spawn("bash", ["-o", "pipefail", "-c", `curl -fsSL --connect-timeout 10 --max-time 30 "${INSTALL_URL}" | bash`], {
170
+ stdio: interactive ? ["inherit", "pipe", "pipe"] : "inherit",
171
+ env,
172
+ detached: true
173
+ });
174
+ let details = "";
175
+ let pendingLine = "";
176
+ const report = (chunk) => {
177
+ const text = chunk.toString("utf8");
178
+ details = (details + text).slice(-16384);
179
+ const lines = (pendingLine + text).split(/[\r\n]/);
180
+ pendingLine = lines.pop().slice(-2048);
181
+ const stage = lines.filter((line) => line.trim()).at(-1);
182
+ if (stage) progress?.update(stage);
183
+ };
184
+ child.stdout?.on("data", report);
185
+ child.stderr?.on("data", report);
186
+ let timedOut = false;
187
+ let settled = false;
188
+ let parentSignal;
189
+ let killTimer;
190
+ const finish = (result) => {
191
+ if (settled) return;
192
+ settled = true;
193
+ progress?.finish(result.success ? `\u2713 Installed ${normalizedTag}` : result.signal ? "Update cancelled." : "Update failed.");
194
+ if (interactive && details && (!result.success || /0 installer:|Could not update/.test(details))) process.stderr.write(details.endsWith("\n") ? details : `${details}
195
+ `);
196
+ clearTimeout(timer);
197
+ clearTimeout(killTimer);
198
+ process.removeListener("SIGINT", onInterrupt);
199
+ process.removeListener("SIGTERM", onTerminate);
200
+ resolve(result);
201
+ };
202
+ const terminate = (signal) => {
203
+ if (child.pid === void 0) return;
204
+ try {
205
+ process.kill(-child.pid, signal);
206
+ } catch {
207
+ }
208
+ };
209
+ const interrupt = (signal) => {
210
+ if (parentSignal || settled) return;
211
+ parentSignal = signal;
212
+ clearTimeout(timer);
213
+ terminate(signal);
214
+ clearTimeout(killTimer);
215
+ killTimer = setTimeout(() => {
216
+ terminate("SIGKILL");
217
+ finish({ success: false, installed: false, signal, error: `Installer stopped by ${signal}.` });
218
+ }, 1e3);
219
+ };
220
+ const onInterrupt = () => interrupt("SIGINT");
221
+ const onTerminate = () => interrupt("SIGTERM");
222
+ const timer = setTimeout(() => {
223
+ timedOut = true;
224
+ terminate("SIGTERM");
225
+ killTimer = setTimeout(() => {
226
+ terminate("SIGKILL");
227
+ finish({ success: false, installed: false, exitCode: 1, error: `Installer exceeded its ${timeoutMs}ms deadline.` });
228
+ }, 1e3);
229
+ }, timeoutMs);
230
+ process.on("SIGINT", onInterrupt);
231
+ process.on("SIGTERM", onTerminate);
232
+ child.once("error", (error) => finish({ success: false, installed: false, exitCode: 1, error: `Could not start the installer: ${error.message}. Ensure bash and curl are available.` }));
233
+ child.once("close", (code, signal) => {
234
+ if (timedOut || parentSignal) return;
235
+ if (signal) finish({ success: false, installed: false, signal, error: `Installer stopped by ${signal}.` });
236
+ else if (code === 0) finish({ success: true, installed: true, installedVersion: normalizedTag, exitCode: 0 });
237
+ else finish({ success: false, installed: false, exitCode: code ?? 1, error: `Installer exited with code ${code ?? 1}.` });
238
+ });
239
+ });
240
+ } catch (error) {
241
+ return { success: false, installed: false, exitCode: 1, error: error instanceof Error ? error.message : "Update failed." };
242
+ } finally {
243
+ installInProgress = false;
244
+ }
245
+ }
246
+ async function maybeNotifyUpdate(currentVersion, options = {}) {
247
+ const policy = options.policy;
248
+ if (!shouldRunCheck(process.env, Boolean(process.stdout.isTTY), policy) || !parseVersion(currentVersion)) return;
249
+ const now = Date.now();
250
+ let cache = readCache();
251
+ if (!cache || !recent(cache.lastCheckedAt, now)) {
252
+ const tag2 = await fetchLatestTag();
253
+ cache = { ...cache, lastCheckedAt: new Date(now).toISOString(), latestVersion: tag2 ?? cache?.latestVersion };
254
+ writeCache(cache);
255
+ }
256
+ const tag = cache.latestVersion;
257
+ const candidate = tag ? parseVersion(tag) : null;
258
+ if (!tag || !candidate?.complete || candidate.prerelease.length > 0 || compareVersions(tag, currentVersion) <= 0) return;
259
+ if (policy !== "automatic") {
260
+ process.stderr.write(`[0] Update available: ${currentVersion} \u2192 ${tag}. Run 0 upgrade.
261
+ `);
262
+ return;
263
+ }
264
+ if (attemptedAutomaticTags.has(tag) || cache.lastInstallTag === tag && recent(cache.lastInstallAttemptAt, now)) return;
265
+ attemptedAutomaticTags.add(tag);
266
+ writeCache({ ...cache, lastInstallTag: tag, lastInstallAttemptAt: new Date(now).toISOString() });
267
+ if (!process.stderr.isTTY || process.env["TERM"] === "dumb") process.stderr.write(`[0] Updating to ${tag} before starting 0\u2026
268
+ `);
269
+ const result = await performAutoUpdate({ version: tag });
270
+ if (result.signal) {
271
+ process.kill(process.pid, result.signal);
272
+ return;
273
+ }
274
+ process.stderr.write(result.success ? `[0] Installed ${result.installedVersion}. This process is still ${currentVersion}; restart to use the update.
275
+ ` : `[0] Update not installed: ${result.error ?? "unknown error"} Continuing with ${currentVersion}.
276
+ `);
277
+ }
278
+ async function runStartupUpdate(version) {
279
+ if (!shouldRunCheck(process.env, Boolean(process.stdout.isTTY), "notify")) return;
280
+ const { settings, sources } = loadLayeredSettings();
281
+ const policy = sources.updatePolicy === "global" ? settings.updatePolicy : void 0;
282
+ if (policy === "automatic") await maybeNotifyUpdate(version, { policy });
283
+ else if (policy !== "off") void maybeNotifyUpdate(version, { policy });
284
+ }
285
+
286
+ export {
287
+ performAutoUpdate,
288
+ runStartupUpdate
289
+ };
@@ -3,10 +3,10 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  jitterFor
6
- } from "./chunk-JEYIWMGL.js";
6
+ } from "./chunk-CIMN2AO6.js";
7
7
  import {
8
8
  scanExecutionSignal
9
- } from "./chunk-CP6HANBE.js";
9
+ } from "./chunk-YYOQADBB.js";
10
10
 
11
11
  // packages/core/dist/scope/rate-limit.js
12
12
  var TokenBucket = class {