@testmuai/kane-cli 0.8.13 → 0.8.14

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 (300) hide show
  1. package/dist/{ChatSurface-B6ZIO3JL.js → ChatSurface-AVL3TJA2.js} +3 -3
  2. package/dist/{ChromeProfilePicker-QSICCUMV.js → ChromeProfilePicker-WJZJOZ6Z.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-LLLNSKW2.js → CliFeedbackPrompt-65BQF5G5.js} +1 -1
  4. package/dist/{CliUploadProgress-N5IY66T2.js → CliUploadProgress-HEBZYKGN.js} +1 -1
  5. package/dist/{ConfigView-UQIRPENS.js → ConfigView-JEVQ2SO4.js} +1 -1
  6. package/dist/EvidenceViewOffer-5MB4ZXKM.js +2 -0
  7. package/dist/FolderPicker-SYFXH6D5.js +2 -0
  8. package/dist/{InfoBox-ZGSLEOPE.js → InfoBox-KM5DLBCV.js} +1 -1
  9. package/dist/{LinksBox-JFT44YUK.js → LinksBox-FQA36GTV.js} +1 -1
  10. package/dist/{ProfilesView-WZSPK3HF.js → ProfilesView-76KGHTMK.js} +1 -1
  11. package/dist/{ProjectPicker-SBBGVF4L.js → ProjectPicker-65YOU46H.js} +1 -1
  12. package/dist/{SaveSessionPrompt-F3563T3C.js → SaveSessionPrompt-QD6BNTWO.js} +1 -1
  13. package/dist/ScrollbackTap-QHJOFYMC.js +2 -0
  14. package/dist/SingleShotApp-U54ETXS3.js +2 -0
  15. package/dist/{SummaryBox-6N6NESLI.js → SummaryBox-N2B6DUDD.js} +1 -1
  16. package/dist/TestMdRunView-WA4TC5PT.js +2 -0
  17. package/dist/{TestrunEvidenceTable-JLJBJ76Q.js → TestrunEvidenceTable-3WLQVTF4.js} +1 -1
  18. package/dist/{WhoamiView-PNVUCWLB.js → WhoamiView-T26HA4ZZ.js} +1 -1
  19. package/dist/agent-parse-XMWVKCRD.js +2 -0
  20. package/dist/{app-download-NNB52ZRJ.js → app-download-XKZWFMEK.js} +1 -1
  21. package/dist/attach-target-V6LECVES.js +2 -0
  22. package/dist/{auth-JIDDELKY.js → auth-PPJANIMZ.js} +1 -1
  23. package/dist/{binary-LXYAW7WQ.js → binary-DKWWODT2.js} +1 -1
  24. package/dist/bind-62AZYFAY.js +15 -0
  25. package/dist/{bootstrap-THOC3SS7.js → bootstrap-6IJNZIPT.js} +1 -1
  26. package/dist/bridge-X5DEJL6F.js +2 -0
  27. package/dist/{changelog-BSMZXLTG.js → changelog-UTGJ7FSP.js} +1 -1
  28. package/dist/chat-committer-HDE3TP5I.js +2 -0
  29. package/dist/chat-controller-3EPK7UZG.js +2 -0
  30. package/dist/chunk-22QIVSQR.js +29 -0
  31. package/dist/{chunk-FNIL4G3V.js → chunk-2BFXT7VQ.js} +3 -3
  32. package/dist/{chunk-3FXNQTCE.js → chunk-2RMHDOP4.js} +1 -1
  33. package/dist/{chunk-7GUFVQOQ.js → chunk-3BHRGHIZ.js} +1 -1
  34. package/dist/{chunk-EEFZXZTZ.js → chunk-3IXEARDX.js} +1 -1
  35. package/dist/chunk-3N6IAVD5.js +7 -0
  36. package/dist/{chunk-I75FRXKE.js → chunk-3SPOJWRA.js} +1 -1
  37. package/dist/chunk-3YX3RQXO.js +2 -0
  38. package/dist/chunk-42FHKRPA.js +4 -0
  39. package/dist/{chunk-VYMMGWVO.js → chunk-4BBDKWM3.js} +1 -1
  40. package/dist/{chunk-J2UN2AHO.js → chunk-4K5XTIJ6.js} +1 -1
  41. package/dist/chunk-52WM3XYO.js +4 -0
  42. package/dist/{chunk-WUV3FJ7C.js → chunk-53MPG2J3.js} +1 -1
  43. package/dist/{chunk-R7QAS6LZ.js → chunk-55YDTPB7.js} +1 -1
  44. package/dist/{chunk-IDX3TOPY.js → chunk-5LJRZI7S.js} +1 -1
  45. package/dist/chunk-66MOZKD2.js +2 -0
  46. package/dist/{chunk-2X3TANEV.js → chunk-6F6YI3ZG.js} +1 -1
  47. package/dist/chunk-6LGED4FC.js +35 -0
  48. package/dist/chunk-73ULUGBM.js +5 -0
  49. package/dist/{chunk-F5AI3UVS.js → chunk-75I46VTM.js} +2 -2
  50. package/dist/{chunk-SEKJZOKW.js → chunk-7L25ZNNP.js} +1 -1
  51. package/dist/chunk-7O54QURK.js +2 -0
  52. package/dist/{chunk-XAM5E27U.js → chunk-7RAI77XD.js} +1 -1
  53. package/dist/{chunk-PWRIG6UB.js → chunk-AC7BPO4X.js} +1 -1
  54. package/dist/chunk-AHXOKBVE.js +7 -0
  55. package/dist/{chunk-DNNZ353O.js → chunk-ALCE5RLK.js} +1 -1
  56. package/dist/{chunk-AQWTK6IN.js → chunk-ARG56PJG.js} +1 -1
  57. package/dist/{chunk-33GXXC2L.js → chunk-B2ZGG7WM.js} +1 -1
  58. package/dist/{chunk-LAQBCZ5A.js → chunk-BAKJPQGU.js} +1 -1
  59. package/dist/{chunk-DIM5X2FR.js → chunk-BJYGWXVP.js} +1 -1
  60. package/dist/chunk-C74ABM24.js +2 -0
  61. package/dist/chunk-CGT4NFQN.js +8 -0
  62. package/dist/{chunk-EV64VI66.js → chunk-CRZUBDJ3.js} +1 -1
  63. package/dist/{chunk-EXLXV5OU.js → chunk-DA57DXCF.js} +1 -1
  64. package/dist/{chunk-PUM5J56E.js → chunk-EMSLJTYN.js} +1 -1
  65. package/dist/{chunk-YEZYO5QH.js → chunk-FFFB5BXL.js} +1 -1
  66. package/dist/{chunk-WIAZN7G4.js → chunk-FFVNISYH.js} +1 -1
  67. package/dist/chunk-FQNQVC5O.js +5 -0
  68. package/dist/{chunk-UF4JZXEE.js → chunk-GESG672R.js} +1 -1
  69. package/dist/{chunk-XL6HDWM3.js → chunk-GKZ2KVE6.js} +1 -1
  70. package/dist/chunk-GP7WD4UY.js +4 -0
  71. package/dist/{chunk-PYQS5ST6.js → chunk-GPIXV7AV.js} +2 -2
  72. package/dist/chunk-H6TNBKGR.js +5 -0
  73. package/dist/chunk-HOA4VWSD.js +5 -0
  74. package/dist/chunk-IE3OO5GI.js +2 -0
  75. package/dist/chunk-IICQ5KRD.js +5 -0
  76. package/dist/{chunk-K4SULRBL.js → chunk-IQ7GPETF.js} +1 -1
  77. package/dist/{chunk-3M2D7UUI.js → chunk-IQ7NGOAT.js} +1 -1
  78. package/dist/{chunk-TMRLBSIA.js → chunk-J7NRD4Q7.js} +1 -1
  79. package/dist/{chunk-FE6XRABM.js → chunk-JH6E632O.js} +1 -1
  80. package/dist/{chunk-XH2KDLZO.js → chunk-JJJSDDQ2.js} +1 -1
  81. package/dist/{chunk-BTBUIL4Q.js → chunk-JKX57HA7.js} +1 -1
  82. package/dist/{chunk-VJ3ES3RR.js → chunk-K7K23DIQ.js} +1 -1
  83. package/dist/chunk-KN65CUNT.js +15 -0
  84. package/dist/{chunk-CAO3XRA2.js → chunk-KOL6ZWOQ.js} +1 -1
  85. package/dist/{chunk-MCKBJIBB.js → chunk-KOPP4CJW.js} +1 -1
  86. package/dist/chunk-KZG4E5RM.js +2 -0
  87. package/dist/{chunk-J3Q63NFG.js → chunk-L4M7753M.js} +1 -1
  88. package/dist/{chunk-BJAHVN2F.js → chunk-L6MOO4WT.js} +1 -1
  89. package/dist/chunk-LBNADEQN.js +8 -0
  90. package/dist/{chunk-Q4YAJJPP.js → chunk-LL5DQO6V.js} +1 -1
  91. package/dist/chunk-LNV7C2YO.js +6 -0
  92. package/dist/{chunk-JX2CAVX6.js → chunk-LR5DJ6EN.js} +1 -1
  93. package/dist/{chunk-IZU5ND2C.js → chunk-M7DN6FO3.js} +1 -1
  94. package/dist/chunk-MLRO7OH3.js +9 -0
  95. package/dist/{chunk-DMLYUTS4.js → chunk-MNE5VMHT.js} +1 -1
  96. package/dist/{chunk-TDNM22BQ.js → chunk-N7ZRF5K3.js} +1 -1
  97. package/dist/{chunk-TXZ66K4Q.js → chunk-NBMLBCJ3.js} +1 -1
  98. package/dist/{chunk-KSLJOUH4.js → chunk-NDCRJXYF.js} +1 -1
  99. package/dist/{chunk-XS3HIVNS.js → chunk-NOLYYHVG.js} +1 -1
  100. package/dist/{chunk-IWVA37B6.js → chunk-O25AL4B7.js} +1 -1
  101. package/dist/{chunk-AIVOYTYQ.js → chunk-O2APH6TZ.js} +1 -1
  102. package/dist/{chunk-KAZGHWGK.js → chunk-O3XBIURC.js} +1 -1
  103. package/dist/{chunk-ZOSY2PJM.js → chunk-O5AS2ZIX.js} +1 -1
  104. package/dist/{chunk-DXFMELKC.js → chunk-O6U2HU5M.js} +1 -1
  105. package/dist/{chunk-NUWOQS6L.js → chunk-OH2NSBO6.js} +1 -1
  106. package/dist/{chunk-ARU6KAGY.js → chunk-OO5GMBVI.js} +1 -1
  107. package/dist/chunk-OPL2MIQG.js +2 -0
  108. package/dist/chunk-P3JUE2RM.js +17 -0
  109. package/dist/{chunk-D4G3SEBU.js → chunk-PGU64EWQ.js} +1 -1
  110. package/dist/{chunk-GILD6RGH.js → chunk-Q7XBMBMR.js} +1 -1
  111. package/dist/{chunk-OHK6V7JX.js → chunk-QJ5O27SJ.js} +1 -1
  112. package/dist/{chunk-KXUTO5WC.js → chunk-QPUVOVD7.js} +1 -1
  113. package/dist/{chunk-NM76SG3S.js → chunk-RBHQXWR7.js} +1 -1
  114. package/dist/{chunk-LWQNRZH3.js → chunk-RH6KFHJB.js} +1 -1
  115. package/dist/{chunk-FUP4AP6J.js → chunk-RQLU4NDG.js} +1 -1
  116. package/dist/{chunk-MXDWS7S4.js → chunk-SFTFHFG3.js} +7 -7
  117. package/dist/{chunk-4PARDPK2.js → chunk-SGHP44WS.js} +1 -1
  118. package/dist/{chunk-6AZNGOLH.js → chunk-SQDQADWD.js} +1 -1
  119. package/dist/{chunk-N2I23ANS.js → chunk-SX56MVUO.js} +1 -1
  120. package/dist/{chunk-O5U6EAL3.js → chunk-TCAHDVII.js} +1 -1
  121. package/dist/chunk-TNBF5OMZ.js +2 -0
  122. package/dist/chunk-TU6IMGWO.js +2 -0
  123. package/dist/{chunk-5G22NOZK.js → chunk-UHT5SVP5.js} +1 -1
  124. package/dist/{chunk-UZCSVEWP.js → chunk-UXH3RMQ7.js} +1 -1
  125. package/dist/{chunk-K2UEVCIJ.js → chunk-VNFCX2SH.js} +1 -1
  126. package/dist/{chunk-NU45ROHH.js → chunk-WBHSPN55.js} +2 -2
  127. package/dist/chunk-WILT62DP.js +16 -0
  128. package/dist/{chunk-QD2BUO5M.js → chunk-WOA7VCGA.js} +1 -1
  129. package/dist/{chunk-RN5ERSV2.js → chunk-WR42Q3HU.js} +1 -1
  130. package/dist/chunk-X5276I5H.js +9 -0
  131. package/dist/{chunk-477DYMXZ.js → chunk-X74PP5NJ.js} +1 -1
  132. package/dist/{chunk-KV5BOFPK.js → chunk-XGHMZJGI.js} +2 -2
  133. package/dist/{chunk-XS2LZFCH.js → chunk-YCH7H7JX.js} +1 -1
  134. package/dist/{chunk-7KIIM6H7.js → chunk-YHR2YAN5.js} +1 -1
  135. package/dist/chunk-YHVG7V3E.js +21 -0
  136. package/dist/chunk-YLQHY4A7.js +2 -0
  137. package/dist/{chunk-KGKJU27A.js → chunk-YYYQ5MVD.js} +1 -1
  138. package/dist/{chunk-W2UYUV47.js → chunk-ZA4M4O7E.js} +2 -2
  139. package/dist/chunk-ZKEOPIQ3.js +9 -0
  140. package/dist/chunk-ZUZ6QJRA.js +23 -0
  141. package/dist/{chunk-3SP4JVDN.js → chunk-ZWHPIR2Z.js} +2 -2
  142. package/dist/chunk-ZZTZJPT2.js +88 -0
  143. package/dist/committer-IYQPXG6C.js +2 -0
  144. package/dist/{config-BCGD2FEX.js → config-3AKWRTFS.js} +1 -1
  145. package/dist/cover-cmd-ZLAWMEC2.js +3 -0
  146. package/dist/{credentials-YNH5BU2Z.js → credentials-Q4WH5CBN.js} +1 -1
  147. package/dist/{deps-bundle-LOFI4DAJ.js → deps-bundle-RVZK6LZJ.js} +1 -1
  148. package/dist/{deps-resolve-GA6IPHVZ.js → deps-resolve-6F2U4TJP.js} +1 -1
  149. package/dist/design-committer-J57IAAA5.js +2 -0
  150. package/dist/dispatch-46BETGXY.js +2 -0
  151. package/dist/{doctor-W5TQBYB5.js → doctor-WRPG56HH.js} +1 -1
  152. package/dist/docx-convert-WPZS6OIC.js +2 -0
  153. package/dist/{dossier-Y6TJWFZU.js → dossier-UGJMYYAB.js} +1 -1
  154. package/dist/evidence-XWR32HWP.js +2 -0
  155. package/dist/evolve-cmd-27ZQN6YB.js +2 -0
  156. package/dist/explain-H5HJEDEF.js +2 -0
  157. package/dist/explain-cmd-JCJTXVZY.js +9 -0
  158. package/dist/{explain-cmd-XCRO4AS6.js → explain-cmd-R45I5MT7.js} +1 -1
  159. package/dist/extract-bind-D5BYYGYA.js +14 -0
  160. package/dist/{extract-cmd-7FKQJNS7.js → extract-cmd-CCYW7FIY.js} +3 -3
  161. package/dist/feeder-RSHMGW6B.js +2 -0
  162. package/dist/gaps-cmd-3VJKQ25D.js +3 -0
  163. package/dist/{generate-headless-OBMB5CSB.js → generate-headless-2M6UT3IK.js} +2 -2
  164. package/dist/headless-io-3A3BZVQ5.js +2 -0
  165. package/dist/index.js +188 -205
  166. package/dist/ingest-QGLVY7ND.js +2 -0
  167. package/dist/ingest-cmd-HVTUK264.js +2 -0
  168. package/dist/install-5WJLE7XT.js +2 -0
  169. package/dist/interactive-bind-OJCYNQPI.js +26 -0
  170. package/dist/lifecycle-cmd-GWFGUGTC.js +2 -0
  171. package/dist/{list-cmd-V3HJ5K4O.js → list-cmd-AXDW64OY.js} +1 -1
  172. package/dist/{list-commands-SH4HPFI4.js → list-commands-YNZ6EFIF.js} +1 -1
  173. package/dist/{locks-cmd-CSVSWY2Y.js → locks-cmd-67OHQZNV.js} +1 -1
  174. package/dist/logical-ids-DN6IZSUM.js +2 -0
  175. package/dist/login-flow-PRXFPRYZ.js +2 -0
  176. package/dist/maintenance-cmd-QEMK6YNV.js +2 -0
  177. package/dist/{mobile-prompts-UZTRJ3L7.js → mobile-prompts-OXHA5GHJ.js} +1 -1
  178. package/dist/{objective-variable-gate-3VUXNDCZ.js → objective-variable-gate-76GYUHEP.js} +1 -1
  179. package/dist/open-provider-E5VUGFNE.js +2 -0
  180. package/dist/pdf-convert-5H4HQNN3.js +2 -0
  181. package/dist/{persist-recorded-session-QMRY4DOF.js → persist-recorded-session-KWPH37HI.js} +1 -1
  182. package/dist/phase-seed-HKJ2EF7R.js +2 -0
  183. package/dist/pipeline-A2OGF4XW.js +2 -0
  184. package/dist/prepare-target-P6BWJZBZ.js +2 -0
  185. package/dist/readmodel-IBFRM6EO.js +2 -0
  186. package/dist/reconcile-cmd-V7TDYETT.js +2 -0
  187. package/dist/reconcile-deps-X6IGH4CA.js +4 -0
  188. package/dist/reconcile-engine-OGXSIE7O.js +2 -0
  189. package/dist/{recording-banner-7E75ERQJ.js → recording-banner-IZWN2XFY.js} +1 -1
  190. package/dist/records-TJJJWBUD.js +2 -0
  191. package/dist/registry-GOLIFVK5.js +2 -0
  192. package/dist/{require-project-folder-LBUYWQOF.js → require-project-folder-PEEUITK6.js} +1 -1
  193. package/dist/{resolve-run-intent-GHISMXLZ.js → resolve-run-intent-JGXXE45Y.js} +1 -1
  194. package/dist/{resolver-7JC5VZ4S.js → resolver-TY7XLJBN.js} +1 -1
  195. package/dist/revert-6BBBK3I4.js +2 -0
  196. package/dist/review-cmd-74YTPT7E.js +5 -0
  197. package/dist/run-DN4XARP2.js +2 -0
  198. package/dist/run-GRYWYKIH.js +2 -0
  199. package/dist/{run-test-md-5LPCKCW7.js → run-test-md-DFCKCQ4T.js} +2 -2
  200. package/dist/sessions-NH7WQWMX.js +2 -0
  201. package/dist/{sessions-cmd-VDQGRBEM.js → sessions-cmd-DV442ZCY.js} +1 -1
  202. package/dist/{skill-installer-YQPZZB7I.js → skill-installer-GRU3HOYF.js} +1 -1
  203. package/dist/{spawner-X2FOOONV.js → spawner-LNMD4NJF.js} +1 -1
  204. package/dist/store-guard-Q4MYZQHF.js +2 -0
  205. package/dist/structured-answers-NADW6D44.js +5 -0
  206. package/dist/sync-cmd-H6Y5EB3L.js +2 -0
  207. package/dist/sync-setup-THGRBKTA.js +2 -0
  208. package/dist/sync-setup-ui-RC727VK6.js +3 -0
  209. package/dist/tcg-generate-SZZ7MJXY.js +2 -0
  210. package/dist/testmd-actions-MRIUOOXO.js +2 -0
  211. package/dist/testmd-sync-UYVJ47BN.js +2 -0
  212. package/dist/token-refresh-KN5JK2U4.js +2 -0
  213. package/dist/{validate-basic-GTSVZFQI.js → validate-basic-RCBEELSB.js} +1 -1
  214. package/dist/{variable-receipt-IHQAYWMZ.js → variable-receipt-JHRW73Z6.js} +1 -1
  215. package/dist/verdicts-XFXDRND4.js +2 -0
  216. package/dist/{version-check-IPEPJZDX.js → version-check-Z774UWW3.js} +1 -1
  217. package/dist/{view-cmd-SXXNDZIC.js → view-cmd-I4LQGJ2X.js} +1 -1
  218. package/dist/walk-session-FP52IGLB.js +2 -0
  219. package/dist/with-telemetry-P6RUPWBH.js +2 -0
  220. package/package.json +12 -11
  221. package/dist/EvidenceViewOffer-AZRAILJQ.js +0 -2
  222. package/dist/FolderPicker-OJFR7AKZ.js +0 -2
  223. package/dist/ScrollbackTap-Q3IOKNMS.js +0 -2
  224. package/dist/SingleShotApp-72D5VVLE.js +0 -2
  225. package/dist/TestMdRunView-4OA52DA2.js +0 -2
  226. package/dist/bind-F36JFHUK.js +0 -12
  227. package/dist/bridge-KMDML2NB.js +0 -2
  228. package/dist/chat-committer-RAOIL2T6.js +0 -2
  229. package/dist/chat-controller-YJCNU76T.js +0 -2
  230. package/dist/chunk-4WOVHRI2.js +0 -15
  231. package/dist/chunk-54JZ6VEW.js +0 -4
  232. package/dist/chunk-5DT7PIGB.js +0 -5
  233. package/dist/chunk-6FCPS2VT.js +0 -4
  234. package/dist/chunk-6IAA644J.js +0 -9
  235. package/dist/chunk-6J635CRI.js +0 -5
  236. package/dist/chunk-AGRUULPT.js +0 -4
  237. package/dist/chunk-BZTWTYQQ.js +0 -6
  238. package/dist/chunk-CUSTYILP.js +0 -2
  239. package/dist/chunk-DBIBROYW.js +0 -5
  240. package/dist/chunk-I27YRAGO.js +0 -7
  241. package/dist/chunk-IAHKTEET.js +0 -2
  242. package/dist/chunk-IVQX3AKL.js +0 -4
  243. package/dist/chunk-K6RAOZHP.js +0 -4
  244. package/dist/chunk-KO3FL2XW.js +0 -26
  245. package/dist/chunk-L32DKFRQ.js +0 -16
  246. package/dist/chunk-LPDBTGO5.js +0 -21
  247. package/dist/chunk-N7Z7BQYO.js +0 -3
  248. package/dist/chunk-NVGBE2DR.js +0 -2
  249. package/dist/chunk-OS4VSIHT.js +0 -4
  250. package/dist/chunk-OTMAFCZK.js +0 -8
  251. package/dist/chunk-P5MJMM3X.js +0 -85
  252. package/dist/chunk-QQ5MHSSY.js +0 -2
  253. package/dist/chunk-T7DGNWI2.js +0 -17
  254. package/dist/chunk-UH2ZTX4E.js +0 -2
  255. package/dist/chunk-W3Z7AZNT.js +0 -4
  256. package/dist/chunk-XMTSHHYQ.js +0 -4
  257. package/dist/committer-C6UCDYMC.js +0 -2
  258. package/dist/cover-cmd-5LPHIOSI.js +0 -3
  259. package/dist/design-committer-UPC6NZUF.js +0 -2
  260. package/dist/dispatch-FRCPK3AZ.js +0 -2
  261. package/dist/docx-convert-BIV5T7F5.js +0 -2
  262. package/dist/evidence-FHO36EEV.js +0 -2
  263. package/dist/evolve-cmd-6RXLKERE.js +0 -2
  264. package/dist/explain-3HAZY7Q6.js +0 -2
  265. package/dist/explain-cmd-RMJPXD4U.js +0 -9
  266. package/dist/extract-bind-BFJPRNPQ.js +0 -10
  267. package/dist/feeder-IOR3XRNF.js +0 -2
  268. package/dist/gaps-cmd-FDJ3PT4C.js +0 -3
  269. package/dist/headless-io-66RG5NN5.js +0 -2
  270. package/dist/ingest-TTUQ7UDK.js +0 -2
  271. package/dist/ingest-cmd-AV66Q5LC.js +0 -2
  272. package/dist/install-SFJ2FFQ6.js +0 -2
  273. package/dist/interactive-bind-N5AQB26T.js +0 -25
  274. package/dist/lifecycle-cmd-KSMETBPP.js +0 -2
  275. package/dist/logical-ids-MLXAH45L.js +0 -2
  276. package/dist/login-flow-ODVWEPRU.js +0 -2
  277. package/dist/maintenance-cmd-VFYGKY3X.js +0 -2
  278. package/dist/pdf-convert-OZIRUADA.js +0 -2
  279. package/dist/phase-seed-BMOSAA74.js +0 -2
  280. package/dist/pipeline-5FHWZAXK.js +0 -2
  281. package/dist/prepare-target-UJEY2FSR.js +0 -2
  282. package/dist/readmodel-TDRFVDVI.js +0 -2
  283. package/dist/reconcile-cmd-2QHZML2L.js +0 -2
  284. package/dist/reconcile-deps-ZBWUY3SM.js +0 -4
  285. package/dist/reconcile-engine-YC4RQYF2.js +0 -2
  286. package/dist/records-JLS63SDI.js +0 -2
  287. package/dist/registry-JJTRUPH7.js +0 -2
  288. package/dist/revert-PRR3D4XM.js +0 -2
  289. package/dist/review-cmd-SAGIKWEW.js +0 -4
  290. package/dist/run-43ACVPJK.js +0 -2
  291. package/dist/run-EOTOXNQO.js +0 -2
  292. package/dist/sessions-GIEXOCE4.js +0 -2
  293. package/dist/structured-answers-YAVW65G4.js +0 -5
  294. package/dist/tcg-generate-V4QRNEZV.js +0 -2
  295. package/dist/testmd-actions-2UMU3QMV.js +0 -2
  296. package/dist/testmd-sync-UBXDLWYD.js +0 -2
  297. package/dist/token-refresh-NL5AM446.js +0 -2
  298. package/dist/verdicts-QU6W3TUF.js +0 -2
  299. package/dist/walk-session-7JVB4Z5S.js +0 -2
  300. package/dist/with-telemetry-LRI7H6DH.js +0 -2
@@ -0,0 +1,88 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as wn,b as uo,c as mo,d as Ot,e as nt,f as fo,g as _n,h as yo,i as vo}from"./chunk-LNV7C2YO.js";import{T as Eo}from"./chunk-6LGED4FC.js";import{c as Co}from"./chunk-H6TNBKGR.js";import{a as so}from"./chunk-WD52ZNQY.js";import{a as rt,b as po,c as kn}from"./chunk-BHSHGWBL.js";import{c as go}from"./chunk-S3DAAAE5.js";import{e as ho,g as bo}from"./chunk-SX56MVUO.js";import{c as wo}from"./chunk-IICQ5KRD.js";import{a as bn}from"./chunk-PDXZROJM.js";import{b as So,c as Ro}from"./chunk-53MPG2J3.js";import{c as ko,h as _o,i as Io}from"./chunk-L4M7753M.js";import{A as Gr,B as zr,C as Yr,D as Wr,F as pn,G as Jr,I as Xr,R as eo,X as to,Y as no,g as Kr,i as Tt,v as Hr,w as qr}from"./chunk-CGT4NFQN.js";import{c as Qr,d as Zr}from"./chunk-WILT62DP.js";import{a as gn}from"./chunk-CH273NAE.js";import{b as Ue}from"./chunk-M7DN6FO3.js";import{d as Lt,e as co}from"./chunk-RH6KFHJB.js";import{a as tt,b as X,c as ro,e as Ne,f as Be,g as hn,k as oo,m as ao,n as be,o as yn,q as vn,s as lo}from"./chunk-KN65CUNT.js";import{b as io}from"./chunk-NBXYL2JT.js";import{a as xt,c as Pt,d as fn}from"./chunk-GPIXV7AV.js";import{a as Et,c as Br,d as Mr,e as At}from"./chunk-KOL6ZWOQ.js";import{c as $r,e as Vr}from"./chunk-P7YZ3PU3.js";import{a as un,b as mn}from"./chunk-4PMZ5FCD.js";import{a as Nr}from"./chunk-2YEHV2CX.js";import{i as Dr,m as jr}from"./chunk-6F6YI3ZG.js";import{g as Fr,h as Ur}from"./chunk-SGHP44WS.js";import{a as Ct}from"./chunk-BPMSNGXQ.js";import{j as Pr,l as dn,m as Tr,n as Rt,o as Lr,p as Or}from"./chunk-RSSOJ3L2.js";import{a as Er}from"./chunk-Z7S3IWUX.js";import{d as Ar}from"./chunk-4JOD47QI.js";import{a as ne}from"./chunk-OH2NSBO6.js";import{a as Ee}from"./chunk-DHJSM5DT.js";import{a as St,b as xr}from"./chunk-NLCCBXXV.js";import{a as Z}from"./chunk-RZ4F3BHX.js";import{a as Rr}from"./chunk-E47GFYXA.js";import{a as _t,b as It,i as Cr,j as et,k as ln,l as cn}from"./chunk-B2ZGG7WM.js";import{join as pe,basename as qn}from"path";import{existsSync as Ji,readFileSync as Ds}from"fs";function Ao(e,t){if(process.env.KANE_REPLAY_TRACE==="1")for(let n=0;n<e.steps.length;n++){let r=e.steps[n],o=t[n],s=" ".repeat(r.trace.length-1),i=`step ${r.flatIndex}`;if(o.kind==="replay"){let h=o.replayOnly?` [replay-only @${o.replayOnly}]`:"";process.stderr.write(`[replay-trace] ${s}${i}: REPLAY${h} (would skip; v1 always authors)
3
+ `)}else process.stderr.write(`[replay-trace] ${s}${i}: AUTHOR (${o.reason})
4
+ `)}}function Ae(e){process.env.KANE_REPLAY_TRACE==="1"&&process.stderr.write(e)}function xo(e,t){let n=e===0?"(none)":`0..${e-1}`,r=e>=t?"(none)":`${e}..${t-1}`;Ae(`[replay-trace] phase: replay ${n}, author ${r}
5
+ `)}function Po(e,t){Ae(`[replay-trace] step ${e}: REPLAY ${t==="ok"?"OK":"FAILED"}
6
+ `)}function To(e,t,n){Ae(`[replay-trace] shrink ${e}/${t} \u2192 new boundary ${n}
7
+ `)}function Lo(e,t){Ae(`[replay-trace] complete-reauthor (${e} shrinks exhausted of ${t})
8
+ `)}function In(){Ae(`[replay-trace] force-author (--author) \u2014 walker bypassed; identity kept
9
+ `)}function Oo(e){Ae(`[replay-trace] cancelled at step ${e}
10
+ `)}function xe(e,t){Ae(`[replay-trace] step ${e}: replay-only @${t} failed \u2014 adaptive heal cannot re-author it; the run fails here
11
+ `)}import{join as Do}from"path";function Sn(e){let t=fo(e.decision),n={objective:e.step.objective,model:"v16-alpha",width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,mode:"replay",replay:{recording_path:t[0],...t.length>1?{recording_paths:t}:{},step_label:e.step.objective,...e.investigationAsync?{investigation:"async"}:{}},screenshot_dir:e.evidence?Do(e.sessionDir,"scratch",String(e.runIndex)):Do(e.sessionDir,"runs",String(e.runIndex)),run_id:"run",test_id:"test"};return e.forceNavigateUrl&&(n.url=e.forceNavigateUrl),e.chrome.wsEndpoint?n.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(n.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(n.username=e.auth.basicAuth.username,n.access_key=e.auth.basicAuth.access_key):e.auth.token&&(n.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(n.org_id=String(e.auth.resolvedCreds.org_id)),e.environmentId&&(n.environment_id=e.environmentId),e.variables&&Object.keys(e.variables).length>0&&(n.variables=e.variables),e.sessionContext&&(n.session_context=e.sessionContext),e.device&&(n.device=e.device),e.evidence&&(n.evidence=Tt(e.evidence.packTestDir,e.evidence.ordinalOffset)),n}async function jo(e){let t=e.forceAuthor?0:nt(e.decisions),n=0,r=!1;for(;;){let o=e.session.snapshot(),s=e.accumulator.snapshot(),i=await e.runReplayPhase(t);if(i.cancelled)return r=!0,Oo(i.failedAt??0),{authorBoundary:t,cancelledInPhase:r,shrinkCount:n};if(i.failedAt===null)return{authorBoundary:t,cancelledInPhase:r,shrinkCount:n};let h=e.decisions[i.failedAt],l=h?.kind==="replay"?h.replayOnly:void 0,d=po({failedAt:i.failedAt,shrinkCount:n,hasRetry:e.hasRetry,maxShrinks:e.maxShrinks,failedAtReplayOnly:l});if(d.kind==="fail")return d.replayOnly&&(xe(i.failedAt,d.replayOnly),e.onReplayOnlyFail?.(i.failedAt,d.replayOnly)),{authorBoundary:-1,cancelledInPhase:r,shrinkCount:n};if(e.acquireLockIfNeeded&&!await e.acquireLockIfNeeded())return{authorBoundary:-1,cancelledInPhase:r,shrinkCount:n};if(e.recycleBrowser&&!await e.recycleBrowser())return{authorBoundary:-1,cancelledInPhase:r,shrinkCount:n};if(e.archiveAttempt&&await e.archiveAttempt(i.failedAt),e.session.rollback(o),e.accumulator.rollback(s),d.kind==="complete-reauthor")return Lo(n+1,e.maxShrinks),{authorBoundary:0,cancelledInPhase:r,shrinkCount:n};n++,To(n,rt.maxShrinks,d.newAuthorBoundary),t=d.newAuthorBoundary}}var Js=15e3,Rn=3,Fo=[500,1e3];async function Cn(e){if(process.env.KANE_LOCK_CONFLICT_SIMULATE==="1")return{ok:!1,reason:"concurrent",httpStatus:409,message:"simulated contention (KANE_LOCK_CONFLICT_SIMULATE=1)"};let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground`,n=await Dt(t,{from_commit_id:e.fromCommitId,new_commit_id:e.newCommitId},e.auth);return n.ok?{ok:!0,sessionExpiresAt:Y(n.body,"session_expires_at")??""}:{ok:!1,...Qs(n)}}function Qs(e){let t=Y(e.body,"error")??Y(e.body,"code")??"",n=Y(e.body,"message")??Y(e.body,"detail")??e.text??`HTTP ${e.status}`,r;return e.status===0?r="network":e.status===401||e.status===403?r="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?r="base_mismatch":e.status===409?r="concurrent":e.status===422?r="disabled":e.status===400&&/no committed/i.test(n)?r="no_commits":e.status===400?r="missing_field":e.status>=500||e.status===408||e.status===429?r="network":r="other",{reason:r,httpStatus:e.status,message:n}}async function No(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/playground/reserve`,n=await Dt(t,void 0,e.auth);return n.ok?{ok:!0,sessionExpiresAt:Y(n.body,"session_expires_at")??""}:{ok:!1,expired:n.status===404,httpStatus:n.status,message:Y(n.body,"message")??Y(n.body,"detail")??n.text??`HTTP ${n.status}`}}async function En(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,n={commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:e.body.commitMessage,total_steps:e.body.totalSteps};e.body.timeTaken!==void 0&&(n.time_taken=e.body.timeTaken),e.body.objectives!==void 0&&(n.objectives=e.body.objectives),e.body.testInstanceId!==void 0&&(n.test_instance_id=e.body.testInstanceId),e.body.trigger!==void 0&&(n.trigger=e.body.trigger);let r=await Dt(t,n,e.auth);return r.ok?{ok:!0,testId:Y(r.body,"test_id")??e.testId,testcaseId:Y(r.body,"testcase_id")??"",projectId:Y(r.body,"project_id"),isTestCaseDeleted:typeof r.body?.is_test_case_deleted=="boolean"?r.body.is_test_case_deleted:void 0}:{ok:!1,...Zs(r)}}function Zs(e){let t=Y(e.body,"error")??Y(e.body,"code")??"",n=Y(e.body,"message")??Y(e.body,"detail")??e.text??`HTTP ${e.status}`,r;return e.status===0?r="network":e.status===401||e.status===403?r="auth":e.status===409&&t==="PlaygroundBaseCommitMismatch"?r="base_mismatch":e.status===409&&t==="PlaygroundCommitLockMismatch"?r="lock_mismatch":e.status===409?r="expired":e.status===422?r="not_found":e.status>=500||e.status===408||e.status===429?r="network":r="other",{reason:r,httpStatus:e.status,message:n}}async function Pe(e){let t=`${e.baseUrl}/test/${encodeURIComponent(e.testId)}/commit`,n={discard:!0,commit_id:e.body.commitId,from_commit_id:e.body.fromCommitId,commit_message:"(discarded)",total_steps:1},r=await Dt(t,n,e.auth);return r.ok?{ok:!0}:{ok:!1,reason:Y(r.body,"error")??"other",httpStatus:r.status,message:Y(r.body,"message")??Y(r.body,"detail")??r.text??`HTTP ${r.status}`}}async function Dt(e,t,n){let r=null;for(let o=1;o<=Rn;o++){let s=new AbortController,i=setTimeout(()=>s.abort(),Js);try{let h=await Z(e,{method:"POST",headers:{Authorization:St(n.username,n.accessKey),"Content-Type":"application/json",Accept:"application/json"},...t!==void 0?{body:JSON.stringify(t)}:{},signal:s.signal});clearTimeout(i);let l=await h.text(),d=null;if(l)try{d=JSON.parse(l)}catch{}let v=h.status>=500||h.status===408||h.status===429;if(h.ok||!v)return{ok:h.ok,status:h.status,body:d,text:l};if(o<Rn){await Uo(Fo[o-1]??1e3);continue}return{ok:!1,status:h.status,body:d,text:l}}catch(h){if(clearTimeout(i),r=h,o<Rn){await Uo(Fo[o-1]??1e3);continue}}}return{ok:!1,status:0,body:null,text:r?.message??"exhausted retries"}}function Uo(e){return new Promise(t=>setTimeout(t,e))}function Y(e,t){if(typeof e!="object"||e===null)return;let n=e[t];return typeof n=="string"?n:void 0}var Xs=60*1e3,Bo="lock-heartbeat",ke=new Map,ot=null,ei={register:(e,t)=>Rt(e,t),deregister:e=>Lr(e),cleanup:(e,t)=>Or(e,t),remoteLogger:null};function Mo(e){if(e!==void 0){let t=ke.get(e);t!==void 0&&(clearInterval(t),ke.delete(e));return}for(let t of ke.values())clearInterval(t);ke.clear()}function jt(e){if(ke.has(e.testId))return;let t=e.lifecycle??ei,n=setInterval(async()=>{let r=await No({baseUrl:e.baseUrl,testId:e.testId,auth:e.auth});if(!r.ok){let o=r.expired?"session expired":r.message;process.stderr.write(`[lock] heartbeat failed (${e.testId}): ${o}; continuing run
12
+ `)}},Xs);ke.set(e.testId,n),ot===null&&(ot=t,t.register(Bo,()=>Mo()))}function fe(e){ke.size!==0&&(Mo(e),ke.size===0&&ot!==null&&(ot.deregister(Bo),ot=null))}import{readFileSync as $o,readdirSync as Vo,existsSync as Te,promises as An}from"fs";import{join as ce}from"path";async function ti(e,t){let n=ce(e,"steps",`${t.ordinal}-${t.id}`),r,o=null,s=[];try{r=JSON.parse(await An.readFile(ce(n,"step.json"),"utf8")),o=r.action_id??null,Array.isArray(r.analyze_action_ids)&&(s=r.analyze_action_ids.filter(i=>typeof i=="string"))}catch{}if(typeof r?.screenshot=="string"&&/^screenshot\.(?:png|jpg)$/i.test(r.screenshot)){let i=r.screenshot;try{return{png:await An.readFile(ce(n,i)),filename:i,actionId:o,analyzeActionIds:s}}catch{}}for(let i of["screenshot.png","screenshot.jpg"])try{return{png:await An.readFile(ce(n,i)),filename:i,actionId:o,analyzeActionIds:s}}catch{}return null}function Ca(){let e=[];return{track:t=>{e.push(t.catch(()=>{}))},settle:async()=>{await Promise.all(e)}}}async function Ko(e,t,n,r){try{let o=await ti(e,t);if(!o){r("warn","SCREENSHOT_SKIP","Pack step folder or screenshot not found",{ordinal:t.ordinal,id:t.id,reason:"pack_step_not_found"});return}let s=new Set;o.actionId&&s.add(o.actionId);for(let i of o.analyzeActionIds)s.add(i);if(s.size===0){r("warn","SCREENSHOT_SKIP","No action_id in step.json",{ordinal:t.ordinal,id:t.id,reason:"no_action_id"});return}for(let i of s)n.enqueue(i,o.png);r("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{ordinal:t.ordinal,id:t.id,action_id:o.actionId,action_ids:[...s],screenshot:o.filename,size:o.png.length})}catch(o){r("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{ordinal:t.ordinal,id:t.id,error:o instanceof Error?o.message:String(o)})}}function Ho(e,t,n,r,o,s){try{let i=ce(e,"runs",String(t),"run-test");if(!Te(i)){o("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:n,reason:"runsDir_not_found",path:i});return}let h=i;if(s){let S=ce(i,`child-${s}`);if(!Te(S)){o("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:n,child_id:s,reason:"child_dir_not_found",path:S});return}let R=Vo(S).filter(c=>Te(ce(S,c,"screenshots")));if(R.length===0){o("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:n,child_id:s,reason:"no_child_screenshots_dir"});return}h=ce(S,R[0])}else if(!Te(ce(i,"screenshots"))){let S=Vo(i).filter(R=>Te(ce(i,R,"screenshots")));if(S.length===0){o("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:n,reason:"no_screenshots_dir"});return}h=ce(i,S[0])}let l=ce(h,"screenshots",`step_${String(n).padStart(3,"0")}.png`);if(!Te(l)){o("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:n,child_id:s,reason:"screenshot_not_found",path:l});return}let d=ce(i,"actions.ndjson");if(!Te(d)){o("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:n,reason:"ndjson_not_found"});return}let v=$o(d,"utf-8").trim().split(`
13
+ `),m=v[v.length-1];if(!m){o("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:n,reason:"ndjson_empty"});return}let k=JSON.parse(m).action_id;if(!k){o("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:n,reason:"no_action_id"});return}let A=$o(l);r.enqueue(k,A),o("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:n,child_id:s,action_id:k,size:A.length})}catch(i){o("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:n,error:i instanceof Error?i.message:String(i)})}}import{dirname as ni,join as ri}from"path";function qo(e,t,n){let r=e.total_runs??1,o=e.run_dir,s,i;if(r>1&&o){let h=ni(o);s=Array.from({length:r},(l,d)=>ri(h,String(t+d))),n&&n.length===r&&(i=n)}return{allRunDirs:s,flowObjectives:i}}function Go(e,t,n,r){return{index:n,objective:t,summary:e.summary,oneLiner:e.one_liner,status:e.status,resultCode:e.result_code,reasonCode:e.reason_code,perFlowMetadata:e.per_flow_metadata,context:e.context??{memory:{},variables:{},pointer:""},run_dir:e.run_dir,run_dirs:r.allRunDirs,flow_objectives:r.flowObjectives}}var Ft=class{constructor(t){this.resolved=t;this.outcomes=t.rootSteps.map(n=>({rootStepIndex:n.index,status:"skipped"}))}outcomes;skipRoot=null;overallHalted=!1;shouldRunFlatStep(t){if(this.overallHalted)return!1;let n=t.trace[0].stepIndex;return!(this.skipRoot!==null&&n===this.skipRoot)}recordStep(t,n){let r=t.trace[0].stepIndex,o=this.outcomes.find(l=>l.rootStepIndex===r),s=this.resolved.rootSteps.find(l=>l.index===r),i=s.body.kind!=="objective";return i&&(o.refKind="import",o.refLabel=s.body.path,o.inlinedCount=(o.inlinedCount??0)+1,o.duration_s=(o.duration_s??0)+n.duration_s),n.status==="passed"?(i?o.status!=="failed"&&(o.status="passed"):(o.status="passed",o.duration_s=n.duration_s),{continueOverall:!0}):t.optional?(o.softFailures=o.softFailures??[],o.softFailures.push({subStepIndex:t.trace[t.trace.length-1].stepIndex,reason:n.reason}),{continueOverall:!0}):(o.status="failed",o.duration_s=i?o.duration_s:n.duration_s,o.failedSubStepIndex=i?t.trace.slice(1).map(l=>l.stepIndex):void 0,o.reason=n.reason,this.skipRoot=r,s.optional??!1?(o.softFailed=!0,{continueOverall:!0}):(this.overallHalted=!0,{continueOverall:!1}))}snapshotOutcomes(){return[...this.outcomes]}snapshot(){return{outcomes:this.outcomes.map(t=>({...t,softFailures:t.softFailures?[...t.softFailures]:void 0})),skipRoot:this.skipRoot,overallHalted:this.overallHalted}}rollback(t){this.outcomes=t.outcomes.map(n=>({...n,softFailures:n.softFailures?[...n.softFailures]:void 0})),this.skipRoot=t.skipRoot,this.overallHalted=t.overallHalted}finalize(){let t=this.outcomes.some(r=>r.status==="failed"&&!r.softFailed)?"failed":"passed",n=this.outcomes.reduce((r,o)=>r+(o.duration_s??0),0);return{overallStatus:t,outcomes:this.outcomes,totalDurationS:n}}};function xn(e){if(!e)return null;let t=e.trim();return t?/^https?:\/\//i.test(t)?t:`https://${t}`:null}function zo(e){return xn(e.flag)??xn(e.frontmatter)??(e.configDefault&&e.configDefault!==et?xn(e.configDefault):null)}function Yo(e){return e.resolvedUrl!==null?!1:!((!!e.local||!!e.allowMissingUrl)&&!e.isTTY)}import{spawn as oi}from"child_process";async function Wo(e,t,n=100){let r=`${e.replace(/\/+$/,"")}/json/version`,o=await Z(r);if(!o.ok)throw new Error(`CDP /json/version returned ${o.status}`);let s=await o.json();if(!s.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let i=new Rr(s.webSocketDebuggerUrl);await new Promise((f,C)=>{i.once("open",f),i.once("error",C)});let h=1,l=new Map;i.on("message",f=>{let C;try{C=JSON.parse(f.toString())}catch{return}if(C.id==null)return;let $=l.get(C.id);$&&(l.delete(C.id),C.error?$.reject(new Error(C.error.message)):$.resolve(C.result))});function d(f,C){let $=h++;return new Promise((_e,re)=>{l.set($,{resolve:se=>_e(se),reject:re});let oe={id:$,method:f};C&&(oe.params=C),i.send(JSON.stringify(oe))})}let m=(await d("Target.getTargets")).targetInfos.find(f=>f.type==="page");if(!m)throw i.close(),new Error("CDP: no page target found");let k=(await d("Browser.getWindowForTarget",{targetId:m.targetId})).windowId,A="",S=!1,R=null,c=!1;i.on("close",()=>{c=!0}),i.on("error",()=>{c=!0});async function F(){if(!S){if(c){S=!0;return}try{let C=(await d("Browser.getWindowBounds",{windowId:k})).bounds,$=`${C.left}:${C.top}:${C.width}:${C.height}`;$!==A&&(A=$,t({left:C.left,top:C.top,width:C.width,height:C.height}))}catch{}S||(R=setTimeout(F,n))}}return F(),{stop(){if(!S){S=!0,R&&clearTimeout(R);try{i.close()}catch{}}}}}var si=new Set(["1","true","yes"]);function Pn(e){if(e?.headless)return null;let t=process.env.KANE_CLI_DISABLE_MARKER;if(t!=null&&si.has(t.toLowerCase()))return null;let n=Et();if(!n)return null;let r=[...n.args,"overlay"];e?.text&&r.push(e.text);let o;try{o=oi(n.cmd,r,{cwd:n.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}o.stdin?.on("error",()=>{});let s=!1;o.on("exit",()=>{s=!0}),o.on("error",()=>{s=!0});function i(d){if(!(s||!o.stdin||o.stdin.destroyed))try{o.stdin.write(JSON.stringify(d)+`
14
+ `)}catch{}}e?.chromePid&&e.chromePid>0&&i({type:"chrome_pid",pid:e.chromePid});let h=null;e?.cdpEndpoint&&Wo(e.cdpEndpoint,d=>i({type:"bounds",...d})).then(d=>{h=d.stop}).catch(()=>{});let l=!1;return{setRunActive(d){l||i({type:"run_active",active:d})},setStepText(d){if(l)return;let v=d.trim();v&&i({type:"step_text",text:v})},setStepComplete(){l||i({type:"step_complete"})},kill(){if(!l){l=!0,h?.();try{o.stdin?.end()}catch{}try{o.kill("SIGTERM")}catch{}}}}}function Jo(e,t,n){return`${e}/projects/${t}/test-cases/${n}`}function Ut(e,t,n,r){return`${Jo(e,t,n)}/dashboard/share/${r}?type=summary&agentView=true&fqdn=summary-page`}function Qo(e,t,n,r){if(!(!t||!n||!r))return Ut(e,t,n,r)}function Zo(e,t,n){return`${Jo(e,t,n)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{mkdtempSync as vi,rmSync as wi}from"fs";import{join as ki}from"path";import{tmpdir as _i}from"os";import{spawn as ts,spawnSync as ii}from"child_process";import{existsSync as Tn}from"fs";import{createConnection as ai}from"net";import{homedir as Me,platform as it}from"os";import{join as $e}from"path";var li=new Set(["1","true","yes"]),Nt=class extends Error{constructor(t){super(t),this.name="ChromeNotFoundError"}};function Wa(e){return e instanceof Nt?e.message:`Chrome failed: ${e instanceof Error?e.message:String(e)}`}var Bt={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",$e(Me(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",$e(Me(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",$e(Me(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",$e(Me(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",$e(Me(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe"),$e(Me(),"AppData\\Local\\kane-chrome\\chrome.exe")]};function ns(){let e=process.env.KANE_CLI_CHROME_PATH?.trim();return e||void 0}function ci(){let e=ns();if(e)return e;let t=it(),n=Bt[t]??Bt.linux;for(let r of n)if(Tn(r))return r;return t==="win32"?"chrome.exe":"google-chrome"}function di(){let e=ns();if(e)return Tn(e);let t=it();if((Bt[t]??Bt.linux).some(s=>Tn(s)))return!0;let r=t==="win32"?"chrome.exe":"google-chrome",o=t==="win32"?"where":"which";try{return ii(o,[r],{stdio:"ignore"}).status===0}catch{return!1}}function ui(){let e=it();return e==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
15
+ `):e==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
16
+ `):e==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
17
+ `):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
18
+ `)}function mi(e){let t=it(),n=[`--remote-debugging-port=${e.port}`,`--user-data-dir=${e.userDataDir}`,`--window-size=${e.width},${e.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return t==="linux"&&(n.push("--no-sandbox"),n.push("--disable-dev-shm-usage"),n.push("--password-store=basic")),t==="darwin"&&n.push("--use-mock-keychain"),e.headless&&n.push("--headless=new"),n}function fi(e){return new Promise(t=>{let n=ai({port:e,host:"127.0.0.1"});n.setTimeout(1e3),n.on("connect",()=>{n.destroy(),t(!0)}),n.on("timeout",()=>{n.destroy(),t(!1)}),n.on("error",()=>{n.destroy(),t(!1)})})}async function pi(){for(let e=ln;e<=cn;e++)if(!await fi(e))return e;throw new Error(`All CDP ports ${ln}-${cn} are in use. Close other Chrome instances.`)}var st=class extends Error{constructor(t){super(t),this.name="CdpReadinessError"}};async function gi(e,t){let n=Date.now(),r=`http://127.0.0.1:${e}/json/version`;for(;Date.now()-n<t;){try{if((await Z(r)).ok)return`http://127.0.0.1:${e}`}catch{}await new Promise(o=>setTimeout(o,200))}throw new st(`Chrome CDP not ready after ${t}ms on port ${e}`)}var hi=3e4,bi=2;function Xo(e,t,n){let r=process.env[e];if(r==null||r.trim()==="")return t;let o=Number(r);return!Number.isInteger(o)||o<n?t:o}function yi(e){return Math.min(500*e,3e3)}function es(e,t){try{if(e.pid)if(t==="win32")ts("taskkill",["/pid",String(e.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-e.pid,"SIGKILL")}catch{e.kill("SIGKILL")}else e.kill("SIGKILL")}catch{}}async function rs(e){let t=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(t!=null&&li.has(t.toLowerCase()))&&!di())throw dn()?.log("error","CHROME_NOT_FOUND","Startup gate: Chrome unavailable at standard system paths",{platform:process.platform,kane_cli_chrome_path:process.env.KANE_CLI_CHROME_PATH??null,skip_browser_download:process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD??null}),new Nt(ui());let r=it(),o=ci(),s=Xo("KANE_CLI_CDP_TIMEOUT_MS",hi,1),h=Xo("KANE_CLI_CDP_RETRIES",bi,0)+1,l;for(let d=1;d<=h;d++){let v=await pi(),m=mi({port:v,...e});e.startUrl&&m.push(e.startUrl);let b=ts(o,m,{stdio:"ignore",detached:!0});b.unref();try{let k=await new Promise((A,S)=>{b.on("error",R=>{S(new Error(`Failed to launch Chrome: ${R.message}. Is Chrome installed at ${o}?`))}),b.on("close",R=>{R!==null&&R!==0&&S(new st(`Chrome exited during startup with code ${R}`))}),gi(v,s).then(A,S)});return{process:b,port:v,cdpEndpoint:k,kill(){es(b,r)}}}catch(k){if(l=k,!(k instanceof st))throw k;es(b,r),dn()?.log("warn","CHROME_CDP_LAUNCH_RETRY",`Chrome CDP launch attempt ${d}/${h} failed`,{attempt:d,max_attempts:h,port:v,timeout_ms:s,headless:e.headless??!1,error:k.message}),d<h&&await new Promise(A=>setTimeout(A,yi(d)))}}throw l??new Error("Chrome launch failed after retries")}async function Ln(e){if(e.cft)return{instance:null,tempDir:null};if(e.wsEndpoint)return{wsEndpoint:e.wsEndpoint,instance:null,tempDir:null};if(e.cdpEndpoint){let o=await Z(`${e.cdpEndpoint}/json/version`);if(!o.ok)throw new Error(`CDP endpoint not reachable: ${e.cdpEndpoint} (${o.status})`);return{cdpEndpoint:e.cdpEndpoint,instance:null,tempDir:null}}let t,n=null;if(e.config.chrome_profile_path)t=e.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{n=vi(ki(_i(),"kane-clean-")),t=n;let o=n;Rt("tempDir",()=>{try{wi(o,{recursive:!0,force:!0})}catch{}})}let r=await rs({userDataDir:t,width:e.config.window_size.width,height:e.config.window_size.height,startUrl:e.startUrl,headless:e.headless});return{cdpEndpoint:r.cdpEndpoint,instance:r,tempDir:n}}async function os(e,t){if(e==="device"){let{device:n,appRef:r,appId:o}=await t.prepareDevice();return{kind:"device",device:n,...r?{appRef:r}:{},...o?{appId:o}:{}}}return{kind:"web",chrome:await t.prepareWeb()}}function sl(e,t={}){if(e.kind==="device"){let n=e.device.target_kind;return n==="emulator"||n==="simulator"?n:void 0}if(e.chrome.instance)return"chrome";if(t.cdpEndpoint)return"cdp";if(t.wsEndpoint)return"ws"}function il(e,t){if(!(e.kind!=="device"||e.device.target_kind!=="simulator"))return t?Er(t):void 0}function al(e){if(e.kind!=="device")return;let t=e.device.target_kind;if(!(t!=="emulator"&&t!=="simulator"))return e.appRef??""}function On(e){let t={objective:e.objective,model:e.model,width:e.windowSize.width,height:e.windowSize.height,session_id:e.sessionId,run_index:e.runIndex,max_steps:e.maxSteps??30,headless:e.headless??!1};return e.conditions&&e.conditions.length>0&&(t.conditions=[...e.conditions]),e.url&&(t.url=e.url),e.requireStartUrl&&(t.require_start_url=!0),e.chrome.wsEndpoint?t.ws_endpoint=e.chrome.wsEndpoint:e.chrome.cdpEndpoint&&(t.cdp_endpoint=e.chrome.cdpEndpoint),e.auth.basicAuth?(t.username=e.auth.basicAuth.username,t.access_key=e.auth.basicAuth.access_key):e.auth.token&&(t.auth={type:"bearer",token:e.auth.token}),e.auth.resolvedCreds?.org_id&&(t.org_id=String(e.auth.resolvedCreds.org_id)),e.disableAskUser&&(t.disable_ask_user=!0),e.enableTaskSkills&&(t.enable_task_skills=!0),e.networkWs&&(t.network_ws=!0),e.networkSse&&(t.network_sse=!0),(e.bugDetection==="stop"||e.bugDetection==="continue")&&(t.bug_detection=e.bugDetection),e.variables&&Object.keys(e.variables).length>0&&(t.variables=e.variables),e.globalContext&&(t.global_context=e.globalContext),e.localContext&&(t.local_context=e.localContext),e.sessionContext&&(t.session_context=e.sessionContext),e.device&&(t.device=e.device),e.evidence&&(t.evidence=Tt(e.evidence.packTestDir,e.evidence.ordinalOffset)),t}import{existsSync as Ii,readFileSync as Si}from"fs";import{join as Ri}from"path";var Mt={max_retries:5,settle_ms:500,on_exhaust:"fail"},Ve=class{constructor(t,n,r){this.steps=t;this.decisions=n;this.deps=r;for(let o=0;o<t.length;o++){let s=t[o];if(s.controlFlow!=="if"&&s.controlFlow!=="while")continue;let i=s.block,h=t.map((b,k)=>[b,k]).filter(([b])=>b.block?.id===i.id&&b.block.depth===i.depth),l=h.find(([b])=>b.block.branch===-1)[1],d=h.filter(([b])=>b.controlFlow!==void 0&&b.block.branch!==-1).map(([,b])=>b),v=d.filter(b=>t[b].controlFlow!=="else").map(b=>t[b].objective),m={kind:s.controlFlow,opener:o,closer:l,markers:d,conditions:v,hasElse:t[d[d.length-1]].controlFlow==="else"};this.blocks.set(o,m),this.closers.set(l,m)}}blocks=new Map;closers=new Map;skip=new Set;attempts=new Map;taken=new Map;whileRuns=new Map;static hasBlocks(t){return t.some(n=>n.block!==void 0)}reset(){this.skip.clear(),this.attempts.clear(),this.taken.clear(),this.whileRuns.clear()}outcomes(){let t={};for(let[r,o]of this.taken)t[this.steps[r].flatIndex]=o;let n={};for(let[r,o]of this.whileRuns)n[this.steps[r].flatIndex]={...o};return{taken:t,whileRuns:n}}range(t,n){let r=t.markers[n]+1,o=n+1<t.markers.length?t.markers[n+1]:t.closer,s=[];for(let i=r;i<o;i++)s.push(i);return s}skipBranch(t,n){for(let r of this.range(t,n))this.skip.add(r)}unskipBody(t){for(let n=t.opener+1;n<t.closer;n++)this.skip.delete(n)}async judge(t){let n=await this.deps.evaluate(t),r=n.findIndex(o=>o==null);return r!==-1||n.length<t.length?{fail:`condition could not be judged: ${t[r===-1?n.length:r]}`}:n}async before(t){if(this.skip.has(t))return{action:"skip"};let r=this.steps[t].controlFlow;if(r==="if"){let s=this.blocks.get(t),i=await this.judge(s.conditions);if("fail"in i)return{action:"fail",reason:i.fail};let h=i.findIndex(l=>l===!0);h===-1&&s.hasElse&&(h=s.markers.length-1),this.taken.set(t,h);for(let l=0;l<s.markers.length;l++)l!==h&&this.skipBranch(s,l);return{action:"structural"}}if(r==="while"){let s=this.blocks.get(t);this.attempts.set(t,0);let i=await this.judge(s.conditions);return"fail"in i?{action:"fail",reason:i.fail}:(this.whileRuns.set(t,{iterations:i[0]?1:0,condition_met:!i[0]}),i[0]||this.skipBranch(s,0),{action:"structural"})}if(r==="end-while"){let s=this.closers.get(t);if(!(s.opener+1===s.closer)&&this.skip.has(s.opener+1))return{action:"structural"};let h=this.deps.whileConfig(s.opener),l=(this.attempts.get(s.opener)??0)+1;this.attempts.set(s.opener,l);let d=this.whileRuns.get(s.opener)??{iterations:l,condition_met:!1};if(d.iterations=l,this.whileRuns.set(s.opener,d),l>=h.max_retries)return h.on_exhaust==="fail"?{action:"fail",reason:`while exhausted after ${l} iteration(s): ${s.conditions[0]}`}:{action:"structural"};await this.deps.sleep(h.settle_ms);let v=await this.judge(s.conditions);return"fail"in v?{action:"fail",reason:v.fail}:v[0]?(this.unskipBody(s),d.iterations=l+1,{action:"jump",to:s.opener+1}):(d.condition_met=!0,{action:"structural"})}if(r!==void 0)return{action:"structural"};let o=this.decisions[t];return o?.kind==="replay"&&o.unrecorded?{action:"author"}:{action:"run"}}};function Dn(e){try{let t=ao(e),n=oo(e.owningFile,e.trace[e.trace.length-1].stepIndex,t.slice(0,8)),r=Ri(n,"flows","0","actions.ndjson");if(!Ii(r))return null;let o=Si(r,"utf8").split(`
19
+ `).find(s=>s.trim().length>0);return o?JSON.parse(o):null}catch{return null}}function $t(e){let t=Dn(e);if(!t||t.action_type!=="while")return{...Mt};let n=t.action_params??{};return{max_retries:typeof n.max_retries=="number"&&n.max_retries>0?n.max_retries:Mt.max_retries,settle_ms:typeof n.settle_ms=="number"&&n.settle_ms>=0?n.settle_ms:Mt.settle_ms,on_exhaust:typeof n.on_exhaust=="string"&&n.on_exhaust?n.on_exhaust:Mt.on_exhaust}}import{readdirSync as Ci,readFileSync as is,existsSync as as}from"fs";import{join as Ei}from"path";function ss(e,t){if(!as(e))return{};let n={},r;try{r=Ci(e).filter(o=>o.endsWith(".json")).sort()}catch{return{}}for(let o of r)try{let s=is(Ei(e,o),"utf-8"),i=JSON.parse(s);if(i&&typeof i=="object"){for(let[h,l]of Object.entries(i))if(l&&typeof l=="object"&&"value"in l){let d=l;n[h]={value:typeof d.value=="number"?String(d.value):d.value,secret:d.secret??!1,syntax:d.syntax??`{{${h}}}`,...typeof d.description=="string"?{description:d.description}:{}}}}}catch{t?t("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:o}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${o}
20
+ `)}return n}function ls(e){if(!as(e))throw new Error(`Variables file not found: ${e}`);let t=is(e,"utf-8"),n=JSON.parse(t),r={};if(n&&typeof n=="object"){for(let[o,s]of Object.entries(n))if(s&&typeof s=="object"&&"value"in s){let i=s;r[o]={value:typeof i.value=="number"?String(i.value):i.value,secret:i.secret??!1,syntax:i.syntax??`{{${o}}}`,...typeof i.description=="string"?{description:i.description}:{}}}}return r}function cs(e){let t;try{t=JSON.parse(e)}catch{throw new Error("Invalid --variables JSON")}let n={};if(t&&typeof t=="object"){for(let[r,o]of Object.entries(t))if(o&&typeof o=="object"&&"value"in o){let s=o;n[r]={value:typeof s.value=="number"?String(s.value):s.value,secret:s.secret??!1,syntax:s.syntax??`{{${r}}}`,...typeof s.description=="string"?{description:s.description}:{}}}}return n}function ds(e,t,n){let r=ss(e,n),o=ss(t,n);return{...r,...o}}var Ke=class{constructor(t){this.baseUrl=t}async pushSecret(t){let n=St(t.username,t.accessKey),r=await Z(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:n,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:t.secretKey,secretValue:t.secretValue,orgId:t.orgId,username:t.username,scope:"user",type:"user",accessKey:t.accessKey})});if(!r.ok)throw new Error(`Push secret failed: ${r.status} ${await r.text()}`)}static extractVariableKeys(t){let n=t.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),r=new Set;for(let o of n)r.add(o[1]);return[...r]}};var He=class extends xr{constructor(t,n,r){super(t,{username:n,accessKey:r})}async upsertVariable(t){let n=t.environmentId??0,r=await Z(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:t.name,value:String(t.value),type:"variable",value_type:"string",is_persist:t.isPersist??!1,environment_id:n})});if(r.ok){let l=await r.json().catch(()=>({}));if(l.type==="Success"&&l.id!=null)return{id:Number(l.id)||0}}let o=await Z(`${this.baseUrl}/v1/variables/${encodeURIComponent(t.name)}?environment_id=${n}`,{method:"GET",headers:this.headers()});if(!o.ok)return{id:0};let i=(await o.json().catch(()=>({}))).data?.id;return i==null?{id:0}:(await Z(`${this.baseUrl}/v1/variables/${i}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(t.value),value_type:"string"})})).ok?{id:Number(i)||0}:{id:0}}};function us(e,t){if(Object.keys(e).length===0)return{};let n={};for(let[r,o]of Object.entries(e)){let s=o.syntax??`{{${r}}}`;xi(t,s)&&(n[r]=o)}return n}function Ai(e){let t=e.trim();return t.startsWith("{{")&&t.endsWith("}}")?t.slice(2,-2).trim():t.startsWith("${")&&t.endsWith("}")?t.slice(2,-1).trim():t}function xi(e,t){if(!t||!e)return!1;if(e.includes(t))return!0;let n=Ai(t);if(!n)return!1;let r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return new RegExp(`(?:\\{\\{|\\$\\{)\\s*${r}(?=\\s*\\}|[.\\[])`).test(e)}function ms(e){let t=ds(e.globalDir,e.localDir,e.onLoadError),n=e.file?ls(e.file):{},r=e.inline?cs(e.inline):{},o={...t,...n,...r},s=Object.keys(o).length>0,{variables:i,objective:h}=s?Ue(o,e.objective):{variables:{},objective:e.objective},l=Object.entries(o).filter(([,v])=>v.secret),d=Object.entries(o).filter(([,v])=>!v.secret);return{raw:o,auteur:i,auteurObjective:h,secretEntries:l,nonSecretEntries:d}}async function fs(e){if(e.localMode)return{};let t=ne(e.env);if(e.variables.secretEntries.length>0){let r=new Ke(t.secretsBaseUrl);for(let[o,s]of e.variables.secretEntries)r.pushSecret({secretKey:o,secretValue:s.value,username:e.auth.username,accessKey:e.auth.access_key,orgId:e.orgId}).then(()=>e.log("info","SECRET_PUSH_OK","Secret pushed",{key:o})).catch(i=>e.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:o,error:String(i)}))}let n={};if(e.variables.nonSecretEntries.length>0){let r=new He(t.tmsBaseUrl,e.auth.username,e.auth.access_key);for(let[o,s]of e.variables.nonSecretEntries)try{let i=await r.upsertVariable({name:o,value:s.value});n[o]=i.id,e.log("info","VAR_PUSH_OK","Variable pushed",{name:o,id:i.id})}catch(i){e.log("error","VAR_PUSH_FAILED","Variable push failed",{name:o,error:String(i)})}}return n}import{readFileSync as Pi,existsSync as Ti}from"fs";function jn(e){if(!Ti(e))return null;try{return Pi(e,"utf-8").trim()||null}catch{return null}}var Li=()=>{};async function ps(e,t,n){let r=t.log??Li,o=e.session.testId??null,s=null,i=null,h=null;if(!n.localMode&&t.performUpload)try{s=await t.performUpload(),s?.success&&(s.testId&&(o=s.testId),s.testcaseId&&e.session.setTestcaseId(s.testcaseId))}catch(l){r("error","FINALIZE_UPLOAD_ERROR","Upload pipeline threw",{error:String(l)})}if(t.renderFeedbackPrompt)try{i=await t.renderFeedbackPrompt(),i&&o&&t.submitFeedback&&t.submitFeedback(o,i).catch(l=>{r("error","FINALIZE_FEEDBACK_SUBMIT_ERROR","Feedback submit failed",{error:String(l)})})}catch(l){r("error","FINALIZE_FEEDBACK_RENDER_ERROR","Feedback prompt threw",{error:String(l)})}if(e.session.flushRecorder(),n.skipLocalWrites)r("info","FINALIZE_SKIP_LOCAL_WRITES","Skipping local writes (testmd flow handles via staging)");else if(n.sourcePath&&n.rootSteps&&n.outcomes){try{h=wn({sourcePath:n.sourcePath,title:n.title,rootSteps:n.rootSteps,outcomes:n.outcomes,overallStatus:n.overallStatus,startedISO:n.startedISO,durationS:n.durationS,sessionId:e.session.sessionId})}catch(l){r("error","FINALIZE_RESULT_MD_ERROR","_Result.md write failed",{error:String(l)})}try{yn({sourcePath:n.sourcePath,commitId:e.session.sessionId,testId:o??void 0,testcaseId:e.session.testcaseId??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,orgId:e.session.orgId??void 0,sessionName:e.session.sessionName??tt(n.sourcePath),plan:e.session.plan??void 0})}catch(l){r("error","FINALIZE_META_WRITE_ERROR","meta.json write failed",{error:String(l)})}if(s?.codeExportDir)try{let l=bn(e.tuiConfig.code_export?.language??"python",n.mobile);_n(s.codeExportDir,hn(n.sourcePath,l.framework,l.language))}catch(l){r("error","FINALIZE_CODE_COPY_ERROR","code-export copy failed",{error:String(l)})}}else if(e.session.recorder?.lastWrittenPath){let l=e.session.recorder.lastWrittenPath,d=e.session.getFlows(),v=d.map((k,A)=>({index:A+1,heading:`Step ${A+1}`,verifies:[],headingLine:0,body:{kind:"objective",text:k.objective}})),m=d.map((k,A)=>({rootStepIndex:A+1,status:k.status==="passed"?"passed":k.status==="failed"?"failed":"skipped",duration_s:k.duration,reason:k.reason})),b=m.some(k=>k.status==="failed")?"failed":"passed";try{h=wn({sourcePath:l,title:e.session.sessionName??"Session",rootSteps:v,outcomes:m,overallStatus:b,startedISO:e.session.startedAt,durationS:m.reduce((k,A)=>k+(A.duration_s??0),0),sessionId:e.session.sessionId})}catch(k){r("error","FINALIZE_TUI_RESULT_MD_ERROR","TUI _Result.md write failed",{error:String(k)})}try{yn({sourcePath:l,commitId:e.session.sessionId,testId:o??void 0,testcaseId:e.session.testcaseId??void 0,sessionName:e.session.sessionName??void 0,projectId:e.tuiConfig.project_id??void 0,folderId:e.tuiConfig.folder_id??void 0,plan:e.session.plan??void 0})}catch(k){r("error","FINALIZE_TUI_META_WRITE_ERROR","TUI meta.json write failed",{error:String(k)})}if(s?.codeExportDir)try{let k=bn(e.tuiConfig.code_export?.language??"python",n.mobile);_n(s.codeExportDir,hn(l,k.framework,k.language))}catch(k){r("error","FINALIZE_TUI_CODE_COPY_ERROR","TUI code-export copy failed",{error:String(k)})}e.session.recorder.lastCollisionSuffixed&&process.stderr.write(`Saved to ${l} (renamed: ${e.session.sessionName}_test.md already existed)
21
+ `)}try{t.runCleanup?.()}catch(l){r("error","FINALIZE_CLEANUP_ERROR","Cleanup hook threw",{error:String(l)})}try{await e.session.finish("complete")}catch(l){r("error","FINALIZE_SESSION_FINISH_ERROR","session.finish threw",{error:String(l)})}return{uploadResult:s,feedbackChoice:i,resultMdPath:h}}import{readFileSync as Un,writeFileSync as Nn,existsSync as ws}from"fs";function gs(e,t,n){if(n.forceAuthor)return"re-recorded from scratch";if(n.retryTriggered)return"re-recorded after retry";if(t.length>0&&t.every(i=>i.kind==="author"&&i.reason==="no-result-md"))return"initial recording";if(t.length>0&&t.every(i=>i.kind==="replay"))return n.wantsPush?"re-recorded (no source changes)":"no changes";let r=[];for(let i=0;i<t.length;i++){let h=t[i];if(!h||h.kind!=="author"||h.reason==="downstream-of-divergence"||h.reason==="no-result-md")continue;let l=Oi(e,e.steps[i]);switch(h.reason){case"structure-mismatch":r.push(`added/removed: ${l}`);break;case"md5-mismatch":r.push(`modified: ${l}`);break;case"missing-recording":r.push(`re-recorded: ${l}`);break;case"recorded-failed":r.push(`re-authored after failure: ${l}`);break}}if(r.length===0)return"automated commit";let o=r.filter((i,h)=>h===0||r[h-1]!==i),s=o.slice(0,3).join("; ");return o.length>3?`${s}; +${o.length-3} more`:s}function Oi(e,t){if(!t)return"unknown step";let n=t.trace[0]?.stepIndex;if(n==null)return"unknown step";let o=e.rootSteps[n-1]?.heading?.trim()??"";return t.trace.length>1?o?`imported step in "${o}"`:`imported step ${n}`:o||`step ${n}`}import{existsSync as Di}from"fs";function ji(e){return!!e&&typeof e.module_id=="string"&&e.module_id.trim()!==""}function Fn(e){return`warn: ${e}: *_module.md without a cloud meta.json module_id \u2014 it ran as a module, but its steps upload as plain blocks (no module_block)`}function hs(e,t,n={}){let r=n.tapePresent??(b=>Di(ro(b))),o=n.readMeta??(b=>be(b)),s=n.onMissingIdentity??(b=>{process.stderr.write(`${Fn(b)}
22
+ `)}),i=new Set,h=new Set(e.unitFiles.filter(b=>b.kind==="module").map(b=>b.file)),l=new Map,d=[];for(let b of e.steps){let k=b.flatIndex,A,S="";for(let R=0;R+1<b.trace.length;R++){let c=b.trace[R],F=b.trace[R+1].file;if(S=S?`${S}>${c.file}#${c.stepIndex}`:`${c.file}#${c.stepIndex}`,!h.has(F))continue;let f=l.get(S);if(!f){let C=o(F);if(!ji(C)){i.has(F)||(i.add(F),s(F));continue}f={key:S,file:F,meta:C,flatFrom:k,flatTo:k,dirty:!1,children:[]},l.set(S,f),(A?A.children:d).push(f)}f.flatFrom=Math.min(f.flatFrom,k),f.flatTo=Math.max(f.flatTo,k),A=f}}let v=b=>{for(let k=b.flatFrom;k<=b.flatTo;k++)if(t.has(k))return!0;return!1},m=b=>{for(let k of b)k.dirty=r(k.file)&&v(k),m(k.children)};return m(d),d}function bs(e){let t={};for(let n of e)for(let r=0;r<Math.max(1,n.totalRunDirs);r++)t[n.runIndex+r]=n.testmdStepIndex;return t}function vs(e,t){let n=e.steps,r=[],o=[];for(let s=0;s<n.length;s++){let i=n[s],h=i.controlFlow;if(h==="if"||h==="while"){let l=Fi(i,h,t);(o.length?o[o.length-1].children:r).push(l),o.push(l);continue}if(h==="elif"||h==="else"){let l=o[o.length-1];ys(l,i.flatIndex-1),l.branches.push({branch_type:h,condition:h==="else"?"":i.objective,flatFrom:i.flatIndex+1,flatTo:i.flatIndex,taken:!1});continue}if(h==="end-if"||h==="end-while"){let l=o.pop();ys(l,i.flatIndex-1),l.flatTo=i.flatIndex,Ui(l,t);continue}}return r}function Fi(e,t,n){let r=Dn(e),o=r?.action_params??{},s=typeof o.block_id=="string"?o.block_id:"",i=r?.action_instruction&&r.action_instruction.trim()||e.objective,h={kind:t,blockId:s,instruction:i,flatFrom:e.flatIndex,flatTo:e.flatIndex,branches:[{branch_type:"if",condition:e.objective,flatFrom:e.flatIndex+1,flatTo:e.flatIndex,taken:!1}],children:[]};if(t==="while"){let l=$t(e),d=n?.whileRuns[e.flatIndex];h.whileCfg={...l,iterations:d?.iterations??0,condition_met:d?.condition_met??!1}}return h}function ys(e,t){let n=e.branches[e.branches.length-1];n.flatTo=t}function Ui(e,t){if(e.kind==="while"){e.branches[0].taken=(e.whileCfg?.iterations??0)>0;return}let n=t?.taken[e.flatFrom];typeof n=="number"&&n>=0&&n<e.branches.length&&(e.branches[n].taken=!0)}function Ni(e,t){if(!(!e.shouldReplaceLocalOutput||!e.resolvedTest||!e.sourcePath||!e.stepRunRecords||!e.outcomes||!e.overallStatus))return async()=>{let{changedUnitFiles:n,legacySweep:r}=await yo({resolvedTest:e.resolvedTest,sessionDir:e.session.sessionDir,stepRunRecords:e.stepRunRecords,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO??new Date().toISOString(),durationS:e.durationS??0,sessionId:e.session.sessionId,commitId:e.fromCommitId??"",tmsIds:e.tmsIds??{},codeExportDir:e.codeExportDir,packTestDir:e.evidence?.packTestDir??e.evidenceRead?.packTestDir,authoredFlatIdx:new Set(e.authoredFlatIdx??[])});t.files=n;for(let o of n){let s=X(o);if(ws(`${s}.staging`)){so(s);let i=r.find(h=>h.unitFile===o);i&&vo(i.dirs)}}}}function Bi(e,t){if(!e.shouldCommit||e.isFirstRun||!e.tmsBaseUrl||!e.testId||!e.fromCommitId||!e.newCommitId||!e.basicAuth||!e.resolvedTest||!e.decisions)return;let n=(o,s)=>Lt({sourcePath:o,testId:s,sessionId:e.session.sessionId,commitId:e.newCommitId,identityOverride:{commit_id:e.newCommitId},controller:new Ee(ne(e.env).controllerBaseUrl,{username:e.basicAuth.username,accessKey:e.basicAuth.access_key})}),r=(o,s)=>e.onAgentEvent?.({type:"test_md_bundle_sync",status:s.ok?"ok":"failed",commit_id:e.newCommitId,path:o,...s.ok?{bytes:s.bytes}:{stage:s.stage}});return async()=>{let o;if(e.testmdSync===!1)e.log?.("info","BUNDLE_SYNC_SKIPPED","testmd bundle sync skipped",{reason:"flag",commit_id:e.newCommitId});else{if(!e.sourcePath){let m="bundle sync requires a source path";return e.log?.("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:e.newCommitId,stage:"collect",error:m}),{ok:!1,reason:"bundle_sync_failed",message:m}}if(o=await n(e.sourcePath,e.testId),!o.ok)return e.log?.("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:e.newCommitId,stage:o.stage,error:o.error}),r(e.sourcePath,o),process.stderr.write(` \u26A0 bundle sync failed (${o.stage}): ${o.error} \u2014 commit not attempted; the local tape is kept, run again with --push once fixed
23
+ `),{ok:!1,reason:"bundle_sync_failed",message:o.error}}let s=gs(e.resolvedTest,e.decisions,{wantsPush:e.wantsPush??!1,retryTriggered:e.retryTriggered??!1,forceAuthor:e.forceAuthor??!1}),i=e.resolvedTest.steps.map(m=>m.objective).filter(m=>typeof m=="string"&&m.length>0).slice(0,50),h=e.forceAuthor?"always_reauthor":e.retryTriggered?"adaptive_heal":void 0,l=Kr().testInstanceId,d={...l?{testInstanceId:l}:{},...h?{trigger:h}:{}},v=await En({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:e.testId,body:{commitId:e.newCommitId,fromCommitId:e.fromCommitId,commitMessage:s,totalSteps:e.resolvedTest.steps.length,timeTaken:Math.round(e.durationS??0),objectives:i,...d},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(v.ok&&e.commitBox&&(e.commitBox.committed=!0,e.commitBox.testcaseId=v.testcaseId||void 0),v.ok&&o?.ok&&e.sourcePath&&(e.log?.("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:e.newCommitId,bytes:o.bytes}),r(e.sourcePath,o)),v.ok&&e.sourcePath){let m=Ne(e.sourcePath);try{let b=JSON.parse(Un(m,"utf8"));b.commit_id=e.newCommitId,Nn(m,JSON.stringify(b,null,2)+`
24
+ `,"utf8")}catch(b){process.stderr.write(`warn: failed to update meta.json commit_id: ${b.message}
25
+ `)}}if(v.ok)for(let m of e.unitLocks??[]){if(!t.files.includes(m.file)){await Pe({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:m.testId,body:{commitId:e.newCommitId,fromCommitId:m.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),fe(m.testId);continue}let b;if(e.testmdSync!==!1&&(b=await n(m.file,m.testId),!b.ok)){e.log?.("warn","BUNDLE_SYNC_FAILED","unit bundle sync failed",{commit_id:e.newCommitId,path:m.file,stage:b.stage,error:b.error}),r(m.file,b),process.stderr.write(`warn: unit bundle sync failed (${m.file}): ${b.stage}: ${b.error} \u2014 unit not committed
26
+ `),await Pe({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:m.testId,body:{commitId:e.newCommitId,fromCommitId:m.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),fe(m.testId);continue}let k=e.resolvedTest.steps.filter(R=>R.owningFile===m.file),A=k.map(R=>R.objective).filter(R=>typeof R=="string"&&R.length>0).slice(0,50),S=await En({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:m.testId,body:{commitId:e.newCommitId,fromCommitId:m.fromCommitId,commitMessage:`healed via importer ${e.sourcePath??""}`,totalSteps:k.length,timeTaken:0,objectives:A,...d},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}});if(S.ok){let R=Ne(m.file);try{let c=JSON.parse(Un(R,"utf8"));c.commit_id=e.newCommitId,Nn(R,JSON.stringify(c,null,2)+`
27
+ `,"utf8")}catch(c){process.stderr.write(`warn: failed to update unit meta commit_id (${m.file}): ${c.message}
28
+ `)}b?.ok&&(e.log?.("info","BUNDLE_SYNC_OK","unit bundle pushed",{commit_id:e.newCommitId,path:m.file,bytes:b.bytes}),r(m.file,b))}else process.stderr.write(`warn: unit self-commit failed (${m.file}): ${S.reason??""} ${S.message??""} \u2014 unit lock released
29
+ `),e.log?.("warn","UNIT_COMMIT_FAILED","Imported unit commit failed; lock discarded",{path:m.file,test_id:m.testId,reason:S.reason,message:S.message}),await Pe({baseUrl:`${e.tmsBaseUrl}/kane-cli/v1`,testId:m.testId,body:{commitId:e.newCommitId,fromCommitId:m.fromCommitId},auth:{username:e.basicAuth.username,accessKey:e.basicAuth.access_key}}),fe(m.testId)}return v.ok?{...v,...d}:v}}function Mi(e){if(!(!e.isFirstRun||!e.sourcePath))return async t=>{if(!e.sourcePath)return;let n=Ne(e.sourcePath);try{let r=ws(n)?JSON.parse(Un(n,"utf8")):{};e.session.sessionId&&(r.commit_id=e.session.sessionId),t&&(r.testcase_id=t),e.tmsIds?.testId&&(r.test_id=e.tmsIds.testId),e.tmsIds?.projectId&&(r.project_id=e.tmsIds.projectId),e.tmsIds?.folderId&&(r.folder_id=e.tmsIds.folderId),e.tmsIds?.orgId&&(r.org_id=e.tmsIds.orgId),e.tmsIds?.sessionName&&(r.session_name=e.tmsIds.sessionName),Nn(n,JSON.stringify(r,null,2)+`
30
+ `,"utf8")}catch(r){process.stderr.write(`warn: failed to update meta.json after endTest: ${r.message}
31
+ `)}}}function $i(e){let t=e.decisions,n=e.resolvedTest?.steps,r=e.sourcePath;if(!t||!n||!r)return;let o=[];if(t.forEach((s,i)=>{s.kind==="replay"&&s.replayOnly&&o.push(n[i]?.flatIndex??i+1)}),o.length!==0)return{authoredExecutionPath:Be(r),flatIndices:o}}function ks(e){let t=$i(e),n=ne(e.env),r=e.resolvedTest,o=!!r&&Array.isArray(r.unitFiles)&&(e.stepRunRecords?.length??0)>0,s=o?hs(r,new Set(e.authoredFlatIdx??[]),{onMissingIdentity:re=>{e.log?.("warn","MODULE_IDENTITY_MISSING","*_module.md without a cloud module_id; its blocks upload unfolded",{path:re}),process.stderr.write(`${Fn(re)}
32
+ `)}}):void 0,i=o?bs(e.stepRunRecords):void 0,h=!!r&&r.steps.some(re=>re.block!==void 0),l=o&&h?vs(r,e.blockOutcomes):void 0,d=l?.length&&e.sourcePath?Be(e.sourcePath):void 0,v={files:[]},{session:m,auth:b}=e,k=b.basicAuth?{username:b.basicAuth.username,accessKey:b.basicAuth.access_key}:b.token,A=b.resolvedCreds?.username??b.basicAuth?.username??"",S=b.resolvedCreds?.access_key??b.basicAuth?.access_key??"",R=b.resolvedCreds?.org_id??0,c=b.resolvedCreds?.user_id??0,F=[];for(let re of Object.keys(m.auteurVariables))re.startsWith("secrets.user.")&&F.push({key_name:re.replace("secrets.user.",""),scope:"user"});let C=m.getContext().prior_runs.map(re=>re.status),$=m.auteurVariables,_e=Object.keys($).length>0;return{controllerBaseUrl:n.controllerBaseUrl,tmsBaseUrl:n.tmsBaseUrl,auth:k,authResolver:b.resolver,sessionId:m.sessionId,sessionDir:m.sessionDir,testId:m.testId,commitId:m.sessionId,apMode:m.apMode,projectId:e.projectId,folderId:e.folderId,firstObjective:m.firstObjective??"KaneAI Test",firstUrl:m.firstUrl??"",runDirs:m.getRunDirs(),runObjectives:m.getRunObjectives(),runMetadata:m.getRunMetadata(),startedAt:m.startedAt,endedAt:new Date().toISOString(),totalSteps:e.totalSteps,totalDuration:e.totalDuration,runStatuses:C,orgId:R,userId:c,tmsUsername:A,tmsAccessKey:S,screenshotBaseUrl:m.screenshotBaseUrl,screenshotExtMap:e.screenshotExtMap,shareApiBaseUrl:n.shareApiBaseUrl,variables:_e?$:void 0,variableIds:e.variableIds,secrets:F,codeExport:e.codeExport,...e.mobile?{mobile:!0}:{},onProgress:e.onProgress,log:e.log,shouldUploadArtifacts:e.shouldUploadArtifacts,shouldReplaceLocalOutput:e.shouldReplaceLocalOutput,shouldCommit:e.shouldCommit,isFirstRun:e.isFirstRun,onAtomicReplace:Ni(e,v),onCommitLock:Bi(e,v),onFinalizeSuccess:Mi(e),evidence:e.evidence,evidenceRead:e.evidenceRead,...s?{moduleSpans:s}:{},...l?.length?{blockSpans:l,blockAuthoredExecutionPath:d}:{},...i?{runFlatIndex:i}:{},authoredExecutionPath:e.authoredExecutionPath,...t?{replayOnlyPassthrough:t}:{}}}function _s(e,t=process.env){return t.KANE_MOBILE_APP_BASE_URL||ne(e).mobileAppBaseUrl}var Is=["python","javascript"];function Vi(e){if(e!==void 0){if(!Is.includes(e))throw new Error(`--code-language must be one of: ${Is.join(", ")} (got "${e}")`);return e}}function Ss(e,t){let n=Vi(e.codeLanguage);return{enabled:e.codeExport??t.enabled,language:n??t.language,skipValidation:e.skipCodeValidation??t.skip_validation}}function Rs(e){return{platform:e.platform??"",...e.appId?{appId:e.appId}:{},...e.deviceName?{deviceName:e.deviceName}:{},...e.osVersion?{osVersion:e.osVersion}:{},...e.udid?{udid:e.udid}:{}}}async function Cs(e){try{let t=new Ct(e.tmsBaseUrl,e.auth.username,e.auth.access_key);if(e.mobile){if(!e.mobile.appId)return e.log("warn","ATM_CREATE_SKIPPED","Mobile test not registered in TMS",{reason:"no cloud app id for the build under test"}),null;let r=await t.createMobileAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,mobile_browser:!1,os:e.mobile.platform.toLowerCase(),app_id:e.mobile.appId,project_id:e.projectId,folder_id:e.folderId,authoring_version:4,...e.mobile.deviceName?{deviceName:e.mobile.deviceName}:{},...e.mobile.osVersion?{osVersion:e.mobile.osVersion}:{},...e.mobile.udid?{udid:e.mobile.udid}:{}});return e.log("info","ATM_CREATE_OK","Mobile test created",{test_id:r}),r}let n=await t.createAtmTest({objective:e.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:e.hasCustomProfile,testURL:e.url,project_id:e.projectId,folder_id:e.folderId,authoring_version:4});return e.log("info","ATM_CREATE_OK","Test created",{test_id:n}),n}catch(t){return e.log("error","ATM_CREATE_FAILED","Test creation failed",{error:t instanceof Error?t.message:String(t)}),null}}var Ki=null,Hi=()=>Ki??=import("sharp").then(e=>e.default??e).catch(()=>null),Vt=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;uploadedExt=new Map;constructor(t,n=3,r){this.sas=t,this.maxWorkers=n,this.log=r}updateSas(t){this.sas=t}enqueue(t,n){this.queue.push({operationId:t,buffer:n}),this.pump()}async drain(t=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(n=>{this.drainResolvers.push(n),setTimeout(()=>{n()},t)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let t=this.queue.shift();this.activeCount++,this.processJob(t).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let n of this.drainResolvers)n();this.drainResolvers=[]}})}}async processJob(t){let n,r="image/webp",o=await Hi();if(o)try{let l=await o(t.buffer).webp({quality:80}).toBuffer();n=new Uint8Array(l)}catch(l){n=new Uint8Array(t.buffer),r="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:t.operationId,error:l instanceof Error?l.message:String(l)})}else n=new Uint8Array(t.buffer),r="image/png";let s=r==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${t.operationId}.${s}`,h=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)try{let d=await Z(h,{method:"PUT",headers:{"Content-Type":r,"x-ms-blob-type":"BlockBlob"},body:n});if(d.ok){this.uploadedExt.set(t.operationId,s);return}if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:t.operationId,status:d.status,attempts:this.maxRetries+1})}catch{if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:t.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(t){let n=t===0?1e3:3e3;return new Promise(r=>setTimeout(r,n))}getExt(t){return this.uploadedExt.get(t)??"png"}getExtMap(){return this.uploadedExt}isNearExpiry(){if(!this.sas.expiry)return!1;let t=new Date(this.sas.expiry).getTime();return Date.now()>t-5*6e4}};import{platform as qi,arch as Gi}from"os";function Es(e){let t={proxyUrl:Cr,sessionId:e.sessionId,identity:e.identity,device:{cli_version:_t,platform:qi(),arch:Gi(),host_agent:mn(),invocation_mode:e.invocationMode},getToken:e.getToken};return new un(t)}async function zi(e){try{let t=ne(e.env),r=await new Ee(t.controllerBaseUrl,e.auth).getScreenshotSas();return e.session.setScreenshotSas(r),e.log("info","SCREENSHOT_SAS_OK","Screenshot SAS fetched",{base_url:r.base_url,container:r.container,expiry:r.expiry}),new Vt(r,3,e.log)}catch(t){return e.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS fetch failed",{error:t instanceof Error?t.message:String(t)}),null}}async function Yi(e){if(e.session.hasRemoteLogger||!e.tmsCreds)return null;let t=e.tmsCreds,n=Es({sessionId:e.session.sessionId,identity:{org_id:String(t.org_id??""),user_id:String(t.user_id??""),machine_id:Nr(),email:t.email??null,email_domain:t.email_domain??"unknown",user_type:t.user_type??"unknown",env:e.env,plan:t.plan??"unknown"},invocationMode:e.invocationMode,getToken:e.getToken});return e.session.setRemoteLogger(n),n.start(),n}async function Vn(e){let[t,n]=await Promise.allSettled([e.skipScreenshotQueue?Promise.resolve(null):zi({env:e.env,auth:e.auth,session:e.session,log:e.log}),Yi({env:e.env,tmsCreds:e.tmsCreds,getToken:e.getToken,session:e.session,invocationMode:e.invocationMode})]);return{resolver:e.resolver,screenshotQueue:t.status==="fulfilled"?t.value:null,remoteLogger:n.status==="fulfilled"?n.value:null}}async function Bn(e){await Promise.allSettled([e.screenshotQueue?.drain(),e.remoteLogger?.shutdown()])}async function Rc(e,t){switch(e.kind){case"boot":{if(t.state.identityServicesRef.current)return t.state.identityServicesRef.current;let n=t.auth.initResolver(e.env);n.prime(e.tmsCreds),t.state.setTmsCredsCache(e.tmsCreds);let r=await Mn(e.env,e.tmsCreds,n,t);return $n(r,t),r}case"login":case"switch":{let n=t.state.identityServicesRef.current;n&&(await Bn(n),n.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null);let r=t.auth.initResolver(e.env),o=await r.resolve(!0).catch(()=>null);if(!o)return t.log("warn","IDENTITY_VALIDATE_FAILED","Identity validation failed",{kind:e.kind,env:e.env}),null;t.state.setTmsCredsCache(o);let s=await Mn(e.env,o,r,t);return $n(s,t),s}case"logout":{let n=t.state.identityServicesRef.current;return n&&(await Bn(n),n.resolver.revoke()),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null,t.state.setTmsCredsCache(null),null}case"resessionize":{let n=t.state.identityServicesRef.current;n&&await Bn(n),t.state.identityServicesRef.current=null,t.state.screenshotQueueRef.current=null;let r=t.state.getTmsCredsCache(),o=t.auth.getResolver(),s=o??t.auth.initResolver(e.env);!o&&r&&s.prime(r);let i=await Mn(e.env,r,s,t);return $n(i,t),i}}}async function Mn(e,t,n,r){let o=r.auth.getBasicAuth(),s=o?null:await r.auth.getToken(),i=o?{username:o.username,accessKey:o.access_key}:s??null;return i===null?{resolver:n,screenshotQueue:null,remoteLogger:null}:Vn({env:e,tmsCreds:t,resolver:n,auth:i,getToken:()=>r.auth.getToken(),session:r.getSession(),log:r.log,skipScreenshotQueue:r.options?.skipScreenshotQueue,invocationMode:"tui"})}function $n(e,t){t.state.identityServicesRef.current=e,t.state.screenshotQueueRef.current=e.screenshotQueue,e.remoteLogger&&(t.exit.registerCleanup("remote-logger",()=>e.remoteLogger.shutdownSync()),t.exit.setExitRemoteLogger(e.remoteLogger))}function As(e){if(!e.executionId)return;let t={executionId:e.executionId,published:e.published};return e.testId&&(t.testId=e.testId),e.testcaseId&&(t.testcaseId=e.testcaseId),e.commitId&&(t.commitId=e.commitId),t}import{relative as Qi}from"path";import{readFile as Wi}from"fs/promises";function xs(e){return e.shouldUploadArtifacts&&!e.lockHeld&&!e.isFirstRun&&e.sealed&&!!e.testId}var Kn=e=>e instanceof Error?e.message:String(e);async function Ps(e){let{controller:t,tms:n,testId:r,sessionId:o,executionId:s,sealedPackPath:i,projectId:h}=e,l;try{let d={key:"evidence",content_type:"application/zip",filename:`${s}.evidence`},m=(await t.getPresignedUrls(r,o,[d])).urls?.evidence?.upload_url;if(!m)return{ok:!1,stage:"presign",error:"presign response missing evidence upload_url"};l=m}catch(d){return{ok:!1,stage:"presign",error:Kn(d)}}try{let d=await Wi(i);await io(l,d,"application/zip")}catch(d){return{ok:!1,stage:"upload",error:Kn(d)}}try{await n.ingestEvidence(s,h)}catch(d){return{ok:!1,stage:"ingest",error:Kn(d)}}return{ok:!0}}function Ts(e){return e.isFirstRun||Ot(e.decisions)||e.push===!0||e.author===!0}function Ls(e,t){return{projectId:e?.project_id??t.project_id??null,folderId:e?.folder_id??t.folder_id??null}}function Hn(e){return e?"author":"replay"}function Zi(e,t){return e?{session:e,ownsLifecycle:!1}:{session:t,ownsLifecycle:!0}}function Kt(e,t){return e?.total_runs??t?.length??1}function Xi(e){let t=(e?.per_flow_metadata??[]).map(n=>({resultCode:n?.result_code!=null?Number(n.result_code):null}));return{resultCode:e?.result_code!=null?Number(e.result_code):null,...t.length?{perFlow:t}:{}}}var Ht=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"];async function qd(e,t,n){let{path:r,cwd:o,opts:s,isAgent:i,disableAskUser:h,resolved:l,resolvedAuth:d,cliOverrides:v,environment:m,envConfig:b,profile:k,model:A,creds:S,configStore:R,session:c}=e,F=!1,f=await oa(r,l,s,{resolvedAuth:d,tmsBaseUrl:b.tmsBaseUrl},c.sessionId,n);if(f.abort)return{overallStatus:"failed",exitCode:f.abort.exitCode,outputDir:X(r),durationS:0,uploadResult:null};let C=f.lockAcquired,$=!1;try{let rn=function(a,u){let p=l.steps[a],y=Os(p.config,v),w=qe(Se.raw,y.variables,p.objective);return On({objective:w.objective,url:P.kind==="device"?void 0:Gt(a)?we??void 0:p.unitEntryUrl,requireStartUrl:P.kind==="web"&&Gt(a)&&Ms,model:A,chrome:G,device:P.kind==="device"?P.device:void 0,auth:d,sessionId:c.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:y.max_steps??$s??30,headless:V.headless??!1,disableAskUser:!0,variables:Object.keys(w.variables).length>0?w.variables:void 0,globalContext:y.global_context??or,localContext:y.local_context??sr,sessionContext:c.getContext(),bugDetection:s.bugDetection??K.bug_detection,evidence:nn()})},Ze=function(a){let p=l.steps[a].trace[0].stepIndex,y=l.rootSteps.find(g=>g.index===p);l.steps.slice(0,a).some(g=>g.trace[0].stepIndex===p)||t.onAgentEvent({type:"test_md_step_start",step_index:p,heading:y.heading,ref:y.body.kind==="import_ref"?{kind:"import",label:y.body.path,unit_kind:vn(y.body.path)}:null,...y.replayOnly?{replay_only:y.replayOnly}:{}})},ht=function(a,u,p,y,w,g){let _=l.steps[a],L=_.trace[0].stepIndex,N=!l.steps.slice(a+1).some(M=>M.trace[0].stepIndex===L),E=p?.status==="passed"?"passed":"failed",T=p?.reason??w??void 0,j=p?.duration??g,I=p?.verdict;if(I&&typeof I=="object"){let M=typeof I.one_liner=="string"?I.one_liner:"",U=typeof I.bug_title=="string"&&I.bug_title?I.bug_title:M;if(U&&E==="failed"){let me=[I.family,I.category].filter(Boolean).join("/"),kt=typeof I.confidence=="number"?`, confidence ${I.confidence.toFixed(2)}`:"";T=`${T??"failed"} \u2014 bug verdict: ${U}${me?` [${me}${kt}]`:""}`}let Xe=typeof I.category_proposal=="string"?I.category_proposal:"";Xe&&E==="failed"&&(T=`${T??"failed"}; category proposal: ${Xe} \u2014 consider adding to taxonomy`),t.onAgentEvent({type:"test_md_bug_verdict",step_index:_.trace[0].stepIndex,confirmed:I.confirmed===!0,bug_title:U||null,family:I.family??null,category:I.category??null,category_proposal:Xe||null,severity:I.severity??null,confidence:typeof I.confidence=="number"?I.confidence:null,one_liner:M||null})}let{continueOverall:B}=ae.recordStep(_,{status:E,duration_s:j,reason:T}),Q=Os(_.config,v),x=qe(Se.raw,Q.variables,_.objective).objective;if(p){let M=qo(p,u,y);c.addRunResult(Go(p,x,u,M),p.total_runs)}else c.addRunResult({index:u,objective:x,status:E,summary:"",context:{memory:{},variables:{},pointer:""}},1);if(N||!B){let M=ae.snapshotOutcomes().find(U=>U.rootStepIndex===L);t.onAgentEvent({type:"test_md_step_end",step_index:L,status:M.status,duration_s:M.duration_s??0,ref_kind:M.refKind??null,unit_kind:M.refKind==="import"?vn(M.refLabel??""):null,inlined_count:M.inlinedCount??null,failed_sub_step_index:M.failedSubStepIndex??null})}return B},je=function(a,u){let p=l.steps[a],y=p.trace[p.trace.length-1].heading;process.stderr.write(`\u{1FA79} step ${p.flatIndex} "${y}" @${u} broke on replay \u2014 adaptive heal cannot re-author a replay-only step; the run fails here
33
+ `),c.log("warn","REPLAY_ONLY_STEP_FAILED","Replay-only step failed on replay; heal not attempted",{flat_index:p.flatIndex,marker:u})};var _e=rn,re=Ze,oe=ht,se=je;let qt={committed:!1},ue=!1,lt=new Set,Ye=0,Fs=l.steps.some(a=>a.block!==void 0),Gt=a=>Fs?Ye===0:a===0,ge=!1,ct=!1,dt=s.author===!0?0:nt(f.decisions),zt=0,Yt=0,zn=a=>typeof a?.credits_consumed=="number"&&Number.isFinite(a.credits_consumed)?a.credits_consumed:0;{let a;try{a=typeof s.sessionContext=="string"?JSON.parse(s.sessionContext):void 0}catch{a=void 0}let u=ea({resolved:l,cwd:o,globalDir:pe(It,"variables"),opts:s,isAgent:i,authorFrom:dt,produced:Io(a)});if(u.refuse)return i?process.stdout.write(JSON.stringify(u.event)+`
34
+ `):process.stderr.write(u.text),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null}}C&&t.onLockState({phase:"acquired",scope:"preemptive"}),c.start({model:A,environment:m,profile:k}),c.setRecordingEnabled(!1);let ut=0,Yn=d.basicAuth?{username:d.basicAuth.username,accessKey:d.basicAuth.access_key}:d.token??null,We=null;if(Yn!==null){let a=await Vn({env:m,tmsCreds:d.resolvedCreds??null,resolver:d.resolver,auth:Yn,getToken:async()=>d.token??null,session:c,log:(u,p,y,w)=>c.log(u,p,y,w),skipScreenshotQueue:!!s.local||!d.basicAuth,invocationMode:i?"agent":"cli"});We=a.screenshotQueue,a.remoteLogger&&(n.register("remote-logger",()=>a.remoteLogger.shutdownSync()),n.remoteLogger=a.remoteLogger,e.skipGlobalRemoteLogger||Pr(a.remoteLogger))}if(s.name){try{go(s.name)}catch(a){return process.stderr.write(`error: ${a.message}
35
+ `),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null}}c.setSessionName(s.name)}let Wt={};for(let[a,u]of Object.entries(l.rootGlobal))Ht.includes(a)||(Wt[a]=u);for(let[a,u]of Object.entries(v))Ht.includes(a)||u!==void 0&&(Wt[a]=u);let V={...l.chrome};for(let a of Ht){let u=v[a];u!==void 0&&(V[a]=u)}let Je={...Wt,...V},Le=ho({flags:{target:s.target,deviceName:s.deviceName,osVersion:s.osVersion,app:s.app},file:{target:l.rootGlobal.target,device_name:l.rootGlobal.device_name,os_version:l.rootGlobal.os_version,app:l.rootGlobal.app,no_reset:l.rootGlobal.no_reset}});if(Le.kind==="invalid")return process.stderr.write(`error: ${Le.message}
36
+ `),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null};for(let a of Le.warnings)process.stderr.write(`warning: ${a}
37
+ `);let ye=Le.kind==="mobile"?Le:null;if(Le.kind==="web"&&l.rootGlobal.target===void 0){let u=l.rootSteps.map(y=>y.body).find(y=>y.kind==="objective")?.text??"",p=/^\s*\[mobile:\s*(emulator|simulator)\]/.exec(u);if(p)return process.stderr.write(`error: this test was designed for a mobile ${p[1]} but its frontmatter has no target: \u2014 add \`target: ${p[1]}\` and \`app: <path-to-build | AppId>\` to the file (or re-design it with the app named in the design chat: kane-cli design tests --use-case <uc> --force), then run again
38
+ `),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null}}ye?(Je.target=ye.target,ye.app&&(Je.app=ye.app)):(l.rootGlobal.target==="emulator"||l.rootGlobal.target==="simulator")&&(delete Je.app,delete Je.no_reset),c.setResolvedGlobal(Je);let Wn=S.getActiveProfile()??"default",Jn=S.getDefaultEnv(),{rehydrateIfStale:Us}=await import("./profile-sync-DTTRRIVP.js");Us(S,R,Wn,Jn);let K=R.load(),Qn=(v.assertion_mode??K.assertion_mode)==="dom"?"dom":"visual",Zn=v.final_validation,Xn=Zn===void 0?void 0:Zn==="on",q=K.project_id??null,ve=K.folder_id??null,er=be(r)?.environment_id,tr=Ts({isFirstRun:f.isFirstRun,decisions:f.decisions,push:s.push===!0,author:s.author===!0});if(tr){if(d.basicAuth){let a=await Ur({creds:S,config:R,profile:Wn,env:Jn,tmsCreds:d.basicAuth,isLocal:!!s.local,log:(u,p,y,w)=>c.log(u,p,y,w),onAnnounce:e.onAnnounce,onFatalExit:e.onFatalExit});if(a.status==="ok"){q=a.projectId,ve=a.folderId,K=R.load();let u=be(r);u?.project_id&&(q=u.project_id,ve=u.folder_id??ve),i&&a.autoDefaulted&&t.onAgentEvent(Fr(a.autoDefaulted))}else if(a.status==="cancelled"){process.stderr.write(`error: project/folder configuration failed. See remediation above, or use --local.
39
+ `);let{shutdown:u}=await import("./exit-manager-ZLDO54S4.js");return u(2,"project/folder gate failed"),{}}}}else{let a=be(r);({projectId:q,folderId:ve}=Ls(a,{project_id:K.project_id??null,folder_id:K.folder_id??null})),c.log("info","GATE_SKIP_REPLAY","Project/folder gate skipped (planned pure replay)",{meta_project:!!a?.project_id,config_project:!!K.project_id})}{let a=lo(l),u=d.resolvedCreds?.org_id!=null?String(d.resolvedCreds.org_id):void 0,p=a.find(g=>g.project_id&&q&&g.project_id!==String(q)||g.org_id&&u&&g.org_id!==u),y=new Set(a.map(g=>g.project_id).filter(Boolean)),w=new Set(a.map(g=>g.org_id).filter(Boolean));if(p||y.size>1||w.size>1){let g=p??a[0];return process.stderr.write(`error: tenant mismatch \u2014 imported test '${g.file}' was authored under project ${g.project_id??"?"} / org ${g.org_id??"?"}, which differs from the run's project/org (or another imported test). Cross-tenant imports are not allowed.
40
+ `),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null}}}let Ie={},P;try{P=await os(ye?"device":"web",{prepareDevice:async()=>{let a=ye,u=await jr({platform:a.platform,...a.deviceSelector?{device:a.deviceSelector}:{},...a.app?{app:a.app}:{},...a.noReset!==void 0?{noReset:a.noReset}:{},defaults:K.mobile,interactive:Co()&&!i,agent:i,...!s.local&&d.basicAuth&&d.resolvedCreds?.org_id?{cloudUpload:{env:m,orgId:String(d.resolvedCreds.org_id),userId:String(d.resolvedCreds.user_id??""),baseUrl:_s(m),auth:{username:d.basicAuth.username,accessKey:d.basicAuth.access_key}}}:{},onProgress:p=>process.stderr.write(`${p}
41
+ `)});return Ie.deviceName=u.target.displayName,u.target.osVersion&&(Ie.osVersion=u.target.osVersion),u.target.modelIdentifier&&(Ie.modelIdentifier=u.target.modelIdentifier),{device:u.device,...u.appRef?{appRef:u.appRef}:{},...u.appId?{appId:u.appId}:{}}},prepareWeb:()=>Ln({config:{chrome_profile_path:V.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:et,headless:V.headless??!1,wsEndpoint:V.ws_endpoint,cdpEndpoint:V.cdp_endpoint})})}catch(a){if(ye){let u=a instanceof Dr?`${a.doctorText}
42
+ ${a.message}`:a.message;process.stderr.write(`error: mobile target preparation failed: ${u}
43
+ `)}else process.stderr.write(`error: Chrome launch failed: ${a.message}
44
+ `);return await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null}}if(P.kind==="device"&&!P.device.app_package)return process.stderr.write(`error: ${bo(ye.target,"app")}
45
+ `),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null};let G=P.kind==="web"?P.chrome:{instance:null,tempDir:null},he=G.instance;he&&n.register("chrome",()=>{try{he?.kill()}catch{}});let Jt=pn(G.cdpEndpoint),H=null,nr=!1,mt=()=>{if(!H?.diedUnexpectedly)return!1;if(!nr){nr=!0;let a=H.stderr.slice(-500);c.log("error","RUNNER_FATAL_DEATH","v16-runner exited unexpectedly mid-session",{stderr_tail:a}),process.stderr.write(`error: v16-runner exited unexpectedly mid-session \u2014 remaining steps skipped.
46
+ `)}return!0},z=null,rr=G.cdpEndpoint??V.cdp_endpoint;if(rr&&!V.ws_endpoint&&!V.headless&&!e.isAgent)try{z=Pn({headless:V.headless??!1,cdpEndpoint:rr,chromePid:he?.process.pid}),z&&n.register("marker-overlay",()=>z?.kill())}catch(a){c.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay spawn failed",{error:String(a)})}d.resolvedCreds?.org_id!==void 0&&c.setOrgId(String(d.resolvedCreds.org_id)),c.setUserIdentity(d.resolvedCreds?.username??null,d.resolvedCreds?.email??null);let Se=ms({objective:"",globalDir:pe(It,"variables"),localDir:pe(o,".testmuai","variables"),file:s.variablesFile,inline:s.variables}),Ns=l.rootGlobal.variables??{},ie=ta(Se.raw,Ns);c.setAuteurVariables(ie.auteur);let or=jn(pe(It,"global-memory.md"))??void 0,sr=jn(pe(o,".testmuai","context.md"))??void 0;s.local?process.stderr.write(`info: --local \u2014 cloud upload skipped
47
+ `):d.basicAuth?q||(tr?process.stderr.write(`warn: cloud upload skipped \u2014 no project configured.
48
+ `):process.stderr.write(`warn: evidence publish will be skipped \u2014 no project_id in meta.json or config.
49
+ `)):process.stderr.write(`warn: cloud upload skipped \u2014 TMS credentials could not be resolved.
50
+ Run 'kane-cli login' (OAuth) or 'kane-cli config set-username/set-access-key' (basic auth).
51
+ `);let Oe=!s.local&&!!d.basicAuth&&q!=null;if(c.log("info","PIPELINE_GATE_STATE","Initial gate state (run-start)",{phase:"run-start",shouldUploadArtifacts:Oe,lockHeld:C,isFirstRun:f.isFirstRun,hasAuth:f.hasAuth}),Oe&&f.testId==null&&!f.degradedReadonly){let a=ne(m);try{let u=await Cs({tmsBaseUrl:a.tmsBaseUrl,auth:d.basicAuth,objective:l.steps[0].objective,url:"",projectId:q,folderId:ve??"",hasCustomProfile:!!V.chrome_profile,...P.kind==="device"?{mobile:Rs({platform:P.device.platform,appId:P.appId,deviceName:Ie.deviceName,osVersion:Ie.osVersion,udid:P.device.udid})}:{},log:(p,y,w,g)=>c.log(p,y,w,g)});u&&c.setTestId(u)}catch(u){process.stderr.write(`warn: ATM test creation failed: ${u.message}
52
+ `)}}else f.testId&&c.setTestId(f.testId);let ft={};if(d.basicAuth&&!s.local&&(ie.secretEntries.length>0||ie.nonSecretEntries.length>0))try{ft=await fs({variables:ie,auth:d.basicAuth,orgId:String(d.resolvedCreds?.org_id??""),env:m,localMode:!!s.local,log:(a,u,p,y)=>c.log(a,u,p,y)})}catch(a){process.stderr.write(`warn: variable/secret push failed: ${a.message}
53
+ `)}let Qt=new Map;for(let[a,u]of ie.nonSecretEntries)Qt.set(a,u.value);let Zt=new Map;for(let[a,u]of ie.secretEntries)Zt.set(a,u.value);async function Xt(a){if(!d.basicAuth||s.local)return;let u=[],p=[];for(let[w,g]of Object.entries(a))if(g.secret){if(Zt.get(w)===g.value)continue;p.push([w,g])}else{if(Qt.get(w)===g.value)continue;u.push([w,g])}if(u.length===0&&p.length===0)return;let y=ne(m);if(u.length>0){let w=new He(y.tmsBaseUrl,d.basicAuth.username,d.basicAuth.access_key);for(let[g,_]of u)try{let L=await w.upsertVariable({name:g,value:_.value});ft[g]=L.id,Qt.set(g,_.value),c.log("info","VAR_PUSH_STEP","Variable updated mid-run",{name:g})}catch(L){c.log("warn","VAR_PUSH_STEP_FAILED","Mid-run variable push failed",{name:g,error:String(L)})}}if(p.length>0){let w=new Ke(y.secretsBaseUrl);for(let[g,_]of p)try{await w.pushSecret({secretKey:g,secretValue:_.value,username:d.basicAuth.username,accessKey:d.basicAuth.access_key,orgId:String(d.resolvedCreds?.org_id??"")}),Zt.set(g,_.value),c.log("info","SECRET_PUSH_STEP","Secret updated mid-run",{name:g})}catch(L){c.log("warn","SECRET_PUSH_STEP_FAILED","Mid-run secret push failed",{name:g,error:String(L)})}}}let Qe=We?(a,u,p,y)=>{if(!(C||f.isFirstRun))return;if(O&&y){Ko(O.packTestDir,y,We,(g,_,L,N)=>c.log(g,_,L,N));return}let w=ut+u;Ho(c.sessionDir,w,a,We,(g,_,L,N)=>c.log(g,_,L,N),p)}:void 0,ir=l.rootTitle??l.rootSteps[0]?.heading??qn(r),Bs=Object.keys(ie.raw).length>0?Ue(ie.raw,ir).objective:ir,we=zo({flag:s.url,frontmatter:l.rootGlobal?.url,configDefault:R.load().default_url}),Ms=Yo({resolvedUrl:we,local:!!s.local,allowMissingUrl:!!s.allowMissingUrl,isTTY:!!process.stdin.isTTY});c.setFirstRun(Bs,we??"");let ae=new Ft(l),pt=new Date().toISOString(),ar=Date.now(),en=e.evidenceAttach?null:new Jr({origin:"testmd",runKind:"author",pid:process.pid,title:l.rootTitle??qn(r),started:pt,producerVersion:_t,surfaces:we?[we]:void 0,testmdRelPath:Qi(o,r),definition:{path:"test.md",content:Ds(r,"utf8")},cwd:o,packRootDir:pe(c.sessionDir,"evidence")}),J=Zi(e.evidenceAttach,en),W=J.session,O=null;if(e.evidenceAttach)O={executionId:e.evidenceAttach.id,testId:e.evidenceAttach.test,packTestDir:e.evidenceAttach.packTestDir};else if(en)try{O=await en.start()}catch(a){c.log("warn","EVIDENCE_START_FAILED","Evidence pack creation failed",{error:String(a)})}let Re=[],gt=[],lr,De,tn=(a,u,p,y,w)=>{if(!O)return;W.noteSpawn(w?.length?{...a,steps:a.steps.map(_=>({..._,verifies:w}))}:a),a.resolution&&(lr=a.resolution),De=$r(De,a.runnerEnvironment),Re.push(Xi(u));let g=Kt(u,y);for(let _=0;_<g;_++)gt.push(p+_)},nn=()=>O?{packTestDir:O.packTestDir,ordinalOffset:W.nextOrdinalOffset()}:void 0,cr=async a=>{if(!O||!W)return;let u=Hr(Re.length?Re:[{resultCode:null}]);await W.archiveAttempt(u,a,{log:(p,y,w,g)=>c.log(p,y,w,g)}),Re.length=0,gt.length=0},$s=typeof s.maxSteps=="string"&&s.maxSteps!==""?parseInt(s.maxSteps,10):void 0,on=[],bt=Ve.hasBlocks(l.steps)?new Ve(l.steps,f.decisions,{evaluate:async a=>{let u=c.nextRunIndex(),p=Ye===0,w={...On({objective:a.join(`
54
+ `),conditions:a,url:p&&P.kind!=="device"?we??void 0:void 0,model:A,chrome:G,auth:d,sessionId:c.sessionId,runIndex:u,windowSize:{width:1920,height:1080},maxSteps:1,headless:V.headless??!1,disableAskUser:!0})};delete w.run_id,At(w,{environment:m});let g=null;try{for await(let _ of H.run(`run-${u}`,"evaluate",w)){if(t.onAgentEvent(_),_.type==="run_end"){g=_;break}if(_.type==="error")break}}catch(_){c.log("error","BLOCK_CONDITION_JUDGE_FAILED","evaluate run failed",{error:_.message})}return p&&g&&Ye++,c.log("info","BLOCK_CONDITION_JUDGED","Control-flow conditions judged",{conditions:a,results:g?.condition_results??null,reasons:g?.condition_reasons??null}),g?.condition_results??a.map(()=>null)},whileConfig:a=>$t(l.steps[a]),sleep:a=>new Promise(u=>setTimeout(u,a))}):null;async function dr(a){if(!bt)return null;let u=await bt.before(a),p=l.steps[a];switch(u.action){case"run":return null;case"author":return{kind:"author"};case"skip":return{kind:"done",stop:null};case"structural":return Ze(a),ae.recordStep(p,{status:"passed",duration_s:0}),c.log("info","BLOCK_STRUCTURAL_STEP","Control-flow marker step",{step:p.flatIndex,marker:p.controlFlow}),{kind:"done",stop:null};case"jump":return c.log("info","BLOCK_WHILE_REENTER","While condition holds \u2014 re-entering the body",{from:p.flatIndex,to:u.to+1}),{kind:"jump",to:u.to};case"fail":return Ze(a),ae.recordStep(p,{status:"failed",duration_s:0,reason:u.reason}),c.log("error","BLOCK_STEP_FAILED",u.reason,{step:p.flatIndex}),{kind:"done",stop:{failedAt:a,cancelled:!1}}}}async function ur(a){let u=l.steps[a];Ze(a),Ye++,ue=!0,lt.add(l.steps[a].flatIndex);let p=c.nextRunIndex();ut=p,await Xt(qe(Se.raw,u.config.variables,u.objective).raw);let y=rn(a,p),w=Date.now(),g=null,_=null,L=null,N=!1,E=0,T=Pt(),j={...y};delete j.run_id,At(j,{environment:m});let I=`run-${p}`;try{z?.setRunActive(!0);try{for await(let x of H.run(I,"author",j)){if(t.onAgentEvent(x),T=fn(T,x),x.type==="bifurcation"){let M=x.count??x.flows?.length??0;(x.is_single_flow??M<=1)||(L=x.flows??null,N=!0,E=0)}else if(x.type==="run_start"&&N)E++;else if(x.type==="step_event"&&x.event==="reasoning")z?.setStepText(x.detail);else if(x.type==="step_end"&&(x.status==="passed"&&z?.setStepComplete(),Qe)){let M=N?Math.max(0,E-1):0;Qe(x.index,M,x.child_id,typeof x.ordinal=="number"&&x.id?{ordinal:x.ordinal,id:x.id}:void 0)}if(x.type==="run_end"){g=x;break}if(x.type==="error"){_=x.message??"runner error";break}}}finally{z?.setRunActive(!1)}}catch(x){_=x.message}H.diedUnexpectedly&&mt();let B=Math.round((Date.now()-w)/1e3),Q=ht(a,p,g,L,_,B);return c.recordStepRun({testmdStepIndex:l.steps[a].flatIndex,runIndex:p,totalRunDirs:Kt(g,L)}),Yt+=zn(g),tn(T,g,p,L,l.steps[a].verifies),{continueOverall:Q}}async function mr(a){if(F||e.signal?.aborted)return{failedAt:a,cancelled:!0};if(mt())return{failedAt:a,cancelled:!1};let u=l.steps[a],p=f.decisions[a];if(p.kind!=="replay")return process.stderr.write(`error: runReplayPhase invoked on a non-replay decision at step ${a}
55
+ `),{failedAt:a,cancelled:!1};let y=c.nextRunIndex();ut=y;let w=Gt(a)?we??void 0:l.steps[a].unitEntryUrl,g={width:K.window_size.width,height:K.window_size.height},_=qe(Se.raw,u.config.variables,u.objective),L=Sn({step:u,decision:p,chrome:G,device:P.kind==="device"?P.device:void 0,auth:d,sessionId:c.sessionId,runIndex:y,sessionDir:c.sessionDir,windowSize:g,environmentId:er,forceNavigateUrl:P.kind==="device"?void 0:w,sessionContext:c.getContext(),variables:Object.keys(_.variables).length>0?_.variables:void 0,evidence:nn(),investigationAsync:!J.ownsLifecycle});await Xt(_.raw),Ze(a),Ye++;let N=Date.now(),E=null,T=null,j=Pt(),I={...L};delete I.run_id,At(I,{environment:m});let B=`run-${y}`;try{z?.setRunActive(!0);try{for await(let U of H.run(B,"replay",I)){if(t.onAgentEvent(U),j=fn(j,U),U.type==="step_event"&&U.event==="reasoning"?z?.setStepText(U.detail):U.type==="step_end"&&(U.status==="passed"&&z?.setStepComplete(),Qe&&Qe(U.index,0,U.child_id,typeof U.ordinal=="number"&&U.id?{ordinal:U.ordinal,id:U.id}:void 0)),U.type==="run_end"){E=U;break}if(U.type==="error"){T=U.message??"runner error";break}}!J.ownsLifecycle&&E?.status==="failed"&&on.push({exited:H.exited.then(()=>{}).catch(()=>{}),cancel:()=>{try{H?.cancel()}catch{}}})}finally{z?.setRunActive(!1)}}catch(U){T=U.message}if(H.diedUnexpectedly&&mt(),F)return{failedAt:a,cancelled:!0};let Q=Math.round((Date.now()-N)/1e3),x=ht(a,y,E,null,T,Q);c.recordStepRun({testmdStepIndex:l.steps[a].flatIndex,runIndex:y,totalRunDirs:Kt(E,null)}),tn(j,E,y,null,l.steps[a].verifies);let M=!!T||E?.status==="failed";return Po(a,M?"failed":"ok"),M||!x?{failedAt:a,cancelled:!1}:null}async function Vs(a){xo(a,l.steps.length),bt?.reset();for(let u=0;u<a;u++){let p=await dr(u);if(p?.kind==="done"){if(p.stop)return p.stop;continue}if(p?.kind==="jump"){u=p.to-1;continue}if(p?.kind==="author"){let w=l.steps[u];if(w.replayOnly)return xe(u,w.replayOnly),je(u,w.replayOnly),ae.recordStep(w,{status:"failed",duration_s:0,reason:`replay-only step @${w.replayOnly} has no recording`}),{failedAt:u,cancelled:!1};if(!(await ur(u)).continueOverall)return{failedAt:u,cancelled:!1};continue}let y=await mr(u);if(y)return y}return{failedAt:null,cancelled:!1}}let fr=async()=>{if(C||f.degradedReadonly)return!0;let a=d.basicAuth;if(!a){let g=await d.resolver.resolve(!0);g?.username&&g?.access_key&&(a={username:g.username,access_key:g.access_key},d.basicAuth=a)}if(!f.testId||!f.fromCommitId||!a)return process.stderr.write(`error: cannot acquire lock \u2014 missing required state
56
+ `),!1;let u=c.sessionId,p=s.onLockConflict??l.rootGlobal.on_lock_conflict??"readonly",y=await Gn({tmsBaseUrl:b.tmsBaseUrl,testId:f.testId,fromCommitId:f.fromCommitId,newCommitId:u,basicAuth:a,onLockConflict:p}),w=y.outcome;if(w==="ok"){C=!0,f.newCommitId=u,c.log("info","MID_RUN_LOCK_ACQUIRED","Mid-run lock acquired",{test_id:f.testId}),i&&t.onLockState({phase:"acquired",scope:"mid_run"}),jt({baseUrl:Ge(b.tmsBaseUrl),testId:f.testId,auth:ze(a),lifecycle:n});let g=await js({resolved:l,decisions:f.decisions,tmsBaseUrl:b.tmsBaseUrl,newCommitId:u,basicAuth:a,mode:p,lifecycle:n,alreadyLocked:f.unitLocks,allUnits:!0});return g.outcome==="ok"?f.unitLocks.push(...g.locks):process.stderr.write(`warn: mid-run unit lock acquisition degraded (${g.outcome}) \u2014 affected units will not self-commit
57
+ `),!0}if(y.outcome==="readonly"){f.degradedReadonly=!0;let g=y.reason==="base_mismatch"?"base commit mismatch":"concurrent session";return c.log("warn","MID_RUN_LOCK_READONLY","Mid-run lock unavailable; healing continues in readonly (no commit)",{test_id:f.testId,reason:y.reason}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:"readonly"}),process.stderr.write(`[lock] mid-run ${g} \u2014 healing continues in readonly mode (no commit)
58
+ `),!0}return c.log("error","MID_RUN_LOCK_CONFLICT","Mid-run lock acquisition failed",{reason:w}),i&&t.onLockState({phase:"conflict",scope:"mid_run",reason:w}),process.stderr.write(`error: mid-run lock acquisition failed (${w})
59
+ `),!1},pr=async()=>{try{z?.kill(),z=null,he?.kill(),G=await Ln({config:{chrome_profile_path:V.chrome_profile??null,window_size:{width:1920,height:1080}},startUrl:et,headless:V.headless??!1,wsEndpoint:V.ws_endpoint,cdpEndpoint:V.cdp_endpoint}),he=G.instance,Jt=pn(G.cdpEndpoint);let a=G.cdpEndpoint??V.cdp_endpoint;if(a&&!V.ws_endpoint&&!V.headless&&!e.isAgent)try{z=Pn({headless:V.headless??!1,cdpEndpoint:a,chromePid:he?.process.pid})}catch(u){c.log("warn","OVERLAY_SPAWN_FAILED","Marker overlay respawn failed",{error:String(u)})}return c.log("info","BROWSER_RECYCLED","Fresh browser brought up for the replay re-attempt",{cdp_endpoint:G.cdpEndpoint}),!0}catch(a){return c.log("error","RECYCLE_FAILED","Could not bring up a fresh browser for the replay re-attempt",{error:a.message}),process.stderr.write(`error: could not recycle the browser for the replay re-attempt: ${a.message}
60
+ `),!1}},gr=async()=>{if(P.kind!=="device"||P.device.target_kind!=="simulator"||P.device.no_reset===!0||!P.device.udid)return;let a=await Ar("xcrun",["simctl","keychain",P.device.udid,"reset"],{timeoutMs:3e4});a.code===0?c.log("info","SIM_KEYCHAIN_RESET","Simulator keychain reset for the replay re-attempt"):c.log("warn","SIM_KEYCHAIN_RESET_FAILED","Could not reset the simulator keychain; keychain-backed login state may survive the recycle",{error:a.stderr.trim()||a.stdout.trim()})};if(i){let a=Et();if(!a)return process.stderr.write("error: v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.\n"),n.cleanup("marker-overlay","v16-runner not found"),n.cleanup("chrome","v16-runner not found"),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null};let u=Mr({environment:m,mode:v.mode??"testing",assertionMode:Qn,finalValidation:Xn,username:d.basicAuth?.username,accessKey:d.basicAuth?.access_key,sessionId:c.sessionId});P.kind==="device"&&await Br(u,P.device),H=new xt({env:u,runner:a,log:(E,T,j,I)=>c.log(E,T,j,I),sessionId:c.sessionId}),n.register("runner",()=>{(Tr()||e.signal?.aborted)&&(F=!0);try{H?.kill()}catch{}});let p=E=>{let T={...P.kind==="device"?{device:P.device}:{},cdp_endpoint:E.cdpEndpoint,ws_endpoint:E.wsEndpoint,width:K.window_size.width,height:K.window_size.height,headless:V.headless??!1,model:A,session_id:c.sessionId,disable_ask_user:!0};return d.basicAuth?(T.username=d.basicAuth.username,T.access_key=d.basicAuth.access_key):d.token&&(T.auth={type:"bearer",token:d.token}),T};await H.start(p(G));let y=async()=>{try{await H?.shutdown()}catch{}if(!await pr())return!1;try{return H=new xt({env:u,runner:a,log:(E,T,j,I)=>c.log(E,T,j,I),sessionId:c.sessionId}),await H.start(p(G)),!0}catch(E){return c.log("error","RECYCLE_FAILED","Could not restart the persistent runner after recycle",{error:E.message}),process.stderr.write(`error: could not restart the runner for the replay re-attempt: ${E.message}
61
+ `),!1}},w=async()=>{try{await H?.shutdown()}catch{}await gr();try{return H=new xt({env:u,runner:a,log:(E,T,j,I)=>c.log(E,T,j,I),sessionId:c.sessionId}),await H.start(p(G)),P.kind==="device"&&P.device.no_reset===!0&&c.log("warn","DEVICE_RECYCLED_DIRTY","no_reset: true \u2014 the re-attempt keeps the app state the broken replay left behind"),c.log("info","DEVICE_RECYCLED","Fresh device session brought up for the replay re-attempt"),!0}catch(E){return c.log("error","RECYCLE_FAILED","Could not bring up a fresh device session for the replay re-attempt",{error:E.message}),process.stderr.write(`error: could not recycle the device session for the replay re-attempt: ${E.message}
62
+ `),!1}},g=s.author===!0;g&&(In(),c.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed; identity kept"));let{authorBoundary:_,cancelledInPhase:L,shrinkCount:N}=await jo({decisions:f.decisions,forceAuthor:g,hasRetry:kn(s),onReplayOnlyFail:je,maxShrinks:rt.maxShrinks,runReplayPhase:Vs,session:c,accumulator:ae,acquireLockIfNeeded:fr,archiveAttempt:cr,recycleBrowser:P.kind==="web"&&he&&J.ownsLifecycle?y:P.kind==="device"&&J.ownsLifecycle?w:void 0});if(ct=N>0,dt=_,zt=N,N>0&&(c.log("info","ADAPTIVE_HEAL_TRIGGERED","Adaptive heal engaged",{shrink_count:N,final_author_boundary:_}),t.onAdaptiveHeal({shrink_count:N,final_author_boundary:_,complete_reauthor:_===0})),_===0&&N>0&&c.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback",{shrink_count:N}),!L&&_>=0)for(let E=_;E<l.steps.length&&!e.signal?.aborted;E++){let T=l.steps[E],j=await dr(E);if(j?.kind==="done"){if(j.stop)break;continue}if(j?.kind==="jump"){E=j.to-1;continue}if(j?.kind==="author"&&T.replayOnly){xe(E,T.replayOnly),je(E,T.replayOnly),ae.recordStep(T,{status:"failed",duration_s:0,reason:`replay-only step @${T.replayOnly} has no recording`});break}if(mt()){ae.recordStep(T,{status:"failed",duration_s:0,reason:"v16-runner exited unexpectedly mid-session"});break}if(!ae.shouldRunFlatStep(T))continue;let I=f.decisions[E];if(I?.kind==="replay"&&I.replayOnly){let Q=await mr(E);if(Q){Q.cancelled||(xe(E,I.replayOnly),je(E,I.replayOnly));break}continue}let{continueOverall:B}=await ur(E);if(!B||F||e.signal?.aborted)break}}else{if(Ve.hasBlocks(l.steps))return process.stderr.write(`error: this test has if/else or while blocks (@if \u2026 @end-if, @while \u2026 @end-while), which run in agent mode only \u2014 re-run with --agent
63
+ `),n.cleanup("marker-overlay","control-flow blocks need agent mode"),n.cleanup("chrome","control-flow blocks need agent mode"),await c.finish("complete"),{overallStatus:"failed",exitCode:2,outputDir:X(r),durationS:0,uploadResult:null};let{effectiveDecisions:a}=await import("./effective-decisions-UNE2TFVA.js"),{decideRetry:u}=await import("./replay-policy-A62KXE6Y.js"),p=kn(s),y=rt.maxShrinks,w=s.author===!0;w&&(In(),c.log("info","FORCE_AUTHOR_RUN","--author flag set; walker bypassed; identity kept"));let g=w?0:nt(f.decisions),_=0,L=null,N=P.kind==="device"?P.device.no_reset:void 0,E=0,T=()=>E++===0?N??!1:!0,j=f.decisions.filter(x=>x.kind==="replay").length,I=f.decisions.length-j,B=[];s.push&&B.push("--push"),p||B.push("--no-adaptive-heal"),w&&B.push("--author");let Q={source:r,steps:{total:f.decisions.length,replay:j,author:I},model:A,viewport:{width:K.window_size.width,height:K.window_size.height},chrome:G.cdpEndpoint??G.wsEndpoint??"managed",session:c.sessionName??"ephemeral",variables:{count:Object.keys(ie.raw).length,secrets:Object.values(ie.raw).filter(x=>x.secret).length,names:Object.keys(ie.raw)},flags:B,mode:v.mode??"testing"};for(;;){let x=c.snapshot(),M=ae.snapshot();E=0;let U=a(f.decisions,g,w);if(_>=1){let D=g===0?`\u{1FA79} Healing \u2014 full re-author, heal budget exhausted (${_}/${y})`:`\u{1FA79} Healing ${_}/${y} \u2014 replay 0..${g-1}, re-author ${g}..${f.decisions.length-1}
64
+ reason: replay miss at step ${(L??0)+1}`;process.stderr.write(D+`
65
+ `)}let Xe=_>=1&&g>0&&L!==null?{startIdx:0,endIdx:L,count:L}:void 0;z?.setRunActive(!0);let me=await aa({decisions:U,resolved:l,session:c,accumulator:ae,tuiConfig:K,globalConfig:Q,buildStepConfigAt:(D,le)=>{let te=rn(D,le);return P.kind==="device"&&te.device&&(te.device={...te.device,no_reset:T()}),te},buildReplayConfig:D=>{let le=f.decisions[D];if(le.kind!=="replay")throw new Error("expected replay decision at index "+D);let te=l.steps[D];return Sn({step:te,decision:le,chrome:G,device:P.kind==="device"?{...P.device,no_reset:T()}:void 0,auth:d,sessionId:c.sessionId,runIndex:c.nextRunIndex(),sessionDir:c.sessionDir,windowSize:{width:K.window_size.width,height:K.window_size.height},environmentId:er,forceNavigateUrl:P.kind==="device"?void 0:D===0?we??void 0:te.unitEntryUrl,sessionContext:c.getContext(),variables:na(Se.raw,te.config.variables,te.objective),evidence:nn()})},onAnyAuthorStep:D=>{ue=!0,lt.add(l.steps[D].flatIndex)},onCancel:()=>{ge=!0},topBannerModel:A,topBannerAuth:`${S.getActiveProfile()??"no profile"}/${m}`,spawnOpts:{environment:m,mode:v.mode??"testing",assertionMode:Qn,finalValidation:Xn,log:(D,le,te,an)=>c.log(D,le,te,an)},priorAttemptRollup:Xe,pushStepLevelDelta:(D,le)=>Xt(qe(Se.raw,D,le).raw),onSequencerStepEnd:(D,le,te,an)=>{let zs=Math.round((Date.now()-an)/1e3),Ys=D.hadError?D.reason??"runner error":null,Ws=ht(le,te,D.runEnd,D.bifurcationFlows??null,Ys,zs);return c.recordStepRun({testmdStepIndex:l.steps[le].flatIndex,runIndex:te,totalRunDirs:Kt(D.runEnd,D.bifurcationFlows)}),tn(D.evidence??Pt(),D.runEnd,te,D.bifurcationFlows,l.steps[le].verifies),U[le]?.kind==="author"&&(Yt+=zn(D.runEnd)),Ws},screenshotDispatcher:Qe,onReasoning:D=>z?.setStepText(D),onStepComplete:()=>z?.setStepComplete(),onSpawnStart:D=>{ut=D},host:t});if(z?.setRunActive(!1),me.cancelled){n.cleanup("marker-overlay","user cancelled run"),n.cleanup("chrome","user cancelled run");break}if(me.failedAt===null)break;let kt=f.decisions[me.failedAt],Fe=u({failedAt:me.failedAt,shrinkCount:_,hasRetry:p,maxShrinks:y,failedAtReplayOnly:kt?.kind==="replay"?kt.replayOnly:void 0});if(Fe.kind==="fail"){Fe.replayOnly&&(xe(me.failedAt,Fe.replayOnly),je(me.failedAt,Fe.replayOnly));break}if(!C&&!await fr()||P.kind==="web"&&he&&J.ownsLifecycle&&!await pr())break;P.kind==="device"&&J.ownsLifecycle&&await gr(),await cr(me.failedAt),c.rollback(x),ae.rollback(M),Fe.kind==="complete-reauthor"?g=0:(g=Fe.newAuthorBoundary,_++),ct=!0,c.log("info","RETRY_TRIGGERED","Retry loop triggered (TTY)",{shrink_count:_,failed_at:L}),g===0&&c.log("info","COMPLETE_REAUTHOR_TRIGGERED","Complete reauthor fallback (TTY)",{shrink_count:_}),L=me.failedAt}dt=g,zt=_}let ee=ae.finalize(),Ce=Math.round((Date.now()-ar)/1e3),Ks={session:c,resolvedAuth:d,chromeResult:G,chromeInstance:he??null,testId:c.testId??null,preparedVariables:ie,variableIds:ft,globalContext:or,localContext:sr,tuiConfig:K,env:m,localMode:!!s.local},hr=!1,br=!1,yr=!1,sn=!1,vr=async(a={})=>{if(!O)return!1;if(J.ownsLifecycle?hr:yr)return!0;try{let u=await Jt(),p=Hn(ue)==="replay",y=Be(r),w=pe(c.sessionDir,"execution.json"),g=eo(O.packTestDir,p?[y,w]:[w,y],(I,B,Q,x)=>c.log(I,B,Q,x)),{ids:_,linear:L}=g?no(O.packTestDir):{ids:[],linear:!0},{steps:N,tail:E,unjoined:T}=to(W.steps,_,p,L);g?T?c.log("warn","SKIPPED_TAIL_UNJOINED","Executed records don't align with the authored blob \u2014 skipped tail withheld",{executed:W.steps.length,leaves:_.length}):E.length>0&&c.log("info","SKIPPED_TAIL_APPENDED","Unexecuted authored actions recorded as skipped",{count:E.length}):c.log("warn","SKIPPED_TAIL_NO_BLOB","No auteur blob in pack \u2014 unexecuted actions cannot be recorded as skipped",{});let j=await W.writeResult({steps:[...N,...E],heal:{shrinkCount:zt,authorBoundary:dt,totalSteps:f.decisions.length,forced:s.author===!0,creditsConsumed:Yt},spawns:Re.length?Re:[{resultCode:null}],tags:l.rootGlobal.tags,externalIdInput:{execution_id:O.executionId,session_id:c.sessionId,commit_id:p?f.fromCommitId??c.sessionId:c.sessionId,test_id:f.testId??c.testId??void 0,testcase_id:a.testcaseId||f.testcaseId||c.testcaseId||void 0,project_id:q??void 0,folder_id:ve??void 0,org_id:c.orgId!=null?String(c.orgId):void 0,session_name:c.sessionName??tt(r),user_name:c.userName??void 0,user_email:c.userEmail??void 0,sharable_link:Qo(ne(m).testManagerUiUrl,q,a.testcaseId??f.testcaseId??c.testcaseId,a.shareId)},runnerEnv:Wr({cdpBrowser:u,resolution:lr,runnerEnvironment:De,deviceName:Ie.deviceName,deviceModel:Ie.modelIdentifier,pixelResolution:O?await Yr(O.packTestDir):void 0}),intentEnv:Vr(A,De,J.ownsLifecycle?void 0:Hn(ue)),durationMs:Date.now()-ar,log:(I,B,Q,x)=>c.log(I,B,Q,x)});if(!J.ownsLifecycle)return await Gr(W.pack,O.testId,pe(c.sessionDir,"tui.log"),{requireRealLog:!!De?.native_platform,appiumMarks:W.appiumMarks}),yr=!0,c.log("info","EVIDENCE_RESULT_WRITTEN","Member result.yaml written",{execution_id:O.executionId,verdict:j}),!0;if(!br)try{await Eo(gn(process.cwd()),B=>c.log("warn","SYNC_BEHIND",B,{}));let I=Zr({cwd:process.cwd(),members:[{path:r,verdict:j,executionId:O.executionId,startedAt:new Date().toISOString(),acs:Qr(W.steps),mode:"testmd",local:!!s.local}]});br=!0;for(let B of I.warnings)c.log("warn","EXEC_SYNC",B,{});I.synced>0&&c.log("info","EXEC_SYNC",`context sync: ${I.synced} fact(s), ${I.superseded} supersession(s)`,{})}catch(I){c.log("warn","EXEC_SYNC",`exec-sync failed: ${I instanceof Error?I.message:String(I)}`,{})}try{let I=Xr(W.pack,gn(process.cwd()));I.status==="skipped"&&c.log("warn","EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${I.reason}`,{})}catch(I){c.log("warn","EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(I)})}return await zr({executionId:O.executionId,testId:O.testId,saved:!0,runKind:Hn(ue),verdict:j,outputStemDir:X(r),cwd:o,packDir:W.pack,tuiLogPath:pe(c.sessionDir,"tui.log"),expectStatusDisagrees:(s.bugDetection??K.bug_detection)==="continue",log:(I,B,Q,x)=>c.log(I,B,Q,x),surface:"testmd",requireRealLog:!!De?.native_platform,appiumMarks:W.appiumMarks}),hr=!0,c.log("info","EVIDENCE_SEALED","Evidence pack sealed",{execution_id:O.executionId,verdict:j}),!0}catch(u){return c.log("warn","EVIDENCE_SEAL_FAILED","Evidence pack seal failed",{error:String(u)}),!1}},yt=Oe&&(C||f.isFirstRun)&&!f.degradedReadonly,Hs=async()=>{if(!d.basicAuth)return null;let a=ne(m),u=(ue||s.push===!0)&&!ge,p=(C||f.isFirstRun)&&!ge&&ee.overallStatus==="passed"&&!f.degradedReadonly;c.log("info","PIPELINE_GATE_STATE","Derived gate state (finalize)",{phase:"finalize",shouldUploadArtifacts:Oe,shouldUploadPipeline:yt,shouldReplaceLocalOutput:u,shouldCommit:p,lockHeld:C,anyAuthorStepRan:ue,cancelled:ge,overallStatus:ee.overallStatus});let y=ks({mobile:P.kind==="device",session:c,env:m,auth:d,variables:ie,variableIds:ft,projectId:q,folderId:ve,totalSteps:ee.outcomes.length,totalDuration:Ce,screenshotExtMap:We?.getExtMap(),codeExport:Ss({codeExport:s.codeExport,codeLanguage:s.codeLanguage,skipCodeValidation:s.skipCodeValidation},K.code_export),onProgress:()=>{},log:(g,_,L,N)=>c.log(g,_,L,N),shouldUploadArtifacts:yt,shouldReplaceLocalOutput:u,shouldCommit:p,isFirstRun:f.isFirstRun,resolvedTest:l,sourcePath:r,stepRunRecords:c.getStepRunRecords(),authoredFlatIdx:[...lt],blockOutcomes:bt?.outcomes(),unitLocks:f.unitLocks,outcomes:ee.outcomes,overallStatus:ee.overallStatus,fromCommitId:f.fromCommitId,startedISO:pt,durationS:Ce,tmsIds:{testId:f.testId??c.testId??void 0,testcaseId:f.testcaseId??c.testcaseId??void 0,projectId:q??void 0,folderId:ve??void 0,orgId:c.orgId??void 0,sessionName:c.sessionName??tt(r)},tmsBaseUrl:b.tmsBaseUrl,testId:f.testId??void 0,newCommitId:f.newCommitId??void 0,basicAuth:d.basicAuth??void 0,decisions:f.decisions,wantsPush:s.push===!0,retryTriggered:ct,forceAuthor:s.author===!0,commitBox:qt,testmdSync:s.testmdSync!==!1,onAgentEvent:g=>t.onAgentEvent(g),evidence:O&&J.ownsLifecycle?{executionId:O.executionId,packTestDir:O.packTestDir,sealedPackPath:W.pack,cwd:o,runIndices:gt,sealFn:vr}:void 0,evidenceRead:O&&!J.ownsLifecycle?{packTestDir:O.packTestDir,runIndices:gt}:void 0,authoredExecutionPath:ue?void 0:Be(r)});f.newCommitId!=null&&(y.skipTmsFinalize=!0);let w=new wo(y);return i?await w.execute():await t.runUpload(w,g=>{if(g.testcaseId&&g.shareId&&q)return Ut(a.testManagerUiUrl,q,g.testcaseId,g.shareId)})};O&&await Jt(),H&&(await H.shutdown(),n.cleanup("runner","test.md run complete"));let de=await ps(Ks,{performUpload:Hs,runCleanup:()=>{n.cleanup("chrome","test.md run complete")},log:(a,u,p,y)=>c.log(a,u,p,y)},{overallStatus:ee.overallStatus,outcomes:ee.outcomes,sourcePath:r,title:l.rootTitle,rootSteps:l.rootSteps,startedISO:pt,durationS:Ce,localMode:!!s.local,skipLocalWrites:!0,mobile:P.kind==="device"});J.ownsLifecycle&&yt&&de.uploadResult?.success&&(sn=!0);let wr=await vr({testcaseId:de.uploadResult?.testcaseId,shareId:de.uploadResult?.shareId}),kr=s.evidencePublish===!1,_r=J.ownsLifecycle&&!!O&&!!d.basicAuth&&xs({shouldUploadArtifacts:Oe,lockHeld:C,isFirstRun:f.isFirstRun,sealed:wr,testId:f.testId});if(_r&&kr)c.log("info","EVIDENCE_PUBLISH_SKIPPED","Replay evidence publish skipped (--no-evidence-publish)",{execution_id:O.executionId}),process.stderr.write(`info: evidence publish skipped (--no-evidence-publish)
66
+ `);else if(kr&&(C||f.isFirstRun))process.stderr.write(`note: --no-evidence-publish has no effect on author/commit runs
67
+ `);else if(_r){let a=d.basicAuth,u=O,p=q,y=await Ps({controller:new Ee(b.controllerBaseUrl,{username:a.username,accessKey:a.access_key}),tms:new Ct(b.tmsBaseUrl,d.resolvedCreds?.username??a.username,d.resolvedCreds?.access_key??a.access_key),testId:f.testId,sessionId:c.sessionId,executionId:u.executionId,sealedPackPath:W.pack,projectId:p});sn=y.ok,y.ok?c.log("info","EVIDENCE_INGESTED","Replay evidence uploaded and ingested",{execution_id:u.executionId,project_id:p}):(c.log("warn","EVIDENCE_PUBLISH_FAILED","Replay evidence publish failed",{execution_id:u.executionId,stage:y.stage,error:y.error}),process.stderr.write(` \u26A0 evidence publish failed (${y.stage}): ${y.error}
68
+ `)),t.onAgentEvent({type:"test_md_evidence_ingest",status:y.ok?"ok":"failed",evidence_id:u.executionId,...y.ok?{}:{stage:y.stage}})}if($=!0,await sa(r,f,c,ee.outcomes,ee.overallStatus,pt,Ce,de.uploadResult,K,s,{resolvedAuth:d,tmsBaseUrl:b.tmsBaseUrl},C,ge,qt.committed),f.isFirstRun&&s.testmdSync!==!1)try{let a=be(r);if(co({shouldUploadPipeline:yt,uploadSucceeded:!!de.uploadResult?.success,metaCommitId:a?.commit_id,metaTestId:a?.test_id})){let u=await Lt({sourcePath:r,testId:a.test_id,sessionId:c.sessionId,commitId:a.commit_id,controller:new Ee(b.controllerBaseUrl,{username:d.basicAuth.username,accessKey:d.basicAuth.access_key})});u.ok?c.log("info","BUNDLE_SYNC_OK","testmd bundle pushed",{commit_id:a.commit_id,bytes:u.bytes}):(c.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync failed",{commit_id:a.commit_id,stage:u.stage,error:u.error}),process.stderr.write(` \u26A0 bundle sync failed (${u.stage}): ${u.error}
69
+ `)),t.onAgentEvent({type:"test_md_bundle_sync",status:u.ok?"ok":"failed",commit_id:a.commit_id,path:r,...u.ok?{bytes:u.bytes}:{stage:u.stage}})}}catch(a){c.log("warn","BUNDLE_SYNC_FAILED","testmd bundle sync threw",{error:a instanceof Error?a.message:String(a)})}else f.isFirstRun&&c.log("info","BUNDLE_SYNC_SKIPPED","testmd bundle sync skipped",{reason:"flag"});let Ir=ne(m),vt=de.uploadResult?.testcaseId,wt=vt&&de.uploadResult?.shareId&&q?Ut(Ir.testManagerUiUrl,q,vt,de.uploadResult.shareId):void 0,qs=l.unitFiles.filter(a=>a.file!==l.rootPath).map(a=>{let u=l.steps.filter(g=>g.owningFile===a.file),p=u.filter(g=>lt.has(g.flatIndex)).length,w=(a.kind==="test"?be(a.file):null)?.commit_id===c.sessionId;return{path:a.file,kind:a.kind,replayed:u.length-p,authored:p,committed:w,...w?{commit_id:c.sessionId}:{}}}),Sr={overallStatus:ee.overallStatus,durationS:Ce,decisions:f.decisions,outcomes:ee.outcomes,cancelled:ge,retryTriggered:ct,lockHeld:C,anyAuthorStepRan:ue,isFirstRun:f.isFirstRun,wantsPush:s.push===!0,uploadResult:de.uploadResult,shouldUploadArtifacts:Oe,shouldReplaceLocalOutput:ue&&!ge,shouldCommit:(C||f.isFirstRun)&&!ge&&ee.overallStatus==="passed"&&!f.degradedReadonly,committed:qt.committed,shareUrl:wt,imports:qs},{buildSummaryEvent:Gs}=await import("./SummaryBox-N2B6DUDD.js");if(i?t.onAgentEvent(Gs(Sr)):await t.onSummary(Sr),!i){let a=vt&&q?Zo(Ir.testManagerUiUrl,q,vt):void 0;await t.onLinks({recordedTestPath:r,outputDir:X(r),shareableLink:wt,testCaseLink:a,codeExportDir:de.uploadResult?.codeExportDir})}if(J.ownsLifecycle&&W&&wr&&!e.suppressEvidenceOffer){let{offerEvidenceView:a}=await import("./evidence-XWR32HWP.js");await a({packPath:W.pack,env:m,isTTY:!i&&!ge&&!!process.stdin.isTTY&&!!process.stderr.isTTY,log:u=>process.stderr.write(u+`
70
+ `)})}return t.onAgentEvent({type:"test_md_done",overall_status:ee.overallStatus,duration_s:Ce,session_id:c.sessionId,...wt?{share_url:wt}:{}}),{overallStatus:ee.overallStatus,exitCode:ee.overallStatus==="passed"?0:1,outputDir:X(r),durationS:Ce,uploadResult:de.uploadResult,anyAuthorStepRan:ue,resultCode:qr(Re),...on.length?{pendingInvestigations:on}:{},ownPack:J.ownsLifecycle?As({executionId:O?.executionId,testId:f.testId??O?.testId,testcaseId:de?.uploadResult?.testcaseId,commitId:c.sessionId,published:sn}):void 0}}finally{!$&&(C||f.unitLocks.length>0)&&await ia(f,c,C,{resolvedAuth:d,tmsBaseUrl:b.tmsBaseUrl})}}function ea(e){if((e.env??process.env).KANE_CLI_MODE==="hyperexecute")return{refuse:!1};let t=ko({globalDir:e.globalDir,localDir:pe(e.cwd,".testmuai","variables"),file:e.opts.variablesFile,inline:e.opts.variables}),n=_o(e.resolved,t,{authorFrom:e.authorFrom,produced:e.produced});return n.length===0?{refuse:!1}:{refuse:!0,text:So(n,{cwd:e.cwd,entryFile:qn(e.resolved.rootPath)}),event:Ro(n,{cwd:e.cwd})}}function ta(e,t){let n={...e,...t},r=Object.keys(n).length>0?Ue(n,""):{variables:{},objective:"",keyMap:{}};return{raw:n,auteur:r.variables,auteurObjective:"",secretEntries:Object.entries(n).filter(([,o])=>o.secret),nonSecretEntries:Object.entries(n).filter(([,o])=>!o.secret)}}function qe(e,t,n){let r={...e,...t??{}};if(Object.keys(r).length===0)return{raw:r,variables:{},objective:n};let o=Ue(r,n);return{raw:r,variables:us(o.variables,o.objective),objective:o.objective}}function na(e,t,n){let r=qe(e,t,n).variables;return Object.keys(r).length>0?r:void 0}function Os(e,t){let n=new Set(Ht),r={...e};for(let[o,s]of Object.entries(t))n.has(o)||o!=="variables"&&s!==void 0&&e[o]===void 0&&(r[o]=s);return r}function ra(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}async function oa(e,t,n,r,o,s){let i=mo(t);Ao(t,i);let h=Ne(e),l=Ji(h)?JSON.parse(Ds(h,"utf8")):null,d=l?.testcase_id,v=l?.test_id,m=l?.commit_id,b=n.push===!0,k=n.author===!0;b&&!d&&process.stderr.write(`[--push] no meta.json yet \u2014 flag is a no-op on first run
71
+ `);let A=r.resolvedAuth.basicAuth;if(!A){let se=await r.resolvedAuth.resolver.resolve(!0);se?.username&&se?.access_key&&(A={username:se.username,access_key:se.access_key},r.resolvedAuth.basicAuth=A)}let S=!!A,R=!n.local&&S&&v!=null&&m!=null&&d!=null,c=R&&(Ot(i)||b||k),F=uo(t,i);if(F.length>0)return process.stderr.write(`error: replay-only step(s) cannot be replayed \u2014 the agent cannot author them, so the run will not start:
72
+ `+F.map(oe=>` step ${oe.flatIndex} "${oe.heading}" @${oe.kind} \u2014 ${oe.reason} (${oe.file})`).join(`
73
+ `)+`
74
+ Regenerate the test from KaneAI, or drop the marker to let the agent author the step.
75
+ `),{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:null,isFirstRun:!1,hasAuth:S,canLock:R,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(b&&!R)return process.stderr.write(`error: --push requires authenticated credentials for the lock API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
76
+ `),{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:null,isFirstRun:!1,hasAuth:S,canLock:R,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};if(k&&!S)return process.stderr.write(`error: --author requires authenticated credentials for the TMS API. Run 'kane-cli login' (OAuth) or pass --username/--access-key inline.
77
+ `),{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:null,isFirstRun:!1,hasAuth:S,canLock:R,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};let f=null,C=!1,$=!1;if(c){f=o;let oe=n.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",{outcome:se}=await Gn({tmsBaseUrl:r.tmsBaseUrl,testId:v,fromCommitId:m,newCommitId:f,basicAuth:A,onLockConflict:oe});if(se==="ok")C=!0,jt({baseUrl:Ge(r.tmsBaseUrl),testId:v,auth:ze(A),lifecycle:s});else{if(se==="abort")return{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:null,isFirstRun:!1,hasAuth:S,canLock:R,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};f=null,$=!0,k&&process.stderr.write(`[lock] --author: re-authoring locally in readonly mode (not committed); run again with --push once the playground is free
78
+ `)}}let _e=[],re=c&&!C;if(!n.local&&S&&!re){let oe=n.onLockConflict??t.rootGlobal.on_lock_conflict??"readonly",se=await js({resolved:t,decisions:i,allUnits:k,tmsBaseUrl:r.tmsBaseUrl,newCommitId:f??o,basicAuth:A,mode:oe,lifecycle:s});if(se.outcome==="ok")_e=se.locks;else{if(C&&v&&m&&f&&await at(r,v,m,f),fe(),se.outcome==="abort")return{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:null,isFirstRun:d==null,hasAuth:S,canLock:R,lockAcquired:!1,unitLocks:[],degradedReadonly:!1,abort:{exitCode:2}};process.stderr.write(`[lock] imported-unit conflict \u2014 whole run degrades to readonly (no commits, no uploads)
79
+ `),f=null,C=!1,$=!0}}return{resolved:t,decisions:i,testId:v,testcaseId:d,fromCommitId:m,newCommitId:f,isFirstRun:d==null,hasAuth:S,canLock:R,lockAcquired:C,unitLocks:_e,degradedReadonly:$}}async function js(e){let t=new Set(e.resolved.steps.filter((r,o)=>e.decisions[o]?.kind==="author").map(r=>r.owningFile)),n=[];for(let r of e.resolved.unitFiles){if(r.kind!=="test"||r.file===e.resolved.rootPath||!e.allUnits&&!t.has(r.file)||e.alreadyLocked?.some(i=>i.file===r.file))continue;let o=be(r.file);if(!o?.test_id||!o?.commit_id)continue;let{outcome:s}=await Gn({tmsBaseUrl:e.tmsBaseUrl,testId:String(o.test_id),fromCommitId:String(o.commit_id),newCommitId:e.newCommitId,basicAuth:e.basicAuth,onLockConflict:e.mode});if(s==="ok"){n.push({file:r.file,testId:String(o.test_id),fromCommitId:String(o.commit_id)}),jt({baseUrl:Ge(e.tmsBaseUrl),testId:String(o.test_id),auth:ze(e.basicAuth),lifecycle:e.lifecycle});continue}for(let i of n)await Pe({baseUrl:Ge(e.tmsBaseUrl),testId:i.testId,body:{commitId:e.newCommitId,fromCommitId:i.fromCommitId},auth:ze(e.basicAuth)}),fe(i.testId);return{outcome:s,locks:[]}}return{outcome:"ok",locks:n}}function Ge(e){return`${e}/kane-cli/v1`}function ze(e){return{username:e.username,accessKey:e.access_key}}async function Gn(e){let t=Ge(e.tmsBaseUrl),n=ze(e.basicAuth),r={baseUrl:t,testId:e.testId,fromCommitId:e.fromCommitId,newCommitId:e.newCommitId,auth:n},o=await Cn(r);if(o.ok)return{outcome:"ok"};if(!(o.reason==="concurrent"||o.reason==="base_mismatch"))return process.stderr.write(`[lock] acquire failed: ${o.reason} (HTTP ${o.httpStatus}): ${o.message}
80
+ `),{outcome:"abort"};let i=o.reason,h=o.reason==="concurrent"?"concurrent session":"base commit mismatch (pull latest)";if(e.onLockConflict==="fail")return process.stderr.write(`[lock] ${h}; aborting (--on-lock-conflict fail)
81
+ `),{outcome:"abort"};if(e.onLockConflict==="wait"){if(o.reason==="base_mismatch")return process.stderr.write(`[lock] base commit mismatch \u2014 pull latest; aborting
82
+ `),{outcome:"abort"};for(;;){process.stderr.write(`[lock] waiting (concurrent session)...
83
+ `),await new Promise(d=>setTimeout(d,3e4));let l=await Cn(r);if(l.ok)return{outcome:"ok"};if(l.reason!=="concurrent")return process.stderr.write(`[lock] wait drifted to ${l.reason} (HTTP ${l.httpStatus}): ${l.message}; aborting
84
+ `),{outcome:"abort"}}}return process.stderr.write(`[lock] ${h} \u2014 running in readonly mode (no commit)
85
+ `),{outcome:"readonly",reason:i}}async function sa(e,t,n,r,o,s,i,h,l,d,v,m,b,k){let{decisions:A,testId:S,testcaseId:R,fromCommitId:c,newCommitId:F}=t,f=o==="passed";if(!k){let C=b?"cancelled":f?"commit did not land":o;m&&S&&c&&F&&(process.stderr.write(`[lock] run not committed (${C}); discarding playground lock
86
+ `),await at(v,S,c,F));for(let $ of t.unitLocks)await at(v,$.testId,$.fromCommitId,F??n.sessionId);fe();return}fe()}async function ia(e,t,n,r){let o=e.newCommitId??t.sessionId,s=e.unitLocks.length;process.stderr.write(`[lock] run exited before finalize; discarding playground lock${s?` + ${s} unit lock${s===1?"":"s"}`:""}
87
+ `);try{t.log("warn","LOCKS_RELEASED_EARLY_EXIT","Run exited before finalize; discarding held playground locks",{test_id:e.testId??null,unit_locks:s})}catch{}try{n&&e.testId&&e.fromCommitId&&await at(r,e.testId,e.fromCommitId,o);for(let i of e.unitLocks)await at(r,i.testId,i.fromCommitId,o)}finally{fe()}}async function at(e,t,n,r){let o=e.resolvedAuth.basicAuth;if(!o){let i=await e.resolvedAuth.resolver.resolve(!0);i?.username&&i?.access_key&&(o={username:i.username,access_key:i.access_key},e.resolvedAuth.basicAuth=o)}if(!o)return;let s=await Pe({baseUrl:Ge(e.tmsBaseUrl),testId:t,body:{commitId:r,fromCommitId:n},auth:ze(o)});s.ok||process.stderr.write(`warn: discardLock failed: ${s.reason} (HTTP ${s.httpStatus}): ${s.message}
88
+ `)}async function aa(e){let t=null,n=!1,r=0,o=-1,s=-1,i=0,h=async l=>{if(l&&l.status==="failed")return r>0&&e.decisions[r-1].kind==="replay"&&(t=r-1),null;for(;r<e.decisions.length&&!e.accumulator.shouldRunFlatStep(e.resolved.steps[r]);)r++;if(r>=e.decisions.length)return null;let d=e.decisions[r],v=e.resolved.steps[r],m=r;r++;let b=e.session.nextRunIndex();o=m,s=b,i=Date.now(),e.onSpawnStart?.(b),d.kind==="author"&&e.onAnyAuthorStep(m),await e.pushStepLevelDelta(v.config.variables,v.objective);let k=d.kind==="replay"?e.buildReplayConfig(m):e.buildStepConfigAt(m,b),A=d.kind==="replay"?"md5-match":d.reason,S=v.config??{},R={};for(let[c,F]of Object.entries(S))F!=null&&c!=="variables"&&c!=="assurance"&&(R[c]=F);return{config:k,banner:{stepLabel:`Step ${m+1}/${e.decisions.length}`,objective:ra(v.objective,100)},mode:d.kind,modeReason:A,perStepOverrides:Object.keys(R).length>0?R:void 0}};return await e.host.runSteps({topBanner:{model:e.topBannerModel,auth:e.topBannerAuth},globalConfig:e.globalConfig,getNextStep:h,onStepEnd:l=>(l.status==="failed"&&o>=0&&e.decisions[o]?.kind==="replay"&&(t=o),e.onSequencerStepEnd(l,o,s,i)),onAllComplete:()=>{},onCancel:()=>{n=!0,e.onCancel()},spawnOpts:e.spawnOpts,priorAttemptRollup:e.priorAttemptRollup,screenshotDispatcher:e.screenshotDispatcher,onReasoning:e.onReasoning,onStepComplete:e.onStepComplete}),{failedAt:t,cancelled:n}}export{_s as a,qo as b,Go as c,Nt as d,Wa as e,rs as f,Pn as g,Ca as h,Ko as i,Ho as j,xn as k,zo as l,Yo as m,Ut as n,Qo as o,Zo as p,Ln as q,os as r,sl as s,il as t,al as u,On as v,Ke as w,us as x,ms as y,fs as z,jn as A,ks as B,Ss as C,Rs as D,Cs as E,Es as F,Vn as G,Rc as H,Ps as I,Hn as J,qd as K,ta as L,qe as M,na as N,Os as O};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i,o as j,p as k,q as l,r as m,s as n,t as o,u as p,v as q,w as r}from"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import{L as a}from"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";export{b as SLUG_RE,c as checkAcyclic,d as checkCardinality,e as citesOf,q as commitDeferGap,o as commitNames,n as commitPairMerge,l as commitProposal,p as commitRetire,m as commitReviewFacts,f as criteriaShape,i as mintEventId,j as nextEventIds,a as recordsSince,r as resolveDeferGaps,k as resolveLivingTip,g as validateCriterionOps,h as validateProposal};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-NUWOQS6L.js";import"./chunk-33GXXC2L.js";import"./chunk-UR6MHSHU.js";export{a as getEnvironment};
2
+ import{a}from"./chunk-OH2NSBO6.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{a as getEnvironment};
@@ -0,0 +1,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as O}from"./chunk-DYW5C6II.js";import{P as g,Q as S,S as G}from"./chunk-6LGED4FC.js";import"./chunk-C74ABM24.js";import"./chunk-H6TNBKGR.js";import"./chunk-66MOZKD2.js";import"./chunk-YLQHY4A7.js";import{e as w,f as $}from"./chunk-5GUD3CIH.js";import{d as x}from"./chunk-YMLC55J4.js";import{e as k}from"./chunk-EHN5HTUD.js";import"./chunk-22QIVSQR.js";import"./chunk-IE3OO5GI.js";import"./chunk-CH273NAE.js";import"./chunk-LBNADEQN.js";import{b}from"./chunk-VZ7KXRXB.js";import"./chunk-5LJRZI7S.js";import"./chunk-BKM2LWU2.js";import{C as R}from"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-YCCUBQY4.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-B2ZGG7WM.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";import{basename as h}from"path";import{statSync as A}from"fs";function C(t,e){if(!t)return 1;let o=t.resolve(e);return!o||o.superseded?1:t.getNode(o.tip)?.content.risk==="high"?3:1}function D(t,e){return t.usecases.map(o=>{let s=o.acceptance_criteria??[],a=s.filter(n=>(n.covered_by??[]).length>0),l=s.filter(n=>n.execution==="passed"),i=s.filter(n=>n.execution==="failed"),u=s.filter(n=>n.execution==="blocked"),d=0,m=0;for(let n of s){let f=C(e,n.id);d+=f,n.execution==="passed"&&(m+=f)}let r=d===0?0:Math.round(100*m/d),p=a.length===0?"uncovered":s.length===l.length?"covered":u.length>0&&i.length===0?"blocked":"partial";return{id:o.id,title:o.title,status:p,pct:r,acs:{total:s.length,covered:a.length,passed:l.length,failed:i.length,blocked:u.length},stale:s.filter(n=>n.fresh==="stale").map(n=>n.id)}})}async function P(t){let e=await w(t);return e.length===0?null:e.map(o=>({p:o,m:A(o).mtimeMs})).sort((o,s)=>s.m-o.m)[0].p}var N={covered:"\u2714",partial:"\u25D0",uncovered:"\u2716",blocked:"\u23F8"};function _(t){let e=Math.round(t/10);return"\u2588".repeat(e)+"\u2591".repeat(10-e)}async function I(t,e=G(),o=process.cwd()){if(t.mode!==void 0&&t.mode!=="agent"&&t.mode!=="ci"&&t.mode!=="interactive")return g(e,`--mode must be interactive | agent | ci, got '${t.mode}'`),2;if(t.mode==="agent"||t.mode==="ci"){let{makeHeadlessIO:r,agentRefusal:p}=await import("./headless-io-3A3BZVQ5.js"),n=r("ndjson","cover",{stdout:c=>e.out(c.replace(/\n$/,"")),stderr:c=>(e.err??e.out)(c.replace(/\n$/,""))}),f=[],v=[],j={out:c=>f.push(c),err:c=>v.push(c),confirm:async()=>!1,isTTY:!1};if(await I({...t,json:!0,mode:void 0},j,o)!==0)return p(n,v.join("; ")||"cover refused");let y=JSON.parse(f.join(`
3
+ `));return n.event({type:"coverage",...y}),n.done(0,void 0,M(y.completeness??[]))}let s=S(o,e);if(!s)return 2;let a=t.from?await $(t.from,o):await P(o);if(!a)return g(e,t.from?`no evidence pack at '${t.from}'`:"no evidence pack in .testmuai/evidence \u2014 run a test first, or pass --from <pack>"),2;let l=await k(a,"coverage/usecases.yaml");if(l==null)return g(e,`${h(a)} carries no coverage/usecases.yaml \u2014 the pack predates coverage or its project had no .context at seal time`),2;let i=b(l);if(!i||!Array.isArray(i.usecases))return g(e,`${h(a)}: coverage/usecases.yaml is not a usecases document`),2;let u=R(s),d=D(i,u),m=await x(u,"design");if(t.json)return e.out(JSON.stringify({pack:a,depth:d,completeness:m},null,2)),0;e.out(`coverage \u2014 ${h(a)}`),e.out(""),e.out("depth (proven by the pack):");for(let r of d){let p=r.stale.length?` \xB7 ${r.stale.length} stale`:"";e.out(` ${N[r.status]} ${_(r.pct)} ${String(r.pct).padStart(3)}% ${r.id} \u2014 ${r.status} (${r.acs.passed}/${r.acs.total} ACs proven${r.acs.failed?`, ${r.acs.failed} failed`:""}${r.acs.blocked?`, ${r.acs.blocked} blocked`:""})${p}`)}e.out(""),e.out("completeness (live graph):"),m.length===0&&e.out(" no design gaps \u2014 every AC verified, every use-case scenarioed");for(let r of m)e.out(` [${r.risk}] ${r.tag} ${r.ref} \u2014 ${r.why}`),e.out(` \u2192 ${r.ready_command}`);return 0}function M(t){return t.filter(e=>e.ready_command.startsWith("kane-cli ")&&O(e.ready_command)).slice(0,4).map(e=>({cmd:e.ready_command,why:e.why}))}export{I as coverCommand,M as coverNext,D as depthRows};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-3M2D7UUI.js";import"./chunk-33GXXC2L.js";import"./chunk-UR6MHSHU.js";export{a as CredentialsManager};
2
+ import{a}from"./chunk-IQ7NGOAT.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{a as CredentialsManager};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d,e,f,g,h,i,j}from"./chunk-NU45ROHH.js";import"./chunk-MSGW4JDG.js";import"./chunk-4JOD47QI.js";import"./chunk-33GXXC2L.js";import"./chunk-UR6MHSHU.js";export{a as DEPS_INSTALL_SCHEMA_VERSION,i as DepsBundleResolver,c as DepsInstallRequiredError,h as NoPublishedBundleError,b as classOfTarget,g as downloadPayload,e as formatEta,d as formatRate,j as managedDeps,f as planRangeParts};
2
+ import{a,b,c,d,e,f,g,h,i,j}from"./chunk-WBHSPN55.js";import"./chunk-MSGW4JDG.js";import"./chunk-4JOD47QI.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{a as DEPS_INSTALL_SCHEMA_VERSION,i as DepsBundleResolver,c as DepsInstallRequiredError,h as NoPublishedBundleError,b as classOfTarget,g as downloadPayload,e as formatEta,d as formatRate,j as managedDeps,f as planRangeParts};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import"./chunk-UR6MHSHU.js";var c="Mobile dependencies are resolved through your KaneAI account. Run `kane-cli login` first.";function d(l,o,e=process.env){return e.KANE_MOBILE_DEPS_BASE_URL||o(l)}async function u(){let[{CredentialsManager:l},{refreshOAuthToken:o},{getEnvironment:e},{ControllerClient:n}]=await Promise.all([import("./credentials-YNH5BU2Z.js"),import("./token-refresh-NL5AM446.js"),import("./config-BCGD2FEX.js"),import("./controller-client-ZF5IXRUV.js")]),s=new l;return{creds:s,refresh:r=>o({creds:s,profile:r.profile,env:r.env,credentials:r.credentials}),controllerBaseUrlFor:r=>d(r,t=>e(t).controllerBaseUrl),makeClient:(r,t)=>new n(r,t)}}function p(l){return async o=>{let e=l??await u(),n=e.creds.getActiveProfile();if(!n)throw new Error(c);let s=e.creds.getDefaultEnv(),r=e.controllerBaseUrlFor(s),t=e.creds.loadBasicAuth(n,s);if(t)return e.makeClient(r,{username:t.username,accessKey:t.access_key}).resolveMobileDepsBundle(o);let i=e.creds.loadCredentials(n,s);if(!i)throw new Error(c);try{await e.refresh({creds:e.creds,profile:n,env:s,credentials:i})}catch{}let a=(e.creds.loadCredentials(n,s)??i).access_token;if(typeof a!="string"||!a)throw new Error(c);return e.makeClient(r,a).resolveMobileDepsBundle(o)}}export{p as controllerResolveBundle,d as depsControllerBaseUrl};
2
+ import"./chunk-UR6MHSHU.js";var c="Mobile dependencies are resolved through your KaneAI account. Run `kane-cli login` first.";function d(l,o,e=process.env){return e.KANE_MOBILE_DEPS_BASE_URL||o(l)}async function u(){let[{CredentialsManager:l},{refreshOAuthToken:o},{getEnvironment:e},{ControllerClient:n}]=await Promise.all([import("./credentials-Q4WH5CBN.js"),import("./token-refresh-KN5JK2U4.js"),import("./config-3AKWRTFS.js"),import("./controller-client-ZF5IXRUV.js")]),s=new l;return{creds:s,refresh:r=>o({creds:s,profile:r.profile,env:r.env,credentials:r.credentials}),controllerBaseUrlFor:r=>d(r,t=>e(t).controllerBaseUrl),makeClient:(r,t)=>new n(r,t)}}function p(l){return async o=>{let e=l??await u(),n=e.creds.getActiveProfile();if(!n)throw new Error(c);let s=e.creds.getDefaultEnv(),r=e.controllerBaseUrlFor(s),t=e.creds.loadBasicAuth(n,s);if(t)return e.makeClient(r,{username:t.username,accessKey:t.access_key}).resolveMobileDepsBundle(o);let i=e.creds.loadCredentials(n,s);if(!i)throw new Error(c);try{await e.refresh({creds:e.creds,profile:n,env:s,credentials:i})}catch{}let a=(e.creds.loadCredentials(n,s)??i).access_token;if(typeof a!="string"||!a)throw new Error(c);return e.makeClient(r,a).resolveMobileDepsBundle(o)}}export{p as controllerResolveBundle,d as depsControllerBaseUrl};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c}from"./chunk-HOA4VWSD.js";import"./chunk-YYYQ5MVD.js";import"./chunk-BB2W35TW.js";import"./chunk-ALCE5RLK.js";import"./chunk-IE3OO5GI.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";export{a as captureForceScope,b as commitDesign,c as designPhaseLadder};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d}from"./chunk-P3JUE2RM.js";import"./chunk-YKTYVJBN.js";import"./chunk-AHXOKBVE.js";import"./chunk-ALCE5RLK.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-N2P4MI32.js";import"./chunk-IE3OO5GI.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{b as REMOTE_PROVIDERS,d as findProvider,a as landingReceipt,c as looksLikeUrl};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c,d}from"./chunk-XH2KDLZO.js";import"./chunk-FUP4AP6J.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-NU45ROHH.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-33GXXC2L.js";import"./chunk-UR6MHSHU.js";export{d as doctorExitCode,c as doctorPreflightBlocked,b as renderDoctorText,a as runDoctor};
2
+ import{a,b,c,d}from"./chunk-JJJSDDQ2.js";import"./chunk-RQLU4NDG.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-WBHSPN55.js";import"./chunk-MSGW4JDG.js";import"./chunk-TZXXJWHA.js";import"./chunk-Z7S3IWUX.js";import"./chunk-4JOD47QI.js";import"./chunk-RZ4F3BHX.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{d as doctorExitCode,c as doctorPreflightBlocked,b as renderDoctorText,a as runDoctor};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d,e,f,g,h,i}from"./chunk-YCH7H7JX.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-BKHXPBWN.js";import"./chunk-N2P4MI32.js";import"./chunk-IE3OO5GI.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-MSGW4JDG.js";import"./chunk-UR6MHSHU.js";export{a as DOCX_CONVERTER_POLICY,b as DOCX_CONVERTER_VERSION,d as DOCX_IMAGE_CAP,c as DOCX_IMAGE_DIMENSION_FLOOR,f as DOCX_IMAGE_MAX_BYTES,g as DOCX_IMAGE_MAX_PIXELS,e as DOCX_VISION_BYTE_BUDGET,i as convertDocx,h as renderTokens};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as d}from"./chunk-O5U6EAL3.js";import"./chunk-W3Z7AZNT.js";import"./chunk-JQW2QFSX.js";import"./chunk-6FCPS2VT.js";import"./chunk-UH2ZTX4E.js";import"./chunk-XMTSHHYQ.js";import"./chunk-DBIBROYW.js";import"./chunk-AKX4VRRR.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";var q=s=>`cite ${s.source_id??"?"} ${s.anchor??""}${s.quote?` \u2014 "${s.quote}"`:""}`;function E(s,_){let f=s.resolve(_);if(!f)return null;let c=f.tip,y=s.nodeLabel.get(c);if(!y)return null;let h=s.getNode(c);if(!h)return null;let r=h.content,p=s.displayNameOf(c)??_,a=[],o=(t,e,n=!1)=>{a.push({text:`${t.padEnd(12)} ${e}`,dim:n})},L=s.trust.get(c)??"derived";o("status",`${L}${s.superseded.has(c)?" \xB7 superseded":""}`,!0);let k=typeof r.risk=="string"?r.risk:null;k&&o("risk",k);for(let[t,e]of[["title",null],["description","description"],["value","value"],["summary","summary"],["statement","statement"],["text","text"],["intent","intent"],["case_type","case type"],["technique_notes","technique"],["kind","kind"],["change_note","change"]]){if(!e)continue;let n=r[t];typeof n=="string"&&n&&o(e,n)}let u=[];{let t=f.cid,e=new Set;for(;!e.has(t);){e.add(t),u.push(t);let n=s.superseded.get(t);if(typeof n!="string")break;t=n}}let g=u.flatMap(t=>s.edgesInto(t)).filter(t=>t.type==="DERIVES"),x=t=>{if(!t.source_cid||!t.anchor)return;let e=/^L(\d+)-L(\d+)$/.exec(t.anchor);if(!e)return;let n=s.getNode(t.source_cid)?.content?.text_blob;if(typeof n!="string")return;let i=n.split(`
2
+ import{a as d}from"./chunk-TCAHDVII.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";var q=s=>`cite ${s.source_id??"?"} ${s.anchor??""}${s.quote?` \u2014 "${s.quote}"`:""}`;function E(s,_){let f=s.resolve(_);if(!f)return null;let c=f.tip,y=s.nodeLabel.get(c);if(!y)return null;let h=s.getNode(c);if(!h)return null;let r=h.content,p=s.displayNameOf(c)??_,a=[],o=(t,e,n=!1)=>{a.push({text:`${t.padEnd(12)} ${e}`,dim:n})},L=s.trust.get(c)??"derived";o("status",`${L}${s.superseded.has(c)?" \xB7 superseded":""}`,!0);let k=typeof r.risk=="string"?r.risk:null;k&&o("risk",k);for(let[t,e]of[["title",null],["description","description"],["value","value"],["summary","summary"],["statement","statement"],["text","text"],["intent","intent"],["case_type","case type"],["technique_notes","technique"],["kind","kind"],["change_note","change"]]){if(!e)continue;let n=r[t];typeof n=="string"&&n&&o(e,n)}let u=[];{let t=f.cid,e=new Set;for(;!e.has(t);){e.add(t),u.push(t);let n=s.superseded.get(t);if(typeof n!="string")break;t=n}}let g=u.flatMap(t=>s.edgesInto(t)).filter(t=>t.type==="DERIVES"),x=t=>{if(!t.source_cid||!t.anchor)return;let e=/^L(\d+)-L(\d+)$/.exec(t.anchor);if(!e)return;let n=s.getNode(t.source_cid)?.content?.text_blob;if(typeof n!="string")return;let i=n.split(`
3
3
  `).slice(Number(e[1])-1,Number(e[2])).join(" ").trim();return i?i.length>120?`${i.slice(0,119)}\u2026`:i:void 0},$=new Map,b=new Set;for(let t of g){let e=t.props;if(!e.claim)continue;let n=`${e.claim}|${e.source_id??"?"}|${e.source_cid??"?"}|${e.anchor??"?"}`;if(b.has(n))continue;b.add(n);let i=$.get(e.claim)??[];i.push({source_id:e.source_id,anchor:e.anchor,quote:x(e)}),$.set(e.claim,i)}let N=Array.isArray(r.criteria)?r.criteria:[];for(let[t,e]of N.entries()){o(t===0?"criteria":"",`${t+1}. ${e}`);for(let n of $.get(e)??[])a.push({text:` ${q(n)}`,dim:!0})}let v=g.find(t=>!t.props.claim);if(v){let t=v.props;a.push({text:` ${q({...t,quote:x(t)})}`,dim:!0})}let l=r.check;l?.kind&&o("check",`${l.kind}${l.verified_against?` vs ${d(String(l.verified_against))}`:""}`);let m=r.expected_answer;m?.operator&&o("expects",`${m.operator} \xB7 ${String(m.operand??"")}`);let w=new Set,S=!0;for(let t of g){let e=t.props,n=`${e.source_id??"?"}@${e.source_cid??t.src}`;w.has(n)||(w.add(n),o(S?"provenance":"",`${e.source_id??"?"} @ ${String(e.source_cid??t.src).slice(7,15)}`,!0),S=!1)}let D=u.flatMap(t=>s.edgesFrom(t)).filter(t=>t.type==="depends_on");for(let[t,e]of D.entries()){let n=String(s.getNode(s.tipOf(e.dst))?.content?.title??""),i=s.displayNameOf(e.dst);o(t===0?"depends on":"",`${i?d(i):e.dst.slice(0,12)}${n?` ${n}`:""}`)}for(let[t,e]of s.retractedEdgesTouching(c).entries()){let n=u.includes(e.src),i=s.displayNameOf(n?e.dst:e.src)??(n?e.dst:e.src).slice(0,12),C=n?`${e.type} \u2192 ${d(i)}`:`${e.type} \u2190 ${d(i)}`,I=e.retraction.at.slice(0,10);o(t===0?"retracted":"",`${C} \u2014 ${I}${e.retraction.reason?` (${e.retraction.reason})`:""}`,!0)}return{id:d(p),rawId:p,title:String(r.title??r.text??r.statement??p),label:y,lines:a}}export{E as buildDossier};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{A as K,B as L,D as M,E as N,F as O,G as P,H as Q,J as R,K as S,L as T,M as U,N as _,P as $,Q as aa,R as ba,T as ca,U as da,V as ea,W as fa,X as ga,Y as ha,Z as ia,a as c,b as d,c as e,d as f,e as g,f as h,h as i,i as j,j as t,k as u,l as v,m as w,n as x,o as y,p as z,q as A,r as B,s as C,t as D,u as E,v as F,w as G,x as H,y as I,z as J}from"./chunk-CGT4NFQN.js";import{a as V,b as W,c as X,d as Y,e as Z}from"./chunk-VNFCX2SH.js";import"./chunk-7O54QURK.js";import{a as n,b as o,c as p,e as q,f as r,g as s}from"./chunk-5GUD3CIH.js";import"./chunk-WILT62DP.js";import"./chunk-YMLC55J4.js";import{a as k,b as l,c as m}from"./chunk-EHN5HTUD.js";import"./chunk-22QIVSQR.js";import"./chunk-IE3OO5GI.js";import"./chunk-CH273NAE.js";import"./chunk-LBNADEQN.js";import"./chunk-VZ7KXRXB.js";import{a,f as b}from"./chunk-P7YZ3PU3.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-3BHRGHIZ.js";import"./chunk-MMBBQ4OZ.js";import"./chunk-WBHSPN55.js";import"./chunk-MSGW4JDG.js";import"./chunk-4JOD47QI.js";import"./chunk-OH2NSBO6.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-B2ZGG7WM.js";import"./chunk-UR6MHSHU.js";export{P as EvidenceSession,C as appendExecutionPointer,M as assembleExecutionEnv,b as buildEnvironment,j as buildEvidenceRunConfig,i as buildExternalId,z as buildLogsMetaYaml,y as buildResultYaml,t as buildRunYaml,O as createCdpBrowserCapture,u as createRunningPack,v as createRunningPackRoot,H as declareLogsFromDir,J as diagnostics,x as discardPack,ba as ensureAuteurExecution,N as fetchCdpBrowserString,L as finalizeEvidencePack,U as finalizeInlineEvidence,K as finalizeMemberTestLogs,da as flattenAuteurLeafIds,ca as flattenAuteurLeaves,T as inlineEvidenceBlock,q as listPacks,p as newExecutionId,a as normalizeOs,S as noteInlineSpawn,$ as offerEvidenceView,o as packPath,I as packTestLogsDir,V as parseRange,D as readExecutionPointers,ia as readPackLeafIds,ha as readPackLeaves,s as recoverStore,fa as remapReplayActionIds,r as resolvePack,ga as resolveReplayResultSteps,F as rollupTestStatus,aa as runEvidenceMerge,_ as runEvidenceServe,E as runEvidenceValidate,Q as runStartupRecovery,l as sealPack,w as sealPackById,Z as serveHint,f as shortHash,e as slugify,W as startEvidenceLocalServer,R as startInlineEvidence,n as storeDir,m as sweepStore,ea as synthesizeSkippedTail,h as testIdForInline,g as testIdForTestmd,k as validatePack,c as verdictFromResultCode,X as viewerBaseFor,Y as viewerUrlFor,d as worstOf,G as worstResultCode,B as writeLogsMeta,A as writeResult};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d,e,f,g}from"./chunk-SQDQADWD.js";import"./chunk-O3XBIURC.js";import"./chunk-UJZZDPDY.js";import"./chunk-BZAGVBCX.js";import"./chunk-JUJ4SAGH.js";import"./chunk-ALCE5RLK.js";import"./chunk-6LGED4FC.js";import"./chunk-C74ABM24.js";import"./chunk-H6TNBKGR.js";import"./chunk-66MOZKD2.js";import"./chunk-YLQHY4A7.js";import"./chunk-22QIVSQR.js";import"./chunk-IE3OO5GI.js";import"./chunk-CH273NAE.js";import"./chunk-LBNADEQN.js";import"./chunk-VZ7KXRXB.js";import"./chunk-5LJRZI7S.js";import"./chunk-BKM2LWU2.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-YCCUBQY4.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-B2ZGG7WM.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{b as designStateOf,g as evolveCommand,c as evolveOneUc,f as liveRunDesignForUc,a as resolveParentUc,e as runEvolveCommand,d as staleTargets};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-3IXEARDX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";export{a as explain};
@@ -0,0 +1,9 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-3IXEARDX.js";import{Q as i}from"./chunk-6LGED4FC.js";import"./chunk-C74ABM24.js";import"./chunk-H6TNBKGR.js";import"./chunk-66MOZKD2.js";import"./chunk-YLQHY4A7.js";import"./chunk-22QIVSQR.js";import"./chunk-IE3OO5GI.js";import"./chunk-CH273NAE.js";import"./chunk-LBNADEQN.js";import"./chunk-VZ7KXRXB.js";import"./chunk-5LJRZI7S.js";import"./chunk-BKM2LWU2.js";import{C as n}from"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-YCCUBQY4.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-B2ZGG7WM.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";async function f(s,p){let o=i(process.cwd(),{out:r=>process.stdout.write(r+`
3
+ `),err:r=>process.stderr.write(r+`
4
+ `),confirm:async()=>!1,isTTY:!!process.stdout.isTTY});if(!o)return 2;let c=n(o),t=a(o,c,s);if(p.json)return process.stdout.write(JSON.stringify(t)+`
5
+ `),t.target?0:1;if(!t.target)return process.stdout.write(`error: ${s} names nothing in the graph
6
+ `),1;let e=t.target;process.stdout.write(`${e.slug??e.cid} ${e.label} tip ${e.tip}
7
+ `);for(let r of t.entries)process.stdout.write(` #${r.seq} ${r.ts} ${r.kind} ${r.detail}${r.rationale?`
8
+ why: ${r.rationale}`:""}
9
+ `);return 0}export{f as explainCommand};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as x}from"./chunk-EEFZXZTZ.js";import{b as E}from"./chunk-ZKSN2SJ7.js";import{a as k}from"./chunk-CH273NAE.js";import"./chunk-VZ7KXRXB.js";import{C as h}from"./chunk-W3Z7AZNT.js";import"./chunk-JQW2QFSX.js";import"./chunk-6FCPS2VT.js";import"./chunk-UH2ZTX4E.js";import"./chunk-XMTSHHYQ.js";import"./chunk-DBIBROYW.js";import{d,e as g}from"./chunk-AKX4VRRR.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";async function _(f,$={}){let m=$.contextDir??k(process.cwd()),e=$.out??(c=>process.stdout.write(c+`
2
+ import{b as E}from"./chunk-ZKSN2SJ7.js";import{a as x}from"./chunk-3IXEARDX.js";import{a as k}from"./chunk-CH273NAE.js";import"./chunk-VZ7KXRXB.js";import{C as h}from"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import{d,e as g}from"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";async function _(f,$={}){let m=$.contextDir??k(process.cwd()),e=$.out??(c=>process.stdout.write(c+`
3
3
  `)),o=h(m),u=o.resolve(f);if(!u){let c=[...o.names.keys()].filter(n=>/^(t|sc|ac|gap)-/.test(n)).sort();return e(`no design rationale recorded for ${f} (exists: ${c.slice(0,12).join(", ")||"(no designed items)"})`),1}let a=u.tip,s=o.nodeLabel.get(a),r=o.getNode(a),l=o.nameOf.get(a)??a.slice(0,19);if(s===d.TEST){let c=String(r?.content.definitionId??""),n=c?E(m,c):null;if(!n){let i=null;for(let S of o.edgesFrom(a))if(S.type===g.VERIFIES){for(let p of o.edgesFrom(S.dst))if(p.type===g.SCOPED_TO){i=o.nameOf.get(p.dst)??p.dst.slice(0,19);break}if(i)break}return e(`no design rationale recorded for ${f} (exists: test ${l}, but its sidecar is missing \u2014 re-run: kane-cli design tests${i?` --use-case ${i}`:""} --force)`),1}e(`${l} \u2014 ${String(r?.content.title??"")}`),e(`technique: ${n.technique}`),e(`profile family: ${n.profile_family}`),e(`anchored to: ${n.anchor}`),e(`expected how: ${n.expected_how}`),e(`combinatorial: strength ${n.combinatorial.strength} \u2014 ${n.combinatorial.reason}`),e(`surface: ${n.surface_state} \xB7 deferred bindings: ${n.deferred_bindings}`);let t=r?.content.check;t&&e(`check: ${String(t.kind)} ${String(t.operator)} ${String(t.operand??t.within??"")} \u2014 verified against ${String(t.verified_against)}`);for(let i of o.edgesFrom(a))i.type===g.AUTOMATES&&e(`automates: ${o.nameOf.get(i.dst)??i.dst.slice(0,19)}`),i.type===g.VERIFIES&&e(`verifies: ${o.nameOf.get(i.dst)??i.dst.slice(0,19)}`),i.type===g.REUSES&&e(`imports: ${o.nameOf.get(i.dst)??i.dst.slice(0,19)}`);return 0}if(s===d.SCENARIO||s===d.AC||s===d.GAP){let n=x(m,o,f).entries.filter(t=>t.kind==="judgement"||t.kind==="review");if(e(`${l} \u2014 ${String(r?.content.title??r?.content.text??"")}`),s===d.SCENARIO&&(e(`case type: ${String(r?.content.case_type??"")} \xB7 intent: ${String(r?.content.intent??"")}`),e(`technique: ${String(r?.content.technique_notes??"")}`)),s===d.AC){let t=r?.content.expected_answer;e(`kind: ${String(r?.content.kind??"")}${t?` \xB7 oracle: ${String(t.operator)} ${String(t.operand??"")}`:""}`)}n.length===0&&e("(no recorded judgements yet \u2014 approvals and design-time judgements land here)");for(let t of n)e(t.kind==="judgement"?`judgement: ${t.rationale??t.detail}`:`review: ${t.detail}`);return 0}return e(`no design rationale recorded for ${f} (exists: ${s??"nothing"} ${l} \u2014 design explains tests, scenarios, ACs, and gaps)`),1}export{_ as designExplainCommand};
@@ -0,0 +1,14 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as $}from"./chunk-A2SQD2AY.js";import{f as se,g as U}from"./chunk-L6MOO4WT.js";import"./chunk-ZMNJBUAO.js";import"./chunk-W5TTF7GB.js";import"./chunk-I7TIGB7K.js";import"./chunk-MLRO7OH3.js";import"./chunk-KZG4E5RM.js";import"./chunk-X5276I5H.js";import"./chunk-UHT5SVP5.js";import"./chunk-FFFB5BXL.js";import"./chunk-AXTPNZPX.js";import"./chunk-L2TV4G56.js";import"./chunk-BZAGVBCX.js";import"./chunk-52WM3XYO.js";import"./chunk-BB2W35TW.js";import"./chunk-P3JUE2RM.js";import{c as L}from"./chunk-YKTYVJBN.js";import"./chunk-CRZUBDJ3.js";import"./chunk-GX3FPJUG.js";import"./chunk-427OQS2N.js";import{a as A}from"./chunk-NDCRJXYF.js";import{a as ie}from"./chunk-JUJ4SAGH.js";import"./chunk-AHXOKBVE.js";import"./chunk-ALCE5RLK.js";import"./chunk-55YDTPB7.js";import"./chunk-YCH7H7JX.js";import"./chunk-2UIHS2FH.js";import"./chunk-Q2F5QB2W.js";import"./chunk-BKHXPBWN.js";import"./chunk-N2P4MI32.js";import{e as W}from"./chunk-4K5XTIJ6.js";import"./chunk-J7NRD4Q7.js";import{T as ee,U as te,V as re,W as Y,X as ne}from"./chunk-6LGED4FC.js";import"./chunk-C74ABM24.js";import{c as O}from"./chunk-H6TNBKGR.js";import"./chunk-66MOZKD2.js";import"./chunk-YLQHY4A7.js";import"./chunk-22QIVSQR.js";import"./chunk-IE3OO5GI.js";import{a as C}from"./chunk-CH273NAE.js";import"./chunk-LBNADEQN.js";import"./chunk-VZ7KXRXB.js";import{a as B,b as H}from"./chunk-O2APH6TZ.js";import"./chunk-4PMZ5FCD.js";import"./chunk-KBM3XHAM.js";import"./chunk-2YEHV2CX.js";import"./chunk-5LJRZI7S.js";import"./chunk-BKM2LWU2.js";import"./chunk-GP7WD4UY.js";import"./chunk-JQW2QFSX.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-YCCUBQY4.js";import"./chunk-MSGW4JDG.js";import"./chunk-RSSOJ3L2.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-EYOCNMUM.js";import"./chunk-B2ZGG7WM.js";import"./chunk-DFS4RMVP.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";import{existsSync as oe}from"fs";async function he(n){let[{render:s},a,{QuestionBatchPrompt:m}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),h=a.default??a;return new Promise(x=>{let v=s(h.createElement(m,{questions:n,onSubmit:t=>{v.unmount(),x(t)}}))})}async function we(n,s){let[{render:a},m,{ReviewChecklist:h}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./ui-JEJGTURD.js")]),x=m.default??m;return new Promise(v=>{let t=a(x.createElement(h,{items:n.map(f=>{let w=s.get(f.temp_ref);return{uc:f,dedupWith:w&&!w.archived?w.cid:void 0,archivedMatch:w?.archived?{cid:w.cid,reason:w.reason}:void 0}}),onSubmit:f=>{t.unmount(),v(f)}}))})}async function ye(n){let{createInterface:s}=await import("readline/promises"),a=s({input:process.stdin,output:process.stdout});try{let m=await a.question(`${n} [y/N] `);return/^y(es)?$/i.test(m.trim())}finally{a.close()}}async function Ae(n){let s=C(process.cwd()),a=H({verb:"extract",mode:n.plan?"cli":"interactive",contextRoot:s,env:B(),resumeSid:n.resume,write:!0,longSession:!0});await ee(s,r=>process.stderr.write(r+`
3
+ `));{let r=oe(s)?Y(s):null;if(r)return process.stderr.write(`error: ${r.text}
4
+ next: ${r.remedy}
5
+ `),await a.end({exit_code:2}),2}let h={...await W(),...a.spawnEnv()},x=await L(h);if(!x.ok)return process.stderr.write((x.message??"error: turn-endpoint preflight failed")+`
6
+ `),process.stderr.write(a.supportFooter()+`
7
+ `),a.error("preflight_auth"),await a.end({exit_code:2}),2;let v=async()=>x;if(n.plan){let r=await U(n,{contextDir:s,agent:A,preflightTurn:v,ask:he,review:we,confirmStale:ye,out:l=>process.stdout.write(l+`
8
+ `),progress:l=>process.stderr.write(l+`
9
+ `),isTTY:O(),auth:h,telemetry:a});return r===1&&process.stderr.write(a.supportFooter()+`
10
+ `),await a.end({exit_code:r}),r}let[{render:t},f,{ScrollbackProvider:w},{ChatSurface:z},{ScrollbackTap:u},{makeChatController:F},{setInkExit:Q},T]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-AVL3TJA2.js"),import("./ScrollbackTap-QHJOFYMC.js"),import("./chat-controller-3EPK7UZG.js"),import("./exit-manager-ZLDO54S4.js"),Promise.all([import("./chat-committer-HDE3TP5I.js"),import("./descriptor-PWUUNYV7.js"),import("./explain-H5HJEDEF.js"),import("./readmodel-IBFRM6EO.js")])]),[{commitChatTurn:J},{topologyDescriptor:j},{explain:e},{openGraph:i}]=T,S=f.default??f,o=F({commitChatTurn:J,descriptor:j(),contextDir:s,refreshGraph:()=>i(s),graph:i(s),explain:e,by:{kind:"human",id:"owner"},dedupFlags:r=>se(r,i(s))}),q={current:null},P=null,K=0,G=null,I=!1,ae=()=>{if(K+=1,K>=2){try{M.unmount()}catch{}$({state:"interrupted",reason:"ctrl+c \xD72",facts:["forced quit \u2014 anything already committed is safe in the store"]}),process.exit(130)}o.requestPause(),G=setTimeout(()=>{I||(I=!0,(async()=>{o.finalizeForExit(),await q.current?.flush();try{M.unmount()}catch{}$({state:"interrupted",facts:["the agent did not confirm the pause within 5s \u2014 nothing new was saved"]}),process.exit(130)})())},5e3)},ce=await import("./dossier-UGJMYYAB.js"),de=r=>{try{return ce.buildDossier(i(s),r)}catch{return null}},ue={listUcs:()=>{let r=i(s),l=new Set(o.state.turns.flatMap(c=>(c.items??[]).map(p=>p.title.toLowerCase()))),d={high:0,med:1,low:2};return r.byLabel("usecase").filter(c=>!r.superseded.has(c.cid)).map((c,p)=>{let k=c.content,b=String(k.title??c.cid.slice(0,12)),V=ie(r,c.cid),E=V?V.designed_at_cid===c.cid?"current":"stale":void 0;return{key:c.cid,title:b,badge:E==="current"?"designed":E==="stale"?"designed \xB7 stale":l.has(b.toLowerCase())?"drafted this session":"existing",designed:E,risk:k.risk,i:p}}).sort((c,p)=>(d[c.risk??"zz"]??3)-(d[p.risk??"zz"]??3)||c.i-p.i).map(({key:c,title:p,badge:k,designed:b})=>({key:c,title:p,badge:k,designed:b}))},runDesignChild:async(r,l=!1,d="design")=>{try{let{designEntryCheck:g,confirmUnreviewedViaAsk:_}=await import("./trust-gate-EX7R2P4Y.js"),y=g(i(s),r);if(!y.ok&&(y.code==="UC_UNREVIEWED"||y.code==="UC_ARCHIVED")&&!await _(D=>o.ask(D),y))return o.note(`design child refused \u2014 approve it first: ${y.reviewCmd}`),2}catch{}let[{runDesign:c}]=await Promise.all([import("./run-DN4XARP2.js")]),p="",k=(()=>{try{let g=i(s),_=g.resolve(r);return(_?g.getNode(_.cid)?.content?.title:void 0)??r}catch{return r}})(),{collectSessionItems:b}=await import("./session-items-2ATN7VXG.js"),V=b(o.state.turns).entries.length,E=o.state.credits?.total,fe=Date.now();o.ledger({kind:"childOpen",verb:d,subject:k});let ge=g=>{let _=Math.max(1,Math.round((Date.now()-fe)/1e3)),y=b(o.state.turns).entries.length-V,R=o.state.credits?.total,D=R!==void 0&&E!==void 0?R-E:R;o.ledger(g===0?{kind:"childClose",verb:d,subject:k,ok:!0,durS:_,...y>0?{results:`${y} item${y===1?"":"s"}`}:{},...D!==void 0&&D>0?{credits:D}:{}}:{kind:"childClose",verb:d,subject:k,ok:!1,durS:_,exitCode:g,fixCmd:`kane-cli design tests --use-case ${r}${l||d==="evolve"?" --force":""}`});let Z=b(o.state.turns).entries.length;o.ledger({kind:"childBack",parentVerb:"extract",context:`${Z} draft${Z===1?"":"s"} saved`})},N=1;try{N=await c({useCase:r,force:l,mode:"interactive"},{contextDir:s,agent:A,preflightTurn:v,ask:g=>o.ask(g),chat:o,nested:!0,out:g=>{p=g},progress:()=>{},isTTY:!0,auth:h})}finally{ge(N)}return N!==0&&p&&o.note(p),N}},{makeReconcileDeps:le}=await import("./reconcile-deps-X6IGH4CA.js"),me=le({contextDir:s,...n.changeContext?{changeContext:n.changeContext}:{},note:r=>o.note(r)}),pe={verb:"extract",sid:n.resume??a.ids.session_id,env:B(),...n.source?{subject:n.source}:{}},M=t(S.createElement(w,null,S.createElement(u,{into:q}),S.createElement(z,{controller:o,verb:"extract",onCtrlC:ae,chain:ue,inspect:de,reconcile:me,meta:pe})),{exitOnCtrlC:!1});Q(()=>M.unmount());let X=null;try{let r=U(n,{contextDir:s,agent:A,preflightTurn:v,onSummary:d=>{P=d},ask:d=>o.ask(d),review:async d=>new Map(d.map(c=>[c.temp_ref,{resolution:"skipped"}])),confirmStale:async()=>!0,out:d=>o.note(d),progress:()=>{},isTTY:O(),auth:h,chat:o,telemetry:a});r.finally(()=>{I=!0});let l=await r;return X=l,l===1&&process.stderr.write(a.supportFooter()+`
11
+ `),await a.end({exit_code:l}),l}catch(r){throw P||(P={state:"crashed",facts:[`the session ended unexpectedly \u2014 ${r instanceof Error?r.name:"error"}`]}),r}finally{I=!0,G&&clearTimeout(G),o.finalizeForExit(),await q.current?.flush();try{M.unmount()}catch{}P?$(P):X===1&&$({state:"interrupted",facts:["the session ended without saving \u2014 see the error above"]})}}async function $e(n){let s=H({verb:"extract",mode:n.mode,contextRoot:C(process.cwd()),env:B(),resumeSid:n.resume,write:!0,longSession:!0}),{makeHeadlessIO:a,resolveEncoding:m,guardedChannels:h}=await import("./headless-io-3A3BZVQ5.js"),{withStructuredNext:x,prepareStructuredResume:v}=await import("./structured-answers-NADW6D44.js"),t=x(a(m(n.mode),"extract")),f=await te(C(process.cwd()));f&&(m(n.mode)==="ndjson"?t.event(re(f)):t.progress(f.text));let{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),z=m(n.mode)==="ndjson"?e=>w({event:i=>t.event(i)},e):e=>e();for(let e of n.landed??[]){let i=e;t.event({type:"ingested",source_id:e.source_id,status:e.status,cid:e.source_cid,...i.warnings?.length?{warnings:i.warnings}:{},...i.media?{media:i.media}:{},...i.duplicate_of?{duplicate_of:i.duplicate_of}:{},...i.lineage_candidate?{lineage_candidate:i.lineage_candidate}:{}})}{let e=oe(C(process.cwd()))?Y(C(process.cwd())):null;if(e)return m(n.mode)==="ndjson"?t.event(ne(e)):t.progress(`error: ${e.text}
12
+ next: ${e.remedy}`),await s.end({exit_code:2}),t.done(2,"refused")}let u;try{u=v({opts:n,contextDir:C(process.cwd()),verb:"extract"})}catch(e){let i=e instanceof Error?e.message:String(e);return t.out(`error: ${i}`),n.mode==="agent"&&t.event({type:"error",message:i}),await s.end({exit_code:1}),n.mode==="agent"?t.done(1,"error"):1}if(u.kind==="refuse")return t.out(u.error),n.mode==="agent"&&t.event({type:"error",message:u.error,code:u.code}),await s.end({exit_code:2}),n.mode==="agent"?t.done(2,"refused"):2;let F=n;if(u.kind==="apply"){for(let e of u.notes)t.out(e);if(u.matchedQids.length>0){t.out(`applying ${u.matchedQids.length} structured answer(s) from --answer to the paused session's pending questions`);for(let e of u.matchedQids)t.event({type:"panel_resolved",id:e,by:"user",via:"flag"})}u.statement&&(F={...n,message:[n.message,u.statement].filter(Boolean).join(`
13
+
14
+ `)})}let{makeInterruptGuard:Q}=await import("./interrupt-guard-UREUWNRL.js"),T=Q(A,e=>t.out(e)),j=h(t,()=>T.interrupted(),/^error: (agent failed|repair run failed|agent ended)/);try{let e=await z(async()=>{let i={...await W(),...s.spawnEnv()};return U(F,{contextDir:C(process.cwd()),agent:T.agent,preflightTurn:()=>L(i),ask:async()=>[],review:async S=>new Map(S.map(o=>[o.temp_ref,{resolution:"skipped"}])),confirmStale:async()=>!1,out:j.out,emit:j.emit,progress:t.progress,isTTY:!1,auth:i,telemetry:s})});return T.interrupted()&&e!==3?(t.out("interrupted \u2014 no session saved"),await s.end({exit_code:130}),t.done(130)):(e===1&&t.out(s.supportFooter()),await s.end({exit_code:e}),t.done(e))}catch(e){return t.event({type:"error",message:`error: extract failed: ${e instanceof Error?e.message:String(e)}`}),t.out(`error: extract failed: ${e instanceof Error?e.message:String(e)}`),t.out('hint: the full trace is in the file named on the "trace:" line at the start of this run'),t.done(1)}finally{T.dispose()}}export{$e as bindExtractHeadless,Ae as bindExtractInteractive};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as i}from"./chunk-CH273NAE.js";import"./chunk-UR6MHSHU.js";import{existsSync as u}from"fs";async function g(e){if(e.mode!=null&&!["interactive","agent","ci","override"].includes(e.mode)){let{makeHeadlessIO:t,agentRefusal:r}=await import("./headless-io-66RG5NN5.js");return r(t("ndjson","extract"),`extract: --mode must be interactive | agent | ci | override, got '${e.mode}'`,"MODE_USAGE")}let n=async(t,r)=>{if(e.mode!=="agent")return process.stderr.write(t+`
3
- `),2;let{makeHeadlessIO:o,agentRefusal:c}=await import("./headless-io-66RG5NN5.js");return c(o("ndjson","extract"),t,r)};if(e.apply)return n("extract: --apply is not implemented yet \u2014 coming with the plan\u2192apply workflow (run without --apply, or use --plan to preview)");{let{validateResumeMessage:t}=await import("./headless-io-66RG5NN5.js"),r=t(e,"extract");if(r)return n(r)}{let{gateStructuredFlags:t}=await import("./structured-answers-YAVW65G4.js"),r=t(e,"extract");if(r)return n(r,"STRUCTURED_FLAGS_USAGE")}if(e.withSource&&!e.resume)return n("extract: --with-source pairs with --resume \u2014 it lands the source and sets the resumed session's pending questions aside");if(e.queued)return n("extract: --queued is gone \u2014 extract sweeps every pending source by default (just run kane-cli context extract)");if(!u(i(process.cwd())))return n("error: no context store here (run `kane-cli context ingest <files>` first)","NO_STORE");if(!e.mode&&!process.stdin.isTTY)return process.stderr.write(`extract: no TTY \u2014 pass an explicit --mode agent|ci|override to run headless
2
+ import{a as i}from"./chunk-CH273NAE.js";import"./chunk-UR6MHSHU.js";import{existsSync as u}from"fs";async function g(e){if(e.mode!=null&&!["interactive","agent","ci","override"].includes(e.mode)){let{makeHeadlessIO:t,agentRefusal:r}=await import("./headless-io-3A3BZVQ5.js");return r(t("ndjson","extract"),`extract: --mode must be interactive | agent | ci | override, got '${e.mode}'`,"MODE_USAGE")}let n=async(t,r)=>{if(e.mode!=="agent")return process.stderr.write(t+`
3
+ `),2;let{makeHeadlessIO:o,agentRefusal:c}=await import("./headless-io-3A3BZVQ5.js");return c(o("ndjson","extract"),t,r)};if(e.apply)return n("extract: --apply is not implemented yet \u2014 coming with the plan\u2192apply workflow (run without --apply, or use --plan to preview)");{let{validateResumeMessage:t}=await import("./headless-io-3A3BZVQ5.js"),r=t(e,"extract");if(r)return n(r)}{let{gateStructuredFlags:t}=await import("./structured-answers-NADW6D44.js"),r=t(e,"extract");if(r)return n(r,"STRUCTURED_FLAGS_USAGE")}if(e.withSource&&!e.resume)return n("extract: --with-source pairs with --resume \u2014 it lands the source and sets the resumed session's pending questions aside");if(e.queued)return n("extract: --queued is gone \u2014 extract sweeps every pending source by default (just run kane-cli context extract)");if(!u(i(process.cwd())))return n("error: no context store here (run `kane-cli context ingest <files>` first)","NO_STORE");if(!e.mode&&!process.stdin.isTTY)return process.stderr.write(`extract: no TTY \u2014 pass an explicit --mode agent|ci|override to run headless
4
4
  `),2;let s=e.mode??"interactive";if(s==="interactive"){if(!process.stdin.isTTY||!process.stdout.isTTY)return process.stderr.write(`extract: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
5
- `),2;let{bindExtractInteractive:t}=await import("./extract-bind-BFJPRNPQ.js");return t(e)}let{bindExtractHeadless:a}=await import("./extract-bind-BFJPRNPQ.js");return a({...e,mode:s})}export{g as extractCommand};
5
+ `),2;let{bindExtractInteractive:t}=await import("./extract-bind-D5BYYGYA.js");return t(e)}let{bindExtractHeadless:a}=await import("./extract-bind-D5BYYGYA.js");return a({...e,mode:s})}export{g as extractCommand};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a,b,c,d}from"./chunk-FFVNISYH.js";import"./chunk-CRZUBDJ3.js";import"./chunk-3N6IAVD5.js";import"./chunk-FQNQVC5O.js";import"./chunk-AKX4VRRR.js";import"./chunk-UD7KKHPW.js";import"./chunk-UR6MHSHU.js";export{a as archiveImpact,b as heldArchiveScan,c as reviewCards,d as reviewCounts};