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
@@ -7,13 +7,13 @@ import {
7
7
  createWorkbenchProviderBroker,
8
8
  runSmolvmWorkbench,
9
9
  snapshotSmolvmWorkspace
10
- } from "./chunk-4HGGNBKK.js";
10
+ } from "./chunk-ZM6ANQZJ.js";
11
11
  import {
12
12
  getReleaseChannel
13
- } from "./chunk-TPUJZ74W.js";
13
+ } from "./chunk-ILRMLA6J.js";
14
14
  import {
15
15
  TOOL_DEFINITIONS
16
- } from "./chunk-EH2WTNY7.js";
16
+ } from "./chunk-5WAHHZBF.js";
17
17
  import {
18
18
  ANALYTICS_LEVEL_ENV,
19
19
  getSmolvmWorkbenchStatus,
@@ -21,7 +21,7 @@ import {
21
21
  levelAtLeast,
22
22
  loadCloudCredentials,
23
23
  resolveAnalyticsLevel
24
- } from "./chunk-NI6QYQSK.js";
24
+ } from "./chunk-PVJUPIQG.js";
25
25
  import {
26
26
  ScopePolicy,
27
27
  aggregateCapabilities,
@@ -34,7 +34,7 @@ import {
34
34
  readInstalledPlugin,
35
35
  reconcile,
36
36
  writeEnablement
37
- } from "./chunk-ITES7BCY.js";
37
+ } from "./chunk-QNRYOJEB.js";
38
38
  import {
39
39
  BackendIdSchema,
40
40
  DEFAULT_ALLOW_MODEL_SELF_EXTENSION,
@@ -42,16 +42,34 @@ import {
42
42
  VERSION,
43
43
  findingSchema,
44
44
  homeStateDir
45
- } from "./chunk-LTEE2JWK.js";
45
+ } from "./chunk-GXXX7AGH.js";
46
46
 
47
47
  // packages/cli/src/backend-client-mode.ts
48
48
  function remoteBackendClientId(args) {
49
- if (!["workflow", "runs", "mcp-server"].includes(args[0] ?? "")) return void 0;
49
+ if (!["workflow", "runs", "sessions", "mcp-server"].includes(args[0] ?? "")) return void 0;
50
+ const engineUrls = [];
51
+ const tokenEnvs = [];
50
52
  const selections = [];
51
- const valueFlags = /* @__PURE__ */ new Set(["--template", "--revision", "--target", "--workspace", "--scope", "--model", "--inputs", "--time-cap", "--cost-cap", "--db-path", "--format", "--backends-config", "--tools", "--scan-id", "--timeout", "--rate-limit", "--engagement-profile"]);
53
+ const valueFlags = /* @__PURE__ */ new Set(["--template", "--revision", "--target", "--workspace", "--scope", "--model", "--inputs", "--time-cap", "--cost-cap", "--db-path", "--format", "--backends-config", "--tools", "--scan-id", "--timeout", "--rate-limit", "--engagement-profile", "--session", "--config", "--response", "--after", "--branch-from-entry"]);
52
54
  for (let index = 1; index < args.length; index++) {
53
55
  const argument = args[index];
54
56
  if (argument === "--") break;
57
+ if (argument === "--engine-url") {
58
+ engineUrls.push(args[++index]);
59
+ continue;
60
+ }
61
+ if (argument.startsWith("--engine-url=")) {
62
+ engineUrls.push(argument.slice(13));
63
+ continue;
64
+ }
65
+ if (argument === "--engine-token-env") {
66
+ tokenEnvs.push(args[++index]);
67
+ continue;
68
+ }
69
+ if (argument.startsWith("--engine-token-env=")) {
70
+ tokenEnvs.push(argument.slice(19));
71
+ continue;
72
+ }
55
73
  if (argument === "--backend") {
56
74
  selections.push(args[++index]);
57
75
  continue;
@@ -62,6 +80,14 @@ function remoteBackendClientId(args) {
62
80
  }
63
81
  if (valueFlags.has(argument)) index++;
64
82
  }
83
+ if (engineUrls.length || tokenEnvs.length) {
84
+ if (selections.length || engineUrls.length !== 1 || tokenEnvs.length !== 1) throw new Error("Select either one --backend or one --engine-url with --engine-token-env.");
85
+ if (!engineUrls[0] || engineUrls[0].length > 4096 || !tokenEnvs[0] || !/^[A-Za-z_][A-Za-z0-9_]{0,127}$/.test(tokenEnvs[0])) throw new Error("Invalid direct engine attachment options.");
86
+ const url = new URL(engineUrls[0]);
87
+ const loopback = url.hostname === "localhost" || url.hostname === "[::1]" || /^127\.(?:\d{1,3}\.){2}\d{1,3}$/.test(url.hostname);
88
+ if (url.username || url.password || url.search || url.hash || url.protocol !== "https:" && !(url.protocol === "http:" && loopback)) throw new Error("Engine URL must be credential-free HTTPS or loopback HTTP, without query or fragment.");
89
+ return "attached-engine";
90
+ }
65
91
  if (!selections.length) return void 0;
66
92
  if (selections.length !== 1) throw new Error("Select exactly one registered remote backend.");
67
93
  const selected = BackendIdSchema.parse(selections[0]);
@@ -70,7 +96,7 @@ function remoteBackendClientId(args) {
70
96
  }
71
97
 
72
98
  // packages/cli/src/workbench.ts
73
- import { chmodSync, existsSync as existsSync2, lstatSync as lstatSync2, mkdirSync as mkdirSync4, readFileSync as readFileSync3, realpathSync as realpathSync3, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
99
+ import { chmodSync, existsSync as existsSync2, lstatSync as lstatSync3, mkdirSync as mkdirSync4, readFileSync as readFileSync3, realpathSync as realpathSync4, renameSync as renameSync2, writeFileSync as writeFileSync3 } from "node:fs";
74
100
  import { homedir as homedir2 } from "node:os";
75
101
  import { dirname as dirname5, isAbsolute as isAbsolute2, join as join8 } from "node:path";
76
102
 
@@ -99,8 +125,57 @@ function currentWorkbenchAssets(moduleUrl = import.meta.url, executablePath = pr
99
125
 
100
126
  // packages/cli/src/workbench-console-protocol.ts
101
127
  import { isAbsolute, relative, resolve, sep } from "node:path";
128
+ import { createHash } from "node:crypto";
129
+ import { constants, openSync, closeSync, fstatSync, lstatSync as lstatSync2, readSync, realpathSync as realpathSync2 } from "node:fs";
102
130
  var WORKBENCH_FRAME_BYTES = 8 * 1024 * 1024;
103
131
  var WORKBENCH_MAX_PENDING = 64;
132
+ var WORKBENCH_SOURCE_CONTEXT_LIMIT = 8;
133
+ function validateWorkbenchSourceLesson(value, workspace, scopePath) {
134
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("Invalid source lesson");
135
+ const record = value;
136
+ if (Object.keys(record).some((key) => !["title", "summary", "sourceLinks"].includes(key))) throw new Error("Unexpected source lesson fields");
137
+ const { title, summary } = record;
138
+ if (typeof title !== "string" || !title.trim() || title.length > 200 || typeof summary !== "string" || !summary.trim() || summary.length > 2e3) throw new Error("Invalid source lesson prose");
139
+ const text = title + "\n" + summary;
140
+ if (/[\u0000-\u0008\u000b\u000c\u000e-\u001f]/.test(text) || /-----BEGIN .*PRIVATE KEY-----|\b(?:sk-[a-zA-Z0-9_-]{16,}|ghp_[a-zA-Z0-9]{20,}|github_pat_[a-zA-Z0-9_]{20,}|Bearer\s+[a-zA-Z0-9_.-]{16,})|(?:password|api[_ -]?key|access[_ -]?token|secret)\s*[:=]\s*["']?[^\s"']{8,}/i.test(text)) throw new Error("Source lesson may contain credentials");
141
+ if (Array.isArray(record.sourceLinks) && record.sourceLinks.some((link) => !link || typeof link !== "object" || Object.keys(link).some((key) => !["path", "hash"].includes(key)))) throw new Error("Unexpected source lesson link fields");
142
+ return { title: title.trim(), summary: summary.trim(), ...validateWorkbenchSourceContext(record, workspace, scopePath) };
143
+ }
144
+ function validateWorkbenchSourceContext(value, workspace, scopePath) {
145
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("Invalid workbench source context");
146
+ const links = value.sourceLinks;
147
+ if (!Array.isArray(links) || !links.length || links.length > 16) throw new Error("Invalid workbench source links");
148
+ const root = realpathSync2(workspace);
149
+ const scope = realpathSync2(scopePath);
150
+ if (scope !== root && !scope.startsWith(root + sep)) throw new Error("Workbench source scope is outside workspace");
151
+ const sourceLinks = links.map((link) => {
152
+ if (!link || typeof link !== "object" || Array.isArray(link)) throw new Error("Invalid workbench source link");
153
+ const { path, hash } = link;
154
+ if (typeof path !== "string" || !path || path.length > 1024 || path.includes("\0") || path.includes("\\") || isAbsolute(path) || path.split("/").some((part) => !part || part === "." || part === "..") || typeof hash !== "string" || !/^sha256:[a-f0-9]{64}$/.test(hash)) throw new Error("Invalid workbench source path or hash");
155
+ const full = resolve(root, path);
156
+ if (full !== scope && !full.startsWith(scope + sep)) throw new Error("Workbench source is outside approved local scope");
157
+ let cursor = root;
158
+ for (const component of path.split("/")) {
159
+ cursor = resolve(cursor, component);
160
+ if (lstatSync2(cursor).isSymbolicLink()) throw new Error("Workbench source symlink refused");
161
+ }
162
+ const fd = openSync(full, constants.O_RDONLY | constants.O_NOFOLLOW | constants.O_NONBLOCK);
163
+ try {
164
+ const stat = fstatSync(fd);
165
+ if (!stat.isFile() || stat.nlink !== 1 || stat.size > 1048576) throw new Error("Invalid workbench source file");
166
+ const bytes = Buffer.alloc(1048577);
167
+ let size = 0;
168
+ let read;
169
+ while (size < bytes.length && (read = readSync(fd, bytes, size, bytes.length - size, size)) > 0) size += read;
170
+ const after = fstatSync(fd);
171
+ if (size > 1048576 || stat.size !== size || stat.size !== after.size || stat.mtimeMs !== after.mtimeMs || stat.ctimeMs !== after.ctimeMs || realpathSync2(full) !== full || `sha256:${createHash("sha256").update(bytes.subarray(0, size)).digest("hex")}` !== hash) throw new Error("Workbench source changed or digest mismatch");
172
+ } finally {
173
+ closeSync(fd);
174
+ }
175
+ return { path, hash };
176
+ });
177
+ return { sourceLinks };
178
+ }
104
179
  function encodeWorkbenchFrame(frame) {
105
180
  const encoded = JSON.stringify(frame);
106
181
  if (Buffer.byteLength(encoded) > WORKBENCH_FRAME_BYTES) throw new Error("Workbench protocol frame exceeds its byte limit");
@@ -172,7 +247,7 @@ function serializeWorkbenchConfig(config, workspace) {
172
247
  if (config[key] !== void 0) throw new Error(`Host ${key} cannot execute through the workbench controller`);
173
248
  }
174
249
  const result = { workspaceRoot: "/workspace", target: mapWorkbenchTarget(config.target ?? "", workspace) };
175
- for (const key of ["role", "tools", "scanId", "maxToolIterations", "allowScanners", "systemPrompt", "autonomyMode", "refineObjective", "allowModelSelfExtension", "costModel", "contextWindowTokens", "compaction", "initialMessages"]) {
250
+ for (const key of ["role", "tools", "codebaseLearning", "scanId", "maxToolIterations", "allowScanners", "systemPrompt", "autonomyMode", "refineObjective", "allowModelSelfExtension", "costModel", "contextWindowTokens", "compaction", "initialMessages"]) {
176
251
  if (config[key] !== void 0) result[key] = structuredClone(config[key]);
177
252
  }
178
253
  if (config.maxTurnTokens !== void 0 && Number.isFinite(config.maxTurnTokens)) result.maxTurnTokens = config.maxTurnTokens;
@@ -215,9 +290,9 @@ function mapWorkbenchCliArguments(args, workspace) {
215
290
 
216
291
  // packages/cli/src/workbench-console-session.ts
217
292
  import { randomUUID } from "node:crypto";
218
- import { realpathSync as realpathSync2 } from "node:fs";
293
+ import { realpathSync as realpathSync3, statSync } from "node:fs";
219
294
  import { mkdir, mkdtemp as mkdtemp2, realpath as realpath2 } from "node:fs/promises";
220
- import { join as join3 } from "node:path";
295
+ import { join as join3, sep as sep2 } from "node:path";
221
296
 
222
297
  // packages/cli/src/workbench-plugins.ts
223
298
  import { lstat, mkdtemp, realpath, rm } from "node:fs/promises";
@@ -313,7 +388,7 @@ function servicePluginSecretRedactor(connections) {
313
388
 
314
389
  // packages/cli/src/workbench-console-session.ts
315
390
  var EVENTS = /* @__PURE__ */ new Set(["onHarnessUpdate", "onAssistantDelta", "onReasoningDelta", "onToolStart", "onToolResult", "onUsage", "onNotice", "onCompaction"]);
316
- var DECISIONS = /* @__PURE__ */ new Set(["requestScope", "requestLocalScope", "approveTool", "escalateScopedAudit", "askOperator", "historyList", "historyRead"]);
391
+ var DECISIONS = /* @__PURE__ */ new Set(["requestScope", "requestLocalScope", "approveTool", "escalateScopedAudit", "askOperator", "historyList", "historyRead", "sourceLessons"]);
317
392
  function validateOptions(options) {
318
393
  if (options.provider.provider !== "chatgpt-codex" || options.selection.provider && options.selection.provider !== "chatgpt-codex" || !options.provider.models.includes(options.selection.model)) throw new Error("Workbench requires an explicit host provider/model grant");
319
394
  for (const model of Object.values(options.selection.agentModels ?? {})) if (model !== "auto" && !options.provider.models.includes(model)) throw new Error("Workbench worker model is outside the host provider grant");
@@ -333,7 +408,7 @@ var Controller = class {
333
408
  this.init = init;
334
409
  this.cli = cli;
335
410
  validateOptions(options);
336
- this.workspace = realpathSync2(options.workbench.workspaceRoot ?? process.cwd());
411
+ this.workspace = realpathSync3(options.workbench.workspaceRoot ?? process.cwd());
337
412
  this.execution = { backend: "smolvm", status: "pending", runId: this.runId, workspacePath: this.workspace, guestWorkspacePath: "/workspace", imageDigest: options.workbench.imageDigest, cpus: options.workbench.cpus, memoryMb: options.workbench.memoryMb };
338
413
  this.ready = new Promise((resolve2, reject) => {
339
414
  this.resolveReady = resolve2;
@@ -384,7 +459,7 @@ var Controller = class {
384
459
  async start() {
385
460
  if (this.started) return this.ready;
386
461
  this.started = true;
387
- this.status("pending", "Starting isolated workbench");
462
+ this.status("pending", "Preparing workspace");
388
463
  let stagedPlugins;
389
464
  this.lifetime = setTimeout(() => this.abort.abort(new Error("Workbench lifetime expired")), this.options.lifetimeMs ?? 30 * 6e4);
390
465
  this.lifetime.unref();
@@ -394,7 +469,7 @@ var Controller = class {
394
469
  const artifacts = this.options.artifactDirectory ?? await realpath2(await mkdtemp2(join3(root, "run-")));
395
470
  const reader = new WorkbenchFrameReader();
396
471
  const launch = guestCommand(this.options, this.cli);
397
- const connections = this.cli ? [] : (await import("./service-plugins-QYFITODK.js")).loadServicePluginConnections(this.options.pluginHomeDir).filter((item) => item.enabled);
472
+ const connections = this.cli ? [] : (await import("./service-plugins-5B23PWXC.js")).loadServicePluginConnections(this.options.pluginHomeDir).filter((item) => item.enabled);
398
473
  const servicePluginConnections = validateGuestServicePluginConnections(connections, this.options.network);
399
474
  this.redact = servicePluginSecretRedactor(servicePluginConnections);
400
475
  const plugins = stagedPlugins = await prepareWorkbenchPlugins(this.workspace, this.options.pluginHomeDir);
@@ -402,6 +477,7 @@ var Controller = class {
402
477
  image: this.options.workbench.image,
403
478
  stateRoot: this.options.workbench.stateRoot,
404
479
  workspaceRoot: this.workspace,
480
+ onStartupProgress: (message) => this.status("pending", message),
405
481
  command: launch.command,
406
482
  environment: { ZERO_PROVIDER: "chatgpt-codex", ZERO_NO_TELEMETRY: "1", DO_NOT_TRACK: "1" },
407
483
  network: this.options.network,
@@ -539,18 +615,25 @@ var Controller = class {
539
615
  }
540
616
  return result;
541
617
  }
542
- async close() {
618
+ async close(beforeRelease) {
543
619
  if (!this.started) {
544
620
  await this.options.provider.close?.();
545
621
  return;
546
622
  }
547
623
  let exited = false;
548
624
  try {
549
- await Promise.race([this.request("close"), new Promise((resolve2) => setTimeout(resolve2, 1e3))]);
625
+ await Promise.race([this.request("close"), new Promise((_, reject) => setTimeout(() => reject(new Error("Workbench close acknowledgement timed out")), 1e3))]);
626
+ await beforeRelease?.();
627
+ this.write({ type: "release" });
628
+ this.input?.end();
550
629
  await Promise.race([this.done?.then(() => {
551
630
  exited = true;
552
631
  }), new Promise((resolve2) => setTimeout(resolve2, 1e3))]);
553
- } catch {
632
+ } catch (error) {
633
+ this.abort.abort();
634
+ const result = await this.done;
635
+ if (result?.cleanupFailed) throw new Error(result.error ?? "Workbench teardown could not be confirmed");
636
+ if (beforeRelease) await beforeRelease();
554
637
  } finally {
555
638
  if (!exited) this.abort.abort();
556
639
  const result = await this.done;
@@ -559,17 +642,42 @@ var Controller = class {
559
642
  }
560
643
  };
561
644
  function createWorkbenchConsoleSession(options) {
562
- const workspace = realpathSync2(options.workbench.workspaceRoot ?? options.config.workspaceRoot ?? process.cwd());
645
+ const workspace = realpathSync3(options.workbench.workspaceRoot ?? options.config.workspaceRoot ?? process.cwd());
563
646
  const config = { ...options.config, scanId: options.config.scanId ?? `console-${randomUUID()}` };
564
647
  const serial = serializeWorkbenchConfig(config, workspace);
565
648
  const callbacks = [...DECISIONS].filter((name) => name === "historyList" || name === "historyRead" ? !!config.conversationHistory : typeof config[name] === "function");
566
- const scopeEnforcement = getScopeEnforcementState(workspace);
649
+ const sourceLearningEnabled = config.codebaseLearning === true && config.role !== "verify" && !/^(1|true)$/i.test(process.env.ZERO_DISABLE_HUNT_MEMORY ?? "");
650
+ if (sourceLearningEnabled && options.readSourceLessons) callbacks.push("sourceLessons");
651
+ const scopeEnforcement = getScopeEnforcementState(workspace, options.pluginHomeDir);
567
652
  const controller = new Controller({ ...options, workbench: { ...options.workbench, workspaceRoot: workspace } }, { config: serial, callbacks, scopeEnforcement }, false);
568
653
  let messages = structuredClone(config.initialMessages ?? config.initialCheckpoint?.messages ?? []);
569
654
  let checkpoint = config.initialCheckpoint;
570
655
  let target = config.target ?? "";
571
656
  let scope = config.scope;
572
657
  let localScopePath = config.initialCheckpoint?.localScopePath ?? void 0;
658
+ let explicitYoloSourceGrant = !!options.workbench.workspaceRoot && config.autonomyMode === "yolo";
659
+ let sourceScopePath = config.initialCheckpoint?.localScopePath ?? (!scopeEnforcement.enabled || explicitYoloSourceGrant ? workspace : void 0);
660
+ const authorizedSourceRoot = (guestPath) => {
661
+ if (!sourceScopePath || typeof guestPath !== "string") return void 0;
662
+ try {
663
+ const requested = realpathSync3(hostWorkspacePath(guestPath, workspace));
664
+ const approved = realpathSync3(sourceScopePath);
665
+ if (!statSync(requested).isDirectory()) return void 0;
666
+ if (requested === approved || explicitYoloSourceGrant && (requested === workspace || requested.startsWith(workspace + sep2))) return requested;
667
+ } catch {
668
+ }
669
+ return void 0;
670
+ };
671
+ const sourceArtifacts = /* @__PURE__ */ new Set();
672
+ let sourceFrames = 0;
673
+ let sourcePersistence = Promise.resolve();
674
+ const flushSourceContext = async () => {
675
+ try {
676
+ await sourcePersistence;
677
+ } catch {
678
+ throw new Error("Workbench source context persistence failed");
679
+ }
680
+ };
573
681
  let autonomyMode = config.autonomyMode ?? "standard";
574
682
  let systemPrompt = config.systemPrompt ?? "";
575
683
  let tools = config.tools ?? [];
@@ -591,6 +699,20 @@ function createWorkbenchConsoleSession(options) {
591
699
  });
592
700
  };
593
701
  controller.decision = async (name, args) => {
702
+ if (name === "sourceLessons") {
703
+ if (!sourceLearningEnabled || !sourceScopePath || !options.readSourceLessons || /^(1|true)$/i.test(process.env.ZERO_DISABLE_HUNT_MEMORY ?? "") || args.length !== 1 || typeof args[0] !== "string") return [];
704
+ const requested = authorizedSourceRoot(args[0]);
705
+ if (!requested) return [];
706
+ await flushSourceContext();
707
+ const notes = await options.readSourceLessons({ workspaceRoot: workspace, scopePath: requested });
708
+ return notes.slice(0, 6).flatMap((note) => {
709
+ try {
710
+ return [validateWorkbenchSourceLesson(note, workspace, requested)];
711
+ } catch {
712
+ return [];
713
+ }
714
+ });
715
+ }
594
716
  if (name === "historyList") return config.conversationHistory.list(...args);
595
717
  if (name === "historyRead") return config.conversationHistory.read(...args);
596
718
  const callback = config[name];
@@ -601,7 +723,9 @@ function createWorkbenchConsoleSession(options) {
601
723
  const value = await callback(request);
602
724
  if (!value) return null;
603
725
  const resolution = value;
604
- return { scopePath: guestWorkspacePath(resolution.scopePath, workspace) };
726
+ const guestPath = guestWorkspacePath(resolution.scopePath, workspace);
727
+ sourceScopePath = hostWorkspacePath(guestPath, workspace);
728
+ return { scopePath: guestPath };
605
729
  }
606
730
  if (name === "requestScope") {
607
731
  const request = args[0];
@@ -613,7 +737,40 @@ function createWorkbenchConsoleSession(options) {
613
737
  return callback(...args);
614
738
  };
615
739
  controller.receive = (frame) => {
616
- if (frame.type === "state") {
740
+ if (frame.type === "source-lesson") {
741
+ if (++sourceFrames > 128) throw new Error("Workbench source export limit reached");
742
+ if (!sourceLearningEnabled || !options.onSourceLesson || !sourceScopePath || /^(1|true)$/i.test(process.env.ZERO_DISABLE_HUNT_MEMORY ?? "")) return;
743
+ const lessonScope = frame.scopePath === void 0 ? sourceScopePath : authorizedSourceRoot(frame.scopePath);
744
+ if (!lessonScope) return;
745
+ let lesson;
746
+ try {
747
+ lesson = validateWorkbenchSourceLesson(frame.lesson, workspace, lessonScope);
748
+ } catch {
749
+ return;
750
+ }
751
+ const key = JSON.stringify({ scopePath: lessonScope, lesson });
752
+ if (sourceArtifacts.has(key)) return;
753
+ sourceArtifacts.add(key);
754
+ const scopePath = lessonScope;
755
+ sourcePersistence = sourcePersistence.then(() => options.onSourceLesson(lesson, { workspaceRoot: workspace, scopePath, scanId: config.scanId, runId: controller.runId }));
756
+ void sourcePersistence.catch(() => {
757
+ });
758
+ } else if (frame.type === "source-context") {
759
+ if (++sourceFrames > 128) throw new Error("Workbench source context export limit reached");
760
+ if (!sourceLearningEnabled || !options.onSourceContext || !sourceScopePath || /^(1|true)$/i.test(process.env.ZERO_DISABLE_HUNT_MEMORY ?? "")) return;
761
+ let artifact;
762
+ try {
763
+ artifact = validateWorkbenchSourceContext(frame.artifact, workspace, sourceScopePath);
764
+ } catch {
765
+ return;
766
+ }
767
+ const key = JSON.stringify(artifact);
768
+ if (sourceArtifacts.has(key)) return;
769
+ sourceArtifacts.add(key);
770
+ sourcePersistence = sourcePersistence.then(() => options.onSourceContext(artifact, { workspaceRoot: workspace, scanId: config.scanId, runId: controller.runId }));
771
+ void sourcePersistence.catch(() => {
772
+ });
773
+ } else if (frame.type === "state") {
617
774
  const state = frame.snapshot;
618
775
  if (!state || state.scanId !== config.scanId || !Array.isArray(state.messages) || state.messages.length > 1e4 || !Array.isArray(state.tools)) throw new Error("Invalid guest session state");
619
776
  messages = state.messages;
@@ -663,6 +820,10 @@ function createWorkbenchConsoleSession(options) {
663
820
  scopeEnforcement,
664
821
  setAutonomyMode(mode) {
665
822
  autonomyMode = mode;
823
+ if (mode === "yolo" && options.workbench.workspaceRoot) {
824
+ explicitYoloSourceGrant = true;
825
+ sourceScopePath ??= workspace;
826
+ }
666
827
  queue("autonomy", mode);
667
828
  },
668
829
  configureEngagement(selection) {
@@ -673,7 +834,7 @@ function createWorkbenchConsoleSession(options) {
673
834
  else queue("configure", value);
674
835
  },
675
836
  configureWorkspace(path) {
676
- if (realpathSync2(path) !== workspace) throw new Error("The SmolVM workspace grant is fixed for this chat; start a new chat to change it");
837
+ if (realpathSync3(path) !== workspace) throw new Error("The SmolVM workspace grant is fixed for this chat; start a new chat to change it");
677
838
  },
678
839
  reconfigureRuntime(selection) {
679
840
  if (selection.env !== void 0 || selection.provider && selection.provider !== "chatgpt-codex" || selection.model && !options.provider.models.includes(selection.model) || Object.values(selection.agentModels ?? {}).some((model) => model !== "auto" && !options.provider.models.includes(model))) throw new Error("Runtime selection is outside workbench provider grant");
@@ -734,6 +895,7 @@ function createWorkbenchConsoleSession(options) {
734
895
  controller.status("running");
735
896
  engineWorkStarted = true;
736
897
  lastOutcome = await controller.request("send", { text, generateTitle: sendOptions?.generateTitle });
898
+ await flushSourceContext();
737
899
  return lastOutcome;
738
900
  } catch (error) {
739
901
  if (sendOptions?.signal?.aborted) {
@@ -771,7 +933,8 @@ function createWorkbenchConsoleSession(options) {
771
933
  },
772
934
  cleanup() {
773
935
  return cleanupPromise ??= (async () => {
774
- await controller.close();
936
+ await controller.close(flushSourceContext);
937
+ await flushSourceContext();
775
938
  if (engineWorkStarted && controller.done) await options.onFindings?.(findings, { outcome: lastOutcome });
776
939
  })();
777
940
  }
@@ -885,6 +1048,13 @@ var PROVIDER_DEFS = [
885
1048
  envVars: ["XAI_API_KEY", "ZERO_XAI_OAUTH_REFRESH_TOKEN"],
886
1049
  hint: "sign in with your xAI account, or set XAI_API_KEY from console.x.ai (endpoint override: XAI_BASE_URL)"
887
1050
  },
1051
+ {
1052
+ id: "cline",
1053
+ label: "Cline / ClinePass",
1054
+ methods: ["api-key"],
1055
+ envVars: ["CLINE_API_KEY"],
1056
+ hint: "set CLINE_API_KEY from app.cline.bot Settings > API Keys; choose cline-pass/* for your active ClinePass plan (endpoint override: CLINE_BASE_URL)"
1057
+ },
888
1058
  {
889
1059
  id: "opencode",
890
1060
  label: "OpenCode Zen",
@@ -3225,7 +3395,7 @@ function serializeSubmission(payload, target, env) {
3225
3395
  if (!target.sentryKey || !payload.diagnostic) return serializePayload(payload);
3226
3396
  const diagnostic = payload.diagnostic;
3227
3397
  const cliVersion = VERSION;
3228
- const commit = /^[0-9a-f]{40}$/i.test("8f4d9ec0535d64def1bc2c3fc9c917d4ec220cb4") ? "8f4d9ec0535d64def1bc2c3fc9c917d4ec220cb4".toLowerCase() : void 0;
3398
+ const commit = /^[0-9a-f]{40}$/i.test("42ab1fa74044b79edd6b8f0990b2afa7ccfd824b") ? "42ab1fa74044b79edd6b8f0990b2afa7ccfd824b".toLowerCase() : void 0;
3229
3399
  const releaseChannel = getReleaseChannel(env);
3230
3400
  const environment = releaseChannel === "beta" ? "production" : "development";
3231
3401
  const event = JSON.stringify({
@@ -3312,7 +3482,7 @@ function loadWorkbenchConfig(home) {
3312
3482
  const file = workbenchConfigPath(home);
3313
3483
  if (!existsSync2(file)) return void 0;
3314
3484
  try {
3315
- const stat = lstatSync2(file);
3485
+ const stat = lstatSync3(file);
3316
3486
  if (!stat.isFile() || stat.isSymbolicLink() || (stat.mode & 63) !== 0 || stat.uid !== process.getuid?.()) {
3317
3487
  throw new Error("Workbench configuration must be an operator-owned, private regular file (mode 0600).");
3318
3488
  }
@@ -3356,7 +3526,7 @@ async function launchConfiguredWorkbench(args) {
3356
3526
  return void 0;
3357
3527
  }
3358
3528
  if (process.platform === "linux" && isAdmittedSmolvmWorkbench()) return void 0;
3359
- if (["workbench", "config", "web", "dashboard", "console", "tui", "doctor", "help", "--help", "-h", "--version", "-v"].includes(args[0] ?? "") || args.length === 0) return void 0;
3529
+ if (["workbench", "config", "web", "dashboard", "console", "chat", "team", "tui", "watch", "doctor", "help", "--help", "-h", "--version", "-v"].includes(args[0] ?? "") || args.length === 0) return void 0;
3360
3530
  if (remoteBackendClientId(args)) return void 0;
3361
3531
  const hostSettings = loadGlobalSettings(home, { requireExecutionProfile: existsSync2(workbenchConfigPath(home)) });
3362
3532
  if (hostSettings.executionProfile !== "smolvm") return void 0;
@@ -3365,8 +3535,8 @@ async function launchConfiguredWorkbench(args) {
3365
3535
  }
3366
3536
  const config = loadWorkbenchConfig(home);
3367
3537
  if (!config) throw new Error("SmolVM profile is selected but no workbench is configured. Run 0 workbench setup --image <approved-archive>.");
3368
- const workspaceRoot = realpathSync3(config.workspaceRoot ?? process.cwd());
3369
- if (!lstatSync2(workspaceRoot).isDirectory()) throw new Error("The configured workbench workspace is not a directory.");
3538
+ const workspaceRoot = realpathSync4(config.workspaceRoot ?? process.cwd());
3539
+ if (!lstatSync3(workspaceRoot).isDirectory()) throw new Error("The configured workbench workspace is not a directory.");
3370
3540
  const status = await getSmolvmWorkbenchStatus({ stateRoot: config.stateRoot, image: config.image });
3371
3541
  if (!status.platformSupported || !status.runtimeReady || !status.imageApproved) {
3372
3542
  throw new Error(status.error ?? "SmolVM runtime or approved image is unavailable. Run 0 workbench setup; host fallback is refused.");
@@ -3484,6 +3654,8 @@ export {
3484
3654
  currentWorkbenchAssets,
3485
3655
  WORKBENCH_FRAME_BYTES,
3486
3656
  WORKBENCH_MAX_PENDING,
3657
+ WORKBENCH_SOURCE_CONTEXT_LIMIT,
3658
+ validateWorkbenchSourceLesson,
3487
3659
  encodeWorkbenchFrame,
3488
3660
  WorkbenchFrameReader,
3489
3661
  installWorkbenchPlugins,
@@ -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-GXXX7AGH.js";
7
7
 
8
8
  // packages/core/dist/scope/waf-detect.js
9
9
  function readHeader(headers, name) {
@@ -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-GXXX7AGH.js";
7
7
 
8
8
  // packages/core/dist/triage/kernel-vm-runner.js
9
9
  import { execFileSync, spawn } from "node:child_process";