@testmuai/kane-cli 0.7.1 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/dist/ChatSurface-U37VZDCW.js +8 -0
  2. package/dist/{ChromeProfilePicker-4CDSPBWL.js → ChromeProfilePicker-AUU7JF6F.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TLRVBA4E.js → CliFeedbackPrompt-4W74Y3UF.js} +1 -1
  4. package/dist/{CliUploadProgress-WGGFLUSF.js → CliUploadProgress-6HL7WTEX.js} +1 -1
  5. package/dist/ConfigView-6BSCZP5Y.js +2 -0
  6. package/dist/EvidenceViewOffer-62XHEEGW.js +2 -0
  7. package/dist/FolderPicker-S7U2EN2M.js +2 -0
  8. package/dist/{HelpView-FBCX32U7.js → HelpView-TU7ED43J.js} +1 -1
  9. package/dist/{InfoBox-KK2ICVS4.js → InfoBox-JLTMKVDE.js} +1 -1
  10. package/dist/{LinksBox-KKRANMR3.js → LinksBox-LREUUJDV.js} +1 -1
  11. package/dist/{ProfilesView-DGPXSAQN.js → ProfilesView-W3GX2N2E.js} +1 -1
  12. package/dist/{ProjectPicker-ESQSL4TT.js → ProjectPicker-SYQUJK2J.js} +1 -1
  13. package/dist/{SaveSessionPrompt-AQGP5W6E.js → SaveSessionPrompt-MR5NJMRP.js} +1 -1
  14. package/dist/SingleShotApp-XOKVOM7C.js +2 -0
  15. package/dist/{SummaryBox-BFZJW2KK.js → SummaryBox-UAYSVFB7.js} +1 -1
  16. package/dist/TestMdRunView-7UVSDAF4.js +2 -0
  17. package/dist/{WhoamiView-JABY3I5Q.js → WhoamiView-2YU76ASQ.js} +1 -1
  18. package/dist/adbkit-apkreader-ORZBGCJQ.js +184 -0
  19. package/dist/app-client-OEXESV4U.js +2 -0
  20. package/dist/app-download-AEEFQ63M.js +2 -0
  21. package/dist/{auth-76LVI6B5.js → auth-HET3TBRI.js} +1 -1
  22. package/dist/bind-STKXOUYI.js +12 -0
  23. package/dist/bootstrap-44YKVWWE.js +2 -0
  24. package/dist/bridge-5Z3BIB77.js +2 -0
  25. package/dist/{changelog-PSWPPOAF.js → changelog-7OWRHFHZ.js} +1 -1
  26. package/dist/chat-committer-ZWWCLJFD.js +2 -0
  27. package/dist/chat-controller-T2FAI55V.js +2 -0
  28. package/dist/{chunk-C4G7RVJ6.js → chunk-27U4PLPX.js} +1 -1
  29. package/dist/{chunk-V36ATG7A.js → chunk-2BGUUWNF.js} +2 -2
  30. package/dist/chunk-2KDGIZED.js +4 -0
  31. package/dist/chunk-2UIHS2FH.js +2 -0
  32. package/dist/chunk-2YEHV2CX.js +2 -0
  33. package/dist/{chunk-NRTHYROA.js → chunk-3LJWYRAA.js} +1 -1
  34. package/dist/chunk-3PECJD6S.js +11 -0
  35. package/dist/chunk-3POR47RC.js +8 -0
  36. package/dist/{chunk-KVQOBPAZ.js → chunk-3Q6WAK6P.js} +1 -1
  37. package/dist/chunk-4JOD47QI.js +2 -0
  38. package/dist/chunk-56PAQAX5.js +19 -0
  39. package/dist/{chunk-FCMLIK7P.js → chunk-5DBK6QNS.js} +1 -1
  40. package/dist/chunk-5DT7PIGB.js +5 -0
  41. package/dist/chunk-65ZTD5SJ.js +7 -0
  42. package/dist/chunk-6IA6QMPH.js +2 -0
  43. package/dist/{chunk-5KFS3GAZ.js → chunk-6KPPGMO2.js} +1 -1
  44. package/dist/{chunk-F6ZOJXYU.js → chunk-6O3DDOP2.js} +1 -1
  45. package/dist/chunk-6XX4LEVJ.js +2 -0
  46. package/dist/{chunk-KT6G7AF2.js → chunk-766WGMBU.js} +1 -1
  47. package/dist/chunk-7BZSCUPP.js +10 -0
  48. package/dist/{chunk-UBFKZEX3.js → chunk-7JWKHKFU.js} +2 -2
  49. package/dist/{chunk-PMHJRT3A.js → chunk-7KORP5FF.js} +1 -1
  50. package/dist/chunk-7Q6M6P4X.js +26 -0
  51. package/dist/{chunk-AM5S4KG4.js → chunk-AFPHLUQ5.js} +1 -1
  52. package/dist/chunk-AW2XUHH4.js +2 -0
  53. package/dist/chunk-BKHXPBWN.js +2 -0
  54. package/dist/chunk-BRHNRCEZ.js +3 -0
  55. package/dist/chunk-BRIEBB2U.js +2 -0
  56. package/dist/{chunk-NJPTOKW5.js → chunk-C7HSWZP6.js} +1 -1
  57. package/dist/{chunk-JEUA4UWK.js → chunk-CLGC7VEO.js} +1 -1
  58. package/dist/chunk-CTW2VQKS.js +6 -0
  59. package/dist/{chunk-L4JIMNKW.js → chunk-CUM23TLF.js} +1 -1
  60. package/dist/chunk-DBIBROYW.js +5 -0
  61. package/dist/{chunk-L7VREJTG.js → chunk-DCY6R5DP.js} +1 -1
  62. package/dist/{chunk-X3ICV5M5.js → chunk-DO5HAO3H.js} +1 -1
  63. package/dist/chunk-DPUV6OSP.js +2 -0
  64. package/dist/{chunk-M7WQM4UA.js → chunk-DUAXZYAD.js} +1 -1
  65. package/dist/{chunk-HPMS5KO6.js → chunk-DZGCXKKI.js} +3 -3
  66. package/dist/chunk-EDSZJZFG.js +4 -0
  67. package/dist/{chunk-OIYGGEUL.js → chunk-ELM6MXGJ.js} +1 -1
  68. package/dist/{chunk-R2RGSO4B.js → chunk-EWCAFKLX.js} +1 -1
  69. package/dist/chunk-EYOCNMUM.js +2 -0
  70. package/dist/{chunk-73C4PRYU.js → chunk-FEJXWJ3L.js} +1 -1
  71. package/dist/{chunk-BAL64WSI.js → chunk-FMRSMN34.js} +1 -1
  72. package/dist/chunk-FNH55WSR.js +19 -0
  73. package/dist/chunk-FQLIW3LM.js +2 -0
  74. package/dist/{chunk-JRMDGLLT.js → chunk-G7VQCS4J.js} +1 -1
  75. package/dist/chunk-GCBKDX2J.js +2 -0
  76. package/dist/{chunk-AAONIIQV.js → chunk-GFKCTYCA.js} +1 -1
  77. package/dist/chunk-GKYPNSQP.js +26 -0
  78. package/dist/chunk-GPG3FIN3.js +21 -0
  79. package/dist/chunk-GZPK6FRP.js +7 -0
  80. package/dist/{chunk-NOCIMJSN.js → chunk-HCKH44I2.js} +1 -1
  81. package/dist/chunk-HEAIJCGZ.js +2 -0
  82. package/dist/{chunk-3FN5VJMV.js → chunk-HMYMSRA4.js} +1 -1
  83. package/dist/chunk-I7TIGB7K.js +2 -0
  84. package/dist/chunk-IDX3TOPY.js +6 -0
  85. package/dist/{chunk-CVOGP253.js → chunk-IMR64OCZ.js} +1 -1
  86. package/dist/{chunk-IBNC444G.js → chunk-IOD3HQVW.js} +1 -1
  87. package/dist/chunk-IOFZSQAA.js +2 -0
  88. package/dist/chunk-IP2O264K.js +3 -0
  89. package/dist/{chunk-CSQ46PJ7.js → chunk-JJHG3BWO.js} +1 -1
  90. package/dist/{chunk-5JTUL6XL.js → chunk-JZ26R6UL.js} +1 -1
  91. package/dist/chunk-KBM3XHAM.js +2 -0
  92. package/dist/{chunk-SY3HLQMV.js → chunk-KCCSWEGA.js} +1 -1
  93. package/dist/chunk-KFSUPQAG.js +66 -0
  94. package/dist/chunk-KRKGZ2ZW.js +47 -0
  95. package/dist/chunk-KU6IXFGZ.js +9 -0
  96. package/dist/chunk-L7MXYCD7.js +2 -0
  97. package/dist/chunk-MA34UWKX.js +4 -0
  98. package/dist/chunk-MBF3FP5P.js +5 -0
  99. package/dist/chunk-MSGW4JDG.js +2 -0
  100. package/dist/chunk-MXHHMIO2.js +349 -0
  101. package/dist/chunk-N2P4MI32.js +2 -0
  102. package/dist/{chunk-CDQX6HGJ.js → chunk-NX7TM662.js} +1 -1
  103. package/dist/chunk-OMQCD3KR.js +2 -0
  104. package/dist/{chunk-QROUKGKU.js → chunk-OS4VSIHT.js} +1 -1
  105. package/dist/chunk-OTTGS2TE.js +2 -0
  106. package/dist/chunk-QGKPLOUI.js +2 -0
  107. package/dist/{chunk-JKTFTF24.js → chunk-QRZRSAZH.js} +1 -1
  108. package/dist/{chunk-WJ5HDEVH.js → chunk-QSDH5P7C.js} +1 -1
  109. package/dist/{chunk-322JEJEH.js → chunk-QW6EZC53.js} +1 -1
  110. package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
  111. package/dist/chunk-R7QAS6LZ.js +4 -0
  112. package/dist/{chunk-LR5XO2KD.js → chunk-RC52N7PC.js} +1 -1
  113. package/dist/{chunk-33QXD75Y.js → chunk-RFR4ZKIC.js} +3 -3
  114. package/dist/{chunk-3LWTUMDG.js → chunk-RLRNLIRS.js} +1 -1
  115. package/dist/{chunk-XDHZMCTA.js → chunk-SDPRO2LE.js} +2 -2
  116. package/dist/chunk-T5Y6MOLM.js +4 -0
  117. package/dist/{chunk-4OPQJ7PE.js → chunk-TFPPEOAK.js} +1 -1
  118. package/dist/chunk-TH47OOBV.js +4 -0
  119. package/dist/{chunk-XVDJ423L.js → chunk-TKGUT425.js} +1 -1
  120. package/dist/{chunk-OHRS3H7Z.js → chunk-TRJUD3XJ.js} +1 -1
  121. package/dist/chunk-TYLYFERW.js +10 -0
  122. package/dist/chunk-TZXXJWHA.js +2 -0
  123. package/dist/chunk-UD7KKHPW.js +5 -0
  124. package/dist/{chunk-APAIWBIH.js → chunk-UDIQOJEL.js} +1 -1
  125. package/dist/chunk-UV462FZR.js +2 -0
  126. package/dist/{chunk-323MLBYA.js → chunk-UXDL4XDL.js} +1 -1
  127. package/dist/chunk-V2R3LCA3.js +12 -0
  128. package/dist/chunk-VAYBKR76.js +4 -0
  129. package/dist/{chunk-AH7ZZIZY.js → chunk-VRVFPMCR.js} +1 -1
  130. package/dist/chunk-W2JFDDIB.js +2 -0
  131. package/dist/chunk-W4B5LOEX.js +4 -0
  132. package/dist/{chunk-36OC3TFE.js → chunk-W5TTF7GB.js} +2 -2
  133. package/dist/chunk-WXHQYYD5.js +2 -0
  134. package/dist/{chunk-6HEGD6H2.js → chunk-XO5ZH3ZR.js} +1 -1
  135. package/dist/chunk-XWKUZJCP.js +2 -0
  136. package/dist/{chunk-2KBD6JZX.js → chunk-YFYCCTSL.js} +1 -1
  137. package/dist/{chunk-ZM5PVRJK.js → chunk-YJELGSKJ.js} +1 -1
  138. package/dist/chunk-YRFMPIU2.js +4 -0
  139. package/dist/{chunk-2XGDWUJ5.js → chunk-ZGBSGZZM.js} +1 -1
  140. package/dist/{chunk-NBKQT7LJ.js → chunk-ZIUAOEUC.js} +1 -1
  141. package/dist/chunk-ZMNJBUAO.js +2 -0
  142. package/dist/chunk-ZVHCQMJ6.js +13 -0
  143. package/dist/committer-SWEWEYNX.js +2 -0
  144. package/dist/{config-R3GF2FZA.js → config-RS47F5SC.js} +1 -1
  145. package/dist/{controller-client-RD2YEMAH.js → controller-client-OB4WD2C4.js} +1 -1
  146. package/dist/{cover-cmd-TXICWHUU.js → cover-cmd-HDZZWJXG.js} +1 -1
  147. package/dist/{credentials-XN4ROCQ3.js → credentials-OH6AVI6N.js} +1 -1
  148. package/dist/deps-resolve-XC5S53DG.js +2 -0
  149. package/dist/descriptor-OEUZZCOK.js +2 -0
  150. package/dist/design-committer-VYT6NU3T.js +2 -0
  151. package/dist/dispatch-SE5GY3Z2.js +2 -0
  152. package/dist/doctor-FSECFZUU.js +2 -0
  153. package/dist/docx-convert-JMUMT5C4.js +2 -0
  154. package/dist/{dossier-QZV74XOS.js → dossier-KTLTGT2X.js} +1 -1
  155. package/dist/evidence-OYPHZUKI.js +2 -0
  156. package/dist/evolve-cmd-BCPNXAMV.js +2 -0
  157. package/dist/exec-P2IKJRRR.js +2 -0
  158. package/dist/exit-manager-3FVBTNYR.js +2 -0
  159. package/dist/explain-UAAQWHYR.js +2 -0
  160. package/dist/{explain-cmd-X7JZLSZZ.js → explain-cmd-3GEKR7O5.js} +1 -1
  161. package/dist/{explain-cmd-RZW6QJYM.js → explain-cmd-EX24XKD6.js} +1 -1
  162. package/dist/extract-bind-LLEASZAK.js +10 -0
  163. package/dist/extract-cmd-UZMEZMGP.js +5 -0
  164. package/dist/feeder-C3TOJPKK.js +2 -0
  165. package/dist/{gaps-cmd-BWCRLLBK.js → gaps-cmd-IVXFPFAQ.js} +1 -1
  166. package/dist/{gate-YHBPWEM5.js → gate-54BRAE7N.js} +1 -1
  167. package/dist/{generate-headless-BSTDLZZY.js → generate-headless-D3SVQ2AI.js} +3 -3
  168. package/dist/{headless-io-BL3TEAX5.js → headless-io-66RG5NN5.js} +1 -1
  169. package/dist/host-7GZPBA74.js +2 -0
  170. package/dist/identity-ADZ4PAJF.js +2 -0
  171. package/dist/index.js +85 -69
  172. package/dist/ingest-EX72IEQT.js +2 -0
  173. package/dist/ingest-cmd-EAE7N5RC.js +2 -0
  174. package/dist/{interactive-bind-43HGDF5K.js → interactive-bind-ORMN2REX.js} +7 -6
  175. package/dist/{lifecycle-cmd-D6TVTYRK.js → lifecycle-cmd-O2324GN6.js} +1 -1
  176. package/dist/{list-cmd-XCAV2FKA.js → list-cmd-N4KMA34H.js} +1 -1
  177. package/dist/list-commands-MRXL5HGS.js +2 -0
  178. package/dist/locks-cmd-CSVSWY2Y.js +2 -0
  179. package/dist/logical-ids-TEBCQJGO.js +2 -0
  180. package/dist/login-flow-QJQM3RHT.js +2 -0
  181. package/dist/maintenance-cmd-6XSVO6FO.js +2 -0
  182. package/dist/mobile-prompts-TOX35ER6.js +2 -0
  183. package/dist/pdf-convert-OZIRUADA.js +2 -0
  184. package/dist/persist-recorded-session-TLDQ5HKP.js +3 -0
  185. package/dist/phase-seed-VFHIH6FL.js +2 -0
  186. package/dist/pipeline-UOM4LNAI.js +2 -0
  187. package/dist/prepare-target-QYWIJIVQ.js +2 -0
  188. package/dist/readmodel-XOYGGQ3S.js +2 -0
  189. package/dist/reconcile-cmd-3H34KVVD.js +2 -0
  190. package/dist/reconcile-deps-XIH75ZLY.js +4 -0
  191. package/dist/reconcile-engine-UKWPG2LV.js +2 -0
  192. package/dist/{recording-banner-TALO7PUR.js → recording-banner-4M7XHVGI.js} +1 -1
  193. package/dist/records-IOZTZUZV.js +2 -0
  194. package/dist/registry-PYOTKZYZ.js +2 -0
  195. package/dist/{require-project-folder-R347LFDQ.js → require-project-folder-4UPQNEBJ.js} +1 -1
  196. package/dist/resolve-run-intent-X72V3KJA.js +7 -0
  197. package/dist/{resolver-IDCGRPFJ.js → resolver-UBOZLFFE.js} +1 -1
  198. package/dist/revert-NQ7GEVSE.js +2 -0
  199. package/dist/review-cmd-DQRKQUMG.js +4 -0
  200. package/dist/run-2COODVX2.js +2 -0
  201. package/dist/run-URPGHOQM.js +2 -0
  202. package/dist/run-channel-RGH4WIQX.js +2 -0
  203. package/dist/{run-test-md-DFNIGYB7.js → run-test-md-76ZPKXO6.js} +3 -3
  204. package/dist/session-target-UWROGOCY.js +2 -0
  205. package/dist/sessions-GIEXOCE4.js +2 -0
  206. package/dist/{sessions-cmd-AQWLL5ZN.js → sessions-cmd-ZZIZN2VB.js} +4 -4
  207. package/dist/{skill-installer-ANXTCXQV.js → skill-installer-CIS6GAYF.js} +1 -1
  208. package/dist/spawner-J67QR4QP.js +2 -0
  209. package/dist/structured-answers-5EY2AZN7.js +5 -0
  210. package/dist/tcg-generate-BDTRKY2A.js +2 -0
  211. package/dist/testmd-actions-77ELR5UU.js +2 -0
  212. package/dist/token-refresh-4BPAPXKK.js +2 -0
  213. package/dist/types-6E2HTDKJ.js +2 -0
  214. package/dist/{validate-basic-O2DP2XJL.js → validate-basic-2GVSQ2R5.js} +1 -1
  215. package/dist/verdicts-TRSTJLCL.js +2 -0
  216. package/dist/{version-check-RNR3JCQ5.js → version-check-O6PYTI4T.js} +1 -1
  217. package/dist/{view-cmd-YSEGA5PI.js → view-cmd-KPJTP4DI.js} +1 -1
  218. package/dist/walk-session-CHJXHZMO.js +2 -0
  219. package/dist/with-telemetry-CQCWLVOC.js +2 -0
  220. package/package.json +12 -6
  221. package/dist/ChatSurface-D66CACLX.js +0 -8
  222. package/dist/ConfigView-DBANTBXC.js +0 -2
  223. package/dist/EvidenceViewOffer-DNCQ3A6R.js +0 -2
  224. package/dist/FolderPicker-W7RCIFEL.js +0 -2
  225. package/dist/SingleShotApp-SMCAIKCE.js +0 -2
  226. package/dist/TestMdRunView-FMKZJ3A3.js +0 -2
  227. package/dist/bind-AACBTSAA.js +0 -12
  228. package/dist/bootstrap-CNOZ5VRB.js +0 -2
  229. package/dist/bridge-T4HL4TG7.js +0 -2
  230. package/dist/chat-committer-4BQBOKI4.js +0 -2
  231. package/dist/chat-controller-NNTMKEPG.js +0 -2
  232. package/dist/chunk-2SREGETM.js +0 -4
  233. package/dist/chunk-3STZLM5J.js +0 -4
  234. package/dist/chunk-5YPBPZUR.js +0 -2
  235. package/dist/chunk-6UJDOAYR.js +0 -26
  236. package/dist/chunk-BQHKBOSF.js +0 -11
  237. package/dist/chunk-DQ54MH7F.js +0 -13
  238. package/dist/chunk-DXV6MBTD.js +0 -8
  239. package/dist/chunk-EV3EHXEI.js +0 -4
  240. package/dist/chunk-F7WKDMX7.js +0 -47
  241. package/dist/chunk-FPFOW6BS.js +0 -2
  242. package/dist/chunk-GVIPTX6T.js +0 -6
  243. package/dist/chunk-GW5DWAXY.js +0 -2
  244. package/dist/chunk-HJERKSBK.js +0 -349
  245. package/dist/chunk-IQDWBTRJ.js +0 -3
  246. package/dist/chunk-IXVOXJP6.js +0 -6
  247. package/dist/chunk-KNDSQ4PS.js +0 -2
  248. package/dist/chunk-KRXSXQBU.js +0 -12
  249. package/dist/chunk-LQZ2BU7Q.js +0 -2
  250. package/dist/chunk-NAC7SFBE.js +0 -5
  251. package/dist/chunk-NAE7MBR2.js +0 -23
  252. package/dist/chunk-NRC2G4Y5.js +0 -5
  253. package/dist/chunk-O56PUUNL.js +0 -9
  254. package/dist/chunk-QM4S2APK.js +0 -2
  255. package/dist/chunk-RKWJG3WW.js +0 -19
  256. package/dist/chunk-RNSSM2BK.js +0 -11
  257. package/dist/chunk-SE6WNCYU.js +0 -4
  258. package/dist/chunk-SRDHPKJT.js +0 -2
  259. package/dist/chunk-SWESH2J7.js +0 -10
  260. package/dist/chunk-T63R6QT4.js +0 -4
  261. package/dist/chunk-UI7KULSI.js +0 -7
  262. package/dist/chunk-UPPEOQJQ.js +0 -3
  263. package/dist/chunk-URQUQWGW.js +0 -62
  264. package/dist/chunk-UX2B7L6K.js +0 -2
  265. package/dist/chunk-VOHQA2SP.js +0 -2
  266. package/dist/chunk-W5DOU2DV.js +0 -2
  267. package/dist/chunk-W6VD2XFO.js +0 -19
  268. package/dist/chunk-WAOCHXJ5.js +0 -2
  269. package/dist/chunk-WWNSD6FA.js +0 -6
  270. package/dist/chunk-ZLCZDAEX.js +0 -6
  271. package/dist/committer-2EJPVVCQ.js +0 -2
  272. package/dist/descriptor-KXDJ4XYD.js +0 -2
  273. package/dist/design-committer-BQUWD6AC.js +0 -2
  274. package/dist/docx-convert-ZBVQO2LG.js +0 -2
  275. package/dist/evidence-V23FPVXQ.js +0 -2
  276. package/dist/evolve-cmd-PZCPXDMR.js +0 -2
  277. package/dist/exit-manager-HNFATGSM.js +0 -2
  278. package/dist/explain-UE4IACQH.js +0 -2
  279. package/dist/extract-bind-BFY7IRL4.js +0 -10
  280. package/dist/extract-cmd-U3MGK2LP.js +0 -6
  281. package/dist/feeder-XGTFV7TZ.js +0 -2
  282. package/dist/ingest-AL6CABJT.js +0 -2
  283. package/dist/ingest-cmd-O6OWWZT4.js +0 -2
  284. package/dist/list-commands-747UTUSS.js +0 -2
  285. package/dist/locks-cmd-QAULI5LV.js +0 -2
  286. package/dist/logical-ids-4G4FAHNJ.js +0 -2
  287. package/dist/login-flow-CV76ENHV.js +0 -2
  288. package/dist/maintenance-cmd-ZRB4NTGG.js +0 -2
  289. package/dist/pdf-convert-S7VYE6AV.js +0 -2
  290. package/dist/persist-recorded-session-MDPWWUA7.js +0 -3
  291. package/dist/phase-seed-52LRE3LH.js +0 -2
  292. package/dist/pipeline-LM5JAK7F.js +0 -2
  293. package/dist/readmodel-X7L7W2BA.js +0 -2
  294. package/dist/reconcile-cmd-DGCSDML6.js +0 -2
  295. package/dist/records-5SVUXJBW.js +0 -2
  296. package/dist/revert-DXXYXJGN.js +0 -2
  297. package/dist/review-cmd-2QF5HTI7.js +0 -4
  298. package/dist/run-52UIBPXD.js +0 -2
  299. package/dist/run-VRVH4VO3.js +0 -2
  300. package/dist/sessions-BLXZVK5U.js +0 -2
  301. package/dist/spawner-AH5FTUYU.js +0 -2
  302. package/dist/structured-answers-QHFGZPSS.js +0 -5
  303. package/dist/tcg-generate-WKCBBKI5.js +0 -2
  304. package/dist/testmd-actions-RPYG6TJG.js +0 -2
  305. package/dist/token-refresh-NIDUOTRM.js +0 -2
  306. package/dist/verdicts-TJH3O5UW.js +0 -2
  307. package/dist/walk-session-HXW4OSA2.js +0 -2
  308. 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 h}from"./chunk-4OPQJ7PE.js";import{y as l}from"./chunk-C4G7RVJ6.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
2
+ import{a as h}from"./chunk-TFPPEOAK.js";import{y as l}from"./chunk-27U4PLPX.js";import{a as A}from"./chunk-HCBYKLMW.js";import{a as c,b as f,i as P}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as x}from"./chunk-UR6MHSHU.js";var L=x(B(),1);var n=x(A(),1);function S(r,d,s,u,m){let p=s==="basic"&&u?`basic (${u})`:s,i=20,a=`${r} [${d}]`,g="\xB7".repeat(Math.max(2,i-a.length+3));return{label:`${a} ${g} ${p}`,profile:r,env:d,isActive:m}}function M({creds:r,onSwitch:d,onCancel:s}){let u=r.listProfiles(),m=r.getActiveProfile(),p=r.getDefaultEnv(),i=u.map(e=>{let o=r.loadBasicAuth(e.profile,e.env),t=r.loadCredentials(e.profile,e.env)!==null,v=o?"basic":t?"oauth":"none",b=o?o.username:null,w=e.profile===m&&e.env===p;return S(e.profile,e.env,v,b,w)}),[a,g]=(0,L.useState)(()=>{let e=i.findIndex(o=>o.isActive);return e>=0?e:0});return P((e,o)=>{if(o.escape){s();return}if(o.upArrow){g(t=>Math.max(0,t-1));return}if(o.downArrow){g(t=>Math.min(i.length-1,t+1));return}if(o.return&&i[a]){let t=i[a];t.isActive||d(t.profile,t.env),s();return}}),i.length===0?(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{marginTop:1,children:(0,n.jsx)(f,{color:l.dim,children:"No profiles \u2014 use Login to create one"})}),(0,n.jsx)(h,{bindings:[],escBackLabel:"back"})]}):(0,n.jsxs)(c,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,n.jsx)(f,{color:l.orange,bold:!0,children:"Profiles"}),(0,n.jsx)(c,{flexDirection:"column",marginTop:1,children:i.map((e,o)=>{let t=o===a,v=t?"\u276F ":" ",b=e.isActive?l.green:t?l.orange:void 0;return(0,n.jsxs)(f,{color:b,children:[v,e.label,e.isActive?" \u25CF active":""]},`${e.profile}-${e.env}`)})}),(0,n.jsx)(h,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"switch"}],escBackLabel:"back"})]})}export{S as a,M as b};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as f}from"./chunk-SDPRO2LE.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as p,resolve as c}from"path";import{fileURLToPath as A}from"url";var d=p(A(import.meta.url));function E(){return[c(d,".."),c(d,"../../..")]}function _(t){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[t]??null}function x(t){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[t]??null}function I(){let t=_(`${process.platform}-${process.arch}`),e=x(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let s of E()){for(let n of e?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,e,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}for(let n of t?["@testmuai","@lambdatestincprivate"]:[]){let r=c(s,"node_modules",n,t,"bin",a);if(u(r))return{cmd:r,args:[],tier:"platform"}}let i=c(s,"../assurance-agent/dist",a);if(u(i))return{cmd:i,args:[],tier:"sibling"};let o=c(s,"../assurance-agent/main.py");if(u(o)){let n=c(s,"../assurance-agent/.venv/bin/python");return{cmd:u(n)?n:"python3",args:[o],tier:"dev-python"}}}return null}function U(t,e={}){return{...process.env,...e,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:t,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:t}=await import("./credentials-OH6AVI6N.js"),e=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",a=new t,s=a.getActiveProfile()??"default",i={TESTMUAI_ENV:e},o=a.loadBasicAuth(s,e);if(o)return i.TESTMUAI_BASIC_AUTH=Buffer.from(`${o.username}:${o.access_key}`,"utf8").toString("base64"),i;let n=a.loadCredentials(s,e);if(n){try{let{refreshOAuthToken:l}=await import("./token-refresh-4BPAPXKK.js");await l({creds:a,profile:s,env:e,credentials:n})}catch{}let r=a.loadCredentials(s,e)??n;if(typeof r.access_token=="string"){let l=await h(e,r.access_token);return l?(i.TESTMUAI_BASIC_AUTH=l,i):(i.TESTMUAI_API_KEY=r.access_token,i)}}return{}}catch{return{}}}var T=8e3;function m(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function h(t,e){try{let[{getEnvironment:a},{ControllerClient:s}]=await Promise.all([import("./config-RS47F5SC.js"),import("./controller-client-OB4WD2C4.js")]),i=new s(a(t).controllerBaseUrl,e),o;try{let n=await Promise.race([i.getTmsCredentials().catch(()=>null),new Promise(r=>{o=setTimeout(()=>r(null),T)})]);if(typeof n?.username!="string"||!n.username||typeof n.access_key!="string"||!n.access_key)return m();try{let[{refreshIdentitySnapshot:r},{telemetryEnvName:l}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-44YKVWWE.js")]);await r(l(),n)}catch{}return Buffer.from(`${n.username}:${n.access_key}`,"utf8").toString("base64")}finally{clearTimeout(o)}}catch{return m()}}export{_ as a,x as b,I as c,U as d,P as e};
@@ -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};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as l}from"./chunk-DPUV6OSP.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-44YKVWWE.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,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as Y,f as q,h as H}from"./chunk-2KDGIZED.js";import{a as j,b as L,c as z}from"./chunk-YRFMPIU2.js";import{d as B,f as R}from"./chunk-FNH55WSR.js";import{a as N,b as _,c as M}from"./chunk-TYLYFERW.js";import{a as O}from"./chunk-TZXXJWHA.js";import{m as b}from"./chunk-56PAQAX5.js";import{a as K,b as C,c as G}from"./chunk-AW2XUHH4.js";import{g as J}from"./chunk-HEAIJCGZ.js";import{a as F,b as $}from"./chunk-BRIEBB2U.js";import{c as E}from"./chunk-27U4PLPX.js";import{createHash as be}from"crypto";import{readdir as Ce,stat as Te}from"fs/promises";import{basename as f,extname as Ie,join as Ae,relative as ke}from"path";import{createHash as de}from"crypto";import{createReadStream as le}from"fs";import{mkdir as ce,readFile as ue,rename as fe,writeFile as ge}from"fs/promises";import{dirname as me,join as he}from"path";var we=60,ve=5;function V(){return{entries:[]}}function X(){return he(E,"mobile","app-cache.json")}async function T(e){let r=de("sha256");for await(let t of le(e))r.update(t);return r.digest("hex")}function ye(){return{readFile:e=>ue(e,"utf8"),writeFile:async(e,r)=>{await ce(me(e),{recursive:!0});let t=`${e}.tmp`;await ge(t,r),await fe(t,e)},hashFile:T,now:()=>new Date}}function I(e){if(!e)return;let r=/\/(\d{4})\/(\d{2})\/(\d{2})\//.exec(e);if(!r)return;let[,t,a,n]=r,s=new Date(`${t}-${a}-${n}T00:00:00Z`);return Number.isNaN(s.getTime())?void 0:s.toISOString()}function Pe(e,r){if(!e.storedAt)return!0;let t=new Date(e.storedAt).getTime();return Number.isNaN(t)?!0:(r.getTime()-t)/864e5>=we-ve}var u=class{deps;constructor(r={}){this.deps={...ye(),...r}}async read(){try{let r=JSON.parse(await this.deps.readFile(X()));if(!r||typeof r!="object")return V();let t=r;return{entries:Array.isArray(t.entries)?t.entries:[]}}catch{return V()}}async write(r){await this.deps.writeFile(X(),JSON.stringify(r,null,2))}async hashOf(r){return this.deps.hashFile(r)}async lookup(r){return(await this.read()).entries.find(a=>a.sha256===r.sha256&&a.env===r.env&&a.orgId===r.orgId&&a.type===r.type)}async remember(r){let t=await this.read();t.entries=[...t.entries.filter(a=>!(a.sha256===r.sha256&&a.env===r.env&&a.orgId===r.orgId&&a.type===r.type)),r],await this.write(t)}async forget(r){let t=await this.read(),a=t.entries.length;t.entries=t.entries.filter(n=>!(n.sha256===r.sha256&&n.env===r.env&&n.orgId===r.orgId&&n.type===r.type)),t.entries.length!==a&&await this.write(t)}isNearExpiry(r){return Pe(r,this.deps.now())}};var Z={emulator:[".apk"],simulator:[".zip"]};function Q(e){return e.skipped===!0}function De(e,r){let t=Ie(e).toLowerCase();return t===".ipa"?`${f(e)} is a device build \u2014 .ipa is not accepted for ${r} runs.`:Z[r].includes(t)?null:`${f(e)} cannot be uploaded for a ${r} run \u2014 expected one of ${Z[r].join(", ")}.`}async function A(e,r){if(!(await Te(e)).isDirectory())return r.hashOf(e);let a=[],n=async i=>{for(let o of await Ce(i,{withFileTypes:!0})){let p=Ae(i,o.name);o.isDirectory()?await n(p):o.isFile()&&a.push(p)}};await n(e),a.sort();let s=be("sha256");for(let i of a)s.update(ke(e,i)),s.update("\0"),s.update(await T(i)),s.update("\0");return s.digest("hex")}async function W(e){let r=De(e.path,e.type);if(r)return{skipped:!0,reason:r};let t=e.cache??new u,a=e.client??new J(e.baseUrl,e.auth),n;try{n=await A(e.path,t)}catch(o){return{skipped:!0,reason:`could not read ${f(e.path)}: ${o.message}`}}let s={sha256:n,env:e.env,orgId:e.orgId,type:e.type},i=await t.lookup(s);if(i){if(await a.liveness(i.appId)!=="gone")return{appId:i.appId,...i.appUrl?{appUrl:i.appUrl}:{},fromCache:!0};e.onProgress?.(`${i.appId} is no longer in the cloud \u2014 uploading again`),await t.forget(s)}try{e.onProgress?.(`uploading ${f(e.path)}\u2026`);let o=await a.upload(e.path,e.type);return await t.remember({sha256:n,env:e.env,orgId:e.orgId,type:e.type,appId:o.appId,...o.appUrl?{appUrl:o.appUrl}:{},...I(o.url)?{storedAt:I(o.url)}:{},sourcePath:e.path}),e.onProgress?.(o.cached?`${f(e.path)} already in the cloud (${o.appId})`:`${f(e.path)} uploaded (${o.appId})`),{appId:o.appId,...o.appUrl?{appUrl:o.appUrl}:{},fromCache:!1}}catch(o){return{skipped:!0,reason:o.message}}}function h(e){return`${e.platform}|${F(e)}`}var g=new Map,ee=new Set;function re(e){return ee.has(h(e))}function We(e,r,t){r.state==="stopped"&&(g.has(h(r))||ae(e,r,t))}async function te(e,r,t){let a=g.get(h(r));return a?(t?.(`waiting for ${r.displayName} to finish booting\u2026`),a):ae(e,r,t)}function ae(e,r,t){let a=h(r),n=e.prepare(r,t);g.set(a,n),r.state==="stopped"&&n.then(()=>ee.add(a),()=>{});let s=()=>{g.get(a)===n&&g.delete(a)};return n.then(s,s),n.catch(()=>{}),n}import{basename as xe}from"path";import{spawnSync as Ue}from"child_process";async function Se(e,r,t){if(!e.teardownPlan||!t.appPackage&&!t.shutdown)return;let a;try{a=await e.teardownPlan(r,t)}catch{return}a.length!==0&&b(`device:${r.id}`,()=>{Y({udid:r.id,displayName:r.displayName});for(let n of a)try{Ue(n.file,n.args,{timeout:3e4,stdio:"ignore"})}catch{}})}var oe={emulator:[".apk"],simulator:[".zip"]};async function Ee(e,r,t,a){if(e.kind==="package")return e;if(e.kind==="app_id"){let n=r.cloudUpload;if(!n)throw new Error(`${e.value} is an app id, which needs an account to download it. Log in, or pass a path to a local build instead.`);let s=await G({appId:e.value,baseUrl:n.baseUrl,auth:n.auth,...oe[t]?{accepts:oe[t]}:{},...a?{onProgress:a}:{}}),i=D(s.path);if(!i||i.kind==="app_id")throw new Error(`${s.name} is not a build this CLI can install (from ${e.value}).`);return i}try{let n=new u,s=await A(e.value,n),i=new K;await i.find(s)||a?.(`copying ${xe(e.value)} into the local app store\u2026`);let p=await i.put({key:s,sourcePath:e.value,source:"local"});return{...e,value:p.path}}catch{return e}}function Fe(e){b(`appium:${e}`,()=>{H({deviceClass:e,owner:process.pid})})}var k=class extends Error{constructor(r){super(r),this.name="MobileHostUnsupportedError"}},w=class extends Error{constructor(t,a){super(t);this.doctorText=a;this.name="MobilePreflightError"}};async function $e(e,r,t){let a=t.cloudUpload,n=await W({path:e,type:r,env:a.env,orgId:a.orgId,userId:a.userId,auth:a.auth,baseUrl:a.baseUrl,...t.onProgress?{onProgress:t.onProgress}:{}});if(Q(n)){t.onProgress?.(`app not uploaded \u2014 ${n.reason}`);return}return n.appId}var Ne="app must be a build (.apk for an emulator, .zip of the .app bundle for a simulator) or an app id from your cloud uploads \u2014 a package id names something already installed on one device, so it cannot be uploaded, exported as code, or run anywhere else.",ne=/\.(apk|zip)$/i;function D(e){let r=e.trim();if(C(r))return{kind:"app_id",value:r};let t=ne.exec(r)?.[1]?.toLowerCase();return t?{kind:t,value:r}:null}function _e(e){return!!e&&(ne.test(e)||C(e.trim()))}function Me(e){return e.filter(r=>r.required&&r.status==="fail")}function Be(e,r){return!!r&&e.platform===r.platform&&e.kind===r.kind&&(e.id===r.id||e.virtualName===r.id)}async function mr(e){let r=O();if(!r.supported)throw new k(r.reason);let t=e.appiumUrl??e.defaults?.appium_url,a=!!(e.agent||!e.interactive),n=M();a&&e.platform?.toLowerCase()!=="ios"&&((await n.status("emulator")).installed||await n.ensure("emulator",{automatic:!0,onProgress:e.onProgress}));let s=await j(e.platform,{appiumUrl:t});if(z(s)){let d=s.sections.flatMap(P=>Me(P.checks)).map(P=>P.label).join(", ");throw new w(`Mobile toolchain not ready (${d}). Run \`kane-cli doctor\` for details.`,L(s))}let i=await R({device:e.device,platform:e.platform,defaultTarget:e.defaults?.default_target,interactive:e.interactive}),o;if(i.ok)o=i.target;else if(i.reason==="needs-picker"&&e.pickTarget){let d=await e.pickTarget(i.candidates);if(!d)throw new Error("Target selection cancelled");o=d}else throw new Error(i.message);let p=B(o.platform);if(!p)throw new Error(`No provider for platform "${o.platform}"`);let l=N(o);if(!l)throw new Error(`No managed dependencies serve ${o.platform} ${o.kind} targets yet.`);try{await n.ensure(l,{automatic:a,onProgress:e.onProgress})}catch(d){throw d instanceof _?new w(d.message,d.message):d}let ie=o.state!=="ready"||re(o);o=await te(p,o,e.onProgress);let se=await q(l,{...t?{appiumUrl:t}:{},device:{udid:o.id,displayName:o.displayName},onProgress:e.onProgress});Fe(l);let x=Be(o,e.defaults?.default_target)?e.defaults?.default_app:void 0,m=e.app??(_e(x)?x:void 0);if(e.app&&!D(e.app))throw new Error(`${e.app}: ${Ne}`);let c=m?D(m):null,U=c?await Ee(c,e,l,e.onProgress):null,v=U?await p.ensureApp(o,U,e.onProgress):void 0,y=c?.kind==="app_id"?c.value:e.cloudUpload&&c&&m?await $e(c.value,l,e):void 0;await Se(p,o,{shutdown:ie,...v?{appPackage:v}:{}});let pe=$(o,v,{noReset:e.noReset??e.defaults?.no_reset,appiumUrl:se.url}),S=y??m;return{device:pe,target:o,provider:p,...y?{appId:y}:{},...S?{appRef:S}:{}}}export{We as a,te as b,k as c,w as d,Ne as e,D as f,_e as g,mr as h};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-KNDSQ4PS.js";import{a as T}from"./chunk-2WVKOZ6W.js";import{a as k}from"./chunk-JRMDGLLT.js";import{a as _}from"./chunk-4OPQJ7PE.js";import{y as i}from"./chunk-C4G7RVJ6.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as u,b as s}from"./chunk-C44QQJR4.js";import{a as K}from"./chunk-6YGTRKDT.js";import{e as S}from"./chunk-UR6MHSHU.js";var e=S(K(),1);var r=S(O(),1);function V(n,x,c){return{id:n,label:`${x} (${n})`,isActive:n===c}}function se({resolver:n,currentProjectId:x,env:c,onSelect:w,onCancel:C}){let[q,B]=(0,e.useState)([]),[D,l]=(0,e.useState)(!0),[H,m]=(0,e.useState)(!1),[J,g]=(0,e.useState)(!1),[Q,P]=(0,e.useState)(null),[d,p]=(0,e.useState)("list"),[v,R]=(0,e.useState)(""),[E,h]=(0,e.useState)(null),[I,X]=(0,e.useState)(""),b=(0,e.useRef)(!1),A=(0,e.useRef)(!0);(0,e.useEffect)(()=>{if(!n){P("Login first to browse projects"),l(!1);return}let o=new AbortController,a=I.trim();return A.current?l(!0):a&&g(!0),m(!0),P(null),(async()=>{try{let t=n.cached??await n.resolve();if(!t){P("Login first to browse projects"),l(!1),m(!1),g(!1);return}let L=k(c),F=new T(L.tmsBaseUrl,t.username,t.access_key),f=!0,N=0,G=a?{signal:o.signal,name:a,perPage:10}:{signal:o.signal,perPage:10};for await(let y of F.listProjectsStream(G)){if(f&&(l(!1),g(!1),A.current=!1,f=!1),y.totalLoaded===0&&y.done&&N===0&&!a){b.current=!0,p("naming"),m(!1);return}let M=y.projects.map(j=>V(j.project_id,j.name,x));B(N===0?M:j=>[...j,...M]),N+=y.projects.length,y.done&&m(!1)}f&&(l(!1),m(!1),g(!1))}catch(t){if(t?.name==="AbortError")return;P(t instanceof Error?t.message:String(t)),l(!1),m(!1),g(!1)}})(),()=>o.abort()},[n,x,c,I]);let Y=(0,e.useCallback)(o=>{let a=o.trim();if(!a){h("Name cannot be empty");return}h(null),p("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let t=n.cached??await n.resolve();if(!t)throw new Error("Not authenticated");let L=k(c),f=await new T(L.tmsBaseUrl,t.username,t.access_key).createProject(a);w(f.id,f.name)}catch(t){h(t instanceof Error?t.message:String(t)),p("naming")}})()},[n,c,w]),z=(0,e.useCallback)(()=>{R(""),h(null),b.current?C():p("list")},[C]);return d==="naming"||d==="creating"?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(s,{color:i.orange,bold:!0,children:"Create new project"}),b.current&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"No projects yet \u2014 let's create one."})}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(s,{color:i.dim,children:"Name: "}),d==="naming"?(0,r.jsx)($,{value:v,onChange:o=>{R(o),E&&h(null)},onSubmit:Y,onCancel:z}):(0,r.jsx)(s,{children:v})]}),E&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.red,children:E})}),d==="creating"&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"Creating..."})}),d==="naming"&&(0,r.jsx)(_,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:b.current?"cancel":"back"})]}):(0,r.jsx)(U,{title:"Projects",items:q,loading:D,loadingMore:H,searching:J,preserveSelectionById:!0,onSearch:X,error:Q,itemNoun:"projects",onTab:()=>{b.current=!1,p("naming")},extraHint:"tab to create new",onSelect:o=>{let a=o.label.replace(` (${o.id})`,"");w(o.id,a)},onCancel:C})}export{V as a,se as b};
2
+ import{a as $}from"./chunk-YCCUBQY4.js";import{a as U}from"./chunk-L7MXYCD7.js";import{a as k}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-TFPPEOAK.js";import{a as T}from"./chunk-G7VQCS4J.js";import{y as i}from"./chunk-27U4PLPX.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as u,b as s}from"./chunk-C44QQJR4.js";import{a as K}from"./chunk-6YGTRKDT.js";import{e as S}from"./chunk-UR6MHSHU.js";var e=S(K(),1);var r=S(O(),1);function V(n,x,c){return{id:n,label:`${x} (${n})`,isActive:n===c}}function se({resolver:n,currentProjectId:x,env:c,onSelect:w,onCancel:C}){let[q,B]=(0,e.useState)([]),[D,l]=(0,e.useState)(!0),[H,m]=(0,e.useState)(!1),[J,g]=(0,e.useState)(!1),[Q,P]=(0,e.useState)(null),[d,p]=(0,e.useState)("list"),[v,R]=(0,e.useState)(""),[E,h]=(0,e.useState)(null),[I,X]=(0,e.useState)(""),b=(0,e.useRef)(!1),A=(0,e.useRef)(!0);(0,e.useEffect)(()=>{if(!n){P("Login first to browse projects"),l(!1);return}let o=new AbortController,a=I.trim();return A.current?l(!0):a&&g(!0),m(!0),P(null),(async()=>{try{let t=n.cached??await n.resolve();if(!t){P("Login first to browse projects"),l(!1),m(!1),g(!1);return}let L=T(c),F=new k(L.tmsBaseUrl,t.username,t.access_key),f=!0,N=0,G=a?{signal:o.signal,name:a,perPage:10}:{signal:o.signal,perPage:10};for await(let y of F.listProjectsStream(G)){if(f&&(l(!1),g(!1),A.current=!1,f=!1),y.totalLoaded===0&&y.done&&N===0&&!a){b.current=!0,p("naming"),m(!1);return}let M=y.projects.map(j=>V(j.project_id,j.name,x));B(N===0?M:j=>[...j,...M]),N+=y.projects.length,y.done&&m(!1)}f&&(l(!1),m(!1),g(!1))}catch(t){if(t?.name==="AbortError")return;P(t instanceof Error?t.message:String(t)),l(!1),m(!1),g(!1)}})(),()=>o.abort()},[n,x,c,I]);let Y=(0,e.useCallback)(o=>{let a=o.trim();if(!a){h("Name cannot be empty");return}h(null),p("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let t=n.cached??await n.resolve();if(!t)throw new Error("Not authenticated");let L=T(c),f=await new k(L.tmsBaseUrl,t.username,t.access_key).createProject(a);w(f.id,f.name)}catch(t){h(t instanceof Error?t.message:String(t)),p("naming")}})()},[n,c,w]),z=(0,e.useCallback)(()=>{R(""),h(null),b.current?C():p("list")},[C]);return d==="naming"||d==="creating"?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:i.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(s,{color:i.orange,bold:!0,children:"Create new project"}),b.current&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"No projects yet \u2014 let's create one."})}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(s,{color:i.dim,children:"Name: "}),d==="naming"?(0,r.jsx)($,{value:v,onChange:o=>{R(o),E&&h(null)},onSubmit:Y,onCancel:z}):(0,r.jsx)(s,{children:v})]}),E&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.red,children:E})}),d==="creating"&&(0,r.jsx)(u,{marginTop:1,children:(0,r.jsx)(s,{color:i.dim,children:"Creating..."})}),d==="naming"&&(0,r.jsx)(_,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:b.current?"cancel":"back"})]}):(0,r.jsx)(U,{title:"Projects",items:q,loading:D,loadingMore:H,searching:J,preserveSelectionById:!0,onSearch:X,error:Q,itemNoun:"projects",onTab:()=>{b.current=!1,p("naming")},extraHint:"tab to create new",onSelect:o=>{let a=o.label.replace(` (${o.id})`,"");w(o.id,a)},onCancel:C})}export{V as a,se as b};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as u,c as p}from"./chunk-UX2B7L6K.js";import{spawn as h}from"child_process";var k=new Set(["progress","ask_user","graph_query","ingest_request","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete","state_checkpoint"]);function v(g,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:u();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=g.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=h(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(g.session_id,n.auth)});if(t.stdin.write(JSON.stringify(g)+`
2
+ import{c as u,d as p}from"./chunk-OMQCD3KR.js";import{spawn as h}from"child_process";var k=new Set(["progress","ask_user","graph_query","ingest_request","proposal","design","error","done","reasoning_delta","reasoning_done","tool_activity","decision_activity","text_delta","usage","receipt","chat_ops","session_paused","session_complete","state_checkpoint"]);function v(g,n={}){let a=n.spawnCmd!==void 0?n.spawnCmd:u();if(!a)throw new Error("assurance agent not found \u2014 your platform package may be missing; reinstall kane-cli (npm i -g @testmuai/kane-cli)");let f=g.source.images?.length??0;a.tier==="dev-python"&&f>0&&n.onWarn?.("warn: development agent in use \u2014 if image citations are missing, update the agent package");let t=h(a.cmd,a.args,{stdio:["pipe","pipe","pipe"],env:p(g.session_id,n.auth)});if(t.stdin.write(JSON.stringify(g)+`
3
3
  `),n.onStderr){let e="";t.stderr.on("data",r=>{e+=r.toString("utf8");let i;for(;(i=e.indexOf(`
4
4
  `))>=0;){let o=e.slice(0,i);e=e.slice(i+1),o.trim()&&n.onStderr(o)}})}let d=new Promise(e=>{t.on("exit",(r,i)=>e({code:r,signal:i}))});async function*m(){let e="",r=!1;for await(let i of t.stdout){e+=i.toString("utf8");let o;for(;(o=e.indexOf(`
5
5
  `))>=0;){let l=e.slice(0,o).trim();if(e=e.slice(o+1),!l)continue;let c;try{c=JSON.parse(l)}catch{n.onWarn?.(`agent: skipping malformed line: ${l.slice(0,120)}`);continue}let s=c;if(!s||typeof s!="object"||!k.has(s.type)){n.onWarn?.(`agent: skipping unknown event type "${s&&typeof s=="object"?String(s.type??"?"):"?"}"`);continue}if(yield s,s.type==="done"){r=!0;break}}if(r)break}await d.catch(()=>{})}return{events:m(),send:e=>{t.stdin&&!t.stdin.destroyed&&t.stdin.write(JSON.stringify(e)+`
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as l}from"./chunk-RZ4F3BHX.js";import{a,c,f as o}from"./chunk-C4G7RVJ6.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
2
+ import{a as l}from"./chunk-RZ4F3BHX.js";import{a,c,f as o}from"./chunk-27U4PLPX.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-RZ4F3BHX.js";var a=class{config;buffer=[];stepBuffer=new Map;flushTimer=null;currentRunIndex=null;stopped=!1;_droppedBatches=0;_droppedEntries=0;constructor(t){this.config=t}start(){if(this.flushTimer)return;let t=this.config.flushIntervalMs??5e3;this.flushTimer=setInterval(()=>{this.flush().catch(()=>{})},t),this.flushTimer.unref&&this.flushTimer.unref()}setRunIndex(t){this.currentRunIndex=t}log(t,e,i,n={}){if(this.stopped)return;let s=this.buildEntry(t,e,i,n);this.buffer.push(s)}logStep(t,e,i,n={}){if(this.stopped)return;let s=this.buildEntry("debug",e,i,n);s.run_index=t,this.stepBuffer.has(t)||this.stepBuffer.set(t,[]),this.stepBuffer.get(t).push(s)}escalate(t){let e=this.stepBuffer.get(t);e&&e.length>0&&this.buffer.push(...e),this.stepBuffer.delete(t)}discardSteps(t){this.stepBuffer.delete(t)}async flush(){if(this.buffer.length===0)return;let t=this.buffer.splice(0),e=null;try{e=await this.config.getToken()}catch{this.buffer.unshift(...t);return}let i={"Content-Type":"application/json"};e&&(i.Authorization=`Bearer ${e}`);let n=JSON.stringify(t);for(let s=0;s<3;s++){try{let u=new AbortController,f=setTimeout(()=>u.abort(),1e4),o=await h(this.config.proxyUrl,{method:"POST",headers:i,body:n,signal:u.signal});if(clearTimeout(f),o.ok)return}catch{}s<2&&await new Promise(u=>setTimeout(u,1e3*Math.pow(2,s)))}this._droppedBatches++,this._droppedEntries+=t.length}async flushOnce(t){if(this.buffer.length===0)return"empty";let e=this.buffer.splice(0),i=Date.now()+t,n=null;try{n=await Promise.race([this.config.getToken(),new Promise(f=>{let o=setTimeout(()=>f(null),t);o.unref&&o.unref()})])}catch{n=null}let s=i-Date.now();if(s<=0)return this.buffer.unshift(...e),"timeout";let u={"Content-Type":"application/json"};n&&(u.Authorization=`Bearer ${n}`);try{let f=new AbortController,o=setTimeout(()=>f.abort(),s);o.unref&&o.unref();let l=await h(this.config.proxyUrl,{method:"POST",headers:u,body:JSON.stringify(e),signal:f.signal});return clearTimeout(o),l.ok?"sent":(this.buffer.unshift(...e),"failed")}catch{return this.buffer.unshift(...e),Date.now()>=i?"timeout":"failed"}}drainBuffer(){return this.buffer.splice(0)}get droppedBatches(){return this._droppedBatches}get droppedEntries(){return this._droppedEntries}async shutdown(){this._droppedBatches>0&&this.log("warn","LOG_DROPS",`Dropped ${this._droppedEntries} entries in ${this._droppedBatches} batches`,{dropped_batches:this._droppedBatches,dropped_entries:this._droppedEntries}),this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),await this.flush()}shutdownSync(){this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null)}get bufferSize(){return this.buffer.length}stepBufferSize(t){return this.stepBuffer.get(t)?.length??0}buildEntry(t,e,i,n){return{hostname:"kane-cli",service:"kane-cli",ddsource:"kane-cli",ddtags:`version:${this.config.device.cli_version}`,level:t,event:e,message:i,session_id:this.config.sessionId,run_index:e.startsWith("tcg_")?null:this.currentRunIndex,identity:this.config.identity,device:this.config.device,context:n,timestamp:new Date().toISOString()}}};function w(r=process.env){try{let t=r.KANE_CLI_USER_AGENT;return t&&t.trim()?p(t):r.CLAUDECODE==="1"||r.CLAUDE_CODE_ENTRYPOINT?"claude-code":r.CURSOR_TRACE_ID||r.TERM_PROGRAM==="cursor"?"cursor":r.TERM_PROGRAM==="vscode"||r.VSCODE_PID?"vscode":r.CI==="true"||r.GITHUB_ACTIONS==="true"||r.GITLAB_CI==="true"||r.CIRCLECI==="true"||r.BUILDKITE==="true"?"ci":"unknown"}catch{return"unknown"}}function p(r){return r.toLowerCase().replace(/[^a-z0-9_-]/g,"-").slice(0,40)}import{execSync as d}from"child_process";import{readFileSync as g}from"fs";import{createHash as m}from"crypto";import{hostname as y,platform as b,arch as T}from"os";var c=null;function S(){return c||(c=_(),c)}function _(){let r=b();if(r==="darwin")try{let i=d("ioreg -rd1 -c IOPlatformExpertDevice",{encoding:"utf-8",timeout:5e3}).match(/"IOPlatformUUID"\s*=\s*"([^"]+)"/);if(i?.[1])return i[1]}catch{}if(r==="linux")try{let e=g("/etc/machine-id","utf-8").trim();if(e)return e}catch{}let t=`${y()}:${r}:${T()}`;return m("sha256").update(t).digest("hex").slice(0,32)}export{a,w as b,S as c};
2
+ import{a as h}from"./chunk-RZ4F3BHX.js";var l=class{config;buffer=[];stepBuffer=new Map;flushTimer=null;currentRunIndex=null;stopped=!1;_droppedBatches=0;_droppedEntries=0;constructor(t){this.config=t}start(){if(this.flushTimer)return;let t=this.config.flushIntervalMs??5e3;this.flushTimer=setInterval(()=>{this.flush().catch(()=>{})},t),this.flushTimer.unref&&this.flushTimer.unref()}setRunIndex(t){this.currentRunIndex=t}log(t,e,n,i={}){if(this.stopped)return;let s=this.buildEntry(t,e,n,i);this.buffer.push(s)}logStep(t,e,n,i={}){if(this.stopped)return;let s=this.buildEntry("debug",e,n,i);s.run_index=t,this.stepBuffer.has(t)||this.stepBuffer.set(t,[]),this.stepBuffer.get(t).push(s)}escalate(t){let e=this.stepBuffer.get(t);e&&e.length>0&&this.buffer.push(...e),this.stepBuffer.delete(t)}discardSteps(t){this.stepBuffer.delete(t)}async flush(){if(this.buffer.length===0)return;let t=this.buffer.splice(0),e=null;try{e=await this.config.getToken()}catch{this.buffer.unshift(...t);return}let n={"Content-Type":"application/json"};e&&(n.Authorization=`Bearer ${e}`);let i=JSON.stringify(t);for(let s=0;s<3;s++){try{let u=new AbortController,f=setTimeout(()=>u.abort(),1e4),o=await h(this.config.proxyUrl,{method:"POST",headers:n,body:i,signal:u.signal});if(clearTimeout(f),o.ok)return}catch{}s<2&&await new Promise(u=>setTimeout(u,1e3*Math.pow(2,s)))}this._droppedBatches++,this._droppedEntries+=t.length}async flushOnce(t){if(this.buffer.length===0)return"empty";let e=this.buffer.splice(0),n=Date.now()+t,i=null;try{i=await Promise.race([this.config.getToken(),new Promise(f=>{let o=setTimeout(()=>f(null),t);o.unref&&o.unref()})])}catch{i=null}let s=n-Date.now();if(s<=0)return this.buffer.unshift(...e),"timeout";let u={"Content-Type":"application/json"};i&&(u.Authorization=`Bearer ${i}`);try{let f=new AbortController,o=setTimeout(()=>f.abort(),s);o.unref&&o.unref();let c=await h(this.config.proxyUrl,{method:"POST",headers:u,body:JSON.stringify(e),signal:f.signal});return clearTimeout(o),c.ok?"sent":(this.buffer.unshift(...e),"failed")}catch{return this.buffer.unshift(...e),Date.now()>=n?"timeout":"failed"}}drainBuffer(){return this.buffer.splice(0)}get droppedBatches(){return this._droppedBatches}get droppedEntries(){return this._droppedEntries}async shutdown(){this._droppedBatches>0&&this.log("warn","LOG_DROPS",`Dropped ${this._droppedEntries} entries in ${this._droppedBatches} batches`,{dropped_batches:this._droppedBatches,dropped_entries:this._droppedEntries}),this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null),await this.flush()}shutdownSync(){this.stopped=!0,this.flushTimer&&(clearInterval(this.flushTimer),this.flushTimer=null)}get bufferSize(){return this.buffer.length}stepBufferSize(t){return this.stepBuffer.get(t)?.length??0}buildEntry(t,e,n,i){return{hostname:"kane-cli",service:"kane-cli",ddsource:"kane-cli",ddtags:`version:${this.config.device.cli_version}`,level:t,event:e,message:n,session_id:this.config.sessionId,run_index:e.startsWith("tcg_")?null:this.currentRunIndex,identity:this.config.identity,device:this.config.device,context:i,timestamp:new Date().toISOString()}}};function g(r=process.env){try{let t=r.KANE_CLI_USER_AGENT;return t&&t.trim()?a(t):r.CLAUDECODE==="1"||r.CLAUDE_CODE_ENTRYPOINT?"claude-code":r.CURSOR_TRACE_ID||r.TERM_PROGRAM==="cursor"?"cursor":r.TERM_PROGRAM==="vscode"||r.VSCODE_PID?"vscode":r.CI==="true"||r.GITHUB_ACTIONS==="true"||r.GITLAB_CI==="true"||r.CIRCLECI==="true"||r.BUILDKITE==="true"?"ci":"unknown"}catch{return"unknown"}}function a(r){return r.toLowerCase().replace(/[^a-z0-9_-]/g,"-").slice(0,40)}export{l as a,g as b};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as F}from"./chunk-BKHXPBWN.js";import{a as k}from"./chunk-N2P4MI32.js";import{b as $}from"./chunk-NVGBE2DR.js";import{deflateSync as Y}from"zlib";function j(n,s){let e=Buffer.alloc(4);e.writeUInt32BE(s.length);let o=Buffer.concat([Buffer.from(n,"latin1"),s]),i=Buffer.alloc(4);return i.writeUInt32BE(F(o)),Buffer.concat([e,o,i])}var G={1:0,3:2,4:6};function N(n,s){let{width:e,height:o,channels:i}=s;if(n.byteLength!==e*o*i)throw new Error(`pngEncode: raw length ${n.byteLength} != ${e}x${o}x${i}`);let d=Buffer.alloc(13);d.writeUInt32BE(e,0),d.writeUInt32BE(o,4),d[8]=8,d[9]=G[i];let t=e*i,a=Buffer.alloc(o*(t+1));for(let f=0;f<o;f++)a[f*(t+1)]=0,n.copy(a,f*(t+1)+1,f*t,(f+1)*t);return Buffer.concat([Buffer.from([137,80,78,71,13,10,26,10]),j("IHDR",d),j("IDAT",Y(a)),j("IEND",Buffer.alloc(0))])}var U=64,X=16,J=12e6,V=6e6,K=5e3,W=3e4,H="",_=class extends Error{constructor(e,o){super(`${e}: ${o}`);this.code=e}};async function q(n,s,e){let o=n.objs.has(s)?n.objs:n.commonObjs.has(s)?n.commonObjs:null;if(o)try{return o.get(s)??null}catch{return null}if(e.remainingMs<=0)return null;let i=s.startsWith("g_")?n.commonObjs:n.objs,d,t=Date.now();try{return await Promise.race([new Promise(a=>{try{i.get(s,f=>a(f??null))}catch{a(null)}}),new Promise(a=>{d=setTimeout(()=>a(null),Math.min(K,e.remainingMs))})])}finally{clearTimeout(d),e.remainingMs-=Date.now()-t}}async function z(){let n=await import("pdfjs-dist/legacy/build/pdf.mjs");return n.default??n}async function oe(n,s){let e=await z();H=e.version;let o={remainingMs:s?.resolveBudgetMs??W},i,d=e.getDocument({data:new Uint8Array(n),isEvalSupported:!1,verbosity:0});try{i=await d.promise}catch(t){throw t.name==="PasswordException"?new _("PDF_ENCRYPTED","password-protected \u2014 decrypt and re-ingest"):new _("PDF_UNREADABLE",String(t.message??t))}try{let t=[],a=[],f=new Map,D=[],T=new Map,R=0,A=0;for(let u=1;u<=i.numPages;u++){let O=await i.getPage(u);t.push(`[page ${u}]`);let C=await O.getTextContent(),c="",E=null;for(let m of C.items){if(typeof m!="object"||m===null||!("str"in m))continue;let p=m,P=Math.round(p.transform[5]);E!==null&&P!==E&&c.trim()!==""&&(t.push(c.trimEnd()),c=""),c!==""&&!c.endsWith(" ")&&p.str!==""&&!p.str.startsWith(" ")&&P===E&&(c+=" "),c+=p.str,A+=p.str.trim().length,E=P,p.hasEOL&&c.trim()!==""&&(t.push(c.trimEnd()),c="",E=null)}c.trim()!==""&&t.push(c.trimEnd());let B=await O.getOperatorList(),M=0;for(let m=0;m<B.fnArray.length;m++){let p=B.fnArray[m]===e.OPS.paintImageXObject,P=B.fnArray[m]===e.OPS.paintInlineImageXObject;if(!p&&!P)continue;M+=1;let h=`p${u}-${M}`,l=(v,L,w,S)=>{a.push({ref:h,page:u,media_type:"image/png",...L?{blob:L}:{},...S?{appearance:S}:{},delivery:v,...w?{duplicate_of:w}:{}}),t.push(v==="duplicate"&&w?`[img#${h}: image on page ${u} \u2014 same as img#${w}; cite img#${w}]`:`[img#${h} omitted: ${v}]`)};if(P){l("unsupported-image-kind");continue}let r=await q(O,B.argsArray[m][0],o);if(!r?.data||!r.width||!r.height){l("undecodable");continue}let I;if(r.kind===e.ImageKind.RGB_24BPP)I=3;else if(r.kind===e.ImageKind.RGBA_32BPP)I=4;else{l("unsupported-image-kind");continue}let y;try{y=N(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I})}catch{l("undecodable");continue}let g=$(y);f.set(g,y);let b=k(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I});if(r.width<U||r.height<U){l("below-dimension-floor",g,void 0,b);continue}let x=T.get(g);if(x!==void 0){l("duplicate",g,x,b);continue}if(y.byteLength>V){l("image-too-large",g,void 0,b);continue}if(R+y.byteLength>J){l("vision-byte-budget-reached",g,void 0,b);continue}if(D.length>=X){l("image-cap-reached",g,void 0,b);continue}T.set(g,h),R+=y.byteLength,D.push(h),a.push({ref:h,page:u,media_type:"image/png",blob:g,appearance:b,delivery:"selected"}),t.push(`[img#${h}: image on page ${u}]`)}}if(A===0&&i.numPages>0)throw new _("PDF_NO_TEXT_LAYER","no extractable text \u2014 image-only or scanned pdfs are not supported yet");return{projection:t.join(`
3
+ `)+`
4
+ `,inventory:a,blobs:f,delivered:D,pages:i.numPages,converter:{name:"pdfjs-dist",version:e.version,policy:"v1"}}}finally{await d.destroy().catch(()=>{})}}export{U as a,X as b,J as c,V as d,H as e,_ as f,oe as g};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-4OPQJ7PE.js";import{n as d,y as o}from"./chunk-C4G7RVJ6.js";import{a as L}from"./chunk-HCBYKLMW.js";import{a as u,b as c,i as A}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var x=h(D(),1);import{readdirSync as N,mkdirSync as B,statSync as k}from"fs";import{join as P}from"path";var r=h(L(),1);function O(n){try{return N(n).filter(l=>{try{return k(P(n,l)).isDirectory()}catch{return!1}})}catch{return[]}}function E(n,l,f,v){return{name:n,path:l,label:n,isActive:v}}function H({currentPath:n,onSelect:l,onCancel:f}){let s=O(d).map(i=>{let e=P(d,i);return E(i,e,n,e===n)}),p=!n,R=s.length+2,[a,C]=(0,x.useState)(()=>{if(p)return 0;let i=s.findIndex(e=>e.isActive);return i>=0?i+1:0}),[T,I]=(0,x.useState)(!1),[S,g]=(0,x.useState)("");return A((i,e)=>{if(T){if(e.escape){I(!1),g("");return}if(e.return){let t=S.trim();if(t){let m=P(d,t);B(m,{recursive:!0}),l(m),f()}return}if(e.backspace||e.delete){g(t=>t.slice(0,-1));return}i&&!e.ctrl&&!e.meta&&g(t=>t+i);return}if(e.escape){f();return}if(e.upArrow){C(t=>Math.max(0,t-1));return}if(e.downArrow){C(t=>Math.min(R-1,t+1));return}if(e.return){if(a===0){p||l(""),f();return}if(a===s.length+1){B(d,{recursive:!0}),I(!0),g("");return}let t=s[a-1];t&&!t.isActive&&l(t.path),f();return}}),T?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(c,{color:o.secondary,children:"Name: "}),(0,r.jsx)(c,{children:S}),(0,r.jsx)(c,{color:o.dim,children:"\u2588"})]}),(0,r.jsx)(b,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:"back"})]}):(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(u,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(c,{color:p?o.green:a===0?o.orange:o.dim,children:[a===0?"\u276F ":" ","Use temporary (no profile)",p?" \u25CF active":""]}),s.map((i,e)=>{let m=e+1===a,w=m?"\u276F ":" ",y=i.isActive?o.green:m?o.orange:void 0;return(0,r.jsxs)(c,{color:y,children:[w,i.label,i.isActive?" \u25CF active":""]},i.name)}),(0,r.jsxs)(c,{color:a===s.length+1?o.orange:o.dim,children:[a===s.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(b,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}export{O as a,E as b,H as c};
2
+ import{a as b}from"./chunk-TFPPEOAK.js";import{n as d,y as o}from"./chunk-27U4PLPX.js";import{a as L}from"./chunk-HCBYKLMW.js";import{a as u,b as c,i as A}from"./chunk-C44QQJR4.js";import{a as D}from"./chunk-6YGTRKDT.js";import{e as h}from"./chunk-UR6MHSHU.js";var x=h(D(),1);import{readdirSync as N,mkdirSync as B,statSync as k}from"fs";import{join as P}from"path";var r=h(L(),1);function O(n){try{return N(n).filter(l=>{try{return k(P(n,l)).isDirectory()}catch{return!1}})}catch{return[]}}function E(n,l,f,v){return{name:n,path:l,label:n,isActive:v}}function H({currentPath:n,onSelect:l,onCancel:f}){let s=O(d).map(i=>{let e=P(d,i);return E(i,e,n,e===n)}),p=!n,R=s.length+2,[a,C]=(0,x.useState)(()=>{if(p)return 0;let i=s.findIndex(e=>e.isActive);return i>=0?i+1:0}),[T,I]=(0,x.useState)(!1),[S,g]=(0,x.useState)("");return A((i,e)=>{if(T){if(e.escape){I(!1),g("");return}if(e.return){let t=S.trim();if(t){let m=P(d,t);B(m,{recursive:!0}),l(m),f()}return}if(e.backspace||e.delete){g(t=>t.slice(0,-1));return}i&&!e.ctrl&&!e.meta&&g(t=>t+i);return}if(e.escape){f();return}if(e.upArrow){C(t=>Math.max(0,t-1));return}if(e.downArrow){C(t=>Math.min(R-1,t+1));return}if(e.return){if(a===0){p||l(""),f();return}if(a===s.length+1){B(d,{recursive:!0}),I(!0),g("");return}let t=s[a-1];t&&!t.isActive&&l(t.path),f();return}}),T?(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile \u203A New"}),(0,r.jsxs)(u,{marginTop:1,children:[(0,r.jsx)(c,{color:o.secondary,children:"Name: "}),(0,r.jsx)(c,{children:S}),(0,r.jsx)(c,{color:o.dim,children:"\u2588"})]}),(0,r.jsx)(b,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:"back"})]}):(0,r.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:o.orange,paddingX:2,paddingY:1,children:[(0,r.jsx)(c,{color:o.orange,bold:!0,children:"Chrome Profile"}),(0,r.jsxs)(u,{flexDirection:"column",marginTop:1,children:[(0,r.jsxs)(c,{color:p?o.green:a===0?o.orange:o.dim,children:[a===0?"\u276F ":" ","Use temporary (no profile)",p?" \u25CF active":""]}),s.map((i,e)=>{let m=e+1===a,w=m?"\u276F ":" ",y=i.isActive?o.green:m?o.orange:void 0;return(0,r.jsxs)(c,{color:y,children:[w,i.label,i.isActive?" \u25CF active":""]},i.name)}),(0,r.jsxs)(c,{color:a===s.length+1?o.orange:o.dim,children:[a===s.length+1?"\u276F ":" ","+ Create new"]})]}),(0,r.jsx)(b,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}export{O as a,E as b,H 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}
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}
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,q as T,s as $,t as O}from"./chunk-GPG3FIN3.js";import{c as H,d as z}from"./chunk-2YQ6TW77.js";import{a as k}from"./chunk-T5Y6MOLM.js";import{p as B,q as R}from"./chunk-56PAQAX5.js";import{a as P}from"./chunk-27U4PLPX.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
+ `)}let i=C(e);if(f(i)){let o="python";try{let c=new k().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-XOKVOM7C.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});R(()=>l()),await c();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),a.current?{recovered:!0}:(B(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,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as v,b as w,d as C}from"./chunk-QROUKGKU.js";import{b as k}from"./chunk-OHRS3H7Z.js";import{a as E}from"./chunk-5JTUL6XL.js";import{a as T}from"./chunk-JFAFKHDX.js";import{a as y,b as O}from"./chunk-GW5DWAXY.js";import{d,e as g}from"./chunk-5YPBPZUR.js";var D=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function p(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function b(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function S(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return b(e,t,g.BELONGS_TO);if(n===d.AC){let o=b(e,t,g.SCOPED_TO);return o?e.nodeLabel.get(o)===d.USECASE?o:b(e,o,g.BELONGS_TO):null}if(n===d.TEST){let o=b(e,t,g.AUTOMATES);return o?b(e,o,g.BELONGS_TO):null}return null}function A(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function G(e,t){return{ucTip:t,display:A(e,t),seamRef:e.nameOf.get(t)??t}}function L(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!D.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=S(e,o,s);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${A(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:G(e,a)}}function z(e,t){return h(e,t)}function h(e,t){let n=[];for(let{cid:s}of e.byLabel(d.SCENARIO)){if(!p(e,s)||!e.edgesFrom(s).some(r=>r.type===g.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(s).filter(r=>r.type===g.AUTOMATES&&p(e,r.src));if(a.length===0)n.push({scenario:s,test:null});else for(let r of a)n.push({scenario:s,test:r.src})}let o=new Map;for(let{cid:s}of e.byLabel(d.AC)){if(!p(e,s)||S(e,s,d.AC)!==t)continue;let a=e.edgesInto(s).filter(r=>r.type===g.VERIFIES&&p(e,r.src)).map(r=>r.src).sort();o.set(s,a)}return{pairs:n,verifies:o}}function x(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,f)=>l===u[f])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!s.has(n(r))),minted:t.pairs.filter(r=>!o.has(n(r))),retained:t.pairs.filter(r=>o.has(n(r))),moves:a}}function P(e,t,n,o,s){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(r(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(r(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(r(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function U(e,t,n,o,s,a){let r=y(e),i=E(r,t.ucTip);if(!i)return a==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=h(r,t.ucTip),l=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(l);else if(!await o.confirm(`${l} \u2014 proceed?`))return o.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let f=k(e,r,t.ucTip,n.because),c=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...f!==void 0?{changeDelta:f.change_delta,priorDesign:f.prior_design}:{}});if(c===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(o,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let m=y(e),$=m.tipOf(t.ucTip),R=E(m,$)?.seq;return P(o,m,t.display,{before:i.seq,after:R??"?"},x(u,h(m,$))),{code:0,outcome:"evolved"}}function F(e){let t=new Map,n=0;for(let{cid:s,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(s);if(!r||!D.has(r)||!p(e,s)||!O(e,s))continue;let i=S(e,s,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,G(e,i)))}return{targets:[...t.values()].sort((s,a)=>s.display<a.display?-1:s.display>a.display?1:0),staleCount:n}}function I(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!D.has(s)||!p(e,n))&&O(e,n)&&S(e,n,s)===t)return!0}return!1}async function N(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(s,n);if(!a)return 2;let r=o.runDesignForUc??_;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=y(a),u,l=null;if(e){let c=L(i,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&E(i,c.target.ucTip)&&!I(i,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[c.target]}else{let{targets:c,staleCount:m}=F(i);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;l=`from-stale: ${m} stale node(s) \u2192 ${c.length} use-case(s)`,u=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(l&&n.out(l),e){let c=await U(a,u[0],t,n,r,"single");return c.outcome==="evolved"&&t.because&&T(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let f=0;for(let c of u){let{code:m}=await U(a,c,t,n,r,"batch");m!==0&&f===0&&(f=m)}return f}var _=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-AACBTSAA.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await o()}finally{process.stdout.write=s}};async function J(e,t){return N(e,t,C(),{})}export{L as a,z as b,U as c,F as d,N as e,_ as f,J as g};
2
+ import{a as v,b as w,d as C}from"./chunk-OS4VSIHT.js";import{b as k}from"./chunk-TRJUD3XJ.js";import{a as T}from"./chunk-JFAFKHDX.js";import{a as E}from"./chunk-JZ26R6UL.js";import{A as y,B as O}from"./chunk-TH47OOBV.js";import{d,e as g}from"./chunk-WXHQYYD5.js";var D=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function p(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function b(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function S(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return b(e,t,g.BELONGS_TO);if(n===d.AC){let o=b(e,t,g.SCOPED_TO);return o?e.nodeLabel.get(o)===d.USECASE?o:b(e,o,g.BELONGS_TO):null}if(n===d.TEST){let o=b(e,t,g.AUTOMATES);return o?b(e,o,g.BELONGS_TO):null}return null}function A(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function G(e,t){return{ucTip:t,display:A(e,t),seamRef:e.nameOf.get(t)??t}}function L(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!D.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=S(e,o,s);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${A(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:G(e,a)}}function z(e,t){return h(e,t)}function h(e,t){let n=[];for(let{cid:s}of e.byLabel(d.SCENARIO)){if(!p(e,s)||!e.edgesFrom(s).some(r=>r.type===g.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(s).filter(r=>r.type===g.AUTOMATES&&p(e,r.src));if(a.length===0)n.push({scenario:s,test:null});else for(let r of a)n.push({scenario:s,test:r.src})}let o=new Map;for(let{cid:s}of e.byLabel(d.AC)){if(!p(e,s)||S(e,s,d.AC)!==t)continue;let a=e.edgesInto(s).filter(r=>r.type===g.VERIFIES&&p(e,r.src)).map(r=>r.src).sort();o.set(s,a)}return{pairs:n,verifies:o}}function x(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,f)=>l===u[f])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!s.has(n(r))),minted:t.pairs.filter(r=>!o.has(n(r))),retained:t.pairs.filter(r=>o.has(n(r))),moves:a}}function P(e,t,n,o,s){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(r(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(r(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(r(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function U(e,t,n,o,s,a){let r=y(e),i=E(r,t.ucTip);if(!i)return a==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=h(r,t.ucTip),l=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(l);else if(!await o.confirm(`${l} \u2014 proceed?`))return o.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let f=k(e,r,t.ucTip,n.because),c=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...f!==void 0?{changeDelta:f.change_delta,priorDesign:f.prior_design}:{}});if(c===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(o,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let m=y(e),$=m.tipOf(t.ucTip),R=E(m,$)?.seq;return P(o,m,t.display,{before:i.seq,after:R??"?"},x(u,h(m,$))),{code:0,outcome:"evolved"}}function F(e){let t=new Map,n=0;for(let{cid:s,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(s);if(!r||!D.has(r)||!p(e,s)||!O(e,s))continue;let i=S(e,s,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,G(e,i)))}return{targets:[...t.values()].sort((s,a)=>s.display<a.display?-1:s.display>a.display?1:0),staleCount:n}}function I(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!D.has(s)||!p(e,n))&&O(e,n)&&S(e,n,s)===t)return!0}return!1}async function N(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(s,n);if(!a)return 2;let r=o.runDesignForUc??_;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=y(a),u,l=null;if(e){let c=L(i,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&E(i,c.target.ucTip)&&!I(i,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[c.target]}else{let{targets:c,staleCount:m}=F(i);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;l=`from-stale: ${m} stale node(s) \u2192 ${c.length} use-case(s)`,u=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(l&&n.out(l),e){let c=await U(a,u[0],t,n,r,"single");return c.outcome==="evolved"&&t.because&&T(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let f=0;for(let c of u){let{code:m}=await U(a,c,t,n,r,"batch");m!==0&&f===0&&(f=m)}return f}var _=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-STKXOUYI.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await o()}finally{process.stdout.write=s}};async function J(e,t){return N(e,t,C(),{})}export{L as a,z as b,U as c,F as d,N as e,_ as f,J as g};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as n}from"./chunk-C4G7RVJ6.js";import{createHash as _}from"crypto";import{existsSync as m,readFileSync as u}from"fs";import{dirname as T,join as f,resolve as o}from"path";import{fileURLToPath as E}from"url";var s=T(E(import.meta.url)),l=2;function p(e,r){let t=_("sha256");return t.update(`kane-assurance-contract
2
+ import{a as n}from"./chunk-27U4PLPX.js";import{createHash as _}from"crypto";import{existsSync as m,readFileSync as u}from"fs";import{dirname as T,join as f,resolve as o}from"path";import{fileURLToPath as E}from"url";var s=T(E(import.meta.url)),l=2;function p(e,r){let t=_("sha256");return t.update(`kane-assurance-contract
3
3
  `),t.update(e),t.update(`
4
- agent_state_schema=${r}`),"sha256:"+t.digest("hex")}function d(){return[o(s,".."),o(s,"../../..")]}function i(){return"sha256:526e52a085d54094af869b1eac8d0e7360dd3a86181b0d06c43837871050a164"}var a=class extends Error{constructor(t,c){super(`agent/cli contract mismatch (cli ${t||"<unset>"}, agent ${c||"<unset>"}) \u2014 rebuild or reinstall the stale half`);this.expected=t;this.actual=c;this.name="PairMismatchError"}};function I(){return{TESTMUAI_CONTRACT_DIGEST:i(),TESTMUAI_CLIENT_VERSION:process.env.KANE_DEV_FORCE_CLIENT_RELEASE??`kane-cli/${n}`}}export{a,I as b};
4
+ agent_state_schema=${r}`),"sha256:"+t.digest("hex")}function d(){return[o(s,".."),o(s,"../../..")]}function i(){return"sha256:85dd52f33a9fd9cf22ebb81f04dfd3c05bdbeca2e62e3a7a53e8caaaa4060752"}var a=class extends Error{constructor(t,c){super(`agent/cli contract mismatch (cli ${t||"<unset>"}, agent ${c||"<unset>"}) \u2014 rebuild or reinstall the stale half`);this.expected=t;this.actual=c;this.name="PairMismatchError"}};function I(){return{TESTMUAI_CONTRACT_DIGEST:i(),TESTMUAI_CLIENT_VERSION:process.env.KANE_DEV_FORCE_CLIENT_RELEASE??`kane-cli/${n}`}}export{a,I as b};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as f,c as u}from"./chunk-EYOCNMUM.js";import{d as g,k as p}from"./chunk-27U4PLPX.js";import{readFileSync as _,writeFileSync as m,mkdirSync as b,existsSync as h}from"fs";import{dirname as v}from"path";var s={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:p,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0};function w(o){let{mobile:e,...i}=o,t={...i};delete t.target,delete t.device,delete t.app;let n=e??{};n.tui_target&&(t.target=n.tui_target);let r=n.default_target?.id?.trim();r&&(t.device=r),n.default_app&&(t.app=n.default_app);let a={};return n.no_reset!==void 0&&(a.no_reset=n.no_reset),n.appium_url!==void 0&&(a.appium_url=n.appium_url),Object.keys(a).length>0&&(t.mobile=a),t}function C(o){let e=o.mobile??{},i=typeof o.target=="string"?o.target:void 0,t=typeof o.device=="string"&&o.device.trim()!==""?o.device.trim():void 0,n=typeof o.app=="string"&&o.app!==""?o.app:void 0,r={},a=i??e.tui_target;if(a&&(r.tui_target=a),t){let d=f(a,void 0);(d.kind==="emulator"||d.kind==="simulator")&&(r.default_target={platform:u(d.kind),kind:d.kind,id:t})}else e.default_target?.id?.trim()&&(r.default_target=e.default_target);let l=n??e.default_app;return l&&(r.default_app=l),e.no_reset!==void 0&&(r.no_reset=e.no_reset),e.appium_url!==void 0&&(r.appium_url=e.appium_url),Object.keys(r).length>0?r:void 0}var c=class{constructor(e=g){this.path=e}exists(){return h(this.path)}load(){try{let e=_(this.path,"utf-8"),i=JSON.parse(e),t=C(i),{target:n,device:r,app:a,...l}=i;return{...s,...l,...t?{mobile:t}:{},code_export:{...s.code_export,...i.code_export??{}},generate:{...s.generate,...i.generate??{}}}}catch{return{...s,code_export:{...s.code_export},generate:{...s.generate}}}}write(e){try{b(v(this.path),{recursive:!0}),m(this.path,JSON.stringify(w(e),null,2)+`
3
+ `)}catch(i){let t=i instanceof Error?i.message:String(i);process.stderr.write(`[config] Failed to save config: ${t}
4
+ `)}}set(e,i){let t=this.load();t[e]=i,this.write(t)}save(e){this.write({...this.load(),...e})}getMobile(){return this.load().mobile??{}}setMobile(e){let i={...this.getMobile()};for(let t of Object.keys(e)){let n=e[t];n===void 0?delete i[t]:i[t]=n}this.set("mobile",Object.keys(i).length>0?i:void 0)}writeRaw(e){this.write(e)}};export{c as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as n}from"./chunk-C4G7RVJ6.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
2
+ import{y as n}from"./chunk-27U4PLPX.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as xe,b as ye}from"./chunk-VAYBKR76.js";import{a as oe,b as q,d as ae}from"./chunk-CUM23TLF.js";import{a as Ne,b as Ee,f as ue,i as X}from"./chunk-DUAXZYAD.js";import{d as Z,e as b,f as se,g as ne,h as _e}from"./chunk-WXHQYYD5.js";function ke(r,s){let t=r.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(t.length>60){let o=t.lastIndexOf("-",60);t=(o>0?t.slice(0,o):t.slice(0,60)).replace(/-+$/g,"")}if(!de.test(t))return null;let e=t;for(let o=2;s(e);o++)e=`${t}-${o}`;return de.test(e)?e:null}var Ae={source:"src",usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"};function Ye(r,s,t){let e=Ae[r];return ke(e?`${e} ${s}`:s,t)}var De={usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"},Re=/^(uc|sc|ac|t|gap|sty)-\d+$/i;function Oe(r,s,t){let e=De[r];if(!e)return null;let o=new RegExp(`^${e}-(\\d+)$`),u=0;for(let a of t){let g=o.exec(a);if(!g)continue;let n=Number(g[1]);Number.isSafeInteger(n)&&n>u&&(u=n)}let d=u+1;for(;s(`${e}-${d}`);)d+=1;return`${e}-${d}`}var Me=/^L([1-9]\d*)-L([1-9]\d*)$/,Ve=/^img#(p[1-9]\d*-[1-9]\d*|i[1-9]\d*)$/;function le(r){if(r==="img#whole")return{kind:"img-whole"};let s=Ve.exec(r);if(s)return{kind:"img-part",ref:s[1]};let t=Me.exec(r);return t?{kind:"lines",a:parseInt(t[1],10),b:parseInt(t[2],10)}:null}function Pe(r,s){let t=/^L(\d+)-L(\d+)$/.exec(s);if(!t)return null;let e=parseInt(t[1],10),o=parseInt(t[2],10),u=r.split(`
3
+ `);return e<1||o<e||o>u.length?null:u.slice(e-1,o).map(d=>d.replace(/^\d+\| /,"")).join(`
4
+ `)}function be(r,s,t){let e=le(s.anchor);if(r.format==="image")return e?.kind==="img-whole"?[]:[{code:"CITE_ANCHOR_INVALID",detail:`image cites are anchor-only (img#whole), got ${s.anchor}`}];if(e?.kind==="img-part")return new Set((r.images??[]).map(d=>d.ref)).has(e.ref)?[]:[{code:"CITE_ANCHOR_INVALID",detail:`anchor ${s.anchor} names no embedded image of this source version`}];if(!s.anchor||s.quote===void 0||s.quote==="")return[{code:"MISSING_CITE",detail:"text-kind cites need anchor+quote"}];let o=t!==null?Pe(t,s.anchor):null;return o===null?[{code:"BAD_ANCHOR",detail:`anchor ${s.anchor} does not resolve in the source`}]:o.includes(s.quote)?[]:[{code:"QUOTE_MISMATCH",detail:`quote is not verbatim within ${s.anchor}`}]}import{existsSync as Ge,readFileSync as Le}from"fs";function nt(r){let s=ye(r),t=new Map(Object.entries(s.heads)),e=new Map(Object.entries(s.trust)),o=new Map(Object.entries(s.nodeLabel)),u=new Map(Object.entries(s.superseded)),d=new Map(Object.entries(s.names)),a=new Map(Object.entries(s.archivedReason)),g=new Set(s.appliedEvents),n=new Map(Object.entries(s.conv)),_=p=>s.media[p]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},h=new Map;for(let[p,E]of d)h.set(E,p);let c=new Map,C=p=>{if(c.has(p))return c.get(p);if(!o.has(p))return c.set(p,null),null;let E=xe(r,p);if(!Ge(E))throw new Ne(`derived node file missing for ${p} \u2014 run kane-cli context rebuild`);let I=JSON.parse(Le(E,"utf8"));return c.set(p,I),I},N=p=>{let E=p,I=new Set;for(;u.has(E)&&!I.has(E);){I.add(E);let O=u.get(E);if(typeof O!="string")break;E=O}return E},x=null,z=p=>{let E=h.get(p);if(E!==void 0)return E;if(x===null){x=new Map;for(let[L,k]of u)typeof k=="string"&&x.set(k,L)}let I=new Set,O=p;for(;!I.has(O);){I.add(O);let L=x.get(O);if(L===void 0)return null;let k=h.get(L);if(k!==void 0)return k;O=L}return null},Q=p=>{Re.test(p)&&(p=p.toLowerCase());let E=t.get(p),I=o.has(p)?p:d.get(p)??(typeof E=="string"?E:void 0);if(I===void 0||!o.has(I))return null;let O=N(I);return{cid:I,tip:O,superseded:u.has(I)||u.has(O)}},G=new Map;for(let p of Object.values(s.forward))for(let E of p){let I=G.get(E.dst);I?I.push(E):G.set(E.dst,[E])}let w=p=>(p??[]).filter(E=>!u.has(E.ecid)),ee=p=>w(G.get(p)),F=p=>ee(p).filter(E=>E.type===b.DERIVES),te=p=>w(s.forward[p]).some(E=>ne(E.type)?.pin?.comparesTo==="dst_tip"&&u.has(E.dst)),re=p=>{if(u.has(p))return"superseded";let E=F(p);if(E.length===0)return te(p)?"stale":"fresh";let I=new Map;for(let k of E)I.set(k.props.source_id,k);let O=!1,L=!1;for(let[k,D]of I){let J=t.get(k);if(J!=null&&(O=!0,J!==D.props.source_cid)){let i=n.get(k)?.chain;(!i||!i.includes(D.props.source_cid))&&(L=!0)}}return O?L||te(p)?"stale":"fresh":"orphaned"};return{heads:t,trust:e,nodeLabel:o,superseded:u,names:d,nameOf:h,archivedReason:a,appliedEvents:g,convChains:n,mediaOf:_,extractedSourceCids:new Set(s.extracted),extractionCompleteness:new Map(Object.entries(s.completeness??{}).map(([p,{seq:E,...I}])=>[p,I])),designOf:new Map(Object.entries(s.design_of??{})),designGenerationOf:new Map(Object.entries(s.design_generation??{})),latestHash:s.applied.hash,lastSeq:s.applied.seq,hasNode:p=>o.has(p),getNode:C,byLabel:p=>[...o.entries()].filter(([,E])=>E===p).map(([E])=>({cid:E,content:C(E)?.content??{}})),edgesFrom:p=>w(s.forward[p]),edgesInto:ee,derivesInto:F,resolve:Q,tipOf:N,displayNameOf:z,stale:re,staleList:()=>[...o.keys()].map(p=>({cid:p,state:re(p)})).filter(p=>p.state!=="fresh"),execHistory:p=>{let E=Q(p);if(!E)return[];let I=N(E.cid),O=new Set([I]),L=!0;for(;L;){L=!1;for(let[D,J]of u)J!==null&&O.has(J)&&!O.has(D)&&(O.add(D),L=!0)}let k=[];for(let D of Object.entries(s.exec??{}))O.has(D[0])&&k.push(...D[1]);return k.sort((D,J)=>D.started_at<J.started_at?-1:1)}}}function ot(r,s){if(r.stale(s)!=="stale")return!1;let t=new Map;for(let e of r.derivesInto(s))t.set(e.props.source_id,e);for(let[e,o]of t){let u=r.heads.get(e);if(u==null||u===o.props.source_cid)continue;let d=r.convChains.get(e)?.chain;if(!d||!d.includes(o.props.source_cid))return!0}for(let e of r.edgesFrom(s)){if(ne(e.type)?.pin?.comparesTo!=="dst_tip"||!r.superseded.has(e.dst))continue;let o=r.tipOf(e.dst);if(r.superseded.has(o)||r.nodeLabel.get(o)==="usecase")return!0}return!1}function pe(r,s){let t=new Map;for(let[d,a]of r.superseded)typeof a=="string"&&a!==d&&t.set(a,[...t.get(a)??[],d]);let e=[],o=[s],u=new Set;for(;o.length>0;){let d=o.pop();u.has(d)||(u.add(d),e.push(d),o.push(...t.get(d)??[]))}return e}function Ue(r,s){return(r.extraction_claims??[]).some(t=>t.source_id===s&&t.completeness==="complete")}function Fe(r,s){let t=new Set;for(let e of pe(r,s))for(let o of r.derivesInto(e))t.add(o.props?.source_id??"conversation");return t}function ve(r,s){let t=[],e=[],o=r.archived??[];if(o.length===0)return{valid:t,errors:e};let u=new Set([...r.source?[r.source.source_id]:[],...(r.sources??[]).map(a=>a.source_id)]),d=new Set;for(let a of r.use_cases){if(!a.matches_existing)continue;let g=s.resolve(a.matches_existing.cid);g&&d.add(s.tipOf(g.cid))}for(let a of o){let g=`archived[${a.target}]`,n=s.resolve(a.target),_=n?s.tipOf(n.cid):null;if(!_||(s.trust.get(_)??null)==="archived"){e.push({code:"ARCHIVE_TARGET_UNKNOWN",detail:`${g}: target does not resolve to an existing, live item`});continue}let h=Fe(s,_);if(!h.has(a.basis)){e.push({code:"ARCHIVE_FOREIGN_PROVENANCE",detail:`${g}: its provenance does not include ${a.basis} \u2014 an archive claim must come from a source that evidences the item`});continue}if(!u.has(a.basis)){e.push({code:"ARCHIVE_WITHOUT_COMPLETE_CLAIM",detail:`${g}: ${a.basis} was not read by this extraction \u2014 a completeness claim only counts for a source this run actually read`});continue}if(!Ue(r,a.basis)){e.push({code:"ARCHIVE_WITHOUT_COMPLETE_CLAIM",detail:`${g}: archiving needs an EXPLICIT complete extraction claim for ${a.basis} (the omitted-claims default does not count) \u2014 add extraction_claims`});continue}if(d.has(_)){e.push({code:"ARCHIVE_TARGET_MATCHED",detail:`${g}: this proposal also matches the target via matches_existing \u2014 a matched item cannot be archived by the same extraction; propose the change as an update instead`});continue}let c=[...h].filter(C=>C!==a.basis);if(c.length>0){e.push({code:"ARCHIVE_OTHER_LIVE_EVIDENCE",detail:`${g}: still evidenced by ${c.join(", ")} \u2014 an item another live source evidences is never archived from here`});continue}t.push({op:a,cid:_})}return{valid:t,errors:e}}var de=/^[a-z0-9][a-z0-9-]{1,63}$/;function we(r,s,t,e){if(!s)return{error:{code:"SUPERSEDE_TARGET_MISSING",detail:"supersede verdict needs a target (slug or cid)"}};let o=r.resolve(s);return o?o.superseded||e.has(o.cid)?{error:{code:"ALREADY_SUPERSEDED",detail:`${s} is already superseded (tip: ${o.tip})`}}:o.cid===t?{error:{code:"SELF_SUPERSEDE",detail:"a node cannot supersede itself"}}:{targetCid:o.cid}:{error:{code:"UNKNOWN_SUPERSEDE_TARGET",detail:`${s} names nothing in the graph`}}}function He(r,s,t,e,o=[]){if(!ne(s)?.acyclic)return null;if(t===e)return{code:"EDGE_CYCLE",detail:`${s} ${t} \u2192 itself`};let d=n=>[...r.edgesFrom(n).filter(_=>_.type===s).map(_=>_.dst),...o.filter(_=>_.type===s&&_.src===n).map(_=>_.dst)],a=new Set,g=[e];for(;g.length>0;){let n=g.pop();if(n===t)return{code:"EDGE_CYCLE",detail:`${s} ${t} \u2192 ${e} closes a cycle`};a.has(n)||(a.add(n),g.push(...d(n)))}return null}function vt(r,s,t,e){let u=ne(s)?.cardinality;if(u!=="one-live-per-src"&&u!=="one-live-per-src-and-dst")return null;let d=r.edgesFrom(t).filter(a=>a.type===s&&!r.superseded.has(a.dst));if(d.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${s} from ${t} already has a live edge (${d[0].ecid}) \u2014 supersede it first`};if(u==="one-live-per-src-and-dst"&&e!==void 0){let a=r.edgesInto(e).filter(g=>g.type===s&&!r.superseded.has(g.src));if(a.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${s} onto ${e} already has a live edge (${a[0].ecid}) \u2014 strict 1:1, supersede it first`}}return null}var Se=new Set(["high","med","low"]),fe=r=>r.cites&&r.cites.length>0?r.cites:[r.cite];function ge(r){let s=0;for(let t of r)typeof t=="object"&&t!==null&&"op"in t&&s++;return s===0?"flat":s===r.length?"ops":"mixed"}var qe=/^c[1-9][0-9]*$/;function Te(r,s,t,e){let o=new Map,u=[],d=[];for(let[g,n]of s.entries()){let _=`${r}.updated.criteria[${g}]`;if(n.op==="keep"||n.op==="remove"){if(!qe.test(n.ref??"")){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${_}: ref ${JSON.stringify(n.ref)} is not a c<N> criterion index`});continue}if(o.has(n.ref)){e.push({code:"CRITERIA_REF_DUPLICATE",detail:`${_}: ${n.ref} is already named by another op \u2014 every prior criterion appears in exactly one keep or remove`});continue}o.set(n.ref,n);let h=Number.parseInt(n.ref.slice(1),10);if(h>t.length){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${_}: ${n.ref} \u2014 the live target has ${t.length} criteria`});continue}if(t[h-1]!==n.text){e.push({code:"CRITERIA_REF_MISMATCH",detail:`${_}: ${n.ref} echo mismatch \u2014 the live target's criterion ${h} reads ${JSON.stringify(t[h-1])}, the op echoed ${JSON.stringify(n.text)} \u2014 re-read the node and re-emit`});continue}n.op==="remove"&&(u.push(n.text),(!n.reason||!n.reason.trim())&&e.push({code:"EMPTY_REASON",detail:`${_}: a remove op carries its reason`}))}else!n.text||!n.text.trim()?e.push({code:"EMPTY_CRITERION",detail:`${_}: set text is empty`}):d.push(n.text)}let a=[];for(let g=1;g<=t.length;g++)o.has(`c${g}`)||a.push(`c${g}`);a.length>0&&e.push({code:"CRITERIA_PARTITION_INCOMPLETE",detail:`${r}: prior criteria ${a.join(", ")} named by no keep/remove op \u2014 every prior criterion must be kept or removed (with a reason)`});for(let g of u)d.includes(g)&&e.push({code:"CRITERIA_OP_CONFLICT",detail:`${r}: ${JSON.stringify(g)} is removed AND re-set in the same update \u2014 drop one of the two ops`})}function St(r,s,t){let e=[],o=r.sources??[r.source],u=new Map(o.map(n=>[n.source_id,n.source_cid])),d=new Map;if(typeof s=="string")d.set(r.source.source_id,{media:t.mediaOf(r.source.source_cid),numberedText:s});else for(let[n,_]of s)d.set(n,_);for(let n of o)t.hasNode(n.source_cid)||e.push({code:"MISSING_SOURCE_NODE",detail:`source ${n.source_id} (${n.source_cid}) is not a committed node \u2014 ingest it first`});let a=(n,_)=>{let h=_.source_id??r.source.source_id;if(!u.has(h)){e.push({code:"CITE_SOURCE_UNKNOWN",detail:`${n}: cite source ${JSON.stringify(h)} is not in read_basis`});return}let c=d.get(h);if(!c){e.push({code:"MISSING_SOURCE_NODE",detail:`${n}: no citable text available for source ${h}`});return}for(let C of be(c.media,_,c.numberedText))e.push({code:C.code,detail:`${n}: ${C.detail}`})},g=new Set;for(let n of r.use_cases){if(g.has(n.temp_ref)&&e.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${n.temp_ref}`}),g.add(n.temp_ref),(!n.title||!n.title.trim())&&e.push({code:"EMPTY_TITLE",detail:`${n.temp_ref}: title is empty`}),Se.has(n.risk)||e.push({code:"BAD_RISK",detail:`${n.temp_ref}: risk ${JSON.stringify(n.risk)} not in high|med|low`}),!n.cite||!n.cite.anchor)e.push({code:"MISSING_CITE",detail:`${n.temp_ref}: every derived use-case must carry a cite`});else for(let h of fe(n))a(n.temp_ref,h);n.matches_existing&&!t.hasNode(n.matches_existing.cid)&&e.push({code:"UNKNOWN_MATCH",detail:`${n.temp_ref}: matches_existing ${n.matches_existing.cid} is not in the graph`});for(let[h,c]of(n.criteria??[]).entries())(!c.text||!c.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${n.temp_ref}.criteria[${h}]: text is empty`}),!c.cite||!c.cite.anchor?e.push({code:"MISSING_CITE",detail:`${n.temp_ref}.criteria[${h}]: every criterion carries its own cite`}):a(`${n.temp_ref}.criteria[${h}]`,c.cite);let _=n.updated?.criteria??[];if(_.length>0){let h=ge(_);if(h==="mixed")e.push({code:"CRITERIA_SHAPE_MIXED",detail:`${n.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});else if(h==="ops"){let c=_,C=n.matches_existing?We(t,n.matches_existing.cid):null;if(!C)e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${n.temp_ref}: op-union criteria address a prior version \u2014 they need a resolvable matches_existing target`});else{let N=t.getNode(C.cid)?.content.criteria??[];Te(n.temp_ref,c,N,e)}for(let[N,x]of c.entries())x.op==="set"&&(!x.cite||!x.cite.anchor?e.push({code:"MISSING_CITE",detail:`${n.temp_ref}.updated.criteria[${N}]: a set op carries the proposing source's cite`}):a(`${n.temp_ref}.updated.criteria[${N}]`,x.cite))}else for(let[c,C]of _.entries())(!C.text||!C.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${n.temp_ref}.updated.criteria[${c}]: text is empty`}),!C.cite||!C.cite.anchor?e.push({code:"MISSING_CITE",detail:`${n.temp_ref}.updated.criteria[${c}]: every updated criterion carries its own cite`}):a(`${n.temp_ref}.updated.criteria[${c}]`,C.cite)}}return e.push(...ve(r,t).errors),e}function je(r,s,t){return`${r}:${s}:${t}`}function Ke(r,s,t,e){let o=`${s}:${t}:`,u=0;for(let d of r.appliedEvents){if(!d.startsWith(o))continue;let a=d.slice(o.length);if(!/^\d+$/.test(a))continue;let g=Number.parseInt(a,10);g>u&&(u=g)}return Array.from({length:e},(d,a)=>je(s,t,u+1+a))}function We(r,s){let t=r.resolve(s);if(t===null)return null;let e=t.cid;if(r.superseded.has(e)){let o=r.tipOf(e);return r.superseded.has(o)?null:{cid:o,redirected:!0}}return{cid:e,redirected:!1}}function It(r){let{contextDir:s,graph:t,proposal:e,proposalId:o,verdicts:u,by:d,allowStaleBasis:a,extractorVersion:g,autoName:n}=r,_=ue(s);if(!a&&e.read_basis!==_)return{record:null,errors:[{code:"STALE_BASIS",detail:`proposal read_basis ${String(e.read_basis)} != latest ${String(_)}`}]};for(let i of e.sources??[e.source])if(!t.hasNode(i.source_cid))return{record:null,errors:[{code:"MISSING_SOURCE_NODE",detail:`source ${i.source_id} (${i.source_cid}) is not a committed node \u2014 ingest it first`}]};let h=new Map((e.sources??[e.source]).map(i=>[i.source_id,i.source_cid])),c=[],C=[],N=new Map,x=[],z=t.mediaOf(e.source.source_cid),Q=new Set,G=[],w=[],ee=[],F=[];for(let i of ve(e,t).valid)F.push({id:i.cid,kind:"pending_archive",resolution:"pending",edit:null,reason:i.op.reason,by:d});let te=[],re=[],p=new Set,E=new Set,I=(i,f,M)=>{let j=we(t,f.supersedeTarget,M,p);if("error"in j){c.push({code:j.error.code,detail:`${i}: ${j.error.detail}`});return}p.add(j.targetCid),te.push({kind:"node",old:j.targetCid,new:M,reason:f.reason??`superseded via review by ${d.id}`,by:d})};for(let i of e.use_cases){let f=u.get(i.temp_ref)??{resolution:"skipped"};Q.has(i.temp_ref)&&c.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${i.temp_ref}`}),Q.add(i.temp_ref),(!i.title||!i.title.trim())&&c.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: title is empty`}),Se.has(i.risk)||c.push({code:"BAD_RISK",detail:`${i.temp_ref}: risk ${JSON.stringify(i.risk)} not in high|med|low`});let M=le(i.cite?.anchor??""),j=i.cite?.source_id!==void 0&&h.has(i.cite.source_id)?t.mediaOf(h.get(i.cite.source_id)):z;if(j.format==="image"){if(M?.kind!=="img-whole"){c.push({code:i.cite?.anchor?"CITE_ANCHOR_INVALID":"MISSING_CITE",detail:`${i.temp_ref}: image cites are anchor-only (img#whole)`});continue}}else if(M?.kind==="img-part"){if(!(j.images??[]).some(m=>m.ref===M.ref)){c.push({code:"CITE_ANCHOR_INVALID",detail:`${i.temp_ref}: anchor ${i.cite?.anchor} names no embedded image of this source version`});continue}}else if(!i.cite||!i.cite.anchor||!i.cite.quote){c.push({code:"MISSING_CITE",detail:`${i.temp_ref}: every derived use-case must cite anchor+quote`});continue}f.resolution==="edited"&&f.edit&&(f.edit.title!==void 0&&!f.edit.title.trim()&&c.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: edited title is empty`}),f.edit.risk!==void 0&&!Se.has(f.edit.risk)&&c.push({code:"BAD_RISK",detail:`${i.temp_ref}: edited risk ${JSON.stringify(f.edit.risk)} invalid`}));let he=ae({title:f.edit?.title??i.title,description:i.description,summary:f.edit?.summary??i.summary,actors:i.actors,value:i.value,risk:f.edit?.risk??i.risk,...i.criteria&&i.criteria.length>0?{criteria:i.criteria.map(l=>l.text)}:{}}),$=oe("usecase",he),me=i.cite.source_id??e.source.source_id,Ie=h.get(me);if(i.cite.source_id!==void 0&&Ie===void 0){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: cite source ${JSON.stringify(me)} is not in read_basis`});continue}let Y={source_id:me,source_cid:Ie??e.source.source_cid,anchor:i.cite.anchor,...i.cite.quote?{quote:i.cite.quote}:{}};if(i.matches_existing&&!t.hasNode(i.matches_existing.cid)){c.push({code:"UNKNOWN_MATCH",detail:`${i.temp_ref}: matches_existing ${i.matches_existing.cid} is not in the graph`});continue}let y=i.matches_existing?.cid??(t.hasNode($)?$:null);if(y&&t.superseded.has(y)){let l=t.tipOf(y);y=t.superseded.has(l)?null:l}if(y&&i.matches_existing&&(t.trust.get(y)??null)==="derived"){let l=i.updated?.criteria??[];if(i.changed&&l.length>0&&ge(l)==="ops"&&(f.resolution==="approved"||f.resolution==="edited")){c.push({code:"UC_UNREVIEWED",detail:`${i.temp_ref}: merge target ${y.slice(0,19)} is unreviewed (derived) \u2014 bless it first (kane-cli context review) and re-propose the merge`});continue}let m=(r.probeHits??[]).find(v=>v.tempRef===i.temp_ref&&v.candidateCid===y);x.push({tempRef:i.temp_ref,candidate_cid:y,score:m?.score??1,scorer:m?.scorer??"lexical_fallback"}),y=null}if(y){if(i.changed&&(f.resolution==="approved"||f.resolution==="edited")){let l=i.updated;if(!l||Object.keys(l).length===0){c.push({code:"CHANGED_NEEDS_PAYLOAD",detail:`${i.temp_ref}: changed:true needs an updated{...} payload naming the moved fields`});continue}let m=t.getNode(y)?.content??{},v=l.criteria??[],T=v.length>0?ge(v):"flat";if(T==="mixed"){c.push({code:"CRITERIA_SHAPE_MIXED",detail:`${i.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});continue}if(T==="ops"){let A=v,V=m.criteria??[],P=c.length;Te(i.temp_ref,A,V,c);for(let[ie,ce]of A.entries())ce.op==="set"&&(!ce.cite||!ce.cite.anchor)&&c.push({code:"MISSING_CITE",detail:`${i.temp_ref}.updated.criteria[${ie}]: a set op carries the proposing source's cite`});if(c.length>P)continue;let R=A.filter(ie=>ie.op!=="remove").map(ie=>ie.text),H=ae({title:f.edit?.title??l.title??String(m.title??i.title),...l.description??m.description?{description:l.description??m.description}:{},...f.edit?.summary??l.summary??m.summary?{summary:f.edit?.summary??l.summary??m.summary}:{},...l.actors??m.actors?{actors:l.actors??m.actors}:{},...l.value??m.value?{value:l.value??m.value}:{},risk:f.edit?.risk??l.risk??String(m.risk??i.risk),...R.length>0?{criteria:R}:{}}),K=oe("usecase",H);if(K!==y){for(let S of se("usecase",H))c.push({code:S.code,detail:`${i.temp_ref}: ${S.detail}`});G.push({cid:K,label:Z.USECASE,content:H});for(let S of fe(i)){let W=S.source_id??e.source.source_id,U=h.get(W);if(!U){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: cite source ${JSON.stringify(W)} is not in read_basis`});continue}let B={source_id:W,source_cid:U,anchor:S.anchor,...S.quote?{quote:S.quote}:{}};w.push({ecid:q("DERIVES",U,K,B),type:b.DERIVES,src:U,dst:K,props:B})}let ce=pe(t,y).flatMap(S=>t.edgesInto(S)).filter(S=>S.type===b.DERIVES&&typeof S.props.claim=="string");for(let S of A){if(S.op!=="keep")continue;let W=new Set;for(let U of ce){let B=U.props;if(B.claim!==S.text)continue;let $e=`${B.source_id}|${B.source_cid}|${B.anchor}`;if(W.has($e))continue;W.add($e);let Ce={...U.props};w.push({ecid:q("DERIVES",U.src,K,Ce),type:b.DERIVES,src:U.src,dst:K,props:Ce})}}for(let S of A){if(S.op!=="set")continue;let W=S.cite.source_id??e.source.source_id,U=h.get(W);if(!U){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: set cite source ${JSON.stringify(W)} is not in read_basis`});continue}let B={source_id:W,source_cid:U,anchor:S.cite.anchor,...S.cite.quote?{quote:S.cite.quote}:{},claim:S.text};w.push({ecid:q("DERIVES",U,K,B),type:b.DERIVES,src:U,dst:K,props:B})}for(let S of A)S.op==="remove"&&C.push({about:y,ref:S.ref,text:S.text,reason:S.reason});I(i.temp_ref,{resolution:"supersede",supersedeTarget:y,reason:f.reason??`criteria merge: ${e.source.source_id} (${A.filter(S=>S.op==="keep").length} kept, ${A.filter(S=>S.op==="set").length} set, ${A.filter(S=>S.op==="remove").length} removed)`},K),F.push({id:K,kind:"review-item",resolution:f.resolution,edit:f.resolution==="edited"?{...f.edit}:null,reason:null,by:d});continue}}else{let A=v.map(R=>typeof R=="string"?{text:R,cite:void 0}:R),V=ae({title:f.edit?.title??l.title??String(m.title??i.title),...l.description??m.description?{description:l.description??m.description}:{},...f.edit?.summary??l.summary??m.summary?{summary:f.edit?.summary??l.summary??m.summary}:{},...l.actors??m.actors?{actors:l.actors??m.actors}:{},...l.value??m.value?{value:l.value??m.value}:{},risk:f.edit?.risk??l.risk??String(m.risk??i.risk),...l.criteria?A.length>0?{criteria:A.map(R=>R.text)}:{}:m.criteria?{criteria:m.criteria}:{}}),P=oe("usecase",V);if(P!==y){for(let R of se("usecase",V))c.push({code:R.code,detail:`${i.temp_ref}: ${R.detail}`});G.push({cid:P,label:Z.USECASE,content:V}),w.push({ecid:q("DERIVES",Y.source_cid,P,Y),type:b.DERIVES,src:Y.source_cid,dst:P,props:Y});for(let R of A){if(!R.cite)continue;let H={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:R.cite.anchor,...R.cite.quote?{quote:R.cite.quote}:{},claim:R.text};w.push({ecid:q("DERIVES",H.source_cid,P,H),type:b.DERIVES,src:H.source_cid,dst:P,props:H})}I(i.temp_ref,{resolution:"supersede",supersedeTarget:y,reason:f.reason??`matches-but-changed: ${e.source.source_id} moved (${Object.keys(l).join(", ")})`},P),F.push({id:P,kind:"review-item",resolution:f.resolution,edit:f.resolution==="edited"?{...f.edit}:null,reason:null,by:d});continue}for(let R of A){if(!R.cite)continue;let H={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:R.cite.anchor,...R.cite.quote?{quote:R.cite.quote}:{},claim:R.text};w.push({ecid:q("DERIVES",H.source_cid,y,H),type:b.DERIVES,src:H.source_cid,dst:y,props:H})}}}if(i.changed&&f.resolution==="skipped"){let l=i.updated?.criteria??[];l.length>0&&ge(l)==="ops"&&F.push({id:y,kind:"pending_update",resolution:"pending",edit:{temp_ref:i.temp_ref,source_id:e.source.source_id,updated:i.updated},reason:i.change_note??null,by:d})}if(f.resolution!=="rejected"){for(let l of fe(i)){let m=l.source_id??e.source.source_id,v=h.get(m);if(!v){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: cite source ${JSON.stringify(m)} is not in read_basis`});continue}let T={source_id:m,source_cid:v,anchor:l.anchor,...l.quote?{quote:l.quote}:{}};w.push({ecid:q("DERIVES",v,y,T),type:b.DERIVES,src:v,dst:y,props:T})}(f.resolution==="approved"||f.resolution==="edited"||f.resolution==="supersede")&&F.push({id:y,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d}),f.resolution==="supersede"&&I(i.temp_ref,f,y)}continue}for(let l of se("usecase",he))c.push({code:l.code,detail:`${i.temp_ref}: ${l.detail}`});for(let l of _e(b.DERIVES,"source","usecase",Y))c.push({code:l.code,detail:`${i.temp_ref}: ${l.detail}`});G.push({cid:$,label:Z.USECASE,content:he}),N.set(i.temp_ref,$),w.push({ecid:q("DERIVES",Y.source_cid,$,Y),type:b.DERIVES,src:Y.source_cid,dst:$,props:Y});for(let l of fe(i).slice(1)){let m=l.source_id??e.source.source_id,v=h.get(m);if(!v){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: cite source ${JSON.stringify(m)} is not in read_basis`});continue}let T={source_id:m,source_cid:v,anchor:l.anchor,...l.quote?{quote:l.quote}:{}};for(let A of _e(b.DERIVES,"source","usecase",T))c.push({code:A.code,detail:`${i.temp_ref}: ${A.detail}`});w.push({ecid:q("DERIVES",v,$,T),type:b.DERIVES,src:v,dst:$,props:T})}for(let l of i.criteria??[]){let m=l.cite.source_id??e.source.source_id,v=h.get(m);if(!v){c.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i.temp_ref}: criterion cite source ${JSON.stringify(m)} is not in read_basis`});continue}let T={source_id:m,source_cid:v,anchor:l.cite.anchor,...l.cite.quote?{quote:l.cite.quote}:{},claim:l.text};w.push({ecid:q("DERIVES",T.source_cid,$,T),type:b.DERIVES,src:T.source_cid,dst:$,props:T})}for(let l of i.depends_on_hint??[]){let m=V=>V.toLowerCase().trim().replace(/\s+/g," "),v=null,T=t.resolve(l);if(T&&!T.superseded&&t.nodeLabel.get(T.cid)===Z.USECASE&&(v=T.cid),!v){for(let{cid:V,content:P}of t.byLabel(Z.USECASE))if(!t.superseded.has(V)&&m(String(P.title??""))===m(l)){v=V;break}}if(!v){let V=G.find(P=>P.label===Z.USECASE&&m(String(P.content.title??""))===m(l));V&&(v=V.cid)}!v||v===$||He(t,b.DEPENDS_ON,$,v,ee)||ee.some(V=>V.src===$&&V.dst===v)||(w.push({ecid:q(b.DEPENDS_ON,$,v,{reason:"extract hint"}),type:b.DEPENDS_ON,src:$,dst:v,props:{reason:"extract hint"}}),ee.push({src:$,dst:v,type:b.DEPENDS_ON}))}if((f.resolution==="approved"||f.resolution==="edited"||f.resolution==="supersede")&&t.superseded.get($)===null&&!p.has($)&&te.push({kind:"node",old:$,new:$,reason:`re-minted after tombstone via review by ${d.id}`,by:d}),n){let l=Oe("usecase",m=>E.has(m),t.names.keys());l!==null&&!t.nameOf.has($)&&(E.add(l),re.push({cid:$,slug:l,by:d}))}f.resolution==="approved"?F.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d}):f.resolution==="edited"?F.push({id:$,kind:"review-item",resolution:"edited",edit:{...f.edit},reason:null,by:d}):f.resolution==="rejected"?F.push({id:$,kind:"review-item",resolution:"rejected",edit:null,reason:f.reason??null,by:d}):f.resolution==="supersede"&&(F.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:f.reason??null,by:d}),I(i.temp_ref,f,$))}if(c.length)return{record:null,errors:c};let O=new Date().toISOString(),L=(e.sources?.length??0)>1||(e.extraction_claims?.length??0)>0,k;if(L){let i=[];if(e.extraction_claims==null)i.push({source_id:e.source.source_id,source_cid:e.source.source_cid,completeness:"complete",...g?{extractor_version:g}:{},at:O});else{let f=new Map(e.extraction_claims.map(M=>[M.source_id,M.completeness]));for(let M of e.sources??[e.source]){let j=f.get(M.source_id)??null;j!==null&&i.push({source_id:M.source_id,source_cid:M.source_cid,completeness:j,...g?{extractor_version:g}:{},at:O})}}k=i}else k=e.source.source_cid;let D=[];for(let i of r.probeHits??[])D.push({...N.has(i.tempRef)?{new_cid:N.get(i.tempRef)}:{},candidate_cid:i.candidateCid,score:i.score,scorer:i.scorer,probe_basis:null});for(let i of x){let f=N.get(i.tempRef);D.some(M=>M.new_cid===f&&M.candidate_cid===i.candidate_cid)||D.push({...f!==void 0?{new_cid:f}:{},candidate_cid:i.candidate_cid,score:i.score,scorer:i.scorer,probe_basis:null})}return{record:X(s,{ts:O,proposal_id:o,...o!=null?{extraction_of:k}:{},...o!=null&&g?{extractor_version:g}:{},...C.length>0?{criteria_removed:C}:{},...D.length>0?{dedup_hits:D}:{},nodes:G,edges:w,review:F,supersessions:te,...re.length>0?{names:re}:{},...r.judgements&&r.judgements.length>0?{judgements:r.judgements}:{},...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:r.sid?{event_ids:Ke(t,r.sid,"extract",1)}:{},...r.sid?{sid:r.sid}:{},source_head_moves:{}},{expectPrev:_}).record,errors:null}}function $t(r){let{contextDir:s,graph:t,verdicts:e,by:o}=r,u=[],d=[],a=[],g=[],n=new Set;for(let[h,c]of e){if(c.resolution==="skipped")continue;let C=t.resolve(h);if(!C){u.push({code:"UNKNOWN_NODE",detail:`${h} names nothing in the graph`});continue}if(C.superseded){u.push({code:"SUPERSEDED_TARGET",detail:`${h} is superseded \u2014 review the tip (${C.tip})`});continue}let N=C.cid;if(c.resolution==="approved")a.push({id:N,kind:"review-item",resolution:"approved",edit:null,reason:null,by:o});else if(c.resolution==="rejected")r.holdArchives?a.push({id:N,kind:"pending_archive",resolution:"pending",edit:null,reason:c.reason??null,by:o}):a.push({id:N,kind:"review-item",resolution:"rejected",edit:null,reason:c.reason??null,by:o});else if(c.resolution==="edited"){let x=t.getNode(N);if(!x){u.push({code:"UNKNOWN_NODE",detail:`${h}: node file unreadable`});continue}let z={...x.content,...c.edit?.title!==void 0?{title:c.edit.title}:{},...c.edit?.summary!==void 0?{summary:c.edit.summary}:{},...c.edit?.risk!==void 0?{risk:c.edit.risk}:{}},Q=se(x.label,z);if(Q.length>0){for(let w of Q)u.push({code:w.code,detail:`${h}: ${w.detail}`});continue}let G=oe(x.label,z);if(G===N){a.push({id:N,kind:"review-item",resolution:"approved",edit:null,reason:null,by:o});continue}d.push({cid:G,label:x.label,content:z}),n.add(N),g.push({kind:"node",old:N,new:G,reason:c.reason??"edited in review",by:o}),a.push({id:G,kind:"review-item",resolution:"edited",edit:{...c.edit},reason:null,by:o})}else if(c.resolution==="supersede"){let x=we(t,c.supersedeTarget,N,n);if("error"in x){u.push({code:x.error.code,detail:`${h}: ${x.error.detail}`});continue}n.add(x.targetCid),r.holdArchives?a.push({id:x.targetCid,kind:"pending_archive",resolution:"pending",edit:null,reason:`supersede by ${N}${c.reason?` \u2014 ${c.reason}`:""}`,by:o}):(g.push({kind:"node",old:x.targetCid,new:N,reason:c.reason??`superseded via review by ${o.id}`,by:o}),a.push({id:N,kind:"review-item",resolution:"approved",edit:null,reason:c.reason??null,by:o}))}}return u.length?{record:null,errors:u}:a.length===0&&g.length===0?{record:null,errors:[{code:"NO_VERDICTS",detail:"every item was skipped \u2014 nothing to commit"}]}:{record:X(s,{ts:new Date().toISOString(),proposal_id:null,nodes:d,edges:[],review:a,supersessions:g,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function Ct(r){let{contextDir:s,graph:t,survivor:e,merged:o,reason:u,by:d}=r,a=t.resolve(e),g=t.resolve(o);return a?g?a.superseded||g.superseded?{record:null,errors:[{code:"ALREADY_SUPERSEDED",detail:"a side of the pair is already superseded \u2014 the pair is drained"}]}:a.cid===g.cid?{record:null,errors:[{code:"SELF_SUPERSEDE",detail:"a pair cannot merge a node into itself"}]}:{record:X(s,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:g.cid,new:a.cid,reason:u??`pair merge: duplicate of ${e}`,by:d}],source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${o} names nothing in the graph`}]}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${e} names nothing in the graph`}]}}function Nt(r){let{contextDir:s,graph:t,assignments:e,by:o}=r,u=[],d=[],a=new Set;for(let{ref:n,slug:_}of e){if(!de.test(_)){u.push({code:"BAD_SLUG",detail:`${JSON.stringify(_)} \u2014 slugs are kebab-case ${String(de)}`});continue}let h=t.resolve(n);if(!h){u.push({code:"UNKNOWN_REF",detail:`${n} names nothing in the graph`});continue}if(h.superseded){u.push({code:"SUPERSEDED_TARGET",detail:`${n} is superseded \u2014 name the tip instead (${h.tip})`});continue}let c=t.names.get(_);if(c!==void 0&&!t.superseded.has(c)&&c!==h.cid||a.has(_)){u.push({code:"SLUG_TAKEN",detail:`${_} already names ${c??"another node in this record"}`});continue}a.add(_),d.push({cid:h.cid,slug:_,by:o})}return u.length?{record:null,errors:u}:d.length===0?{record:null,errors:[{code:"NO_ASSIGNMENTS",detail:"nothing to name"}]}:{record:X(s,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],names:d,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function xt(r){let{contextDir:s,graph:t,sourceId:e,reason:o,by:u}=r,d=t.heads.get(e);return d===void 0?{record:null,errors:[{code:"UNKNOWN_SOURCE",detail:`no source ${e} in the graph`}]}:d===null?{record:null,errors:[{code:"ALREADY_RETIRED",detail:`source ${e} is already retired`}]}:{record:X(s,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:d,new:null,reason:o??`retired source ${e}`,by:u}],source_head_moves:{[e]:null},names:[]},{expectPrev:t.latestHash}).record,errors:null}}function yt(r){let s=se("gap",r.content);if(s.length>0)return{ok:!1,refusal:`defer gap failed schema validation: ${s.map(u=>u.detail).join("; ")}`};let t=oe("gap",r.content),e={reason:"reconcile change deferred"},o=r.annotates?[{ecid:q(b.ANNOTATES,t,r.annotates,e),type:b.ANNOTATES,src:t,dst:r.annotates,props:e}]:[];for(let u=0;;u++)try{return X(r.contextDir,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:t,label:"gap",content:r.content}],edges:o,review:[],supersessions:[],source_head_moves:{}},{expectPrev:ue(r.contextDir)}),{ok:!0,cid:t}}catch(d){if(d instanceof Ee){if(u<3)continue;return{ok:!1,refusal:"concurrent activity kept moving the store \u2014 try the card again"}}throw d}}function Rt(r){let s=r.graph.byLabel("gap").filter(t=>t.content.kind==="reconcile_deferred"&&typeof t.content.uc=="string"&&r.graph.tipOf(t.content.uc)===r.targetTip&&(r.sourceId===void 0||t.content.basis?.source_id===void 0||t.content.basis.source_id===r.sourceId)&&!r.graph.superseded.has(t.cid)&&r.graph.trust.get(t.cid)!=="archived");if(s.length===0)return{resolved:0};for(let t=0;;t++)try{return X(r.contextDir,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:s.map(e=>({kind:"node",old:e.cid,new:r.resolvedBy,reason:"reconcile change resolved by a later verdict",by:r.by})),source_head_moves:{}},{expectPrev:ue(r.contextDir)}),{resolved:s.length}}catch(e){if(e instanceof Ee){if(t<3)continue;return{resolved:0}}throw e}}export{le as a,Pe as b,be as c,ve as d,de as e,He as f,vt as g,fe as h,ge as i,Te as j,St as k,je as l,Ke as m,We as n,It as o,$t as p,Ct as q,Nt as r,xt as s,yt as t,Rt as u,ke as v,Ae as w,Ye as x,Re as y,Oe as z,nt as A,ot as B,pe as C};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S}from"./chunk-APAIWBIH.js";import{y as o}from"./chunk-C4G7RVJ6.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
2
+ import{a as S}from"./chunk-UDIQOJEL.js";import{y as o}from"./chunk-27U4PLPX.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as w}from"./chunk-DNNZ353O.js";import{b as k}from"./chunk-3STZLM5J.js";import{d as S,e as m}from"./chunk-5YPBPZUR.js";var a=(e,t,o=new Set)=>{let s=e.nameOf.get(t);if(s!==void 0)return s;if(o.has(t))return t;o.add(t);for(let[r,n]of e.superseded){if(n!==t)continue;let u=a(e,r,o);if(u!==r)return u}return t};function b(e,t){let o=e.stale(t);if(o==="fresh")return;if(o==="orphaned")return"orphaned \u2014 no live source evidences this item";let s=[],r=new Map;for(let n of e.derivesInto(t))r.set(String(n.props.source_id),n);for(let[n,u]of r){let i=e.heads.get(n);if(i==null||i===u.props.source_cid)continue;let c=e.convChains.get(n)?.chain;c&&c.includes(String(u.props.source_cid))||s.push(`DERIVES pin ${n}@${String(u.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let n of e.edgesFrom(t)){if(n.type===m.DERIVES||!e.superseded.has(n.dst))continue;let u=e.tipOf(n.dst);if(e.superseded.has(u)){s.push(`${n.type} pin \u2192 ${a(e,n.dst)} \u2014 target retired`);continue}let i=D(e,n.dst,u);s.push(i.length>0?`${a(e,n.dst)} updated: ${i.map(c=>c.field).join(", ")}`:`${n.type} pin \u2192 ${a(e,n.dst)} \u2014 target superseded`)}return s.length>0?s.join("; "):"stale \u2014 a pinned dependency moved"}function D(e,t,o){let s=e.getNode(t)?.content??{},r=e.getNode(o)?.content??{},n=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),u=[];for(let i of[...new Set([...Object.keys(s),...Object.keys(r)])].sort())JSON.stringify(s[i])!==JSON.stringify(r[i])&&u.push({field:i,old:n(s[i]),new:n(r[i])});return u}function C(e,t){let o=[];for(let{cid:s}of e.byLabel(S.SCENARIO))e.superseded.has(s)||e.edgesFrom(s).some(r=>r.type===m.BELONGS_TO&&e.tipOf(r.dst)===t)&&o.push(s);return o}function O(e,t){let o=[],s=[],r=[],n=C(e,t),u=new Set(n),i=(c,f)=>{let d=b(e,f);return d===void 0?c:{...c,stale:!0,stale_reason:d}};for(let c of n){let f=e.getNode(c)?.content??{};o.push(i({ref:a(e,c),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},c));for(let d of e.edgesInto(c)){if(d.type!==m.AUTOMATES||e.superseded.has(d.src))continue;let p=e.getNode(d.src)?.content??{},g=e.edgesFrom(d.src).filter(l=>l.type===m.VERIFIES&&!e.superseded.has(l.dst)).map(l=>a(e,l.dst));s.push(i({ref:a(e,d.src),title:String(p.title??""),check:p.check,verifies:g},d.src))}}for(let{cid:c}of e.byLabel(S.AC)){if(e.superseded.has(c))continue;let f=e.edgesFrom(c).find(l=>l.type===m.SCOPED_TO);if(!f)continue;let d=e.tipOf(f.dst);if(!(d===t||u.has(d)))continue;let g=e.getNode(c)?.content??{};r.push(i({ref:a(e,c),text:String(g.text??""),kind:String(g.kind??""),scope:d===t?"use-case":a(e,d)},c))}return{scenarios:o,tests:s,acs:r}}function E(e,t,o){let s=w(e,t,o);return s===null?null:s.toString("utf8")}function v(e,t){let o=t.split(`
2
+ import{a as w}from"./chunk-DNNZ353O.js";import{b as k}from"./chunk-TH47OOBV.js";import{d as S,e as m}from"./chunk-WXHQYYD5.js";var a=(e,t,o=new Set)=>{let s=e.nameOf.get(t);if(s!==void 0)return s;if(o.has(t))return t;o.add(t);for(let[r,n]of e.superseded){if(n!==t)continue;let u=a(e,r,o);if(u!==r)return u}return t};function b(e,t){let o=e.stale(t);if(o==="fresh")return;if(o==="orphaned")return"orphaned \u2014 no live source evidences this item";let s=[],r=new Map;for(let n of e.derivesInto(t))r.set(String(n.props.source_id),n);for(let[n,u]of r){let i=e.heads.get(n);if(i==null||i===u.props.source_cid)continue;let c=e.convChains.get(n)?.chain;c&&c.includes(String(u.props.source_cid))||s.push(`DERIVES pin ${n}@${String(u.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let n of e.edgesFrom(t)){if(n.type===m.DERIVES||!e.superseded.has(n.dst))continue;let u=e.tipOf(n.dst);if(e.superseded.has(u)){s.push(`${n.type} pin \u2192 ${a(e,n.dst)} \u2014 target retired`);continue}let i=D(e,n.dst,u);s.push(i.length>0?`${a(e,n.dst)} updated: ${i.map(c=>c.field).join(", ")}`:`${n.type} pin \u2192 ${a(e,n.dst)} \u2014 target superseded`)}return s.length>0?s.join("; "):"stale \u2014 a pinned dependency moved"}function D(e,t,o){let s=e.getNode(t)?.content??{},r=e.getNode(o)?.content??{},n=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),u=[];for(let i of[...new Set([...Object.keys(s),...Object.keys(r)])].sort())JSON.stringify(s[i])!==JSON.stringify(r[i])&&u.push({field:i,old:n(s[i]),new:n(r[i])});return u}function C(e,t){let o=[];for(let{cid:s}of e.byLabel(S.SCENARIO))e.superseded.has(s)||e.edgesFrom(s).some(r=>r.type===m.BELONGS_TO&&e.tipOf(r.dst)===t)&&o.push(s);return o}function O(e,t){let o=[],s=[],r=[],n=C(e,t),u=new Set(n),i=(c,f)=>{let d=b(e,f);return d===void 0?c:{...c,stale:!0,stale_reason:d}};for(let c of n){let f=e.getNode(c)?.content??{};o.push(i({ref:a(e,c),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},c));for(let d of e.edgesInto(c)){if(d.type!==m.AUTOMATES||e.superseded.has(d.src))continue;let p=e.getNode(d.src)?.content??{},g=e.edgesFrom(d.src).filter(l=>l.type===m.VERIFIES&&!e.superseded.has(l.dst)).map(l=>a(e,l.dst));s.push(i({ref:a(e,d.src),title:String(p.title??""),check:p.check,verifies:g},d.src))}}for(let{cid:c}of e.byLabel(S.AC)){if(e.superseded.has(c))continue;let f=e.edgesFrom(c).find(l=>l.type===m.SCOPED_TO);if(!f)continue;let d=e.tipOf(f.dst);if(!(d===t||u.has(d)))continue;let g=e.getNode(c)?.content??{};r.push(i({ref:a(e,c),text:String(g.text??""),kind:String(g.kind??""),scope:d===t?"use-case":a(e,d)},c))}return{scenarios:o,tests:s,acs:r}}function E(e,t,o){let s=w(e,t,o);return s===null?null:s.toString("utf8")}function v(e,t){let o=t.split(`
3
3
  `).map(r=>r.replace(/^\d+\| /,"")),s=[];for(let r of e.split(`
4
4
  `)){let n=r.trim();if(n.length===0)continue;let u=o.find(i=>i.includes(n));u!==void 0&&!s.includes(u.trim())&&s.push(u.trim())}return s.length>0?s.join(`
5
5
  `):{removed:!0}}function G(e,t,o,s){if(s!==void 0&&s.trim().length>0)return{kind:"user-directive",text:s.trim()};let r=[o,...O(t,o).acs.map(c=>t.resolve(c.ref)?.cid??"")].filter(Boolean),n=[],u=new Set;for(let c of r){let f=new Map;for(let d of t.derivesInto(c))f.set(String(d.props.source_id),d);for(let[d,p]of f){let g=t.heads.get(d);if(g==null||g===p.props.source_cid)continue;let l=String(p.props.anchor),_=`${d}\0${l}`;if(u.has(_)||l==="img#whole")continue;u.add(_);let y=E(e,t,String(p.props.source_cid)),h=y===null?null:k(y,l);if(h===null)continue;let x=E(e,t,g);n.push({source_id:d,anchor:l,old_anchor_text:h,new_anchor_text:x===null?{removed:!0}:v(h,x)})}}let i;for(let[c,f]of t.superseded){if(f!==o||t.nodeLabel.get(c)!==S.USECASE)continue;let d=D(t,c,o);d.length>0&&(i=d);break}return{kind:"source-change",changes:n,...i?{uc_updated:i}:{}}}function P(e,t,o,s){let r=O(t,o);if(r.scenarios.length===0&&r.tests.length===0&&r.acs.length===0)return;let n=G(e,t,o,s);if(!(n.kind==="source-change"&&n.changes.length===0&&!n.uc_updated))return{prior_design:r,change_delta:n}}export{O as a,P as b};
@@ -0,0 +1,10 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as W}from"./chunk-MSGW4JDG.js";import{d as q,e as F}from"./chunk-4JOD47QI.js";import{a as L}from"./chunk-27U4PLPX.js";import{createHash as Y}from"crypto";import{access as Q,mkdir as T,mkdtemp as Z,readdir as O,readFile as v,rename as N,rm as y,writeFile as E}from"fs/promises";import{homedir as tt}from"os";import{arch as et,platform as st}from"process";import{dirname as j,isAbsolute as nt,join as l,relative as X,resolve as rt,sep as it}from"path";var z=1,ot={emulator:"emulator",simulator:"simulator"};function Et(i){return ot[i.kind]??null}var H=class extends Error{constructor(s,e,n){super([`Managed mobile dependencies for ${s} are not installed.`,`- kaneai-mobile-deps ${s} ${e.bundleVersion}: ${e.url} (${_(e.bytes)})`,`Destination: ${n}`,"Run `kane-cli doctor --install` to download it."].join(`
3
+ `));this.deviceClass=s;this.name="DepsInstallRequiredError"}};function _(i){return i>=1024*1024?`${Math.ceil(i/(1024*1024))} MB`:`${i} bytes`}function at(i){let t=i/1048576;return t>=10?`${Math.round(t)} MB/s`:t>=1?`${t.toFixed(1)} MB/s`:`${Math.max(1,Math.round(i/1024))} KB/s`}function lt(i){let t=Math.max(1,Math.round(i));return t<60?`~${t}s left`:`~${Math.floor(t/60)}m ${t%60}s left`}var C=8*1024*1024,ct=8;function ut(i){if(!Number.isFinite(i)||i<2*C)return null;let t=Math.min(ct,Math.floor(i/C)),s=Math.ceil(i/t),e=[];for(let n=0;n<i;n+=s)e.push({start:n,end:Math.min(n+s,i)-1});return e}async function U(i,t){let s=i.body;if(!s||typeof s.getReader!="function"){let c=new Uint8Array(await i.arrayBuffer());return t?.(c.length),c}let e=s.getReader(),n=[],r=0;for(;;){let{done:c,value:f}=await e.read();if(c)break;f&&(n.push(f),r+=f.length,t?.(f.length))}let o=new Uint8Array(r),a=0;for(let c of n)o.set(c,a),a+=c.length;return o}var K=3,dt=3e4,k=class extends Error{};async function pt(i,t,s,e,n,r=dt){let o=new Uint8Array(s),a=0,c=new AbortController,f=null,b=!1;try{await Promise.all(e.map(async(h,A)=>{let M=0,S=d=>{M+=d,a+=d,n?.(a)},V=()=>{a=Math.max(0,a-M),M=0},R=null;for(let d=0;d<K;d+=1){if(c.signal.aborted)return;let u=new AbortController,m=()=>u.abort();c.signal.addEventListener("abort",m,{once:!0});let w=!1,g=null,$=()=>{g&&clearTimeout(g),g=setTimeout(()=>{w=!0,u.abort()},r)};try{$();let p=await i(t,{headers:{Range:`bytes=${h.start}-${h.end}`},signal:u.signal});if(typeof p.body?.getReader!="function"&&g&&(clearTimeout(g),g=null),!p.ok)throw new k(`Could not download ${t}: HTTP ${p.status}`);if(p.status!==206){b=!0,A===0?f=await U(p,I=>{$(),S(I)}):await(p.body?.cancel().catch(()=>{})??Promise.resolve());return}let D=h.end-h.start+1,P=await U(p,I=>{$(),S(I)});if(P.length!==D)throw new Error(`range ${h.start}-${h.end} returned ${P.length} bytes (expected ${D})`);o.set(P,h.start);return}catch(p){if(p instanceof k)throw p;if(c.signal.aborted)return;V(),R=w?new Error(`no data for ${Math.round(r/1e3)}s`):p instanceof Error?p:new Error(String(p))}finally{g&&clearTimeout(g),c.signal.removeEventListener("abort",m)}}throw new Error(`Could not download ${t}: range ${h.start}-${h.end} failed after ${K} attempts (${R?.message??"unknown error"}) \u2014 check your network and rerun \`kane-cli doctor --install\`.`)}))}catch(h){throw c.abort(),h}return f||(b?null:o)}async function ft(i,t,s,e,n){let r=ut(s);if(r){let c=await pt(i,t,s,r,e,n?.stallMs);if(c)return c}let o=await i(t);if(!o.ok)throw new Error(`Could not download ${t}: HTTP ${o.status}`);let a=0;return U(o,e&&(c=>{a+=c,e(a)}))}function ht(i){return Y("sha256").update(i).digest("hex")}function mt(i,t){let s=X(i,t);return s!==""&&!s.startsWith(`..${it}`)&&s!==".."&&!nt(s)}async function x(i){try{return await Q(i),!0}catch{return!1}}function wt(){return{home:tt(),os:st,arch:et,cliVersion:L,nodeModuleVersion:process.versions.modules,fetch,resolveBundle:async i=>(await import("./deps-resolve-XC5S53DG.js")).controllerResolveBundle()(i),exec:q,now:()=>new Date,wait:F,processAlive:i=>{try{return process.kill(i,0),!0}catch{return!1}}}}var B=class extends Error{constructor(s,e,n){super(`No managed mobile dependencies are published for ${s} (kane-cli ${e}).
4
+ This is a packaging gap, not something to install locally \u2014 report it, or pass --appium-url to use an Appium server you manage yourself.`);this.coordinate=s;this.cause=n;this.name="NoPublishedBundleError"}},J=class{deps;constructor(t={}){this.deps={...wt(),...t}}mobileRoot(){return l(this.deps.home,".testmuai","kaneai","mobile")}depsRoot(){return l(this.mobileRoot(),"deps")}classRoot(t,s){return l(this.depsRoot(),s,t)}paths(t,s){let e=this.classRoot(t,s);return{root:e,appium:l(e,"appium"),appiumHome:l(e,"appium-home"),platformTools:l(e,"platform-tools"),wdaDir:l(e,"wda","Build","Products","Debug-iphonesimulator"),iwdpBinDir:l(e,"bin"),installManifest:l(e,"install-manifest.json")}}async status(t,s){let e=[];try{e=await O(this.depsRoot())}catch{}s&&(e=e.filter(c=>c===s));let n=null;for(let c of e){let f=this.classRoot(t,c),b=null;try{b=JSON.parse(await v(l(f,"install-manifest.json"),"utf8"))}catch{continue}b.schemaVersion===z&&(!s&&b.cliVersion!==this.deps.cliVersion||(!n||b.installedAt>n.manifest.installedAt)&&(n={manifest:b,root:f}))}if(!n)return{class:t,installed:!1};let r=this.paths(t,n.manifest.bundleVersion),o=[l(r.appium,"node_modules","appium","index.js")];t==="emulator"&&o.push(l(r.platformTools,this.deps.os==="win32"?"adb.exe":"adb")),t==="simulator"&&o.push(l(r.wdaDir,"WebDriverAgentRunner-Runner.app"));for(let c of o)if(!await x(c))return{class:t,installed:!1,version:n.manifest.bundleVersion,root:n.root,corrupt:`a bundle component is missing from disk (${X(n.root,c)})`};let a=await this.postInstallDrifted(r);return{class:t,installed:!0,version:n.manifest.bundleVersion,root:n.root,...a?{needsRepair:a}:{}}}async postInstallDrifted(t){let s=l(t.appiumHome,"node_modules",".cache","appium","extensions.yaml");if(!await x(s))return!1;let e=await v(s,"utf8");for(let n of e.split(`
5
+ `)){let r=/^\s*installPath:\s*(.+?)\s*$/.exec(n);if(r&&!r[1].startsWith(t.appiumHome))return!0}return!1}async environment(t){let s=await this.status(t);if(!s.installed||!s.version)return{dirs:[]};let e=this.paths(t,s.version),n=[],r={dirs:n,appiumHome:e.appiumHome};return t!=="simulator"&&(n.push(e.platformTools),r.platformToolsDir=e.platformTools),n.push(l(e.appium,"node_modules",".bin")),t==="simulator"&&(n.push(e.iwdpBinDir),r.wdaDir=e.wdaDir,r.wdaRoot=l(e.root,"wda"),r.iwdpBinDir=e.iwdpBinDir),r}async ensure(t,s){let e,n;try{e=await this.resolveOrExplain(t)}catch(a){n=a}let r=await this.status(t,e?.bundleVersion);if(r.installed&&!r.needsRepair)return e&&r.version&&await this.adoptInstall(t,r.version),r;if(!e)throw n;if(r.installed&&r.needsRepair&&r.version){let a=this.paths(t,r.version);return await this.withInstallLock(async()=>{await this.postInstall(a.root,a,s.onProgress)}),await this.adoptInstall(t,r.version),this.status(t,e.bundleVersion)}let o=e;if(!s.automatic&&!s.approved)throw new H(t,o,this.classRoot(t,o.bundleVersion));return await this.withInstallLock(async()=>{(await this.status(t,o.bundleVersion)).installed||await this.install(t,o,s.onProgress)}),this.status(t,o.bundleVersion)}async adoptInstall(t,s){try{let e=this.paths(t,s).installManifest,n=JSON.parse(await v(e,"utf8"));if(n.cliVersion===this.deps.cliVersion)return;n.cliVersion=this.deps.cliVersion;let r=l(j(e),`install-manifest-${process.pid}.json`);await E(r,`${JSON.stringify(n,null,2)}
6
+ `),await N(r,e)}catch{}}async resolveOrExplain(t){let s=`${this.deps.os}-${this.deps.arch}-${t}`,e;try{e=await this.deps.resolveBundle({cliVersion:this.deps.cliVersion,os:this.deps.os,arch:this.deps.arch,deviceClass:t})}catch(n){throw new B(s,this.deps.cliVersion,n)}if(!e?.url||!e.sha256||!e.bundleVersion)throw new B(s,this.deps.cliVersion);return e}async install(t,s,e){let n=this.paths(t,s.bundleVersion),r=l(this.depsRoot(),s.bundleVersion);await T(r,{recursive:!0});let o=await Z(l(r,".staging-"));try{e?.(`Downloading the ${t} dependencies ${s.bundleVersion} (${_(s.bytes)}) \u2014 this happens once\u2026`);let a=[],c=-1,f=0,b=await this.download(s,(d,u)=>{if(!u)return;let m=Math.min(d,u),w=this.deps.now().getTime();for(a.push({t:w,received:m});a.length>1&&a[0].t<w-3e3;)a.shift();let g=Math.min(100,Math.floor(m/u*20)*5);if(g===c&&w-f<2e3&&m<u)return;c=g,f=w;let $=a[0],p=(w-$.t)/1e3,D=p>0?(m-$.received)/p:0,P=D>0&&m<u?` \xB7 ${at(D)} \xB7 ${lt((u-m)/D)}`:"";e?.(`Downloading the ${t} dependencies \u2014 ${_(m)} / ${_(u)} (${g}%)${P}`)}),h=W(b),A=gt(h);for(let[d,u]of Object.entries(h)){if(d.endsWith("/"))continue;let m=A&&d.startsWith(A)?d.slice(A.length):d;if(!m)continue;let w=rt(o,m);if(!mt(o,w))throw new Error(`Unsafe path in ${s.url}: ${d}`);await T(j(w),{recursive:!0}),await E(w,u,this.deps.os!=="win32"?{mode:493}:{})}let M=await this.readBundleManifest(o,s.url,t);await this.postInstall(o,n,e),await y(n.root,{recursive:!0,force:!0}),await N(o,n.root);let S={schemaVersion:z,class:t,bundleVersion:s.bundleVersion,cliVersion:this.deps.cliVersion,os:this.deps.os,arch:this.deps.arch,sha256:s.sha256,bytes:s.bytes,sourceUrl:s.url,installedAt:this.deps.now().toISOString(),nodeAbi:M.node_abi?.node_module_version??this.deps.nodeModuleVersion,postInstall:{quarantineStripped:this.deps.os==="darwin",extensionsRewritten:!0}},V=l(r,`install-manifest-${process.pid}.json`);await E(V,`${JSON.stringify(S,null,2)}
7
+ `),await N(V,n.installManifest),await this.gcOldVersions(t);let R=l(this.mobileRoot(),"trees");await x(R)&&(await this.reapLegacyServers(R,e),await y(R,{recursive:!0,force:!0}),e?.("Removed the legacy per-component toolchain trees"));for(let d of["emulator","simulator"]){let u=l(this.depsRoot(),d);await x(l(u,"install-manifest.json"))||await x(u)&&(await y(u,{recursive:!0,force:!0}),e?.(`Removed the previous ${d} deps layout`))}}finally{await y(o,{recursive:!0,force:!0})}}async reapLegacyServers(t,s){if(this.deps.os==="win32")return;let e=await this.deps.exec("pgrep",["-f",t],{timeoutMs:1e4});if(e.code!==0)return;let n=e.stdout.split(`
8
+ `).map(r=>r.trim()).filter(r=>/^\d+$/.test(r));for(let r of n)await this.deps.exec("kill",[r],{timeoutMs:5e3});n.length>0&&s?.(`Stopped ${n.length} legacy managed server process${n.length===1?"":"es"} before removing the old toolchain trees`)}async gcOldVersions(t){let s=[];try{s=await O(this.depsRoot())}catch{return}let e=[];for(let n of s){let r=this.classRoot(t,n);try{let o=JSON.parse(await v(l(r,"install-manifest.json"),"utf8"));e.push({root:r,installedAt:o.installedAt})}catch{}}e.sort((n,r)=>n.installedAt<r.installedAt?1:-1);for(let n of e.slice(2)){await y(n.root,{recursive:!0,force:!0});let r=j(n.root);try{(await O(r)).length===0&&await y(r,{recursive:!0,force:!0})}catch{}}}async download(t,s){let e=null;for(let n=0;n<2;n+=1){let r=await ft(this.deps.fetch,t.url,t.bytes,s&&(a=>s(a,t.bytes))),o=ht(r);if(o===t.sha256)return r;e=new Error(`Checksum mismatch for ${t.url}: expected ${t.sha256}, got ${o}.`)}throw e??new Error(`Could not download ${t.url}`)}async readBundleManifest(t,s,e){let n;try{n=JSON.parse(await v(l(t,"manifest.json"),"utf8"))}catch{throw new Error(`The bundle at ${s} carries no readable manifest.json; refusing to install it.`)}if(n.platform!==this.deps.os||n.arch!==this.deps.arch)throw new Error(`The bundle at ${s} is built for ${n.platform}-${n.arch}; this host is ${this.deps.os}-${this.deps.arch}. A wrong blob was published for this coordinate.`);if(!n.supported_targets?.includes(e))throw new Error(`The bundle at ${s} does not support the ${e} device class (it supports: ${n.supported_targets?.join(", ")||"nothing"}). A wrong blob was published.`);return n}async postInstall(t,s,e){this.deps.os==="darwin"&&await this.deps.exec("xattr",["-dr","com.apple.quarantine",t],{timeoutMs:6e4});let n=l(t,"appium-home","node_modules",".cache","appium","extensions.yaml");if(await x(n)){let r=await v(n,"utf8"),o=bt(r,s.appiumHome);await E(n,o),e?.("Rewrote Appium extension paths for this machine")}}async withInstallLock(t){let s=l(this.mobileRoot(),"install.lock"),e=Date.now();for(await T(this.mobileRoot(),{recursive:!0});;)try{await T(s),await E(l(s,"owner.json"),JSON.stringify({pid:process.pid,startedAt:new Date().toISOString()}));try{return await t()}finally{await y(s,{recursive:!0,force:!0})}}catch(n){if(n.code!=="EEXIST")throw n;let r={};try{r=JSON.parse(await v(l(s,"owner.json"),"utf8"))}catch{}if(r.pid&&!this.deps.processAlive(r.pid)){await y(s,{recursive:!0,force:!0});continue}if(Date.now()-e>12e4)throw new Error(`Timed out waiting for the mobile install lock (holder pid ${r.pid??"unknown"}).`);await this.deps.wait(500)}}};function gt(i){let t=Object.keys(i).filter(e=>!e.endsWith("/")),s=new Set(t.map(e=>e.split("/")[0]));return s.size===1&&t.every(e=>e.includes("/"))?`${[...s][0]}/`:""}function bt(i,t){return i.split(`
9
+ `).map(s=>{let e=/^(\s*installPath:\s*)(.+?)\s*$/.exec(s);if(!e)return s;let n=e[2],r=/[\\/]node_modules[\\/]/g,o=-1;for(let a=r.exec(n);a;a=r.exec(n))o=a.index+a[0].length;return o<0?s:`${e[1]}${l(t,"node_modules",n.slice(o))}`}).join(`
10
+ `)}var G;function St(){return G??=new J,G}import{join as yt}from"path";function _t(i=process.env){let t=i.KANE_ANDROID_HOME?.trim();return t?{root:t,platformToolsDir:yt(t,"platform-tools")}:null}export{Et as a,H as b,St as c,_t as d};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var o={platform:"darwin",arch:"arm64"};function s(e=process.platform,t=process.arch){let r=`${e}/${t}`;if(e===o.platform&&t===o.arch)return{supported:!0,detected:r};let n=`mobile runs are supported on macOS (Apple Silicon) only \u2014 detected ${r}.`;return e===o.platform&&t==="x64"&&(n+=" If this is an Apple Silicon Mac, the CLI is running under Rosetta \u2014 reinstall Node as arm64 and retry."),{supported:!1,detected:r,reason:n}}function p(){return s().supported}function a(){return s().reason??""}export{s as a,p as b,a as c};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{AsyncLocalStorage as o}from"async_hooks";var r=new o;function s(n,e){return r.run(n,e)}function a(n){let e=r.getStore()?.event;if(e){e(n);return}process.env.KANE_DEV_MODE==="1"&&process.stderr.write(JSON.stringify(n)+`
3
+ `)}function c(n,e){let t=r.getStore()?.event;if(t){t({type:"warning",message:n,...e?{code:e}:{}});return}process.stderr.write(n.endsWith(`
4
+ `)?n:n+`
5
+ `)}export{s as a,a as b,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-FEJXWJ3L.js";import{y as m}from"./chunk-27U4PLPX.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};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as f}from"./chunk-EWCAFKLX.js";import{y as t}from"./chunk-27U4PLPX.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a,b as n}from"./chunk-C44QQJR4.js";import{a as R}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(R(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,i){return s.map(l=>l.name===o?{...l,status:d,detail:i}:l)}function D(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),i=Math.round(o%60);return`${d}m ${i}s`}function w(s){let[o,d]=(0,p.useState)(0),i=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;i.current=Date.now();let l=setInterval(()=>{d(Date.now()-i.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:i}){let l=w(o==="uploading");return o==="uploading"?(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",D(l)]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:s.filter(r=>r.status!=="skipped"||r.detail).map((r,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=r.status==="done",m=r.status==="running",g=r.status==="failed",B=r.status==="skipped";return(0,e.jsxs)(a,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(a,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):B?(0,e.jsx)(n,{color:t.muted,children:"\u2013"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:r.label}),r.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",r.detail]})]},r.name)})}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),i&&(0,e.jsxs)(a,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:i})]})]})}export{v as a,U as b,h as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-KNDSQ4PS.js";import{a as k}from"./chunk-2WVKOZ6W.js";import{a as B}from"./chunk-JRMDGLLT.js";import{a as R}from"./chunk-4OPQJ7PE.js";import{y as c}from"./chunk-C4G7RVJ6.js";import{a as P}from"./chunk-HCBYKLMW.js";import{a as u,b as l}from"./chunk-C44QQJR4.js";import{a as J}from"./chunk-6YGTRKDT.js";import{e as L}from"./chunk-UR6MHSHU.js";var t=L(J(),1);var e=L(P(),1);function X(n,i,y,m){return{id:n,label:`${i} (${n}) \xB7 ${y} tests`,isActive:n===m}}function W({resolver:n,projectId:i,currentFolderId:y,env:m,onSelect:x,onCancel:w}){let[I,M]=(0,t.useState)([]),[$,d]=(0,t.useState)(!0),[O,g]=(0,t.useState)(!1),[U,N]=(0,t.useState)(null),[p,b]=(0,t.useState)("list"),[S,v]=(0,t.useState)(""),[E,f]=(0,t.useState)(null),h=(0,t.useRef)(!1);(0,t.useEffect)(()=>{if(!n){N("Login first to browse folders"),d(!1);return}let o=new AbortController;return d(!0),g(!0),(async()=>{try{let r=n.cached??await n.resolve();if(!r){N("Login first to browse folders"),d(!1),g(!1);return}let a=B(m),T=new k(a.tmsBaseUrl,r.username,r.access_key),F=(async function*(){if(o.signal.aborted)return;let s=await T.listFolders(i);yield{page:1,folders:s,totalLoaded:s.length,done:!0}})();for await(let s of F){if(d(!1),s.totalLoaded===0){h.current=!0,b("naming"),g(!1);return}M(s.folders.map(C=>X(C.id,C.name,C.test_cases_count,y))),s.done&&g(!1)}}catch(r){if(r?.name==="AbortError")return;N(r instanceof Error?r.message:String(r)),d(!1),g(!1)}})(),()=>o.abort()},[n,i,y,m]);let D=(0,t.useCallback)(o=>{let r=o.trim();if(!r){f("Name cannot be empty");return}if(!i){f("No project selected \u2014 pick a project first");return}f(null),b("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let a=n.cached??await n.resolve();if(!a)throw new Error("Not authenticated");let T=B(m),s=await new k(T.tmsBaseUrl,a.username,a.access_key).createFolder(i,r);x(s.id,s.name)}catch(a){f(a instanceof Error?a.message:String(a)),b("naming")}})()},[n,i,m,x]),H=(0,t.useCallback)(()=>{v(""),f(null),h.current?w():b("list")},[w]);return p==="naming"||p==="creating"?(0,e.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:c.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:c.orange,bold:!0,children:"Create new folder"}),h.current&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"No folders yet \u2014 let's create one."})}),(0,e.jsxs)(u,{marginTop:1,children:[(0,e.jsx)(l,{color:c.dim,children:"Name: "}),p==="naming"?(0,e.jsx)(A,{value:S,onChange:o=>{v(o),E&&f(null)},onSubmit:D,onCancel:H}):(0,e.jsx)(l,{children:S})]}),E&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.red,children:E})}),p==="creating"&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"Creating..."})}),p==="naming"&&(0,e.jsx)(R,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:h.current?"cancel":"back"})]}):(0,e.jsx)(_,{title:"Folders",items:I,loading:$,loadingMore:O,preserveSelectionById:!0,error:U,itemNoun:"folders",onTab:()=>{h.current=!1,b("naming")},extraHint:"tab to create new",onSelect:o=>{let r=o.label.split(" (")[0];x(o.id,r)},onCancel:w})}export{X as a,W as b};
2
+ import{a as A}from"./chunk-YCCUBQY4.js";import{a as _}from"./chunk-L7MXYCD7.js";import{a as B}from"./chunk-2WVKOZ6W.js";import{a as R}from"./chunk-TFPPEOAK.js";import{a as k}from"./chunk-G7VQCS4J.js";import{y as c}from"./chunk-27U4PLPX.js";import{a as P}from"./chunk-HCBYKLMW.js";import{a as u,b as l}from"./chunk-C44QQJR4.js";import{a as J}from"./chunk-6YGTRKDT.js";import{e as L}from"./chunk-UR6MHSHU.js";var t=L(J(),1);var e=L(P(),1);function X(n,i,y,m){return{id:n,label:`${i} (${n}) \xB7 ${y} tests`,isActive:n===m}}function W({resolver:n,projectId:i,currentFolderId:y,env:m,onSelect:x,onCancel:w}){let[I,M]=(0,t.useState)([]),[$,d]=(0,t.useState)(!0),[O,g]=(0,t.useState)(!1),[U,N]=(0,t.useState)(null),[p,b]=(0,t.useState)("list"),[S,v]=(0,t.useState)(""),[E,f]=(0,t.useState)(null),h=(0,t.useRef)(!1);(0,t.useEffect)(()=>{if(!n){N("Login first to browse folders"),d(!1);return}let o=new AbortController;return d(!0),g(!0),(async()=>{try{let r=n.cached??await n.resolve();if(!r){N("Login first to browse folders"),d(!1),g(!1);return}let a=k(m),T=new B(a.tmsBaseUrl,r.username,r.access_key),F=(async function*(){if(o.signal.aborted)return;let s=await T.listFolders(i);yield{page:1,folders:s,totalLoaded:s.length,done:!0}})();for await(let s of F){if(d(!1),s.totalLoaded===0){h.current=!0,b("naming"),g(!1);return}M(s.folders.map(C=>X(C.id,C.name,C.test_cases_count,y))),s.done&&g(!1)}}catch(r){if(r?.name==="AbortError")return;N(r instanceof Error?r.message:String(r)),d(!1),g(!1)}})(),()=>o.abort()},[n,i,y,m]);let D=(0,t.useCallback)(o=>{let r=o.trim();if(!r){f("Name cannot be empty");return}if(!i){f("No project selected \u2014 pick a project first");return}f(null),b("creating"),(async()=>{try{if(!n)throw new Error("Not authenticated");let a=n.cached??await n.resolve();if(!a)throw new Error("Not authenticated");let T=k(m),s=await new B(T.tmsBaseUrl,a.username,a.access_key).createFolder(i,r);x(s.id,s.name)}catch(a){f(a instanceof Error?a.message:String(a)),b("naming")}})()},[n,i,m,x]),H=(0,t.useCallback)(()=>{v(""),f(null),h.current?w():b("list")},[w]);return p==="naming"||p==="creating"?(0,e.jsxs)(u,{flexDirection:"column",borderStyle:"round",borderColor:c.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(l,{color:c.orange,bold:!0,children:"Create new folder"}),h.current&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"No folders yet \u2014 let's create one."})}),(0,e.jsxs)(u,{marginTop:1,children:[(0,e.jsx)(l,{color:c.dim,children:"Name: "}),p==="naming"?(0,e.jsx)(A,{value:S,onChange:o=>{v(o),E&&f(null)},onSubmit:D,onCancel:H}):(0,e.jsx)(l,{children:S})]}),E&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.red,children:E})}),p==="creating"&&(0,e.jsx)(u,{marginTop:1,children:(0,e.jsx)(l,{color:c.dim,children:"Creating..."})}),p==="naming"&&(0,e.jsx)(R,{bindings:[{keys:"\u21B5",label:"create"}],escBackLabel:h.current?"cancel":"back"})]}):(0,e.jsx)(_,{title:"Folders",items:I,loading:$,loadingMore:O,preserveSelectionById:!0,error:U,itemNoun:"folders",onTab:()=>{h.current=!1,b("naming")},extraHint:"tab to create new",onSelect:o=>{let r=o.label.split(" (")[0];x(o.id,r)},onCancel:w})}export{X as a,W as b};