0sec-cli 0.24.1 → 0.26.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 (246) hide show
  1. package/0.js +67 -62
  2. package/README.md +121 -82
  3. package/chunks/{adapt-loop-L77BWMNE.js → adapt-loop-P4HKONB5.js} +6 -5
  4. package/chunks/{artifact-scraper-BV67RAP5.js → artifact-scraper-IIRJNYKT.js} +4 -3
  5. package/chunks/{assumption-mining-RPVR77A3.js → assumption-mining-YA6VJ2V6.js} +22 -20
  6. package/chunks/{backend-connections-ACIXNYZN.js → backend-connections-64PKYKL7.js} +5 -4
  7. package/chunks/chunk-36J5ZLFE.js +18729 -0
  8. package/chunks/{chunk-ZM6ANQZJ.js → chunk-3MWQNNJU.js} +16180 -34467
  9. package/chunks/{chunk-GV5WXDHY.js → chunk-3VQ5EZKG.js} +11 -9
  10. package/chunks/chunk-5XOYTAOK.js +1546 -0
  11. package/chunks/{chunk-UJE4WOQS.js → chunk-6GV5G6U3.js} +1 -1
  12. package/chunks/{chunk-X2ZMSRTP.js → chunk-6SNOKNCS.js} +333 -3
  13. package/chunks/{chunk-BMDG6T7D.js → chunk-72PU46MS.js} +178 -133
  14. package/chunks/{chunk-KCA35IL3.js → chunk-7PUJI64A.js} +11 -9
  15. package/chunks/chunk-A7G6S5RA.js +90 -0
  16. package/chunks/chunk-ABKUI3QB.js +196 -0
  17. package/chunks/{chunk-5ETI27Q3.js → chunk-AFJ2UMPR.js} +3 -3
  18. package/chunks/{chunk-XA2IBHPB.js → chunk-B7XL6RON.js} +1 -1
  19. package/chunks/{chunk-TVS6WVSK.js → chunk-BM6EYP2D.js} +3 -3
  20. package/chunks/{chunk-7UHAXEOV.js → chunk-D4M5WURF.js} +226 -4
  21. package/chunks/{chunk-K74DRDC5.js → chunk-EHNVP6QB.js} +1 -1
  22. package/chunks/{chunk-I43YYHDU.js → chunk-FBZBJYZS.js} +5 -50
  23. package/chunks/{chunk-GXXX7AGH.js → chunk-GYEYTNHK.js} +144 -14
  24. package/chunks/{chunk-IJ6UPW3H.js → chunk-HS2NQ7K6.js} +393 -58
  25. package/chunks/chunk-HUZ2EC2R.js +196 -0
  26. package/chunks/{chunk-SU4IHQQI.js → chunk-IUUNIJPM.js} +1 -1
  27. package/chunks/chunk-JGDA6EIJ.js +49 -0
  28. package/chunks/{chunk-CJRZSWII.js → chunk-K3PTYN43.js} +3 -3
  29. package/chunks/{chunk-2NBZZFRG.js → chunk-KCABBZHN.js} +8 -10
  30. package/chunks/{chunk-3LPBJMHB.js → chunk-LRD5N2TQ.js} +1 -1
  31. package/chunks/{chunk-SQCBHFWN.js → chunk-LWMEJYCP.js} +2 -2
  32. package/chunks/chunk-MNK373HF.js +57 -0
  33. package/chunks/{chunk-R2XBH476.js → chunk-MOEVVXML.js} +2 -2
  34. package/chunks/{chunk-F2P25DJY.js → chunk-MOGWEHSC.js} +1448 -1050
  35. package/chunks/{chunk-6XMFCVJS.js → chunk-N7YCONYR.js} +1 -1
  36. package/chunks/{chunk-3WUPCZGF.js → chunk-NA3FKCI2.js} +1 -1
  37. package/chunks/{chunk-S2GITRD5.js → chunk-NABVDAAO.js} +2 -2
  38. package/chunks/{chunk-SZDD77KX.js → chunk-NNMOTHKC.js} +6 -10
  39. package/chunks/{chunk-LMP2T4G2.js → chunk-OILVEROI.js} +22 -172
  40. package/chunks/{chunk-YERUDEXT.js → chunk-PAE7ZAV6.js} +2780 -1255
  41. package/chunks/{chunk-NBV4I237.js → chunk-PAMJEXE2.js} +1 -1
  42. package/chunks/{chunk-PJU24AKR.js → chunk-R7VWEY45.js} +337 -257
  43. package/chunks/{chunk-QNRYOJEB.js → chunk-RZZ6VPRY.js} +1 -1
  44. package/chunks/{chunk-WUPN3D37.js → chunk-S4DFH2FJ.js} +26 -1
  45. package/chunks/{chunk-5WAHHZBF.js → chunk-SIR7XW2S.js} +61910 -30777
  46. package/chunks/{chunk-BD7WULFS.js → chunk-SSPP64FF.js} +3 -2
  47. package/chunks/{chunk-BOBIAHKA.js → chunk-STPHTPSD.js} +3 -333
  48. package/chunks/{chunk-Q7JKIKKF.js → chunk-UGCTPKJG.js} +89 -17
  49. package/chunks/{chunk-5PFRE522.js → chunk-ULRLUXSS.js} +1 -1
  50. package/chunks/{chunk-GZA7RGK7.js → chunk-UQS7XCBV.js} +2085 -1093
  51. package/chunks/{chunk-X2IPO5JO.js → chunk-V2KJQVYE.js} +2676 -2959
  52. package/chunks/{chunk-CGBDEST2.js → chunk-VJBEB2K6.js} +1 -1
  53. package/chunks/{chunk-ILRMLA6J.js → chunk-VWE36MUN.js} +1 -1
  54. package/chunks/{chunk-RURJYCWY.js → chunk-WNWDQ2TO.js} +1 -1
  55. package/chunks/{chunk-GTED3FSZ.js → chunk-WPJMA5AK.js} +4 -99
  56. package/chunks/{chunk-5NFIY2SJ.js → chunk-XJ2TBEV7.js} +3 -3
  57. package/chunks/{chunk-PVJUPIQG.js → chunk-XOVYV7TT.js} +6 -6
  58. package/chunks/{chunk-IXT64DV5.js → chunk-XPDJE537.js} +97 -1
  59. package/chunks/{chunk-YKWARO3T.js → chunk-YGYJ2FTH.js} +95 -21
  60. package/chunks/{chunk-JWSOUKFF.js → chunk-YJGPPPUB.js} +66 -21
  61. package/chunks/chunk-YP2DHYNI.js +650 -0
  62. package/chunks/{chunk-RVJVM5L4.js → chunk-Z2VLJEQJ.js} +5 -5
  63. package/chunks/chunk-ZPVSDB63.js +3839 -0
  64. package/chunks/{codex-models-6XVNFRXZ.js → codex-models-CI22KIHY.js} +9 -8
  65. package/chunks/{commands-FRPOFIO4.js → commands-C2WRSCNB.js} +909 -610
  66. package/chunks/dashboard-XO2X2SPD.js +75 -0
  67. package/chunks/{db-BXJNWUYJ.js → db-FU3OIGQK.js} +5 -4
  68. package/chunks/{deep-review-GSJEBLCG.js → deep-review-5AL6QYTK.js} +37 -38
  69. package/chunks/{disclose-OU6Z6GVT.js → disclose-YPV5KIUU.js} +6 -5
  70. package/chunks/{dist-M2X367VW.js → dist-JAZWL3SC.js} +3 -2
  71. package/chunks/{dist-TQMHMSBZ.js → dist-ONIRKDH6.js} +376 -333
  72. package/chunks/{dist-RKLQIXDT.js → dist-QLMPTFT7.js} +4 -3
  73. package/chunks/{dist-7KSYDDSG.js → dist-QXJKD743.js} +5 -2
  74. package/chunks/{dist-LNXGATR2.js → dist-WNAOCQGA.js} +5 -4
  75. package/chunks/eval-runner-D3RUCU3R.js +38 -0
  76. package/chunks/{exploit-agent-Y2P4GFIY.js → exploit-agent-4E4HXKUA.js} +1 -1
  77. package/chunks/{exploit-autoclimb-YRZ3TMS2.js → exploit-autoclimb-5GRXI6VQ.js} +1 -1
  78. package/chunks/{exploit-climb-4LEY4SDW.js → exploit-climb-AHQEJ2I2.js} +4 -3
  79. package/chunks/{fix-RQSIG75B.js → fix-CHD7LXDS.js} +9 -8
  80. package/chunks/{harness-3NVC3DDY.js → harness-E63KDHPG.js} +5 -4
  81. package/chunks/{http-conformance-U5F6GKYG.js → http-conformance-AXMUOE6C.js} +3 -2
  82. package/chunks/hunt-scan-ME2Z4CTC.js +43 -0
  83. package/chunks/{kernel-primitive-T47V3RD3.js → kernel-primitive-S566GXWP.js} +4 -3
  84. package/chunks/{kernel-vm-runner-AEL5E3SV.js → kernel-vm-runner-KREBY4DC.js} +4 -3
  85. package/chunks/{local-engine-ZCW4YC6E.js → local-engine-ZRTZVSSX.js} +7 -6
  86. package/chunks/managed-operation-ZMLLRCCQ.js +59 -0
  87. package/chunks/{memsafety-scan-L2Z7E7TE.js → memsafety-scan-Q2MBZEGJ.js} +1 -2
  88. package/chunks/{native-loop-26X2CHBV.js → native-loop-UV3Z4Z2F.js} +31 -16
  89. package/chunks/operator-services-JOCREEBA.js +79 -0
  90. package/chunks/orchestrate-ZF6ZTSIQ.js +62 -0
  91. package/chunks/{prepare-C3KGMBXT.js → prepare-PLDVGLDX.js} +7 -6
  92. package/chunks/{provider-model-discovery-QGUGL3XW.js → provider-model-discovery-3X6DON3Y.js} +7 -2
  93. package/chunks/{remote-workflow-runtime-DB52SINR.js → remote-workflow-runtime-GOI4TYP5.js} +4 -3
  94. package/chunks/routing-WCQLO5SP.js +61 -0
  95. package/chunks/{runtime-AUBLQUOH.js → runtime-6ZIXFTW5.js} +4 -3
  96. package/chunks/{runtime-U66JNSAY.js → runtime-TVH5ORUK.js} +13 -8
  97. package/chunks/{scan-stream-34F3LTPV.js → scan-stream-HJVTWZ44.js} +6 -4
  98. package/chunks/{scope-HSTG63TQ.js → scope-RCYXVGJR.js} +4 -3
  99. package/chunks/service-plugins-TN6KDX4L.js +63 -0
  100. package/chunks/{session-store-MKAAP3WL.js → session-store-6QR3CVUA.js} +8 -5
  101. package/chunks/{variant-candidates-LG767HWH.js → variant-candidates-SGLKPPHI.js} +9 -8
  102. package/chunks/{web-recon-prepass-NJP6J3E4.js → web-recon-prepass-GO7CTMVQ.js} +7 -6
  103. package/chunks/{workflow-runtime-AR627I26.js → workflow-runtime-CQTDASFA.js} +50 -49
  104. package/dashboard/assets/{abnfDiagram-VCTEODGH-Cq149Jpk.js → abnfDiagram-VCTEODGH-DDZsU70-.js} +1 -1
  105. package/dashboard/assets/{arc-CpP-3TRW.js → arc-iDXNTSL6.js} +1 -1
  106. package/dashboard/assets/architecture-7GRP2DOG-DJcY9RFg.js +1 -0
  107. package/dashboard/assets/architectureDiagram-5GKGNRK7-d0ZuOniQ.js +36 -0
  108. package/dashboard/assets/{blockDiagram-I7D4REHJ-CZYkRRDi.js → blockDiagram-I7D4REHJ-B-EWfMy1.js} +2 -2
  109. package/dashboard/assets/{c4Diagram-7LVT6UL2-CV7Iu3_Z.js → c4Diagram-7LVT6UL2-KcZRuXZC.js} +1 -1
  110. package/dashboard/assets/channel-CeWMIm0w.js +1 -0
  111. package/dashboard/assets/{chunk-4HAMMTFA-PKCyW4m-.js → chunk-4HAMMTFA-DXWulBlo.js} +1 -1
  112. package/dashboard/assets/{chunk-75Z2AOVW-C5MlFTc_.js → chunk-75Z2AOVW-RiLZItrz.js} +1 -1
  113. package/dashboard/assets/chunk-DU6HZSFF-MBcaIyTX.js +127 -0
  114. package/dashboard/assets/{chunk-F27PBJKO-DTAok0qM.js → chunk-F27PBJKO-kLWCBX_W.js} +1 -1
  115. package/dashboard/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-COOliuUh.js} +14 -14
  116. package/dashboard/assets/{chunk-GMAD6QVW-CPsr2F33.js → chunk-GMAD6QVW-BeQeSjpW.js} +7 -7
  117. package/dashboard/assets/{chunk-GVQU2GXP-C2AXGf9A.js → chunk-GVQU2GXP-CjCMlOIB.js} +1 -1
  118. package/dashboard/assets/{chunk-IMKFNOWR-DMG6yD_O.js → chunk-IMKFNOWR-BwNst53D.js} +1 -1
  119. package/dashboard/assets/{chunk-L3NEJ4N5-BSvwdbXx.js → chunk-L3NEJ4N5-CHXWQrkL.js} +1 -1
  120. package/dashboard/assets/{chunk-OSK3NFVY-CfB8V7FU.js → chunk-OSK3NFVY-B2vd19Ed.js} +1 -1
  121. package/dashboard/assets/{chunk-P2QGCYS3-CvmZvq6n.js → chunk-P2QGCYS3-Dk7Fyh6n.js} +1 -1
  122. package/dashboard/assets/{chunk-POPQ4Y6H-D_TvwDxL.js → chunk-POPQ4Y6H-CPAgOvYe.js} +1 -1
  123. package/dashboard/assets/{chunk-PWAF6VOD-Da5GnuOY.js → chunk-PWAF6VOD-BotyfMha.js} +1 -1
  124. package/dashboard/assets/{chunk-SHT3W25Y-CcsMJpR-.js → chunk-SHT3W25Y-Buz5gLRP.js} +1 -1
  125. package/dashboard/assets/{chunk-SVP7TREG-COojjieJ.js → chunk-SVP7TREG-_rpYEZcs.js} +1 -1
  126. package/dashboard/assets/{chunk-TICWLB2K-nBAmJwx6.js → chunk-TICWLB2K-DOJxPoec.js} +2 -2
  127. package/dashboard/assets/{chunk-XXDRQBXY-r5HyhWDv.js → chunk-XXDRQBXY-EXxKJbAs.js} +1 -1
  128. package/dashboard/assets/classDiagram-ZZMXUADV-DV_h1NoS.js +1 -0
  129. package/dashboard/assets/classDiagram-v2-VYDZK3BY-DV_h1NoS.js +1 -0
  130. package/dashboard/assets/common-VLJRx-Jq.js +5 -0
  131. package/dashboard/assets/cose-bilkent-JH36ORCC-B1SVC57o.js +1 -0
  132. package/dashboard/assets/cynefin-OW5HDTMX-BzhRorj4.js +1 -0
  133. package/dashboard/assets/{cynefinDiagram-5FMLGOSQ-xodkuQtW.js → cynefinDiagram-5FMLGOSQ-JXzRmldX.js} +1 -1
  134. package/dashboard/assets/cytoscape.esm-BbBREfsg.js +321 -0
  135. package/dashboard/assets/dagre-D7JM2Yhv.js +1 -0
  136. package/dashboard/assets/dagre-GXQ25YYZ-1LZ-X0-Z.js +4 -0
  137. package/dashboard/assets/{diagram-S7CK7UJ4-DNoTMlCO.js → diagram-S7CK7UJ4-C_-J_LQ4.js} +2 -2
  138. package/dashboard/assets/{diagram-UQ7AKVKN-COccuyew.js → diagram-UQ7AKVKN-CnxL1k8g.js} +1 -1
  139. package/dashboard/assets/{diagram-VSXAHHWV-g6D1tWRb.js → diagram-VSXAHHWV-WzSb3aby.js} +1 -1
  140. package/dashboard/assets/{diagram-VX7I27RA-DhO4eVIC.js → diagram-VX7I27RA-DKhrMInE.js} +1 -1
  141. package/dashboard/assets/{diagram-Z3DM3KII-DeOQFexd.js → diagram-Z3DM3KII-CDhI2WGP.js} +1 -1
  142. package/dashboard/assets/{dist-BQYeOQg3.js → dist-B0bfBMeP.js} +1 -1
  143. package/dashboard/assets/{ebnfDiagram-PWID7BFC-MtkX2feM.js → ebnfDiagram-PWID7BFC-iL5NQ1PE.js} +1 -1
  144. package/dashboard/assets/{erDiagram-RLTQ6QDP-DIWSsoYZ.js → erDiagram-RLTQ6QDP-RK2Voa5O.js} +1 -1
  145. package/dashboard/assets/eventmodeling-NTZA5JFV-WgE7OJBb.js +1 -0
  146. package/dashboard/assets/flowDiagram-HODETNUW-B9YcQ0Aq.js +1 -0
  147. package/dashboard/assets/{ganttDiagram-EL5Y4UJY-DKggkJe0.js → ganttDiagram-EL5Y4UJY-D8CJXHRF.js} +1 -1
  148. package/dashboard/assets/gitGraph-4MIJSDKK-BuZ9Lg04.js +1 -0
  149. package/dashboard/assets/{gitGraphDiagram-WWUBYQGX-r_iR8Qzo.js → gitGraphDiagram-WWUBYQGX-LEJMh54j.js} +1 -1
  150. package/dashboard/assets/info-A6RAGUB7-BL5k3pev.js +1 -0
  151. package/dashboard/assets/{infoDiagram-27XIBGKW-ClQk7UyQ.js → infoDiagram-27XIBGKW-LJvntUnZ.js} +1 -1
  152. package/dashboard/assets/{ishikawaDiagram-5VMMS53U-tR7Vziog.js → ishikawaDiagram-5VMMS53U-BYTYgKCG.js} +2 -2
  153. package/dashboard/assets/{journeyDiagram-3NMN7TZE-Cpb9IqKL.js → journeyDiagram-3NMN7TZE-G25qgQgO.js} +1 -1
  154. package/dashboard/assets/{kanban-definition-UXKFOSKX-BzUuKbA9.js → kanban-definition-UXKFOSKX-Bk3uLl1i.js} +1 -1
  155. package/dashboard/assets/{katex-BdBmVSus.js → katex-nLxf_RlZ.js} +2 -2
  156. package/dashboard/assets/{line-BHY_tSHu.js → line-i4qHBaWO.js} +1 -1
  157. package/dashboard/assets/linear-DmrqRsKG.js +1 -0
  158. package/dashboard/assets/mermaid-parser.core-BxbKr4QF.js +7 -0
  159. package/dashboard/assets/{mermaid.core-D_QsUPU8.js → mermaid.core-Cltee6FS.js} +9 -9
  160. package/dashboard/assets/{mindmap-definition-YA3MSWOX-CtfLTPPJ.js → mindmap-definition-YA3MSWOX-DkzO2JgS.js} +1 -1
  161. package/dashboard/assets/operations-B4_timQX.css +1 -0
  162. package/dashboard/assets/operations-DwppJviL.js +199 -0
  163. package/dashboard/assets/packet-AYTQ26CC-uZQUKnrE.js +1 -0
  164. package/dashboard/assets/{pegDiagram-XKGWAZYB-C1Dclbzj.js → pegDiagram-XKGWAZYB-CrOEi00T.js} +1 -1
  165. package/dashboard/assets/pie-WAS4IAKB-Dn9_tpQT.js +1 -0
  166. package/dashboard/assets/{pieDiagram-E7YTZNPT-Cd7XwYo5.js → pieDiagram-E7YTZNPT-D-niUkzc.js} +1 -1
  167. package/dashboard/assets/{quadrantDiagram-AXDQQJYC-CaS-GQ4X.js → quadrantDiagram-AXDQQJYC-CJOTiG5V.js} +1 -1
  168. package/dashboard/assets/radar-RG4KPBEZ-DIIVz4e8.js +1 -0
  169. package/dashboard/assets/railroad-74A4TZTK-1kiqDEID.js +1 -0
  170. package/dashboard/assets/railroad-abnf-HS5TGJTU-DK6rQPZR.js +1 -0
  171. package/dashboard/assets/railroad-ebnf-LZEXJU2U-C6cOgYW4.js +1 -0
  172. package/dashboard/assets/railroad-peg-WCYAUIDC-CQ3ptKef.js +1 -0
  173. package/dashboard/assets/{railroadDiagram-O6MQD6OU-BeesTrqn.js → railroadDiagram-O6MQD6OU-nEfkpa-m.js} +1 -1
  174. package/dashboard/assets/{requirementDiagram-BXWQKSXE-IjyK0DhW.js → requirementDiagram-BXWQKSXE-CdFMY8tG.js} +1 -1
  175. package/dashboard/assets/{sankeyDiagram-P5KCCOFB-DmIluQqo.js → sankeyDiagram-P5KCCOFB-C0KxrFYv.js} +1 -1
  176. package/dashboard/assets/{sequenceDiagram-WJ2MYXX4-CUp8ZjTc.js → sequenceDiagram-WJ2MYXX4-DeZ5ATiu.js} +2 -2
  177. package/dashboard/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  178. package/dashboard/assets/src-Cg-chcoE.js +1 -0
  179. package/dashboard/assets/{stateDiagram-D77RDMKH-Dy9TQb8P.js → stateDiagram-D77RDMKH-B9MwWL5B.js} +1 -1
  180. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-SucFndhx.js +1 -0
  181. package/dashboard/assets/swimlanes-42K2YHIH-DB--fwQE.js +1 -0
  182. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-BzH-rIaK.js +8 -0
  183. package/dashboard/assets/{timeline-definition-24CTP7MA-BGdXW-iY.js → timeline-definition-24CTP7MA-DLkkTbWb.js} +1 -1
  184. package/dashboard/assets/treeView-Q6P3EWNA-XkZ9rl9H.js +1 -0
  185. package/dashboard/assets/treemap-WGGIJYW6-JCtVKxCE.js +1 -0
  186. package/dashboard/assets/{vennDiagram-4TSXK5OY-DzKWHJsl.js → vennDiagram-4TSXK5OY-DEb-x29Z.js} +1 -1
  187. package/dashboard/assets/wardley-WFR3VGLG-DhI7ROY3.js +1 -0
  188. package/dashboard/assets/{wardleyDiagram-VM6X3IG4-DGsjYmNJ.js → wardleyDiagram-VM6X3IG4-KNckudc5.js} +1 -1
  189. package/dashboard/assets/{xychartDiagram-S5SC5T6Z-C7_T_tWt.js → xychartDiagram-S5SC5T6Z-D4c0ynCk.js} +1 -1
  190. package/dashboard/index.html +13 -2
  191. package/package.json +2 -5
  192. package/worker-assets/demo-target/README.md +7 -3
  193. package/chunks/chunk-2XGBEH53.js +0 -4304
  194. package/chunks/chunk-4ROZFLSR.js +0 -279
  195. package/chunks/chunk-56UTQKXO.js +0 -56
  196. package/chunks/chunk-BPU6M42R.js +0 -77
  197. package/chunks/chunk-H5QURBBK.js +0 -1123
  198. package/chunks/chunk-IIBNQTOK.js +0 -1532
  199. package/chunks/chunk-NJLKFC66.js +0 -4790
  200. package/chunks/chunk-OOMBOLAF.js +0 -295
  201. package/chunks/chunk-VIT5ALXF.js +0 -4054
  202. package/chunks/chunk-VU7V2SDW.js +0 -284
  203. package/chunks/chunk-W624J7NF.js +0 -117
  204. package/chunks/chunk-YSQWZ67M.js +0 -6027
  205. package/chunks/dashboard-5HDSNBAU.js +0 -76
  206. package/chunks/eval-runner-A2DIGVP7.js +0 -31
  207. package/chunks/hunt-scan-W246VWJC.js +0 -40
  208. package/chunks/managed-operation-6R2QPPW5.js +0 -60
  209. package/chunks/orchestrate-OBS37FWQ.js +0 -63
  210. package/chunks/run-MU3MFL2Z.js +0 -28242
  211. package/chunks/service-plugins-5B23PWXC.js +0 -64
  212. package/dashboard/assets/architecture-7GRP2DOG-z5EHYkyH.js +0 -1
  213. package/dashboard/assets/architectureDiagram-5GKGNRK7-ewtXpjR_.js +0 -36
  214. package/dashboard/assets/channel-CuYjfiC5.js +0 -1
  215. package/dashboard/assets/chunk-DU6HZSFF-3M37ulcO.js +0 -127
  216. package/dashboard/assets/classDiagram-ZZMXUADV-DCuOrWUV.js +0 -1
  217. package/dashboard/assets/classDiagram-v2-VYDZK3BY-DCuOrWUV.js +0 -1
  218. package/dashboard/assets/common-C6snVPsk.js +0 -5
  219. package/dashboard/assets/cose-bilkent-JH36ORCC-BLGcaZHk.js +0 -1
  220. package/dashboard/assets/cynefin-OW5HDTMX-DbZMK00I.js +0 -1
  221. package/dashboard/assets/cytoscape.esm-CGd-uY3x.js +0 -321
  222. package/dashboard/assets/dagre-GXQ25YYZ-CRk9qfSG.js +0 -4
  223. package/dashboard/assets/dagre-PrKaheQc.js +0 -1
  224. package/dashboard/assets/eventmodeling-NTZA5JFV-D_3ez4Gv.js +0 -1
  225. package/dashboard/assets/flowDiagram-HODETNUW-D2boyYEd.js +0 -1
  226. package/dashboard/assets/gitGraph-4MIJSDKK-DFOQYwXc.js +0 -1
  227. package/dashboard/assets/info-A6RAGUB7-DeednLoB.js +0 -1
  228. package/dashboard/assets/linear-naZZ1pHk.js +0 -1
  229. package/dashboard/assets/mermaid-parser.core-CPvd4cEx.js +0 -7
  230. package/dashboard/assets/operations-BwCzhVnT.js +0 -130
  231. package/dashboard/assets/operations-QjKT0Hwi.css +0 -1
  232. package/dashboard/assets/packet-AYTQ26CC-DDQbkT9I.js +0 -1
  233. package/dashboard/assets/pie-WAS4IAKB-LpU4ULAs.js +0 -1
  234. package/dashboard/assets/radar-RG4KPBEZ-CcxW3NJm.js +0 -1
  235. package/dashboard/assets/railroad-74A4TZTK-9P5Rl8fP.js +0 -1
  236. package/dashboard/assets/railroad-abnf-HS5TGJTU-CSfpwjna.js +0 -1
  237. package/dashboard/assets/railroad-ebnf-LZEXJU2U-D6R5qzr-.js +0 -1
  238. package/dashboard/assets/railroad-peg-WCYAUIDC-DKEX7ITG.js +0 -1
  239. package/dashboard/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
  240. package/dashboard/assets/src-r61wDjcA.js +0 -1
  241. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-CQb0ZtPr.js +0 -1
  242. package/dashboard/assets/swimlanes-42K2YHIH-CZuDV7V5.js +0 -1
  243. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-BxgWMq8X.js +0 -8
  244. package/dashboard/assets/treeView-Q6P3EWNA-DlRrayjM.js +0 -1
  245. package/dashboard/assets/treemap-WGGIJYW6-C6UqLKfI.js +0 -1
  246. package/dashboard/assets/wardley-WFR3VGLG-thmyHKb0.js +0 -1
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  getFindingPriority
6
- } from "./chunk-GXXX7AGH.js";
6
+ } from "./chunk-GYEYTNHK.js";
7
7
 
8
8
  // packages/core/dist/disclose/cwe.js
9
9
  var CWE_MAP = {
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  VERSION
6
- } from "./chunk-GXXX7AGH.js";
6
+ } from "./chunk-GYEYTNHK.js";
7
7
 
8
8
  // packages/cli/src/tui/runtime.ts
9
9
  function getReleaseChannel(env = process.env) {
@@ -8,7 +8,7 @@ import {
8
8
  osecDB,
9
9
  repairOsecDatabase,
10
10
  resetOsecDatabase
11
- } from "./chunk-BMDG6T7D.js";
11
+ } from "./chunk-72PU46MS.js";
12
12
 
13
13
  // packages/cli/src/commands/db.ts
14
14
  import { randomUUID } from "node:crypto";
@@ -4,15 +4,16 @@ const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  analyzeFindingForKnownMarkers,
6
6
  detectKnownMarkers,
7
+ evidenceKindForFinding,
7
8
  require_dist
8
- } from "./chunk-IXT64DV5.js";
9
+ } from "./chunk-XPDJE537.js";
9
10
  import {
10
11
  extractFileRefs,
11
12
  redactSensitiveHeaders
12
- } from "./chunk-CGBDEST2.js";
13
+ } from "./chunk-VJBEB2K6.js";
13
14
  import {
14
15
  getFindingPriority
15
- } from "./chunk-GXXX7AGH.js";
16
+ } from "./chunk-GYEYTNHK.js";
16
17
  import {
17
18
  __toESM
18
19
  } from "./chunk-VCSFCHAJ.js";
@@ -790,99 +791,6 @@ function isPubliclyDisclosed(record) {
790
791
  return PUBLIC_STATUSES.has(record.status);
791
792
  }
792
793
 
793
- // packages/core/dist/triage/can-auto-suppress.js
794
- var PROTECTED_SEVERITIES = /* @__PURE__ */ new Set([
795
- "critical",
796
- "high"
797
- ]);
798
- var HIGH_IMPACT_CATEGORIES = /* @__PURE__ */ new Set([
799
- // Remote code / command / code execution
800
- "command-injection",
801
- "code-injection",
802
- // Injection into the data store
803
- "sql-injection",
804
- // Unsafe deserialization is a classic RCE primitive
805
- "unsafe-deserialization",
806
- // Server-side request forgery (pivot / internal network reach)
807
- "ssrf",
808
- // Arbitrary file read/write
809
- "path-traversal",
810
- // Memory corruption / binary / kernel classes
811
- "heap-overflow",
812
- "out-of-bounds-read",
813
- "out-of-bounds-write",
814
- "use-after-free",
815
- "stack-buffer-overflow",
816
- "integer-overflow",
817
- "type-confusion",
818
- "double-free",
819
- "format-string",
820
- "uninitialized-memory",
821
- "race-condition",
822
- "toctou",
823
- // Supply-chain compromise (known-vulnerable / malicious package)
824
- "known-vulnerable-package",
825
- "supply-chain",
826
- // Prototype-pollution gadget → auth bypass / RCE when chained. We actively
827
- // disclose these (e.g. the jsonwebtoken verify() gadget), so they must never
828
- // be auto-dropped on a score alone.
829
- "prototype-pollution",
830
- // Cryptographic misuse — hardcoded keys/IVs, JWT alg-confusion (alg=none /
831
- // HS-vs-RS), and predictable RNG for secrets are direct key-leak / auth-bypass
832
- // primitives, so the class is protected from score-only auto-drop.
833
- "crypto-misuse",
834
- // AI-system adversarial classes — the core 0 "adversarial reliability"
835
- // thesis (authorization-boundary break, unsafe tool use, data exfiltration,
836
- // prompt hijack). A missed one of these is a disclosure-grade loss.
837
- "prompt-injection",
838
- "data-exfiltration",
839
- "tool-misuse"
840
- ]);
841
- function canAutoSuppressDetailed(finding) {
842
- if (PROTECTED_SEVERITIES.has(finding.severity)) {
843
- return {
844
- canSuppress: false,
845
- guard: "high_severity",
846
- reason: `severity=${finding.severity} is disclosure-grade; routed to verification instead of auto-drop`
847
- };
848
- }
849
- if (HIGH_IMPACT_CATEGORIES.has(finding.category)) {
850
- return {
851
- canSuppress: false,
852
- guard: "high_impact_class",
853
- reason: `category=${finding.category} is a high-impact class; routed to verification instead of auto-drop`
854
- };
855
- }
856
- return {
857
- canSuppress: true,
858
- reason: `severity=${finding.severity}, category=${finding.category} eligible for score/heuristic auto-suppression`
859
- };
860
- }
861
-
862
- // packages/core/dist/triage/verify-verdict.js
863
- var REPRODUCING_LAYERS = /* @__PURE__ */ new Set(["poc_gen", "pov_gate", "oracle"]);
864
- function evidenceKindForFinding(finding) {
865
- const hasPocSteps = Array.isArray(finding.pocSteps) && finding.pocSteps.length > 0;
866
- const reproduced = hasPocSteps && (finding.layerVerdicts ?? []).some((v) => v.verdict === "pass" && REPRODUCING_LAYERS.has(v.layer));
867
- return reproduced ? "reproduced-poc" : "source-only";
868
- }
869
- function outcomeOf(verdict) {
870
- return typeof verdict === "string" ? verdict : verdict.verdict;
871
- }
872
- function isDisclosureWorthy(finding, verdict) {
873
- if (outcomeOf(verdict) !== "rejected") {
874
- return {
875
- keep: true,
876
- reason: `verdict=${outcomeOf(verdict)}: not a rejection \u2014 finding kept`
877
- };
878
- }
879
- const guard = canAutoSuppressDetailed(finding);
880
- if (guard.canSuppress) {
881
- return { keep: false, reason: guard.reason };
882
- }
883
- return { keep: true, guard: guard.guard, reason: guard.reason };
884
- }
885
-
886
794
  // packages/core/dist/disclose/evidence-pack.js
887
795
  var UnreproducedFindingError = class extends Error {
888
796
  findingId;
@@ -1284,9 +1192,6 @@ export {
1284
1192
  createDisclosureRecord,
1285
1193
  transition,
1286
1194
  isPubliclyDisclosed,
1287
- canAutoSuppressDetailed,
1288
- evidenceKindForFinding,
1289
- isDisclosureWorthy,
1290
1195
  UnreproducedFindingError,
1291
1196
  assembleEvidencePack,
1292
1197
  renderVendorNotificationMarkdown,
@@ -3,13 +3,13 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  createJournalWriter
6
- } from "./chunk-3LPBJMHB.js";
6
+ } from "./chunk-LRD5N2TQ.js";
7
7
  import {
8
8
  verifyKernelFinding
9
- } from "./chunk-XA2IBHPB.js";
9
+ } from "./chunk-B7XL6RON.js";
10
10
  import {
11
11
  homeStateDir
12
- } from "./chunk-GXXX7AGH.js";
12
+ } from "./chunk-GYEYTNHK.js";
13
13
 
14
14
  // packages/core/dist/cve/adapt-loop.js
15
15
  import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
@@ -3,13 +3,13 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  eventBus
6
- } from "./chunk-5PFRE522.js";
6
+ } from "./chunk-ULRLUXSS.js";
7
7
  import {
8
8
  redactAuthHeaders
9
- } from "./chunk-CGBDEST2.js";
9
+ } from "./chunk-VJBEB2K6.js";
10
10
  import {
11
11
  ScopePolicy
12
- } from "./chunk-QNRYOJEB.js";
12
+ } from "./chunk-RZZ6VPRY.js";
13
13
  import {
14
14
  allowlistedChildEnv,
15
15
  sanitizedEnv
@@ -18,10 +18,10 @@ import {
18
18
  VERSION,
19
19
  cloudStateDir,
20
20
  homeStateDir
21
- } from "./chunk-GXXX7AGH.js";
21
+ } from "./chunk-GYEYTNHK.js";
22
22
  import {
23
23
  external_exports
24
- } from "./chunk-VIT5ALXF.js";
24
+ } from "./chunk-5XOYTAOK.js";
25
25
 
26
26
  // packages/core/dist/telemetry/analytics-level.js
27
27
  var LEVEL_ORDER = {
@@ -54,7 +54,7 @@ function resolveAnalyticsLevel(env = process.env) {
54
54
  return "off";
55
55
  const raw = env[ANALYTICS_LEVEL_ENV];
56
56
  if (typeof raw !== "string")
57
- return "off";
57
+ return "usage";
58
58
  const normalized = raw.trim().toLowerCase();
59
59
  return isAnalyticsLevel(normalized) ? normalized : "off";
60
60
  }
@@ -8107,6 +8107,99 @@ function errMessage(err) {
8107
8107
  }
8108
8108
  }
8109
8109
 
8110
+ // packages/core/dist/triage/can-auto-suppress.js
8111
+ var PROTECTED_SEVERITIES = /* @__PURE__ */ new Set([
8112
+ "critical",
8113
+ "high"
8114
+ ]);
8115
+ var HIGH_IMPACT_CATEGORIES = /* @__PURE__ */ new Set([
8116
+ // Remote code / command / code execution
8117
+ "command-injection",
8118
+ "code-injection",
8119
+ // Injection into the data store
8120
+ "sql-injection",
8121
+ // Unsafe deserialization is a classic RCE primitive
8122
+ "unsafe-deserialization",
8123
+ // Server-side request forgery (pivot / internal network reach)
8124
+ "ssrf",
8125
+ // Arbitrary file read/write
8126
+ "path-traversal",
8127
+ // Memory corruption / binary / kernel classes
8128
+ "heap-overflow",
8129
+ "out-of-bounds-read",
8130
+ "out-of-bounds-write",
8131
+ "use-after-free",
8132
+ "stack-buffer-overflow",
8133
+ "integer-overflow",
8134
+ "type-confusion",
8135
+ "double-free",
8136
+ "format-string",
8137
+ "uninitialized-memory",
8138
+ "race-condition",
8139
+ "toctou",
8140
+ // Supply-chain compromise (known-vulnerable / malicious package)
8141
+ "known-vulnerable-package",
8142
+ "supply-chain",
8143
+ // Prototype-pollution gadget → auth bypass / RCE when chained. We actively
8144
+ // disclose these (e.g. the jsonwebtoken verify() gadget), so they must never
8145
+ // be auto-dropped on a score alone.
8146
+ "prototype-pollution",
8147
+ // Cryptographic misuse — hardcoded keys/IVs, JWT alg-confusion (alg=none /
8148
+ // HS-vs-RS), and predictable RNG for secrets are direct key-leak / auth-bypass
8149
+ // primitives, so the class is protected from score-only auto-drop.
8150
+ "crypto-misuse",
8151
+ // AI-system adversarial classes — the core 0 "adversarial reliability"
8152
+ // thesis (authorization-boundary break, unsafe tool use, data exfiltration,
8153
+ // prompt hijack). A missed one of these is a disclosure-grade loss.
8154
+ "prompt-injection",
8155
+ "data-exfiltration",
8156
+ "tool-misuse"
8157
+ ]);
8158
+ function canAutoSuppressDetailed(finding) {
8159
+ if (PROTECTED_SEVERITIES.has(finding.severity)) {
8160
+ return {
8161
+ canSuppress: false,
8162
+ guard: "high_severity",
8163
+ reason: `severity=${finding.severity} is disclosure-grade; routed to verification instead of auto-drop`
8164
+ };
8165
+ }
8166
+ if (HIGH_IMPACT_CATEGORIES.has(finding.category)) {
8167
+ return {
8168
+ canSuppress: false,
8169
+ guard: "high_impact_class",
8170
+ reason: `category=${finding.category} is a high-impact class; routed to verification instead of auto-drop`
8171
+ };
8172
+ }
8173
+ return {
8174
+ canSuppress: true,
8175
+ reason: `severity=${finding.severity}, category=${finding.category} eligible for score/heuristic auto-suppression`
8176
+ };
8177
+ }
8178
+
8179
+ // packages/core/dist/triage/verify-verdict.js
8180
+ var REPRODUCING_LAYERS = /* @__PURE__ */ new Set(["poc_gen", "pov_gate", "oracle"]);
8181
+ function evidenceKindForFinding(finding) {
8182
+ const hasPocSteps = Array.isArray(finding.pocSteps) && finding.pocSteps.length > 0;
8183
+ const reproduced = hasPocSteps && (finding.layerVerdicts ?? []).some((v) => v.verdict === "pass" && REPRODUCING_LAYERS.has(v.layer));
8184
+ return reproduced ? "reproduced-poc" : "source-only";
8185
+ }
8186
+ function outcomeOf(verdict) {
8187
+ return typeof verdict === "string" ? verdict : verdict.verdict;
8188
+ }
8189
+ function isDisclosureWorthy(finding, verdict) {
8190
+ if (outcomeOf(verdict) !== "rejected") {
8191
+ return {
8192
+ keep: true,
8193
+ reason: `verdict=${outcomeOf(verdict)}: not a rejection \u2014 finding kept`
8194
+ };
8195
+ }
8196
+ const guard = canAutoSuppressDetailed(finding);
8197
+ if (guard.canSuppress) {
8198
+ return { keep: false, reason: guard.reason };
8199
+ }
8200
+ return { keep: true, guard: guard.guard, reason: guard.reason };
8201
+ }
8202
+
8110
8203
  export {
8111
8204
  require_dist,
8112
8205
  hasKnownMarkerText,
@@ -8121,5 +8214,8 @@ export {
8121
8214
  resolveUrl,
8122
8215
  mergePersonaHeaders,
8123
8216
  evaluateExpect,
8124
- aggregateVerdict
8217
+ aggregateVerdict,
8218
+ canAutoSuppressDetailed,
8219
+ evidenceKindForFinding,
8220
+ isDisclosureWorthy
8125
8221
  };
@@ -3,13 +3,13 @@ import { createRequire as __0CreateRequire } from "node:module";
3
3
  const require = __0CreateRequire(import.meta.url);
4
4
  import {
5
5
  isAdmittedSmolvmWorkbench
6
- } from "./chunk-PVJUPIQG.js";
6
+ } from "./chunk-XOVYV7TT.js";
7
7
  import {
8
8
  isScopeEnforcementEnabled
9
- } from "./chunk-QNRYOJEB.js";
9
+ } from "./chunk-RZZ6VPRY.js";
10
10
  import {
11
11
  external_exports
12
- } from "./chunk-VIT5ALXF.js";
12
+ } from "./chunk-5XOYTAOK.js";
13
13
 
14
14
  // packages/core/dist/bench/improvement-promotion.js
15
15
  import { createHash } from "node:crypto";
@@ -184,7 +184,7 @@ function verifyImprovementLedger(entries) {
184
184
  // packages/core/dist/improvement/config.js
185
185
  import { existsSync, readFileSync, realpathSync } from "node:fs";
186
186
  import { homedir } from "node:os";
187
- import { isAbsolute, resolve, sep } from "node:path";
187
+ import { basename, dirname, isAbsolute, resolve, sep } from "node:path";
188
188
  var relativePath = external_exports.string().min(1).max(512).refine((value) => !isAbsolute(value) && !value.includes("\\") && !value.includes("\0") && value !== "." && value.split("/").every((part) => part !== ".." && part !== "" && part !== "."), "must be a normalized relative file or directory path (not the entire workspace)");
189
189
  var argv = external_exports.array(external_exports.string().max(8192).refine((value) => !value.includes("\0"))).min(1).max(128).refine((value) => value[0].length > 0, "executable must not be empty");
190
190
  var finitePositive = external_exports.number().finite().positive();
@@ -200,11 +200,17 @@ var schema = external_exports.object({
200
200
  kind: external_exports.enum(["source", "skill", "router", "lens"]).default("source"),
201
201
  command: argv,
202
202
  buildCommand: argv.optional(),
203
+ observationStorePath: external_exports.string().min(1).max(4096).optional(),
203
204
  cases: external_exports.array(external_exports.object({
204
205
  id: external_exports.string().min(1).max(128),
205
206
  lane: external_exports.enum(["development", "held-out", "negative-control"]),
206
207
  input: external_exports.unknown(),
207
- expected: external_exports.unknown()
208
+ expected: external_exports.unknown(),
209
+ curation: external_exports.object({
210
+ observationId: external_exports.string().regex(/^[a-f0-9]{64}$/),
211
+ approvalDigest: external_exports.string().regex(/^sha256:[a-f0-9]{64}$/),
212
+ fixtureDigest: external_exports.string().regex(/^(?:sha256:)?[a-f0-9]{64}$/)
213
+ }).strict().optional()
208
214
  }).strict()).min(3).max(1e3),
209
215
  repeats: external_exports.number().int().min(2).max(20).default(3),
210
216
  maxIterations: external_exports.number().int().min(1).max(100).default(3),
@@ -229,12 +235,24 @@ var schema = external_exports.object({
229
235
  minimumHeldOutLift: finitePositive.max(1).default(DEFAULT_IMPROVEMENT_PROMOTION_POLICY.minimumHeldOutLift),
230
236
  maximumNegativeControlFpDelta: external_exports.literal(0).default(0),
231
237
  maximumCostMultiplier: finitePositive.max(10).default(DEFAULT_IMPROVEMENT_PROMOTION_POLICY.maximumCostMultiplier)
232
- }).strict().default({}),
238
+ }).strict().prefault({}),
233
239
  safety: external_exports.object({
234
240
  enabled: external_exports.boolean().default(false),
235
- holdoutExposureLimit: external_exports.number().int().min(1).max(1e6)
241
+ holdoutExposureLimit: external_exports.number().int().min(1).max(1e6),
242
+ workerModel: external_exports.object({
243
+ provider: external_exports.string().min(1).max(128),
244
+ model: external_exports.string().min(1).max(256),
245
+ maxCostUsdPerExecution: finitePositive.max(1e3)
246
+ }).strict().optional()
236
247
  }).strict().optional(),
237
- maxAlternativeParents: external_exports.number().int().min(0).max(10).optional()
248
+ maxAlternativeParents: external_exports.number().int().min(0).max(10).optional(),
249
+ retentionPolicy: external_exports.object({
250
+ profileId: external_exports.string().min(1).max(128),
251
+ version: external_exports.number().int().min(1),
252
+ criticalCaseIds: external_exports.array(external_exports.string().min(1).max(128)).min(1).max(128),
253
+ previousProfileDigest: external_exports.string().regex(/^sha256:[a-f0-9]{64}$/).optional(),
254
+ rotationApprovalRef: external_exports.string().min(1).max(512).optional()
255
+ }).strict().optional()
238
256
  }).strict();
239
257
  function canonicalEvolutionJson(value) {
240
258
  if (value === null || typeof value === "string" || typeof value === "boolean")
@@ -248,8 +266,27 @@ function canonicalEvolutionJson(value) {
248
266
  }
249
267
  throw new Error("evolution cases must contain finite JSON values only");
250
268
  }
269
+ function physicalProspectivePath(path) {
270
+ let cursor = path;
271
+ const suffix = [];
272
+ while (!existsSync(cursor)) {
273
+ const parent = dirname(cursor);
274
+ if (parent === cursor)
275
+ throw new Error("cannot resolve evolution path authority");
276
+ suffix.unshift(basename(cursor));
277
+ cursor = parent;
278
+ }
279
+ return resolve(realpathSync(cursor), ...suffix);
280
+ }
251
281
  function parseEvolutionConfig(raw, baseDir = process.cwd()) {
252
282
  const parsed = schema.parse(raw);
283
+ if (parsed.safety?.workerModel && !parsed.safety.enabled) {
284
+ throw new Error("model-backed evolution workers require enabled durable safety accounting");
285
+ }
286
+ if (parsed.cases.some((entry) => entry.curation) && !parsed.observationStorePath)
287
+ throw new Error("curated fixtures require an authoritative observation store");
288
+ if (parsed.observationStorePath)
289
+ parsed.observationStorePath = resolve(baseDir, parsed.observationStorePath);
253
290
  const admitted = isAdmittedSmolvmWorkbench();
254
291
  if (admitted) {
255
292
  if (parsed.imageArchive)
@@ -286,6 +323,17 @@ function parseEvolutionConfig(raw, baseDir = process.cwd()) {
286
323
  throw new Error(`${lane} requires at least ${parsed.promotionPolicy.minimumCases} distinct cases`);
287
324
  }
288
325
  }
326
+ if (parsed.retentionPolicy) {
327
+ const ids = parsed.retentionPolicy.criticalCaseIds;
328
+ if (new Set(ids).size !== ids.length)
329
+ throw new Error("retention panel contains duplicate cases");
330
+ for (const id of ids) {
331
+ const fixture = parsed.cases.find((entry) => entry.id === id);
332
+ if (!fixture || fixture.lane === "development") {
333
+ throw new Error("retention panel must reference existing sealed held-out or negative-control cases");
334
+ }
335
+ }
336
+ }
289
337
  for (const edit of parsed.editablePaths) {
290
338
  if (!parsed.sourcePaths.some((source) => edit === source || edit.startsWith(`${source}/`))) {
291
339
  throw new Error(`editable path ${edit} is not inside a selected source path`);
@@ -297,6 +345,11 @@ function parseEvolutionConfig(raw, baseDir = process.cwd()) {
297
345
  throw new Error("evolution store cannot be the source workspace");
298
346
  for (const selected of parsed.sourcePaths) {
299
347
  const source = resolve(sourceRoot, selected);
348
+ const observationStore = parsed.observationStorePath && physicalProspectivePath(parsed.observationStorePath);
349
+ const physicalSource = observationStore ? physicalProspectivePath(source) : source;
350
+ if (observationStore && (observationStore === physicalSource || observationStore.startsWith(`${physicalSource}${sep}`))) {
351
+ throw new Error("private observation queue cannot overlap selected model-readable source paths");
352
+ }
300
353
  if (storePath === source || storePath.startsWith(`${source}/`) || source.startsWith(`${storePath}/`)) {
301
354
  throw new Error("evolution store and selected source paths must not overlap");
302
355
  }
@@ -624,7 +677,7 @@ async function evaluateVerificationSpec(spec, repoRoot) {
624
677
  // packages/core/dist/improvement/artifacts.js
625
678
  import { randomUUID } from "node:crypto";
626
679
  import { closeSync, constants, fchmodSync, fstatSync, fsyncSync, linkSync, lstatSync, mkdirSync, openSync, readFileSync as readFileSync2, realpathSync as realpathSync2, unlinkSync, writeFileSync } from "node:fs";
627
- import { dirname, isAbsolute as isAbsolute3, join as join2, parse, resolve as resolve3, sep as sep3 } from "node:path";
680
+ import { dirname as dirname2, isAbsolute as isAbsolute3, join as join2, parse, resolve as resolve3, sep as sep3 } from "node:path";
628
681
  var MAX_ARTIFACT_BYTES = 128 * 1024 * 1024;
629
682
  function hasCode(error, code) {
630
683
  return error instanceof Error && "code" in error && error.code === code;
@@ -686,7 +739,7 @@ function ensureEvolutionDirectory(path) {
686
739
  return inspectDirectories(path, true);
687
740
  }
688
741
  function readEvolutionArtifact(path) {
689
- inspectDirectories(dirname(path), false);
742
+ inspectDirectories(dirname2(path), false);
690
743
  const fd = openSync(path, constants.O_RDONLY | constants.O_NOFOLLOW);
691
744
  try {
692
745
  const stat = fstatSync(fd);
@@ -704,7 +757,7 @@ function publishEvolutionArtifact(path, value) {
704
757
  const content = canonicalEvolutionJson(value);
705
758
  if (Buffer.byteLength(content) > MAX_ARTIFACT_BYTES)
706
759
  throw new Error("evolution artifact exceeds retention limit");
707
- const directory = ensureEvolutionDirectory(dirname(path));
760
+ const directory = ensureEvolutionDirectory(dirname2(path));
708
761
  const temporary = join2(directory, `.artifact-${randomUUID()}.tmp`);
709
762
  const fd = openSync(temporary, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 384);
710
763
  try {
@@ -737,7 +790,7 @@ function publishEvolutionArtifact(path, value) {
737
790
 
738
791
  // packages/core/dist/agent/apply-patch.js
739
792
  import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as readFileSync3, unlinkSync as unlinkSync2, writeFileSync as writeFileSync2 } from "node:fs";
740
- import { dirname as dirname2 } from "node:path";
793
+ import { dirname as dirname3 } from "node:path";
741
794
  var BEGIN = "*** Begin Patch";
742
795
  var END = "*** End Patch";
743
796
  function parsePatch(input) {
@@ -848,7 +901,7 @@ function applyPatchOps(ops, pathResolver) {
848
901
  if (!op.overwrite && existsSync2(abs)) {
849
902
  throw new Error(`apply_patch: Add File "${op.path}" failed \u2014 file already exists. Use "*** Replace File: ${op.path}" to overwrite.`);
850
903
  }
851
- mkdirSync2(dirname2(abs), { recursive: true });
904
+ mkdirSync2(dirname3(abs), { recursive: true });
852
905
  writeFileSync2(abs, op.contents, "utf-8");
853
906
  applied.push({ kind: "add", path: op.path });
854
907
  continue;
@@ -930,9 +983,20 @@ function applyOneHunk(lines, anchorIdx, hunk, logicalPath) {
930
983
  return { newLines, consumed: cursor - anchorIdx };
931
984
  }
932
985
 
986
+ // packages/core/dist/scope/local-source-boundary.js
987
+ import { AsyncLocalStorage } from "node:async_hooks";
988
+ import { realpathSync as realpathSync3 } from "node:fs";
989
+ var boundary = new AsyncLocalStorage();
990
+ function getLocalSourceBoundary() {
991
+ return boundary.getStore();
992
+ }
993
+ function withLocalSourceBoundary(root, run) {
994
+ return root === void 0 ? run() : boundary.run(realpathSync3(root), run);
995
+ }
996
+
933
997
  // packages/core/dist/agent/tools/scope-path.js
934
- import { lstatSync as lstatSync2, realpathSync as realpathSync3 } from "node:fs";
935
- import { basename, dirname as dirname3, isAbsolute as isAbsolute4, resolve as resolve4, sep as sep4 } from "node:path";
998
+ import { lstatSync as lstatSync2, realpathSync as realpathSync4 } from "node:fs";
999
+ import { basename as basename2, dirname as dirname4, isAbsolute as isAbsolute4, resolve as resolve4, sep as sep4 } from "node:path";
936
1000
  function pathEntryExists(path) {
937
1001
  try {
938
1002
  lstatSync2(path);
@@ -947,26 +1011,34 @@ function canonicalizePath(path) {
947
1011
  const missingSegments = [];
948
1012
  let existingPath = path;
949
1013
  while (!pathEntryExists(existingPath)) {
950
- const parent = dirname3(existingPath);
1014
+ const parent = dirname4(existingPath);
951
1015
  if (parent === existingPath) {
952
1016
  throw new Error(`Path does not have an existing parent: ${path}`);
953
1017
  }
954
- missingSegments.unshift(basename(existingPath));
1018
+ missingSegments.unshift(basename2(existingPath));
955
1019
  existingPath = parent;
956
1020
  }
957
- return resolve4(realpathSync3(existingPath), ...missingSegments);
1021
+ return resolve4(realpathSync4(existingPath), ...missingSegments);
958
1022
  }
959
1023
  function isScopedPath(scopePath, inputPath) {
960
- const root = realpathSync3(scopePath);
1024
+ const root = realpathSync4(scopePath);
961
1025
  const logicalCandidate = isAbsolute4(inputPath) ? resolve4(inputPath) : resolve4(root, inputPath);
962
1026
  const candidate = canonicalizePath(logicalCandidate);
963
- return candidate === root || candidate.startsWith(root + sep4);
1027
+ const prefix = root.endsWith(sep4) ? root : root + sep4;
1028
+ return candidate === root || candidate.startsWith(prefix);
964
1029
  }
965
1030
  function resolveScopedPath(scopePath, inputPath) {
1031
+ const boundary2 = getLocalSourceBoundary();
1032
+ if (boundary2) {
1033
+ const base = scopePath ? realpathSync4(scopePath) : process.cwd();
1034
+ const candidate = isAbsolute4(inputPath) ? resolve4(inputPath) : resolve4(base, inputPath);
1035
+ if (!isScopedPath(boundary2, candidate))
1036
+ throw new Error(`Path escapes the approved source folder: ${inputPath}`);
1037
+ }
966
1038
  if (isScopeEnforcementEnabled() && (!scopePath || !isScopedPath(scopePath, inputPath))) {
967
1039
  throw new Error(`Path escapes the allowed scope: ${inputPath}`);
968
1040
  }
969
- const root = scopePath ? realpathSync3(scopePath) : process.cwd();
1041
+ const root = scopePath ? realpathSync4(scopePath) : process.cwd();
970
1042
  const logicalCandidate = isAbsolute4(inputPath) ? resolve4(inputPath) : resolve4(root, inputPath);
971
1043
  return canonicalizePath(logicalCandidate);
972
1044
  }
@@ -986,5 +1058,7 @@ export {
986
1058
  evaluateVerificationSpec,
987
1059
  parsePatch,
988
1060
  applyPatchOps,
1061
+ getLocalSourceBoundary,
1062
+ withLocalSourceBoundary,
989
1063
  resolveScopedPath
990
1064
  };