@testmuai/kane-cli 0.7.1 → 0.7.2

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 (258) hide show
  1. package/dist/ChatSurface-E7QKI4LA.js +8 -0
  2. package/dist/{ChromeProfilePicker-4CDSPBWL.js → ChromeProfilePicker-DGDWGCZD.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TLRVBA4E.js → CliFeedbackPrompt-SYCZXSME.js} +1 -1
  4. package/dist/{CliUploadProgress-WGGFLUSF.js → CliUploadProgress-VDEAKXJY.js} +1 -1
  5. package/dist/{ConfigView-DBANTBXC.js → ConfigView-HPKRQXMC.js} +1 -1
  6. package/dist/EvidenceViewOffer-F5YG54OC.js +2 -0
  7. package/dist/{FolderPicker-W7RCIFEL.js → FolderPicker-4NSDXQY5.js} +1 -1
  8. package/dist/{HelpView-FBCX32U7.js → HelpView-ON6BFGJM.js} +1 -1
  9. package/dist/{InfoBox-KK2ICVS4.js → InfoBox-B23NZ6IG.js} +1 -1
  10. package/dist/{LinksBox-KKRANMR3.js → LinksBox-TI26VFFH.js} +1 -1
  11. package/dist/{ProfilesView-DGPXSAQN.js → ProfilesView-CRO5AH3H.js} +1 -1
  12. package/dist/{ProjectPicker-ESQSL4TT.js → ProjectPicker-3N7LJOXU.js} +1 -1
  13. package/dist/{SaveSessionPrompt-AQGP5W6E.js → SaveSessionPrompt-UTOEC5AW.js} +1 -1
  14. package/dist/SingleShotApp-Y3YDFQSD.js +2 -0
  15. package/dist/{SummaryBox-BFZJW2KK.js → SummaryBox-JK64EKC2.js} +1 -1
  16. package/dist/TestMdRunView-O6JTHV5W.js +2 -0
  17. package/dist/{WhoamiView-JABY3I5Q.js → WhoamiView-6QSLPNF6.js} +1 -1
  18. package/dist/{auth-76LVI6B5.js → auth-IKFVW3NX.js} +1 -1
  19. package/dist/bind-KCUSVJXG.js +12 -0
  20. package/dist/bootstrap-NFYYRGGR.js +2 -0
  21. package/dist/bridge-JSKEO4N3.js +2 -0
  22. package/dist/{changelog-PSWPPOAF.js → changelog-AAH2ZBYO.js} +1 -1
  23. package/dist/chat-committer-UUC6JTRJ.js +2 -0
  24. package/dist/chat-controller-T2FAI55V.js +2 -0
  25. package/dist/{chunk-NAE7MBR2.js → chunk-23VPUWBD.js} +3 -3
  26. package/dist/chunk-2UIHS2FH.js +2 -0
  27. package/dist/chunk-2WFZIQ62.js +2 -0
  28. package/dist/chunk-2WRBTLFN.js +13 -0
  29. package/dist/chunk-2YEHV2CX.js +2 -0
  30. package/dist/{chunk-KVQOBPAZ.js → chunk-3Q6WAK6P.js} +1 -1
  31. package/dist/{chunk-6HEGD6H2.js → chunk-4LTXE3IX.js} +1 -1
  32. package/dist/{chunk-KT6G7AF2.js → chunk-4NFCAGRK.js} +1 -1
  33. package/dist/chunk-53IBTIL3.js +12 -0
  34. package/dist/{chunk-FCMLIK7P.js → chunk-5DBK6QNS.js} +1 -1
  35. package/dist/chunk-5DT7PIGB.js +5 -0
  36. package/dist/{chunk-XDHZMCTA.js → chunk-5FJJJNJK.js} +2 -2
  37. package/dist/{chunk-XVDJ423L.js → chunk-5SXMV66P.js} +1 -1
  38. package/dist/{chunk-6UJDOAYR.js → chunk-5WXGMXGA.js} +2 -2
  39. package/dist/chunk-5ZQZOVWY.js +4 -0
  40. package/dist/{chunk-5KFS3GAZ.js → chunk-6KPPGMO2.js} +1 -1
  41. package/dist/{chunk-RNSSM2BK.js → chunk-74HTO7K3.js} +1 -1
  42. package/dist/{chunk-PMHJRT3A.js → chunk-7KORP5FF.js} +1 -1
  43. package/dist/chunk-7OYZR6JA.js +3 -0
  44. package/dist/chunk-7QJ75SYR.js +8 -0
  45. package/dist/{chunk-DXV6MBTD.js → chunk-AECMF3T2.js} +1 -1
  46. package/dist/{chunk-3LWTUMDG.js → chunk-AFBKGZFG.js} +1 -1
  47. package/dist/{chunk-AM5S4KG4.js → chunk-AFPHLUQ5.js} +1 -1
  48. package/dist/chunk-AJ56AMT6.js +9 -0
  49. package/dist/{chunk-NJPTOKW5.js → chunk-APPYQZFK.js} +1 -1
  50. package/dist/{chunk-CSQ46PJ7.js → chunk-AXTGYOMK.js} +1 -1
  51. package/dist/{chunk-HPMS5KO6.js → chunk-B5RS2XZU.js} +2 -2
  52. package/dist/chunk-BKHXPBWN.js +2 -0
  53. package/dist/{chunk-SRDHPKJT.js → chunk-BXYWX4J3.js} +1 -1
  54. package/dist/chunk-C3T7TKAC.js +349 -0
  55. package/dist/{chunk-JEUA4UWK.js → chunk-CLGC7VEO.js} +1 -1
  56. package/dist/{chunk-L4JIMNKW.js → chunk-CUM23TLF.js} +1 -1
  57. package/dist/chunk-DBIBROYW.js +5 -0
  58. package/dist/chunk-DBKNJRJG.js +2 -0
  59. package/dist/{chunk-M7WQM4UA.js → chunk-DUAXZYAD.js} +1 -1
  60. package/dist/chunk-DZPGG4S6.js +7 -0
  61. package/dist/{chunk-2KBD6JZX.js → chunk-EOLFTMWF.js} +1 -1
  62. package/dist/{chunk-2XGDWUJ5.js → chunk-F7ISS545.js} +1 -1
  63. package/dist/{chunk-JKTFTF24.js → chunk-FBHRBFHP.js} +1 -1
  64. package/dist/{chunk-L7VREJTG.js → chunk-FDIPQRX4.js} +1 -1
  65. package/dist/{chunk-AAONIIQV.js → chunk-GFKCTYCA.js} +1 -1
  66. package/dist/{chunk-73C4PRYU.js → chunk-GYNTNKNB.js} +1 -1
  67. package/dist/{chunk-KNDSQ4PS.js → chunk-H32GM5G4.js} +1 -1
  68. package/dist/{chunk-323MLBYA.js → chunk-HYSFJSIG.js} +1 -1
  69. package/dist/chunk-I7TIGB7K.js +2 -0
  70. package/dist/chunk-IDX3TOPY.js +6 -0
  71. package/dist/{chunk-CVOGP253.js → chunk-IMR64OCZ.js} +1 -1
  72. package/dist/{chunk-IBNC444G.js → chunk-IOD3HQVW.js} +1 -1
  73. package/dist/{chunk-URQUQWGW.js → chunk-J5FBU425.js} +40 -40
  74. package/dist/chunk-JKM2PUHI.js +4 -0
  75. package/dist/{chunk-ZM5PVRJK.js → chunk-JPWLGHPM.js} +1 -1
  76. package/dist/{chunk-5JTUL6XL.js → chunk-JZ26R6UL.js} +1 -1
  77. package/dist/chunk-KBM3XHAM.js +2 -0
  78. package/dist/{chunk-SY3HLQMV.js → chunk-KCCSWEGA.js} +1 -1
  79. package/dist/{chunk-APAIWBIH.js → chunk-KQZA2QSC.js} +1 -1
  80. package/dist/{chunk-X3ICV5M5.js → chunk-KWIK22R6.js} +1 -1
  81. package/dist/{chunk-33QXD75Y.js → chunk-M6FKJKC6.js} +2 -2
  82. package/dist/{chunk-IXVOXJP6.js → chunk-MK7JUOYV.js} +1 -1
  83. package/dist/chunk-N2P4MI32.js +2 -0
  84. package/dist/{chunk-JRMDGLLT.js → chunk-O75ZHGJG.js} +1 -1
  85. package/dist/chunk-OR6MCL6Z.js +2 -0
  86. package/dist/chunk-ORQNKZ2Z.js +5 -0
  87. package/dist/{chunk-QROUKGKU.js → chunk-OS4VSIHT.js} +1 -1
  88. package/dist/{chunk-UI7KULSI.js → chunk-OUJQVBUT.js} +3 -3
  89. package/dist/{chunk-UBFKZEX3.js → chunk-PLOWZLG5.js} +1 -1
  90. package/dist/chunk-QIGPXYMF.js +19 -0
  91. package/dist/chunk-QOFZSHSC.js +47 -0
  92. package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
  93. package/dist/chunk-R7QAS6LZ.js +4 -0
  94. package/dist/{chunk-CDQX6HGJ.js → chunk-RDNFVZEB.js} +1 -1
  95. package/dist/{chunk-NRTHYROA.js → chunk-SFII7HPP.js} +1 -1
  96. package/dist/{chunk-3FN5VJMV.js → chunk-SL6PCVM2.js} +1 -1
  97. package/dist/{chunk-LQZ2BU7Q.js → chunk-STVP2XHO.js} +1 -1
  98. package/dist/chunk-TH47OOBV.js +4 -0
  99. package/dist/{chunk-OHRS3H7Z.js → chunk-TRJUD3XJ.js} +1 -1
  100. package/dist/{chunk-BAL64WSI.js → chunk-UC7MNPIN.js} +1 -1
  101. package/dist/chunk-UD7KKHPW.js +5 -0
  102. package/dist/chunk-VAYBKR76.js +4 -0
  103. package/dist/chunk-VFII6C46.js +2 -0
  104. package/dist/{chunk-R2RGSO4B.js → chunk-VHZ4S57N.js} +1 -1
  105. package/dist/{chunk-WJ5HDEVH.js → chunk-VLWMMOMF.js} +1 -1
  106. package/dist/chunk-VMM4LC4V.js +10 -0
  107. package/dist/{chunk-322JEJEH.js → chunk-VOOPWFHW.js} +1 -1
  108. package/dist/{chunk-4OPQJ7PE.js → chunk-VRLUNZAK.js} +1 -1
  109. package/dist/{chunk-AH7ZZIZY.js → chunk-VRVFPMCR.js} +1 -1
  110. package/dist/{chunk-F6ZOJXYU.js → chunk-VT54ARGE.js} +1 -1
  111. package/dist/{chunk-NBKQT7LJ.js → chunk-VWKVUOXU.js} +1 -1
  112. package/dist/chunk-W4B5LOEX.js +4 -0
  113. package/dist/{chunk-36OC3TFE.js → chunk-W5TTF7GB.js} +2 -2
  114. package/dist/chunk-WXHQYYD5.js +2 -0
  115. package/dist/{chunk-NOCIMJSN.js → chunk-XUS4WKDS.js} +1 -1
  116. package/dist/chunk-XWKUZJCP.js +2 -0
  117. package/dist/chunk-YTHQNN2L.js +3 -0
  118. package/dist/{chunk-V36ATG7A.js → chunk-ZBOWFJB2.js} +2 -2
  119. package/dist/chunk-ZMNJBUAO.js +2 -0
  120. package/dist/{chunk-LR5XO2KD.js → chunk-ZRASQ63J.js} +1 -1
  121. package/dist/{chunk-C4G7RVJ6.js → chunk-ZUGCHQFC.js} +1 -1
  122. package/dist/committer-SWEWEYNX.js +2 -0
  123. package/dist/{config-R3GF2FZA.js → config-CWZV6XPT.js} +1 -1
  124. package/dist/{cover-cmd-TXICWHUU.js → cover-cmd-NWIRJY5Z.js} +1 -1
  125. package/dist/{credentials-XN4ROCQ3.js → credentials-YHTJGKEO.js} +1 -1
  126. package/dist/descriptor-OEUZZCOK.js +2 -0
  127. package/dist/design-committer-VYT6NU3T.js +2 -0
  128. package/dist/dispatch-WVNXB7AD.js +2 -0
  129. package/dist/docx-convert-CHLJUTFH.js +2 -0
  130. package/dist/{dossier-QZV74XOS.js → dossier-KTLTGT2X.js} +1 -1
  131. package/dist/{evidence-V23FPVXQ.js → evidence-IVDNXWPL.js} +1 -1
  132. package/dist/evolve-cmd-XBX4SX5H.js +2 -0
  133. package/dist/{exit-manager-HNFATGSM.js → exit-manager-XZL4KIJU.js} +1 -1
  134. package/dist/explain-UAAQWHYR.js +2 -0
  135. package/dist/{explain-cmd-RZW6QJYM.js → explain-cmd-75MCF2ZV.js} +1 -1
  136. package/dist/{explain-cmd-X7JZLSZZ.js → explain-cmd-IZEHWZV5.js} +1 -1
  137. package/dist/extract-bind-5OWELRME.js +10 -0
  138. package/dist/extract-cmd-ZRYMJ6IC.js +5 -0
  139. package/dist/feeder-C3TOJPKK.js +2 -0
  140. package/dist/{gaps-cmd-BWCRLLBK.js → gaps-cmd-XBRXKXDL.js} +1 -1
  141. package/dist/{gate-YHBPWEM5.js → gate-54BRAE7N.js} +1 -1
  142. package/dist/{generate-headless-BSTDLZZY.js → generate-headless-D6BISWDC.js} +2 -2
  143. package/dist/{headless-io-BL3TEAX5.js → headless-io-66RG5NN5.js} +1 -1
  144. package/dist/identity-ADZ4PAJF.js +2 -0
  145. package/dist/index.js +43 -43
  146. package/dist/ingest-EX72IEQT.js +2 -0
  147. package/dist/ingest-cmd-YTGOICTC.js +2 -0
  148. package/dist/{interactive-bind-43HGDF5K.js → interactive-bind-XSRD36MO.js} +7 -6
  149. package/dist/{lifecycle-cmd-D6TVTYRK.js → lifecycle-cmd-EQSFAZG6.js} +1 -1
  150. package/dist/{list-cmd-XCAV2FKA.js → list-cmd-IRJSUCM5.js} +1 -1
  151. package/dist/{list-commands-747UTUSS.js → list-commands-RCYHJ5Y3.js} +1 -1
  152. package/dist/locks-cmd-CSVSWY2Y.js +2 -0
  153. package/dist/logical-ids-TEBCQJGO.js +2 -0
  154. package/dist/login-flow-PYAPYCPY.js +2 -0
  155. package/dist/maintenance-cmd-MVFA6H74.js +2 -0
  156. package/dist/pdf-convert-OZIRUADA.js +2 -0
  157. package/dist/{persist-recorded-session-MDPWWUA7.js → persist-recorded-session-DTYCLXTQ.js} +1 -1
  158. package/dist/phase-seed-DIRETNU6.js +2 -0
  159. package/dist/pipeline-MXFOD6ES.js +2 -0
  160. package/dist/readmodel-XOYGGQ3S.js +2 -0
  161. package/dist/reconcile-cmd-EG6BOU3A.js +2 -0
  162. package/dist/reconcile-deps-HTT6IPHT.js +4 -0
  163. package/dist/reconcile-engine-JQNXALNY.js +2 -0
  164. package/dist/{recording-banner-TALO7PUR.js → recording-banner-76GCIPUN.js} +1 -1
  165. package/dist/records-IOZTZUZV.js +2 -0
  166. package/dist/{require-project-folder-R347LFDQ.js → require-project-folder-ACRDP5ZB.js} +1 -1
  167. package/dist/{resolver-IDCGRPFJ.js → resolver-SRPCFW7P.js} +1 -1
  168. package/dist/revert-NQ7GEVSE.js +2 -0
  169. package/dist/review-cmd-L3V5UP5T.js +4 -0
  170. package/dist/run-GMZCDRDD.js +2 -0
  171. package/dist/run-TFRWPGXP.js +2 -0
  172. package/dist/run-channel-RGH4WIQX.js +2 -0
  173. package/dist/{run-test-md-DFNIGYB7.js → run-test-md-KEHSRMCM.js} +2 -2
  174. package/dist/sessions-GIEXOCE4.js +2 -0
  175. package/dist/{sessions-cmd-AQWLL5ZN.js → sessions-cmd-ZVYGSRJ3.js} +4 -4
  176. package/dist/{skill-installer-ANXTCXQV.js → skill-installer-HBN3A35K.js} +1 -1
  177. package/dist/spawner-GC5CFAJ7.js +2 -0
  178. package/dist/structured-answers-A43Q25CZ.js +5 -0
  179. package/dist/tcg-generate-V7YFNC5O.js +2 -0
  180. package/dist/testmd-actions-MNDOO76O.js +2 -0
  181. package/dist/token-refresh-3UYMCYG3.js +2 -0
  182. package/dist/{validate-basic-O2DP2XJL.js → validate-basic-ZGWPBYB6.js} +1 -1
  183. package/dist/verdicts-SCETLY5J.js +2 -0
  184. package/dist/{version-check-RNR3JCQ5.js → version-check-CJWKDAXV.js} +1 -1
  185. package/dist/{view-cmd-YSEGA5PI.js → view-cmd-SOVM64L2.js} +1 -1
  186. package/dist/walk-session-YUYRULPY.js +2 -0
  187. package/dist/with-telemetry-E7QWPGL6.js +2 -0
  188. package/package.json +6 -6
  189. package/dist/ChatSurface-D66CACLX.js +0 -8
  190. package/dist/EvidenceViewOffer-DNCQ3A6R.js +0 -2
  191. package/dist/SingleShotApp-SMCAIKCE.js +0 -2
  192. package/dist/TestMdRunView-FMKZJ3A3.js +0 -2
  193. package/dist/bind-AACBTSAA.js +0 -12
  194. package/dist/bootstrap-CNOZ5VRB.js +0 -2
  195. package/dist/bridge-T4HL4TG7.js +0 -2
  196. package/dist/chat-committer-4BQBOKI4.js +0 -2
  197. package/dist/chat-controller-NNTMKEPG.js +0 -2
  198. package/dist/chunk-2SREGETM.js +0 -4
  199. package/dist/chunk-3STZLM5J.js +0 -4
  200. package/dist/chunk-5YPBPZUR.js +0 -2
  201. package/dist/chunk-BQHKBOSF.js +0 -11
  202. package/dist/chunk-DQ54MH7F.js +0 -13
  203. package/dist/chunk-EV3EHXEI.js +0 -4
  204. package/dist/chunk-F7WKDMX7.js +0 -47
  205. package/dist/chunk-FPFOW6BS.js +0 -2
  206. package/dist/chunk-GVIPTX6T.js +0 -6
  207. package/dist/chunk-GW5DWAXY.js +0 -2
  208. package/dist/chunk-HJERKSBK.js +0 -349
  209. package/dist/chunk-IQDWBTRJ.js +0 -3
  210. package/dist/chunk-KRXSXQBU.js +0 -12
  211. package/dist/chunk-NAC7SFBE.js +0 -5
  212. package/dist/chunk-NRC2G4Y5.js +0 -5
  213. package/dist/chunk-O56PUUNL.js +0 -9
  214. package/dist/chunk-QM4S2APK.js +0 -2
  215. package/dist/chunk-SE6WNCYU.js +0 -4
  216. package/dist/chunk-SWESH2J7.js +0 -10
  217. package/dist/chunk-T63R6QT4.js +0 -4
  218. package/dist/chunk-UPPEOQJQ.js +0 -3
  219. package/dist/chunk-UX2B7L6K.js +0 -2
  220. package/dist/chunk-VOHQA2SP.js +0 -2
  221. package/dist/chunk-W5DOU2DV.js +0 -2
  222. package/dist/chunk-W6VD2XFO.js +0 -19
  223. package/dist/chunk-WWNSD6FA.js +0 -6
  224. package/dist/chunk-ZLCZDAEX.js +0 -6
  225. package/dist/committer-2EJPVVCQ.js +0 -2
  226. package/dist/descriptor-KXDJ4XYD.js +0 -2
  227. package/dist/design-committer-BQUWD6AC.js +0 -2
  228. package/dist/docx-convert-ZBVQO2LG.js +0 -2
  229. package/dist/evolve-cmd-PZCPXDMR.js +0 -2
  230. package/dist/explain-UE4IACQH.js +0 -2
  231. package/dist/extract-bind-BFY7IRL4.js +0 -10
  232. package/dist/extract-cmd-U3MGK2LP.js +0 -6
  233. package/dist/feeder-XGTFV7TZ.js +0 -2
  234. package/dist/ingest-AL6CABJT.js +0 -2
  235. package/dist/ingest-cmd-O6OWWZT4.js +0 -2
  236. package/dist/locks-cmd-QAULI5LV.js +0 -2
  237. package/dist/logical-ids-4G4FAHNJ.js +0 -2
  238. package/dist/login-flow-CV76ENHV.js +0 -2
  239. package/dist/maintenance-cmd-ZRB4NTGG.js +0 -2
  240. package/dist/pdf-convert-S7VYE6AV.js +0 -2
  241. package/dist/phase-seed-52LRE3LH.js +0 -2
  242. package/dist/pipeline-LM5JAK7F.js +0 -2
  243. package/dist/readmodel-X7L7W2BA.js +0 -2
  244. package/dist/reconcile-cmd-DGCSDML6.js +0 -2
  245. package/dist/records-5SVUXJBW.js +0 -2
  246. package/dist/revert-DXXYXJGN.js +0 -2
  247. package/dist/review-cmd-2QF5HTI7.js +0 -4
  248. package/dist/run-52UIBPXD.js +0 -2
  249. package/dist/run-VRVH4VO3.js +0 -2
  250. package/dist/sessions-BLXZVK5U.js +0 -2
  251. package/dist/spawner-AH5FTUYU.js +0 -2
  252. package/dist/structured-answers-QHFGZPSS.js +0 -5
  253. package/dist/tcg-generate-WKCBBKI5.js +0 -2
  254. package/dist/testmd-actions-RPYG6TJG.js +0 -2
  255. package/dist/token-refresh-NIDUOTRM.js +0 -2
  256. package/dist/verdicts-TJH3O5UW.js +0 -2
  257. package/dist/walk-session-HXW4OSA2.js +0 -2
  258. package/dist/with-telemetry-PNP6CAVM.js +0 -2
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as f}from"./chunk-6HEGD6H2.js";import{a as h}from"./chunk-FPFOW6BS.js";import{a as m}from"./chunk-JRMDGLLT.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:p,log:t}=c,e=null,u=null;if(l&&p)e={username:l,access_key:p},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,g=new h(v.controllerBaseUrl,b,y,t),s=await g.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:g,resolvedCreds:s}}export{o as a,k as b};
2
+ import{a as h}from"./chunk-OR6MCL6Z.js";import{a as f}from"./chunk-4LTXE3IX.js";import{a as m}from"./chunk-O75ZHGJG.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:p,log:t}=c,e=null,u=null;if(l&&p)e={username:l,access_key:p},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,g=new h(v.controllerBaseUrl,b,y,t),s=await g.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:g,resolvedCreds:s}}export{o as a,k as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as f}from"./chunk-5YPBPZUR.js";function k(s,n){let t=null;for(let[i,e]of s.designOf)i!==n&&s.tipOf(i)!==n||(t==null||e.seq>t.seq)&&(t={...e,designed_at_cid:i});return t}function $(s,n){let t=new Map;for(let[d,o]of s.superseded)o!=null&&t.set(o,d);let i=[n],e=n;for(;t.has(e);)e=t.get(e),i.unshift(e);return i}function w(s,n,t){let i=s.resolve(n);if(!i){let r=[...s.names.keys()].filter(m=>m.startsWith("uc-")).sort().slice(0,6);return{ok:!1,code:2,message:`unknown use-case '${n}' \u2014 no live node by that logical id or cid${r.length?` (known: ${r.join(", ")})`:""}`}}let e=i.tip;if(s.superseded.has(e)&&s.superseded.get(e)===null)return{ok:!1,code:2,message:`use-case '${n}' was removed (tombstoned) \u2014 nothing to design`};let d=s.nodeLabel.get(e);if(d!==f.USECASE)return{ok:!1,code:2,message:`'${n}' is a ${d??"missing node"}, not a use-case \u2014 design runs per use-case`};let o=s.nameOf.get(e)??s.nameOf.get(i.cid)??e.slice(0,19);if(s.trust.get(e)==="archived"){let r=s.archivedReason.get(e);return{ok:!1,code:2,message:`use-case '${o}' is archived${r?` (${r})`:""} \u2014 design runs only over live use-cases`}}let c=k(s,e);if(c==null||t)return{ok:!0};let l=$(s,e),a=l.length;if(c.designed_at_cid===e)return{ok:!1,code:2,message:`'${o}' is already designed @ v${a} \u2014 current; use --force to redesign`,wall:{kind:"already-designed",display:o,currentV:a}};let u=l.indexOf(c.designed_at_cid),g=u>=0?`v${u+1}`:"an earlier version";return{ok:!1,code:2,message:`'${o}' was designed @ ${g} \u2014 the use-case is now @ v${a} (STALE); use --force to redesign`,wall:{kind:"designed-stale",display:o,currentV:a,designedV:g}}}export{k as a,w as b};
2
+ import{d as f}from"./chunk-WXHQYYD5.js";function k(s,n){let t=null;for(let[i,e]of s.designOf)i!==n&&s.tipOf(i)!==n||(t==null||e.seq>t.seq)&&(t={...e,designed_at_cid:i});return t}function $(s,n){let t=new Map;for(let[d,o]of s.superseded)o!=null&&t.set(o,d);let i=[n],e=n;for(;t.has(e);)e=t.get(e),i.unshift(e);return i}function w(s,n,t){let i=s.resolve(n);if(!i){let r=[...s.names.keys()].filter(m=>m.startsWith("uc-")).sort().slice(0,6);return{ok:!1,code:2,message:`unknown use-case '${n}' \u2014 no live node by that logical id or cid${r.length?` (known: ${r.join(", ")})`:""}`}}let e=i.tip;if(s.superseded.has(e)&&s.superseded.get(e)===null)return{ok:!1,code:2,message:`use-case '${n}' was removed (tombstoned) \u2014 nothing to design`};let d=s.nodeLabel.get(e);if(d!==f.USECASE)return{ok:!1,code:2,message:`'${n}' is a ${d??"missing node"}, not a use-case \u2014 design runs per use-case`};let o=s.nameOf.get(e)??s.nameOf.get(i.cid)??e.slice(0,19);if(s.trust.get(e)==="archived"){let r=s.archivedReason.get(e);return{ok:!1,code:2,message:`use-case '${o}' is archived${r?` (${r})`:""} \u2014 design runs only over live use-cases`}}let c=k(s,e);if(c==null||t)return{ok:!0};let l=$(s,e),a=l.length;if(c.designed_at_cid===e)return{ok:!1,code:2,message:`'${o}' is already designed @ v${a} \u2014 current; use --force to redesign`,wall:{kind:"already-designed",display:o,currentV:a}};let u=l.indexOf(c.designed_at_cid),g=u>=0?`v${u+1}`:"an earlier version";return{ok:!1,code:2,message:`'${o}' was designed @ ${g} \u2014 the use-case is now @ v${a} (STALE); use --force to redesign`,wall:{kind:"designed-stale",display:o,currentV:a,designedV:g}}}export{k as a,w as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as p}from"./chunk-2YEHV2CX.js";import{d as o}from"./chunk-5EOX4MEY.js";import s from"fs";import a from"path";var g=new Set(["org_id","user_id","plan","user_type"]);function m(e){let t={machine_id:p(),env:e};try{let i=JSON.parse(s.readFileSync(o(e),"utf8"));for(let[n,r]of Object.entries(i))g.has(n)&&typeof r=="string"&&r.length>0&&r.length<=128&&(t[n]=r)}catch{}return t}async function y(e,t){if(!t)return;let i={};if(t.org_id!==void 0&&t.org_id!==null&&(i.org_id=String(t.org_id)),t.user_id!==void 0&&t.user_id!==null&&(i.user_id=String(t.user_id)),typeof t.plan=="string"&&t.plan&&(i.plan=t.plan),typeof t.user_type=="string"&&t.user_type&&(i.user_type=t.user_type),Object.keys(i).length===0)return;let n=o(e);await s.promises.mkdir(a.dirname(n),{recursive:!0});let r=`${n}.tmp-${process.pid}`;await s.promises.writeFile(r,JSON.stringify(i),{mode:384}),await s.promises.rename(r,n)}export{m as a,y as b};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as re,d as ie,e as se}from"./chunk-VGFTNLQQ.js";import{a as ne}from"./chunk-L2TV4G56.js";import{b as G,d as te}from"./chunk-5KFS3GAZ.js";import{d as ee}from"./chunk-NVGBE2DR.js";var ce=new Set(["approve","edit","reject"]);function le(s,t){return`chatop:${t}:${s.target??"new"}:${s.op}:${s.seq}`}function de(s,t,b,k){let c=le(s,t),h=s.payload;switch(s.op){case"approve":return{kind:"approve",target:s.target,expectedCid:s.expected_cid,eventId:c};case"edit":{let{reason:o,...y}=h;return{kind:"edit",target:s.target,expectedCid:s.expected_cid,edit:y,reason:o,eventId:c}}case"enhance":return{kind:"enhance",target:s.target,expectedCid:s.expected_cid,edges:h.edges??[],eventId:c};case"reject":return{kind:"reject",target:s.target,expectedCid:s.expected_cid,reason:h.reason??"",redirectTo:h.redirect_to,eventId:c};case"add":{let o=h.proposal_item??{},y=String(o.label??"");if(!b.mint_gate.includes(y))throw new Error(`GATED_LABEL: cannot mint "${y}" (gate: ${b.mint_gate.join(", ")})`);let l=o.cite??{},p=o.conv_source_id??k;if(!p||typeof l.turn!="number"||!l.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");let _=o.content,w=_&&typeof _=="object"&&!Array.isArray(_)&&Object.keys(_).length>0?_:null,v=new Set(["label","cite","conv_source_id","content","rationale","edges"]),C=w??Object.fromEntries(Object.entries(o).filter(([R])=>!v.has(R)));return{kind:"add",label:y,content:C,cite:{turn:l.turn,quote:l.quote},convSourceId:p,rationale:o.rationale,eventId:c}}}}function oe(s,t,b={}){let k=b.turn??0,c=[],h=[];for(let l of s)(l.op==="add"||l.op==="enhance")&&h.push(l);let o=new Map;for(let l of s){if(!ce.has(l.op)||!l.target)continue;let p=o.get(l.target)??[];p.push(l),o.set(l.target,p)}for(let[l,p]of o){let _=Math.max(...p.map(v=>v.seq)),w=p.filter(v=>v.seq===_);if(w.length>1){c.push({target:l,seq:_,kinds:w.map(v=>v.op)});continue}h.push(w[0])}return{chatOps:h.sort((l,p)=>l.seq-p.seq).map(l=>de(l,k,t,b.convSourceId)),ambiguous:c}}function ge(s){let t=[];return s.questions.forEach((b,k)=>{if(s.resolution[k])return;let c=b.recommended_index!=null?b.options[b.recommended_index]?.label:void 0;c!=null&&t.push(b.risk==="high"?`${c} \u203C`:c)}),t.length>3?`${t.slice(0,3).join(" \xB7 ")} \xB7 +${t.length-3} more`:t.join(" \xB7 ")}function ae(s){let t=s.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function pe(s){return s.use_cases??[]}var me={acs:"acceptance criteria",scenarios:"scenarios",exercises:"exercises",tests:"tests",gaps:"gaps"};function fe(s){let t=[],b=[],k=(o,y)=>{y.length!==0&&(b.push(o),t.push(...y))},c=o=>typeof o=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(o)?o:null,h=o=>{let y=c(o.automates)??"1 scenario",l=o.verifies??[],p=l.map(c).filter(v=>v!==null).slice(0,2),_=l.length-p.length,w=p.length?`${p.join(" ")}${_>0?` +${_}`:""}`:`${l.length} ACs`;return`covers ${y} \xB7 verifies ${w}`};return k("acs",(s.acs??[]).map(o=>({temp_ref:o.temp_ref,title:o.text,kind:"ac",badge:String(o.kind),extra:{...o.expected_answer?{expects:`${String(o.expected_answer.operator??"")} \xB7 ${String(o.expected_answer.operand??"")}`}:{},"scoped to":o.scoped_to??"(use-case)"}}))),k("scenarios",(s.scenarios??[]).map(o=>({temp_ref:o.temp_ref,title:o.title,kind:"scenario",badge:o.case_type,why:o.intent,depends_on_hint:o.depends_on??[],extra:{technique:o.technique_notes}}))),k("exercises",(s.exercises??[]).map(o=>({temp_ref:c(o.scenario)??"wiring",title:`${c(o.scenario)??"scenario"} exercises ${c(o.ac)??"1 AC"}`,kind:"exercise",badge:"wires",why:o.rationale}))),k("tests",(s.tests??[]).map(o=>({temp_ref:o.temp_ref,title:o.title,kind:"test",why:h(o),depends_on_hint:o.reuses??[],extra:{automates:String(o.automates??"?"),verifies:(o.verifies??[]).join(", "),check:o.check?`${String(o.check.kind)} vs ${String(o.check.verified_against)}`:"?"}}))),k("gaps",(s.gaps??[]).map(o=>({temp_ref:o.temp_ref??o.ref??"?",title:String(o.question?.header??o.kind),kind:"gap",badge:o.kind,why:o.risk_rationale}))),{items:t,heading:b.join(" + ")||"design"}}function ve(s={}){let t={turns:[],thinking:re(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null,checkpoint:!1},b=e=>{let n=[],r=e.minted.map(a=>a.slug).filter(Boolean);r.length&&n.push(`added ${r.join(", ")}`);let i=e.applied.length-e.minted.length;return i>0&&n.push(`${i} change${i===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},k=[];s.onRender&&k.push(s.onRender);let c=0,h=0,o=null,y=null,l=null,p=[],_=0,w=e=>{if(!(!l||!s.contextDir||!e.trim()))try{let n=s.refreshGraph?.()??s.graph;if(!n)return;te({contextDir:s.contextDir,graph:n,sourceId:l,text:e,by:s.by??{kind:"human",id:"owner"}})}catch{}},v=e=>{if(!l||!s.contextDir)return;let n=s.refreshGraph?.()??s.graph,r=n?.heads.get(l),i=n?.convChains.get(l);if(!n||typeof r!="string"||!i)return;let a=n.getNode(r)?.content?.blob,u=typeof a=="string"?ee(s.contextDir,a)?.toString("utf8")??"":"";if(u)for(let f of e){if(f.kind!=="add"||f.convSourceId!==l)continue;let Q=G(u,f.cite.turn);if(!(Q!==null&&Q.includes(f.cite.quote)))for(let $=i.turns;$>=1;$--){let W=G(u,$);if(W!==null&&W.includes(f.cite.quote)){f.cite={...f.cite,turn:$};break}}}},C=null,R=new Map,U=e=>JSON.stringify([e.id,e.text,e.options.map(n=>n.label)]),T=null,z=new Map,B=new Map,H=null,m=()=>{I&&(clearTimeout(I),I=null);for(let e of k)e()},I=null,K=()=>{I||(I=setTimeout(()=>{I=null;for(let e of k)e()},80))},d=e=>{t.ledger.push(e)},O=null,P=!1,N=(e=!1)=>{O?d({kind:"agent",text:O}):e&&P&&d({kind:"note",text:'chat to refine ("looks good" approves; /done finishes)'}),O=null,P=!1},ue=()=>{O=null,P=!1},q=null,F=e=>{if(q){if(e)for(let n of q.items){let r=e.get(n.temp_ref);r&&(n.logical_id=r)}d({kind:"turn",...q}),q=null}},j=()=>{F(),t.activeTurn&&(t.activeTurn=null)},J=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),L=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(i=>i===null);return}let n=e.questions.map((i,a)=>{let u=e.resolution[a];return u.form==="deferred"?{id:i.id,selected_index:null,free_text:null}:{id:i.id,selected_index:u.selected_index,free_text:u.free_text}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now());let r=C;C=null,r?.(n)},A=(e,n)=>{let r=t.pending,i=r.questions[e],a=r.resolution[e];r.resolution[e]=n;let u=ae(i);a?d({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:u,choice:J(i,n),prev:a.choice}}):n.form==="deferred"?d({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:u}}):d({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:u,choice:J(i,n)}})},V=()=>{let e=t.pending;e&&(e.questions.forEach((n,r)=>{e.resolution[r]||A(r,{form:"deferred",selected_index:null,free_text:null,choice:""})}),L())},E=new Map,Y=e=>{E.clear();let n={high:0,med:1,low:2};return e=e.map((r,i)=>({q:r,i})).sort((r,i)=>(n[r.q.risk]??3)-(n[i.q.risk]??3)||r.i-i.i).map(({q:r})=>r),{questions:e,cursor:0,resolution:e.map(()=>null)}};return{state:t,explainLines(e){if(!s.explain||!s.graph||s.contextDir===void 0)return null;let n=s.explain(s.contextDir,s.graph,e);return n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(r=>` [${r.kind}] ${r.rationale??r.detail}`)]:null},explainRef(e){if(!s.explain||!s.graph||s.contextDir===void 0){d({kind:"note",text:"explain isn't available here"}),m();return}let n=s.explain(s.contextDir,s.graph,e),r=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(i=>` [${i.kind}] ${i.rationale??i.detail}`)].join(`
2
+ import{c as re,d as ie,e as se}from"./chunk-VGFTNLQQ.js";import{a as ne}from"./chunk-L2TV4G56.js";import{b as G,d as te}from"./chunk-6KPPGMO2.js";import{d as ee}from"./chunk-NVGBE2DR.js";var ce=new Set(["approve","edit","reject"]);function le(s,t){return`chatop:${t}:${s.target??"new"}:${s.op}:${s.seq}`}function de(s,t,b,k){let c=le(s,t),h=s.payload;switch(s.op){case"approve":return{kind:"approve",target:s.target,expectedCid:s.expected_cid,eventId:c};case"edit":{let{reason:o,...y}=h;return{kind:"edit",target:s.target,expectedCid:s.expected_cid,edit:y,reason:o,eventId:c}}case"enhance":return{kind:"enhance",target:s.target,expectedCid:s.expected_cid,edges:h.edges??[],eventId:c};case"reject":return{kind:"reject",target:s.target,expectedCid:s.expected_cid,reason:h.reason??"",redirectTo:h.redirect_to,eventId:c};case"add":{let o=h.proposal_item??{},y=String(o.label??"");if(!b.mint_gate.includes(y))throw new Error(`GATED_LABEL: cannot mint "${y}" (gate: ${b.mint_gate.join(", ")})`);let l=o.cite??{},p=o.conv_source_id??k;if(!p||typeof l.turn!="number"||!l.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");let _=o.content,w=_&&typeof _=="object"&&!Array.isArray(_)&&Object.keys(_).length>0?_:null,v=new Set(["label","cite","conv_source_id","content","rationale","edges"]),C=w??Object.fromEntries(Object.entries(o).filter(([R])=>!v.has(R)));return{kind:"add",label:y,content:C,cite:{turn:l.turn,quote:l.quote},convSourceId:p,rationale:o.rationale,eventId:c}}}}function oe(s,t,b={}){let k=b.turn??0,c=[],h=[];for(let l of s)(l.op==="add"||l.op==="enhance")&&h.push(l);let o=new Map;for(let l of s){if(!ce.has(l.op)||!l.target)continue;let p=o.get(l.target)??[];p.push(l),o.set(l.target,p)}for(let[l,p]of o){let _=Math.max(...p.map(v=>v.seq)),w=p.filter(v=>v.seq===_);if(w.length>1){c.push({target:l,seq:_,kinds:w.map(v=>v.op)});continue}h.push(w[0])}return{chatOps:h.sort((l,p)=>l.seq-p.seq).map(l=>de(l,k,t,b.convSourceId)),ambiguous:c}}function ge(s){let t=[];return s.questions.forEach((b,k)=>{if(s.resolution[k])return;let c=b.recommended_index!=null?b.options[b.recommended_index]?.label:void 0;c!=null&&t.push(b.risk==="high"?`${c} \u203C`:c)}),t.length>3?`${t.slice(0,3).join(" \xB7 ")} \xB7 +${t.length-3} more`:t.join(" \xB7 ")}function ae(s){let t=s.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function pe(s){return s.use_cases??[]}var me={acs:"acceptance criteria",scenarios:"scenarios",exercises:"exercises",tests:"tests",gaps:"gaps"};function fe(s){let t=[],b=[],k=(o,y)=>{y.length!==0&&(b.push(o),t.push(...y))},c=o=>typeof o=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(o)?o:null,h=o=>{let y=c(o.automates)??"1 scenario",l=o.verifies??[],p=l.map(c).filter(v=>v!==null).slice(0,2),_=l.length-p.length,w=p.length?`${p.join(" ")}${_>0?` +${_}`:""}`:`${l.length} ACs`;return`covers ${y} \xB7 verifies ${w}`};return k("acs",(s.acs??[]).map(o=>({temp_ref:o.temp_ref,title:o.text,kind:"ac",badge:String(o.kind),extra:{...o.expected_answer?{expects:`${String(o.expected_answer.operator??"")} \xB7 ${String(o.expected_answer.operand??"")}`}:{},"scoped to":o.scoped_to??"(use-case)"}}))),k("scenarios",(s.scenarios??[]).map(o=>({temp_ref:o.temp_ref,title:o.title,kind:"scenario",badge:o.case_type,why:o.intent,depends_on_hint:o.depends_on??[],extra:{technique:o.technique_notes}}))),k("exercises",(s.exercises??[]).map(o=>({temp_ref:c(o.scenario)??"wiring",title:`${c(o.scenario)??"scenario"} exercises ${c(o.ac)??"1 AC"}`,kind:"exercise",badge:"wires",why:o.rationale}))),k("tests",(s.tests??[]).map(o=>({temp_ref:o.temp_ref,title:o.title,kind:"test",why:h(o),depends_on_hint:o.reuses??[],extra:{automates:String(o.automates??"?"),verifies:(o.verifies??[]).join(", "),check:o.check?`${String(o.check.kind)} vs ${String(o.check.verified_against)}`:"?"}}))),k("gaps",(s.gaps??[]).map(o=>({temp_ref:o.temp_ref??o.ref??"?",title:String(o.question?.header??o.kind),kind:"gap",badge:o.kind,why:o.risk_rationale}))),{items:t,heading:b.join(" + ")||"design"}}function ve(s={}){let t={turns:[],thinking:re(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null,checkpoint:!1},b=e=>{let n=[],r=e.minted.map(a=>a.slug).filter(Boolean);r.length&&n.push(`added ${r.join(", ")}`);let i=e.applied.length-e.minted.length;return i>0&&n.push(`${i} change${i===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},k=[];s.onRender&&k.push(s.onRender);let c=0,h=0,o=null,y=null,l=null,p=[],_=0,w=e=>{if(!(!l||!s.contextDir||!e.trim()))try{let n=s.refreshGraph?.()??s.graph;if(!n)return;te({contextDir:s.contextDir,graph:n,sourceId:l,text:e,by:s.by??{kind:"human",id:"owner"}})}catch{}},v=e=>{if(!l||!s.contextDir)return;let n=s.refreshGraph?.()??s.graph,r=n?.heads.get(l),i=n?.convChains.get(l);if(!n||typeof r!="string"||!i)return;let a=n.getNode(r)?.content?.blob,u=typeof a=="string"?ee(s.contextDir,a)?.toString("utf8")??"":"";if(u)for(let f of e){if(f.kind!=="add"||f.convSourceId!==l)continue;let Q=G(u,f.cite.turn);if(!(Q!==null&&Q.includes(f.cite.quote)))for(let $=i.turns;$>=1;$--){let W=G(u,$);if(W!==null&&W.includes(f.cite.quote)){f.cite={...f.cite,turn:$};break}}}},C=null,R=new Map,U=e=>JSON.stringify([e.id,e.text,e.options.map(n=>n.label)]),T=null,z=new Map,B=new Map,H=null,m=()=>{I&&(clearTimeout(I),I=null);for(let e of k)e()},I=null,K=()=>{I||(I=setTimeout(()=>{I=null;for(let e of k)e()},80))},d=e=>{t.ledger.push(e)},O=null,P=!1,N=(e=!1)=>{O?d({kind:"agent",text:O}):e&&P&&d({kind:"note",text:'chat to refine ("looks good" approves; /done finishes)'}),O=null,P=!1},ue=()=>{O=null,P=!1},q=null,F=e=>{if(q){if(e)for(let n of q.items){let r=e.get(n.temp_ref);r&&(n.logical_id=r)}d({kind:"turn",...q}),q=null}},j=()=>{F(),t.activeTurn&&(t.activeTurn=null)},J=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),L=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(i=>i===null);return}let n=e.questions.map((i,a)=>{let u=e.resolution[a];return u.form==="deferred"?{id:i.id,selected_index:null,free_text:null}:{id:i.id,selected_index:u.selected_index,free_text:u.free_text}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now());let r=C;C=null,r?.(n)},A=(e,n)=>{let r=t.pending,i=r.questions[e],a=r.resolution[e];r.resolution[e]=n;let u=ae(i);a?d({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:u,choice:J(i,n),prev:a.choice}}):n.form==="deferred"?d({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:u}}):d({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:u,choice:J(i,n)}})},V=()=>{let e=t.pending;e&&(e.questions.forEach((n,r)=>{e.resolution[r]||A(r,{form:"deferred",selected_index:null,free_text:null,choice:""})}),L())},E=new Map,Y=e=>{E.clear();let n={high:0,med:1,low:2};return e=e.map((r,i)=>({q:r,i})).sort((r,i)=>(n[r.q.risk]??3)-(n[i.q.risk]??3)||r.i-i.i).map(({q:r})=>r),{questions:e,cursor:0,resolution:e.map(()=>null)}};return{state:t,explainLines(e){if(!s.explain||!s.graph||s.contextDir===void 0)return null;let n=s.explain(s.contextDir,s.graph,e);return n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(r=>` [${r.kind}] ${r.rationale??r.detail}`)]:null},explainRef(e){if(!s.explain||!s.graph||s.contextDir===void 0){d({kind:"note",text:"explain isn't available here"}),m();return}let n=s.explain(s.contextDir,s.graph,e),r=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(i=>` [${i.kind}] ${i.rationale??i.detail}`)].join(`
3
3
  `):`unknown ref: ${e}`;d({kind:"note",text:r}),m()},subscribe(e){return k.push(e),()=>{let n=k.indexOf(e);n>=0&&k.splice(n,1)}},submit(e){if(t.confirm&&(t.confirm=null),!t.pending){if(!o){t.turns.push({role:"user",text:e}),d({kind:"user",text:e}),t.notice="the agent isn't running \u2014 nothing sent",m();return}for(t.notice=void 0,t.checkpoint=!1,N(),t.turns.push({role:"user",text:e}),d({kind:"user",text:e}),w(e),t.status="streaming",t.busySince=Date.now(),t.error=void 0,h+=1;p.length>0;)h+=1,o({type:"user_message",message_id:`u${h}-receipt`,text:p.shift()});o({type:"user_message",message_id:`u${h}`,text:e}),m()}},attachSender(e){let n=o;return o=e,()=>{o=n}},attachOnCommitted(e){y=e},attachConversationSource(e){l=e},attachSession(e){s.session=e},holdReceipt(e){p.push(e),t.checkpoint=!0,m()},drainHeldReceipts(){return p.splice(0,p.length)},peekHeldReceipts(){return[...p]},submitAnswer(e,n){let r=t.pending,i=r?.questions[e],a=i?.options[n]?.label;!r||!i||a==null||(A(e,{form:"answered",selected_index:n,free_text:null,choice:a}),L(),m())},submitFreeText(e,n){let r=t.pending,i=r?.questions[e],a=n.trim();!r||!i||!a||(A(e,{form:"answered",selected_index:null,free_text:a,choice:a}),L(),m())},deferBatch(e){let n=t.pending;if(!n||!C)return;n.questions.forEach((i,a)=>{let u=n.resolution[a];u&&u.form==="answered"&&R.set(U(i),u)}),t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now()),d({kind:"note",text:`questions set aside \u2014 source ${e.source_id} landed; the agent reads it next`});let r=C;C=null,r({deferred:!0,ingested:e}),m()},submitAnswerWithText(e,n,r){let i=t.pending,a=i?.questions[e],u=a?.options[n]?.label;if(!i||!a||u==null)return;let f=r.trim();A(e,{form:"answered",selected_index:n,free_text:f||null,choice:f?`${u} \u2014 ${f}`:u}),L(),m()},toggleOption(e,n){let r=t.pending?.questions[e];if(!r||r.options[n]==null)return;let i=E.get(e)??new Set;i.has(n)?i.delete(n):i.add(n),E.set(e,i),m()},multiSelection(e){return[...E.get(e)??[]].sort((n,r)=>n-r)},confirmMulti(e){let n=t.pending,r=n?.questions[e];if(!n||!r)return;let i=[...E.get(e)??[]].sort((u,f)=>u-f).map(u=>r.options[u]?.label).filter(u=>u!=null);if(i.length===0)return;E.delete(e);let a=i.join(", ");A(e,{form:"answered",selected_index:null,free_text:a,choice:a}),L(),m()},goWithRecommendations(){let e=t.pending;if(!e)return{picks:""};let n=ge(e),r=null;return e.questions.forEach((i,a)=>{if(e.resolution[a])return;let u=i.recommended_index,f=u!=null?i.options[u]?.label:void 0;if(f==null){r===null&&(r=a);return}A(a,{form:"assumed",selected_index:u,free_text:null,choice:f})}),r!==null?(e.cursor=r,m(),{blocked:r}):(L(),m(),{picks:n})},reopenQuestion(){let e=t.pending;if(!e)return;let n=e.cursor<0?e.questions.length:e.cursor;for(let r=n-1;r>=0;r--)if(e.resolution[r]){e.cursor=r,m();return}},continueParked(){if(o){for(t.checkpoint=!1,d({kind:"continued"});p.length>0;)h+=1,o({type:"user_message",message_id:`u${h}-receipt`,text:p.shift()});h+=1,o({type:"user_message",message_id:`u${h}`,text:"continue"}),t.status="streaming",t.busySince=Date.now(),m()}},note(e){d({kind:"note",text:e}),m()},aliasOf(e){return B.get(e)},registerAliases(e){for(let n of e)B.set(n.ref,n.cid);F(new Map(e.filter(n=>n.id).map(n=>[n.ref,n.id]))),m()},setWorking(e){if(e!=null){if(t.status!=="idle"&&t.status!=="working")return;t.status==="idle"&&(t.busySince=Date.now()),t.status="working",t.workingLabel=e}else{if(t.status!=="working")return;t.status="idle",t.workingLabel=void 0,t.busySince=void 0}m()},ledger(e){e.kind==="commit"&&F(),(e.kind==="pause"||e.kind==="error"||e.kind==="summary")&&(j(),N()),(e.kind==="summary"||e.kind==="pause")&&(t.stream=null),d(e),e.kind==="commit"&&(e.ok?N(!0):ue()),m()},senderAlive(){return o!=null},completeSession(){V(),o?.({type:"session_complete"}),t.status="idle",t.busySince=void 0,m()},requestPause(){V(),t.status="pausing",t.busySince=void 0;let e=o;Promise.resolve().then(()=>e?.({type:"pause"})),m()},ask(e){t.pending=Y(e),z=new Map(e.map((r,i)=>[r.id,i+1])),t.status="awaiting-input",t.busySince=void 0;let n=new Promise(r=>{C=r});if(R.size>0){let r=0;e.forEach((i,a)=>{let u=U(i),f=R.get(u);f&&(R.delete(u),A(a,{...f}),r+=1)}),r>0&&d({kind:"note",text:`your earlier answer${r>1?"s are":" is"} pre-filled \u2014 press enter to send, or pick a different answer`})}return m(),n},attachIngest(e){let n=T;return T=e,()=>{T===e&&(T=n)}},canIngest(){return T!==null},async ingestAttach(e){let n=T,r=e.trim();if(!n||!r)return;let i;try{i=await n(r)}catch(a){i={ok:!1,error:a instanceof Error?a.message:String(a)}}i.ok||(d({kind:"note",text:i.error??"the source could not be ingested"}),m())},noteCoercion(e,n){d({kind:"answer",receipt:{form:"assumed",qNum:z.get(e.id)??0,stub:ae(e),choice:n,note:"your typed answer couldn't be used here"}}),m()},onAgentEvent(e){switch(e.type){case"reasoning_delta":case"reasoning_done":case"tool_activity":case"decision_activity":{let n=t.thinking;if(t.thinking=se(n,e),t.thinking!==n){if(e.type==="reasoning_done"&&e.present)d({kind:"thinking",tookMs:e.took_ms});else if(e.type==="tool_activity"&&e.status!=="started")d({kind:"tool",name:e.name,status:e.status==="done"?"ok":e.status,detail:e.detail});else if(e.type==="decision_activity"){let r=`\xB7 ${ie(e)}`,i=t.ledger.length-1;for(;i>=0&&t.ledger[i].kind==="tool";)i--;let a=t.ledger[i];a&&a.kind==="note"&&a.text===r||d({kind:"note",text:r})}}if(e.type==="reasoning_delta"){K();return}break}case"usage":t.credits={turn:e.credits,total:e.total_credits};break;case"text_delta":{let n=H;if(n&&(e.turn_id<n.turn_id||e.turn_id===n.turn_id&&e.attempt<n.attempt))return;(!n||n.turn_id!==e.turn_id||n.attempt!==e.attempt)&&(H={turn_id:e.turn_id,attempt:e.attempt},t.stream={text:""}),t.stream={text:(t.stream?.text??"")+e.text},K();return}case"progress":break;case"proposal":{c+=1,j(),t.stream=null,t.busySince&&(d({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let n=pe(e.proposal),r=s.dedupFlags?.(e.proposal);if(r)for(let i of n){let a=r.get(i.temp_ref);a&&(i.matches_existing=a)}t.turns.push({role:"agent",turnIndex:c,items:n,text:e.narrative}),O=e.narrative??null,P=!0,t.activeTurn={turnIndex:c,heading:"use-cases",items:n},q={turnIndex:c,heading:"use-cases",items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"design":{c+=1,j(),t.stream=null,t.busySince&&(d({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let{items:n,heading:r}=fe(e.design),i=e.design.phase==="wiring"?"acceptance criteria + exercises":r.split(" + ").map(a=>me[a]??a).join(" + ");d({kind:"banner",text:`designing: ${i}`}),t.turns.push({role:"agent",turnIndex:c,items:n,itemsHeading:r,text:e.narrative}),O=e.narrative??null,P=!0,t.activeTurn={turnIndex:c,heading:r,items:n},q={turnIndex:c,heading:r,items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"ask_user":t.pending=Y(e.questions),t.status="awaiting-input",t.busySince=void 0;break;case"chat_ops":{c+=1,j(),t.stream=null,t.status==="streaming"&&(t.status="idle",t.busySince=void 0);let n=e.chat_ops??e,r=Array.isArray(n.ops)?n.ops:[],i=n.text??e.text??"",a=s.refreshGraph?.()??s.graph,u=g=>B.get(g)??g,f=r.map(g=>{if(!g.target)return g;let x=u(g.target),S=g.expected_cid;if(S==null&&a){let Z=a.resolve(x);Z&&(S=a.tipOf(Z.cid))}let D=g.payload?.redirect_to,M=D&&u(D);return x===g.target&&S===g.expected_cid&&M===D?g:{...g,target:x,expected_cid:S,...M!==D?{payload:{...g.payload,redirect_to:M}}:{}}}),Q;try{if(!Array.isArray(n.ops))throw new Error("the agent sent an unreadable change set (no ops array) \u2014 say it again in different words");Q=oe(f,s.descriptor??{mint_gate:[]},{turn:c,...l?{convSourceId:l}:{}})}catch(g){t.error=g instanceof Error?g.message:String(g),t.turns.push({role:"agent",turnIndex:c,text:i,narration:t.error}),i&&d({kind:"agent",text:i}),d({kind:"error",title:t.error,detail:[]});break}let{chatOps:$,ambiguous:W}=Q;if(W.length>0){let g=W[0];t.confirm={kind:"ambiguity-confirm",prompt:`did you mean edit or ${g.kinds.filter(x=>x!=="edit").join("/")} on ${g.target}?`},t.turns.push({role:"agent",turnIndex:c,text:i}),i&&d({kind:"agent",text:i});break}if(v($),s.commitChatTurn&&$.length>0){let g=s.commitChatTurn({contextDir:s.contextDir??"",graph:s.refreshGraph?.()??s.graph,ops:$,by:s.by??{kind:"human",id:"owner"},...s.descriptor?.mint_gate?{mintable:s.descriptor.mint_gate}:{},...s.session?.state?.sid?{sid:s.session.state.sid}:{}});if(g.errors)t.error=g.errors.map(x=>x.detail).join("; "),t.turns.push({role:"agent",turnIndex:c,text:i}),d({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:g.errors.map(x=>`${x.code}: ${x.detail}`)}),p.push(["COMMIT FAILED (chat turn) \u2014 nothing landed; do not assume any of your last ops applied.",...g.errors.map(x=>`- ${x.code}: ${x.detail}`),...g.errors.some(x=>x.code==="UNKNOWN_FIELD")?["If you were changing citations or matched-existing content, that is proposal territory (approve/re-propose) \u2014 a chat edit can only replace a node's own schema fields."]:[]].join(`
4
4
  `)),i&&d({kind:"agent",text:i});else{g.applied.length>0&&s.session?.markApplied(g.applied);let x=b(g);t.turns.push({role:"agent",turnIndex:c,text:i,narration:x}),d({kind:"commit",ok:!0,line:x});let S=s.refreshGraph?.();if(S&&y&&y(S),S)try{_+=1;let X=s.descriptor?.mint_gate?.includes("usecase")?"extract":"design",D=ne({verb:X,commitN:_,phase:"chat",committed:g.minted.map(M=>({cid:M.cid,...M.slug?{logical_id:M.slug}:{}}))},S);p.push(D.text)}catch{}i&&d({kind:"agent",text:i})}}else t.turns.push({role:"agent",turnIndex:c,text:i}),i&&d({kind:"agent",text:i});w(i);break}case"done":case"session_complete":j(),N(),t.status="idle",t.busySince=void 0,o=null;break;case"error":j(),N(),t.stream=null,t.status="idle",t.busySince=void 0,t.error=e.message,o=null,d({kind:"error",title:e.message,detail:[]});break;case"session_paused":break;default:break}m()}}}export{ge as a,ae as b,ve as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as u,b as x}from"./chunk-73C4PRYU.js";import{y as m}from"./chunk-C4G7RVJ6.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
2
+ import{a as u,b as x}from"./chunk-GYNTNKNB.js";import{y as m}from"./chunk-ZUGCHQFC.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as l}from"./chunk-322JEJEH.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as m}from"./chunk-JRMDGLLT.js";import{a as f}from"./chunk-F6ZOJXYU.js";import{a as c,c as s,i as a,x as u}from"./chunk-C4G7RVJ6.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
2
+ import{b as l}from"./chunk-VOOPWFHW.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as m}from"./chunk-O75ZHGJG.js";import{a as f}from"./chunk-VT54ARGE.js";import{a as c,c as s,i as a,x as u}from"./chunk-ZUGCHQFC.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as p,c as E,d as j,e as y,f as M,g as C,i as A,l as D,m as F,p as T,r as $,s as O}from"./chunk-RKWJG3WW.js";import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{a as B}from"./chunk-DXV6MBTD.js";import{p as R,q as k}from"./chunk-W6VD2XFO.js";import{a as P}from"./chunk-C4G7RVJ6.js";import{e as q}from"./chunk-UR6MHSHU.js";import{existsSync as f,mkdirSync as V,readFileSync as Z,renameSync as N,writeFileSync as K}from"fs";import{join as Q}from"path";function fe(e){D(p(e));let t=p(e);if(!f(t))return;let n=Q(t,"meta.json"),r=y(e);if(f(n)&&!f(r))try{V(j(e),{recursive:!0}),N(n,r)}catch(o){process.stderr.write(`warn: meta.json migration failed: ${o.message}
2
+ import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{b as p,c as E,d as j,e as y,f as M,g as C,i as A,l as D,m as F,p as T,r as $,s as O}from"./chunk-RKWJG3WW.js";import{a as B}from"./chunk-AECMF3T2.js";import{p as R,q as k}from"./chunk-QIGPXYMF.js";import{a as P}from"./chunk-ZUGCHQFC.js";import{e as q}from"./chunk-UR6MHSHU.js";import{existsSync as f,mkdirSync as V,readFileSync as Z,renameSync as N,writeFileSync as K}from"fs";import{join as Q}from"path";function fe(e){D(p(e));let t=p(e);if(!f(t))return;let n=Q(t,"meta.json"),r=y(e);if(f(n)&&!f(r))try{V(j(e),{recursive:!0}),N(n,r)}catch(o){process.stderr.write(`warn: meta.json migration failed: ${o.message}
3
3
  `)}let i=C(e);if(f(i)){let o="python";try{let c=new B().load();c.code_export?.language&&(o=c.code_export.language)}catch{}let a=M(e,"playwright",o);if(!f(a))try{N(i,a)}catch(c){process.stderr.write(`warn: generated-code migration failed: ${c.message}
4
4
  `)}}if(f(r))try{let o=JSON.parse(Z(r,"utf8"));"md5sum"in o&&(delete o.md5sum,K(r,JSON.stringify(o,null,2)+`
5
5
  `,"utf8"))}catch(o){process.stderr.write(`warn: meta.json md5sum strip failed: ${o.message}
6
- `)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-SMCAIKCE.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{render:r}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),o={current:null},a={current:!1},{waitUntilExit:c,unmount:l}=r(i.default.createElement(n,null,i.default.createElement(t,{resultRef:o,mode:"login",loginCompleteRef:a})),{exitOnCtrlC:!1});k(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(R(0,"Startup gate cancelled"),{recovered:!1})}function W(e){let t=e.getActiveProfile(),n=e.getDefaultEnv();if(!t||!!!(e.loadBasicAuth(t,n)||e.loadCredentials(t,n)))return!1;let i=e.loadProfileConfig(t,n)??{};return!!i.project_id&&!!i.folder_id}var J=q(H(),1);import{existsSync as v,readFileSync as U,readdirSync as X,statSync as Y}from"fs";import{dirname as ee,isAbsolute as te,join as g,relative as x,resolve as re,sep as h}from"path";import{createHash as ne}from"crypto";var S="testmd-bundle.json",d=class extends Error{constructor(t){super(t),this.name="BundleUsageError"}},_=e=>e.split(h).join("/");function I(e){if(!v(e))return[];let t=[];for(let n of X(e).sort()){let r=g(e,n);Y(r).isDirectory()?t.push(...I(r)):t.push(r)}return t}function se(e){let t=e.map(r=>ee(r).split(h)),n=t[0];for(let r of t.slice(1)){let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;n=n.slice(0,i)}return n.join(h)||h}function ie(e){for(let t of e){let n=F(t,U(t,"utf8"));for(let r of n.steps)if(r.body.kind==="import_ref"&&te(r.body.path))throw new d(`bundle sync: absolute @import is not portable after unzip: ${t} step ${r.index} (@import ${r.body.path})`)}}function G(e){let t=re(e),n=T(t);if(!n?.commit_id||!n?.test_id)throw new d(`bundle sync: ${t} is not authored \u2014 run \`kane-cli testmd run\` first (output-<stem>/.internal/meta.json needs commit_id + test_id)`);let r;try{r=O(t)}catch(s){throw s instanceof $?new d(`bundle sync: ${s.message}`):s}let i=[t];for(let s of r.steps)for(let u of s.trace.slice(1))i.includes(u.file)||i.push(u.file);ie(i);let o=[];for(let s of r.unitFiles){if(s.file===t)continue;let u=p(s.file);o.includes(u)||o.push(u)}let a=[...i],c=s=>{v(s)&&a.push(s)};c(E(t)),a.push(y(t)),c(g(p(t),".internal","execution.json")),a.push(...I(A(t)));for(let s of o)c(g(s,"Result.md")),a.push(...I(g(s,".internal","steps")));let l=se(a);if(v(g(l,S)))throw new d(`bundle sync: a real file named ${S} exists at the zip root (${l}) \u2014 it would collide with the generated manifest`);let b=a.map(s=>{let u=U(s);return{abs:s,rel:_(x(l,s)),sha256:ne("sha256").update(u).digest("hex"),bytes:u.length}}).sort((s,u)=>s.rel<u.rel?-1:1),m=_(x(l,t)),L={schema_version:2,entry:m,commit_id:n.commit_id,test_id:n.test_id,testcase_id:n.testcase_id??null,project_id:n.project_id??null,folder_id:n.folder_id??null,org_id:n.org_id??null,created_at:new Date().toISOString(),producer:{name:"kane-cli",version:P},files:b.map(s=>({path:s.rel,sha256:s.sha256,bytes:s.bytes})),units:r.unitFiles.filter(s=>s.file!==t).map(s=>({path:_(x(l,s.file)),kind:s.kind}))};return{zipRoot:l,entry:m,files:b,manifest:L}}var w=e=>e instanceof Error?e.message:String(e);function oe(e){return new Promise((t,n)=>{let r=(0,J.default)("zip",{zlib:{level:6}}),i=[];r.on("data",o=>i.push(o)),r.on("error",n),r.on("end",()=>t(Buffer.concat(i))),r.append(JSON.stringify(e.manifest,null,2)+`
6
+ `)}}async function ye(e){if(!e.isInteractive)return{recovered:!1};if(W(e.creds))return{recovered:!1};let{SingleShotApp:t}=await import("./SingleShotApp-Y3YDFQSD.js"),{ScrollbackProvider:n}=await import("./scrollback-JLPJR25X.js"),{render:r}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),o={current:null},a={current:!1},{waitUntilExit:c,unmount:l}=r(i.default.createElement(n,null,i.default.createElement(t,{resultRef:o,mode:"login",loginCompleteRef:a})),{exitOnCtrlC:!1});k(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(R(0,"Startup gate cancelled"),{recovered:!1})}function W(e){let t=e.getActiveProfile(),n=e.getDefaultEnv();if(!t||!!!(e.loadBasicAuth(t,n)||e.loadCredentials(t,n)))return!1;let i=e.loadProfileConfig(t,n)??{};return!!i.project_id&&!!i.folder_id}var J=q(H(),1);import{existsSync as v,readFileSync as U,readdirSync as X,statSync as Y}from"fs";import{dirname as ee,isAbsolute as te,join as g,relative as x,resolve as re,sep as h}from"path";import{createHash as ne}from"crypto";var S="testmd-bundle.json",d=class extends Error{constructor(t){super(t),this.name="BundleUsageError"}},_=e=>e.split(h).join("/");function I(e){if(!v(e))return[];let t=[];for(let n of X(e).sort()){let r=g(e,n);Y(r).isDirectory()?t.push(...I(r)):t.push(r)}return t}function se(e){let t=e.map(r=>ee(r).split(h)),n=t[0];for(let r of t.slice(1)){let i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i++;n=n.slice(0,i)}return n.join(h)||h}function ie(e){for(let t of e){let n=F(t,U(t,"utf8"));for(let r of n.steps)if(r.body.kind==="import_ref"&&te(r.body.path))throw new d(`bundle sync: absolute @import is not portable after unzip: ${t} step ${r.index} (@import ${r.body.path})`)}}function G(e){let t=re(e),n=T(t);if(!n?.commit_id||!n?.test_id)throw new d(`bundle sync: ${t} is not authored \u2014 run \`kane-cli testmd run\` first (output-<stem>/.internal/meta.json needs commit_id + test_id)`);let r;try{r=O(t)}catch(s){throw s instanceof $?new d(`bundle sync: ${s.message}`):s}let i=[t];for(let s of r.steps)for(let u of s.trace.slice(1))i.includes(u.file)||i.push(u.file);ie(i);let o=[];for(let s of r.unitFiles){if(s.file===t)continue;let u=p(s.file);o.includes(u)||o.push(u)}let a=[...i],c=s=>{v(s)&&a.push(s)};c(E(t)),a.push(y(t)),c(g(p(t),".internal","execution.json")),a.push(...I(A(t)));for(let s of o)c(g(s,"Result.md")),a.push(...I(g(s,".internal","steps")));let l=se(a);if(v(g(l,S)))throw new d(`bundle sync: a real file named ${S} exists at the zip root (${l}) \u2014 it would collide with the generated manifest`);let b=a.map(s=>{let u=U(s);return{abs:s,rel:_(x(l,s)),sha256:ne("sha256").update(u).digest("hex"),bytes:u.length}}).sort((s,u)=>s.rel<u.rel?-1:1),m=_(x(l,t)),L={schema_version:2,entry:m,commit_id:n.commit_id,test_id:n.test_id,testcase_id:n.testcase_id??null,project_id:n.project_id??null,folder_id:n.folder_id??null,org_id:n.org_id??null,created_at:new Date().toISOString(),producer:{name:"kane-cli",version:P},files:b.map(s=>({path:s.rel,sha256:s.sha256,bytes:s.bytes})),units:r.unitFiles.filter(s=>s.file!==t).map(s=>({path:_(x(l,s.file)),kind:s.kind}))};return{zipRoot:l,entry:m,files:b,manifest:L}}var w=e=>e instanceof Error?e.message:String(e);function oe(e){return new Promise((t,n)=>{let r=(0,J.default)("zip",{zlib:{level:6}}),i=[];r.on("data",o=>i.push(o)),r.on("error",n),r.on("end",()=>t(Buffer.concat(i))),r.append(JSON.stringify(e.manifest,null,2)+`
7
7
  `,{name:S});for(let o of e.files)r.file(o.abs,{name:o.rel});r.finalize()})}async function ae(e){let{plan:t,controller:n,testId:r,sessionId:i,commitId:o}=e,a;try{a=await oe(t)}catch(l){return{ok:!1,stage:"zip",error:w(l)}}let c;try{let l={key:"testmd",content_type:"application/zip",filename:`${o}-testmd.zip`},m=(await n.getPresignedUrls(r,i,[l])).urls?.testmd?.upload_url;if(!m)return{ok:!1,stage:"presign",error:"presign response missing testmd upload_url"};c=m}catch(l){return{ok:!1,stage:"presign",error:w(l)}}try{await z(c,a,"application/zip")}catch(l){return{ok:!1,stage:"upload",error:w(l)}}return{ok:!0,bytes:a.length}}async function Ee(e){let t;try{t=G(e.sourcePath)}catch(n){return n instanceof d?{ok:!1,stage:"collect",error:n.message}:{ok:!1,stage:"collect",error:w(n)}}return ae({...e,plan:t})}function je(e){return e.shouldUploadPipeline&&e.uploadSucceeded&&!!e.metaCommitId&&!!e.metaTestId}export{fe as a,ye as b,Ee as c,je as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as X,b as Y,c as Z,d as ee}from"./chunk-UI7KULSI.js";import{m as Q,o as C}from"./chunk-W6VD2XFO.js";import{a as be}from"./chunk-6YGTRKDT.js";import{e as xe}from"./chunk-UR6MHSHU.js";function ne(l){return{command:"start",...l}}function te(l,n,s){return{command:"run",run_id:l,kind:n,...s}}function ie(l){return{command:"cancel",...l?{run_id:l}:{}}}function re(l){return{command:"ask_user_response",answer:l}}function se(){return{command:"shutdown"}}var q=Symbol("run-queue-end"),z=class{items=[];waiting=null;ended=!1;error=null;push(n){if(this.waiting){let{resolve:s}=this.waiting;this.waiting=null,s(n)}else this.items.push(n)}end(){if(this.ended=!0,this.waiting){let{resolve:n}=this.waiting;this.waiting=null,n(q)}}fail(n){if(this.error=n,this.waiting){let{reject:s}=this.waiting;this.waiting=null,s(n)}}next(){return this.items.length>0?Promise.resolve(this.items.shift()):this.error?Promise.reject(this.error):this.ended?Promise.resolve(q):new Promise((n,s)=>{this.waiting={resolve:n,reject:s}})}},A=class{env;runner;log;sessionId;spawnFn;proc=null;activeRun=null;pendingReady=null;shuttingDown=!1;finalized=!1;exitInfo=null;exitedUnexpectedly=!1;exitResolve;exited;constructor(n){this.env=n.env,this.runner=n.runner,this.log=n.log,this.sessionId=n.sessionId,this.spawnFn=n.spawn??Y;let s;this.exited=new Promise(p=>{s=p}),this.exitResolve=s}async start(n){if(this.proc)throw new Error("PersistentRunner.start called twice");this.proc=this.spawnFn({env:this.env,runner:this.runner,log:this.log,sessionId:this.sessionId}),this.consume();let s=new Promise((p,v)=>{this.pendingReady={resolve:p,reject:v}});this.writeCommand(ne(n)),await s}async*run(n,s,p){if(!this.proc)throw new Error("PersistentRunner.run called before start");if(this.finalized)throw new Error(`v16-runner is not running (exited code=${this.exitInfo?.code??"null"}, signal=${this.exitInfo?.signal??"none"}) \u2014 cannot start run '${n}'`);if(this.activeRun)throw new Error(`PersistentRunner.run overlap: '${this.activeRun.runId}' still in flight`);let v=new z,w={runId:n,queue:v};this.activeRun=w,this.writeCommand(te(n,s,p));try{for(;;){let g=await v.next();if(g===q||(yield g,g.type==="run_end"&&(g.run_id===void 0||g.run_id===n)))break}}finally{this.activeRun===w&&(this.activeRun=null)}}sendUserResponse(n){this.writeCommand(re(n))}cancel(n){this.writeCommand(ie(n))}kill(){this.proc?.child.kill("SIGTERM")}async shutdown(){this.shuttingDown=!0,this.proc&&(this.writeCommand(se()),await this.exited)}get stderr(){return this.proc?.getStderr()??""}get diedUnexpectedly(){return this.exitedUnexpectedly}writeCommand(n){let s=JSON.stringify(n)+`
2
+ import{a as X,b as Y,c as Z,d as ee}from"./chunk-OUJQVBUT.js";import{m as Q,o as C}from"./chunk-QIGPXYMF.js";import{a as be}from"./chunk-6YGTRKDT.js";import{e as xe}from"./chunk-UR6MHSHU.js";function ne(l){return{command:"start",...l}}function te(l,n,s){return{command:"run",run_id:l,kind:n,...s}}function ie(l){return{command:"cancel",...l?{run_id:l}:{}}}function re(l){return{command:"ask_user_response",answer:l}}function se(){return{command:"shutdown"}}var q=Symbol("run-queue-end"),z=class{items=[];waiting=null;ended=!1;error=null;push(n){if(this.waiting){let{resolve:s}=this.waiting;this.waiting=null,s(n)}else this.items.push(n)}end(){if(this.ended=!0,this.waiting){let{resolve:n}=this.waiting;this.waiting=null,n(q)}}fail(n){if(this.error=n,this.waiting){let{reject:s}=this.waiting;this.waiting=null,s(n)}}next(){return this.items.length>0?Promise.resolve(this.items.shift()):this.error?Promise.reject(this.error):this.ended?Promise.resolve(q):new Promise((n,s)=>{this.waiting={resolve:n,reject:s}})}},A=class{env;runner;log;sessionId;spawnFn;proc=null;activeRun=null;pendingReady=null;shuttingDown=!1;finalized=!1;exitInfo=null;exitedUnexpectedly=!1;exitResolve;exited;constructor(n){this.env=n.env,this.runner=n.runner,this.log=n.log,this.sessionId=n.sessionId,this.spawnFn=n.spawn??Y;let s;this.exited=new Promise(p=>{s=p}),this.exitResolve=s}async start(n){if(this.proc)throw new Error("PersistentRunner.start called twice");this.proc=this.spawnFn({env:this.env,runner:this.runner,log:this.log,sessionId:this.sessionId}),this.consume();let s=new Promise((p,v)=>{this.pendingReady={resolve:p,reject:v}});this.writeCommand(ne(n)),await s}async*run(n,s,p){if(!this.proc)throw new Error("PersistentRunner.run called before start");if(this.finalized)throw new Error(`v16-runner is not running (exited code=${this.exitInfo?.code??"null"}, signal=${this.exitInfo?.signal??"none"}) \u2014 cannot start run '${n}'`);if(this.activeRun)throw new Error(`PersistentRunner.run overlap: '${this.activeRun.runId}' still in flight`);let v=new z,w={runId:n,queue:v};this.activeRun=w,this.writeCommand(te(n,s,p));try{for(;;){let g=await v.next();if(g===q||(yield g,g.type==="run_end"&&(g.run_id===void 0||g.run_id===n)))break}}finally{this.activeRun===w&&(this.activeRun=null)}}sendUserResponse(n){this.writeCommand(re(n))}cancel(n){this.writeCommand(ie(n))}kill(){this.proc?.child.kill("SIGTERM")}async shutdown(){this.shuttingDown=!0,this.proc&&(this.writeCommand(se()),await this.exited)}get stderr(){return this.proc?.getStderr()??""}get diedUnexpectedly(){return this.exitedUnexpectedly}writeCommand(n){let s=JSON.stringify(n)+`
3
3
  `;try{this.proc?.child.stdin?.write(s)}catch{}}async consume(){if(!this.proc)return;try{for await(let p of this.proc.events){if(p.type==="ready"){this.onReady();continue}this.routeEvent(p)}}catch(p){this.log?.("error","PERSISTENT_RUNNER_STREAM_ERROR","Runner stdout stream errored",{error:p instanceof Error?p.message:String(p)})}let{code:n,signal:s}=await this.proc.exited;this.onExit(n,s)}onReady(){if(this.pendingReady){let{resolve:n}=this.pendingReady;this.pendingReady=null,n()}}routeEvent(n){let s=this.activeRun;if(!s){this.log?.("warn","PERSISTENT_RUNNER_ORPHAN_EVENT","Runner event with no active run",{event_type:n.type});return}s.queue.push(n)}onExit(n,s){if(!this.finalized){if(this.finalized=!0,this.exitInfo={code:n,signal:s},this.shuttingDown||(this.exitedUnexpectedly=!0),this.exitResolve({code:n,signal:s}),this.pendingReady){let{reject:p}=this.pendingReady;this.pendingReady=null,p(new Error(`v16-runner exited before ready (code=${n}, signal=${s??"none"})`))}if(this.activeRun){let{queue:p}=this.activeRun;if(this.activeRun=null,this.shuttingDown)p.end();else{let v=this.proc?.getStderr()?.slice(-500)??"";p.fail(new Error(`v16-runner exited unexpectedly mid-run (code=${n}, signal=${s??"none"})${v?`
4
4
  ${v}`:""}`))}}}}};var h=xe(be(),1);function j(l,n){let s=null,p=(v,w)=>{for(let g=0;g<v.length;g++){let x=v[g],f=[...w,g];n(x)&&(s===null||f.length>s.length)&&(s=f),x.children&&x.children.length>0&&p(x.children,f)}};return p(l,[]),s}function N(l,n,s){if(n.length===0)return[...l];let p=n[0],v=[...l],w=v[p];if(n.length===1)v[p]=s(w);else{let g=n.slice(1),x=N(w.children??[],g,s);v[p]={...w,children:x}}return v}function oe(){return{steps:[],maxOrdinal:0}}function _e(l,n){if(n.type==="run_start"&&n.environment?.resolution)return{...l,resolution:n.environment.resolution};if(n.type==="step_end"&&typeof n.ordinal=="number"&&n.id){let s={id:n.id,ordinal:n.ordinal,status:n.status,...n.kind?{kind:n.kind}:{},...typeof n.duration=="number"?{duration_ms:Math.round(n.duration*1e3)}:{},...typeof n.action_id=="string"&&n.action_id?{action_id:n.action_id}:{}};return{...l,steps:[...l.steps,s],maxOrdinal:Math.max(l.maxOrdinal,n.ordinal)}}return l}function V(l){let n=l.indexOf(": ");return n>0&&n<15?l.slice(n+2):l}function W(l){return l.map(n=>{let s=n.children?W(n.children):n.children;return n.status==="running"?{...n,status:"stopped",phase:void 0,children:s}:s!==n.children?{...n,children:s}:n})}function Ue(l,n,s,p,v){let[w,g]=(0,h.useState)(!1),[x,f]=(0,h.useState)([]),[ae,T]=(0,h.useState)(null),[ue,B]=(0,h.useState)(null),[de,I]=(0,h.useState)(null),[le,J]=(0,h.useState)(null),[ce,G]=(0,h.useState)([]),[pe,H]=(0,h.useState)(null),[he,fe]=(0,h.useState)(void 0),y=(0,h.useRef)(null),E=(0,h.useRef)(null),S=(0,h.useRef)(null),b=(0,h.useRef)(0),D=(0,h.useRef)(!1),$=(0,h.useRef)(oe()),U=(0,h.useRef)(null),me=(0,h.useCallback)(async(a,_)=>{let K=U.current;if(K)try{await K}catch{}f([]),T(null),B(null),I(null),J(null),G([]),H(null),fe(a.max_steps),g(!0),S.current=null,b.current=0,$.current=oe();let k=y.current;if(k&&E.current!==a.session_id){try{k.kill()}catch{}y.current=null,E.current=null,k=null}if(!k){let e=X();if(!e){I("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available."),g(!1);return}let d=Z({environment:_?.environment,mode:_?.mode,assertionMode:_?.assertionMode,finalValidation:_?.finalValidation,username:a.username,accessKey:a.access_key,sessionId:a.session_id}),u=new A({env:d,runner:e,log:_?.log,sessionId:a.session_id});y.current=u,E.current=a.session_id,k=u,Q("runner",()=>{try{u.kill()}catch{}});let i={cdp_endpoint:a.cdp_endpoint,ws_endpoint:a.ws_endpoint,width:a.width,height:a.height,headless:a.headless,model:a.model,max_steps:a.max_steps,network_ws:a.network_ws,network_sse:a.network_sse,session_id:a.session_id};a.auth&&(i.auth=a.auth),a.username&&(i.username=a.username),a.access_key&&(i.access_key=a.access_key);try{await u.start(i)}catch(o){I(o instanceof Error?o.message:String(o)),g(!1),C("runner","Runner start failed"),y.current=null,E.current=null;return}}let F={...a};delete F.run_id,ee(F,{environment:_?.environment});let ye=`run-${a.run_index}`,we=a.mode==="replay"?"replay":"author",M=k,L=(async()=>{D.current=!1;for await(let e of M.run(ye,we,F)){if(D.current)break;switch($.current=_e($.current,e),e.type){case"run_start":if(e.child_id)break;if(S.current&&!S.current.isSingleFlow){let d=b.current;b.current++,f(u=>u.map((i,o)=>o===d?{...i,status:"running"}:i.status==="running"&&!i.children?.some(t=>t.status==="running")?{...i,status:i.children?.some(t=>t.status==="failed")?"failed":"passed"}:i))}break;case"bifurcation":{let d=e.flows??[],u=e.count??d.length,i={flows:d,isSingleFlow:e.is_single_flow??u<=1};J(i),S.current=i,b.current=0,f(d.map((o,t)=>({index:t+1,objective:o??`Flow ${t+1}`,status:"pending"})));break}case"step_start":{n?.("STEP_START",`Step ${e.index} started`,{index:e.index,objective:e.objective,child_id:e.child_id});let d=e.index,u=e.objective??`Step ${d}`,i=e.child_id,o=S.current&&!S.current.isSingleFlow;if(i)f(t=>{let r=j(t,c=>c.branchChildId===i)??j(t,c=>c.status==="running");return r?N(t,r,c=>{let m=(c.children??[]).map(R=>R.status==="running"&&R.childId===i?{...R,status:"stopped",phase:void 0}:R);return m.push({index:d,objective:u,status:"running",childId:i}),{...c,children:m}}):t});else if(o){let t=Math.max(0,b.current-1);f(r=>{let c=[...r];if(t>=c.length)return r;let m={...c[t]},P=[...m.children??[]].map(O=>O.status==="running"&&O.childId===void 0?{...O,status:"stopped",phase:void 0}:O);return P.push({index:d,objective:u,status:"running"}),m.children=P,m.status="running",c[t]=m,c})}else f(t=>{let r=W(t);return r.some(m=>m.index===d)?r.map(m=>m.index===d?{...m,status:"running",objective:u}:m):[...r,{index:d,objective:u,status:"running"}]});break}case"step_event":{n?.("STEP_EVENT",`Step ${e.index} ${e.event}`,{index:e.index,phase:e.event,action_type:e.action_type,detail:e.detail,child_id:e.child_id});let d=e.child_id,u=S.current&&!S.current.isSingleFlow;if(e.event==="cm_init"&&e.checkpoint_count!=null){G(i=>[...i,e.checkpoint_count]);break}if(e.event==="replay_started"){H({recordingLength:e.recording_length??0});break}if(e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&s?.(e.detail),d){let i=t=>{if(t.index!==e.index||t.childId!==d)return t;let r={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(r.objective=e.detail),e.action_type&&(r.actionType=e.action_type),{...t,...r}},o=t=>t.map(r=>{let c=i(r);return c!==r?c:r.children&&r.children.length>0?{...r,children:o(r.children)}:r});f(t=>t.map(r=>r.children?{...r,children:o(r.children)}:r))}else if(u){let i=Math.max(0,b.current-1);f(o=>{let t=[...o];if(i>=t.length)return o;let r={...t[i]},c=[...r.children??[]];if(!c.some(R=>R.index===e.index&&R.childId===void 0))c.push({index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type});else for(let R=0;R<c.length;R++){if(c[R].index!==e.index||c[R].childId!==void 0)continue;let P={phase:e.event};e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(P.objective=e.detail),e.action_type&&(P.actionType=e.action_type),c[R]={...c[R],...P}}return r.children=c,t[i]=r,t})}else f(i=>i.some(t=>t.index===e.index)?i.map(t=>{if(t.index!==e.index)return t;let r={phase:e.event};return e.event==="reasoning"&&e.detail&&e.detail!=="reasoning"&&(r.objective=e.detail),e.action_type&&(r.actionType=e.action_type),{...t,...r}}):[...W(i),{index:e.index,objective:`Step ${e.index}`,status:"running",phase:e.event,actionType:e.action_type}]);break}case"step_end":{n?.("STEP_END",`Step ${e.index} ${e.status}`,{index:e.index,status:e.status,duration:e.duration,summary:e.summary,child_id:e.child_id}),p?.();let d=e.child_id,u=S.current&&!S.current.isSingleFlow;if(d){let i=t=>t.index===e.index&&t.childId===d?{...t,status:e.status,duration:e.duration,phase:void 0,objective:t.objective.startsWith("Step ")?V(e.summary||t.objective):t.objective}:t,o=t=>t.map(r=>{let c=i(r);return c!==r?c:r.children&&r.children.length>0?{...r,children:o(r.children)}:r});f(t=>t.map(r=>r.children?{...r,children:o(r.children)}:r))}else if(u){let i=Math.max(0,b.current-1);f(o=>{let t=[...o];if(i>=t.length)return o;let r={...t[i]},c=(r.children??[]).map(m=>m.index===e.index&&m.childId===void 0?{...m,status:e.status,duration:e.duration,phase:void 0,objective:m.objective.startsWith("Step ")?V(e.summary||m.objective):m.objective}:m);return r.children=c,t[i]=r,t})}else f(i=>i.map(o=>o.index===e.index?{...o,status:e.status,duration:e.duration,phase:void 0,objective:o.objective.startsWith("Step ")?V(e.summary||o.objective):o.objective}:o));{let o=S.current&&!S.current.isSingleFlow?Math.max(0,b.current-1):0,t=typeof e.ordinal=="number"&&e.id?{ordinal:e.ordinal,id:e.id}:void 0;l?.(e.index,o,e.child_id,t)}break}case"child_agent_start":{let d=e.objective??"",u=e.child_id;f(i=>{let o=j(i,t=>t.status==="running");return o?N(i,o,t=>({...t,objective:`${d} (branch)`,phase:`child: ${d.slice(0,50)}`,branchObjective:d,branchChildId:u})):i});break}case"child_agent_end":{let d=e.child_id,u=`child ${e.success?"done":"failed"}`;f(i=>{let o=j(i,t=>t.branchChildId===d);return o?N(i,o,t=>({...t,phase:u})):i.map(t=>t.phase?.startsWith("child:")?{...t,phase:u}:t)});break}case"describe_trigger":v?.(e);break;case"ask_user":T(e.question??"");break;case"run_end":f(d=>d.map(u=>u.status==="running"?{...u,status:e.status,phase:void 0}:u)),g(!1),B(e);break;case"error":g(!1),I(e.message??"Runner error"),f(d=>d.map(u=>u.status==="running"?{...u,status:"failed",phase:void 0}:u));break}}})().catch(e=>{if(y.current!==M)return;let u=[e instanceof Error?e.message:String(e)],i=M.stderr;i&&!u.join(`
5
5
  `).includes(i)&&u.push(i),I(u.join(`
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ function S(n,p){let{width:r,height:h,channels:f}=p;if(n.length!==r*h*f)throw new Error(`appearanceSignature: buffer ${n.length} bytes does not match ${r}x${h}x${f}`);let e=9,l=8,s=new Array(e*l);for(let t=0;t<l;t++){let o=Math.floor(t*h/l),d=Math.min(h,Math.max(o+1,Math.floor((t+1)*h/l)));for(let a=0;a<e;a++){let m=Math.floor(a*r/e),$=Math.min(r,Math.max(m+1,Math.floor((a+1)*r/e))),y=0,b=0;for(let u=o;u<d;u++)for(let x=m;x<$;x++){let i=(u*r+x)*f;y+=f===1?n[i]:Math.floor((n[i]*299+n[i+1]*587+n[i+2]*114)/1e3),b+=1}s[t*e+a]=Math.floor(y/b)}}let M="",c=0,g=0;for(let t=0;t<l;t++)for(let o=0;o<e-1;o++)c=c<<1|(s[t*e+o+1]>s[t*e+o]?1:0),g+=1,g===4&&(M+=c.toString(16),c=0,g=0);return M}export{S as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{x as s}from"./chunk-C4G7RVJ6.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,testGeneratorBaseUrl:process.env.KANE_STAGE_TCG_URL??e.testGeneratorBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost,evidenceViewerUrl:process.env.KANE_STAGE_EVIDENCE_VIEWER_URL??e.evidenceViewerUrl,mediaArtefactsHost:process.env.KANE_STAGE_MEDIA_ARTEFACTS_HOST??e.mediaArtefactsHost}}export{n as a};
2
+ import{x as s}from"./chunk-ZUGCHQFC.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,testGeneratorBaseUrl:process.env.KANE_STAGE_TCG_URL??e.testGeneratorBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost,evidenceViewerUrl:process.env.KANE_STAGE_EVIDENCE_VIEWER_URL??e.evidenceViewerUrl,mediaArtefactsHost:process.env.KANE_STAGE_MEDIA_ARTEFACTS_HOST??e.mediaArtefactsHost}}export{n as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as l}from"./chunk-WAOCHXJ5.js";import{a as c}from"./chunk-NLCCBXXV.js";import{a}from"./chunk-RZ4F3BHX.js";var h=class{constructor(e,t,r,s){this.controllerBaseUrl=e;this.getOAuthToken=t;this.directBasicAuth=r;this.log=s}_cached=null;_revoked=!1;_lastError=null;revoke(){this._revoked=!0,this._cached=null}prime(e){this._revoked||(this._cached=e)}get revoked(){return this._revoked}get cached(){return this._cached}get lastError(){return this._lastError}async resolve(e=!1){if(this._cached&&!e)return this._cached;try{let t;if(this.directBasicAuth)t=new l(this.controllerBaseUrl,{username:this.directBasicAuth.username,accessKey:this.directBasicAuth.access_key});else{let s=await this.getOAuthToken();if(!s)return null;t=new l(this.controllerBaseUrl,s)}let r=await t.getTmsCredentials();this.directBasicAuth&&!r.access_key&&(r.access_key=this.directBasicAuth.access_key),this._cached=r,this._lastError=null;try{let[{refreshIdentitySnapshot:s},{telemetryEnvName:n}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-NFYYRGGR.js")]);await s(n(),r)}catch{}return this.log?.("info","AUTH_RESOLVE_OK","Auth resolved",{username:r.username,org_id:r.org_id,user_id:r.user_id}),r}catch(t){return this._lastError=t instanceof Error?t:new Error(String(t)),this.log?.("warn","AUTH_RESOLVE_FAILED","Auth resolve failed",{error:this._lastError.message}),null}}async fetch(e,t={}){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");let r=await this.resolve();if(!r)throw new Error("Not authenticated \u2014 no credentials resolved");let s=i=>({...t,headers:{...t.headers,Authorization:c(i.username,i.access_key)}}),n=await a(e,s(r));if(n.status===401){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");this.log?.("warn","AUTH_RESOLVE_401","Got 401, re-resolving",{url:e});let i=await this.resolve(!0);if(!i)throw new Error("Re-authentication failed after 401");return a(e,s(i))}return n}};function _(o){if(!o)return"network";let e=/failed:\s*(\d{3})\b/.exec(o.message)?.[1];return e==="401"||e==="403"?"auth":e?"server":"network"}export{h as a,_ as b};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as z,b as V,c as ce,d as R}from"./chunk-2YQ6TW77.js";import{b as B}from"./chunk-CJJXT5DO.js";import{a as M}from"./chunk-WAOCHXJ5.js";import{a as F}from"./chunk-2WVKOZ6W.js";import{a as U}from"./chunk-NLCCBXXV.js";import{a as k}from"./chunk-RZ4F3BHX.js";import{e as ae}from"./chunk-UR6MHSHU.js";import{readFileSync as se,existsSync as j,readdirSync as Ne,mkdirSync as D,writeFileSync as O}from"fs";import{readFile as oe,unlink as Oe}from"fs/promises";import{join as E}from"path";import{existsSync as Ie,mkdirSync as ve,readdirSync as Q,writeFileSync as ye}from"fs";import{join as N}from"path";import{randomUUID as P}from"crypto";var le="/home/kaneai/Downloads";function T(t){return`${le}/${t}`}function G(t){return"FILE__"+t.replace(/[^A-Za-z0-9]/g,"_")}function w(t){let e=t?.media;return!e||!e.name||!e.media_url?null:{media_id:e.media_id??"",name:e.name,media_url:e.media_url,type:e.type??"doc"}}function K(t){return t?t.includes(`
3
+ `)?t.split(`
4
+ `).map(e=>e.trim()).filter(Boolean):t.split(". ").map(e=>e.trim()).filter(Boolean).map(e=>e.endsWith(".")?e:e+"."):[]}function S(t,e){return!t||!e?t:t.replace(/\{\{(.+?)\}\}/g,(s,i)=>{let n=e[i];return n?n.value:s}).replace(/\$\{(.+?)\}/g,(s,i)=>{let n=e[i];return n?n.value:s})}var ue={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD"},H={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},de=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function X(t,e){if(t==="analyze"){let i=e?.action_params?.analyzer_type??"";return H[i]}let s=ue[t];return s||console.warn(`[migrator] UNKNOWN action_type "${t}" \u2014 falling back to "${t.toUpperCase()}"; explicit mapping required`),s??t.toUpperCase()}function W(t,e){if(!t||!e)return"";try{let s=new Date(t);return isNaN(s.getTime())?"":new Date(s.getTime()+e).toISOString()}catch{return""}}function Y(t){try{return JSON.parse(t.output_value??"{}")}catch{return{}}}function _e(t){let e=t.output_variable??"";if(!e)return"[]";let i={...Y(t)};return delete i.body,JSON.stringify([{name:e,unique_key:(t.action_id??"").replace(/-/g,"").slice(0,8)||P().replace(/-/g,"").slice(0,8),value:i,variable_description:"API Response"}])}function pe(t,e,s){let i=t.action_params??{},n=de.has(e)?"Vision Agent":"Operation Agent",o={operation_type:e};if(e==="OPEN"&&(o.url=i.url??""),e==="SET_VARIABLE"&&(o.variable_name=t.output_variable??i.key??"",o.variable_value=t.output_value??""),e==="UPLOAD_FILE"){let f=w(i);f&&(o.value=T(f.name))}let r={},c={},a=t.action_instruction??"",l=i.text??"",u=i.url??"",p=[["intent",a],["value",l],["url",u]];for(let[f,h]of Object.entries(s)){let b=String(h);if(f.startsWith("secrets."))for(let[I,v]of p)v.includes(b)&&(c[I]=f);for(let[I,v]of p)v.includes(b)&&!(I in r)&&(r[I]=v)}let _=t.action_type,d={operation:t.action_instruction??"",agent:n,operation_dict:o,reasoning:_==="analyze"?i.query??"":t.intent??t.action_instruction??"",variable:r,secrets:c,params:{}};_==="analyze"&&typeof i.code=="string"&&i.code&&(d.code=i.code),_==="analyze"&&typeof i.code_js=="string"&&i.code_js&&(d.code_js=i.code_js),_==="analyze"&&typeof i.condition_expression=="string"&&i.condition_expression&&(d.condition_expression=i.condition_expression),i.uses_websocket===!0&&(d.uses_websocket=!0),i.uses_sse===!0&&(d.uses_sse=!0),_==="analyze"&&i.analyzer_type==="textual_visual"&&(typeof i.wrapped_js=="string"&&(d.wrapped_js=i.wrapped_js),Array.isArray(i.locators)&&(d.locators=i.locators),typeof i.operator=="string"&&(d.operator=i.operator),Array.isArray(i.transforms)&&(d.transforms=i.transforms),typeof i.query=="string"&&(d.query=i.query),typeof i.expected_value=="string"&&(d.expected_value=i.expected_value),typeof i.needs_unit_conversion=="boolean"&&(d.needs_unit_conversion=i.needs_unit_conversion),typeof i.condition=="string"&&(d.condition=i.condition));let m={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return m&&i[m]!==void 0&&(d[m]=i[m]),_==="set_clipboard"&&typeof i.html=="string"&&i.html&&(d.html=i.html),d}function ge(t){let e=t.assertion_tree??{};if(typeof e.passed=="boolean")return e.passed;let s=e.sub_results??[];return s.length===0?e.status==="passed":(e.composite_operator??"and")==="or"?s.some(n=>n.passed===!0):s.every(n=>n.passed===!0)}function J(t){return t.map(e=>({description:e.description??"",store_key:e.store_key??"",expected_value:e.expected??"",extracted_value:e.extracted_value??"",operator:e.operator??"equals",transforms:e.transforms??[]}))}function fe(t){let e=t.assertion_tree??{},s=e.sub_results??[],i=J(s);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:s,sub_checks:i,composite_operator:e.composite_operator??"and",verification:e.verification??"",claim:e.description??""}}function me(t){let s=(t.action_params??{}).assertion_tree??{},i=s.sub_results??[],n=J(i);return[{operation:t.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:i,sub_checks:n,composite_operator:s.composite_operator??"and",verification:"",claim:s.description??t.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function he(t,e,s,i){let n=t.visual_data;if(!n||n.x==null||n.y==null)return null;let o=e?`${e}/test_screenshots`:"";return{x:n.x,y:n.y,confidence:0,bbox:n.bbox??null,bbox_source:n.bbox?"accessibility_tree":"fallback",viewport_width:n.viewport_width??1280,viewport_height:n.viewport_height??800,scale_factor:null,raw_image_url:o?`${o}/untagged_screenshot/${s}.${i?.get(s)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function Ee(t){if(!t)return"";let e=t;return typeof t=="object"&&!Array.isArray(t)&&Array.isArray(t.frameInfo)&&(e=t.frameInfo),!Array.isArray(e)||e.length===0?"":JSON.stringify(e)}function q(t,e={},s="",i){let n=t.action_type,o=X(n,t),r=t.action_params??{},c=t.coordinates??null,a=t.selectors??null,l=!!(a&&a.length>0),u=t.timestamp??"",p=t.duration_ms??0,_=t.variables_used??{},d=t.action_id??P(),g=P(),m=W(u,p),f="",h="";if(n==="navigate")h=r.url??"",f=h;else if(n==="type"||n==="fill")f=r.text??"";else if(n==="press_key")f=r.key??"";else if(n==="wait")f=String(r.ms??r.timeout_ms??"");else if(n==="evaluate_js")f=r.script??"";else if(n==="upload_files"){let y=w(r);y&&(f=T(y.name))}else n==="analyze"&&o==="SET_VARIABLE"&&(f=t.output_value??"");let b="";n==="go_back"?b="back":n==="go_forward"&&(b="forward");let I=S(f,e),v=S(h,e),x=S(t.action_instruction??"",e),A=pe(t,o,_);return{operation_id:d,instruction_id:g,instruction:x,intent:x,operation_start:u,operation_end:m,status:t.status??"",command:o,name:"",target:"",value:I,message:"",operation_dict:"",frame:Ee(t.frame_info),error_message:t.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(A),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:s?`${s}/test_screenshots/untagged_screenshot/${d}.${i?.get(d)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:v,navigation_direction:b,tagified_image_url:"",query_variable_name:t.output_variable??"",query_variable_value:t.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:o==="ASSERTION"?ge(r):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(r.tab_index??""),tab_identifier:String(r.tab_identifier??""),scroll_value:r.amount??1,scroll_direction:r.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:n==="evaluate_js"?r.script??"":"",code_error:"",hide:!1,dismiss_dialog:!1,use_v2_mobile_tagging:!1,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:c!==null&&!l,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:l?null:c?.x??null,y_coord:l?null:c?.y??null,target_x_coord:r.target_x??null,target_y_coord:r.target_y??null,source_description:r.source_description??null,target_description:r.target_description??null,use_coordinates:c!==null&&!l,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:l?a.map(y=>({type:y.isXPath?"xpath":"css",...y})):"",selector_target:"",math_result_variable_name:"",math_result_variable_value:"",expression_tree:o==="ASSERTION"?fe(r):r.expression_tree??{},assertion_tree:r.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:o==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},start_coordinates:r.source_coordinates?{x:r.source_coordinates[0],y:r.source_coordinates[1]}:{},end_coordinates:r.target_coordinates?{x:r.target_coordinates[0],y:r.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:n==="api"?{request:t.action_params?.api_data?.request??{}}:{},output_variables:n==="api"?t.output_variable?{[t.output_variable]:null}:{}:t.output_variable?{[t.output_variable]:t.output_value??""}:{},visual_context:he(t,s,d,i),reasoning:n==="analyze"?r.query??"":t.intent??t.action_instruction??""}}function $(t,e,s={}){let i=t.action_type,n=X(i,t),o=t.timestamp??"",r=t.duration_ms??0,c=W(o,r),a=n==="ASSERTION"||n==="MATHEMATICAL_OPERATION";return{instruction_id:e.instruction_id,instruction_class:a?"non_driver_action":"driver_action",module_id:"",instruction:S(t.action_instruction??"",s),command:n,error:null,parent_instruction_id:"",classification_layer_resp:n==="ASSERTION"?me(t):[],classification_error:{},operations:[e],status:t.status??"",start_timestamp:o,end_timestamp:c,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&t.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&t.action_params?.analyzer_type?.startsWith("devtool_")?t.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?t.action_params?.script??"":"",user_variables:i==="api"?_e(t):"[]",api_data:i==="api"?{request:t.action_params?.api_data?.request??{},response:Y(t)}:{},params_used:!1,hard_assertion:n==="ASSERTION"?t.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?t.action_params?.query??"":t.intent??t.action_instruction??""}}function be(t,e=[]){let s=t.action_params??{},i=s.branches??[],n=s.winning_index??-1,o=s.sub_results??[],r={};for(let a of o){let l=a.sub_results;if(l)for(let u of l){let p=u.store_key;p&&(r[p]=u)}}let c=i.map((a,l)=>{let u=l===n,p=(a.sub_checks??[]).map(_=>{let d=r[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:d?.extracted_value??_.stored_value,operator:_.operator??d?.operator??"equals",transforms:_.transforms??d?.transforms??[]}});if(p.length===0&&a.condition&&o.length>0){let d=o.find(g=>g.branch_index===l)?.sub_results??[];d.length>0&&(p=d.map(g=>({description:g.description??a.condition,store_key:g.store_key??"",expected_value:g.expected??"true",stored_value:g.extracted_value??void 0,operator:g.operator??"equals",transforms:g.transforms??[]})))}return{branch_index:l,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?e:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${P().slice(0,8)}`,instruction:t.action_instruction??"",instruction_class:"driver_action",command:"",status:t.status??"success",resolved_branch_index:n,branches:c,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:t.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function Z(t,e,s){for(let i of t)i.content_type==="instruction"&&"generative_id"in i&&(i.generative_id=e,i.generative_objective=s)}function C(t,e={},s="",i,n){let o=[],r=0;for(;r<t.length;){let c=t[r],a=c.action_type;if(!n?.keepFailedActions&&c.status==="error"&&a!=="assert"&&a!=="if_else"&&a!=="child_agent_start"&&a!=="child_agent_end"&&!(c.until_condition&&!c.error)){r+=1;continue}if(a==="analyze"&&!H[c.action_params?.analyzer_type??""]){r+=1;continue}if(a==="child_agent_start"){let l=c.action_params?.child_id??"",u=c.action_params?.objective??"",p=[];r+=1;let _=1,d="error",g;for(;r<t.length&&_>0;){let A=t[r],y=A.action_type;if(y==="child_agent_start")_+=1;else if(y==="child_agent_end"&&(_-=1,_===0)){d=A.status??"success",g=A,r+=1;break}_>0&&p.push(A),r+=1}let m=C(p,e,s,i);Z(m,l,u);let f=g?.action_params?.result_code??null,h=g?.action_params?.reason_code??null,b=g?.action_params?.error_message??null,I=g?.action_params?.summary??null,v=g?.action_params?.one_liner??null,x=d==="error";o.push({content_type:"generative_block",instruction_id:`generative_block_${l}`,generative_id:l,objective:u,status:d,children:m,error_message:x?b??null:null,error_code:x?h??null:null,result_code:f??null,bifurcation_context:[],approach_reason:K(I),one_liner:v??null});continue}else if(a==="child_agent_end"){r+=1;continue}else if(a==="if_else"){r+=1;let l=[];for(;r<t.length&&t[r].action_type==="child_agent_start";){let u=t[r],p=u.action_params?.child_id??"",_=u.action_params?.objective??"",d=[];r+=1;let g=1,m="error";for(;r<t.length&&g>0;){let h=t[r];if(h.action_type==="child_agent_start")g+=1;else if(h.action_type==="child_agent_end"&&(g-=1,g===0)){m=h.status??"success",r+=1;break}g>0&&d.push(h),r+=1}let f=C(d,e,s,i);l.push(...f)}o.push(be(c,l));continue}else if(a==="query_tool"){r+=1;continue}else if(c.until_condition){let l=q(c,e,s,i),u=$(c,l,e),p=typeof c.until_condition_met=="boolean"?c.until_condition_met:c.status==="success";o.push({content_type:"until_block",instruction_id:`until_${P().slice(0,8)}`,condition:c.until_condition,max_retries:c.until_max_retries??10,settle_ms:c.until_settle_ms??500,current_count:0,condition_met:p,children:[u],generative_id:"",generative_objective:"",variables_used:{},status:c.status??"success"})}else{let l=q(c,e,s,i),u=$(c,l,e);o.push(u)}r+=1}return o}function L(t,e={},s="",i,n){let o=[];for(let r of t){let c=C(r.records,e,s,i,n);if(c.length===0)continue;let a=P().replace(/-/g,"");Z(c,a,r.objective);let l=c.some(d=>"status"in d&&typeof d.status=="string"?d.status==="error"||d.status==="failed":!1),u=r.resultCode?parseInt(r.resultCode,10):null,p=u!==null&&!isNaN(u)&&u>=200,_=l||p?"error":"success";o.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:r.objective,status:_,children:c,error_message:_==="error"?r.errorMessage??null:null,error_code:_==="error"?r.reasonCode??null:null,result_code:r.resultCode??null,bifurcation_context:[],approach_reason:K(r.summary),one_liner:r.oneLiner??null})}return{instructions:o}}function ee(t,e){let s;try{s=Q(t)}catch{return 0}let i=0,n=s.filter(o=>/^\d+$/.test(o)).sort((o,r)=>Number(o)-Number(r));for(let o of n){let r=N(t,o),c=N(r,"logs");if(!Ie(c))continue;let a;try{a=Q(c)}catch{continue}let l=a.filter(_=>_.endsWith("-actions.ndjson")).sort((_,d)=>(parseInt(_,10)||0)-(parseInt(d,10)||0)),u=[];for(let _ of l){let d=e.readActions(N(c,_));d.length&&u.push({objective:e.objective??"",records:d})}if(u.length===0)continue;let{instructions:p}=L(u,e.vars??{},e.screenshotBaseUrl??"",e.extMap,{keepFailedActions:!0});if(p.length!==0)try{let _=N(r,"auteur");ve(_,{recursive:!0}),ye(N(_,"execution.json"),JSON.stringify(e.buildBlob(p),null,2)),i++,e.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:o,instructions:p.length})}catch(_){e.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:o,error:_ instanceof Error?_.message:String(_)})}}return i}var te=ae(ce(),1);import{createWriteStream as Ae}from"fs";import{readFile as Re}from"fs/promises";import{join as Pe,basename as xe}from"path";import{tmpdir as ke}from"os";var Le=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ie(t){let e=Pe(ke(),`${xe(t)}_artifacts.zip`);return new Promise((s,i)=>{let n=Ae(e),o=(0,te.default)("zip",{zlib:{level:6}});n.on("close",()=>s(e)),o.on("error",i),o.pipe(n),o.glob("**/*",{cwd:t,ignore:Le}),o.finalize()})}async function ne(t){return Re(t)}async function Se(t,e){return oe(B(t,e))}function Te(t){return{key:"artifacts",content_type:"application/zip",filename:`${t}.evidence`}}var re=class{config;controller;testId;constructor(e){this.config=e,this.controller=new M(e.controllerBaseUrl,e.auth),this.testId=e.testId}log(e,s,i,n){this.config.log?.(e,s,i,n)}async execute(){let{onProgress:e}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let s=this.config.evidence,i=null;if(this.config.shouldUploadArtifacts!==!1){e("convert","running");let c=this.collectNdjsonPerRun(),a=c.reduce((m,f)=>m+f.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:c.length});let l=this.config.variables??{};this.log("info","PIPELINE_CONVERT_VARS","Variables for template resolution",{keys:Object.keys(l)});let{instructions:u}=c.length>0?L(c,l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),_=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let d=E(this.config.sessionDir,"execution.json");O(d,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:d});let g=s?.packTestDir??this.config.evidenceRead?.packTestDir;if(g){let m=E(g,"auteur");D(m,{recursive:!0}),O(E(m,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(m,"execution.json")}),this.deriveArchivedAttemptBlobs(g,l)}if(e("convert","done"),s)i=_;else{e("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let m=null,f;try{m=await ie(this.config.sessionDir),f=await ne(m),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(f.length/1024/1024).toFixed(1),path:m}),e("zip","done",`${(f.length/1024/1024).toFixed(1)}MB`)}finally{m&&await Oe(m).catch(()=>{})}e("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(f.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([R(h.urls.artifacts.upload_url,f,"application/zip"),R(h.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}}else{let c=this.collectNdjsonPerRun(),a=this.config.variables??{},{instructions:l}=c.length>0?L(c,a,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0}):{instructions:[]},u=this.buildExecutionEnvelope(l),p=E(this.config.sessionDir,"execution.json");O(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let d=E(_,"auteur");D(d,{recursive:!0});let g=this.readAuthoredExecution();O(E(d,"execution.json"),g??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(d,"execution.json"),source:g?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(_,a)}e("convert","skipped"),e("zip","skipped"),e("presign","skipped"),e("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){e("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),e("atomic_replace","done")}catch(c){let a=c instanceof Error?c.message:String(c);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),e("atomic_replace","failed",a),c}}else e("atomic_replace","skipped");let n,o;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){e("commit_lock","running");let c=await this.config.onCommitLock();if(c.ok)n=c.testcaseId,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:n??"none"}),e("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:c.reason,message:c.message}),e("commit_lock","failed",`${c.reason??"unknown"}: ${c.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${c.reason??"unknown"}`}}else e("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){e("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let c=new F(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(n=(await c.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:n??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(n)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}e("finalize","done")}else e("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(n&&this.config.shareApiBaseUrl)try{o=await this.generateShareLink(n),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:o})}catch(c){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(c)})}if(s&&i){let c=null;e("zip","running");try{await s.sealFn({testcaseId:n,shareId:o}),c=s.sealedPackPath?await oe(s.sealedPackPath):await Se(s.executionId,s.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:s.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(c.length/1024/1024).toFixed(1)})}catch(a){let l=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:s.executionId,error:l})}if(c){e("zip","done",`${(c.length/1024/1024).toFixed(1)}MB`),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Te(s.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(c.length/1024/1024).toFixed(1),blob_size_kb:+(i.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,c,"application/zip"),R(a.urls.blob.upload_url,i,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),e("upload","done")}else{e("zip","skipped"),e("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);e("presign","done"),e("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(i.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,i,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),e("upload","done")}}let r;if(this.config.codeExport?.enabled&&n){let c=!1;try{await this.triggerCodeExport(n),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),c=!0}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:l}),e("code_export","failed",`trigger failed: ${l}`)}if(c){e("code_export","running","Waiting for code generation\u2026");try{r=await this.pollAndDownloadCode(n,e),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:r}),e("code_export","done",r)}catch(a){let l=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:l}),e("code_export","failed",l)}}}else e("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:n,shareId:o,codeExportDir:r}}catch(s){return{success:!1,testId:this.testId,error:s instanceof Error?s.message:String(s)}}}async runCodeExport(e,s){let i=s??this.config.onProgress,n=!1;try{await this.triggerCodeExport(e),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:e}),n=!0}catch(o){let r=o instanceof Error?o.message:String(o);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:r}),i("code_export","failed",`trigger failed: ${r}`)}if(n){i("code_export","running","Waiting for code generation\u2026");try{let o=await this.pollAndDownloadCode(e,i);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),i("code_export","done",o),o}catch(o){let r=o instanceof Error?o.message:String(o);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:r}),i("code_export","failed",r);return}}}deriveArchivedAttemptBlobs(e,s){try{let i=ee(e,{readActions:n=>this.readNdjsonFromFile(n),buildBlob:n=>this.buildExecutionEnvelope(n),objective:this.config.firstObjective,vars:s,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(n,o,r,c)=>this.log(n,o,r,c)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let e=[],s=this.config.runObjectives??[],i=this.config.runMetadata??[],n=this.config.evidence??this.config.evidenceRead;for(let o=0;o<this.config.runDirs.length;o++){let r=this.config.runDirs[o],c=s[o]||this.config.firstObjective,a=i[o],l=n?this.readNdjsonFromFile(E(n.packTestDir,"logs",`${n.runIndices?.[o]??o}-actions.ndjson`)):this.readNdjsonFromDir(r);l.length>0&&e.push({objective:c,records:l,resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}if(e.length===0){let o=E(this.config.sessionDir,"runs");if(j(o))try{let c=Ne(o,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of c){let l=E(o,a),u=this.readNdjsonFromDir(l);u.length>0&&e.push({objective:this.config.firstObjective,records:u})}}catch{}}return e}readNdjsonFromDir(e){let s=[E(e,"run-test","actions.ndjson"),E(e,"actions.ndjson")];for(let i of s)if(j(i))return this.readNdjsonFromFile(i);return[]}readNdjsonFromFile(e){let s=[];if(!j(e))return s;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:e});let i=se(e,"utf-8");for(let n of i.split(`
5
+ `)){let o=n.trim();if(o)try{s.push(JSON.parse(o))}catch{}}return s}async generateShareLink(e){let s=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:s,testcase_id:e});let i={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[e],entityType:"Test Case Details",expiresAt:7})},n=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:n,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let o=n?await this.config.authResolver.fetch(s,i):await k(s,{...i,headers:{...i.headers,Authorization:this.buildAuthHeader()}});if(!o.ok)throw new Error(`Share link API failed: ${o.status} ${await o.text()}`);let r=await o.json();if(!r.shareId)throw new Error("Share link API returned no shareId");return r.shareId}async triggerCodeExport(e){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:s,body:i}=z({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e,codeExport:this.config.codeExport});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:s});let n={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(i)},o=this.config.authResolver?await this.config.authResolver.fetch(s,n):await k(s,{...n,headers:{...n.headers,Authorization:this.buildAuthHeader()}});if(!o.ok)throw new Error(`Code export failed: ${o.status} ${await o.text()}`)}async pollAndDownloadCode(e,s){let i=V({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:e}),n=this.config.exitTimeoutMs??3e5,o=5e3,r=Date.now()+n;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:i,timeout_ms:n});let c=(a,l)=>this.config.authResolver?this.config.authResolver.fetch(a,l):k(a,{...l,headers:{...l?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<r;){let a=await c(i,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let d=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:d.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(d=>d.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),s("code_export","running","Waiting for code generation\u2026"),await this.sleep(o);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),s("code_export","running","Generating code\u2026"),await this.sleep(o);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");D(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:_}),s("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let d of u.url){let g=E(_,d.file_name),m=await k(d.file_url);if(!m.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:d.file_name,status:m.status});continue}let f=await m.text();O(g,f,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:d.file_name,size_bytes:f.length})}return _}throw new Error("Code export timed out")}sleep(e){return new Promise(s=>setTimeout(s,e))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:U(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let e=this.config.authoredExecutionPath;if(!e)return null;try{let s=se(e,"utf8");return JSON.parse(s),s}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:e}),null}}buildExecutionEnvelope(e){let s=this.config.runStatuses.every(a=>a==="passed")?"success":"error",i=this.config.variableIds??{},n=[];if(this.config.variables)for(let[a,l]of Object.entries(this.config.variables)){if(l.secret)continue;let u=a.startsWith("global.")?a.slice(7):a;n.push({id:i[u]??0,name:u,value:l.value,session_value:l.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let o=[],r=[],c=new Set;for(let a of this.collectNdjsonPerRun())for(let l of a.records)if(l.output_variable&&l.output_value!=null&&o.push({name:l.output_variable,value:String(l.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),l.action_type==="upload_files"){let u=w(l.action_params);if(u){let p=u.media_id||u.media_url;if(!c.has(p)){c.add(p),r.push({media_url:u.media_url,media_id:u.media_id,name:u.name,type:u.type});let _=T(u.name);o.push({name:G(u.name),value:_,value_type:"string",variable_description:`variable for ${_}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:s,commit_id:this.config.commitId,instructions:e,modules:[],uploaded_files:r,test_params:[],test_level_variables:JSON.stringify(o),test_global_variables:n,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Se as a,Te as b,re as c};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as o}from"./chunk-ZLCZDAEX.js";import{a as n}from"./chunk-CH273NAE.js";import{existsSync as c}from"fs";function s(t,r){(t.err??t.out)(`error: ${r}`)}function a(t,r){let e=n(t);return c(e)?e:(s(r,"no context store here (run `kane-cli context ingest <files>` first)"),null)}async function p(t,r,e){return e?!0:t.isTTY?t.confirm(`${r}?`):(s(t,`refusing to ${r} without --yes (no TTY to confirm)`),!1)}function d(){return{out:t=>process.stdout.write(t+`
2
+ import{c as o}from"./chunk-5DT7PIGB.js";import{a as n}from"./chunk-CH273NAE.js";import{existsSync as c}from"fs";function s(t,r){(t.err??t.out)(`error: ${r}`)}function a(t,r){let e=n(t);return c(e)?e:(s(r,"no context store here (run `kane-cli context ingest <files>` first)"),null)}async function p(t,r,e){return e?!0:t.isTTY?t.confirm(`${r}?`):(s(t,`refusing to ${r} without --yes (no TTY to confirm)`),!1)}function d(){return{out:t=>process.stdout.write(t+`
3
3
  `),err:t=>process.stderr.write(t+`
4
4
  `),isTTY:o(),confirm:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{let i=await e.question(`${t} [y/N] `);return/^y(es)?$/i.test(i.trim())}finally{e.close()}},ask:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{return await e.question(t)}finally{e.close()}}}}export{s as a,a as b,p as c,d};
@@ -1,7 +1,7 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as E}from"./chunk-TDPWFYTJ.js";import{a as S}from"./chunk-DXV6MBTD.js";import{a as v}from"./chunk-JRMDGLLT.js";import{e as _,j as y}from"./chunk-C4G7RVJ6.js";import{spawn as T,execSync as h}from"child_process";import{appendFileSync as N,existsSync as m,mkdirSync as O}from"fs";import{homedir as M}from"os";import{join as I,resolve as i,dirname as p}from"path";import{fileURLToPath as L}from"url";import{createInterface as C}from"readline";async function*R(e){let n=C({input:e,crlfDelay:1/0});for await(let s of n){let a=s.trim();if(a)try{let t=JSON.parse(a);t&&typeof t.type=="string"&&(yield t)}catch{}}}function x(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function A(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function w(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=p(L(import.meta.url));function P(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function V(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",s={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},a=`${process.platform}-${process.arch}`,t=s[a];if(t)for(let r of t){let o=[i(c,"..","node_modules",r,"bin",n),i(c,"..","..","node_modules",r,"bin",n),i(c,"..","..","..","node_modules",r,"bin",n),i(c,"..","..","..","..","node_modules",r,"bin",n)];for(let u of o)if(m(u))return{cmd:u,args:[]}}let d=[i(c,"bin",n),i(c,"..","bin",n),i(c,"..","..","..","..","v16-runner","dist",n),i(c,"..","..","..","v16-runner","dist",n),i(c,"..","..","v16-runner","dist",n),i(process.cwd(),"v16-runner","dist",n),i(process.cwd(),"..","v16-runner","dist",n)];for(let r of d)if(m(r))return{cmd:r,args:[]};let l=[i(c,"..","..","v16-runner"),i(c,"..","..","..","..","v16-runner"),i(c,"..","..","..","v16-runner"),i(process.cwd(),"v16-runner"),i(process.cwd(),"..","v16-runner")];for(let r of l)if(m(i(r,"main.py"))){for(let u of[i(r,".venv","bin","python"),i(r,"..",".venv","bin","python"),i(r,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:r};let o=P();if(o)return{cmd:o,args:["main.py"],cwd:r}}return null}function b(e){return e?I(M(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function k(e){let n=T(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let s=b(e.sessionId);if(s)try{O(p(s),{recursive:!0})}catch{}let a=1e5,t="";n.stderr.on("data",u=>{if(t+=u.toString(),t.length>a&&(t=t.slice(-a)),s)try{N(s,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,r=new Promise(u=>{n.on("close",(f,g)=>{d=f,l=g?String(g):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),o=R(n.stdout);return{child:n,events:o,getStderr:()=>t,getExitCode:()=>d,getExitSignal:()=>l,exited:r}}function U(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8");let s=v(e.environment);n.V16_SERVER_API_HOST=s.v16ServerHost,n.ATMS_URL=s.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let a=x(e.mode??"testing");Object.assign(n,a.set);for(let o of a.unset)delete n[o];let t=new S().load(),d=w(e.assertionMode??(t.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let o of d.unset)delete n[o];let l=e.finalValidation??t.final_validation,r=A(l);Object.assign(n,r.set);for(let o of r.unset)delete n[o];return n}function K(e,n){let s=v(n?.environment),a=E();a!==void 0&&e.ap_mode===void 0&&(e.ap_mode=a),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=y),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:s.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:s.mediaArtefactsHost,org_id:e.org_id,media_dir:_})}function Z(e,n){let s=V();if(!s)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(s)}
3
- `);let a=U({environment:n?.environment,mode:n?.mode,assertionMode:n?.assertionMode,finalValidation:n?.finalValidation,username:e.username,accessKey:e.access_key,sessionId:e.session_id});K(e,{environment:n?.environment});let t=k({env:a,runner:s,log:n?.log,sessionId:e.session_id}),d=t.child;d.stdin.write(JSON.stringify(e)+`
2
+ import{a as E}from"./chunk-TDPWFYTJ.js";import{a as S}from"./chunk-AECMF3T2.js";import{a as v}from"./chunk-O75ZHGJG.js";import{e as _,j as y}from"./chunk-ZUGCHQFC.js";import{spawn as T,execSync as h}from"child_process";import{appendFileSync as N,existsSync as m,mkdirSync as O}from"fs";import{homedir as M}from"os";import{join as I,resolve as i,dirname as p}from"path";import{fileURLToPath as P}from"url";import{createInterface as C}from"readline";async function*R(e){let n=C({input:e,crlfDelay:1/0});for await(let s of n){let a=s.trim();if(a)try{let t=JSON.parse(a);t&&typeof t.type=="string"&&(yield t)}catch{}}}function x(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function A(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function w(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=p(P(import.meta.url));function L(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function V(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",s={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},a=`${process.platform}-${process.arch}`,t=s[a];if(t)for(let r of t){let o=[i(c,"..","node_modules",r,"bin",n),i(c,"..","..","node_modules",r,"bin",n),i(c,"..","..","..","node_modules",r,"bin",n),i(c,"..","..","..","..","node_modules",r,"bin",n)];for(let u of o)if(m(u))return{cmd:u,args:[]}}let d=[i(c,"bin",n),i(c,"..","bin",n),i(c,"..","..","..","..","v16-runner","dist",n),i(c,"..","..","..","v16-runner","dist",n),i(c,"..","..","v16-runner","dist",n),i(process.cwd(),"v16-runner","dist",n),i(process.cwd(),"..","v16-runner","dist",n)];for(let r of d)if(m(r))return{cmd:r,args:[]};let l=[i(c,"..","..","v16-runner"),i(c,"..","..","..","..","v16-runner"),i(c,"..","..","..","v16-runner"),i(process.cwd(),"v16-runner"),i(process.cwd(),"..","v16-runner")];for(let r of l)if(m(i(r,"main.py"))){for(let u of[i(r,".venv","bin","python"),i(r,"..",".venv","bin","python"),i(r,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:r};let o=L();if(o)return{cmd:o,args:["main.py"],cwd:r}}return null}function b(e){return e?I(M(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function U(e){let n=T(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let s=b(e.sessionId);if(s)try{O(p(s),{recursive:!0})}catch{}let a=1e5,t="";n.stderr.on("data",u=>{if(t+=u.toString(),t.length>a&&(t=t.slice(-a)),s)try{N(s,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,r=new Promise(u=>{n.on("close",(f,g)=>{d=f,l=g?String(g):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),o=R(n.stdout);return{child:n,events:o,getStderr:()=>t,getExitCode:()=>d,getExitSignal:()=>l,exited:r}}function k(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8",n.PYTHONUTF8="1");let s=v(e.environment);n.V16_SERVER_API_HOST=s.v16ServerHost,n.ATMS_URL=s.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let a=x(e.mode??"testing");Object.assign(n,a.set);for(let o of a.unset)delete n[o];let t=new S().load(),d=w(e.assertionMode??(t.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let o of d.unset)delete n[o];let l=e.finalValidation??t.final_validation,r=A(l);Object.assign(n,r.set);for(let o of r.unset)delete n[o];return n}function K(e,n){let s=v(n?.environment),a=E();a!==void 0&&e.ap_mode===void 0&&(e.ap_mode=a),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=y),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:s.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:s.mediaArtefactsHost,org_id:e.org_id,media_dir:_})}function Z(e,n){let s=V();if(!s)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(s)}
3
+ `);let a=k({environment:n?.environment,mode:n?.mode,assertionMode:n?.assertionMode,finalValidation:n?.finalValidation,username:e.username,accessKey:e.access_key,sessionId:e.session_id});K(e,{environment:n?.environment});let t=U({env:a,runner:s,log:n?.log,sessionId:e.session_id}),d=t.child;d.stdin.write(JSON.stringify(e)+`
4
4
  `);let l=b(e.session_id);if(l)try{O(p(l),{recursive:!0}),N(l,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
5
5
  `)}catch{}return{child:d,events:t.events,sendUserResponse(r){let o=JSON.stringify({type:"user_response",answer:r});try{d.stdin.write(o+`
6
6
  `)}catch{}},sendCancel(r){let o=JSON.stringify({type:"cancel",reason:r});try{d.stdin.write(o+`
7
- `)}catch{}},cancel(){d.kill("SIGTERM")},get stderr(){return t.getStderr()},get exitCode(){return t.getExitCode()},get exitSignal(){return t.getExitSignal()},exited:t.exited}}export{V as a,k as b,U as c,K as d,Z as e};
7
+ `)}catch{}},cancel(){d.kill("SIGTERM")},get stderr(){return t.getStderr()},get exitCode(){return t.getExitCode()},get exitSignal(){return t.getExitSignal()},exited:t.exited}}export{V as a,U as b,k as c,K as d,Z as e};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $}from"./chunk-3FN5VJMV.js";import{e as D}from"./chunk-UI7KULSI.js";import{a as E}from"./chunk-NLCCBXXV.js";function U(e){return["completed","failed","ended","stopped"].includes(e.trim().toLowerCase())}function je(e){return["ended","stopped"].includes(e.trim().toLowerCase())}function q(e){return{requestId:e.requestId,objective:e.objective,status:"",turnActive:!1,scenarios:[],thinking:"",thinkingLog:[],chatLog:[],progress:0}}function Re(e){return e.pendingClarification===void 0?e:{...e,pendingClarification:void 0}}function Ce(e){return{...e,turnActive:!0,error:void 0,thinking:"",thinkingLog:[]}}function P(e,t){switch(t.type){case"thinking":return{...e,status:"thinking",thinking:e.thinking+t.delta};case"thinking_done":return{...e,thinkingLog:[...e.thinkingLog,{text:e.thinking,tookMs:t.tookMs}],thinking:""};case"progress":return{...e,progress:t.pct};case"snapshot":return{...e,scenarios:t.data.scenarios,status:t.data.status,headline:t.data.headline??e.headline};case"chat":return{...e,turnActive:!1,chatLog:[...e.chatLog,{role:"model",text:t.text}]};case"clarification":return{...e,turnActive:!1,chatLog:[...e.chatLog,{role:"model",text:t.text}],pendingClarification:t.text};case"limit":return{...e,limits:{scenarioLimit:t.scenarioLimit,perScenarioLimit:t.perScenarioLimit}};case"error":return{...e,error:t.message};case"done":return{...e,status:t.status,turnActive:!1,error:t.status==="failed"&&!e.error?"generation failed":e.error}}}function H(e,t){let n=[],i=e.type??"",d=e.status??"";if(i==="ping")return n;switch(i){case"thinking_token":typeof e.data=="string"&&n.push({type:"thinking",delta:e.data});break;case"thinking_stopped":{let r=e.data??{},o=se(r.time_taken);n.push({type:"thinking_done",text:typeof e.data=="string"?e.data:r.message??"",tookMs:o});break}case"progress":{let r=e.data??{};typeof r.progress=="number"&&n.push({type:"progress",pct:r.progress});break}case"clarification":{let r=e.data??{};typeof r.message=="string"&&n.push({type:"clarification",text:r.message});break}case"chatting_stopped":{let r=e.data??{};typeof r.message=="string"&&r.message.length>0&&n.push({type:"chat",text:r.message});break}case"limit_update":{let r=e.data??{},o=r.test_cases_limit??e.test_cases_limit,p=r.per_scenario_test_cases_limit??e.per_scenario_test_cases_limit;n.push({type:"limit",scenarioLimit:o,perScenarioLimit:p});break}case"error":{let r=typeof e.data=="string"?e.data:e.data?.message??"generation error";n.push({type:"error",message:r});break}case"request_cancelled":return n.push({type:"done",status:"stopped"}),n;case"session_ended":return n.push({type:"done",status:"ended"}),n;default:break}if(Array.isArray(e.scenarios)&&n.push({type:"snapshot",data:{requestId:t,status:d,headline:e.headline,scenarios:e.scenarios}}),d&&U(d)){let r=d.trim().toLowerCase();n.push({type:"done",status:r})}return n}function se(e){if(!e)return;let t=/^([\d.]+)(ms|s)?$/.exec(e.trim());if(!t)return;let n=Number(t[1]);if(Number.isFinite(n))return t[2]==="ms"?Math.round(n):Math.round(n*1e3)}var v=class extends Error{constructor(t){super(t),this.name="AuthError"}},M=class extends Error{constructor(t){super(t),this.name="ForbiddenError"}},I=class extends Error{constructor(t){super(t),this.name="InsufficientCreditsError"}},k=class extends Error{constructor(n,i){super(n);this.cause=i;this.name="TransportError"}};function x(e,t){let n=t?.message??t?.error??`HTTP ${e}`;return e===401?new v(n):e===403?t?.key==="insufficient_credits"?new I(n):new M(n):new k(n)}async function*J(e){let t=e.fetchImpl??fetch,n=e.maxRetries??5,i=e.maxBackoffMs??3e4,d=e.connectTimeoutMs??1e4,r=0,o=!1;for(;;){if(e.signal.aborted)return;let p=new AbortController,a=()=>p.abort();e.signal.addEventListener("abort",a,{once:!0});let c=setTimeout(()=>p.abort(),d),g;try{g=await t(e.url,{method:"GET",headers:{Authorization:await e.authHeader(),Accept:"text/event-stream"},signal:p.signal})}catch(w){if(clearTimeout(c),e.signal.removeEventListener("abort",a),e.signal.aborted)return;if(++r>n)throw new k("SSE connect failed",w);await O(F(r,i));continue}if(clearTimeout(c),!g.ok){e.signal.removeEventListener("abort",a);let w=await oe(g);if(g.status===401&&o){if(++r>n)throw x(401,w);await O(F(r,i));continue}throw x(g.status,w)}if(!g.body)throw e.signal.removeEventListener("abort",a),new k("SSE response had no body");o=!0,r=0;let m=g.body.getReader(),h=new TextDecoder("utf-8"),b="";try{for(;;){if(e.signal.aborted){await m.cancel().catch(()=>{});return}let{done:w,value:s}=await m.read();if(w)break;b+=h.decode(s,{stream:!0});let f;for(;(f=b.indexOf(`
2
+ import{a as $}from"./chunk-SL6PCVM2.js";import{e as D}from"./chunk-OUJQVBUT.js";import{a as E}from"./chunk-NLCCBXXV.js";function U(e){return["completed","failed","ended","stopped"].includes(e.trim().toLowerCase())}function je(e){return["ended","stopped"].includes(e.trim().toLowerCase())}function q(e){return{requestId:e.requestId,objective:e.objective,status:"",turnActive:!1,scenarios:[],thinking:"",thinkingLog:[],chatLog:[],progress:0}}function Re(e){return e.pendingClarification===void 0?e:{...e,pendingClarification:void 0}}function Ce(e){return{...e,turnActive:!0,error:void 0,thinking:"",thinkingLog:[]}}function P(e,t){switch(t.type){case"thinking":return{...e,status:"thinking",thinking:e.thinking+t.delta};case"thinking_done":return{...e,thinkingLog:[...e.thinkingLog,{text:e.thinking,tookMs:t.tookMs}],thinking:""};case"progress":return{...e,progress:t.pct};case"snapshot":return{...e,scenarios:t.data.scenarios,status:t.data.status,headline:t.data.headline??e.headline};case"chat":return{...e,turnActive:!1,chatLog:[...e.chatLog,{role:"model",text:t.text}]};case"clarification":return{...e,turnActive:!1,chatLog:[...e.chatLog,{role:"model",text:t.text}],pendingClarification:t.text};case"limit":return{...e,limits:{scenarioLimit:t.scenarioLimit,perScenarioLimit:t.perScenarioLimit}};case"error":return{...e,error:t.message};case"done":return{...e,status:t.status,turnActive:!1,error:t.status==="failed"&&!e.error?"generation failed":e.error}}}function H(e,t){let n=[],i=e.type??"",d=e.status??"";if(i==="ping")return n;switch(i){case"thinking_token":typeof e.data=="string"&&n.push({type:"thinking",delta:e.data});break;case"thinking_stopped":{let r=e.data??{},o=se(r.time_taken);n.push({type:"thinking_done",text:typeof e.data=="string"?e.data:r.message??"",tookMs:o});break}case"progress":{let r=e.data??{};typeof r.progress=="number"&&n.push({type:"progress",pct:r.progress});break}case"clarification":{let r=e.data??{};typeof r.message=="string"&&n.push({type:"clarification",text:r.message});break}case"chatting_stopped":{let r=e.data??{};typeof r.message=="string"&&r.message.length>0&&n.push({type:"chat",text:r.message});break}case"limit_update":{let r=e.data??{},o=r.test_cases_limit??e.test_cases_limit,p=r.per_scenario_test_cases_limit??e.per_scenario_test_cases_limit;n.push({type:"limit",scenarioLimit:o,perScenarioLimit:p});break}case"error":{let r=typeof e.data=="string"?e.data:e.data?.message??"generation error";n.push({type:"error",message:r});break}case"request_cancelled":return n.push({type:"done",status:"stopped"}),n;case"session_ended":return n.push({type:"done",status:"ended"}),n;default:break}if(Array.isArray(e.scenarios)&&n.push({type:"snapshot",data:{requestId:t,status:d,headline:e.headline,scenarios:e.scenarios}}),d&&U(d)){let r=d.trim().toLowerCase();n.push({type:"done",status:r})}return n}function se(e){if(!e)return;let t=/^([\d.]+)(ms|s)?$/.exec(e.trim());if(!t)return;let n=Number(t[1]);if(Number.isFinite(n))return t[2]==="ms"?Math.round(n):Math.round(n*1e3)}var v=class extends Error{constructor(t){super(t),this.name="AuthError"}},M=class extends Error{constructor(t){super(t),this.name="ForbiddenError"}},I=class extends Error{constructor(t){super(t),this.name="InsufficientCreditsError"}},k=class extends Error{constructor(n,i){super(n);this.cause=i;this.name="TransportError"}};function x(e,t){let n=t?.message??t?.error??`HTTP ${e}`;return e===401?new v(n):e===403?t?.key==="insufficient_credits"?new I(n):new M(n):new k(n)}async function*J(e){let t=e.fetchImpl??fetch,n=e.maxRetries??5,i=e.maxBackoffMs??3e4,d=e.connectTimeoutMs??1e4,r=0,o=!1;for(;;){if(e.signal.aborted)return;let p=new AbortController,a=()=>p.abort();e.signal.addEventListener("abort",a,{once:!0});let c=setTimeout(()=>p.abort(),d),g;try{g=await t(e.url,{method:"GET",headers:{Authorization:await e.authHeader(),Accept:"text/event-stream"},signal:p.signal})}catch(w){if(clearTimeout(c),e.signal.removeEventListener("abort",a),e.signal.aborted)return;if(++r>n)throw new k("SSE connect failed",w);await O(F(r,i));continue}if(clearTimeout(c),!g.ok){e.signal.removeEventListener("abort",a);let w=await oe(g);if(g.status===401&&o){if(++r>n)throw x(401,w);await O(F(r,i));continue}throw x(g.status,w)}if(!g.body)throw e.signal.removeEventListener("abort",a),new k("SSE response had no body");o=!0,r=0;let m=g.body.getReader(),h=new TextDecoder("utf-8"),b="";try{for(;;){if(e.signal.aborted){await m.cancel().catch(()=>{});return}let{done:w,value:s}=await m.read();if(w)break;b+=h.decode(s,{stream:!0});let f;for(;(f=b.indexOf(`
3
3
 
4
4
  `))>=0;){let u=b.slice(0,f);b=b.slice(f+2);let l=ie(u);l&&(yield l)}}}catch(w){if(e.signal.aborted)return;if(++r>n)throw new k("SSE stream dropped",w);await O(F(r,i));continue}finally{e.signal.removeEventListener("abort",a)}return}}function ie(e){let t="message",n="";for(let i of e.split(`
5
5
  `))i.startsWith("event:")?t=i.slice(6).trim():i.startsWith("data:")&&(n+=i.slice(5).trim());if(t!=="message"||!n)return null;try{let i=Buffer.from(n,"base64").toString("utf-8");return JSON.parse(i)}catch{return null}}function F(e,t){return Math.min(t,1e3*2**(e-1))}function O(e){return new Promise(t=>setTimeout(t,e))}async function oe(e){try{return await e.clone().json()}catch{return}}function W(e,t){t?.length&&(e.append("files",t.map(n=>n.fileKey).join(",")),e.append("gemini_metadata",JSON.stringify(t.map(n=>({fileData:{fileUri:n.geminiUri,mimeType:n.mimeType}})))))}function Ue(e,t={}){let n=t.fetchImpl??fetch,i=new Map,d=!0;async function r(){let s=await e.authResolver.resolve();if(!s)throw new v("unauthorized; run `kane-cli login`");return E(s.username,s.access_key)}function o(s){return`${e.baseUrl}${s}`}async function p(s){if(!s.ok){let f;try{f=await s.clone().json()}catch{f=void 0}throw x(s.status,f)}return s.json()}function a(s){let f=s?.data??s;return{request_id:f.request_id??f.id,status:f.status??""}}function c(s,f,u,l){let y=q({requestId:s,objective:f});l&&(y=P(y,{type:"snapshot",data:l}),l.status==="cleaned_up"&&(y={...y,error:"session was reaped (cleaned_up) \u2014 continuing will destructively regenerate"}));let S=new AbortController;u&&(u.aborted?S.abort():u.addEventListener("abort",()=>S.abort(),{once:!0})),i.set(s,S);let A={requestId:s,state:y,events:void 0};return A.events=(async function*(){try{let C=J({url:o(`/requests/${s}/sse`),authHeader:r,signal:S.signal,log:e.log,fetchImpl:n});for await(let L of C)for(let z of H(L,s))A.state=P(A.state,z),yield z}finally{i.delete(s)}})(),A}async function g(s,f){let u=new FormData;u.append("prompt",s.prompt),d=s.memoryEnhancement??!0,u.append("memory_enhancement",String(d)),s.scenarioLimit!==void 0&&u.append("test_scenario_limit",String(s.scenarioLimit)),s.perScenarioLimit!==void 0&&u.append("per_scenario_test_cases_limit",String(s.perScenarioLimit));let l=s.projectId??e.projectId,y=s.folderId??e.folderId;l&&u.append("project_id",l),y&&u.append("folder_id",y),W(u,s.attachments);let S=await n(o("/requests"),{method:"POST",headers:{Authorization:await r()},body:u}),A=await p(S),{request_id:C}=a(A),L=String(C);return c(L,s.prompt,f)}async function m(s,f){let u=await n(o(`/requests/${s}`),{method:"GET",headers:{Authorization:await r()}}),l=await p(u),y=l?.data??l,S={requestId:s,status:y.status??"",headline:y.headline,scenarios:Array.isArray(y.scenarios)?y.scenarios:[]};return c(s,"",f,S)}async function h(s,f,u){let l=new FormData;l.append("prompt",f),l.append("chat_enabled","true"),l.append("memory_enhancement",String(d)),u?.mappings&&l.append("mappings",JSON.stringify(u.mappings)),W(l,u?.attachments);let y=await n(o(`/requests/${s}`),{method:"PUT",headers:{Authorization:await r()},body:l});if(!y.ok){let S;try{S=await y.clone().json()}catch{}throw x(y.status,S)}}async function b(s){i.get(s)?.abort();let u=await n(o(`/requests/${s}/stop`),{method:"DELETE",headers:{Authorization:await r()}});if(!u.ok&&u.status!==404){let l;try{l=await u.clone().json()}catch{}throw x(u.status,l)}}async function w(s){i.get(s)?.abort();let u=await n(o(`/requests/${s}/end`),{method:"DELETE",headers:{Authorization:await r()}});if(!u.ok&&u.status!==404){let l;try{l=await u.clone().json()}catch{}throw x(u.status,l)}}return{start:g,attach:m,chat:h,cancel:b,end:w}}import{statSync as ae,realpathSync as G,existsSync as ce}from"fs";import{extname as ue,resolve as j,isAbsolute as pe}from"path";import{homedir as V}from"os";var de=new Set([".txt",".md",".json",".xml",".jpg",".jpeg",".png",".gif",".bmp",".webp",".pdf",".docx",".csv",".xlsx",".mp3",".wav",".m4a",".webm",".mpeg",".mpga",".mp4",".mov"]),le=50*1024*1024,X=10;function fe(e){return e==="~"?V():e.startsWith("~/")?j(V(),e.slice(2)):e}function Ge(e,t){let n=[],i=[],d=new Set,r=[],o=(()=>{try{return G(j(t))}catch{return j(t)}})(),p=o.endsWith("/")?o:o+"/";for(let a of e){let c=fe(a),g=pe(c)?c:j(t,c);if(!ce(g)){n.push(`Not found: ${a}`);continue}let m;try{m=G(g)}catch{n.push(`Cannot resolve: ${a}`);continue}if(d.has(m))continue;let h;try{h=ae(m)}catch{n.push(`Cannot read: ${a}`);continue}if(!h.isFile()){n.push(`Not a file: ${a}`);continue}if(h.size===0){n.push(`Empty file: ${a}`);continue}let b=ue(m).toLowerCase();if(!de.has(b)){n.push(`Unsupported type ${b||"(none)"}: ${a}`);continue}if(h.size>le){n.push(`Too large (>50MB): ${a}`);continue}m!==o&&!m.startsWith(p)&&i.push(`Outside working dir: ${a}`),d.add(m),r.push(m)}return r.length>X&&n.push(`Too many files: ${r.length} (max ${X})`),{ok:n.length?[]:r,errors:n,warnings:i}}var B=class extends Error{constructor(n){super(n.join("; "));this.errors=n;this.name="AttachmentValidationError"}};async function Xe(e){let{promptText:t,filePaths:n,cwd:i,scenarios:d,isRefine:r,conn:o,deps:p}=e,{ok:a,errors:c,warnings:g}=p.validate(n,i);if(c.length)throw new B(c);e.onValidated?.();let m=a.length?await p.upload(o,a,p.onUpload):[],h=r?p.buildMappings(t,d):void 0;return{promptText:t,mappings:h,attachments:m,warnings:g}}import{readFile as me}from"fs/promises";import{basename as K}from"path";async function ge(e){let t=await e.authResolver.resolve();if(!t)throw new v("unauthorized; run `kane-cli login`");return E(t.username,t.access_key)}async function he(e,t,n={}){let i=n.fetchImpl??fetch,d=await me(t),r=K(t),o=new FormData;o.append("file",new Blob([d]),r),o.append("source","omniBox"),o.append("geminiFileUpload","true");let p=await i(`${e.tmsBaseUrl}/v1/attachment`,{method:"POST",headers:{Authorization:await ge(e)},body:o,signal:n.signal});if(!p.ok){let h;try{h=await p.clone().json()}catch{}throw x(p.status,h)}let a=await p.json(),c=a?.data??a,g=c?.gemini_response?.uri,m=c?.gemini_response?.mimeType;if(!c?.file_key||!g){let h=c&&typeof c=="object"?Object.keys(c).join(","):typeof c,b=(()=>{try{return JSON.stringify(c).slice(0,500)}catch{return"<unserializable>"}})();throw new Error(`attachment upload for ${r} returned no file_key/gemini uri \u2014 status ${p.status}, body keys: [${h}], raw: ${b}`)}return{fileName:c.file_name??r,fileKey:c.file_key,geminiUri:g,mimeType:m??"application/octet-stream"}}async function tt(e,t,n,i={}){let d=[];for(let r=0;r<t.length;r++){if(i.signal?.aborted)throw Object.assign(new Error("upload aborted"),{name:"AbortError"});let o=K(t[r]);n?.({file:o,index:r+1,total:t.length,status:"uploading"});try{d.push(await he(e,t[r],i)),n?.({file:o,index:r+1,total:t.length,status:"done"})}catch(p){throw n?.({file:o,index:r+1,total:t.length,status:"failed"}),p}}return d}var ye=/@([sS])(\d+)\.([cC])(\d+)/g,be=/@([sS])(\d+)(?!\d)(?!\.[cC]\d)/g;function rt(e,t){let n={},i={};for(let d of e.matchAll(ye)){let r=Number(d[2]),o=Number(d[4]),p=t[r-1];if(!p)continue;n[`s${r}`]=String(p.id);let a=p.test_cases??[];if(a[o-1])for(let c=0;c<o;c++){let g=a[c];g&&(i[`s${r}.c${c+1}`]=String(g.id))}}for(let d of e.matchAll(be)){let r=Number(d[2]),o=t[r-1];o&&(n[`s${r}`]=String(o.id))}if(!(Object.keys(n).length===0&&Object.keys(i).length===0))return{scenario:n,testcase:i}}function R(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(n==null||typeof n!="object")return[];let i=n;if(typeof i.step!="string")return[];let d=typeof i.expected_result=="string"?i.expected_result:typeof i.outcome=="string"?i.outcome:"";t.push({step:i.step,expected:d})}return t}var we=30,Se=300;function Z(){return{mode:"testing",max_steps:we,timeout:Se,variables:{}}}function Q(e){return e.title??`Test case ${e.id}`}function ct(e,t){return $({frontmatter:Z(),heading:Q(t),steps:e.sub_objectives.map(n=>n.objective)})}function Y(e){let t=R(e.manual_steps).map(n=>n.step);return $({frontmatter:Z(),heading:Q(e),steps:t})}import{mkdtempSync as xe,mkdirSync as N,writeFileSync as ee,rmSync as te,renameSync as _e,existsSync as ne,readFileSync as ve}from"fs";import{join as _,resolve as ke}from"path";async function ft(e,t,n,i=Y){(n.redirectBareCwd??!0)&&ke(t)===process.cwd()&&(t=_(t,".testmuai","tests"));let d=T(e.objective)??e.headline,r=T(n.suiteName)??`${T(re(d,4))??"tcg"}-${e.requestId}`,o=r,p=_(t,r);ne(p)&&!Te(p,e.requestId)&&(o=`${r}-${e.requestId}`);let a=_(t,o),c=[],g=new Map;for(let h of e.scenarios){let b=(h.test_cases??[]).filter(Ae);if(b.length===0)continue;let w=T(Ee(h.scode))??T(h.sid)??`s${h.id}`,s=g.get(w)??new Set;g.set(w,s);for(let f of b){let u=T(re(f.title,5))??"case",l=`${u}_test.md`;for(let y=2;s.has(l);y++)l=`${u}-${y}_test.md`;s.add(l),c.push({dir:w,file:l,tc:f})}}if(c.length===0)return{suiteDir:a,paths:[],warning:"no functional test cases generated"};N(t,{recursive:!0});let m=xe(_(t,".tcg-tmp-"));try{N(_(m,"helpers"),{recursive:!0}),ee(_(m,".tcg-suite.json"),JSON.stringify({requestId:e.requestId,suiteName:o}));let h=[],b=new Set;for(let s of c){let f=_(m,s.dir);b.has(f)||(N(f,{recursive:!0}),b.add(f));let u=_(f,s.file);ee(u,i(s.tc)),h.push(u)}ne(a)&&te(a,{recursive:!0,force:!0}),_e(m,a);let w=h.map(s=>s.replace(m,a));return{suiteDir:a,paths:w}}catch(h){try{te(m,{recursive:!0,force:!0})}catch{}throw h}}function Ae(e){return(e.category??"").trim().toLowerCase()==="functional"}function Te(e,t){try{return JSON.parse(ve(_(e,".tcg-suite.json"),"utf-8"))?.requestId===t}catch{return!1}}function T(e){return e&&e.length>0?e:void 0}function re(e,t){return e?e.toLowerCase().replace(/[^a-z0-9]+/g," ").trim().split(/\s+/).filter(Boolean).slice(0,t).join("-"):""}function Ee(e){return e?e.replace(/[^A-Za-z0-9._-]+/g,"-").replace(/^-+|-+$/g,""):""}function ht(e){let t=[];e.title&&t.push(e.title),e.description&&t.push("",e.description);let n=R(e.manual_steps);return n.length>0&&(t.push("","Steps:"),n.forEach((i,d)=>{t.push(`${d+1}. ${i.step}`)})),t.join(`
@@ -0,0 +1,19 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as R}from"./chunk-5EOX4MEY.js";var y={ASR_CMD_START:"info",ASR_CMD_END:"info",ASR_AGENT_SPAWN:"info",ASR_WORK_ITEM_START:"info",ASR_WORK_ITEM_END:"info",ASR_PROPOSAL:"info",ASR_VALIDATE_FAILED:"warn",ASR_COMMIT:"info",ASR_SESSION_PAUSED:"info",ASR_SESSION_RESUMED:"info",ASR_SESSION_COMPLETE:"info",ASR_AGENT_EXIT:"warn",ASR_RECONCILE_PLAN:"info",ASR_RECONCILE_ROW_END:"info",ASR_HIGH_RISK_CI:"warn",ASR_INGEST:"info",ASR_EMBED_DEGRADED:"warn",ASR_CONTEXT_CLONED:"warn",ASR_ERROR:"error",ASR_CRASH:"error",ASR_FSCK_REPORT:"warn"},O={ASR_CMD_START:["source_count","resumed","applied_plan"],ASR_CMD_END:["exit_code","duration_ms","credits_total","work_items_total","work_items_failed"],ASR_AGENT_SPAWN:["tier","duration_ms"],ASR_WORK_ITEM_START:["work_item_index","work_item_count","source_kind"],ASR_WORK_ITEM_END:["work_item_index","work_item_count","outcome","duration_ms","error_domain","error_code"],ASR_PROPOSAL:["item_count","turn_index"],ASR_VALIDATE_FAILED:["error_code","count","turn_index"],ASR_COMMIT:["trusted","derived","archived","items","items_dropped","record_seq"],ASR_SESSION_PAUSED:["pending_questions","pending_proposals"],ASR_SESSION_RESUMED:["resume_count","expired_session_id"],ASR_SESSION_COMPLETE:["duration_ms","credits_total"],ASR_AGENT_EXIT:["exit_code","signal"],ASR_RECONCILE_PLAN:["row_count","add_count","modify_count","archive_count"],ASR_RECONCILE_ROW_END:["row_index","kind","outcome","duration_ms"],ASR_HIGH_RISK_CI:["count"],ASR_INGEST:["work_item_index","work_item_count","format","bytes","media_facts"],ASR_EMBED_DEGRADED:["held"],ASR_CONTEXT_CLONED:[],ASR_ERROR:["error_domain","error_code","exit_code","turn_index"],ASR_CRASH:["error_domain","error_code","error_name"],ASR_FSCK_REPORT:["issue_count","records","pending","codes","issues","issues_truncated"]},b=[[/^(auth_expired|401|preflight_auth|AUTH)/i,"auth"],[/^(credit_denied|402|CREDIT)/i,"credit"],[/^(stream_drop|read_timeout|connect_failed|dns|E(CONN|AI_AGAIN|TIMEDOUT)|network)/i,"network"],[/^(frame_parse|post_terminal_data|eof_without_terminal|turn_id_mismatch|binding_mismatch|schema_invalid|frame_too_large|protocol)/i,"protocol"],[/^(provider_error|http_5\d\d|turn_exhausted|adapter_integrity)/i,"provider"],[/^(STALE_BASIS|R\d+|validation|criteria)/i,"validation"],[/^(CHAIN_ERROR|DERIVED_(MISSING|DRIFT)|NODE_FILE_(MISSING|MISMATCH|CORRUPT)|CARDINALITY_VIOLATION|SUPERSEDE_(UNKNOWN_(OLD|NEW|ECID)|CYCLE)|DOUBLE_SUPERSEDE|NAME_UNKNOWN_TARGET|EDGE_CYCLE|UNKNOWN_(LABEL|FIELD|EDGE_TYPE|EDGE_PROP)|BAD_(CHECK|ENUM)|MISSING_(FIELD|SALIENT)|ILLEGAL_EDGE)$/,"graph"],[/^(BLOB_MISSING|SOURCE_UNKNOWN|SESSION_(LOCKED|EXPIRED|MISSING|LOCK_LOST)|NO_STORE|fsck|store)/i,"store"],[/^(usage|EX2|SOURCE_WITH_RESUME|HIGH_RISK_CI|bad_flag|no_tty)/i,"usage"],[/^exit_\d+_unattributed$/,"unattributed"],[/^agent_(crash|exit)/i,"agent_crash"]];function h(e){let t=(e||"unknown").slice(0,64);for(let[n,r]of b)if(n.test(t))return{error_domain:r,error_code:t};return{error_domain:"cli_crash",error_code:t}}import{randomBytes as C}from"crypto";var M=/^(uc|sc|ac|t|gap|sty)-\d+$/,k="0123456789abcdefghijklmnopqrstuvwxyz";function $(e){let t="",n=C(e);for(let r=0;r<e;r++)t+=k[n[r]%36];return t}function J(e=new Date){let t=(r,o)=>String(r).padStart(o,"0");return`as-${`${e.getUTCFullYear()}${t(e.getUTCMonth()+1,2)}${t(e.getUTCDate(),2)}T${t(e.getUTCHours(),2)}${t(e.getUTCMinutes(),2)}`}-${$(8)}`}var L=-1,f=0;function Z(e=new Date){let t=e.getTime(),n=C(10);t===L?f=f+1&4095:(L=t,f=(n[0]<<8|n[1])&4095);let r=Buffer.alloc(16);r.writeUIntBE(t,0,6),r[6]=112|f>>8,r[7]=f&255,r[8]=128|n[2]&63,n.copy(r,9,3,10);let o=r.toString("hex");return`${o.slice(0,8)}-${o.slice(8,12)}-${o.slice(12,16)}-${o.slice(16,20)}-${o.slice(20)}`}var G=64,P=128,U=/^[A-Za-z0-9._:@\/-]+$/,F={codes:512},K={ASR_FSCK_REPORT:["issues"]},W=20480,H=0;function B(e,t){if(typeof t=="number"&&Number.isFinite(t)||typeof t=="boolean")return t;if(typeof t!="string")return;let n=e.endsWith("_id")||e==="signal"?P:F[e]??G;if(!(t.length===0||t.length>n)&&U.test(t))return t}function v(e,t,n={}){let r=O[t],o={};for(let i of r){let s=n[i];if(s==null)continue;if(K[t]?.includes(i)){if(typeof s!="string"||s.length===0)continue;let d=s.replace(/[\u0000-\u001F\u007F]/g,"");if(Buffer.byteLength(d,"utf8")>W)continue;o[i]=d;continue}if(i==="items"){let d=Array.isArray(s)?s.filter(N=>typeof N=="string"):[],u=d.filter(N=>M.test(N));u.length>0&&(o.items=u.slice(0,50).join(","));let S=d.length-u.length;S>0&&(o.items_dropped=S);continue}let a=B(i,s);a!==void 0&&(o[i]=a)}if(typeof n.error_code=="string"&&r.includes("error_code")){let{error_domain:i,error_code:s}=h(n.error_code);o.error_code=s,r.includes("error_domain")&&(o.error_domain=i)}return{level:y[t],event:t,message:t,session_id:e.session_id,operation_id:e.operation_id,...e.parent_operation_id?{parent_operation_id:e.parent_operation_id}:{},...e.agent_session_id?{agent_session_id:e.agent_session_id}:{},context_lineage_id:e.context_lineage_id??null,context_instance_id:e.context_instance_id??null,verb:e.verb,mode:e.mode,component:"kane-cli",seq:H++,event_time:new Date().toISOString(),context:o}}import _ from"fs";import X from"path";var V=500,j=7;function w(e){if(e.length!==0)try{let t=R();_.mkdirSync(X.dirname(t),{recursive:!0});let n=e.map(r=>JSON.stringify(r)).join(`
3
+ `)+`
4
+ `;_.appendFileSync(t,n,{flag:"a",mode:384}),q()}catch{}}async function se(e){let t=R(),n=`${t}.claim-${process.pid}`,r;try{_.renameSync(t,n),r=_.readFileSync(n,"utf8")}catch{return}let o=[];for(let i of r.split(`
5
+ `))if(i.trim())try{o.push(JSON.parse(i))}catch{}try{(o.length===0?!0:await e(o))?_.unlinkSync(n):(_.appendFileSync(t,r,{flag:"a",mode:384}),_.unlinkSync(n))}catch{try{_.appendFileSync(t,r,{flag:"a",mode:384}),_.unlinkSync(n)}catch{}}}function q(e=V,t=j){try{let n=R(),o=_.readFileSync(n,"utf8").split(`
6
+ `).filter(d=>d.trim()),i=Date.now()-t*24*3600*1e3,a=o.filter(d=>{try{let u=JSON.parse(d),S=Date.parse(u.event_time??u.timestamp??"");return Number.isNaN(S)||S>=i}catch{return!1}}).slice(-e);a.length!==o.length&&_.writeFileSync(n,a.length?a.join(`
7
+ `)+`
8
+ `:"",{mode:384})}catch{}}var E=null;function de(e){E=e}function le(){return E}var T=()=>!!process.env.KANE_DEV_MODE,c=[],m=!1,D=null,A=null,I=null,l=null,p=[];function Ee(e){if(l=e,e&&p.length>0){let t=p;p=[];for(let n of t)try{e.log(n.level,n.event,n.message,n.context)}catch{}}}function ue(e,t,n,r){if(l){try{l.log(e,t,n,r)}catch{}return}p.push({level:e,event:t,message:n,context:r})}function Se(){return l}function fe(){return m}function pe(e,t){c=c.filter(n=>n.name!==e),c.push({name:e,fn:t})}function Re(e){c=c.filter(t=>t.name!==e)}function ge(e,t){let n=c.find(o=>o.name===e);if(!n)return;c=c.filter(o=>o.name!==e);let r=!0;try{n.fn()}catch(o){r=!1,process.stderr.write(`[exit-manager] cleanup(${e}) failed: ${o instanceof Error?o.message:String(o)}
9
+ `)}t&&r&&T()&&process.stderr.write(`[exit-manager] cleanup(${e}): ${t}
10
+ `)}function g(e,t,n=!1,r){if(m){process.exit(D??e);return}if(m=!0,D=e,n&&l)try{l.log("error","CRASH",t),l.shutdownSync()}catch{}if(n&&E&&e!==130&&e!==143)try{let s=/Uncaught exception:\s*([A-Za-z0-9_$]+)/.exec(t)?.[1]??"crash";w([v(E,"ASR_CRASH",{error_code:"cli_crash",error_name:s})])}catch{}let o=[...c].reverse(),i=[];for(let s of o)try{s.fn(),i.push(s.name)}catch(a){process.stderr.write(`[exit-manager] cleanup(${s.name}) failed: ${a instanceof Error?a.message:String(a)}
11
+ `)}if(c=[],T()&&(process.stderr.write(`[exit-manager] shutdown(${e}): ${t}
12
+ `),i.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${i.join(", ")}
13
+ `)),n){if(I)try{I()}catch{}e===130||e===143||(process.stderr.write(`
14
+ kane-cli crashed: ${t}
15
+ `+(i.length>0?`Resources cleaned up (${i.join(", ")}).
16
+ `:"")),E&&process.stderr.write(`session: ${E.session_id} \u2014 share this id with support
17
+ `),r&&T()?process.stderr.write(`${r}
18
+ `):process.stderr.write(`(re-run with KANE_DEV_MODE=1 for the full stack)
19
+ `)),process.exit(e);return}if(A&&!n){A();return}process.exit(e)}function me(e){A=e}function Ae(e){I=e}var x=!1;function Ie(){x||(x=!0,process.on("SIGINT",()=>{g(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{g(143,"Received SIGTERM",!0)}),process.on("uncaughtException",e=>{g(1,`Uncaught exception: ${e.name}: ${e.message}`,!0,e.stack)}),process.on("unhandledRejection",e=>{g(1,`Unhandled rejection: ${String(e)}`,!0,e instanceof Error?e.stack:void 0)}))}function Ne(){c=[],m=!1,D=null,A=null,I=null,l=null,p=[],x=!1,E=null}export{y as a,J as b,Z as c,v as d,w as e,se as f,de as g,le as h,Ee as i,ue as j,Se as k,fe as l,pe as m,Re as n,ge as o,g as p,me as q,Ae as r,Ie as s,Ne as t};