@testmuai/kane-cli 0.8.8 → 0.8.10

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 (161) hide show
  1. package/dist/{ChatSurface-LS3KF7XY.js → ChatSurface-OWGOCHG3.js} +1 -1
  2. package/dist/{ChromeProfilePicker-UIJ5ZBLY.js → ChromeProfilePicker-QIMCWPPI.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-EIQQBWDY.js → CliFeedbackPrompt-34E2AXS4.js} +1 -1
  4. package/dist/{CliUploadProgress-6U77ZBAX.js → CliUploadProgress-TRKOSED7.js} +1 -1
  5. package/dist/{ConfigView-MVFLCF5N.js → ConfigView-XVKR7ATN.js} +1 -1
  6. package/dist/{EvidenceViewOffer-ANVEOXJA.js → EvidenceViewOffer-M2TGMSNE.js} +1 -1
  7. package/dist/FolderPicker-WZTNQ5IV.js +2 -0
  8. package/dist/{InfoBox-57MRRSJI.js → InfoBox-QM5YEBMH.js} +1 -1
  9. package/dist/{LinksBox-RKAEQBFS.js → LinksBox-CSEDEZGU.js} +1 -1
  10. package/dist/{ProfilesView-RQCQFIXH.js → ProfilesView-CZVPREIS.js} +1 -1
  11. package/dist/{ProjectPicker-5JEEHLY3.js → ProjectPicker-F6FEWNMY.js} +1 -1
  12. package/dist/{SaveSessionPrompt-TQROE5JM.js → SaveSessionPrompt-RUSFOLBZ.js} +1 -1
  13. package/dist/SingleShotApp-WBFVUZFP.js +2 -0
  14. package/dist/{SummaryBox-C4UY6R65.js → SummaryBox-KOJXTZVZ.js} +1 -1
  15. package/dist/TestMdRunView-BEXL7TIN.js +2 -0
  16. package/dist/{TestrunEvidenceTable-LY24PK3T.js → TestrunEvidenceTable-KGVBX76H.js} +1 -1
  17. package/dist/{WhoamiView-2FIHHS4G.js → WhoamiView-IOTBOCGK.js} +1 -1
  18. package/dist/{app-download-TO672LBR.js → app-download-7AF6QL2C.js} +1 -1
  19. package/dist/{auth-EVXJVU72.js → auth-2HTDCT7X.js} +1 -1
  20. package/dist/{binary-Y4DKNDQH.js → binary-NKX3NEK7.js} +1 -1
  21. package/dist/{bind-FVCVYYL3.js → bind-IMBQFRKT.js} +2 -2
  22. package/dist/{bootstrap-4XBQFKWF.js → bootstrap-TNFANHSS.js} +1 -1
  23. package/dist/bridge-SXYWYZDO.js +2 -0
  24. package/dist/{changelog-LAQ2VGK6.js → changelog-SQVLSCYO.js} +1 -1
  25. package/dist/{chunk-UY2ES2Z6.js → chunk-2BIPFAGX.js} +1 -1
  26. package/dist/{chunk-O4IEPE3T.js → chunk-2ULZVQZV.js} +2 -2
  27. package/dist/chunk-47OUD76M.js +6 -0
  28. package/dist/{chunk-ZSFOANLG.js → chunk-5EKTQY2S.js} +1 -1
  29. package/dist/{chunk-6TVNJDSE.js → chunk-5Q3W3SX7.js} +1 -1
  30. package/dist/{chunk-VCDXUUJQ.js → chunk-5YBKKWJA.js} +1 -1
  31. package/dist/{chunk-HK3FFI7Y.js → chunk-6S3Z3WPF.js} +2 -2
  32. package/dist/chunk-724NYDMU.js +27 -0
  33. package/dist/{chunk-7CXIOJB3.js → chunk-AWEUKXZQ.js} +1 -1
  34. package/dist/{chunk-GZLQ2AR6.js → chunk-B4CYIZP5.js} +1 -1
  35. package/dist/{chunk-ZKRL6HMY.js → chunk-BG2AZQLI.js} +1 -1
  36. package/dist/{chunk-ZHKBSKCB.js → chunk-BQSLPF5M.js} +1 -1
  37. package/dist/{chunk-H6YGG3GC.js → chunk-BUM367KV.js} +1 -1
  38. package/dist/{chunk-K5DL7CZ4.js → chunk-BZCVLCMG.js} +1 -1
  39. package/dist/{chunk-NAZ36RKI.js → chunk-C33E5XQM.js} +1 -1
  40. package/dist/{chunk-AZ73FJRK.js → chunk-CKNVMB4E.js} +1 -1
  41. package/dist/chunk-CPGUTSUD.js +6 -0
  42. package/dist/{chunk-LI5FMAUO.js → chunk-CSCJLGIY.js} +1 -1
  43. package/dist/{chunk-HZDNGNO2.js → chunk-CXKWVHZK.js} +1 -1
  44. package/dist/{chunk-BYOXTXLC.js → chunk-D6566A2X.js} +1 -1
  45. package/dist/{chunk-WALVOFKR.js → chunk-DF3DUGJS.js} +4 -4
  46. package/dist/{chunk-BRE426DP.js → chunk-EH3YMGQ7.js} +1 -1
  47. package/dist/{chunk-PYHWCV2V.js → chunk-EKOL4WCC.js} +1 -1
  48. package/dist/{chunk-VQVERWC3.js → chunk-ESHDTCSZ.js} +1 -1
  49. package/dist/{chunk-5LYPSIBC.js → chunk-ETIQJIDI.js} +1 -1
  50. package/dist/{chunk-RHL7KZNC.js → chunk-FH6EDP77.js} +1 -1
  51. package/dist/{chunk-V5DYLGAM.js → chunk-FOP6CJAM.js} +1 -1
  52. package/dist/{chunk-CQCV2RJK.js → chunk-GHL2A273.js} +2 -2
  53. package/dist/{chunk-JE6OO2Q6.js → chunk-GOF5PQ5T.js} +1 -1
  54. package/dist/{chunk-SQWVGI3J.js → chunk-HE3ZKFRC.js} +1 -1
  55. package/dist/{chunk-7RTITBZG.js → chunk-HNNVVK2O.js} +1 -1
  56. package/dist/{chunk-AO5QH6UU.js → chunk-HXSOZWFL.js} +1 -1
  57. package/dist/{chunk-XLVH4CIZ.js → chunk-I3OVXNBW.js} +2 -2
  58. package/dist/{chunk-R4PLEH2A.js → chunk-I5KYZHJ5.js} +49 -49
  59. package/dist/{chunk-FGRTNRBS.js → chunk-JGZWR3CR.js} +2 -2
  60. package/dist/{chunk-Q6743UUQ.js → chunk-KUAFVRSR.js} +1 -1
  61. package/dist/{chunk-N5I2QYFD.js → chunk-LKUWEQ5M.js} +1 -1
  62. package/dist/{chunk-6T3DWH56.js → chunk-LTNMOEHT.js} +1 -1
  63. package/dist/{chunk-5M5BG4MT.js → chunk-LUTRUSIV.js} +1 -1
  64. package/dist/{chunk-2YQ6TW77.js → chunk-M6SFFAAQ.js} +6 -6
  65. package/dist/{chunk-XJ4TJARR.js → chunk-ML2E3JGK.js} +1 -1
  66. package/dist/{chunk-7UYSTQMI.js → chunk-NDKHC6KL.js} +1 -1
  67. package/dist/{chunk-WPSQYEBP.js → chunk-NJQNHD5P.js} +1 -1
  68. package/dist/{chunk-6LYQ4MJH.js → chunk-NYQOYOBA.js} +1 -1
  69. package/dist/{chunk-S6M36UIV.js → chunk-NYSFEZUR.js} +1 -1
  70. package/dist/{chunk-WYOEOJM2.js → chunk-OSRRMY6M.js} +1 -1
  71. package/dist/{chunk-JPGRUMCS.js → chunk-P3UGM74Z.js} +1 -1
  72. package/dist/{chunk-OGJR5VIG.js → chunk-PCVTSFIX.js} +1 -1
  73. package/dist/chunk-PDXZROJM.js +2 -0
  74. package/dist/{chunk-P67CGWD6.js → chunk-PMOUXVUC.js} +1 -1
  75. package/dist/{chunk-DHPBVHED.js → chunk-QJNQN6ND.js} +1 -1
  76. package/dist/{chunk-3GZ4FQ4L.js → chunk-RJ4YFH7K.js} +1 -1
  77. package/dist/{chunk-5YCOYFZH.js → chunk-RP7FW23G.js} +1 -1
  78. package/dist/{chunk-BAKOH2BR.js → chunk-RSNG5PBN.js} +1 -1
  79. package/dist/{chunk-WDOEMLFZ.js → chunk-SAFETUCL.js} +1 -1
  80. package/dist/{chunk-7YX2HUHY.js → chunk-SAKUG4KE.js} +1 -1
  81. package/dist/{chunk-UYLNH4SH.js → chunk-SU3QKERU.js} +1 -1
  82. package/dist/{chunk-QVR2PB6Y.js → chunk-SXUQBPQ6.js} +1 -1
  83. package/dist/{chunk-XFTF7OOY.js → chunk-SXX7ZE6L.js} +3 -3
  84. package/dist/{chunk-ZIJLOYXX.js → chunk-TGPI7VDR.js} +7 -7
  85. package/dist/{chunk-QXLX6LMJ.js → chunk-TI7MR3PB.js} +1 -1
  86. package/dist/{chunk-AS5UKK27.js → chunk-UEANTGQS.js} +1 -1
  87. package/dist/{chunk-36ZVMJTJ.js → chunk-USUFF3S6.js} +1 -1
  88. package/dist/{chunk-HJOGBE23.js → chunk-VIJUT5AR.js} +9 -9
  89. package/dist/{chunk-4BIJCAR4.js → chunk-W7PBJXLJ.js} +1 -1
  90. package/dist/{chunk-WRIPTYSN.js → chunk-WAI5UHW3.js} +1 -1
  91. package/dist/{chunk-OO7LFDET.js → chunk-WAWMIKSI.js} +1 -1
  92. package/dist/chunk-WEJA3EVI.js +2 -0
  93. package/dist/{chunk-UDW4ZZAW.js → chunk-WXJQDLXX.js} +1 -1
  94. package/dist/chunk-XIGTZTFP.js +5 -0
  95. package/dist/{chunk-2MQP4SSF.js → chunk-XTUSDGAB.js} +1 -1
  96. package/dist/{chunk-K6JRFRGS.js → chunk-YHL5NA43.js} +1 -1
  97. package/dist/{chunk-PQYBIWZH.js → chunk-YUA2VDWH.js} +1 -1
  98. package/dist/{chunk-LMYE3M75.js → chunk-YXPWGIQ2.js} +1 -1
  99. package/dist/{chunk-FL6TCYA5.js → chunk-ZFZB4CGJ.js} +1 -1
  100. package/dist/{chunk-ATIX6CVS.js → chunk-ZXTVP4WX.js} +2 -2
  101. package/dist/{config-5UNFAVY6.js → config-UF635MC4.js} +1 -1
  102. package/dist/{credentials-64JYS7AQ.js → credentials-3KBLEVJH.js} +1 -1
  103. package/dist/{deps-bundle-5JPHXHQV.js → deps-bundle-WGF4YYGO.js} +1 -1
  104. package/dist/{deps-resolve-WFZZ22XH.js → deps-resolve-DVJPU4YX.js} +1 -1
  105. package/dist/{dispatch-JLMCXOSK.js → dispatch-YTIJKX6C.js} +1 -1
  106. package/dist/{doctor-KJMR7NRK.js → doctor-2KRK42L2.js} +1 -1
  107. package/dist/{evidence-OFTY5U4X.js → evidence-CDCFEYS7.js} +1 -1
  108. package/dist/{evolve-cmd-LU6LPT4F.js → evolve-cmd-L3JIBYP5.js} +1 -1
  109. package/dist/{extract-bind-YYIOEAYR.js → extract-bind-VFQWACVO.js} +2 -2
  110. package/dist/{extract-cmd-Q7OG6RY6.js → extract-cmd-2OFQBBJ4.js} +1 -1
  111. package/dist/{generate-headless-NCVM643E.js → generate-headless-B35UUR5A.js} +2 -2
  112. package/dist/index.js +26 -26
  113. package/dist/{ingest-cmd-42VRDSPV.js → ingest-cmd-LAUSXSI3.js} +1 -1
  114. package/dist/install-ENSOEMSX.js +2 -0
  115. package/dist/{interactive-bind-ZDJS7PCV.js → interactive-bind-OWASLPBQ.js} +3 -3
  116. package/dist/{list-commands-3IKFZSGB.js → list-commands-SLQDF6AT.js} +1 -1
  117. package/dist/login-flow-YKQUXP75.js +2 -0
  118. package/dist/{mobile-prompts-XPQSRBIW.js → mobile-prompts-6MGOXIKX.js} +1 -1
  119. package/dist/persist-recorded-session-RKG7HOEW.js +3 -0
  120. package/dist/pipeline-M25AR7RM.js +2 -0
  121. package/dist/prepare-target-UGACDQEJ.js +2 -0
  122. package/dist/{reconcile-cmd-BKIJFVQT.js → reconcile-cmd-MR2MSVZ5.js} +1 -1
  123. package/dist/{reconcile-deps-Y5G456WD.js → reconcile-deps-RYO67ZXY.js} +2 -2
  124. package/dist/{reconcile-engine-WDC2MEOY.js → reconcile-engine-PRH6YIAZ.js} +1 -1
  125. package/dist/{recording-banner-P3RUW62P.js → recording-banner-CH2SZ4IU.js} +1 -1
  126. package/dist/registry-ARR5ITIQ.js +2 -0
  127. package/dist/{require-project-folder-ZGQLWZV5.js → require-project-folder-XY77JKAQ.js} +1 -1
  128. package/dist/{resolve-run-intent-DHZD6A4B.js → resolve-run-intent-JFIGIF72.js} +1 -1
  129. package/dist/{resolver-W54NOQXY.js → resolver-6VDNZ6KP.js} +1 -1
  130. package/dist/{run-BGQTRIU4.js → run-GTBYWSLW.js} +1 -1
  131. package/dist/{run-7TZTUTTU.js → run-UETW72YU.js} +1 -1
  132. package/dist/{run-test-md-WO2UDYPM.js → run-test-md-OLGWTC4I.js} +2 -2
  133. package/dist/{skill-installer-UTVUPOTD.js → skill-installer-NT7ZT6O4.js} +1 -1
  134. package/dist/{spawner-SHCGHLQS.js → spawner-YQSAPZR4.js} +1 -1
  135. package/dist/tcg-generate-D73BMKOE.js +2 -0
  136. package/dist/testmd-actions-XPYXS36F.js +2 -0
  137. package/dist/token-refresh-2XVSIFRM.js +2 -0
  138. package/dist/{validate-basic-XEPS5I6V.js → validate-basic-OMAFYHME.js} +1 -1
  139. package/dist/{verdicts-SOX22V6V.js → verdicts-KEBSV2NL.js} +1 -1
  140. package/dist/{version-check-LWDLMWBJ.js → version-check-FRVZSYNF.js} +1 -1
  141. package/dist/{walk-session-M3OIWR5K.js → walk-session-LNFOCPJ6.js} +1 -1
  142. package/dist/{with-telemetry-SF5RHYQE.js → with-telemetry-4ATZC6IR.js} +1 -1
  143. package/package.json +11 -11
  144. package/dist/FolderPicker-HVI6KITN.js +0 -2
  145. package/dist/SingleShotApp-VJVY3F4H.js +0 -2
  146. package/dist/TestMdRunView-X3CCNYV5.js +0 -2
  147. package/dist/bridge-6DCBL3GY.js +0 -2
  148. package/dist/chunk-7UCICMK7.js +0 -5
  149. package/dist/chunk-HPBI3P6I.js +0 -6
  150. package/dist/chunk-LPH4TERT.js +0 -2
  151. package/dist/chunk-OQAN2WYO.js +0 -26
  152. package/dist/chunk-UPHF2J5E.js +0 -6
  153. package/dist/install-5NMP6ZV4.js +0 -2
  154. package/dist/login-flow-UXUQ7GQT.js +0 -2
  155. package/dist/persist-recorded-session-MFQ7JCLJ.js +0 -3
  156. package/dist/pipeline-2XITQU5W.js +0 -2
  157. package/dist/prepare-target-CKRWHYXS.js +0 -2
  158. package/dist/registry-OEY4IXB6.js +0 -2
  159. package/dist/tcg-generate-YDNE643C.js +0 -2
  160. package/dist/testmd-actions-UCJ4ULSX.js +0 -2
  161. package/dist/token-refresh-ZNV2OSZC.js +0 -2
@@ -1,16 +1,16 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as pi,b as Hs}from"./chunk-3MSXQU2C.js";import{a as xa,b as ya,c as Sa,d as Xa,e as za}from"./chunk-K5DL7CZ4.js";import{a as Oc}from"./chunk-5YCOYFZH.js";import{a as xc,b as Ai,c as Zn,d as yc,e as eo,f as Sc,h as wc,i as Rc,j as Tc,k as kc,l as Cc,m as qt,n as Ec,o as Ic,p as Ac,q as to,r as _c,s as _i,t as Pc,u as Dc,v as Lc}from"./chunk-7UYSTQMI.js";import{b as Bc,c as $c}from"./chunk-UYLNH4SH.js";import{A as Ii,B as fc,C as pc,D as mc,E as gc,H as Ut,K as bc,a as sn,b as wa,c as Ra,e as Ia,f as Aa,g as _a,h as Va,i as Fa,j as Ua,k as Yn,l as Ga,n as Ci,o as nc,p as Ei,r as oc,s as ic,t as sc,u as ac,v as cc,x as lc,y as uc,z as dc}from"./chunk-R4PLEH2A.js";import{c as Ja,d as Qa,n as vc}from"./chunk-OQAN2WYO.js";import{a as Mc,b as Pi}from"./chunk-WYOEOJM2.js";import{b as Ya,r as Za}from"./chunk-WHEWZR2C.js";import{c as rc}from"./chunk-QVR2PB6Y.js";import{a as Qn}from"./chunk-PQYBIWZH.js";import{c as hc}from"./chunk-7UCICMK7.js";import{a as ja}from"./chunk-LMYE3M75.js";import{E as La,K as Ba,L as Ti,M as $a,N as Oa}from"./chunk-ZIJLOYXX.js";import{c as Ma,e as Na}from"./chunk-7RTITBZG.js";import{a as Gs,b as mi,c as lr,d as Gn,e as qa,f as Ha}from"./chunk-DHPBVHED.js";import{a as Wa}from"./chunk-4BIJCAR4.js";import{c as Kn}from"./chunk-OO7LFDET.js";import{a as zs,b as bi,c as Ks,d as Da,e as Ka,g as ec}from"./chunk-7CXIOJB3.js";import{e as Pa}from"./chunk-UPHF2J5E.js";import{a as Vr}from"./chunk-O4IEPE3T.js";import{a as Jn,b as tc,c as ki}from"./chunk-WDOEMLFZ.js";import{a as gi}from"./chunk-5Y2G4NC7.js";import{a as Ea}from"./chunk-UY2ES2Z6.js";import{a as ra,b as Or,c as Ri,d as ma,g as ga,h as ha,i as ba,j as va}from"./chunk-N5I2QYFD.js";import{c as aa,e as ca,g as la}from"./chunk-SQWVGI3J.js";import{b as Nr}from"./chunk-ZHKBSKCB.js";import{b as jr}from"./chunk-XJ4TJARR.js";import{h as ka}from"./chunk-ZKRL6HMY.js";import{a as an}from"./chunk-BPMSNGXQ.js";import{a as Ct,b as $t,c as Ta}from"./chunk-VE3SUJMA.js";import{a as Ca}from"./chunk-BAKOH2BR.js";import{a as wi,d as nn,e as Xn}from"./chunk-2MQP4SSF.js";import{j as Si}from"./chunk-HK3FFI7Y.js";import{d as oa}from"./chunk-MSGW4JDG.js";import{a as zn,b as wr}from"./chunk-TZXXJWHA.js";import{j as ua,n as Ft,o as on,p as ur,r as Mr}from"./chunk-RSSOJ3L2.js";import{a as fa,b as Rr,c as pa}from"./chunk-6T3DWH56.js";import{h as da}from"./chunk-TAOHYWEO.js";import{b as vi}from"./chunk-S6M36UIV.js";import{c as xi}from"./chunk-AO5QH6UU.js";import{a as Vt}from"./chunk-Q6743UUQ.js";import{a as Ys,e as Js,f as Wn,g as Qs,h as Zs,i as ea,j as ta}from"./chunk-Z7S3IWUX.js";import{a as sa}from"./chunk-VQVERWC3.js";import{a as ia}from"./chunk-GZLQ2AR6.js";import{a as Ge}from"./chunk-V5DYLGAM.js";import{a as yi}from"./chunk-NLCCBXXV.js";import{a as na}from"./chunk-RZ4F3BHX.js";import{a as Us,d as Jt,e as rn}from"./chunk-EYOCNMUM.js";import{a as Hn}from"./chunk-H6YGG3GC.js";import{a as hi}from"./chunk-FL6TCYA5.js";import{a as Qt,b as Ws}from"./chunk-5M5BG4MT.js";import{a as xt,b as mt,j as di,n as qs,o as fi,x as l}from"./chunk-LPH4TERT.js";import{b as Xs}from"./chunk-DFS4RMVP.js";import{a as H}from"./chunk-HCBYKLMW.js";import{a as b,b as a,i as Be,j as Fs,k as $r}from"./chunk-C44QQJR4.js";import{a as Ie}from"./chunk-6YGTRKDT.js";import{c as oe,e as D}from"./chunk-UR6MHSHU.js";var Ur=oe((Av,Vc)=>{"use strict";var fp="2.0.0",pp=Number.MAX_SAFE_INTEGER||9007199254740991,mp=16,gp=250,hp=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Vc.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:mp,MAX_SAFE_BUILD_LENGTH:gp,MAX_SAFE_INTEGER:pp,RELEASE_TYPES:hp,SEMVER_SPEC_VERSION:fp,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var cn=oe((_v,Fc)=>{"use strict";var bp=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};Fc.exports=bp});var qr=oe((Ht,Uc)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Di,MAX_SAFE_BUILD_LENGTH:vp,MAX_LENGTH:xp}=Ur(),yp=cn();Ht=Uc.exports={};var Sp=Ht.re=[],wp=Ht.safeRe=[],G=Ht.src=[],Rp=Ht.safeSrc=[],W=Ht.t={},Tp=0,Li="[a-zA-Z0-9-]",kp=[["\\s",1],["\\d",xp],[Li,vp]],Cp=e=>{for(let[t,r]of kp)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},se=(e,t,r)=>{let n=Cp(t),o=Tp++;yp(e,o,t),W[e]=o,G[o]=t,Rp[o]=n,Sp[o]=new RegExp(t,r?"g":void 0),wp[o]=new RegExp(n,r?"g":void 0)};se("NUMERICIDENTIFIER","0|[1-9]\\d*");se("NUMERICIDENTIFIERLOOSE","\\d+");se("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Li}*`);se("MAINVERSION",`(${G[W.NUMERICIDENTIFIER]})\\.(${G[W.NUMERICIDENTIFIER]})\\.(${G[W.NUMERICIDENTIFIER]})`);se("MAINVERSIONLOOSE",`(${G[W.NUMERICIDENTIFIERLOOSE]})\\.(${G[W.NUMERICIDENTIFIERLOOSE]})\\.(${G[W.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASEIDENTIFIER",`(?:${G[W.NONNUMERICIDENTIFIER]}|${G[W.NUMERICIDENTIFIER]})`);se("PRERELEASEIDENTIFIERLOOSE",`(?:${G[W.NONNUMERICIDENTIFIER]}|${G[W.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASE",`(?:-(${G[W.PRERELEASEIDENTIFIER]}(?:\\.${G[W.PRERELEASEIDENTIFIER]})*))`);se("PRERELEASELOOSE",`(?:-?(${G[W.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${G[W.PRERELEASEIDENTIFIERLOOSE]})*))`);se("BUILDIDENTIFIER",`${Li}+`);se("BUILD",`(?:\\+(${G[W.BUILDIDENTIFIER]}(?:\\.${G[W.BUILDIDENTIFIER]})*))`);se("FULLPLAIN",`v?${G[W.MAINVERSION]}${G[W.PRERELEASE]}?${G[W.BUILD]}?`);se("FULL",`^${G[W.FULLPLAIN]}$`);se("LOOSEPLAIN",`[v=\\s]*${G[W.MAINVERSIONLOOSE]}${G[W.PRERELEASELOOSE]}?${G[W.BUILD]}?`);se("LOOSE",`^${G[W.LOOSEPLAIN]}$`);se("GTLT","((?:<|>)?=?)");se("XRANGEIDENTIFIERLOOSE",`${G[W.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);se("XRANGEIDENTIFIER",`${G[W.NUMERICIDENTIFIER]}|x|X|\\*`);se("XRANGEPLAIN",`[v=\\s]*(${G[W.XRANGEIDENTIFIER]})(?:\\.(${G[W.XRANGEIDENTIFIER]})(?:\\.(${G[W.XRANGEIDENTIFIER]})(?:${G[W.PRERELEASE]})?${G[W.BUILD]}?)?)?`);se("XRANGEPLAINLOOSE",`[v=\\s]*(${G[W.XRANGEIDENTIFIERLOOSE]})(?:\\.(${G[W.XRANGEIDENTIFIERLOOSE]})(?:\\.(${G[W.XRANGEIDENTIFIERLOOSE]})(?:${G[W.PRERELEASELOOSE]})?${G[W.BUILD]}?)?)?`);se("XRANGE",`^${G[W.GTLT]}\\s*${G[W.XRANGEPLAIN]}$`);se("XRANGELOOSE",`^${G[W.GTLT]}\\s*${G[W.XRANGEPLAINLOOSE]}$`);se("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Di}})(?:\\.(\\d{1,${Di}}))?(?:\\.(\\d{1,${Di}}))?`);se("COERCE",`${G[W.COERCEPLAIN]}(?:$|[^\\d])`);se("COERCEFULL",G[W.COERCEPLAIN]+`(?:${G[W.PRERELEASE]})?(?:${G[W.BUILD]})?(?:$|[^\\d])`);se("COERCERTL",G[W.COERCE],!0);se("COERCERTLFULL",G[W.COERCEFULL],!0);se("LONETILDE","(?:~>?)");se("TILDETRIM",`(\\s*)${G[W.LONETILDE]}\\s+`,!0);Ht.tildeTrimReplace="$1~";se("TILDE",`^${G[W.LONETILDE]}${G[W.XRANGEPLAIN]}$`);se("TILDELOOSE",`^${G[W.LONETILDE]}${G[W.XRANGEPLAINLOOSE]}$`);se("LONECARET","(?:\\^)");se("CARETTRIM",`(\\s*)${G[W.LONECARET]}\\s+`,!0);Ht.caretTrimReplace="$1^";se("CARET",`^${G[W.LONECARET]}${G[W.XRANGEPLAIN]}$`);se("CARETLOOSE",`^${G[W.LONECARET]}${G[W.XRANGEPLAINLOOSE]}$`);se("COMPARATORLOOSE",`^${G[W.GTLT]}\\s*(${G[W.LOOSEPLAIN]})$|^$`);se("COMPARATOR",`^${G[W.GTLT]}\\s*(${G[W.FULLPLAIN]})$|^$`);se("COMPARATORTRIM",`(\\s*)${G[W.GTLT]}\\s*(${G[W.LOOSEPLAIN]}|${G[W.XRANGEPLAIN]})`,!0);Ht.comparatorTrimReplace="$1$2$3";se("HYPHENRANGE",`^\\s*(${G[W.XRANGEPLAIN]})\\s+-\\s+(${G[W.XRANGEPLAIN]})\\s*$`);se("HYPHENRANGELOOSE",`^\\s*(${G[W.XRANGEPLAINLOOSE]})\\s+-\\s+(${G[W.XRANGEPLAINLOOSE]})\\s*$`);se("STAR","(<|>)?=?\\s*\\*");se("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");se("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var ro=oe((Pv,qc)=>{"use strict";var Ep=Object.freeze({loose:!0}),Ip=Object.freeze({}),Ap=e=>e?typeof e!="object"?Ep:e:Ip;qc.exports=Ap});var Bi=oe((Dv,Wc)=>{"use strict";var Hc=/^[0-9]+$/,Gc=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Hc.test(e),n=Hc.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},_p=(e,t)=>Gc(t,e);Wc.exports={compareIdentifiers:Gc,rcompareIdentifiers:_p}});var et=oe((Lv,zc)=>{"use strict";var no=cn(),{MAX_LENGTH:Xc,MAX_SAFE_INTEGER:oo}=Ur(),{safeRe:io,t:so}=qr(),Pp=ro(),{compareIdentifiers:$i}=Bi(),Dp=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if($i(e[n],r[n])!==0)return!1;return!0},Oi=class e{constructor(t,r){if(r=Pp(r),t instanceof e){if(t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease)return t;t=t.version}else if(typeof t!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>Xc)throw new TypeError(`version is longer than ${Xc} characters`);no("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?io[so.LOOSE]:io[so.FULL]);if(!n)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>oo||this.major<0)throw new TypeError("Invalid major version");if(this.minor>oo||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>oo||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(o=>{if(/^[0-9]+$/.test(o)){let i=+o;if(i>=0&&i<oo)return i}return o}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if(no("SemVer.compare",this.version,this.options,t),!(t instanceof e)){if(typeof t=="string"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),this.major<t.major?-1:this.major>t.major?1:this.minor<t.minor?-1:this.minor>t.minor?1:this.patch<t.patch?-1:this.patch>t.patch?1:0}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{let n=this.prerelease[r],o=t.prerelease[r];if(no("prerelease compare",r,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return $i(n,o)}while(++r)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let r=0;do{let n=this.build[r],o=t.build[r];if(no("build compare",r,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return $i(n,o)}while(++r)}inc(t,r,n){if(t.startsWith("pre")){if(!r&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let o=`-${r}`.match(this.options.loose?io[so.PRERELEASELOOSE]:io[so.PRERELEASE]);if(!o||o[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let o=Number(n)?1:0;if(this.prerelease.length===0)this.prerelease=[o];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);if(i===-1){if(r===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(o)}}if(r){let i=[r,o];if(n===!1&&(i=[r]),Dp(this.prerelease,r)){let s=this.prerelease[r.split(".").length];isNaN(s)&&(this.prerelease=i)}else this.prerelease=i}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};zc.exports=Oi});var dr=oe((Bv,Yc)=>{"use strict";var Kc=et(),Lp=(e,t,r=!1)=>{if(e instanceof Kc)return e;try{return new Kc(e,t)}catch(n){if(!r)return null;throw n}};Yc.exports=Lp});var Qc=oe(($v,Jc)=>{"use strict";var Bp=dr(),$p=(e,t)=>{let r=Bp(e,t);return r?r.version:null};Jc.exports=$p});var el=oe((Ov,Zc)=>{"use strict";var Op=dr(),Mp=(e,t)=>{let r=Op(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};Zc.exports=Mp});var nl=oe((Mv,rl)=>{"use strict";var tl=et(),Np=(e,t,r,n,o)=>{typeof r=="string"&&(o=n,n=r,r=void 0);try{return new tl(e instanceof tl?e.version:e,r).inc(t,n,o).version}catch{return null}};rl.exports=Np});var sl=oe((Nv,il)=>{"use strict";var ol=dr(),jp=(e,t)=>{let r=ol(e,null,!0),n=ol(t,null,!0),o=r.compare(n);if(o===0)return null;let i=o>0,s=i?r:n,u=i?n:r,f=!!s.prerelease.length;if(!!u.prerelease.length&&!f){if(!u.patch&&!u.minor)return"major";if(u.compareMain(s)===0)return u.minor&&!u.patch?"minor":"patch"}let w=f?"pre":"";return r.major!==n.major?w+"major":r.minor!==n.minor?w+"minor":r.patch!==n.patch?w+"patch":"prerelease"};il.exports=jp});var cl=oe((jv,al)=>{"use strict";var Vp=et(),Fp=(e,t)=>new Vp(e,t).major;al.exports=Fp});var ul=oe((Vv,ll)=>{"use strict";var Up=et(),qp=(e,t)=>new Up(e,t).minor;ll.exports=qp});var fl=oe((Fv,dl)=>{"use strict";var Hp=et(),Gp=(e,t)=>new Hp(e,t).patch;dl.exports=Gp});var ml=oe((Uv,pl)=>{"use strict";var Wp=dr(),Xp=(e,t)=>{let r=Wp(e,t);return r&&r.prerelease.length?r.prerelease:null};pl.exports=Xp});var Et=oe((qv,hl)=>{"use strict";var gl=et(),zp=(e,t,r)=>new gl(e,r).compare(new gl(t,r));hl.exports=zp});var vl=oe((Hv,bl)=>{"use strict";var Kp=Et(),Yp=(e,t,r)=>Kp(t,e,r);bl.exports=Yp});var yl=oe((Gv,xl)=>{"use strict";var Jp=Et(),Qp=(e,t)=>Jp(e,t,!0);xl.exports=Qp});var ao=oe((Wv,wl)=>{"use strict";var Sl=et(),Zp=(e,t,r)=>{let n=new Sl(e,r),o=new Sl(t,r);return n.compare(o)||n.compareBuild(o)};wl.exports=Zp});var Tl=oe((Xv,Rl)=>{"use strict";var em=ao(),tm=(e,t)=>e.sort((r,n)=>em(r,n,t));Rl.exports=tm});var Cl=oe((zv,kl)=>{"use strict";var rm=ao(),nm=(e,t)=>e.sort((r,n)=>rm(n,r,t));kl.exports=nm});var ln=oe((Kv,El)=>{"use strict";var om=Et(),im=(e,t,r)=>om(e,t,r)>0;El.exports=im});var co=oe((Yv,Il)=>{"use strict";var sm=Et(),am=(e,t,r)=>sm(e,t,r)<0;Il.exports=am});var Mi=oe((Jv,Al)=>{"use strict";var cm=Et(),lm=(e,t,r)=>cm(e,t,r)===0;Al.exports=lm});var Ni=oe((Qv,_l)=>{"use strict";var um=Et(),dm=(e,t,r)=>um(e,t,r)!==0;_l.exports=dm});var lo=oe((Zv,Pl)=>{"use strict";var fm=Et(),pm=(e,t,r)=>fm(e,t,r)>=0;Pl.exports=pm});var uo=oe((ex,Dl)=>{"use strict";var mm=Et(),gm=(e,t,r)=>mm(e,t,r)<=0;Dl.exports=gm});var ji=oe((tx,Ll)=>{"use strict";var hm=Mi(),bm=Ni(),vm=ln(),xm=lo(),ym=co(),Sm=uo(),wm=(e,t,r,n)=>{switch(t){case"===":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e===r;case"!==":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e!==r;case"":case"=":case"==":return hm(e,r,n);case"!=":return bm(e,r,n);case">":return vm(e,r,n);case">=":return xm(e,r,n);case"<":return ym(e,r,n);case"<=":return Sm(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Ll.exports=wm});var $l=oe((rx,Bl)=>{"use strict";var Rm=et(),Tm=dr(),{safeRe:fo,t:po}=qr(),km=(e,t)=>{if(e instanceof Rm)return e;if(typeof e=="number"&&(e=String(e)),typeof e!="string")return null;t=t||{};let r=null;if(!t.rtl)r=e.match(t.includePrerelease?fo[po.COERCEFULL]:fo[po.COERCE]);else{let f=t.includePrerelease?fo[po.COERCERTLFULL]:fo[po.COERCERTL],g;for(;(g=f.exec(e))&&(!r||r.index+r[0].length!==e.length);)(!r||g.index+g[0].length!==r.index+r[0].length)&&(r=g),f.lastIndex=g.index+g[1].length+g[2].length;f.lastIndex=-1}if(r===null)return null;let n=r[2],o=r[3]||"0",i=r[4]||"0",s=t.includePrerelease&&r[5]?`-${r[5]}`:"",u=t.includePrerelease&&r[6]?`+${r[6]}`:"";return Tm(`${n}.${o}.${i}${s}${u}`,t)};Bl.exports=km});var Ml=oe((nx,Ol)=>{"use strict";var Cm=dr(),Em=Ur(),Im=et(),Am=(e,t,r)=>{if(!Em.RELEASE_TYPES.includes(t))return null;let n=_m(e,r);return n&&Pm(n,t)},_m=(e,t)=>{let r=e instanceof Im?e.version:e;return Cm(r,t)},Pm=(e,t)=>{if(Dm(t))return e.version;switch(e.prerelease=[],t){case"major":e.minor=0,e.patch=0;break;case"minor":e.patch=0;break}return e.format()},Dm=e=>e.startsWith("pre");Ol.exports=Am});var jl=oe((ox,Nl)=>{"use strict";var Vi=class{constructor(){this.max=1e3,this.map=new Map}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}delete(t){return this.map.delete(t)}set(t,r){if(!this.delete(t)&&r!==void 0){if(this.map.size>=this.max){let o=this.map.keys().next().value;this.delete(o)}this.map.set(t,r)}return this}};Nl.exports=Vi});var It=oe((ix,ql)=>{"use strict";var Lm=/\s+/g,Fi=class e{constructor(t,r){if(r=$m(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof Ui)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=t.trim().replace(Lm," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(o=>!Fl(o[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let o of this.set)if(o.length===1&&Hm(o[0])){this.set=[o];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+="||");let r=this.set[t];for(let n=0;n<r.length;n++)n>0&&(this.formatted+=" "),this.formatted+=r[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){t=t.replace(qm,"");let n=((this.options.includePrerelease&&Fm)|(this.options.loose&&Um))+":"+t,o=Vl.get(n);if(o)return o;let i=this.options.loose,s=i?gt[tt.HYPHENRANGELOOSE]:gt[tt.HYPHENRANGE];t=t.replace(s,tg(this.options.includePrerelease)),De("hyphen replace",t),t=t.replace(gt[tt.COMPARATORTRIM],Nm),De("comparator trim",t),t=t.replace(gt[tt.TILDETRIM],jm),De("tilde trim",t),t=t.replace(gt[tt.CARETTRIM],Vm),De("caret trim",t);let u=t.split(" ").map(p=>Gm(p,this.options)).join(" ").split(/\s+/).map(p=>eg(p,this.options));i&&(u=u.filter(p=>(De("loose invalid filter",p,this.options),!!p.match(gt[tt.COMPARATORLOOSE])))),De("range list",u);let f=new Map,g=u.map(p=>new Ui(p,this.options));for(let p of g){if(Fl(p))return[p];f.set(p.value,p)}f.size>1&&f.has("")&&f.delete("");let w=[...f.values()];return Vl.set(n,w),w}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Ul(n,r)&&t.set.some(o=>Ul(o,r)&&n.every(i=>o.every(s=>i.intersects(s,r)))))}test(t){if(!t)return!1;if(typeof t=="string")try{t=new Om(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(rg(this.set[r],t,this.options))return!0;return!1}};ql.exports=Fi;var Bm=jl(),Vl=new Bm,$m=ro(),Ui=un(),De=cn(),Om=et(),{safeRe:gt,src:Mm,t:tt,comparatorTrimReplace:Nm,tildeTrimReplace:jm,caretTrimReplace:Vm}=qr(),{FLAG_INCLUDE_PRERELEASE:Fm,FLAG_LOOSE:Um}=Ur(),qm=new RegExp(Mm[tt.BUILD],"g"),Fl=e=>e.value==="<0.0.0-0",Hm=e=>e.value==="",Ul=(e,t)=>{let r=!0,n=e.slice(),o=n.pop();for(;r&&n.length;)r=n.every(i=>o.intersects(i,t)),o=n.pop();return r},Gm=(e,t)=>(e=e.replace(gt[tt.BUILD],""),De("comp",e,t),e=Km(e,t),De("caret",e),e=Xm(e,t),De("tildes",e),e=Jm(e,t),De("xrange",e),e=Zm(e,t),De("stars",e),e),qe=e=>!e||e.toLowerCase()==="x"||e==="*",Wm=(e,t,r)=>qe(e)&&!qe(t)||qe(t)&&r&&!qe(r),Xm=(e,t)=>e.trim().split(/\s+/).map(r=>zm(r,t)).join(" "),zm=(e,t)=>{let r=t.loose?gt[tt.TILDELOOSE]:gt[tt.TILDE];return e.replace(r,(n,o,i,s,u)=>{De("tilde",e,n,o,i,s,u);let f;return qe(o)?f="":qe(i)?f=`>=${o}.0.0 <${+o+1}.0.0-0`:qe(s)?f=`>=${o}.${i}.0 <${o}.${+i+1}.0-0`:u?(De("replaceTilde pr",u),f=`>=${o}.${i}.${s}-${u} <${o}.${+i+1}.0-0`):f=`>=${o}.${i}.${s} <${o}.${+i+1}.0-0`,De("tilde return",f),f})},Km=(e,t)=>e.trim().split(/\s+/).map(r=>Ym(r,t)).join(" "),Ym=(e,t)=>{De("caret",e,t);let r=t.loose?gt[tt.CARETLOOSE]:gt[tt.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,(o,i,s,u,f)=>{De("caret",e,o,i,s,u,f);let g;return qe(i)?g="":qe(s)?g=`>=${i}.0.0${n} <${+i+1}.0.0-0`:qe(u)?i==="0"?g=`>=${i}.${s}.0${n} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.0${n} <${+i+1}.0.0-0`:f?(De("replaceCaret pr",f),i==="0"?s==="0"?g=`>=${i}.${s}.${u}-${f} <${i}.${s}.${+u+1}-0`:g=`>=${i}.${s}.${u}-${f} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.${u}-${f} <${+i+1}.0.0-0`):(De("no pr"),i==="0"?s==="0"?g=`>=${i}.${s}.${u} <${i}.${s}.${+u+1}-0`:g=`>=${i}.${s}.${u} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.${u} <${+i+1}.0.0-0`),De("caret return",g),g})},Jm=(e,t)=>(De("replaceXRanges",e,t),e.split(/\s+/).map(r=>Qm(r,t)).join(" ")),Qm=(e,t)=>{e=e.trim();let r=t.loose?gt[tt.XRANGELOOSE]:gt[tt.XRANGE];return e.replace(r,(n,o,i,s,u,f)=>{if(De("xRange",e,n,o,i,s,u,f),Wm(i,s,u))return e;let g=qe(i),w=g||qe(s),p=w||qe(u),x=p;return o==="="&&x&&(o=""),f=t.includePrerelease?"-0":"",g?o===">"||o==="<"?n="<0.0.0-0":n="*":o&&x?(w&&(s=0),u=0,o===">"?(o=">=",w?(i=+i+1,s=0,u=0):(s=+s+1,u=0)):o==="<="&&(o="<",w?i=+i+1:s=+s+1),o==="<"&&(f="-0"),n=`${o+i}.${s}.${u}${f}`):w?n=`>=${i}.0.0${f} <${+i+1}.0.0-0`:p&&(n=`>=${i}.${s}.0${f} <${i}.${+s+1}.0-0`),De("xRange return",n),n})},Zm=(e,t)=>(De("replaceStars",e,t),e.trim().replace(gt[tt.STAR],"")),eg=(e,t)=>(De("replaceGTE0",e,t),e.trim().replace(gt[t.includePrerelease?tt.GTE0PRE:tt.GTE0],"")),tg=e=>(t,r,n,o,i,s,u,f,g,w,p,x)=>(qe(n)?r="":qe(o)?r=`>=${n}.0.0${e?"-0":""}`:qe(i)?r=`>=${n}.${o}.0${e?"-0":""}`:s?r=`>=${r}`:r=`>=${r}${e?"-0":""}`,qe(g)?f="":qe(w)?f=`<${+g+1}.0.0-0`:qe(p)?f=`<${g}.${+w+1}.0-0`:x?f=`<=${g}.${w}.${p}-${x}`:e?f=`<${g}.${w}.${+p+1}-0`:f=`<=${f}`,`${r} ${f}`.trim()),rg=(e,t,r)=>{for(let n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!r.includePrerelease){for(let n=0;n<e.length;n++)if(De(e[n].semver),e[n].semver!==Ui.ANY&&e[n].semver.prerelease.length>0){let o=e[n].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}});var un=oe((sx,Kl)=>{"use strict";var dn=Symbol("SemVer ANY"),Gi=class e{static get ANY(){return dn}constructor(t,r){if(r=Hl(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),Hi("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===dn?this.value="":this.value=this.operator+this.semver.version,Hi("comp",this)}parse(t){let r=this.options.loose?Gl[Wl.COMPARATORLOOSE]:Gl[Wl.COMPARATOR],n=t.match(r);if(!n)throw new TypeError(`Invalid comparator: ${t}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new Xl(n[2],this.options.loose):this.semver=dn}toString(){return this.value}test(t){if(Hi("Comparator.test",t,this.options.loose),this.semver===dn||t===dn)return!0;if(typeof t=="string")try{t=new Xl(t,this.options)}catch{return!1}return qi(t,this.operator,this.semver,this.options)}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new zl(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new zl(this.value,r).test(t.semver):(r=Hl(r),r.includePrerelease&&(this.value==="<0.0.0-0"||t.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||t.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&t.operator.startsWith(">")||this.operator.startsWith("<")&&t.operator.startsWith("<")||this.semver.version===t.semver.version&&this.operator.includes("=")&&t.operator.includes("=")||qi(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||qi(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};Kl.exports=Gi;var Hl=ro(),{safeRe:Gl,t:Wl}=qr(),qi=ji(),Hi=cn(),Xl=et(),zl=It()});var fn=oe((ax,Yl)=>{"use strict";var ng=It(),og=(e,t,r)=>{try{t=new ng(t,r)}catch{return!1}return t.test(e)};Yl.exports=og});var Ql=oe((cx,Jl)=>{"use strict";var ig=It(),sg=(e,t)=>new ig(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));Jl.exports=sg});var eu=oe((lx,Zl)=>{"use strict";var ag=et(),cg=It(),lg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new cg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===-1)&&(n=s,o=new ag(n,r))}),n};Zl.exports=lg});var ru=oe((ux,tu)=>{"use strict";var ug=et(),dg=It(),fg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new dg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===1)&&(n=s,o=new ug(n,r))}),n};tu.exports=fg});var iu=oe((dx,ou)=>{"use strict";var Wi=et(),pg=It(),nu=ln(),mg=(e,t)=>{e=new pg(e,t);let r=new Wi("0.0.0");if(e.test(r)||(r=new Wi("0.0.0-0"),e.test(r)))return r;r=null;for(let n=0;n<e.set.length;++n){let o=e.set[n],i=null;o.forEach(s=>{let u=new Wi(s.semver.version);switch(s.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!i||nu(u,i))&&(i=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),i&&(!r||nu(r,i))&&(r=i)}return r&&e.test(r)?r:null};ou.exports=mg});var au=oe((fx,su)=>{"use strict";var gg=It(),hg=(e,t)=>{try{return new gg(e,t).range||"*"}catch{return null}};su.exports=hg});var mo=oe((px,du)=>{"use strict";var bg=et(),uu=un(),{ANY:vg}=uu,xg=It(),yg=fn(),cu=ln(),lu=co(),Sg=uo(),wg=lo(),Rg=(e,t,r,n)=>{e=new bg(e,n),t=new xg(t,n);let o,i,s,u,f;switch(r){case">":o=cu,i=Sg,s=lu,u=">",f=">=";break;case"<":o=lu,i=wg,s=cu,u="<",f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(yg(e,t,n))return!1;for(let g=0;g<t.set.length;++g){let w=t.set[g],p=null,x=null;if(w.forEach(c=>{c.semver===vg&&(c=new uu(">=0.0.0")),p=p||c,x=x||c,o(c.semver,p.semver,n)?p=c:s(c.semver,x.semver,n)&&(x=c)}),p.operator===u||p.operator===f||(!x.operator||x.operator===u)&&i(e,x.semver))return!1;if(x.operator===f&&s(e,x.semver))return!1}return!0};du.exports=Rg});var pu=oe((mx,fu)=>{"use strict";var Tg=mo(),kg=(e,t,r)=>Tg(e,t,">",r);fu.exports=kg});var gu=oe((gx,mu)=>{"use strict";var Cg=mo(),Eg=(e,t,r)=>Cg(e,t,"<",r);mu.exports=Eg});var vu=oe((hx,bu)=>{"use strict";var hu=It(),Ig=(e,t,r)=>(e=new hu(e,r),t=new hu(t,r),e.intersects(t,r));bu.exports=Ig});var yu=oe((bx,xu)=>{"use strict";var Ag=fn(),_g=Et();xu.exports=(e,t,r)=>{let n=[],o=null,i=null,s=e.sort((w,p)=>_g(w,p,r));for(let w of s)Ag(w,t,r)?(i=w,o||(o=w)):(i&&n.push([o,i]),i=null,o=null);o&&n.push([o,null]);let u=[];for(let[w,p]of n)w===p?u.push(w):!p&&w===s[0]?u.push("*"):p?w===s[0]?u.push(`<=${p}`):u.push(`${w} - ${p}`):u.push(`>=${w}`);let f=u.join(" || "),g=typeof t.raw=="string"?t.raw:String(t);return f.length<g.length?f:t}});var Cu=oe((vx,ku)=>{"use strict";var Su=It(),Ki=un(),{ANY:Xi}=Ki,zi=fn(),Yi=Et(),Pg=(e,t,r={})=>{if(e===t)return!0;e=new Su(e,r),t=new Su(t,r);let n=!1;e:for(let o of e.set){for(let i of t.set){let s=Lg(o,i,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},Dg=[new Ki(">=0.0.0-0")],wu=[new Ki(">=0.0.0")],Lg=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Xi){if(t.length===1&&t[0].semver===Xi)return!0;r.includePrerelease?e=Dg:e=wu}if(t.length===1&&t[0].semver===Xi){if(r.includePrerelease)return!0;t=wu}let n=new Set,o,i;for(let c of e)c.operator===">"||c.operator===">="?o=Ru(o,c,r):c.operator==="<"||c.operator==="<="?i=Tu(i,c,r):n.add(c.semver);if(n.size>1)return null;let s;if(o&&i){if(s=Yi(o.semver,i.semver,r),s>0)return null;if(s===0&&(o.operator!==">="||i.operator!=="<="))return null}for(let c of n){if(o&&!zi(c,String(o),r)||i&&!zi(c,String(i),r))return null;for(let m of t)if(!zi(c,String(m),r))return!1;return!0}let u,f,g,w,p=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1,x=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1;p&&p.prerelease.length===1&&i.operator==="<"&&p.prerelease[0]===0&&(p=!1);for(let c of t){if(w=w||c.operator===">"||c.operator===">=",g=g||c.operator==="<"||c.operator==="<=",o){if(x&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===x.major&&c.semver.minor===x.minor&&c.semver.patch===x.patch&&(x=!1),c.operator===">"||c.operator===">="){if(u=Ru(o,c,r),u===c&&u!==o)return!1}else if(o.operator===">="&&!c.test(o.semver))return!1}if(i){if(p&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===p.major&&c.semver.minor===p.minor&&c.semver.patch===p.patch&&(p=!1),c.operator==="<"||c.operator==="<="){if(f=Tu(i,c,r),f===c&&f!==i)return!1}else if(i.operator==="<="&&!c.test(i.semver))return!1}if(!c.operator&&(i||o)&&s!==0)return!1}return!(o&&g&&!i&&s!==0||i&&w&&!o&&s!==0||x||p)},Ru=(e,t,r)=>{if(!e)return t;let n=Yi(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},Tu=(e,t,r)=>{if(!e)return t;let n=Yi(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};ku.exports=Pg});var Qi=oe((xx,Au)=>{"use strict";var Ji=qr(),Eu=Ur(),Bg=et(),Iu=Bi(),$g=dr(),Og=Qc(),Mg=el(),Ng=nl(),jg=sl(),Vg=cl(),Fg=ul(),Ug=fl(),qg=ml(),Hg=Et(),Gg=vl(),Wg=yl(),Xg=ao(),zg=Tl(),Kg=Cl(),Yg=ln(),Jg=co(),Qg=Mi(),Zg=Ni(),eh=lo(),th=uo(),rh=ji(),nh=$l(),oh=Ml(),ih=un(),sh=It(),ah=fn(),ch=Ql(),lh=eu(),uh=ru(),dh=iu(),fh=au(),ph=mo(),mh=pu(),gh=gu(),hh=vu(),bh=yu(),vh=Cu();Au.exports={parse:$g,valid:Og,clean:Mg,inc:Ng,diff:jg,major:Vg,minor:Fg,patch:Ug,prerelease:qg,compare:Hg,rcompare:Gg,compareLoose:Wg,compareBuild:Xg,sort:zg,rsort:Kg,gt:Yg,lt:Jg,eq:Qg,neq:Zg,gte:eh,lte:th,cmp:rh,coerce:nh,truncate:oh,Comparator:ih,Range:sh,satisfies:ah,toComparators:ch,maxSatisfying:lh,minSatisfying:uh,minVersion:dh,validRange:fh,outside:ph,gtr:mh,ltr:gh,intersects:hh,simplifyRange:bh,subset:vh,SemVer:Bg,re:Ji.re,src:Ji.src,tokens:Ji.t,SEMVER_SPEC_VERSION:Eu.SEMVER_SPEC_VERSION,RELEASE_TYPES:Eu.RELEASE_TYPES,compareIdentifiers:Iu.compareIdentifiers,rcompareIdentifiers:Iu.rcompareIdentifiers}});var T=D(Ie(),1);var Nc=D(Ie(),1);var Fr=D(H(),1);function jc({path:e}){return e.length===0?null:(0,Fr.jsx)(b,{children:e.map((t,r)=>(0,Fr.jsxs)(Nc.default.Fragment,{children:[r>0&&(0,Fr.jsx)(a,{color:l.muted,children:" \u203A "}),(0,Fr.jsx)(a,{color:l.dim,children:t})]},r))})}var _u=D(Qi(),1),xh=1,yh=new Set(["discover","workflow","nudge","recovery"]),Sh=new Set(["run","generate","both"]),wh=new Set(["banner","footer"]),go=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Hr=e=>typeof e=="string"&&e.length>0?e:void 0,Gr=e=>typeof e=="number"&&Number.isFinite(e)?e:void 0;function Rh(e){if(!go(e))return{};let t={};return Hr(e.run)&&(t.run=e.run),Hr(e.generate)&&(t.generate=e.generate),Hr(e.default)&&(t.default=e.default),t}function Pu(e,t){return e.text[t]??e.text.default??(e.target!=="both"?e.text[e.target]:void 0)}function Th(e,t){return t==="both"?!!e.default||!!e.run&&!!e.generate:t==="run"?!!e.run||!!e.default:!!e.generate||!!e.default}function kh(e,t){if(!go(e))return;let r=Gr(e.maxShows),n=Hr(e.until),o=Gr(e.weight);if(!(r===void 0||r<1||n===void 0||!Number.isFinite(Date.parse(n))))return{weight:Math.max(o??t,t),maxShows:Math.floor(r),until:n}}function Ch(e){if(!go(e))return null;let t=Hr(e.id);if(!t)return null;let r=Sh.has(e.target)?e.target:void 0;if(e.target!==void 0&&r===void 0)return null;let n=r??"both",o=Rh(e.text);if(!Th(o,n))return null;let i=yh.has(e.category)?e.category:"nudge",s=wh.has(e.surface)?e.surface:void 0,u=Gr(e.weight),f=u===void 0?1:Math.max(0,u),g=Gr(e.cooldownSessions),w=g===void 0?0:Math.max(0,Math.floor(g)),p=Hr(e.minVersion)&&_u.default.coerce(e.minVersion)?e.minVersion:void 0,x=Array.isArray(e.relevance)?e.relevance.filter(U=>typeof U=="string"):[],c=Gr(e.retireAfterShows),m=c!==void 0&&c>=1?Math.floor(c):void 0,_=kh(e.boost,f);return{id:t,category:i,surface:s,target:n,text:o,weight:f,cooldownSessions:w,minVersion:p,relevance:x,retireAfterShows:m,boost:_}}function ho(e){if(!go(e)||!Array.isArray(e.hints)||typeof e.enabled!="boolean")return{catalog:null,dropped:0};let t=Gr(e.schemaVersion)??0;if(Math.floor(t)>xh)return{catalog:null,dropped:0};let r=0,n=new Set,o=[];for(let i of e.hints){let s=Ch(i);if(!s){r++;continue}if(n.has(s.id)){r++;continue}n.add(s.id),o.push(s)}return o.length===0?{catalog:null,dropped:r}:{catalog:{schemaVersion:t,enabled:e.enabled,hints:o},dropped:r}}var Bu=D(H(),1),Du="tip: ";function Lu({hint:e,mode:t,termWidth:r}){if(e.target!=="both"&&e.target!==t)return null;let n=Pu(e,t);if(!n)return null;let o=Math.max(8,r-Du.length-2),i=n.length>o?n.slice(0,o-1)+"\u2026":n;return(0,Bu.jsx)(a,{color:l.dim,children:Du+i})}var re=D(H(),1);function bo(e,t){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}\u2026`}function Eh(e,t){if(e.kind==="desktop")return"Desktop";let r=rn(e.kind);return e.deviceName?e.appPackage&&t>=72?`${r} \xB7 ${bo(e.deviceName,30)} \xB7 ${bo(e.appPackage,36)}`:t>=48?`${r} \xB7 ${bo(e.deviceName,40)}`:`${r} \xB7 ${bo(e.deviceName,Math.max(8,t-12))}`:t<36?r:`${r} \xB7 setting up`}function $u({profile:e,environment:t,tokenValid:r,runCount:n,sessionId:o,viewMode:i,breadcrumb:s,chatMode:u,tcgRequestId:f,tcgStreamStatus:g,footerHint:w,sessionTarget:p={kind:"desktop"},targetLocked:x=!1}){let{stdout:c}=$r(),m=c?.columns??80,_=u??"run",U=t==="stage",B=t==="prod",F=_==="generate"?l.generateAccent:l.orange,q=g==="completed"?l.green:g==="failed"?l.red:l.generateAccent,$=Eh(p,m);return(0,re.jsxs)(b,{flexDirection:"column",children:[(0,re.jsx)(a,{color:l.muted,children:"\u2500".repeat(m)}),s&&s.length>0&&(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(jc,{path:s})}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:"Mode:"}),(0,re.jsx)(a,{color:F,bold:!0,children:_==="generate"?"Generate":"Run"}),(0,re.jsx)(a,{color:l.muted,children:"|"}),_==="generate"?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.dim,children:"req"}),(0,re.jsx)(a,{color:l.dim,children:f??"\u2014"}),g&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"\xB7"}),(0,re.jsx)(a,{color:q,children:g})]})]}):(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.dim,children:"Session:"}),(0,re.jsx)(a,{color:l.dim,children:o})]}),(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsx)(a,{color:r?l.green:l.red,children:"\u25CF"}),(0,re.jsx)(a,{color:l.dim,children:r?"authenticated":"not logged in"}),!B&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"|"}),U?(0,re.jsx)(a,{color:l.orange,bold:!0,children:"\u26A0 stage"}):(0,re.jsx)(a,{color:l.green,children:t})]})]}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:e??"no profile"}),_==="run"&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsxs)(a,{color:l.dim,children:["runs: ",n]})]}),(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsx)(a,{dimColor:!0,children:Hs()})]}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:"Config:"}),(0,re.jsx)(a,{color:p.kind==="desktop"?l.dim:l.orange,children:$}),x&&(0,re.jsx)(a,{color:l.dim,children:"\xB7 locked (/new to change)"})]}),(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(a,{dimColor:!0,children:i==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})}),w&&(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(Lu,{hint:w,mode:_,termWidth:m})})]})}var kr=D(Ie(),1);var pn=[[[" "],[" "],[" "],[" "],["\u2584","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],[" "],[" "],[" "],[" "],[" "],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7"],[" "],[" "],[" "],[" "]],[[" "],[" "],["\u2584","#875faf"],["\u2584","#af87d7","#875faf"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7","#875faf"],["\u2584","#875faf"],[" "],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2584","#000000","#af87d7"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#af87d7"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#585858","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2588","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#000000","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],[" "],["\u2580","#875faf"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2580","#875faf"],[" "],[" "]],[[" "],[" "],[" "],[" "],[" "],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],[" "],[" "],[" "],[" "],[" "]]];var ve=D(H(),1),vo="#af87d7",Zi="#875faf",Ou="#5b3a7a",Ih="#ff9500",Ah="#ea580c";var es="#666666",_h="#555555",Tr=[[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],ts=Tr.map(([,e])=>[...e]);function Mu({visibleRows:e=Tr.length}){let t=Math.min(e,Tr.length);return(0,ve.jsxs)(b,{flexDirection:"column",children:[Tr.slice(0,t).map(([r,n],o)=>{let i=ts[o];return(0,ve.jsx)(a,{children:i.map((s,u)=>{if(s==="\u2588")return(0,ve.jsx)(a,{color:r,children:"\u2588"},u);let f=u>0&&i[u-1]==="\u2588",g=o>0&&u>0&&ts[o-1][u-1]==="\u2588";return f||g?(0,ve.jsx)(a,{color:Ou,children:"\u2592"},u):(0,ve.jsx)(a,{children:" "},u)})},o)}),t>=Tr.length&&(0,ve.jsxs)(a,{children:[" ",ts[Tr.length-1].map((r,n)=>r==="\u2588"?(0,ve.jsx)(a,{color:Ou,children:"\u2580"},n):(0,ve.jsx)(a,{children:" "},n))]})]})}function Ph({visibleRows:e=pn.length}){let t=Math.min(e,pn.length);return(0,ve.jsx)(b,{flexDirection:"column",children:pn.slice(0,t).map((r,n)=>(0,ve.jsx)(a,{children:r.map((o,i)=>{let s=o[0],u=o[1],f=o[2];return u?(0,ve.jsx)(a,{color:u,backgroundColor:f,children:s},i):(0,ve.jsx)(a,{children:s},i)})},n))})}function xo({size:e="compact",helmetVisibleRows:t=pn.length,textVisibleRows:r=Tr.length,showMeta:n=!1,user:o=null,authenticated:i=!1,version:s=""}){return e==="compact"?(0,ve.jsx)(Mu,{}):(0,ve.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,ve.jsx)(a,{color:Ih,italic:!0,children:" Welcome to"}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(b,{gap:2,children:[(0,ve.jsx)(Ph,{visibleRows:t}),(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(Mu,{visibleRows:r}),(0,ve.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,ve.jsx)(a,{color:Ah,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,ve.jsxs)(ve.Fragment,{children:[(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(a,{children:[(0,ve.jsx)(a,{color:es,children:" The validation layer for AI coding agents. "}),(0,ve.jsx)(a,{color:_h,children:`v${s}`})]}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:es,children:" Kane-CLI: natural-language web & mobile-app automation, plus"})}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:es,children:" requirements-to-coverage assurance \u2014 from your CLI or IDE."})}),(0,ve.jsx)(a,{children:" "})]})]})}var os=D(H(),1),rs=8,ns=7;function Nu({onComplete:e}){let[t,r]=(0,kr.useState)(0),[n,o]=(0,kr.useState)(0),[i,s]=(0,kr.useState)(!1),[u]=(0,kr.useState)(()=>{let f=new Hn,g=f.getActiveProfile(),w=f.getDefaultEnv(),p=g?f.loadCredentials(g,w):null,x=g?f.loadBasicAuth(g,w):null;return{authenticated:!!(p||x),user:x?.username??g??null}});return gi(()=>{r(f=>Math.min(rs,f+1))},t<rs?60:null),gi(()=>{o(f=>Math.min(ns,f+1))},n<ns?80:null),(0,kr.useEffect)(()=>{t>=rs&&n>=ns&&!i&&(s(!0),e?.())},[t,n,i,e]),(0,os.jsx)(b,{flexDirection:"column",children:(0,os.jsx)(xo,{size:"full",helmetVisibleRows:t,textVisibleRows:n,showMeta:i,user:u.user,authenticated:u.authenticated,version:xt})})}var Zt=D(H(),1);function ju({entry:e}){return e.type==="input"?(0,Zt.jsxs)(b,{children:[(0,Zt.jsx)(a,{color:l.orange,children:"\u276F "}),(0,Zt.jsx)(a,{children:e.text})]}):e.type==="error"?(0,Zt.jsx)(b,{marginLeft:2,children:(0,Zt.jsx)(a,{color:l.red,children:e.text})}):(0,Zt.jsx)(b,{marginLeft:2,children:(0,Zt.jsx)(a,{color:e.type==="info"?l.dim:void 0,children:e.text})})}var is=D(H(),1);function Vu({objective:e}){let{stdout:t}=$r(),r=Math.max(24,(t?.columns??80)-4);return(0,is.jsx)(Qt,{title:"run",width:r,children:(0,is.jsx)(Ws,{label:"objective",value:e})})}var Gt=D(Ie(),1);var ht=D(H(),1);function Dh(e,t){let r=[],o=Math.max(t-4,30);r.push({type:"title",text:e.title});for(let i=0;i<e.sections.length;i++){let s=e.sections[i];i>0&&r.push({type:"divider",text:"\u2500".repeat(o)}),s.label&&r.push({type:"header",text:s.label});let u=s.entries.length>0?Math.max(...s.entries.map(f=>f.key.length)):0;for(let f of s.entries){let g="\xB7".repeat(Math.max(2,u-f.key.length+3)),w=`${f.key} ${g} ${f.value}`;r.push({type:"entry",text:w,color:f.color})}}return r.push({type:"footer",text:"esc back"}),r}function Fu({data:e,width:t=60}){let r=Dh(e,t);return(0,ht.jsx)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:r.map((n,o)=>{if(n.type==="title")return(0,ht.jsx)(a,{color:l.orange,bold:!0,children:n.text},o);if(n.type==="header")return(0,ht.jsx)(b,{marginTop:1,children:(0,ht.jsx)(a,{color:l.dim,children:n.text})},o);if(n.type==="divider")return(0,ht.jsx)(b,{marginTop:1,marginBottom:0,children:(0,ht.jsx)(a,{color:l.muted,children:n.text})},o);if(n.type==="footer")return(0,ht.jsx)(b,{marginTop:1,children:(0,ht.jsx)(a,{color:l.dim,children:n.text})},o);let i=n.text.match(/^(.+?) (·+) (.+)$/);return i?(0,ht.jsxs)(a,{children:[(0,ht.jsxs)(a,{color:l.secondary,children:[i[1]," "]}),(0,ht.jsxs)(a,{color:l.muted,children:[i[2]," "]}),(0,ht.jsx)(a,{color:n.color,children:i[3]})]},o):(0,ht.jsx)(a,{color:n.color,children:n.text},o)})})}var rt=D(H(),1);function yo(e,t){let r=[];function n(o,i){for(let s of o)r.push({item:s,depth:i}),s.type==="submenu"&&s.children&&t.length>i&&t[i]===s.id&&n(s.children,i+1)}return n(e,0),r}function ss({items:e,onRunSelected:t,initialExpandedPath:r,onDismiss:n,renderLoginWizard:o,renderProfilesView:i,renderChromeProfilePicker:s,renderProjectPicker:u,renderFolderPicker:f,renderWindowSizePicker:g,onActiveViewChange:w}){let[p,x]=(0,Gt.useState)(()=>{let F=r??[],q=yo(e,F),$=0;if(F.length>0){let z=q.findIndex(ae=>ae.item.id===F[0]);z>=0&&z+1<q.length&&($=z+1)}return{expandedPath:F,selectedIndex:$,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),c=yo(e,p.expandedPath),m=c[p.selectedIndex]?.item,_=(0,Gt.useRef)(null),U=(0,Gt.useCallback)(F=>{x(q=>({...q,feedback:F})),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{x(q=>({...q,feedback:null})),_.current=null},4e3)},[]);(0,Gt.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]),(0,Gt.useEffect)(()=>{w?.(p.activeView)},[p.activeView,w]);let B=(0,Gt.useCallback)(()=>{x(F=>({...F,activeView:null,infoData:null}))},[]);return Be((F,q)=>{if(p.activeView==="infoView"){q.escape&&B();return}if(!(p.activeView==="loginWizard"||p.activeView==="profilesView"||p.activeView==="chromeProfilePicker"||p.activeView==="projectPicker"||p.activeView==="folderPicker"||p.activeView==="windowSizePicker")){if(p.isEditing){if(q.escape){x($=>({...$,isEditing:!1,inputValue:""}));return}if(q.return){let $=p.inputValue.trim();if(m?.onValue&&$){let z=m.currentValue;m.onValue($),U(z?`${m.label}: ${z} \u2192 ${$}`:`${m.label}: ${$}`)}x(z=>({...z,isEditing:!1,inputValue:""}));return}if(q.backspace||q.delete){x($=>({...$,inputValue:$.inputValue.slice(0,-1)}));return}F&&!q.ctrl&&!q.meta&&x($=>({...$,inputValue:$.inputValue+F}));return}if(p.isSelecting&&m?.options){let $=m.options;if(q.escape){x(z=>({...z,isSelecting:!1}));return}if(q.upArrow){x(z=>({...z,inputValue:String(Math.max(0,Number(z.inputValue||"0")-1))}));return}if(q.downArrow){x(z=>({...z,inputValue:String(Math.min($.length-1,Number(z.inputValue||"0")+1))}));return}if(q.return){let z=Number(p.inputValue||"0"),ae=$[z];if(ae&&m.onValue){let ee=m.currentValue;m.onValue(ae.value),U(ee?`${m.label}: ${ee} \u2192 ${ae.label}`:`${m.label}: ${ae.label}`)}x(ee=>({...ee,isSelecting:!1,inputValue:""}));return}return}if(q.upArrow){x($=>({...$,selectedIndex:Math.max(0,$.selectedIndex-1)}));return}if(q.downArrow){x($=>({...$,selectedIndex:Math.min(c.length-1,$.selectedIndex+1)}));return}if(q.escape){if(p.expandedPath.length===0){n?.();return}x($=>{let z=$.expandedPath.slice(0,-1),ae=yo(e,z),ee=$.expandedPath[$.expandedPath.length-1],te=ae.findIndex(K=>K.item.id===ee);return{...$,expandedPath:z,selectedIndex:te>=0?te:0}});return}if(q.return&&m){if(m.id==="run-start"){t();return}if(m.type==="submenu"){let $=c[p.selectedIndex]?.depth??0;x(z=>{let ae=[...z.expandedPath.slice(0,$),m.id],ee=yo(e,ae),te=ee.findIndex(K=>K.item.id===m.id);return{...z,expandedPath:ae,selectedIndex:te>=0?Math.min(te+1,ee.length-1):z.selectedIndex}});return}if(m.onInfo){let $=m.onInfo();x(z=>({...z,activeView:"infoView",infoData:$}));return}if(m.onLoginWizard){m.onLoginWizard(),x($=>({...$,activeView:"loginWizard"}));return}if(m.onProfilesView){m.onProfilesView(),x($=>({...$,activeView:"profilesView"}));return}if(m.onChromeProfilePicker){m.onChromeProfilePicker(),x($=>({...$,activeView:"chromeProfilePicker"}));return}if(m.onProjectPicker){m.onProjectPicker(),x($=>({...$,activeView:"projectPicker"}));return}if(m.onFolderPicker){m.onFolderPicker(),x($=>({...$,activeView:"folderPicker"}));return}if(m.onWindowSizePicker){m.onWindowSizePicker(),x($=>({...$,activeView:"windowSizePicker"}));return}if(m.type==="action"){m.onAction?.(),m.suppressFeedback||U(`${m.label} done`);return}if(m.type==="select"&&m.options){let $=m.options.findIndex(z=>z.value===m.currentValue);x(z=>({...z,isSelecting:!0,inputValue:String(Math.max(0,$))}));return}if(m.type==="text-input"){x($=>({...$,isEditing:!0,inputValue:m.currentValue??""}));return}}}}),(0,rt.jsx)(b,{flexDirection:"column",paddingX:1,children:p.activeView==="infoView"&&p.infoData?(0,rt.jsx)(Fu,{data:p.infoData}):p.activeView==="loginWizard"&&o?o(B):p.activeView==="profilesView"&&i?i(B):p.activeView==="chromeProfilePicker"&&s?s(B):p.activeView==="projectPicker"&&u?u(B):p.activeView==="folderPicker"&&f?f(B):p.activeView==="windowSizePicker"&&g?g(B):(0,rt.jsxs)(rt.Fragment,{children:[c.map(({item:F,depth:q},$)=>{let z=$===p.selectedIndex,ae=" ".repeat(q),ee=z?"\u276F ":" ",te=F.type==="submenu"?p.expandedPath.includes(F.id)?"\u25BC ":"\u25B6 ":F.type==="select"&&F.options?z&&p.isSelecting?"\u25BC ":"\u25B6 ":" ",K=F.currentValue!=null?` [${F.currentValue}]`:"";if(z&&p.isSelecting&&F.options){let pe=Number(p.inputValue||"0");return(0,rt.jsxs)(b,{flexDirection:"column",children:[(0,rt.jsxs)(a,{color:l.orange,children:[ae,ee,te,F.label]}),F.options.map((Re,me)=>(0,rt.jsxs)(a,{color:me===pe?l.orange:void 0,children:[ae," ",me===pe?"\u276F ":" ",Re.label]},Re.value))]},F.id)}return z&&p.isEditing?(0,rt.jsxs)(a,{color:l.orange,children:[ae,ee,te,F.label,": ",p.inputValue,(0,rt.jsx)(a,{color:l.dim,children:"\u2588"})]},F.id):(0,rt.jsxs)(a,{color:z?l.orange:void 0,dimColor:!z&&q>0,children:[ae,ee,te,F.label,(0,rt.jsx)(a,{dimColor:!0,children:K})]},F.id)}),p.feedback&&(0,rt.jsx)(b,{marginTop:1,children:(0,rt.jsxs)(a,{color:l.green,children:["\u2713 ",p.feedback]})}),(0,rt.jsx)(Vt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var J=D(Ie(),1);import{access as Lh}from"fs/promises";async function Uu(e){try{return await Lh(e),!0}catch{return!1}}function Bh(e,t){if(Rr(e))return!0;let r=/\.([a-z0-9]+)$/i.exec(e)?.[1]?.toLowerCase()??"";return t==="emulator"?["apk","aab","apks"].includes(r):["app","zip"].includes(r)}function $h(e){return e==="emulator"||e==="simulator"?e:null}var So={emulator:"android",simulator:"ios"};function Oh(e){return`${e.platform}\0${e.kind}\0${ra(e)}`}function Mh(e,t){let r=t.id!==void 0?{...t,id:wi(t.id)}:t,n=e.map(i=>i.virtualName!==void 0?{...i,virtualName:wi(i.virtualName)}:i),o=ta(n.filter(i=>Js(i,r)));return o?e.find(i=>i.id===o.id):void 0}function qu(e){let[t,r]=(0,J.useState)("idle"),[n,o]=(0,J.useState)(null),i=(0,J.useRef)(null),s=(0,J.useRef)(null),u=(0,J.useRef)(null),[f,g]=(0,J.useState)([]),[w,p]=(0,J.useState)([]),[x,c]=(0,J.useState)([]),[m,_]=(0,J.useState)(null),[U,B]=(0,J.useState)(null),[F,q]=(0,J.useState)(null),[$,z]=(0,J.useState)(null),[ae,ee]=(0,J.useState)(null),te=(0,J.useRef)(null),K=(0,J.useRef)(null),pe=(0,J.useRef)(null),Re=(0,J.useRef)(new Map),me=(0,J.useRef)(0),$e=(0,J.useRef)("confirm"),He=(0,J.useRef)(null),st=(0,J.useRef)(null),zt=(0,J.useRef)(null),Rt=(0,J.useRef)(()=>{}),ge=(0,J.useRef)({pathExists:Uu,...e});ge.current={pathExists:Uu,...e},(0,J.useEffect)(()=>{t==="ready"&&(He.current=null)},[t]);let ut=(0,J.useCallback)((P,L,Y)=>{Y().catch(X=>{P===me.current&&(_(null),B(X instanceof Error?X.message:String(X)),r(L))})},[]),Ot=(0,J.useCallback)(async(P,L,Y)=>{r("picking"),_("Looking for devices\u2026");let X=Y?So[Y]:void 0,Z=(await Xn(X)).filter(Se=>!Y||Se.kind===Y);if(P===me.current){if(p(Z),_(null),Z.length===0){B(Y==="emulator"?"No Android emulator found on this machine.":Y==="simulator"?"No iOS simulator found on this machine.":"No emulator or simulator found on this machine.");return}st.current=null,ee(null)}},[]),Oe=(0,J.useCallback)((P,L)=>{let Y={target:P,savedDeviceLabel:P.displayName,savedKind:P.kind,...L?{appPath:L,savedAppLabel:u.current??L}:{},deviceMissing:!1,appMissing:!L};st.current=Y,zt.current=Y,ee(Y),_(null),r("confirm")},[]),Le=(0,J.useCallback)(async(P,L)=>{let Y=nn(So[L]);if(!Y||!Y.available())return!0;let X=await Y.checks({appiumUrl:ge.current.getDefaults()?.appium_url});return P!==me.current?!1:(g(X),X.some(Se=>Se.required&&Se.status==="fail"&&!Se.fixedByBundle)?(_(null),r("doctor"),!1):!0)},[]),Kt=(0,J.useCallback)(async(P,L)=>{let Y=ge.current.getDefaults(),X=Y?.default_target;if(i.current=L,o(L),_("Checking the saved setup\u2026"),!await Le(P,L))return;let Z=So[L],Se=(await Xn(Z)).filter(nr=>nr.kind===L);if(P!==me.current)return;p(Se),_(null);let Je=X?Mh(Se,X):void 0,le=ba(Y?.default_app)?Y?.default_app:void 0,St=le?Rr(le)||await ge.current.pathExists(le):!1;if(P!==me.current)return;let bt=le&&Rr(le)?await ge.current.appLabelFor?.(le)??le:le;if(P!==me.current)return;let Ce={...Je?{target:Je}:{},savedDeviceLabel:X?.id??"(unknown device)",savedKind:L,...le&&St?{appPath:le}:{},...bt?{savedAppLabel:bt}:{},deviceMissing:!Je,appMissing:!le||!St};st.current=Ce,zt.current=Ce,u.current=le&&bt!==le?bt:null,ee(Ce),r("confirm")},[Le]),Ne=(0,J.useCallback)(async(P,L)=>{r("checking");let Y=zn();if(P!==me.current)return;if(!Y.supported){g([{id:"host.platform",label:"host",required:!0,status:"fail",detail:Y.reason}]),r("doctor");return}g([]);let X=ge.current.getDefaults(),Z=$h(X?.default_target?.kind);if(L==="confirm"&&Z&&X?.default_target){st.current=null,ee(null),await Kt(P,Z);return}r("chooser")},[Kt]),Yt=(0,J.useCallback)(P=>{let L=++me.current;i.current=P,o(P);let Y=ge.current.getDefaults();ge.current.setDefaults({...Y,tui_target:P}),B(null),ut(L,"chooser",async()=>{r("picking"),_(P==="simulator"?"Checking the iOS toolchain\u2026":"Checking the Android toolchain\u2026"),await Le(L,P)&&(_("Checking the mobile dependencies\u2026"),await Si().ensure(P,{automatic:!0,onProgress:X=>{L===me.current&&_(X)}}),L===me.current&&await Ot(L,$e.current,P))})},[Le,Ot,ut]),mr=(0,J.useCallback)((P="confirm",L={})=>{let Y=++me.current;$e.current=P;let X=ge.current.getDefaults();He.current=X?.tui_target??"desktop";let Z=(L.kind?Jt(L.kind):void 0)??Jt(X?.default_target?.kind??"")??"emulator";ge.current.setDefaults({...X,tui_target:Z}),g([]),p([]),c([]),q(null),z(null),B(null),ee(null),st.current=null,te.current=null,K.current=null,P==="reinit"&&(pe.current=null),ut(Y,"doctor",()=>Ne(Y,P))},[ut,Ne]),Cr=(0,J.useCallback)(()=>{let P=++me.current;B(null),ut(P,"doctor",()=>Ne(P,$e.current))},[ut,Ne]),Kr=(0,J.useCallback)(P=>{let L=++me.current;B(null),_("Installing managed mobile dependencies\u2026");let Y=P??["emulator",...process.platform==="darwin"?["simulator"]:[]];ut(L,"doctor",async()=>{for(let X of Y)await Si().ensure(X,{automatic:!1,approved:!0,onProgress:Z=>{L===me.current&&_(Z)}});L===me.current&&_(null),await Ne(L,$e.current)})},[ut,Ne]),Er=(0,J.useCallback)(async P=>{let L=nn(P.platform);if(!L){B(`No provider registered for platform "${P.platform}"`);return}let X=await(ge.current.deviceBusyOn??(()=>la(ca(),[],[],P.kind)))({udid:P.id,displayName:P.displayName});if(X!==null){let Je=typeof X=="number"?X:X.port,le=typeof X=="number"?void 0:X.device;B(aa({udid:P.id,displayName:P.displayName},Je,le));return}te.current=P,K.current=L,z(P),B(null),c([]),Ri(L,P);let Z=s.current;Z&&!Bh(Z,P.kind)&&(s.current=null);let Se=ge.current.getDefaults();ge.current.setDefaults({...Se,...Jt(P.kind)?{tui_target:Jt(P.kind)}:{},default_target:Wn(P)}),s.current&&q(Or(P,s.current,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),Oe(P,s.current)},[Oe]),gr=(0,J.useCallback)((P={})=>{let L=st.current;if(!L?.target){B("That device is no longer connected \u2014 pick another one.");return}let Y=L.target,X=nn(Y.platform);if(!X){B(`No provider registered for platform "${Y.platform}"`);return}if(te.current=Y,K.current=X,z(Y),B(null),c([]),Ri(X,Y),!(P.keepApp!==!1&&L.appPath)){r("appSource");return}let Se=ge.current.getDefaults();s.current=L.appPath,q(Or(Y,L.appPath,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),r("ready")},[]),hr=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}r("apps")},[]),Tt=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}B(null),r("appList")},[]),br=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}B(null),r("appId")},[]),Ir=(0,J.useCallback)(async P=>{let L=te.current,Y=ge.current.resolveAppId;if(!L)return{ok:!1,error:"Pick a device before choosing an app"};if(!Y)return{ok:!1,error:"Log in to use an app id, or choose a local build."};let X=++me.current;B(null),_("Downloading the application \u2014 this can take a while, please wait\u2026");try{let Z=await Y(P,Je=>{X===me.current&&_(Je)});if(X!==me.current)return{ok:!1};let Se=ge.current.getDefaults();return s.current=P,u.current=Z.name,pe.current=null,_(null),q(Or(L,P,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),ge.current.setDefaults({...Se,...Jt(L.kind)?{tui_target:Jt(L.kind)}:{},default_target:Wn(L),default_app:P}),Oe(L,P),{ok:!0}}catch(Z){return X!==me.current?{ok:!1}:(_(null),{ok:!1,error:Z instanceof Error?Z.message:String(Z)})}},[Oe]),vr=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}r("appSource")},[]),Q=(0,J.useCallback)(async(P,L={})=>{let Y=L.persist!==!1,X=te.current;if(!X)return B("Pick a device before choosing an app"),{ok:!1,error:"Pick a device before choosing an app"};if(P.kind!=="package"&&!await ge.current.pathExists(P.value))return{ok:!1,error:`${P.value} is not there.`};let Z=ge.current.getDefaults();return s.current=P.value,u.current=null,pe.current=null,B(null),_(null),q(Or(X,P.value,{noReset:Z?.no_reset,appiumUrl:Z?.appium_url,autoGrantPermissions:Z?.auto_grant_permissions,autoAcceptAlerts:Z?.auto_accept_alerts})),Oe(X,P.value),Y&&ge.current.setDefaults({...Z,...Jt(X.kind)?{tui_target:Jt(X.kind)}:{},default_target:Wn(X),default_app:P.value}),{ok:!0}},[Oe]),ue=(0,J.useCallback)(()=>{r("appSource")},[]),ce=(0,J.useCallback)(async P=>{let L=te.current,Y=K.current;if(!L||!Y)return{ok:!1,error:"No device is bound \u2014 run /mobile first"};try{let X=await ma(Y,L,bt=>_(bt)),Z=await Y.ensureApp(X,P,bt=>_(bt));_(null);let Se=Oh(L);pe.current={targetIdentity:Se,packageId:Z};let Je=Re.current.get(Se)??[];if(!Je.includes(Z)){let bt=[...Je,Z].sort();Re.current.set(Se,bt),c(bt)}let le=ge.current.getDefaults(),St=Or(X,Z,{noReset:le?.no_reset,appiumUrl:le?.appium_url,autoGrantPermissions:le?.auto_grant_permissions,autoAcceptAlerts:le?.auto_accept_alerts});return q(St),{ok:!0,device:St}}catch(X){return _(null),{ok:!1,error:X instanceof Error?X.message:String(X)}}},[]),ie=(0,J.useCallback)(async()=>{let P=te.current;if(!P)return{ok:!1,reason:"No device is selected.",step:"device"};let L=So[P.kind];if(!(await Xn(L)).some(Z=>Z.id===P.id||Z.virtualName&&Z.virtualName===P.virtualName))return{ok:!1,reason:`${P.displayName} is no longer connected.`,step:"device"};let X=s.current;return X?Rr(X)?{ok:!0}:await ge.current.pathExists(X)?{ok:!0}:{ok:!1,reason:`${X} is no longer there.`,step:"app"}:{ok:!1,reason:"No app is selected.",step:"app"}},[]),de=(0,J.useCallback)(()=>{++me.current,zt.current=null,r("idle"),g([]),p([]),c([]),_(null),B(null),q(null),z(null),ee(null),st.current=null,te.current=null,K.current=null,pe.current=null,s.current=null,u.current=null},[]),Te=(0,J.useCallback)(()=>{let P=zt.current,L=()=>{if(!P)return!1;let Y=P.target?nn(P.target.platform):null;return te.current=P.target??null,K.current=Y??null,s.current=P.appPath??null,st.current=P,i.current=P.savedKind,o(P.savedKind),z(P.target??null),ee(P),_(null),B(null),r("confirm"),!0};switch(t){case"picking":B(null),r("chooser");return;case"appSource":if(B(null),L())return;if(te.current){Oe(te.current,s.current);return}r("chooser");return;case"apps":case"appList":case"appId":B(null),_(null),r("appSource");return;case"chooser":if(L())return;Rt.current();return;default:Rt.current()}},[t,Oe]),dt=(0,J.useCallback)(()=>{let P=He.current;if(P){let L=ge.current.getDefaults();ge.current.setDefaults({...L,tui_target:P}),He.current=null}de()},[de]);return Rt.current=dt,{phase:t,kind:n,selectKind:Yt,checks:f,targets:w,apps:x,busyMessage:m,error:U,device:F,target:$,saved:ae,begin:mr,recheck:Cr,install:Kr,cancel:dt,back:Te,selectTarget:Er,confirmSaved:gr,requestApp:hr,requestAppSource:vr,requestCloudApps:Tt,requestAppId:br,selectApp:Q,selectAppId:Ir,skipApp:ue,bindAppForRun:ce,validateBinding:ie,reset:de}}var mn=D(Ie(),1);function Hu(e){let{phase:t,device:r,requestApp:n,pendingRef:o,dispatch:i,notify:s,onSettle:u}=e,f=(0,mn.useRef)(null),g=(0,mn.useRef)(!1);(0,mn.useEffect)(()=>{let w=o.current;if(!w){f.current=null,g.current=!1;return}if(t!=="idle"&&(g.current=!0),t==="ready"&&r){if(r.app_package){o.current=null,f.current=null,g.current=!1,u?.(),i(w);return}f.current!=="apps"&&(f.current="apps",n());return}if(f.current!==t){if(t==="doctor"){f.current="doctor",s({type:"error",text:`Mobile setup is blocked, so "${w}" has not run. Install the managed tooling from the panel (i, then i again to confirm), or press Esc to cancel.`});return}if(t==="idle"){if(!g.current)return;o.current=null,f.current=null,g.current=!1,u?.(),s({type:"info",text:`Mobile setup cancelled \u2014 "${w}" was not run.`})}}},[t,r,n,o,i,s,u])}import{stat as Nh}from"fs/promises";async function Gu(e){let t=e.statFile??Nh,r="";if(!Rr(e.app))try{let n=await t(e.app);r=`${n.mtimeMs}:${n.size}`}catch{return null}return[e.udid,e.app,r,String(e.runnerGen)].join("\0")}function Wu(e){let t=/(^|\s)@(?:"([^"]+)"|(\S+))/g,r=null;return{objective:e.replace(t,(o,i,s,u)=>(r=s??u??null,i)).replace(/\s+/g," ").trim(),token:r}}import{readFile as zu,readdir as jh,stat as Vh}from"fs/promises";import{extname as Ku,join as Yu,relative as Fh}from"path";var Uh=new Set(["node_modules",".git"]),qh=new Set([".apk",".zip",".apks",".aab",".ipa",".app"]);function Ju(e){return e.state!=="incompatible"}var Xu=new Map;function Hh(e,t){return`${e}\0${t?.platform??""}\0${t?.androidApiLevel??""}\0${t?.androidAbis?.join(",")??""}`}function Gh(e){let t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:void 0}function Wh(e){let t=new Set;return oa(e,{filter:r=>{let n=/^lib\/([^/]+)\//.exec(r.name);return n?.[1]&&t.add(n[1]),!1}}),[...t].sort()}async function Qu(e,t,r={}){let n=r.limit??50,o=r.maxDepth??6,i=t.toLowerCase(),s=[];async function u(f,g){if(s.length>=n||g>o)return;let w;try{w=await jh(f,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||Uh.has(p.name)||p.name.startsWith("output-"))continue;let x=Yu(f,p.name),c=Ku(p.name).toLowerCase();if(qh.has(c)&&(p.isFile()||c===".app"&&p.isDirectory())){let _=Fh(e,x);(!i||_.toLowerCase().includes(i))&&s.push(_);continue}p.isDirectory()&&await u(x,g+1)}}return await u(e,0),s}async function Zu(e,t){let r;try{r=(await Vh(e)).mtimeMs}catch{}let n=Hh(e,t),o=r===void 0?void 0:Xu.get(n);if(o&&o.mtimeMs===r)return o.result;let i=u=>(r!==void 0&&Xu.set(n,{mtimeMs:r,result:u}),u),s=Ku(e).toLowerCase();if(!t)return i({state:"unverified",reason:"Choose a device to verify compatibility"});if(t.platform==="android"){if(s===".aab")return i({state:"incompatible",reason:"app bundle \u2014 build an .apk instead"});if(s===".apks")return i({state:"incompatible",reason:"split bundles are not supported \u2014 build an .apk"});if(s===".app"||s===".ipa"||s===".zip")return i({state:"incompatible",reason:"iOS artifact"});if(s!==".apk")return i({state:"unverified",reason:"Unknown artifact type"});try{let{default:u}=await import("./adbkit-apkreader-ORZBGCJQ.js"),g=await(await u.open(e)).readManifest();if(!g?.package)return i({state:"unverified",reason:"APK manifest has no package id"});let w=Gh(g.usesSdk?.minSdkVersion);if(w!==void 0&&t.androidApiLevel!==void 0&&w>t.androidApiLevel)return i({state:"incompatible",reason:`requires Android API ${w}; ${t.displayName} is API ${t.androidApiLevel}`});let p=Wh(new Uint8Array(await zu(e)));if(p.length>0){if(!t.androidAbis||t.androidAbis.length===0)return i({state:"unverified",reason:`APK native ABI (${p.join(", ")}) could not be compared with this device`});if(!p.some(x=>t.androidAbis.includes(x)))return i({state:"incompatible",reason:`APK supports ${p.join(", ")}; device supports ${t.androidAbis.join(", ")}`})}return i({state:"compatible"})}catch(u){return i({state:"unverified",reason:`Could not read APK manifest: ${u instanceof Error?u.message:String(u)}`})}}if(s===".apk"||s===".aab"||s===".apks")return i({state:"incompatible",reason:"Android artifact"});if(s===".ipa")return i({state:"incompatible",reason:"an .ipa cannot be installed on a simulator \u2014 use a .zip"});if(s===".app")try{let u=await zh(Yu(e,"Info.plist")),f=Array.isArray(u.CFBundleSupportedPlatforms)?u.CFBundleSupportedPlatforms.filter(w=>typeof w=="string"):void 0;if(f&&t.kind==="simulator"&&!f.includes("iPhoneSimulator"))return i({state:"incompatible",reason:`device build (${f.join(", ")}) \u2014 build for the simulator`});let g=typeof u.MinimumOSVersion=="string"?u.MinimumOSVersion:void 0;return g&&t.osVersion&&Xh(g,t.osVersion)>0?i({state:"incompatible",reason:`requires iOS ${g}; ${t.displayName} runs iOS ${t.osVersion}`}):i({state:"incompatible",reason:"zip this bundle and use the .zip"})}catch(u){return i({state:"unverified",reason:`Could not read the app bundle: ${u instanceof Error?u.message:String(u)}`})}return i({state:"unverified",reason:"Unknown artifact type"})}function Xh(e,t){let r=e.split(".").map(o=>Number(o)||0),n=t.split(".").map(o=>Number(o)||0);for(let o=0;o<Math.max(r.length,n.length);o++){let i=(r[o]??0)-(n[o]??0);if(i!==0)return i}return 0}async function zh(e){let r=(await zu(e)).toString("utf8");if(!r.startsWith("bplist"))try{return JSON.parse(r)}catch{}let{runExec:n}=await import("./exec-P2IKJRRR.js"),o=await n("plutil",["-convert","json","-o","-",e],{timeoutMs:15e3});if(o.code!==0)throw new Error(o.stderr.trim()||`plutil exited ${o.code}`);return JSON.parse(o.stdout)}var wo=D(Ie(),1);function ed(e){let t=(0,wo.useRef)(e);return t.current=e,(0,wo.useCallback)(async r=>{let{auth:n,env:o,kind:i,baseUrlFor:s,makeClient:u}=t.current,f=i();if(!f)throw new Error("Pick a device before browsing your uploads.");let w=await n.resolveBasicAuth().catch(()=>null)??n.getResolvedBasicAuth();if(!w?.username||!w.access_key)throw new Error("Log in to browse your uploads, or choose a local build.");let p=s?s(o):sn(o);return(u?u(p,{username:w.username,accessKey:w.access_key}):new da(p,{username:w.username,accessKey:w.access_key})).list({type:f,...r})},[])}var gn=D(H(),1);function td({suggested:e,sessionTargetLabel:t,appHint:r,savedDeviceName:n,onAccept:o,onPickDevice:i,onKeep:s,onCancel:u}){Be((w,p)=>{if(p.escape){u();return}if(p.return){o();return}if(e==="mobile"&&w==="p"){i?.();return}w==="k"&&s()});let f=e==="mobile"?`This looks like a mobile test${r?` (${r})`:""}.`:"This looks like a web test.",g=e==="mobile"?n?`run on ${n} (saved)`:"set up a device":"run on Desktop";return(0,gn.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,children:[(0,gn.jsx)(a,{color:l.orange,children:f}),(0,gn.jsxs)(a,{color:l.dim,children:[` \u21B5 ${g}`,e==="mobile"?" p pick a device":"",` k keep ${t}`," esc cancel"]})]})}async function rd(e){let t=e.cache?.get(e.objective);if(t)return t;let r=e.fetchImpl??fetch,n=new AbortController,o=setTimeout(()=>n.abort(),e.timeoutMs??3e3);try{let i=await r(`${e.controllerBaseUrl}/classify-intent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e.authHeader},body:JSON.stringify({objective:e.objective,session_target:e.sessionTarget}),signal:n.signal});if(!i.ok)return null;let s=Kh(await i.json());return s&&e.cache?.set(e.objective,s),s}catch{return null}finally{clearTimeout(o)}}function Kh(e){if(typeof e!="object"||e===null)return null;let t=e,r=t.target;if(r!=="web"&&r!=="mobile"&&r!=="ambiguous"||typeof t.confidence!="number"||!Number.isFinite(t.confidence))return null;let n={target:r,confidence:Math.min(1,Math.max(0,t.confidence))};return(t.platform==="android"||t.platform==="ios")&&(n.platform=t.platform),typeof t.app_hint=="string"&&t.app_hint.trim()!==""&&(n.appHint=t.app_hint.trim()),n}function nd(e,t){return e?e.target==="ambiguous"||e.target===t?{kind:"proceed"}:e.confidence<.8?{kind:"proceed"}:{kind:"mismatch",suggested:e.target,verdict:e}:{kind:"proceed"}}var od=D(Ie(),1);var Ue=D(H(),1),Yh={pass:"\u2713",fail:"\u2717",info:"\u2139"},Jh={pass:l.green,fail:l.red,info:l.secondary};function id({checks:e,busyMessage:t,onRetry:r,onInstall:n,onCancel:o}){let[i,s]=(0,od.useState)(!1);Be((x,c)=>{if(c.escape){o();return}(x==="r"||x==="R")&&r(),(x==="i"||x==="I")&&(i?n():s(!0))});let u=e.filter(x=>x.required&&x.status==="fail").length,f=e.filter(x=>x.status!=="info"),g=new Map;for(let x of f)x.status==="fail"&&x.fixText&&!g.has(x.fixText)&&g.set(x.fixText,x.id);let p=["emulator",...process.platform==="darwin"?["simulator"]:[]].map(x=>`\u2022 kaneai-mobile-deps ${x}
2
+ import{a as pi,b as Hs}from"./chunk-3MSXQU2C.js";import{a as xa,b as ya,c as Sa,d as Xa,e as za}from"./chunk-BZCVLCMG.js";import{a as Oc}from"./chunk-RP7FW23G.js";import{a as xc,b as Ai,c as Zn,d as yc,e as eo,f as Sc,h as wc,i as Rc,j as Tc,k as kc,l as Cc,m as qt,n as Ec,o as Ic,p as Ac,q as to,r as _c,s as _i,t as Pc,u as Dc,v as Lc}from"./chunk-NDKHC6KL.js";import{b as Bc,c as $c}from"./chunk-SU3QKERU.js";import{A as Ii,B as fc,C as pc,D as mc,E as gc,H as Ut,K as bc,a as sn,b as wa,c as Ra,e as Ia,f as Aa,g as _a,h as Va,i as Fa,j as Ua,k as Yn,l as Ga,n as Ci,o as nc,p as Ei,r as oc,s as ic,t as sc,u as ac,v as cc,x as lc,y as uc,z as dc}from"./chunk-I5KYZHJ5.js";import{c as Ja,d as Qa,n as vc}from"./chunk-724NYDMU.js";import{a as Mc,b as Pi}from"./chunk-OSRRMY6M.js";import{b as Ya,r as Za}from"./chunk-WHEWZR2C.js";import{c as rc}from"./chunk-SXUQBPQ6.js";import{a as Qn}from"./chunk-YUA2VDWH.js";import{c as hc}from"./chunk-XIGTZTFP.js";import{a as ja}from"./chunk-YXPWGIQ2.js";import{E as La,K as Ba,L as Ti,M as $a,N as Oa}from"./chunk-TGPI7VDR.js";import{c as Ma,e as Na}from"./chunk-HNNVVK2O.js";import{a as Gs,b as mi,c as ur,d as Gn,e as qa,f as Ha}from"./chunk-QJNQN6ND.js";import{a as Wa}from"./chunk-W7PBJXLJ.js";import{c as Kn}from"./chunk-WAWMIKSI.js";import{a as zs,b as bi,c as Ks,d as Da,e as Ka,g as ec}from"./chunk-AWEUKXZQ.js";import{e as Pa}from"./chunk-47OUD76M.js";import{a as Vr}from"./chunk-2ULZVQZV.js";import{a as Jn,b as tc,c as ki}from"./chunk-SAFETUCL.js";import{a as gi}from"./chunk-5Y2G4NC7.js";import{a as Ea}from"./chunk-2BIPFAGX.js";import{a as ra,b as Or,c as Ri,d as ma,g as ga,h as ha,i as ba,j as va}from"./chunk-LKUWEQ5M.js";import{c as aa,e as ca,g as la}from"./chunk-HE3ZKFRC.js";import{b as Nr}from"./chunk-BQSLPF5M.js";import{b as jr}from"./chunk-ML2E3JGK.js";import{h as ka}from"./chunk-BG2AZQLI.js";import{a as an}from"./chunk-BPMSNGXQ.js";import{a as Ct,b as $t,c as Ta}from"./chunk-VE3SUJMA.js";import{a as Ca}from"./chunk-RSNG5PBN.js";import{a as wi,d as nn,e as Xn}from"./chunk-XTUSDGAB.js";import{j as Si}from"./chunk-6S3Z3WPF.js";import{d as oa}from"./chunk-MSGW4JDG.js";import{a as zn,b as Rr}from"./chunk-TZXXJWHA.js";import{j as ua,n as Ft,o as on,p as dr,r as Mr}from"./chunk-RSSOJ3L2.js";import{a as fa,b as Tr,c as pa}from"./chunk-LTNMOEHT.js";import{h as da}from"./chunk-TAOHYWEO.js";import{b as vi}from"./chunk-NYSFEZUR.js";import{c as xi}from"./chunk-HXSOZWFL.js";import{a as Vt}from"./chunk-KUAFVRSR.js";import{a as Ys,e as Js,f as Wn,g as Qs,h as Zs,i as ea,j as ta}from"./chunk-Z7S3IWUX.js";import{a as sa}from"./chunk-ESHDTCSZ.js";import{a as ia}from"./chunk-B4CYIZP5.js";import{a as Ge}from"./chunk-FOP6CJAM.js";import{a as yi}from"./chunk-NLCCBXXV.js";import{a as na}from"./chunk-RZ4F3BHX.js";import{a as Us,d as Jt,e as rn}from"./chunk-EYOCNMUM.js";import{a as Hn}from"./chunk-BUM367KV.js";import{a as hi}from"./chunk-ZFZB4CGJ.js";import{a as Qt,b as Ws}from"./chunk-LUTRUSIV.js";import{a as xt,b as mt,j as di,n as qs,o as fi,x as l}from"./chunk-WEJA3EVI.js";import{b as Xs}from"./chunk-DFS4RMVP.js";import{a as H}from"./chunk-HCBYKLMW.js";import{a as b,b as a,i as Be,j as Fs,k as $r}from"./chunk-C44QQJR4.js";import{a as Ie}from"./chunk-6YGTRKDT.js";import{c as oe,e as D}from"./chunk-UR6MHSHU.js";var Ur=oe((Av,Vc)=>{"use strict";var fp="2.0.0",pp=Number.MAX_SAFE_INTEGER||9007199254740991,mp=16,gp=250,hp=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Vc.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:mp,MAX_SAFE_BUILD_LENGTH:gp,MAX_SAFE_INTEGER:pp,RELEASE_TYPES:hp,SEMVER_SPEC_VERSION:fp,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var cn=oe((_v,Fc)=>{"use strict";var bp=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};Fc.exports=bp});var qr=oe((Ht,Uc)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Di,MAX_SAFE_BUILD_LENGTH:vp,MAX_LENGTH:xp}=Ur(),yp=cn();Ht=Uc.exports={};var Sp=Ht.re=[],wp=Ht.safeRe=[],G=Ht.src=[],Rp=Ht.safeSrc=[],W=Ht.t={},Tp=0,Li="[a-zA-Z0-9-]",kp=[["\\s",1],["\\d",xp],[Li,vp]],Cp=e=>{for(let[t,r]of kp)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},se=(e,t,r)=>{let n=Cp(t),o=Tp++;yp(e,o,t),W[e]=o,G[o]=t,Rp[o]=n,Sp[o]=new RegExp(t,r?"g":void 0),wp[o]=new RegExp(n,r?"g":void 0)};se("NUMERICIDENTIFIER","0|[1-9]\\d*");se("NUMERICIDENTIFIERLOOSE","\\d+");se("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Li}*`);se("MAINVERSION",`(${G[W.NUMERICIDENTIFIER]})\\.(${G[W.NUMERICIDENTIFIER]})\\.(${G[W.NUMERICIDENTIFIER]})`);se("MAINVERSIONLOOSE",`(${G[W.NUMERICIDENTIFIERLOOSE]})\\.(${G[W.NUMERICIDENTIFIERLOOSE]})\\.(${G[W.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASEIDENTIFIER",`(?:${G[W.NONNUMERICIDENTIFIER]}|${G[W.NUMERICIDENTIFIER]})`);se("PRERELEASEIDENTIFIERLOOSE",`(?:${G[W.NONNUMERICIDENTIFIER]}|${G[W.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASE",`(?:-(${G[W.PRERELEASEIDENTIFIER]}(?:\\.${G[W.PRERELEASEIDENTIFIER]})*))`);se("PRERELEASELOOSE",`(?:-?(${G[W.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${G[W.PRERELEASEIDENTIFIERLOOSE]})*))`);se("BUILDIDENTIFIER",`${Li}+`);se("BUILD",`(?:\\+(${G[W.BUILDIDENTIFIER]}(?:\\.${G[W.BUILDIDENTIFIER]})*))`);se("FULLPLAIN",`v?${G[W.MAINVERSION]}${G[W.PRERELEASE]}?${G[W.BUILD]}?`);se("FULL",`^${G[W.FULLPLAIN]}$`);se("LOOSEPLAIN",`[v=\\s]*${G[W.MAINVERSIONLOOSE]}${G[W.PRERELEASELOOSE]}?${G[W.BUILD]}?`);se("LOOSE",`^${G[W.LOOSEPLAIN]}$`);se("GTLT","((?:<|>)?=?)");se("XRANGEIDENTIFIERLOOSE",`${G[W.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);se("XRANGEIDENTIFIER",`${G[W.NUMERICIDENTIFIER]}|x|X|\\*`);se("XRANGEPLAIN",`[v=\\s]*(${G[W.XRANGEIDENTIFIER]})(?:\\.(${G[W.XRANGEIDENTIFIER]})(?:\\.(${G[W.XRANGEIDENTIFIER]})(?:${G[W.PRERELEASE]})?${G[W.BUILD]}?)?)?`);se("XRANGEPLAINLOOSE",`[v=\\s]*(${G[W.XRANGEIDENTIFIERLOOSE]})(?:\\.(${G[W.XRANGEIDENTIFIERLOOSE]})(?:\\.(${G[W.XRANGEIDENTIFIERLOOSE]})(?:${G[W.PRERELEASELOOSE]})?${G[W.BUILD]}?)?)?`);se("XRANGE",`^${G[W.GTLT]}\\s*${G[W.XRANGEPLAIN]}$`);se("XRANGELOOSE",`^${G[W.GTLT]}\\s*${G[W.XRANGEPLAINLOOSE]}$`);se("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Di}})(?:\\.(\\d{1,${Di}}))?(?:\\.(\\d{1,${Di}}))?`);se("COERCE",`${G[W.COERCEPLAIN]}(?:$|[^\\d])`);se("COERCEFULL",G[W.COERCEPLAIN]+`(?:${G[W.PRERELEASE]})?(?:${G[W.BUILD]})?(?:$|[^\\d])`);se("COERCERTL",G[W.COERCE],!0);se("COERCERTLFULL",G[W.COERCEFULL],!0);se("LONETILDE","(?:~>?)");se("TILDETRIM",`(\\s*)${G[W.LONETILDE]}\\s+`,!0);Ht.tildeTrimReplace="$1~";se("TILDE",`^${G[W.LONETILDE]}${G[W.XRANGEPLAIN]}$`);se("TILDELOOSE",`^${G[W.LONETILDE]}${G[W.XRANGEPLAINLOOSE]}$`);se("LONECARET","(?:\\^)");se("CARETTRIM",`(\\s*)${G[W.LONECARET]}\\s+`,!0);Ht.caretTrimReplace="$1^";se("CARET",`^${G[W.LONECARET]}${G[W.XRANGEPLAIN]}$`);se("CARETLOOSE",`^${G[W.LONECARET]}${G[W.XRANGEPLAINLOOSE]}$`);se("COMPARATORLOOSE",`^${G[W.GTLT]}\\s*(${G[W.LOOSEPLAIN]})$|^$`);se("COMPARATOR",`^${G[W.GTLT]}\\s*(${G[W.FULLPLAIN]})$|^$`);se("COMPARATORTRIM",`(\\s*)${G[W.GTLT]}\\s*(${G[W.LOOSEPLAIN]}|${G[W.XRANGEPLAIN]})`,!0);Ht.comparatorTrimReplace="$1$2$3";se("HYPHENRANGE",`^\\s*(${G[W.XRANGEPLAIN]})\\s+-\\s+(${G[W.XRANGEPLAIN]})\\s*$`);se("HYPHENRANGELOOSE",`^\\s*(${G[W.XRANGEPLAINLOOSE]})\\s+-\\s+(${G[W.XRANGEPLAINLOOSE]})\\s*$`);se("STAR","(<|>)?=?\\s*\\*");se("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");se("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var ro=oe((Pv,qc)=>{"use strict";var Ep=Object.freeze({loose:!0}),Ip=Object.freeze({}),Ap=e=>e?typeof e!="object"?Ep:e:Ip;qc.exports=Ap});var Bi=oe((Dv,Wc)=>{"use strict";var Hc=/^[0-9]+$/,Gc=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Hc.test(e),n=Hc.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},_p=(e,t)=>Gc(t,e);Wc.exports={compareIdentifiers:Gc,rcompareIdentifiers:_p}});var et=oe((Lv,zc)=>{"use strict";var no=cn(),{MAX_LENGTH:Xc,MAX_SAFE_INTEGER:oo}=Ur(),{safeRe:io,t:so}=qr(),Pp=ro(),{compareIdentifiers:$i}=Bi(),Dp=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if($i(e[n],r[n])!==0)return!1;return!0},Oi=class e{constructor(t,r){if(r=Pp(r),t instanceof e){if(t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease)return t;t=t.version}else if(typeof t!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>Xc)throw new TypeError(`version is longer than ${Xc} characters`);no("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?io[so.LOOSE]:io[so.FULL]);if(!n)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>oo||this.major<0)throw new TypeError("Invalid major version");if(this.minor>oo||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>oo||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(o=>{if(/^[0-9]+$/.test(o)){let i=+o;if(i>=0&&i<oo)return i}return o}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if(no("SemVer.compare",this.version,this.options,t),!(t instanceof e)){if(typeof t=="string"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),this.major<t.major?-1:this.major>t.major?1:this.minor<t.minor?-1:this.minor>t.minor?1:this.patch<t.patch?-1:this.patch>t.patch?1:0}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{let n=this.prerelease[r],o=t.prerelease[r];if(no("prerelease compare",r,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return $i(n,o)}while(++r)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let r=0;do{let n=this.build[r],o=t.build[r];if(no("build compare",r,n,o),n===void 0&&o===void 0)return 0;if(o===void 0)return 1;if(n===void 0)return-1;if(n===o)continue;return $i(n,o)}while(++r)}inc(t,r,n){if(t.startsWith("pre")){if(!r&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let o=`-${r}`.match(this.options.loose?io[so.PRERELEASELOOSE]:io[so.PRERELEASE]);if(!o||o[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let o=Number(n)?1:0;if(this.prerelease.length===0)this.prerelease=[o];else{let i=this.prerelease.length;for(;--i>=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);if(i===-1){if(r===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(o)}}if(r){let i=[r,o];if(n===!1&&(i=[r]),Dp(this.prerelease,r)){let s=this.prerelease[r.split(".").length];isNaN(s)&&(this.prerelease=i)}else this.prerelease=i}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};zc.exports=Oi});var fr=oe((Bv,Yc)=>{"use strict";var Kc=et(),Lp=(e,t,r=!1)=>{if(e instanceof Kc)return e;try{return new Kc(e,t)}catch(n){if(!r)return null;throw n}};Yc.exports=Lp});var Qc=oe(($v,Jc)=>{"use strict";var Bp=fr(),$p=(e,t)=>{let r=Bp(e,t);return r?r.version:null};Jc.exports=$p});var el=oe((Ov,Zc)=>{"use strict";var Op=fr(),Mp=(e,t)=>{let r=Op(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};Zc.exports=Mp});var nl=oe((Mv,rl)=>{"use strict";var tl=et(),Np=(e,t,r,n,o)=>{typeof r=="string"&&(o=n,n=r,r=void 0);try{return new tl(e instanceof tl?e.version:e,r).inc(t,n,o).version}catch{return null}};rl.exports=Np});var sl=oe((Nv,il)=>{"use strict";var ol=fr(),jp=(e,t)=>{let r=ol(e,null,!0),n=ol(t,null,!0),o=r.compare(n);if(o===0)return null;let i=o>0,s=i?r:n,u=i?n:r,f=!!s.prerelease.length;if(!!u.prerelease.length&&!f){if(!u.patch&&!u.minor)return"major";if(u.compareMain(s)===0)return u.minor&&!u.patch?"minor":"patch"}let w=f?"pre":"";return r.major!==n.major?w+"major":r.minor!==n.minor?w+"minor":r.patch!==n.patch?w+"patch":"prerelease"};il.exports=jp});var cl=oe((jv,al)=>{"use strict";var Vp=et(),Fp=(e,t)=>new Vp(e,t).major;al.exports=Fp});var ul=oe((Vv,ll)=>{"use strict";var Up=et(),qp=(e,t)=>new Up(e,t).minor;ll.exports=qp});var fl=oe((Fv,dl)=>{"use strict";var Hp=et(),Gp=(e,t)=>new Hp(e,t).patch;dl.exports=Gp});var ml=oe((Uv,pl)=>{"use strict";var Wp=fr(),Xp=(e,t)=>{let r=Wp(e,t);return r&&r.prerelease.length?r.prerelease:null};pl.exports=Xp});var Et=oe((qv,hl)=>{"use strict";var gl=et(),zp=(e,t,r)=>new gl(e,r).compare(new gl(t,r));hl.exports=zp});var vl=oe((Hv,bl)=>{"use strict";var Kp=Et(),Yp=(e,t,r)=>Kp(t,e,r);bl.exports=Yp});var yl=oe((Gv,xl)=>{"use strict";var Jp=Et(),Qp=(e,t)=>Jp(e,t,!0);xl.exports=Qp});var ao=oe((Wv,wl)=>{"use strict";var Sl=et(),Zp=(e,t,r)=>{let n=new Sl(e,r),o=new Sl(t,r);return n.compare(o)||n.compareBuild(o)};wl.exports=Zp});var Tl=oe((Xv,Rl)=>{"use strict";var em=ao(),tm=(e,t)=>e.sort((r,n)=>em(r,n,t));Rl.exports=tm});var Cl=oe((zv,kl)=>{"use strict";var rm=ao(),nm=(e,t)=>e.sort((r,n)=>rm(n,r,t));kl.exports=nm});var ln=oe((Kv,El)=>{"use strict";var om=Et(),im=(e,t,r)=>om(e,t,r)>0;El.exports=im});var co=oe((Yv,Il)=>{"use strict";var sm=Et(),am=(e,t,r)=>sm(e,t,r)<0;Il.exports=am});var Mi=oe((Jv,Al)=>{"use strict";var cm=Et(),lm=(e,t,r)=>cm(e,t,r)===0;Al.exports=lm});var Ni=oe((Qv,_l)=>{"use strict";var um=Et(),dm=(e,t,r)=>um(e,t,r)!==0;_l.exports=dm});var lo=oe((Zv,Pl)=>{"use strict";var fm=Et(),pm=(e,t,r)=>fm(e,t,r)>=0;Pl.exports=pm});var uo=oe((ex,Dl)=>{"use strict";var mm=Et(),gm=(e,t,r)=>mm(e,t,r)<=0;Dl.exports=gm});var ji=oe((tx,Ll)=>{"use strict";var hm=Mi(),bm=Ni(),vm=ln(),xm=lo(),ym=co(),Sm=uo(),wm=(e,t,r,n)=>{switch(t){case"===":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e===r;case"!==":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e!==r;case"":case"=":case"==":return hm(e,r,n);case"!=":return bm(e,r,n);case">":return vm(e,r,n);case">=":return xm(e,r,n);case"<":return ym(e,r,n);case"<=":return Sm(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Ll.exports=wm});var $l=oe((rx,Bl)=>{"use strict";var Rm=et(),Tm=fr(),{safeRe:fo,t:po}=qr(),km=(e,t)=>{if(e instanceof Rm)return e;if(typeof e=="number"&&(e=String(e)),typeof e!="string")return null;t=t||{};let r=null;if(!t.rtl)r=e.match(t.includePrerelease?fo[po.COERCEFULL]:fo[po.COERCE]);else{let f=t.includePrerelease?fo[po.COERCERTLFULL]:fo[po.COERCERTL],g;for(;(g=f.exec(e))&&(!r||r.index+r[0].length!==e.length);)(!r||g.index+g[0].length!==r.index+r[0].length)&&(r=g),f.lastIndex=g.index+g[1].length+g[2].length;f.lastIndex=-1}if(r===null)return null;let n=r[2],o=r[3]||"0",i=r[4]||"0",s=t.includePrerelease&&r[5]?`-${r[5]}`:"",u=t.includePrerelease&&r[6]?`+${r[6]}`:"";return Tm(`${n}.${o}.${i}${s}${u}`,t)};Bl.exports=km});var Ml=oe((nx,Ol)=>{"use strict";var Cm=fr(),Em=Ur(),Im=et(),Am=(e,t,r)=>{if(!Em.RELEASE_TYPES.includes(t))return null;let n=_m(e,r);return n&&Pm(n,t)},_m=(e,t)=>{let r=e instanceof Im?e.version:e;return Cm(r,t)},Pm=(e,t)=>{if(Dm(t))return e.version;switch(e.prerelease=[],t){case"major":e.minor=0,e.patch=0;break;case"minor":e.patch=0;break}return e.format()},Dm=e=>e.startsWith("pre");Ol.exports=Am});var jl=oe((ox,Nl)=>{"use strict";var Vi=class{constructor(){this.max=1e3,this.map=new Map}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}delete(t){return this.map.delete(t)}set(t,r){if(!this.delete(t)&&r!==void 0){if(this.map.size>=this.max){let o=this.map.keys().next().value;this.delete(o)}this.map.set(t,r)}return this}};Nl.exports=Vi});var It=oe((ix,ql)=>{"use strict";var Lm=/\s+/g,Fi=class e{constructor(t,r){if(r=$m(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof Ui)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=t.trim().replace(Lm," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(o=>!Fl(o[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let o of this.set)if(o.length===1&&Hm(o[0])){this.set=[o];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+="||");let r=this.set[t];for(let n=0;n<r.length;n++)n>0&&(this.formatted+=" "),this.formatted+=r[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){t=t.replace(qm,"");let n=((this.options.includePrerelease&&Fm)|(this.options.loose&&Um))+":"+t,o=Vl.get(n);if(o)return o;let i=this.options.loose,s=i?gt[tt.HYPHENRANGELOOSE]:gt[tt.HYPHENRANGE];t=t.replace(s,tg(this.options.includePrerelease)),De("hyphen replace",t),t=t.replace(gt[tt.COMPARATORTRIM],Nm),De("comparator trim",t),t=t.replace(gt[tt.TILDETRIM],jm),De("tilde trim",t),t=t.replace(gt[tt.CARETTRIM],Vm),De("caret trim",t);let u=t.split(" ").map(p=>Gm(p,this.options)).join(" ").split(/\s+/).map(p=>eg(p,this.options));i&&(u=u.filter(p=>(De("loose invalid filter",p,this.options),!!p.match(gt[tt.COMPARATORLOOSE])))),De("range list",u);let f=new Map,g=u.map(p=>new Ui(p,this.options));for(let p of g){if(Fl(p))return[p];f.set(p.value,p)}f.size>1&&f.has("")&&f.delete("");let w=[...f.values()];return Vl.set(n,w),w}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Ul(n,r)&&t.set.some(o=>Ul(o,r)&&n.every(i=>o.every(s=>i.intersects(s,r)))))}test(t){if(!t)return!1;if(typeof t=="string")try{t=new Om(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(rg(this.set[r],t,this.options))return!0;return!1}};ql.exports=Fi;var Bm=jl(),Vl=new Bm,$m=ro(),Ui=un(),De=cn(),Om=et(),{safeRe:gt,src:Mm,t:tt,comparatorTrimReplace:Nm,tildeTrimReplace:jm,caretTrimReplace:Vm}=qr(),{FLAG_INCLUDE_PRERELEASE:Fm,FLAG_LOOSE:Um}=Ur(),qm=new RegExp(Mm[tt.BUILD],"g"),Fl=e=>e.value==="<0.0.0-0",Hm=e=>e.value==="",Ul=(e,t)=>{let r=!0,n=e.slice(),o=n.pop();for(;r&&n.length;)r=n.every(i=>o.intersects(i,t)),o=n.pop();return r},Gm=(e,t)=>(e=e.replace(gt[tt.BUILD],""),De("comp",e,t),e=Km(e,t),De("caret",e),e=Xm(e,t),De("tildes",e),e=Jm(e,t),De("xrange",e),e=Zm(e,t),De("stars",e),e),qe=e=>!e||e.toLowerCase()==="x"||e==="*",Wm=(e,t,r)=>qe(e)&&!qe(t)||qe(t)&&r&&!qe(r),Xm=(e,t)=>e.trim().split(/\s+/).map(r=>zm(r,t)).join(" "),zm=(e,t)=>{let r=t.loose?gt[tt.TILDELOOSE]:gt[tt.TILDE];return e.replace(r,(n,o,i,s,u)=>{De("tilde",e,n,o,i,s,u);let f;return qe(o)?f="":qe(i)?f=`>=${o}.0.0 <${+o+1}.0.0-0`:qe(s)?f=`>=${o}.${i}.0 <${o}.${+i+1}.0-0`:u?(De("replaceTilde pr",u),f=`>=${o}.${i}.${s}-${u} <${o}.${+i+1}.0-0`):f=`>=${o}.${i}.${s} <${o}.${+i+1}.0-0`,De("tilde return",f),f})},Km=(e,t)=>e.trim().split(/\s+/).map(r=>Ym(r,t)).join(" "),Ym=(e,t)=>{De("caret",e,t);let r=t.loose?gt[tt.CARETLOOSE]:gt[tt.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,(o,i,s,u,f)=>{De("caret",e,o,i,s,u,f);let g;return qe(i)?g="":qe(s)?g=`>=${i}.0.0${n} <${+i+1}.0.0-0`:qe(u)?i==="0"?g=`>=${i}.${s}.0${n} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.0${n} <${+i+1}.0.0-0`:f?(De("replaceCaret pr",f),i==="0"?s==="0"?g=`>=${i}.${s}.${u}-${f} <${i}.${s}.${+u+1}-0`:g=`>=${i}.${s}.${u}-${f} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.${u}-${f} <${+i+1}.0.0-0`):(De("no pr"),i==="0"?s==="0"?g=`>=${i}.${s}.${u} <${i}.${s}.${+u+1}-0`:g=`>=${i}.${s}.${u} <${i}.${+s+1}.0-0`:g=`>=${i}.${s}.${u} <${+i+1}.0.0-0`),De("caret return",g),g})},Jm=(e,t)=>(De("replaceXRanges",e,t),e.split(/\s+/).map(r=>Qm(r,t)).join(" ")),Qm=(e,t)=>{e=e.trim();let r=t.loose?gt[tt.XRANGELOOSE]:gt[tt.XRANGE];return e.replace(r,(n,o,i,s,u,f)=>{if(De("xRange",e,n,o,i,s,u,f),Wm(i,s,u))return e;let g=qe(i),w=g||qe(s),p=w||qe(u),x=p;return o==="="&&x&&(o=""),f=t.includePrerelease?"-0":"",g?o===">"||o==="<"?n="<0.0.0-0":n="*":o&&x?(w&&(s=0),u=0,o===">"?(o=">=",w?(i=+i+1,s=0,u=0):(s=+s+1,u=0)):o==="<="&&(o="<",w?i=+i+1:s=+s+1),o==="<"&&(f="-0"),n=`${o+i}.${s}.${u}${f}`):w?n=`>=${i}.0.0${f} <${+i+1}.0.0-0`:p&&(n=`>=${i}.${s}.0${f} <${i}.${+s+1}.0-0`),De("xRange return",n),n})},Zm=(e,t)=>(De("replaceStars",e,t),e.trim().replace(gt[tt.STAR],"")),eg=(e,t)=>(De("replaceGTE0",e,t),e.trim().replace(gt[t.includePrerelease?tt.GTE0PRE:tt.GTE0],"")),tg=e=>(t,r,n,o,i,s,u,f,g,w,p,x)=>(qe(n)?r="":qe(o)?r=`>=${n}.0.0${e?"-0":""}`:qe(i)?r=`>=${n}.${o}.0${e?"-0":""}`:s?r=`>=${r}`:r=`>=${r}${e?"-0":""}`,qe(g)?f="":qe(w)?f=`<${+g+1}.0.0-0`:qe(p)?f=`<${g}.${+w+1}.0-0`:x?f=`<=${g}.${w}.${p}-${x}`:e?f=`<${g}.${w}.${+p+1}-0`:f=`<=${f}`,`${r} ${f}`.trim()),rg=(e,t,r)=>{for(let n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!r.includePrerelease){for(let n=0;n<e.length;n++)if(De(e[n].semver),e[n].semver!==Ui.ANY&&e[n].semver.prerelease.length>0){let o=e[n].semver;if(o.major===t.major&&o.minor===t.minor&&o.patch===t.patch)return!0}return!1}return!0}});var un=oe((sx,Kl)=>{"use strict";var dn=Symbol("SemVer ANY"),Gi=class e{static get ANY(){return dn}constructor(t,r){if(r=Hl(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),Hi("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===dn?this.value="":this.value=this.operator+this.semver.version,Hi("comp",this)}parse(t){let r=this.options.loose?Gl[Wl.COMPARATORLOOSE]:Gl[Wl.COMPARATOR],n=t.match(r);if(!n)throw new TypeError(`Invalid comparator: ${t}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new Xl(n[2],this.options.loose):this.semver=dn}toString(){return this.value}test(t){if(Hi("Comparator.test",t,this.options.loose),this.semver===dn||t===dn)return!0;if(typeof t=="string")try{t=new Xl(t,this.options)}catch{return!1}return qi(t,this.operator,this.semver,this.options)}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new zl(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new zl(this.value,r).test(t.semver):(r=Hl(r),r.includePrerelease&&(this.value==="<0.0.0-0"||t.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||t.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&t.operator.startsWith(">")||this.operator.startsWith("<")&&t.operator.startsWith("<")||this.semver.version===t.semver.version&&this.operator.includes("=")&&t.operator.includes("=")||qi(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||qi(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};Kl.exports=Gi;var Hl=ro(),{safeRe:Gl,t:Wl}=qr(),qi=ji(),Hi=cn(),Xl=et(),zl=It()});var fn=oe((ax,Yl)=>{"use strict";var ng=It(),og=(e,t,r)=>{try{t=new ng(t,r)}catch{return!1}return t.test(e)};Yl.exports=og});var Ql=oe((cx,Jl)=>{"use strict";var ig=It(),sg=(e,t)=>new ig(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));Jl.exports=sg});var eu=oe((lx,Zl)=>{"use strict";var ag=et(),cg=It(),lg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new cg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===-1)&&(n=s,o=new ag(n,r))}),n};Zl.exports=lg});var ru=oe((ux,tu)=>{"use strict";var ug=et(),dg=It(),fg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new dg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===1)&&(n=s,o=new ug(n,r))}),n};tu.exports=fg});var iu=oe((dx,ou)=>{"use strict";var Wi=et(),pg=It(),nu=ln(),mg=(e,t)=>{e=new pg(e,t);let r=new Wi("0.0.0");if(e.test(r)||(r=new Wi("0.0.0-0"),e.test(r)))return r;r=null;for(let n=0;n<e.set.length;++n){let o=e.set[n],i=null;o.forEach(s=>{let u=new Wi(s.semver.version);switch(s.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!i||nu(u,i))&&(i=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),i&&(!r||nu(r,i))&&(r=i)}return r&&e.test(r)?r:null};ou.exports=mg});var au=oe((fx,su)=>{"use strict";var gg=It(),hg=(e,t)=>{try{return new gg(e,t).range||"*"}catch{return null}};su.exports=hg});var mo=oe((px,du)=>{"use strict";var bg=et(),uu=un(),{ANY:vg}=uu,xg=It(),yg=fn(),cu=ln(),lu=co(),Sg=uo(),wg=lo(),Rg=(e,t,r,n)=>{e=new bg(e,n),t=new xg(t,n);let o,i,s,u,f;switch(r){case">":o=cu,i=Sg,s=lu,u=">",f=">=";break;case"<":o=lu,i=wg,s=cu,u="<",f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(yg(e,t,n))return!1;for(let g=0;g<t.set.length;++g){let w=t.set[g],p=null,x=null;if(w.forEach(c=>{c.semver===vg&&(c=new uu(">=0.0.0")),p=p||c,x=x||c,o(c.semver,p.semver,n)?p=c:s(c.semver,x.semver,n)&&(x=c)}),p.operator===u||p.operator===f||(!x.operator||x.operator===u)&&i(e,x.semver))return!1;if(x.operator===f&&s(e,x.semver))return!1}return!0};du.exports=Rg});var pu=oe((mx,fu)=>{"use strict";var Tg=mo(),kg=(e,t,r)=>Tg(e,t,">",r);fu.exports=kg});var gu=oe((gx,mu)=>{"use strict";var Cg=mo(),Eg=(e,t,r)=>Cg(e,t,"<",r);mu.exports=Eg});var vu=oe((hx,bu)=>{"use strict";var hu=It(),Ig=(e,t,r)=>(e=new hu(e,r),t=new hu(t,r),e.intersects(t,r));bu.exports=Ig});var yu=oe((bx,xu)=>{"use strict";var Ag=fn(),_g=Et();xu.exports=(e,t,r)=>{let n=[],o=null,i=null,s=e.sort((w,p)=>_g(w,p,r));for(let w of s)Ag(w,t,r)?(i=w,o||(o=w)):(i&&n.push([o,i]),i=null,o=null);o&&n.push([o,null]);let u=[];for(let[w,p]of n)w===p?u.push(w):!p&&w===s[0]?u.push("*"):p?w===s[0]?u.push(`<=${p}`):u.push(`${w} - ${p}`):u.push(`>=${w}`);let f=u.join(" || "),g=typeof t.raw=="string"?t.raw:String(t);return f.length<g.length?f:t}});var Cu=oe((vx,ku)=>{"use strict";var Su=It(),Ki=un(),{ANY:Xi}=Ki,zi=fn(),Yi=Et(),Pg=(e,t,r={})=>{if(e===t)return!0;e=new Su(e,r),t=new Su(t,r);let n=!1;e:for(let o of e.set){for(let i of t.set){let s=Lg(o,i,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},Dg=[new Ki(">=0.0.0-0")],wu=[new Ki(">=0.0.0")],Lg=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Xi){if(t.length===1&&t[0].semver===Xi)return!0;r.includePrerelease?e=Dg:e=wu}if(t.length===1&&t[0].semver===Xi){if(r.includePrerelease)return!0;t=wu}let n=new Set,o,i;for(let c of e)c.operator===">"||c.operator===">="?o=Ru(o,c,r):c.operator==="<"||c.operator==="<="?i=Tu(i,c,r):n.add(c.semver);if(n.size>1)return null;let s;if(o&&i){if(s=Yi(o.semver,i.semver,r),s>0)return null;if(s===0&&(o.operator!==">="||i.operator!=="<="))return null}for(let c of n){if(o&&!zi(c,String(o),r)||i&&!zi(c,String(i),r))return null;for(let m of t)if(!zi(c,String(m),r))return!1;return!0}let u,f,g,w,p=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1,x=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1;p&&p.prerelease.length===1&&i.operator==="<"&&p.prerelease[0]===0&&(p=!1);for(let c of t){if(w=w||c.operator===">"||c.operator===">=",g=g||c.operator==="<"||c.operator==="<=",o){if(x&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===x.major&&c.semver.minor===x.minor&&c.semver.patch===x.patch&&(x=!1),c.operator===">"||c.operator===">="){if(u=Ru(o,c,r),u===c&&u!==o)return!1}else if(o.operator===">="&&!c.test(o.semver))return!1}if(i){if(p&&c.semver.prerelease&&c.semver.prerelease.length&&c.semver.major===p.major&&c.semver.minor===p.minor&&c.semver.patch===p.patch&&(p=!1),c.operator==="<"||c.operator==="<="){if(f=Tu(i,c,r),f===c&&f!==i)return!1}else if(i.operator==="<="&&!c.test(i.semver))return!1}if(!c.operator&&(i||o)&&s!==0)return!1}return!(o&&g&&!i&&s!==0||i&&w&&!o&&s!==0||x||p)},Ru=(e,t,r)=>{if(!e)return t;let n=Yi(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},Tu=(e,t,r)=>{if(!e)return t;let n=Yi(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};ku.exports=Pg});var Qi=oe((xx,Au)=>{"use strict";var Ji=qr(),Eu=Ur(),Bg=et(),Iu=Bi(),$g=fr(),Og=Qc(),Mg=el(),Ng=nl(),jg=sl(),Vg=cl(),Fg=ul(),Ug=fl(),qg=ml(),Hg=Et(),Gg=vl(),Wg=yl(),Xg=ao(),zg=Tl(),Kg=Cl(),Yg=ln(),Jg=co(),Qg=Mi(),Zg=Ni(),eh=lo(),th=uo(),rh=ji(),nh=$l(),oh=Ml(),ih=un(),sh=It(),ah=fn(),ch=Ql(),lh=eu(),uh=ru(),dh=iu(),fh=au(),ph=mo(),mh=pu(),gh=gu(),hh=vu(),bh=yu(),vh=Cu();Au.exports={parse:$g,valid:Og,clean:Mg,inc:Ng,diff:jg,major:Vg,minor:Fg,patch:Ug,prerelease:qg,compare:Hg,rcompare:Gg,compareLoose:Wg,compareBuild:Xg,sort:zg,rsort:Kg,gt:Yg,lt:Jg,eq:Qg,neq:Zg,gte:eh,lte:th,cmp:rh,coerce:nh,truncate:oh,Comparator:ih,Range:sh,satisfies:ah,toComparators:ch,maxSatisfying:lh,minSatisfying:uh,minVersion:dh,validRange:fh,outside:ph,gtr:mh,ltr:gh,intersects:hh,simplifyRange:bh,subset:vh,SemVer:Bg,re:Ji.re,src:Ji.src,tokens:Ji.t,SEMVER_SPEC_VERSION:Eu.SEMVER_SPEC_VERSION,RELEASE_TYPES:Eu.RELEASE_TYPES,compareIdentifiers:Iu.compareIdentifiers,rcompareIdentifiers:Iu.rcompareIdentifiers}});var T=D(Ie(),1);var Nc=D(Ie(),1);var Fr=D(H(),1);function jc({path:e}){return e.length===0?null:(0,Fr.jsx)(b,{children:e.map((t,r)=>(0,Fr.jsxs)(Nc.default.Fragment,{children:[r>0&&(0,Fr.jsx)(a,{color:l.muted,children:" \u203A "}),(0,Fr.jsx)(a,{color:l.dim,children:t})]},r))})}var _u=D(Qi(),1),xh=1,yh=new Set(["discover","workflow","nudge","recovery"]),Sh=new Set(["run","generate","both"]),wh=new Set(["banner","footer"]),go=e=>typeof e=="object"&&e!==null&&!Array.isArray(e),Hr=e=>typeof e=="string"&&e.length>0?e:void 0,Gr=e=>typeof e=="number"&&Number.isFinite(e)?e:void 0;function Rh(e){if(!go(e))return{};let t={};return Hr(e.run)&&(t.run=e.run),Hr(e.generate)&&(t.generate=e.generate),Hr(e.default)&&(t.default=e.default),t}function Pu(e,t){return e.text[t]??e.text.default??(e.target!=="both"?e.text[e.target]:void 0)}function Th(e,t){return t==="both"?!!e.default||!!e.run&&!!e.generate:t==="run"?!!e.run||!!e.default:!!e.generate||!!e.default}function kh(e,t){if(!go(e))return;let r=Gr(e.maxShows),n=Hr(e.until),o=Gr(e.weight);if(!(r===void 0||r<1||n===void 0||!Number.isFinite(Date.parse(n))))return{weight:Math.max(o??t,t),maxShows:Math.floor(r),until:n}}function Ch(e){if(!go(e))return null;let t=Hr(e.id);if(!t)return null;let r=Sh.has(e.target)?e.target:void 0;if(e.target!==void 0&&r===void 0)return null;let n=r??"both",o=Rh(e.text);if(!Th(o,n))return null;let i=yh.has(e.category)?e.category:"nudge",s=wh.has(e.surface)?e.surface:void 0,u=Gr(e.weight),f=u===void 0?1:Math.max(0,u),g=Gr(e.cooldownSessions),w=g===void 0?0:Math.max(0,Math.floor(g)),p=Hr(e.minVersion)&&_u.default.coerce(e.minVersion)?e.minVersion:void 0,x=Array.isArray(e.relevance)?e.relevance.filter(U=>typeof U=="string"):[],c=Gr(e.retireAfterShows),m=c!==void 0&&c>=1?Math.floor(c):void 0,_=kh(e.boost,f);return{id:t,category:i,surface:s,target:n,text:o,weight:f,cooldownSessions:w,minVersion:p,relevance:x,retireAfterShows:m,boost:_}}function ho(e){if(!go(e)||!Array.isArray(e.hints)||typeof e.enabled!="boolean")return{catalog:null,dropped:0};let t=Gr(e.schemaVersion)??0;if(Math.floor(t)>xh)return{catalog:null,dropped:0};let r=0,n=new Set,o=[];for(let i of e.hints){let s=Ch(i);if(!s){r++;continue}if(n.has(s.id)){r++;continue}n.add(s.id),o.push(s)}return o.length===0?{catalog:null,dropped:r}:{catalog:{schemaVersion:t,enabled:e.enabled,hints:o},dropped:r}}var Bu=D(H(),1),Du="tip: ";function Lu({hint:e,mode:t,termWidth:r}){if(e.target!=="both"&&e.target!==t)return null;let n=Pu(e,t);if(!n)return null;let o=Math.max(8,r-Du.length-2),i=n.length>o?n.slice(0,o-1)+"\u2026":n;return(0,Bu.jsx)(a,{color:l.dim,children:Du+i})}var re=D(H(),1);function bo(e,t){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}\u2026`}function Eh(e,t){if(e.kind==="desktop")return"Desktop";let r=rn(e.kind);return e.deviceName?e.appPackage&&t>=72?`${r} \xB7 ${bo(e.deviceName,30)} \xB7 ${bo(e.appPackage,36)}`:t>=48?`${r} \xB7 ${bo(e.deviceName,40)}`:`${r} \xB7 ${bo(e.deviceName,Math.max(8,t-12))}`:t<36?r:`${r} \xB7 setting up`}function $u({profile:e,environment:t,tokenValid:r,runCount:n,sessionId:o,viewMode:i,breadcrumb:s,chatMode:u,tcgRequestId:f,tcgStreamStatus:g,footerHint:w,sessionTarget:p={kind:"desktop"},targetLocked:x=!1}){let{stdout:c}=$r(),m=c?.columns??80,_=u??"run",U=t==="stage",B=t==="prod",F=_==="generate"?l.generateAccent:l.orange,q=g==="completed"?l.green:g==="failed"?l.red:l.generateAccent,$=Eh(p,m);return(0,re.jsxs)(b,{flexDirection:"column",children:[(0,re.jsx)(a,{color:l.muted,children:"\u2500".repeat(m)}),s&&s.length>0&&(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(jc,{path:s})}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:"Mode:"}),(0,re.jsx)(a,{color:F,bold:!0,children:_==="generate"?"Generate":"Run"}),(0,re.jsx)(a,{color:l.muted,children:"|"}),_==="generate"?(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.dim,children:"req"}),(0,re.jsx)(a,{color:l.dim,children:f??"\u2014"}),g&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"\xB7"}),(0,re.jsx)(a,{color:q,children:g})]})]}):(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.dim,children:"Session:"}),(0,re.jsx)(a,{color:l.dim,children:o})]}),(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsx)(a,{color:r?l.green:l.red,children:"\u25CF"}),(0,re.jsx)(a,{color:l.dim,children:r?"authenticated":"not logged in"}),!B&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"|"}),U?(0,re.jsx)(a,{color:l.orange,bold:!0,children:"\u26A0 stage"}):(0,re.jsx)(a,{color:l.green,children:t})]})]}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:e??"no profile"}),_==="run"&&(0,re.jsxs)(re.Fragment,{children:[(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsxs)(a,{color:l.dim,children:["runs: ",n]})]}),(0,re.jsx)(a,{color:l.muted,children:"|"}),(0,re.jsx)(a,{dimColor:!0,children:Hs()})]}),(0,re.jsxs)(b,{paddingX:1,gap:1,children:[(0,re.jsx)(a,{color:l.dim,children:"Config:"}),(0,re.jsx)(a,{color:p.kind==="desktop"?l.dim:l.orange,children:$}),x&&(0,re.jsx)(a,{color:l.dim,children:"\xB7 locked (/new to change)"})]}),(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(a,{dimColor:!0,children:i==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})}),w&&(0,re.jsx)(b,{paddingX:1,children:(0,re.jsx)(Lu,{hint:w,mode:_,termWidth:m})})]})}var Cr=D(Ie(),1);var pn=[[[" "],[" "],[" "],[" "],["\u2584","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],[" "],[" "],[" "],[" "],[" "],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7"],[" "],[" "],[" "],[" "]],[[" "],[" "],["\u2584","#875faf"],["\u2584","#af87d7","#875faf"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7","#875faf"],["\u2584","#875faf"],[" "],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2584","#000000","#af87d7"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#af87d7"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#585858","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2588","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#000000","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],[" "],["\u2580","#875faf"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2580","#875faf"],[" "],[" "]],[[" "],[" "],[" "],[" "],[" "],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],[" "],[" "],[" "],[" "],[" "]]];var ve=D(H(),1),vo="#af87d7",Zi="#875faf",Ou="#5b3a7a",Ih="#ff9500",Ah="#ea580c";var es="#666666",_h="#555555",kr=[[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[vo,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Zi,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],ts=kr.map(([,e])=>[...e]);function Mu({visibleRows:e=kr.length}){let t=Math.min(e,kr.length);return(0,ve.jsxs)(b,{flexDirection:"column",children:[kr.slice(0,t).map(([r,n],o)=>{let i=ts[o];return(0,ve.jsx)(a,{children:i.map((s,u)=>{if(s==="\u2588")return(0,ve.jsx)(a,{color:r,children:"\u2588"},u);let f=u>0&&i[u-1]==="\u2588",g=o>0&&u>0&&ts[o-1][u-1]==="\u2588";return f||g?(0,ve.jsx)(a,{color:Ou,children:"\u2592"},u):(0,ve.jsx)(a,{children:" "},u)})},o)}),t>=kr.length&&(0,ve.jsxs)(a,{children:[" ",ts[kr.length-1].map((r,n)=>r==="\u2588"?(0,ve.jsx)(a,{color:Ou,children:"\u2580"},n):(0,ve.jsx)(a,{children:" "},n))]})]})}function Ph({visibleRows:e=pn.length}){let t=Math.min(e,pn.length);return(0,ve.jsx)(b,{flexDirection:"column",children:pn.slice(0,t).map((r,n)=>(0,ve.jsx)(a,{children:r.map((o,i)=>{let s=o[0],u=o[1],f=o[2];return u?(0,ve.jsx)(a,{color:u,backgroundColor:f,children:s},i):(0,ve.jsx)(a,{children:s},i)})},n))})}function xo({size:e="compact",helmetVisibleRows:t=pn.length,textVisibleRows:r=kr.length,showMeta:n=!1,user:o=null,authenticated:i=!1,version:s=""}){return e==="compact"?(0,ve.jsx)(Mu,{}):(0,ve.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,ve.jsx)(a,{color:Ih,italic:!0,children:" Welcome to"}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(b,{gap:2,children:[(0,ve.jsx)(Ph,{visibleRows:t}),(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(Mu,{visibleRows:r}),(0,ve.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,ve.jsx)(a,{color:Ah,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,ve.jsxs)(ve.Fragment,{children:[(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(a,{children:[(0,ve.jsx)(a,{color:es,children:" The validation layer for AI coding agents. "}),(0,ve.jsx)(a,{color:_h,children:`v${s}`})]}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:es,children:" Kane-CLI: natural-language web & mobile-app automation, plus"})}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:es,children:" requirements-to-coverage assurance \u2014 from your CLI or IDE."})}),(0,ve.jsx)(a,{children:" "})]})]})}var os=D(H(),1),rs=8,ns=7;function Nu({onComplete:e}){let[t,r]=(0,Cr.useState)(0),[n,o]=(0,Cr.useState)(0),[i,s]=(0,Cr.useState)(!1),[u]=(0,Cr.useState)(()=>{let f=new Hn,g=f.getActiveProfile(),w=f.getDefaultEnv(),p=g?f.loadCredentials(g,w):null,x=g?f.loadBasicAuth(g,w):null;return{authenticated:!!(p||x),user:x?.username??g??null}});return gi(()=>{r(f=>Math.min(rs,f+1))},t<rs?60:null),gi(()=>{o(f=>Math.min(ns,f+1))},n<ns?80:null),(0,Cr.useEffect)(()=>{t>=rs&&n>=ns&&!i&&(s(!0),e?.())},[t,n,i,e]),(0,os.jsx)(b,{flexDirection:"column",children:(0,os.jsx)(xo,{size:"full",helmetVisibleRows:t,textVisibleRows:n,showMeta:i,user:u.user,authenticated:u.authenticated,version:xt})})}var Zt=D(H(),1);function ju({entry:e}){return e.type==="input"?(0,Zt.jsxs)(b,{children:[(0,Zt.jsx)(a,{color:l.orange,children:"\u276F "}),(0,Zt.jsx)(a,{children:e.text})]}):e.type==="error"?(0,Zt.jsx)(b,{marginLeft:2,children:(0,Zt.jsx)(a,{color:l.red,children:e.text})}):(0,Zt.jsx)(b,{marginLeft:2,children:(0,Zt.jsx)(a,{color:e.type==="info"?l.dim:void 0,children:e.text})})}var is=D(H(),1);function Vu({objective:e}){let{stdout:t}=$r(),r=Math.max(24,(t?.columns??80)-4);return(0,is.jsx)(Qt,{title:"run",width:r,children:(0,is.jsx)(Ws,{label:"objective",value:e})})}var Gt=D(Ie(),1);var ht=D(H(),1);function Dh(e,t){let r=[],o=Math.max(t-4,30);r.push({type:"title",text:e.title});for(let i=0;i<e.sections.length;i++){let s=e.sections[i];i>0&&r.push({type:"divider",text:"\u2500".repeat(o)}),s.label&&r.push({type:"header",text:s.label});let u=s.entries.length>0?Math.max(...s.entries.map(f=>f.key.length)):0;for(let f of s.entries){let g="\xB7".repeat(Math.max(2,u-f.key.length+3)),w=`${f.key} ${g} ${f.value}`;r.push({type:"entry",text:w,color:f.color})}}return r.push({type:"footer",text:"esc back"}),r}function Fu({data:e,width:t=60}){let r=Dh(e,t);return(0,ht.jsx)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:r.map((n,o)=>{if(n.type==="title")return(0,ht.jsx)(a,{color:l.orange,bold:!0,children:n.text},o);if(n.type==="header")return(0,ht.jsx)(b,{marginTop:1,children:(0,ht.jsx)(a,{color:l.dim,children:n.text})},o);if(n.type==="divider")return(0,ht.jsx)(b,{marginTop:1,marginBottom:0,children:(0,ht.jsx)(a,{color:l.muted,children:n.text})},o);if(n.type==="footer")return(0,ht.jsx)(b,{marginTop:1,children:(0,ht.jsx)(a,{color:l.dim,children:n.text})},o);let i=n.text.match(/^(.+?) (·+) (.+)$/);return i?(0,ht.jsxs)(a,{children:[(0,ht.jsxs)(a,{color:l.secondary,children:[i[1]," "]}),(0,ht.jsxs)(a,{color:l.muted,children:[i[2]," "]}),(0,ht.jsx)(a,{color:n.color,children:i[3]})]},o):(0,ht.jsx)(a,{color:n.color,children:n.text},o)})})}var rt=D(H(),1);function yo(e,t){let r=[];function n(o,i){for(let s of o)r.push({item:s,depth:i}),s.type==="submenu"&&s.children&&t.length>i&&t[i]===s.id&&n(s.children,i+1)}return n(e,0),r}function ss({items:e,onRunSelected:t,initialExpandedPath:r,onDismiss:n,renderLoginWizard:o,renderProfilesView:i,renderChromeProfilePicker:s,renderProjectPicker:u,renderFolderPicker:f,renderWindowSizePicker:g,onActiveViewChange:w}){let[p,x]=(0,Gt.useState)(()=>{let F=r??[],q=yo(e,F),$=0;if(F.length>0){let z=q.findIndex(ae=>ae.item.id===F[0]);z>=0&&z+1<q.length&&($=z+1)}return{expandedPath:F,selectedIndex:$,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),c=yo(e,p.expandedPath),m=c[p.selectedIndex]?.item,_=(0,Gt.useRef)(null),U=(0,Gt.useCallback)(F=>{x(q=>({...q,feedback:F})),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{x(q=>({...q,feedback:null})),_.current=null},4e3)},[]);(0,Gt.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]),(0,Gt.useEffect)(()=>{w?.(p.activeView)},[p.activeView,w]);let B=(0,Gt.useCallback)(()=>{x(F=>({...F,activeView:null,infoData:null}))},[]);return Be((F,q)=>{if(p.activeView==="infoView"){q.escape&&B();return}if(!(p.activeView==="loginWizard"||p.activeView==="profilesView"||p.activeView==="chromeProfilePicker"||p.activeView==="projectPicker"||p.activeView==="folderPicker"||p.activeView==="windowSizePicker")){if(p.isEditing){if(q.escape){x($=>({...$,isEditing:!1,inputValue:""}));return}if(q.return){let $=p.inputValue.trim();if(m?.onValue&&$){let z=m.currentValue;m.onValue($),U(z?`${m.label}: ${z} \u2192 ${$}`:`${m.label}: ${$}`)}x(z=>({...z,isEditing:!1,inputValue:""}));return}if(q.backspace||q.delete){x($=>({...$,inputValue:$.inputValue.slice(0,-1)}));return}F&&!q.ctrl&&!q.meta&&x($=>({...$,inputValue:$.inputValue+F}));return}if(p.isSelecting&&m?.options){let $=m.options;if(q.escape){x(z=>({...z,isSelecting:!1}));return}if(q.upArrow){x(z=>({...z,inputValue:String(Math.max(0,Number(z.inputValue||"0")-1))}));return}if(q.downArrow){x(z=>({...z,inputValue:String(Math.min($.length-1,Number(z.inputValue||"0")+1))}));return}if(q.return){let z=Number(p.inputValue||"0"),ae=$[z];if(ae&&m.onValue){let ee=m.currentValue;m.onValue(ae.value),U(ee?`${m.label}: ${ee} \u2192 ${ae.label}`:`${m.label}: ${ae.label}`)}x(ee=>({...ee,isSelecting:!1,inputValue:""}));return}return}if(q.upArrow){x($=>({...$,selectedIndex:Math.max(0,$.selectedIndex-1)}));return}if(q.downArrow){x($=>({...$,selectedIndex:Math.min(c.length-1,$.selectedIndex+1)}));return}if(q.escape){if(p.expandedPath.length===0){n?.();return}x($=>{let z=$.expandedPath.slice(0,-1),ae=yo(e,z),ee=$.expandedPath[$.expandedPath.length-1],te=ae.findIndex(K=>K.item.id===ee);return{...$,expandedPath:z,selectedIndex:te>=0?te:0}});return}if(q.return&&m){if(m.id==="run-start"){t();return}if(m.type==="submenu"){let $=c[p.selectedIndex]?.depth??0;x(z=>{let ae=[...z.expandedPath.slice(0,$),m.id],ee=yo(e,ae),te=ee.findIndex(K=>K.item.id===m.id);return{...z,expandedPath:ae,selectedIndex:te>=0?Math.min(te+1,ee.length-1):z.selectedIndex}});return}if(m.onInfo){let $=m.onInfo();x(z=>({...z,activeView:"infoView",infoData:$}));return}if(m.onLoginWizard){m.onLoginWizard(),x($=>({...$,activeView:"loginWizard"}));return}if(m.onProfilesView){m.onProfilesView(),x($=>({...$,activeView:"profilesView"}));return}if(m.onChromeProfilePicker){m.onChromeProfilePicker(),x($=>({...$,activeView:"chromeProfilePicker"}));return}if(m.onProjectPicker){m.onProjectPicker(),x($=>({...$,activeView:"projectPicker"}));return}if(m.onFolderPicker){m.onFolderPicker(),x($=>({...$,activeView:"folderPicker"}));return}if(m.onWindowSizePicker){m.onWindowSizePicker(),x($=>({...$,activeView:"windowSizePicker"}));return}if(m.type==="action"){m.onAction?.(),m.suppressFeedback||U(`${m.label} done`);return}if(m.type==="select"&&m.options){let $=m.options.findIndex(z=>z.value===m.currentValue);x(z=>({...z,isSelecting:!0,inputValue:String(Math.max(0,$))}));return}if(m.type==="text-input"){x($=>({...$,isEditing:!0,inputValue:m.currentValue??""}));return}}}}),(0,rt.jsx)(b,{flexDirection:"column",paddingX:1,children:p.activeView==="infoView"&&p.infoData?(0,rt.jsx)(Fu,{data:p.infoData}):p.activeView==="loginWizard"&&o?o(B):p.activeView==="profilesView"&&i?i(B):p.activeView==="chromeProfilePicker"&&s?s(B):p.activeView==="projectPicker"&&u?u(B):p.activeView==="folderPicker"&&f?f(B):p.activeView==="windowSizePicker"&&g?g(B):(0,rt.jsxs)(rt.Fragment,{children:[c.map(({item:F,depth:q},$)=>{let z=$===p.selectedIndex,ae=" ".repeat(q),ee=z?"\u276F ":" ",te=F.type==="submenu"?p.expandedPath.includes(F.id)?"\u25BC ":"\u25B6 ":F.type==="select"&&F.options?z&&p.isSelecting?"\u25BC ":"\u25B6 ":" ",K=F.currentValue!=null?` [${F.currentValue}]`:"";if(z&&p.isSelecting&&F.options){let pe=Number(p.inputValue||"0");return(0,rt.jsxs)(b,{flexDirection:"column",children:[(0,rt.jsxs)(a,{color:l.orange,children:[ae,ee,te,F.label]}),F.options.map((Re,me)=>(0,rt.jsxs)(a,{color:me===pe?l.orange:void 0,children:[ae," ",me===pe?"\u276F ":" ",Re.label]},Re.value))]},F.id)}return z&&p.isEditing?(0,rt.jsxs)(a,{color:l.orange,children:[ae,ee,te,F.label,": ",p.inputValue,(0,rt.jsx)(a,{color:l.dim,children:"\u2588"})]},F.id):(0,rt.jsxs)(a,{color:z?l.orange:void 0,dimColor:!z&&q>0,children:[ae,ee,te,F.label,(0,rt.jsx)(a,{dimColor:!0,children:K})]},F.id)}),p.feedback&&(0,rt.jsx)(b,{marginTop:1,children:(0,rt.jsxs)(a,{color:l.green,children:["\u2713 ",p.feedback]})}),(0,rt.jsx)(Vt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var J=D(Ie(),1);import{access as Lh}from"fs/promises";async function Uu(e){try{return await Lh(e),!0}catch{return!1}}function Bh(e,t){if(Tr(e))return!0;let r=/\.([a-z0-9]+)$/i.exec(e)?.[1]?.toLowerCase()??"";return t==="emulator"?["apk","aab","apks"].includes(r):["app","zip"].includes(r)}function $h(e){return e==="emulator"||e==="simulator"?e:null}var So={emulator:"android",simulator:"ios"};function Oh(e){return`${e.platform}\0${e.kind}\0${ra(e)}`}function Mh(e,t){let r=t.id!==void 0?{...t,id:wi(t.id)}:t,n=e.map(i=>i.virtualName!==void 0?{...i,virtualName:wi(i.virtualName)}:i),o=ta(n.filter(i=>Js(i,r)));return o?e.find(i=>i.id===o.id):void 0}function qu(e){let[t,r]=(0,J.useState)("idle"),[n,o]=(0,J.useState)(null),i=(0,J.useRef)(null),s=(0,J.useRef)(null),u=(0,J.useRef)(null),[f,g]=(0,J.useState)([]),[w,p]=(0,J.useState)([]),[x,c]=(0,J.useState)([]),[m,_]=(0,J.useState)(null),[U,B]=(0,J.useState)(null),[F,q]=(0,J.useState)(null),[$,z]=(0,J.useState)(null),[ae,ee]=(0,J.useState)(null),te=(0,J.useRef)(null),K=(0,J.useRef)(null),pe=(0,J.useRef)(null),Re=(0,J.useRef)(new Map),me=(0,J.useRef)(0),$e=(0,J.useRef)("confirm"),He=(0,J.useRef)(null),st=(0,J.useRef)(null),zt=(0,J.useRef)(null),Rt=(0,J.useRef)(()=>{}),ge=(0,J.useRef)({pathExists:Uu,...e});ge.current={pathExists:Uu,...e},(0,J.useEffect)(()=>{t==="ready"&&(He.current=null)},[t]);let ut=(0,J.useCallback)((P,L,Y)=>{Y().catch(X=>{P===me.current&&(_(null),B(X instanceof Error?X.message:String(X)),r(L))})},[]),Ot=(0,J.useCallback)(async(P,L,Y)=>{r("picking"),_("Looking for devices\u2026");let X=Y?So[Y]:void 0,Z=(await Xn(X)).filter(Se=>!Y||Se.kind===Y);if(P===me.current){if(p(Z),_(null),Z.length===0){B(Y==="emulator"?"No Android emulator found on this machine.":Y==="simulator"?"No iOS simulator found on this machine.":"No emulator or simulator found on this machine.");return}st.current=null,ee(null)}},[]),Oe=(0,J.useCallback)((P,L)=>{let Y={target:P,savedDeviceLabel:P.displayName,savedKind:P.kind,...L?{appPath:L,savedAppLabel:u.current??L}:{},deviceMissing:!1,appMissing:!L};st.current=Y,zt.current=Y,ee(Y),_(null),r("confirm")},[]),Le=(0,J.useCallback)(async(P,L)=>{let Y=nn(So[L]);if(!Y||!Y.available())return!0;let X=await Y.checks({appiumUrl:ge.current.getDefaults()?.appium_url});return P!==me.current?!1:(g(X),X.some(Se=>Se.required&&Se.status==="fail"&&!Se.fixedByBundle)?(_(null),r("doctor"),!1):!0)},[]),Kt=(0,J.useCallback)(async(P,L)=>{let Y=ge.current.getDefaults(),X=Y?.default_target;if(i.current=L,o(L),_("Checking the saved setup\u2026"),!await Le(P,L))return;let Z=So[L],Se=(await Xn(Z)).filter(nr=>nr.kind===L);if(P!==me.current)return;p(Se),_(null);let Je=X?Mh(Se,X):void 0,le=ba(Y?.default_app)?Y?.default_app:void 0,St=le?Tr(le)||await ge.current.pathExists(le):!1;if(P!==me.current)return;let bt=le&&Tr(le)?await ge.current.appLabelFor?.(le)??le:le;if(P!==me.current)return;let Ce={...Je?{target:Je}:{},savedDeviceLabel:X?.id??"(unknown device)",savedKind:L,...le&&St?{appPath:le}:{},...bt?{savedAppLabel:bt}:{},deviceMissing:!Je,appMissing:!le||!St};st.current=Ce,zt.current=Ce,u.current=le&&bt!==le?bt:null,ee(Ce),r("confirm")},[Le]),Ne=(0,J.useCallback)(async(P,L)=>{r("checking");let Y=zn();if(P!==me.current)return;if(!Y.supported){g([{id:"host.platform",label:"host",required:!0,status:"fail",detail:Y.reason}]),r("doctor");return}g([]);let X=ge.current.getDefaults(),Z=$h(X?.default_target?.kind);if(L==="confirm"&&Z&&X?.default_target){st.current=null,ee(null),await Kt(P,Z);return}r("chooser")},[Kt]),Yt=(0,J.useCallback)(P=>{let L=++me.current;i.current=P,o(P);let Y=ge.current.getDefaults();ge.current.setDefaults({...Y,tui_target:P}),B(null),ut(L,"chooser",async()=>{r("picking"),_(P==="simulator"?"Checking the iOS toolchain\u2026":"Checking the Android toolchain\u2026"),await Le(L,P)&&(_("Checking the mobile dependencies\u2026"),await Si().ensure(P,{automatic:!0,onProgress:X=>{L===me.current&&_(X)}}),L===me.current&&await Ot(L,$e.current,P))})},[Le,Ot,ut]),gr=(0,J.useCallback)((P="confirm",L={})=>{let Y=++me.current;$e.current=P;let X=ge.current.getDefaults();He.current=X?.tui_target??"desktop";let Z=(L.kind?Jt(L.kind):void 0)??Jt(X?.default_target?.kind??"")??"emulator";ge.current.setDefaults({...X,tui_target:Z}),g([]),p([]),c([]),q(null),z(null),B(null),ee(null),st.current=null,te.current=null,K.current=null,P==="reinit"&&(pe.current=null),ut(Y,"doctor",()=>Ne(Y,P))},[ut,Ne]),Er=(0,J.useCallback)(()=>{let P=++me.current;B(null),ut(P,"doctor",()=>Ne(P,$e.current))},[ut,Ne]),Kr=(0,J.useCallback)(P=>{let L=++me.current;B(null),_("Installing managed mobile dependencies\u2026");let Y=P??["emulator",...process.platform==="darwin"?["simulator"]:[]];ut(L,"doctor",async()=>{for(let X of Y)await Si().ensure(X,{automatic:!1,approved:!0,onProgress:Z=>{L===me.current&&_(Z)}});L===me.current&&_(null),await Ne(L,$e.current)})},[ut,Ne]),Ir=(0,J.useCallback)(async P=>{let L=nn(P.platform);if(!L){B(`No provider registered for platform "${P.platform}"`);return}let X=await(ge.current.deviceBusyOn??(()=>la(ca(),[],[],P.kind)))({udid:P.id,displayName:P.displayName});if(X!==null){let Je=typeof X=="number"?X:X.port,le=typeof X=="number"?void 0:X.device;B(aa({udid:P.id,displayName:P.displayName},Je,le));return}te.current=P,K.current=L,z(P),B(null),c([]),Ri(L,P);let Z=s.current;Z&&!Bh(Z,P.kind)&&(s.current=null);let Se=ge.current.getDefaults();ge.current.setDefaults({...Se,...Jt(P.kind)?{tui_target:Jt(P.kind)}:{},default_target:Wn(P)}),s.current&&q(Or(P,s.current,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),Oe(P,s.current)},[Oe]),hr=(0,J.useCallback)((P={})=>{let L=st.current;if(!L?.target){B("That device is no longer connected \u2014 pick another one.");return}let Y=L.target,X=nn(Y.platform);if(!X){B(`No provider registered for platform "${Y.platform}"`);return}if(te.current=Y,K.current=X,z(Y),B(null),c([]),Ri(X,Y),!(P.keepApp!==!1&&L.appPath)){r("appSource");return}let Se=ge.current.getDefaults();s.current=L.appPath,q(Or(Y,L.appPath,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),r("ready")},[]),br=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}r("apps")},[]),Tt=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}B(null),r("appList")},[]),vr=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}B(null),r("appId")},[]),Ar=(0,J.useCallback)(async P=>{let L=te.current,Y=ge.current.resolveAppId;if(!L)return{ok:!1,error:"Pick a device before choosing an app"};if(!Y)return{ok:!1,error:"Log in to use an app id, or choose a local build."};let X=++me.current;B(null),_("Downloading the application \u2014 this can take a while, please wait\u2026");try{let Z=await Y(P,Je=>{X===me.current&&_(Je)});if(X!==me.current)return{ok:!1};let Se=ge.current.getDefaults();return s.current=P,u.current=Z.name,pe.current=null,_(null),q(Or(L,P,{noReset:Se?.no_reset,appiumUrl:Se?.appium_url,autoGrantPermissions:Se?.auto_grant_permissions,autoAcceptAlerts:Se?.auto_accept_alerts})),ge.current.setDefaults({...Se,...Jt(L.kind)?{tui_target:Jt(L.kind)}:{},default_target:Wn(L),default_app:P}),Oe(L,P),{ok:!0}}catch(Z){return X!==me.current?{ok:!1}:(_(null),{ok:!1,error:Z instanceof Error?Z.message:String(Z)})}},[Oe]),xr=(0,J.useCallback)(()=>{if(!te.current||!K.current){B("Pick a device before choosing an app");return}r("appSource")},[]),Q=(0,J.useCallback)(async(P,L={})=>{let Y=L.persist!==!1,X=te.current;if(!X)return B("Pick a device before choosing an app"),{ok:!1,error:"Pick a device before choosing an app"};if(P.kind!=="package"&&!await ge.current.pathExists(P.value))return{ok:!1,error:`${P.value} is not there.`};let Z=ge.current.getDefaults();return s.current=P.value,u.current=null,pe.current=null,B(null),_(null),q(Or(X,P.value,{noReset:Z?.no_reset,appiumUrl:Z?.appium_url,autoGrantPermissions:Z?.auto_grant_permissions,autoAcceptAlerts:Z?.auto_accept_alerts})),Oe(X,P.value),Y&&ge.current.setDefaults({...Z,...Jt(X.kind)?{tui_target:Jt(X.kind)}:{},default_target:Wn(X),default_app:P.value}),{ok:!0}},[Oe]),ue=(0,J.useCallback)(()=>{r("appSource")},[]),ce=(0,J.useCallback)(async P=>{let L=te.current,Y=K.current;if(!L||!Y)return{ok:!1,error:"No device is bound \u2014 run /mobile first"};try{let X=await ma(Y,L,bt=>_(bt)),Z=await Y.ensureApp(X,P,bt=>_(bt));_(null);let Se=Oh(L);pe.current={targetIdentity:Se,packageId:Z};let Je=Re.current.get(Se)??[];if(!Je.includes(Z)){let bt=[...Je,Z].sort();Re.current.set(Se,bt),c(bt)}let le=ge.current.getDefaults(),St=Or(X,Z,{noReset:le?.no_reset,appiumUrl:le?.appium_url,autoGrantPermissions:le?.auto_grant_permissions,autoAcceptAlerts:le?.auto_accept_alerts});return q(St),{ok:!0,device:St}}catch(X){return _(null),{ok:!1,error:X instanceof Error?X.message:String(X)}}},[]),ie=(0,J.useCallback)(async()=>{let P=te.current;if(!P)return{ok:!1,reason:"No device is selected.",step:"device"};let L=So[P.kind];if(!(await Xn(L)).some(Z=>Z.id===P.id||Z.virtualName&&Z.virtualName===P.virtualName))return{ok:!1,reason:`${P.displayName} is no longer connected.`,step:"device"};let X=s.current;return X?Tr(X)?{ok:!0}:await ge.current.pathExists(X)?{ok:!0}:{ok:!1,reason:`${X} is no longer there.`,step:"app"}:{ok:!1,reason:"No app is selected.",step:"app"}},[]),de=(0,J.useCallback)(()=>{++me.current,zt.current=null,r("idle"),g([]),p([]),c([]),_(null),B(null),q(null),z(null),ee(null),st.current=null,te.current=null,K.current=null,pe.current=null,s.current=null,u.current=null},[]),Te=(0,J.useCallback)(()=>{let P=zt.current,L=()=>{if(!P)return!1;let Y=P.target?nn(P.target.platform):null;return te.current=P.target??null,K.current=Y??null,s.current=P.appPath??null,st.current=P,i.current=P.savedKind,o(P.savedKind),z(P.target??null),ee(P),_(null),B(null),r("confirm"),!0};switch(t){case"picking":B(null),r("chooser");return;case"appSource":if(B(null),L())return;if(te.current){Oe(te.current,s.current);return}r("chooser");return;case"apps":case"appList":case"appId":B(null),_(null),r("appSource");return;case"chooser":if(L())return;Rt.current();return;default:Rt.current()}},[t,Oe]),dt=(0,J.useCallback)(()=>{let P=He.current;if(P){let L=ge.current.getDefaults();ge.current.setDefaults({...L,tui_target:P}),He.current=null}de()},[de]);return Rt.current=dt,{phase:t,kind:n,selectKind:Yt,checks:f,targets:w,apps:x,busyMessage:m,error:U,device:F,target:$,saved:ae,begin:gr,recheck:Er,install:Kr,cancel:dt,back:Te,selectTarget:Ir,confirmSaved:hr,requestApp:br,requestAppSource:xr,requestCloudApps:Tt,requestAppId:vr,selectApp:Q,selectAppId:Ar,skipApp:ue,bindAppForRun:ce,validateBinding:ie,reset:de}}var mn=D(Ie(),1);function Hu(e){let{phase:t,device:r,requestApp:n,pendingRef:o,dispatch:i,notify:s,onSettle:u}=e,f=(0,mn.useRef)(null),g=(0,mn.useRef)(!1);(0,mn.useEffect)(()=>{let w=o.current;if(!w){f.current=null,g.current=!1;return}if(t!=="idle"&&(g.current=!0),t==="ready"&&r){if(r.app_package){o.current=null,f.current=null,g.current=!1,u?.(),i(w);return}f.current!=="apps"&&(f.current="apps",n());return}if(f.current!==t){if(t==="doctor"){f.current="doctor",s({type:"error",text:`Mobile setup is blocked, so "${w}" has not run. Install the managed tooling from the panel (i, then i again to confirm), or press Esc to cancel.`});return}if(t==="idle"){if(!g.current)return;o.current=null,f.current=null,g.current=!1,u?.(),s({type:"info",text:`Mobile setup cancelled \u2014 "${w}" was not run.`})}}},[t,r,n,o,i,s,u])}import{stat as Nh}from"fs/promises";async function Gu(e){let t=e.statFile??Nh,r="";if(!Tr(e.app))try{let n=await t(e.app);r=`${n.mtimeMs}:${n.size}`}catch{return null}return[e.udid,e.app,r,String(e.runnerGen)].join("\0")}function Wu(e){let t=/(^|\s)@(?:"([^"]+)"|(\S+))/g,r=null;return{objective:e.replace(t,(o,i,s,u)=>(r=s??u??null,i)).replace(/\s+/g," ").trim(),token:r}}import{readFile as zu,readdir as jh,stat as Vh}from"fs/promises";import{extname as Ku,join as Yu,relative as Fh}from"path";var Uh=new Set(["node_modules",".git"]),qh=new Set([".apk",".zip",".apks",".aab",".ipa",".app"]);function Ju(e){return e.state!=="incompatible"}var Xu=new Map;function Hh(e,t){return`${e}\0${t?.platform??""}\0${t?.androidApiLevel??""}\0${t?.androidAbis?.join(",")??""}`}function Gh(e){let t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:void 0}function Wh(e){let t=new Set;return oa(e,{filter:r=>{let n=/^lib\/([^/]+)\//.exec(r.name);return n?.[1]&&t.add(n[1]),!1}}),[...t].sort()}async function Qu(e,t,r={}){let n=r.limit??50,o=r.maxDepth??6,i=t.toLowerCase(),s=[];async function u(f,g){if(s.length>=n||g>o)return;let w;try{w=await jh(f,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||Uh.has(p.name)||p.name.startsWith("output-"))continue;let x=Yu(f,p.name),c=Ku(p.name).toLowerCase();if(qh.has(c)&&(p.isFile()||c===".app"&&p.isDirectory())){let _=Fh(e,x);(!i||_.toLowerCase().includes(i))&&s.push(_);continue}p.isDirectory()&&await u(x,g+1)}}return await u(e,0),s}async function Zu(e,t){let r;try{r=(await Vh(e)).mtimeMs}catch{}let n=Hh(e,t),o=r===void 0?void 0:Xu.get(n);if(o&&o.mtimeMs===r)return o.result;let i=u=>(r!==void 0&&Xu.set(n,{mtimeMs:r,result:u}),u),s=Ku(e).toLowerCase();if(!t)return i({state:"unverified",reason:"Choose a device to verify compatibility"});if(t.platform==="android"){if(s===".aab")return i({state:"incompatible",reason:"app bundle \u2014 build an .apk instead"});if(s===".apks")return i({state:"incompatible",reason:"split bundles are not supported \u2014 build an .apk"});if(s===".app"||s===".ipa"||s===".zip")return i({state:"incompatible",reason:"iOS artifact"});if(s!==".apk")return i({state:"unverified",reason:"Unknown artifact type"});try{let{default:u}=await import("./adbkit-apkreader-ORZBGCJQ.js"),g=await(await u.open(e)).readManifest();if(!g?.package)return i({state:"unverified",reason:"APK manifest has no package id"});let w=Gh(g.usesSdk?.minSdkVersion);if(w!==void 0&&t.androidApiLevel!==void 0&&w>t.androidApiLevel)return i({state:"incompatible",reason:`requires Android API ${w}; ${t.displayName} is API ${t.androidApiLevel}`});let p=Wh(new Uint8Array(await zu(e)));if(p.length>0){if(!t.androidAbis||t.androidAbis.length===0)return i({state:"unverified",reason:`APK native ABI (${p.join(", ")}) could not be compared with this device`});if(!p.some(x=>t.androidAbis.includes(x)))return i({state:"incompatible",reason:`APK supports ${p.join(", ")}; device supports ${t.androidAbis.join(", ")}`})}return i({state:"compatible"})}catch(u){return i({state:"unverified",reason:`Could not read APK manifest: ${u instanceof Error?u.message:String(u)}`})}}if(s===".apk"||s===".aab"||s===".apks")return i({state:"incompatible",reason:"Android artifact"});if(s===".ipa")return i({state:"incompatible",reason:"an .ipa cannot be installed on a simulator \u2014 use a .zip"});if(s===".app")try{let u=await zh(Yu(e,"Info.plist")),f=Array.isArray(u.CFBundleSupportedPlatforms)?u.CFBundleSupportedPlatforms.filter(w=>typeof w=="string"):void 0;if(f&&t.kind==="simulator"&&!f.includes("iPhoneSimulator"))return i({state:"incompatible",reason:`device build (${f.join(", ")}) \u2014 build for the simulator`});let g=typeof u.MinimumOSVersion=="string"?u.MinimumOSVersion:void 0;return g&&t.osVersion&&Xh(g,t.osVersion)>0?i({state:"incompatible",reason:`requires iOS ${g}; ${t.displayName} runs iOS ${t.osVersion}`}):i({state:"incompatible",reason:"zip this bundle and use the .zip"})}catch(u){return i({state:"unverified",reason:`Could not read the app bundle: ${u instanceof Error?u.message:String(u)}`})}return i({state:"unverified",reason:"Unknown artifact type"})}function Xh(e,t){let r=e.split(".").map(o=>Number(o)||0),n=t.split(".").map(o=>Number(o)||0);for(let o=0;o<Math.max(r.length,n.length);o++){let i=(r[o]??0)-(n[o]??0);if(i!==0)return i}return 0}async function zh(e){let r=(await zu(e)).toString("utf8");if(!r.startsWith("bplist"))try{return JSON.parse(r)}catch{}let{runExec:n}=await import("./exec-P2IKJRRR.js"),o=await n("plutil",["-convert","json","-o","-",e],{timeoutMs:15e3});if(o.code!==0)throw new Error(o.stderr.trim()||`plutil exited ${o.code}`);return JSON.parse(o.stdout)}var wo=D(Ie(),1);function ed(e){let t=(0,wo.useRef)(e);return t.current=e,(0,wo.useCallback)(async r=>{let{auth:n,env:o,kind:i,baseUrlFor:s,makeClient:u}=t.current,f=i();if(!f)throw new Error("Pick a device before browsing your uploads.");let w=await n.resolveBasicAuth().catch(()=>null)??n.getResolvedBasicAuth();if(!w?.username||!w.access_key)throw new Error("Log in to browse your uploads, or choose a local build.");let p=s?s(o):sn(o);return(u?u(p,{username:w.username,accessKey:w.access_key}):new da(p,{username:w.username,accessKey:w.access_key})).list({type:f,...r})},[])}var gn=D(H(),1);function td({suggested:e,sessionTargetLabel:t,appHint:r,savedDeviceName:n,onAccept:o,onPickDevice:i,onKeep:s,onCancel:u}){Be((w,p)=>{if(p.escape){u();return}if(p.return){o();return}if(e==="mobile"&&w==="p"){i?.();return}w==="k"&&s()});let f=e==="mobile"?`This looks like a mobile test${r?` (${r})`:""}.`:"This looks like a web test.",g=e==="mobile"?n?`run on ${n} (saved)`:"set up a device":"run on Desktop";return(0,gn.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,children:[(0,gn.jsx)(a,{color:l.orange,children:f}),(0,gn.jsxs)(a,{color:l.dim,children:[` \u21B5 ${g}`,e==="mobile"?" p pick a device":"",` k keep ${t}`," esc cancel"]})]})}async function rd(e){let t=e.cache?.get(e.objective);if(t)return t;let r=e.fetchImpl??fetch,n=new AbortController,o=setTimeout(()=>n.abort(),e.timeoutMs??3e3);try{let i=await r(`${e.controllerBaseUrl}/classify-intent`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:e.authHeader},body:JSON.stringify({objective:e.objective,session_target:e.sessionTarget}),signal:n.signal});if(!i.ok)return null;let s=Kh(await i.json());return s&&e.cache?.set(e.objective,s),s}catch{return null}finally{clearTimeout(o)}}function Kh(e){if(typeof e!="object"||e===null)return null;let t=e,r=t.target;if(r!=="web"&&r!=="mobile"&&r!=="ambiguous"||typeof t.confidence!="number"||!Number.isFinite(t.confidence))return null;let n={target:r,confidence:Math.min(1,Math.max(0,t.confidence))};return(t.platform==="android"||t.platform==="ios")&&(n.platform=t.platform),typeof t.app_hint=="string"&&t.app_hint.trim()!==""&&(n.appHint=t.app_hint.trim()),n}function nd(e,t){return e?e.target==="ambiguous"||e.target===t?{kind:"proceed"}:e.confidence<.8?{kind:"proceed"}:{kind:"mismatch",suggested:e.target,verdict:e}:{kind:"proceed"}}var od=D(Ie(),1);var Ue=D(H(),1),Yh={pass:"\u2713",fail:"\u2717",info:"\u2139"},Jh={pass:l.green,fail:l.red,info:l.secondary};function id({checks:e,busyMessage:t,onRetry:r,onInstall:n,onCancel:o}){let[i,s]=(0,od.useState)(!1);Be((x,c)=>{if(c.escape){o();return}(x==="r"||x==="R")&&r(),(x==="i"||x==="I")&&(i?n():s(!0))});let u=e.filter(x=>x.required&&x.status==="fail").length,f=e.filter(x=>x.status!=="info"),g=new Map;for(let x of f)x.status==="fail"&&x.fixText&&!g.has(x.fixText)&&g.set(x.fixText,x.id);let p=["emulator",...process.platform==="darwin"?["simulator"]:[]].map(x=>`\u2022 kaneai-mobile-deps ${x}
3
3
  resolved for kane-cli ${xt} via your KaneAI account
4
4
  \u2192 ~/.testmuai/kaneai/mobile/deps/${x}`).join(`
5
- `);return(0,Ue.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.red,paddingX:2,paddingY:1,children:[(0,Ue.jsxs)(b,{children:[(0,Ue.jsx)(a,{color:l.red,bold:!0,children:"Device setup"}),(0,Ue.jsx)(a,{color:l.dim,children:u>0?` ${u} blocking issue${u===1?"":"s"}`:" all checks passed"})]}),(0,Ue.jsxs)(b,{flexDirection:"column",marginTop:1,children:[t&&(0,Ue.jsx)(a,{color:l.secondary,children:t}),f.length===0?(0,Ue.jsx)(a,{color:l.dim,children:"No checks reported."}):f.map(x=>(0,Ue.jsxs)(b,{flexDirection:"column",children:[(0,Ue.jsxs)(b,{children:[(0,Ue.jsxs)(a,{color:Jh[x.status],children:[Yh[x.status]," "]}),(0,Ue.jsx)(a,{children:x.label}),x.detail?(0,Ue.jsxs)(a,{color:l.dim,children:[" \u2014 ",x.detail]}):null]}),x.status==="fail"&&x.fixText&&g.get(x.fixText)===x.id?(0,Ue.jsx)(b,{marginLeft:4,children:(0,Ue.jsxs)(a,{color:l.dim,children:["fix: ",x.fixText]})}):null]},x.id))]}),i&&(0,Ue.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,Ue.jsx)(a,{color:l.orange,children:"Press i again to download:"}),(0,Ue.jsx)(a,{color:l.dim,children:p})]}),(0,Ue.jsx)(Vt,{bindings:[{keys:"i",label:"install"},{keys:"r",label:"recheck"}],escBackLabel:"cancel"})]})}var hn=D(Ie(),1);var at=D(H(),1),as=800,cs=3840,ls=600,us=2160;function sd(e,t){if(!t)return"Enter a value";let r=Number(t);if(!Number.isInteger(r))return"Must be a whole number";if(e==="width"){if(r<as)return`Min ${as}`;if(r>cs)return`Max ${cs}`}else{if(r<ls)return`Min ${ls}`;if(r>us)return`Max ${us}`}return null}function ds({currentWidth:e,currentHeight:t,onSelect:r,onCancel:n}){let[o,i]=(0,hn.useState)("width"),[s,u]=(0,hn.useState)(String(e)),[f,g]=(0,hn.useState)(String(t)),[w,p]=(0,hn.useState)(null);Be((c,m)=>{if(m.escape){n();return}if(m.tab||m.rightArrow||m.leftArrow){i(_=>_==="width"?"height":"width"),p(null);return}if(m.return){let _=sd("width",s);if(_){i("width"),p(`Width: ${_}`);return}let U=sd("height",f);if(U){i("height"),p(`Height: ${U}`);return}r(Number(s),Number(f));return}if(m.backspace||m.delete){o==="width"?u(_=>_.slice(0,-1)):g(_=>_.slice(0,-1)),p(null);return}c&&/^\d$/.test(c)&&(o==="width"?u(_=>_+c):g(_=>_+c),p(null))});let x=(c,m,_)=>{let U=o===_,B=U?l.orange:l.secondary;return(0,at.jsxs)(b,{flexDirection:"column",children:[(0,at.jsxs)(a,{color:l.dim,children:[" ",c]}),(0,at.jsx)(b,{borderStyle:"round",borderColor:B,paddingX:1,width:10,children:(0,at.jsxs)(a,{color:U?void 0:l.dim,children:[m||" ",U?(0,at.jsx)(a,{color:l.dim,children:"\u2588"}):""]})}),(0,at.jsxs)(a,{color:l.dim,dimColor:!0,children:[" ",_==="width"?`${as}\u2013${cs}`:`${ls}\u2013${us}`]})]})};return(0,at.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,at.jsx)(a,{color:l.orange,bold:!0,children:"Window Size"}),(0,at.jsxs)(b,{marginTop:1,gap:1,children:[x("Width",s,"width"),(0,at.jsx)(b,{alignItems:"center",marginTop:1,children:(0,at.jsx)(a,{color:l.dim,children:"x"})}),x("Height",f,"height")]}),w&&(0,at.jsx)(b,{marginTop:1,children:(0,at.jsx)(a,{color:l.red,children:w})}),(0,at.jsx)(Vt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ct=D(Ie(),1);async function ad(e,t,r){let n=e.loadCredentials(t,r),o=e.loadClient(t,r);if(n&&o){let s=new ia(r);await Promise.allSettled([s.revokeToken(n.access_token,o.client_id,"access_token"),s.revokeToken(n.refresh_token,o.client_id,"refresh_token")])}e.deleteProfileFull(t,r);let i=e.listProfiles();return i.length>0&&(e.setActiveProfile(i[0].profile),e.setDefaultEnv(i[0].env)),{profile:t,env:r,switchedTo:i.length>0?i[0]:void 0}}function cd(){let[e]=(0,ct.useState)(()=>new Hn),[t,r]=(0,ct.useState)(()=>{let m=e.resolveAuth();if(!m)return!1;if(m.method==="basic")return!0;let{credentials:_}=e.getActiveCredentials();return _?_.expires_at>Date.now()/1e3:!1}),n=(0,ct.useRef)(null),o=(0,ct.useRef)(null),i=(0,ct.useCallback)(()=>{let m=e.resolveAuth();return m?{method:m.method,profile:m.profile,env:m.env}:null},[e]),s=(0,ct.useCallback)(async()=>{let{credentials:m,profile:_,env:U}=e.getActiveCredentials();if(!m||!_||!U)return null;let B=m.expires_at,F=Date.now()/1e3;if(B-F<300){if(o.current)return o.current;let q=(async()=>{try{let $=await sa({creds:e,profile:_,env:U,credentials:m});return $?(r(!0),$.accessToken):null}catch{return r(!1),null}finally{o.current=null}})();return o.current=q,q}return r(!0),m.access_token},[e]),u=(0,ct.useCallback)(()=>{let m=e.resolveAuth();return!m||m.method!=="basic"?null:{username:m.username,access_key:m.access_key}},[e]),f=(0,ct.useCallback)((m,_)=>{n.current?.revoke();let U=Ge(m),B=u(),F=new Ea(U.controllerBaseUrl,s,B,_);return n.current=F,F},[u,s]),g=(0,ct.useCallback)(()=>n.current,[]),w=(0,ct.useCallback)(()=>{let m=u();if(m)return m;let _=n.current?.cached;return _?{username:_.username,access_key:_.access_key}:null},[u]),p=(0,ct.useCallback)(async()=>{let m=n.current;return m?m.resolve():null},[]),x=(0,ct.useCallback)(async(m="default")=>{let _=e.getDefaultEnv();await new Ca(m,_,e).login(),e.setActiveProfile(m);try{let B=new Vr;Ct(e,B,m,_)}catch{}r(!0)},[e]),c=(0,ct.useCallback)(async()=>{let m=e.getActiveProfile();if(!m)return null;let _=e.getDefaultEnv(),U=await ad(e,m,_);return r(!1),{profile:U.profile,env:U.env}},[e]);return{creds:e,tokenValid:t,setTokenValid:r,getToken:s,getBasicAuth:u,getAuthInfo:i,login:x,logout:c,initResolver:f,getResolver:g,getResolvedBasicAuth:w,resolveBasicAuth:p}}var er=D(Ie(),1);import{mkdtempSync as Qh,rmSync as Zh}from"fs";import{join as eb}from"path";import{tmpdir as tb}from"os";function ld(){let[e]=(0,er.useState)(()=>new Vr),t=(0,er.useRef)(null),r=(0,er.useRef)(null),n=(0,er.useRef)(null),o=(0,er.useCallback)(async s=>{if(t.current)return t.current;if(n.current)return n.current;let u=(async()=>{let f=e.load(),g;if(f.chrome_profile_path)g=f.chrome_profile_path.replace("~",process.env.HOME??"~");else{r.current&&(ur("tempDir","Previous temp dir removed before retry"),r.current=null);let p=Qh(eb(tb(),"kane-clean-"));r.current=p,g=p,Ft("tempDir",()=>{try{Zh(p,{recursive:!0,force:!0})}catch{}})}let w=await Aa({userDataDir:g,width:f.window_size.width,height:f.window_size.height,startUrl:s??f.default_url??void 0});return t.current=w,Ft("chrome",()=>{w.kill()}),w})();n.current=u;try{return await u}finally{n.current=null}},[e]),i=(0,er.useCallback)(()=>{ur("chrome","Chrome killed"),ur("tempDir","Temp dir removed"),t.current=null,r.current=null},[]);return{ensureChrome:o,killChrome:i}}var Ro=[{name:"run",description:"Execute a test run",args:'[--url <url>] "objective"'},{name:"login",description:"OAuth login",args:"[--profile name]"},{name:"logout",description:"Logout & revoke tokens",args:"[--profile name]"},{name:"whoami",description:"Show profile info",args:"[--profile name]"},{name:"balance",description:"Show credit balance"},{name:"profiles",description:"Manage profiles",args:"list|switch|delete"},{name:"config",description:"Manage configuration",args:"show|set-window|set-mode|set-assertion-mode|set-network-ws|set-network-sse|set-bug-detection|chrome-profile|project|folder|hints"},{name:"new",description:"Start a fresh session (uploads current first)"},{name:"name",description:"Set the current session's name (used at /exit save)",args:"<new-name>"},{name:"summary",description:"View detailed run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"help",description:"Show command reference"},{name:"clear",description:"Clear chat history"},{name:"exit",description:"Quit kane-cli"}],rb={web:"desktop"};function nb(e){return rb[e]??e}function To(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let o=n[0],i={},s=1;for(;s<n.length;){let u=n[s];if(u.startsWith("--")){let f=u.slice(2),g=n[s+1];g&&!g.startsWith("--")?(i[f]=g.replace(/^"|"$/g,""),s+=2):(i[f]=void 0,s++)}else{let f=u.replace(/^"|"$/g,"");o==="run"?i.objective=f:o==="config"?i.action?i.value=f:i.action=f:o==="profiles"?i.action=f:o==="summary"&&(i.index=f),s++}}return{command:nb(o),args:i,raw:t}}var dS=[{name:"Testing",commands:Ro.filter(e=>["run","cancel"].includes(e.name))},{name:"Auth",commands:Ro.filter(e=>["login","logout","whoami","balance","profiles"].includes(e.name))},{name:"Settings",commands:Ro.filter(e=>["config"].includes(e.name))},{name:"Session",commands:Ro.filter(e=>["new","name","summary","help","clear","exit"].includes(e.name))}];var ud=[{name:"mobile",description:"Switch the session to an emulator or simulator"},{name:"desktop",description:"Switch the session back to Desktop (Chrome)"},{name:"doctor",description:"Check mobile tooling & devices"},{name:"testmd",description:"Browse & run saved tests under cwd"},{name:"auth",description:"Login, logout, profiles"},{name:"config",description:"Chrome, run & generate settings",args:""},{name:"help",description:"Command reference"},{name:"new",description:"Start a fresh session"},{name:"name",description:"Set the session name",args:"<new-name>"},{name:"exit",description:"Quit kane-cli"}],ob={name:"cancel",description:"Abort current run"},ib={name:"cancel",description:"Cancel current generation"},Wr=[{name:"generate",description:"Switch to Generate mode (test case generator)"},{name:"summary",description:"View run summaries",args:"[index]"},ob,...ud],bn=[{name:"run",description:"Switch back to Run mode"},{name:"save",description:"Save the current test cases"},{name:"view",description:"Open the scenario browser",args:"[S<n>]"},ib,...ud],dd=Wr,sb=new Set(["mobile","doctor"]),ab=new Set(["mobile","desktop"]);function fd(e,t){return t?e.map(r=>ab.has(r.name)?{...r,disabled:!0,disabledReason:`locked \u2014 session ran on ${t.label}; /new to switch`}:r):e}function vn(e,t=wr()){return t?e:e.filter(r=>!sb.has(r.name))}function ko(e,t="run"){let r=vn(t==="generate"?bn:Wr),n=e.startsWith("/")?e.slice(1):e;return n?r.filter(o=>o.name.startsWith(n)):r}var cb=new Set([...Wr,...bn].map(e=>e.name));function pd(e,t){let r=t==="generate"?bn:Wr;return cb.has(e)?r.some(n=>n.name===e):!0}var md=D(Ie(),1);var yt=D(H(),1);function lb(e){let t=[{id:"device",label:e.deviceMissing?"Choose a device":"Change device"},{id:"app",label:e.appMissing?"Choose an app":"Change app"}];return e.deviceMissing||e.appMissing?e.deviceMissing?t:[t[1],t[0]]:[{id:"continue",label:"Continue"},...t]}function gd({saved:e,onContinue:t,onChangeDevice:r,onChangeApp:n,onCancel:o}){let i=lb(e),[s,u]=(0,md.useState)(0);Be((p,x)=>{if(x.escape){o();return}if(x.upArrow&&u(c=>Math.max(0,c-1)),x.downArrow&&u(c=>Math.min(i.length-1,c+1)),x.return){let c=i[s];c.id==="continue"?t():c.id==="device"?r():n()}});let f=e.deviceMissing?`${e.savedDeviceLabel} \u2014 not connected`:`${e.target.displayName} ${e.target.id}`,g=e.savedAppLabel&&e.savedAppLabel!==e.appPath?` ${e.savedAppLabel}`:"",w=e.appMissing?e.savedAppLabel?`${e.savedAppLabel} \u2014 not found`:"none chosen yet":`${e.appPath}${g}`;return(0,yt.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,yt.jsx)(a,{color:l.orange,bold:!0,children:"Running on"}),(0,yt.jsxs)(b,{marginTop:1,flexDirection:"column",children:[(0,yt.jsxs)(b,{children:[(0,yt.jsx)(a,{color:l.dim,children:" Device "}),(0,yt.jsx)(a,{color:e.deviceMissing?l.red:void 0,children:f})]}),(0,yt.jsxs)(b,{children:[(0,yt.jsx)(a,{color:l.dim,children:" App "}),(0,yt.jsx)(a,{color:e.appMissing?l.red:void 0,children:w})]})]}),(0,yt.jsx)(b,{marginTop:1,flexDirection:"column",children:i.map((p,x)=>(0,yt.jsxs)(a,{color:x===s?l.orange:void 0,children:[x===s?"\u276F ":" ",p.label]},p.id))}),(0,yt.jsx)(Vt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back to chat"})]})}function hd(e,t){let r=t?.trim();return r?e==="generate"?{kind:"reject"}:{kind:"run",objective:r}:e==="generate"?{kind:"toggle"}:{kind:"already"}}var fr=D(H(),1);function fs({flows:e,filterIndex:t}){let r=t!==void 0?e.filter(n=>n.index===t):e;return r.length===0?null:(0,fr.jsx)(b,{flexDirection:"column",children:r.map(n=>(0,fr.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,fr.jsxs)(b,{marginLeft:1,children:[(0,fr.jsx)(a,{color:l.purple,bold:!0,children:"Flow "+n.index+": "}),(0,fr.jsx)(a,{color:l.purple,children:n.objective})]}),(0,fr.jsx)(Ka,{status:n.status==="error"?"failed":n.status,summary:n.summary,duration:n.duration,steps:n.steps,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.reason,creditsConsumed:n.creditsConsumed})]},n.index))})}var pr=D(H(),1),ub={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},db={ok:l.green,error:l.red,cancelled:l.dim};function bd({status:e,command:t,message:r,details:n,accentColor:o}){let i=t.startsWith("/")?t.slice(1):t,s=o??db[e];return(0,pr.jsxs)(b,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,pr.jsx)(b,{marginLeft:1,children:(0,pr.jsxs)(a,{color:s,bold:!0,children:[ub[e]," ",i]})}),(0,pr.jsxs)(b,{borderStyle:"round",borderColor:s,paddingX:2,flexDirection:"column",width:70,children:[(0,pr.jsx)(a,{children:r}),n&&(0,pr.jsx)(a,{color:l.dim,children:n})]})]})}var wn=D(Ie(),1);import{join as yn}from"path";var xn=D(H(),1);function vd({tabs:e,activeIndex:t}){return(0,xn.jsx)(b,{children:e.map((r,n)=>(0,xn.jsx)(b,{marginRight:1,children:n===t?(0,xn.jsx)(a,{color:l.orange,bold:!0,children:`[ ${r} ]`}):(0,xn.jsx)(a,{color:l.dim,children:` ${r} `})},r))})}var A=D(H(),1),Sn=["Commands","Shortcuts","Tests","Setup","About"],Co=21,fb="https://www.testmuai.com/support/docs/kane-cli-introduction",pb="https://github.com/LambdaTest/kane-cli/issues";function xd({onClose:e,version:t,environment:r,sessionId:n,runUrl:o,mode:i="run"}){let[s,u]=(0,wn.useState)(0),[f,g]=(0,wn.useState)(0);(0,wn.useEffect)(()=>{g(0)},[s]);let w=Sn[s],p=w==="Commands"?mb(i):w==="Shortcuts"?gb():w==="Tests"?hb():w==="Setup"?bb():vb({version:t,environment:r,sessionId:n,runUrl:o}),x=p.length,c=f>0,m=f+Co<x,_=p.slice(f,f+Co);Be((B,F)=>{if(F.escape){e();return}if(F.rightArrow||F.tab){u(q=>(q+1)%Sn.length);return}if(F.leftArrow){u(q=>(q-1+Sn.length)%Sn.length);return}if(F.upArrow){g(q=>Math.max(0,q-1));return}if(F.downArrow){g(q=>Math.min(Math.max(0,x-Co),q+1));return}});let U=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return x>Co&&U.push({keys:"\u2191\u2193",label:"scroll"}),(0,A.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,A.jsx)(vd,{tabs:[...Sn],activeIndex:s,onChange:u}),c&&(0,A.jsx)(b,{marginTop:1,children:(0,A.jsx)(a,{color:l.dim,children:"\u25B2 more above"})}),(0,A.jsx)(b,{marginTop:c?0:1,flexDirection:"column",children:_}),m&&(0,A.jsx)(b,{children:(0,A.jsx)(a,{color:l.dim,children:"\u25BC more below"})}),(0,A.jsx)(Vt,{bindings:U,escBackLabel:"back to chat"})]})}function mb(e){let t=vn(e==="generate"?bn:Wr);return[(0,A.jsx)(a,{color:l.dim,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.orange,children:'"search amazon for laptop"'})},"ex"),(0,A.jsx)(b,{marginBottom:1},"sp"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Slash commands"},"cmd-h"),...t.map(r=>(0,A.jsxs)(b,{marginLeft:2,children:[(0,A.jsx)(b,{width:14,children:(0,A.jsxs)(a,{color:l.orange,children:["/",r.name]})}),r.args&&(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:r.args})}),(0,A.jsx)(a,{color:l.dim,children:r.description})]},r.name)),(0,A.jsx)(b,{marginBottom:1},"sp2"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.dim,children:"/config submenu: show \xB7 run (mode \xB7 assertion-mode) \xB7 generate \xB7 chrome-profile \xB7 project \xB7 folder \xB7 window \xB7 hints"})},"config-sub")]}function Eo(e,t){return[(0,A.jsx)(a,{color:l.dim,bold:!0,children:e},`h-${e}`),...t.map(([r,n],o)=>(0,A.jsxs)(b,{marginLeft:2,children:[(0,A.jsx)(b,{width:26,children:(0,A.jsx)(a,{color:l.orange,children:r})}),(0,A.jsx)(a,{color:l.dim,children:n})]},`r-${e}-${o}`)),(0,A.jsx)(b,{marginBottom:1},`s-${e}`)]}function gb(){return[...Eo("Cursor & word edit",[["\u2190 \u2192","Cursor by char"],["Ctrl+A Ctrl+E","Start / end of line"],["Home End","Start / end (Linux/Win; rare on Mac laptops)"],["Backspace","Delete char before cursor"],["Ctrl+W","Delete word back"],["Ctrl+U","Clear input"],["Ctrl+K","Kill from cursor to end"],["Ctrl+\u2190 Ctrl+\u2192","Word jump (Linux/Win, iTerm2)"],["Option+\u2190 Option+\u2192","Word jump (Mac native)"],["Option+B Option+F","Word jump (Mac, Emacs-style)"],["Alt+Backspace","Delete word back (Option+Delete on Mac)"],["Ctrl+Delete Option+Fn+Del","Delete word forward"]]),...Eo("History & completion",[["\u2191 \u2193","Previous / next history"],["Tab","Accept ghost / fill highlighted command"],["Ctrl+R","Reverse-search history"],["\u21B5","Submit"],["Esc","Close overlay / clear / back"]]),...Eo("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...Eo("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Platform caveats"},"cv-h"),(0,A.jsx)(a,{color:l.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function hb(){return[(0,A.jsxs)(a,{color:l.dim,children:["Sessions you run here are saved as ",(0,A.jsx)(a,{color:l.orange,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,A.jsx)(b,{marginBottom:1},"t-sp1"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Auto-save"},"t-save-h"),(0,A.jsxs)(a,{color:l.dim,children:[" In ",(0,A.jsx)(a,{color:l.orange,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,A.jsxs)(a,{color:l.dim,children:[" In ",(0,A.jsx)(a,{color:l.orange,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,A.jsxs)(a,{color:l.dim,children:[" Output: ",(0,A.jsx)(a,{color:l.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,A.jsx)(a,{color:l.orange,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,A.jsx)(b,{marginBottom:1},"t-sp2"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,A.jsxs)(a,{color:l.dim,children:[" ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd list"})," \xB7 bare ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,A.jsx)(a,{color:l.dim,children:" The .md file carries its own config (mode, max_steps, variables, \u2026) so the replay is reproducible."},"t-run-2"),(0,A.jsx)(b,{marginBottom:1},"t-sp3"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Type ",(0,A.jsxs)(a,{color:l.orange,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Discarding at the save prompt: press ",(0,A.jsx)(a,{color:l.orange,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function bb(){return[(0,A.jsx)(a,{color:l.dim,bold:!0,children:"1. Login"},"s1-h"),(0,A.jsx)(a,{color:l.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"2. Project & folder"},"s2-h"),(0,A.jsx)(a,{color:l.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"3. Run settings (/config \u2192 Run)"},"s3-h"),(0,A.jsx)(a,{color:l.dim,children:" mode: testing = lenient, saves to TMS \xB7 action = hard-stop on errors (e.g. login w/o creds) so you can step in"},"s3-b"),(0,A.jsx)(a,{color:l.dim,children:" assertion-mode: visual (default) = read/assert via vision \xB7 dom = DOM-based extraction/assertions"},"s3-c"),(0,A.jsx)(b,{marginBottom:1},"spacer-1"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Variables (later wins)"},"v-h"),(0,A.jsxs)(a,{color:l.dim,children:[" ",`${yn(mt,"variables")}/*.json`," (global)"]},"v-1"),(0,A.jsxs)(a,{color:l.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,A.jsx)(a,{color:l.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,A.jsx)(b,{marginBottom:1},"spacer-2"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Context files"},"c-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Global: ",yn(mt,"global-memory.md")]},"c-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,A.jsx)(b,{marginBottom:1},"spacer-3"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Paths"},"p-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Config: ",yn(mt,"tui-config.json")," \xB7 Auth: ",yn(mt,"config.json")]},"p-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Sessions: ",yn(mt,"sessions"),"/"]},"p-2")]}function vb({version:e,environment:t,sessionId:r,runUrl:n}){return[(0,A.jsxs)(b,{children:[(0,A.jsx)(a,{color:l.orange,bold:!0,children:"kane-cli "}),(0,A.jsxs)(a,{color:l.muted,children:["v",e]})]},"title"),(0,A.jsx)(b,{marginBottom:1},"sp"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Environment"})}),(0,A.jsx)(a,{children:t})]},"env"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Session"})}),(0,A.jsx)(a,{children:r})]},"sess"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Default URL"})}),(0,A.jsx)(a,{color:l.orange,children:n})]},"url"),(0,A.jsx)(b,{marginBottom:1},"sp2"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Docs"})}),(0,A.jsx)(a,{color:l.orange,underline:!0,children:fb})]},"docs"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Bugs"})}),(0,A.jsx)(a,{color:l.orange,underline:!0,children:pb})]},"bugs")]}var Io=D(Ie(),1);import{existsSync as yd,readFileSync as jS,rmSync as xb,unlinkSync as yb}from"fs";function Sd(e){let t=Ya(e);yd(t)&&xb(t,{recursive:!0,force:!0}),yd(e)&&yb(e)}var ps=D(H(),1);function wd({cwd:e,currentOrgId:t,onClose:r,onRun:n,onExport:o}){let[i,s]=(0,Io.useState)("list"),[u,f]=(0,Io.useState)(null),[g,w]=(0,Io.useState)(0);return i==="inspect"&&u?(0,ps.jsx)(Qa,{path:u.path,relPath:u.relPath,onBack:()=>s("list"),onAction:p=>{if(p==="run")n(u);else if(p==="export")o(u);else{try{Sd(u.path)}catch{}f(null),s("list"),w(x=>x+1)}}}):(0,ps.jsx)(Ja,{root:e,currentOrgId:t,onSelect:p=>{f(p),s("inspect")},onCancel:r},g)}var lt=D(Ie(),1);function Rd(e){let[t,r]=(0,lt.useState)(null),[n,o]=(0,lt.useState)(!1),[i,s]=(0,lt.useState)(null),[u,f]=(0,lt.useState)(null),[g,w]=(0,lt.useState)(null),p=(0,lt.useRef)(0),x=(0,lt.useRef)([]),c=(0,lt.useRef)(!1),m=(0,lt.useRef)(null),_=(0,lt.useRef)(e);_.current=e;let U=(0,lt.useCallback)(async q=>{if(c.current)return null;c.current=!0;let $=++p.current,z=[];x.current=z;let ae=K=>`testmd-run-${$}-${K}`,ee={register:(K,pe)=>{let Re=ae(K);z.push(Re),Ft(Re,pe)},deregister:K=>on(ae(K)),cleanup:(K,pe)=>ur(ae(K),pe),remoteLogger:_.current.remoteLogger},te={runSteps:K=>new Promise(pe=>{let Re=()=>{m.current=null,pe()};m.current=Re,r({...K,exitOnComplete:!1,onAllComplete:()=>{K.onAllComplete?.(),Re()}})}),onLockState:K=>{},onAdaptiveHeal:K=>{},onSummary:async K=>{s(K)},onLinks:async K=>{f(K)},runUpload:K=>K.execute(),onAgentEvent:K=>{}};o(!0),s(null),f(null),w(null);try{let K=await _.current.buildInput(q),pe=await bc(K,te,ee);return w(pe),pe}finally{c.current=!1,m.current=null,o(!1),r(null);for(let K of z)ur(K,"run-finished");z.length=0}},[]),B=(0,lt.useCallback)(()=>{for(let $ of x.current)ur($,"cancelled");x.current=[];let q=m.current;m.current=null,q?.()},[]),F=(0,lt.useCallback)(()=>{s(null),f(null),w(null)},[]);return{start:U,cancel:B,clearResult:F,running:n,runViewProps:t,summary:i,links:u,runSummary:g}}var nt=D(Ie(),1);function Td(e={}){let[t,r]=(0,nt.useState)(()=>Zn({requestId:"",objective:""})),[n,o]=(0,nt.useState)(!1),[i,s]=(0,nt.useState)(null),u=(0,nt.useRef)(null),f=(0,nt.useRef)(!1),g=(0,nt.useRef)(null),w=(0,nt.useCallback)(async(U,B,F)=>{f.current=!1;let q=0,$=0,z=0;for await(let ae of U){if(f.current)break;switch(r(ee=>Sc(ee,ae)),ae.type){case"thinking_done":F?.("tcg_thinking",{tookMs:ae.tookMs});break;case"progress":{let ee=Math.min(100,Math.floor(ae.pct/25)*25);ee>z&&(z=ee,F?.("tcg_progress",{pct:ee}));break}case"snapshot":q=ae.data.scenarios.length,$=ae.data.scenarios.reduce((ee,te)=>ee+(te.test_cases?.length??0),0),F?.("tcg_snapshot",{scenarioCount:q,caseCount:$});break;case"clarification":F?.("tcg_clarification",{});break;case"done":F?.("tcg_request_done",{status:ae.status,scenarioCount:q,caseCount:$,durationMs:Date.now()-B});break;case"error":F?.("tcg_request_error",{errorCode:"tcg_request_failed",durationMs:Date.now()-B});break}}},[]),p=(0,nt.useCallback)(async(U,B)=>{if(u.current)throw new Error("useTcgSession: a session is already active; call reset() or end() first");let F=e.makeClient??wc;u.current=F(U),g.current=new AbortController;let q=Zn({requestId:"",objective:B.prompt});r(eo(q));let $;try{$=await u.current.start(B,g.current.signal)}catch(ae){throw u.current=null,g.current=null,r(ee=>({...ee,turnActive:!1})),ae}s($.requestId),r(eo({...$.state,requestId:$.requestId,objective:B.prompt}));let z=Date.now();e.log?.("tcg_request_start",{request_id:$.requestId,objectiveChars:B.prompt.length,scenarioLimit:B.scenarioLimit,perScenarioLimit:B.perScenarioLimit,memoryEnhancement:B.memoryEnhancement}),await w($.events,z,e.log)},[w,e.makeClient,e.log]),x=(0,nt.useCallback)(async(U,B)=>{if(!u.current||!i)throw new Error("useTcgSession: chat() with no active request");r(F=>eo(yc(F)));try{await u.current.chat(i,U,B)}catch(F){throw r(q=>({...q,turnActive:!1})),F}},[i]),c=(0,nt.useCallback)(async()=>{if(!(!i||!u.current)){f.current=!0,g.current&&g.current.abort();try{await u.current.cancel(i)}catch{}u.current=null,s(null),r(U=>({...U,turnActive:!1}))}},[i]),m=(0,nt.useCallback)(async()=>{if(!(!i||!u.current)){f.current=!0,g.current&&g.current.abort();try{await u.current.end(i)}catch{}u.current=null,s(null),r(U=>({...U,turnActive:!1}))}},[i]),_=(0,nt.useCallback)(()=>{f.current=!0,g.current&&g.current.abort(),g.current=null,r(Zn({requestId:"",objective:""})),s(null),o(!1),u.current=null},[]);return(0,nt.useEffect)(()=>()=>{f.current=!0,g.current&&g.current.abort()},[]),{state:t,isStreaming:t.turnActive,isTerminal:xc(t.status),isReconnecting:n,turnActive:t.turnActive,inReview:t.scenarios.length>0&&!t.turnActive&&!Ai(t.status),isSessionClosed:Ai(t.status),requestId:i,startWith:p,chat:x,cancel:c,end:m,reset:_}}var be=D(Ie(),1);import{join as Xr,resolve as Lb}from"path";import{mkdirSync as gs,writeFileSync as jd,appendFileSync as Bb}from"fs";function kd(e){let t=Ge(e.env);return!t||!t.testGeneratorBaseUrl?{ok:!1,error:`Unknown environment "${e.env}" \u2014 fix default_env via /config`}:{ok:!0,conn:{baseUrl:`${t.testGeneratorBaseUrl}/test-generator/api/v2`,tmsBaseUrl:t.tmsBaseUrl,authResolver:e.resolver,projectId:e.projectId,folderId:e.folderId,log:e.log}}}function Cd(e){return e.turnActive?!0:e.requestId!=null&&!e.isSessionClosed&&!e.saved}function Ed(e){return e.isRunning||e.hasLiveResults}function Id(e){let t=(e??"").trim().match(/^[sS](\d+)$/);if(!t)return{level:"scenarios"};let r=parseInt(t[1],10);return r<1?{level:"scenarios"}:{level:"cases",scenarioIdx:r-1}}function Ad(e,t){return`S${e+1}.C${t+1}`}function _d(e,t){return e.reduce((r,n)=>r+(n.test_cases??[]).filter(o=>!t.has(o.id)).length,0)}function Pd(e,t){return e.map(r=>({...r,test_cases:(r.test_cases??[]).filter(n=>!t.has(n.id))})).filter(r=>(r.test_cases??[]).length>0)}var Rn=D(Ie(),1);import{createHash as Sb}from"crypto";function wb(e){return Sb("sha1").update(JSON.stringify({t:e.title,p:e.preconditions,m:e.manual_steps})).digest("hex")}var Ao=class{constructor(t){this.deps=t;this.max=t.maxConcurrent??3}cache=new Map;caseById=new Map;queue=[];active=0;max;onSnapshot(t){t.forEach((r,n)=>{(r.test_cases??[]).forEach((o,i)=>{if(!qt(o)||o.manual_steps==null)return;let s=wb(o),u=this.cache.get(o.id);u&&u.hash===s||(u?.controller?.abort(),this.caseById.set(o.id,o),this.cache.set(o.id,{hash:s,ref:Ad(n,i),status:"pending"}),this.queue.includes(o.id)||this.queue.push(o.id))})}),this.pump()}pump(){for(;this.active<this.max&&this.queue.length>0;){let t=this.queue.shift(),r=this.cache.get(t),n=this.caseById.get(t);!r||!n||r.status!=="pending"||(this.active++,this.runOne(t,n,r))}}async runOne(t,r,n){let o=`bifurcation-${t}`,i=new AbortController;n.controller=i;let s=this.deps.run??this.defaultRun.bind(this);Ft(o,()=>i.abort());let u=Date.now();try{this.safeLog("tcg_bif_start",{caseId:t,ref:n.ref});let f=await s(Ec(r),i.signal);if(!i.signal.aborted&&this.cache.get(t)===n){n.status="done",n.result=f;try{this.deps.persist?.(t,f,n.ref)}catch{}this.safeLog("tcg_bif_done",{caseId:t,ref:n.ref,total_flows:f.total_flows,is_single_flow:f.is_single_flow,credits_consumed:f.credits_consumed,durationMs:Date.now()-u})}}catch(f){!i.signal.aborted&&this.cache.get(t)===n&&(n.status="error",n.error=f.message,this.safeLog("tcg_bif_error",{caseId:t,ref:n.ref,errorCode:"bifurcation_failed",durationMs:Date.now()-u}))}finally{on(o),this.active--,this.pump()}}safeLog(t,r){try{this.deps.log?.(t,r)}catch{}}async defaultRun(t,r){let n=await this.deps.resolveAuth(),o=Ic({objective:t,model:this.deps.model,sessionId:this.deps.sessionId,auth:n});return Ac(o,this.deps.spawnOpts,r)}getStatus(t){return this.cache.get(t)?.status}getResult(t){return this.cache.get(t)?.result}dispose(){for(let[t,r]of this.cache)r.controller?.abort(),on(`bifurcation-${t}`);this.cache.clear(),this.caseById.clear(),this.queue=[],this.active=0}};function Dd(e){let t=(0,Rn.useRef)(null);return(0,Rn.useEffect)(()=>{if(!e.enabled)return;let r=e.log,n=r?(o,i,s,u)=>r(i,u??{}):void 0;return t.current=new Ao({model:e.model,sessionId:e.sessionId,resolveAuth:e.resolveAuth,spawnOpts:{environment:e.environment,log:n},log:r,persist:e.persist}),()=>{t.current?.dispose(),t.current=null}},[e.enabled,e.sessionId,e.model,e.environment]),(0,Rn.useEffect)(()=>{t.current&&t.current.onSnapshot(e.scenarios)},[e.scenarios]),{getStatus:r=>t.current?.getStatus(r),getResult:r=>t.current?.getResult(r),manager:t}}import{resolve as $d,isAbsolute as Tb,extname as kb}from"path";import{homedir as Bd}from"os";var Rb=/(?<=^|\s)@(?:"([^"]*)"|([^\s@]+))/g;function Ld(e){let t=[];for(let r of e.matchAll(Rb)){let n=r[1]!==void 0?r[1]:r[2];t.push({raw:r[0],value:n,start:r.index,end:r.index+r[0].length})}return t}var Cb=/^s\d+(\.c\d+)?$/i;function Eb(e){return e==="~"?Bd():e.startsWith("~/")?$d(Bd(),e.slice(2)):e}function Ib(e){return/^https?:\/\//i.test(e)?!1:e.includes("/")?!0:to.has(kb(e).toLowerCase())}function Od(e,t){let r=Ld(e),n=[],o=[];for(let s of r){let u=s.value,f=s.end;if(!s.raw.includes('"')){let p=u.match(/[.,;:!?]+$/);p&&(u=u.slice(0,-p[0].length),f-=p[0].length)}if(Cb.test(u)||!Ib(u))continue;let g=Eb(u),w=Tb(g)?g:$d(t,g);n.push(w),o.push([s.start,f])}let i=e;for(let[s,u]of o.sort((f,g)=>g[0]-f[0]))i=i.slice(0,s)+i.slice(u);return i=i.replace(/[ \t]{2,}/g," ").replace(/ +([.,;:!?])/g,"$1").trim(),{paths:n,promptText:i}}var Ab=["request_id","session_id","caseId","ref","total_flows","is_single_flow","credits_consumed","durationMs","pct","tookMs","scenarioCount","caseCount","savedCount","fellBack","turnIndex","status","errorCode","objectiveChars","scenarioLimit","perScenarioLimit","memoryEnhancement"],_b=new Set(Ab);function ms(e){let t={};for(let r of Object.keys(e))_b.has(r)&&e[r]!==void 0&&(t[r]=e[r]);return t}import{mkdirSync as Pb,appendFileSync as Db}from"fs";import{join as Md}from"path";function Nd(e,t,r,n,o=mt){let i=Md(o,"tcg",e&&e.length>0?e:"pending"),s=Md(i,"errors.log");try{let u=r instanceof Error?r.stack??r.message:String(r),f=`[${new Date().toISOString()}] phase=${t} ${u}${n?" "+JSON.stringify(n):""}
5
+ `);return(0,Ue.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.red,paddingX:2,paddingY:1,children:[(0,Ue.jsxs)(b,{children:[(0,Ue.jsx)(a,{color:l.red,bold:!0,children:"Device setup"}),(0,Ue.jsx)(a,{color:l.dim,children:u>0?` ${u} blocking issue${u===1?"":"s"}`:" all checks passed"})]}),(0,Ue.jsxs)(b,{flexDirection:"column",marginTop:1,children:[t&&(0,Ue.jsx)(a,{color:l.secondary,children:t}),f.length===0?(0,Ue.jsx)(a,{color:l.dim,children:"No checks reported."}):f.map(x=>(0,Ue.jsxs)(b,{flexDirection:"column",children:[(0,Ue.jsxs)(b,{children:[(0,Ue.jsxs)(a,{color:Jh[x.status],children:[Yh[x.status]," "]}),(0,Ue.jsx)(a,{children:x.label}),x.detail?(0,Ue.jsxs)(a,{color:l.dim,children:[" \u2014 ",x.detail]}):null]}),x.status==="fail"&&x.fixText&&g.get(x.fixText)===x.id?(0,Ue.jsx)(b,{marginLeft:4,children:(0,Ue.jsxs)(a,{color:l.dim,children:["fix: ",x.fixText]})}):null]},x.id))]}),i&&(0,Ue.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,Ue.jsx)(a,{color:l.orange,children:"Press i again to download:"}),(0,Ue.jsx)(a,{color:l.dim,children:p})]}),(0,Ue.jsx)(Vt,{bindings:[{keys:"i",label:"install"},{keys:"r",label:"recheck"}],escBackLabel:"cancel"})]})}var hn=D(Ie(),1);var at=D(H(),1),as=800,cs=3840,ls=600,us=2160;function sd(e,t){if(!t)return"Enter a value";let r=Number(t);if(!Number.isInteger(r))return"Must be a whole number";if(e==="width"){if(r<as)return`Min ${as}`;if(r>cs)return`Max ${cs}`}else{if(r<ls)return`Min ${ls}`;if(r>us)return`Max ${us}`}return null}function ds({currentWidth:e,currentHeight:t,onSelect:r,onCancel:n}){let[o,i]=(0,hn.useState)("width"),[s,u]=(0,hn.useState)(String(e)),[f,g]=(0,hn.useState)(String(t)),[w,p]=(0,hn.useState)(null);Be((c,m)=>{if(m.escape){n();return}if(m.tab||m.rightArrow||m.leftArrow){i(_=>_==="width"?"height":"width"),p(null);return}if(m.return){let _=sd("width",s);if(_){i("width"),p(`Width: ${_}`);return}let U=sd("height",f);if(U){i("height"),p(`Height: ${U}`);return}r(Number(s),Number(f));return}if(m.backspace||m.delete){o==="width"?u(_=>_.slice(0,-1)):g(_=>_.slice(0,-1)),p(null);return}c&&/^\d$/.test(c)&&(o==="width"?u(_=>_+c):g(_=>_+c),p(null))});let x=(c,m,_)=>{let U=o===_,B=U?l.orange:l.secondary;return(0,at.jsxs)(b,{flexDirection:"column",children:[(0,at.jsxs)(a,{color:l.dim,children:[" ",c]}),(0,at.jsx)(b,{borderStyle:"round",borderColor:B,paddingX:1,width:10,children:(0,at.jsxs)(a,{color:U?void 0:l.dim,children:[m||" ",U?(0,at.jsx)(a,{color:l.dim,children:"\u2588"}):""]})}),(0,at.jsxs)(a,{color:l.dim,dimColor:!0,children:[" ",_==="width"?`${as}\u2013${cs}`:`${ls}\u2013${us}`]})]})};return(0,at.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,at.jsx)(a,{color:l.orange,bold:!0,children:"Window Size"}),(0,at.jsxs)(b,{marginTop:1,gap:1,children:[x("Width",s,"width"),(0,at.jsx)(b,{alignItems:"center",marginTop:1,children:(0,at.jsx)(a,{color:l.dim,children:"x"})}),x("Height",f,"height")]}),w&&(0,at.jsx)(b,{marginTop:1,children:(0,at.jsx)(a,{color:l.red,children:w})}),(0,at.jsx)(Vt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ct=D(Ie(),1);async function ad(e,t,r){let n=e.loadCredentials(t,r),o=e.loadClient(t,r);if(n&&o){let s=new ia(r);await Promise.allSettled([s.revokeToken(n.access_token,o.client_id,"access_token"),s.revokeToken(n.refresh_token,o.client_id,"refresh_token")])}e.deleteProfileFull(t,r);let i=e.listProfiles();return i.length>0&&(e.setActiveProfile(i[0].profile),e.setDefaultEnv(i[0].env)),{profile:t,env:r,switchedTo:i.length>0?i[0]:void 0}}function cd(){let[e]=(0,ct.useState)(()=>new Hn),[t,r]=(0,ct.useState)(()=>{let m=e.resolveAuth();if(!m)return!1;if(m.method==="basic")return!0;let{credentials:_}=e.getActiveCredentials();return _?_.expires_at>Date.now()/1e3:!1}),n=(0,ct.useRef)(null),o=(0,ct.useRef)(null),i=(0,ct.useCallback)(()=>{let m=e.resolveAuth();return m?{method:m.method,profile:m.profile,env:m.env}:null},[e]),s=(0,ct.useCallback)(async()=>{let{credentials:m,profile:_,env:U}=e.getActiveCredentials();if(!m||!_||!U)return null;let B=m.expires_at,F=Date.now()/1e3;if(B-F<300){if(o.current)return o.current;let q=(async()=>{try{let $=await sa({creds:e,profile:_,env:U,credentials:m});return $?(r(!0),$.accessToken):null}catch{return r(!1),null}finally{o.current=null}})();return o.current=q,q}return r(!0),m.access_token},[e]),u=(0,ct.useCallback)(()=>{let m=e.resolveAuth();return!m||m.method!=="basic"?null:{username:m.username,access_key:m.access_key}},[e]),f=(0,ct.useCallback)((m,_)=>{n.current?.revoke();let U=Ge(m),B=u(),F=new Ea(U.controllerBaseUrl,s,B,_);return n.current=F,F},[u,s]),g=(0,ct.useCallback)(()=>n.current,[]),w=(0,ct.useCallback)(()=>{let m=u();if(m)return m;let _=n.current?.cached;return _?{username:_.username,access_key:_.access_key}:null},[u]),p=(0,ct.useCallback)(async()=>{let m=n.current;return m?m.resolve():null},[]),x=(0,ct.useCallback)(async(m="default")=>{let _=e.getDefaultEnv();await new Ca(m,_,e).login(),e.setActiveProfile(m);try{let B=new Vr;Ct(e,B,m,_)}catch{}r(!0)},[e]),c=(0,ct.useCallback)(async()=>{let m=e.getActiveProfile();if(!m)return null;let _=e.getDefaultEnv(),U=await ad(e,m,_);return r(!1),{profile:U.profile,env:U.env}},[e]);return{creds:e,tokenValid:t,setTokenValid:r,getToken:s,getBasicAuth:u,getAuthInfo:i,login:x,logout:c,initResolver:f,getResolver:g,getResolvedBasicAuth:w,resolveBasicAuth:p}}var er=D(Ie(),1);import{mkdtempSync as Qh,rmSync as Zh}from"fs";import{join as eb}from"path";import{tmpdir as tb}from"os";function ld(){let[e]=(0,er.useState)(()=>new Vr),t=(0,er.useRef)(null),r=(0,er.useRef)(null),n=(0,er.useRef)(null),o=(0,er.useCallback)(async s=>{if(t.current)return t.current;if(n.current)return n.current;let u=(async()=>{let f=e.load(),g;if(f.chrome_profile_path)g=f.chrome_profile_path.replace("~",process.env.HOME??"~");else{r.current&&(dr("tempDir","Previous temp dir removed before retry"),r.current=null);let p=Qh(eb(tb(),"kane-clean-"));r.current=p,g=p,Ft("tempDir",()=>{try{Zh(p,{recursive:!0,force:!0})}catch{}})}let w=await Aa({userDataDir:g,width:f.window_size.width,height:f.window_size.height,startUrl:s??f.default_url??void 0});return t.current=w,Ft("chrome",()=>{w.kill()}),w})();n.current=u;try{return await u}finally{n.current=null}},[e]),i=(0,er.useCallback)(()=>{dr("chrome","Chrome killed"),dr("tempDir","Temp dir removed"),t.current=null,r.current=null},[]);return{ensureChrome:o,killChrome:i}}var Ro=[{name:"run",description:"Execute a test run",args:'[--url <url>] "objective"'},{name:"login",description:"OAuth login",args:"[--profile name]"},{name:"logout",description:"Logout & revoke tokens",args:"[--profile name]"},{name:"whoami",description:"Show profile info",args:"[--profile name]"},{name:"balance",description:"Show credit balance"},{name:"profiles",description:"Manage profiles",args:"list|switch|delete"},{name:"config",description:"Manage configuration",args:"show|set-window|set-mode|set-assertion-mode|set-network-ws|set-network-sse|set-bug-detection|chrome-profile|project|folder|hints"},{name:"new",description:"Start a fresh session (uploads current first)"},{name:"name",description:"Set the current session's name (used at /exit save)",args:"<new-name>"},{name:"summary",description:"View detailed run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"help",description:"Show command reference"},{name:"clear",description:"Clear chat history"},{name:"exit",description:"Quit kane-cli"}],rb={web:"desktop"};function nb(e){return rb[e]??e}function To(e){let t=e.trim();if(!t.startsWith("/"))return null;let n=t.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let o=n[0],i={},s=1;for(;s<n.length;){let u=n[s];if(u.startsWith("--")){let f=u.slice(2),g=n[s+1];g&&!g.startsWith("--")?(i[f]=g.replace(/^"|"$/g,""),s+=2):(i[f]=void 0,s++)}else{let f=u.replace(/^"|"$/g,"");o==="run"?i.objective=f:o==="config"?i.action?i.value=f:i.action=f:o==="profiles"?i.action=f:o==="summary"&&(i.index=f),s++}}return{command:nb(o),args:i,raw:t}}var dS=[{name:"Testing",commands:Ro.filter(e=>["run","cancel"].includes(e.name))},{name:"Auth",commands:Ro.filter(e=>["login","logout","whoami","balance","profiles"].includes(e.name))},{name:"Settings",commands:Ro.filter(e=>["config"].includes(e.name))},{name:"Session",commands:Ro.filter(e=>["new","name","summary","help","clear","exit"].includes(e.name))}];var ud=[{name:"mobile",description:"Switch the session to an emulator or simulator"},{name:"desktop",description:"Switch the session back to Desktop (Chrome)"},{name:"doctor",description:"Check mobile tooling & devices"},{name:"testmd",description:"Browse & run saved tests under cwd"},{name:"auth",description:"Login, logout, profiles"},{name:"config",description:"Chrome, run & generate settings",args:""},{name:"help",description:"Command reference"},{name:"new",description:"Start a fresh session"},{name:"name",description:"Set the session name",args:"<new-name>"},{name:"exit",description:"Quit kane-cli"}],ob={name:"cancel",description:"Abort current run"},ib={name:"cancel",description:"Cancel current generation"},Wr=[{name:"generate",description:"Switch to Generate mode (test case generator)"},{name:"summary",description:"View run summaries",args:"[index]"},ob,...ud],bn=[{name:"run",description:"Switch back to Run mode"},{name:"save",description:"Save the current test cases"},{name:"view",description:"Open the scenario browser",args:"[S<n>]"},ib,...ud],dd=Wr,sb=new Set(["mobile","doctor"]),ab=new Set(["mobile","desktop"]);function fd(e,t){return t?e.map(r=>ab.has(r.name)?{...r,disabled:!0,disabledReason:`locked \u2014 session ran on ${t.label}; /new to switch`}:r):e}function vn(e,t=Rr()){return t?e:e.filter(r=>!sb.has(r.name))}function ko(e,t="run"){let r=vn(t==="generate"?bn:Wr),n=e.startsWith("/")?e.slice(1):e;return n?r.filter(o=>o.name.startsWith(n)):r}var cb=new Set([...Wr,...bn].map(e=>e.name));function pd(e,t){let r=t==="generate"?bn:Wr;return cb.has(e)?r.some(n=>n.name===e):!0}var md=D(Ie(),1);var yt=D(H(),1);function lb(e){let t=[{id:"device",label:e.deviceMissing?"Choose a device":"Change device"},{id:"app",label:e.appMissing?"Choose an app":"Change app"}];return e.deviceMissing||e.appMissing?e.deviceMissing?t:[t[1],t[0]]:[{id:"continue",label:"Continue"},...t]}function gd({saved:e,onContinue:t,onChangeDevice:r,onChangeApp:n,onCancel:o}){let i=lb(e),[s,u]=(0,md.useState)(0);Be((p,x)=>{if(x.escape){o();return}if(x.upArrow&&u(c=>Math.max(0,c-1)),x.downArrow&&u(c=>Math.min(i.length-1,c+1)),x.return){let c=i[s];c.id==="continue"?t():c.id==="device"?r():n()}});let f=e.deviceMissing?`${e.savedDeviceLabel} \u2014 not connected`:`${e.target.displayName} ${e.target.id}`,g=e.savedAppLabel&&e.savedAppLabel!==e.appPath?` ${e.savedAppLabel}`:"",w=e.appMissing?e.savedAppLabel?`${e.savedAppLabel} \u2014 not found`:"none chosen yet":`${e.appPath}${g}`;return(0,yt.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,yt.jsx)(a,{color:l.orange,bold:!0,children:"Running on"}),(0,yt.jsxs)(b,{marginTop:1,flexDirection:"column",children:[(0,yt.jsxs)(b,{children:[(0,yt.jsx)(a,{color:l.dim,children:" Device "}),(0,yt.jsx)(a,{color:e.deviceMissing?l.red:void 0,children:f})]}),(0,yt.jsxs)(b,{children:[(0,yt.jsx)(a,{color:l.dim,children:" App "}),(0,yt.jsx)(a,{color:e.appMissing?l.red:void 0,children:w})]})]}),(0,yt.jsx)(b,{marginTop:1,flexDirection:"column",children:i.map((p,x)=>(0,yt.jsxs)(a,{color:x===s?l.orange:void 0,children:[x===s?"\u276F ":" ",p.label]},p.id))}),(0,yt.jsx)(Vt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back to chat"})]})}function hd(e,t){let r=t?.trim();return r?e==="generate"?{kind:"reject"}:{kind:"run",objective:r}:e==="generate"?{kind:"toggle"}:{kind:"already"}}var pr=D(H(),1);function fs({flows:e,filterIndex:t}){let r=t!==void 0?e.filter(n=>n.index===t):e;return r.length===0?null:(0,pr.jsx)(b,{flexDirection:"column",children:r.map(n=>(0,pr.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,pr.jsxs)(b,{marginLeft:1,children:[(0,pr.jsx)(a,{color:l.purple,bold:!0,children:"Flow "+n.index+": "}),(0,pr.jsx)(a,{color:l.purple,children:n.objective})]}),(0,pr.jsx)(Ka,{status:n.status==="error"?"failed":n.status,summary:n.summary,duration:n.duration,steps:n.steps,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.reason,creditsConsumed:n.creditsConsumed})]},n.index))})}var mr=D(H(),1),ub={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},db={ok:l.green,error:l.red,cancelled:l.dim};function bd({status:e,command:t,message:r,details:n,accentColor:o}){let i=t.startsWith("/")?t.slice(1):t,s=o??db[e];return(0,mr.jsxs)(b,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,mr.jsx)(b,{marginLeft:1,children:(0,mr.jsxs)(a,{color:s,bold:!0,children:[ub[e]," ",i]})}),(0,mr.jsxs)(b,{borderStyle:"round",borderColor:s,paddingX:2,flexDirection:"column",width:70,children:[(0,mr.jsx)(a,{children:r}),n&&(0,mr.jsx)(a,{color:l.dim,children:n})]})]})}var wn=D(Ie(),1);import{join as yn}from"path";var xn=D(H(),1);function vd({tabs:e,activeIndex:t}){return(0,xn.jsx)(b,{children:e.map((r,n)=>(0,xn.jsx)(b,{marginRight:1,children:n===t?(0,xn.jsx)(a,{color:l.orange,bold:!0,children:`[ ${r} ]`}):(0,xn.jsx)(a,{color:l.dim,children:` ${r} `})},r))})}var A=D(H(),1),Sn=["Commands","Shortcuts","Tests","Setup","About"],Co=21,fb="https://www.testmuai.com/support/docs/kane-cli-introduction",pb="https://github.com/LambdaTest/kane-cli/issues";function xd({onClose:e,version:t,environment:r,sessionId:n,runUrl:o,mode:i="run"}){let[s,u]=(0,wn.useState)(0),[f,g]=(0,wn.useState)(0);(0,wn.useEffect)(()=>{g(0)},[s]);let w=Sn[s],p=w==="Commands"?mb(i):w==="Shortcuts"?gb():w==="Tests"?hb():w==="Setup"?bb():vb({version:t,environment:r,sessionId:n,runUrl:o}),x=p.length,c=f>0,m=f+Co<x,_=p.slice(f,f+Co);Be((B,F)=>{if(F.escape){e();return}if(F.rightArrow||F.tab){u(q=>(q+1)%Sn.length);return}if(F.leftArrow){u(q=>(q-1+Sn.length)%Sn.length);return}if(F.upArrow){g(q=>Math.max(0,q-1));return}if(F.downArrow){g(q=>Math.min(Math.max(0,x-Co),q+1));return}});let U=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return x>Co&&U.push({keys:"\u2191\u2193",label:"scroll"}),(0,A.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,A.jsx)(vd,{tabs:[...Sn],activeIndex:s,onChange:u}),c&&(0,A.jsx)(b,{marginTop:1,children:(0,A.jsx)(a,{color:l.dim,children:"\u25B2 more above"})}),(0,A.jsx)(b,{marginTop:c?0:1,flexDirection:"column",children:_}),m&&(0,A.jsx)(b,{children:(0,A.jsx)(a,{color:l.dim,children:"\u25BC more below"})}),(0,A.jsx)(Vt,{bindings:U,escBackLabel:"back to chat"})]})}function mb(e){let t=vn(e==="generate"?bn:Wr);return[(0,A.jsx)(a,{color:l.dim,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.orange,children:'"search amazon for laptop"'})},"ex"),(0,A.jsx)(b,{marginBottom:1},"sp"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Slash commands"},"cmd-h"),...t.map(r=>(0,A.jsxs)(b,{marginLeft:2,children:[(0,A.jsx)(b,{width:14,children:(0,A.jsxs)(a,{color:l.orange,children:["/",r.name]})}),r.args&&(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:r.args})}),(0,A.jsx)(a,{color:l.dim,children:r.description})]},r.name)),(0,A.jsx)(b,{marginBottom:1},"sp2"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,A.jsx)(b,{marginLeft:2,children:(0,A.jsx)(a,{color:l.dim,children:"/config submenu: show \xB7 run (mode \xB7 assertion-mode) \xB7 generate \xB7 chrome-profile \xB7 project \xB7 folder \xB7 window \xB7 hints"})},"config-sub")]}function Eo(e,t){return[(0,A.jsx)(a,{color:l.dim,bold:!0,children:e},`h-${e}`),...t.map(([r,n],o)=>(0,A.jsxs)(b,{marginLeft:2,children:[(0,A.jsx)(b,{width:26,children:(0,A.jsx)(a,{color:l.orange,children:r})}),(0,A.jsx)(a,{color:l.dim,children:n})]},`r-${e}-${o}`)),(0,A.jsx)(b,{marginBottom:1},`s-${e}`)]}function gb(){return[...Eo("Cursor & word edit",[["\u2190 \u2192","Cursor by char"],["Ctrl+A Ctrl+E","Start / end of line"],["Home End","Start / end (Linux/Win; rare on Mac laptops)"],["Backspace","Delete char before cursor"],["Ctrl+W","Delete word back"],["Ctrl+U","Clear input"],["Ctrl+K","Kill from cursor to end"],["Ctrl+\u2190 Ctrl+\u2192","Word jump (Linux/Win, iTerm2)"],["Option+\u2190 Option+\u2192","Word jump (Mac native)"],["Option+B Option+F","Word jump (Mac, Emacs-style)"],["Alt+Backspace","Delete word back (Option+Delete on Mac)"],["Ctrl+Delete Option+Fn+Del","Delete word forward"]]),...Eo("History & completion",[["\u2191 \u2193","Previous / next history"],["Tab","Accept ghost / fill highlighted command"],["Ctrl+R","Reverse-search history"],["\u21B5","Submit"],["Esc","Close overlay / clear / back"]]),...Eo("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...Eo("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Platform caveats"},"cv-h"),(0,A.jsx)(a,{color:l.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,A.jsx)(a,{color:l.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function hb(){return[(0,A.jsxs)(a,{color:l.dim,children:["Sessions you run here are saved as ",(0,A.jsx)(a,{color:l.orange,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,A.jsx)(b,{marginBottom:1},"t-sp1"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Auto-save"},"t-save-h"),(0,A.jsxs)(a,{color:l.dim,children:[" In ",(0,A.jsx)(a,{color:l.orange,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,A.jsxs)(a,{color:l.dim,children:[" In ",(0,A.jsx)(a,{color:l.orange,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,A.jsxs)(a,{color:l.dim,children:[" Output: ",(0,A.jsx)(a,{color:l.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,A.jsx)(a,{color:l.orange,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,A.jsx)(b,{marginBottom:1},"t-sp2"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,A.jsxs)(a,{color:l.dim,children:[" ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd list"})," \xB7 bare ",(0,A.jsx)(a,{color:l.orange,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,A.jsx)(a,{color:l.dim,children:" The .md file carries its own config (mode, max_steps, variables, \u2026) so the replay is reproducible."},"t-run-2"),(0,A.jsx)(b,{marginBottom:1},"t-sp3"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Type ",(0,A.jsxs)(a,{color:l.orange,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Discarding at the save prompt: press ",(0,A.jsx)(a,{color:l.orange,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function bb(){return[(0,A.jsx)(a,{color:l.dim,bold:!0,children:"1. Login"},"s1-h"),(0,A.jsx)(a,{color:l.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"2. Project & folder"},"s2-h"),(0,A.jsx)(a,{color:l.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"3. Run settings (/config \u2192 Run)"},"s3-h"),(0,A.jsx)(a,{color:l.dim,children:" mode: testing = lenient, saves to TMS \xB7 action = hard-stop on errors (e.g. login w/o creds) so you can step in"},"s3-b"),(0,A.jsx)(a,{color:l.dim,children:" assertion-mode: visual (default) = read/assert via vision \xB7 dom = DOM-based extraction/assertions"},"s3-c"),(0,A.jsx)(b,{marginBottom:1},"spacer-1"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Variables (later wins)"},"v-h"),(0,A.jsxs)(a,{color:l.dim,children:[" ",`${yn(mt,"variables")}/*.json`," (global)"]},"v-1"),(0,A.jsxs)(a,{color:l.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,A.jsx)(a,{color:l.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,A.jsx)(b,{marginBottom:1},"spacer-2"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Context files"},"c-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Global: ",yn(mt,"global-memory.md")]},"c-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,A.jsx)(b,{marginBottom:1},"spacer-3"),(0,A.jsx)(a,{color:l.dim,bold:!0,children:"Paths"},"p-h"),(0,A.jsxs)(a,{color:l.dim,children:[" Config: ",yn(mt,"tui-config.json")," \xB7 Auth: ",yn(mt,"config.json")]},"p-1"),(0,A.jsxs)(a,{color:l.dim,children:[" Sessions: ",yn(mt,"sessions"),"/"]},"p-2")]}function vb({version:e,environment:t,sessionId:r,runUrl:n}){return[(0,A.jsxs)(b,{children:[(0,A.jsx)(a,{color:l.orange,bold:!0,children:"kane-cli "}),(0,A.jsxs)(a,{color:l.muted,children:["v",e]})]},"title"),(0,A.jsx)(b,{marginBottom:1},"sp"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Environment"})}),(0,A.jsx)(a,{children:t})]},"env"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Session"})}),(0,A.jsx)(a,{children:r})]},"sess"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Default URL"})}),(0,A.jsx)(a,{color:l.orange,children:n})]},"url"),(0,A.jsx)(b,{marginBottom:1},"sp2"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Docs"})}),(0,A.jsx)(a,{color:l.orange,underline:!0,children:fb})]},"docs"),(0,A.jsxs)(b,{children:[(0,A.jsx)(b,{width:14,children:(0,A.jsx)(a,{color:l.dim,children:"Bugs"})}),(0,A.jsx)(a,{color:l.orange,underline:!0,children:pb})]},"bugs")]}var Io=D(Ie(),1);import{existsSync as yd,readFileSync as jS,rmSync as xb,unlinkSync as yb}from"fs";function Sd(e){let t=Ya(e);yd(t)&&xb(t,{recursive:!0,force:!0}),yd(e)&&yb(e)}var ps=D(H(),1);function wd({cwd:e,currentOrgId:t,onClose:r,onRun:n,onExport:o}){let[i,s]=(0,Io.useState)("list"),[u,f]=(0,Io.useState)(null),[g,w]=(0,Io.useState)(0);return i==="inspect"&&u?(0,ps.jsx)(Qa,{path:u.path,relPath:u.relPath,onBack:()=>s("list"),onAction:p=>{if(p==="run")n(u);else if(p==="export")o(u);else{try{Sd(u.path)}catch{}f(null),s("list"),w(x=>x+1)}}}):(0,ps.jsx)(Ja,{root:e,currentOrgId:t,onSelect:p=>{f(p),s("inspect")},onCancel:r},g)}var lt=D(Ie(),1);function Rd(e){let[t,r]=(0,lt.useState)(null),[n,o]=(0,lt.useState)(!1),[i,s]=(0,lt.useState)(null),[u,f]=(0,lt.useState)(null),[g,w]=(0,lt.useState)(null),p=(0,lt.useRef)(0),x=(0,lt.useRef)([]),c=(0,lt.useRef)(!1),m=(0,lt.useRef)(null),_=(0,lt.useRef)(e);_.current=e;let U=(0,lt.useCallback)(async q=>{if(c.current)return null;c.current=!0;let $=++p.current,z=[];x.current=z;let ae=K=>`testmd-run-${$}-${K}`,ee={register:(K,pe)=>{let Re=ae(K);z.push(Re),Ft(Re,pe)},deregister:K=>on(ae(K)),cleanup:(K,pe)=>dr(ae(K),pe),remoteLogger:_.current.remoteLogger},te={runSteps:K=>new Promise(pe=>{let Re=()=>{m.current=null,pe()};m.current=Re,r({...K,exitOnComplete:!1,onAllComplete:()=>{K.onAllComplete?.(),Re()}})}),onLockState:K=>{},onAdaptiveHeal:K=>{},onSummary:async K=>{s(K)},onLinks:async K=>{f(K)},runUpload:K=>K.execute(),onAgentEvent:K=>{}};o(!0),s(null),f(null),w(null);try{let K=await _.current.buildInput(q),pe=await bc(K,te,ee);return w(pe),pe}finally{c.current=!1,m.current=null,o(!1),r(null);for(let K of z)dr(K,"run-finished");z.length=0}},[]),B=(0,lt.useCallback)(()=>{for(let $ of x.current)dr($,"cancelled");x.current=[];let q=m.current;m.current=null,q?.()},[]),F=(0,lt.useCallback)(()=>{s(null),f(null),w(null)},[]);return{start:U,cancel:B,clearResult:F,running:n,runViewProps:t,summary:i,links:u,runSummary:g}}var nt=D(Ie(),1);function Td(e={}){let[t,r]=(0,nt.useState)(()=>Zn({requestId:"",objective:""})),[n,o]=(0,nt.useState)(!1),[i,s]=(0,nt.useState)(null),u=(0,nt.useRef)(null),f=(0,nt.useRef)(!1),g=(0,nt.useRef)(null),w=(0,nt.useCallback)(async(U,B,F)=>{f.current=!1;let q=0,$=0,z=0;for await(let ae of U){if(f.current)break;switch(r(ee=>Sc(ee,ae)),ae.type){case"thinking_done":F?.("tcg_thinking",{tookMs:ae.tookMs});break;case"progress":{let ee=Math.min(100,Math.floor(ae.pct/25)*25);ee>z&&(z=ee,F?.("tcg_progress",{pct:ee}));break}case"snapshot":q=ae.data.scenarios.length,$=ae.data.scenarios.reduce((ee,te)=>ee+(te.test_cases?.length??0),0),F?.("tcg_snapshot",{scenarioCount:q,caseCount:$});break;case"clarification":F?.("tcg_clarification",{});break;case"done":F?.("tcg_request_done",{status:ae.status,scenarioCount:q,caseCount:$,durationMs:Date.now()-B});break;case"error":F?.("tcg_request_error",{errorCode:"tcg_request_failed",durationMs:Date.now()-B});break}}},[]),p=(0,nt.useCallback)(async(U,B)=>{if(u.current)throw new Error("useTcgSession: a session is already active; call reset() or end() first");let F=e.makeClient??wc;u.current=F(U),g.current=new AbortController;let q=Zn({requestId:"",objective:B.prompt});r(eo(q));let $;try{$=await u.current.start(B,g.current.signal)}catch(ae){throw u.current=null,g.current=null,r(ee=>({...ee,turnActive:!1})),ae}s($.requestId),r(eo({...$.state,requestId:$.requestId,objective:B.prompt}));let z=Date.now();e.log?.("tcg_request_start",{request_id:$.requestId,objectiveChars:B.prompt.length,scenarioLimit:B.scenarioLimit,perScenarioLimit:B.perScenarioLimit,memoryEnhancement:B.memoryEnhancement}),await w($.events,z,e.log)},[w,e.makeClient,e.log]),x=(0,nt.useCallback)(async(U,B)=>{if(!u.current||!i)throw new Error("useTcgSession: chat() with no active request");r(F=>eo(yc(F)));try{await u.current.chat(i,U,B)}catch(F){throw r(q=>({...q,turnActive:!1})),F}},[i]),c=(0,nt.useCallback)(async()=>{if(!(!i||!u.current)){f.current=!0,g.current&&g.current.abort();try{await u.current.cancel(i)}catch{}u.current=null,s(null),r(U=>({...U,turnActive:!1}))}},[i]),m=(0,nt.useCallback)(async()=>{if(!(!i||!u.current)){f.current=!0,g.current&&g.current.abort();try{await u.current.end(i)}catch{}u.current=null,s(null),r(U=>({...U,turnActive:!1}))}},[i]),_=(0,nt.useCallback)(()=>{f.current=!0,g.current&&g.current.abort(),g.current=null,r(Zn({requestId:"",objective:""})),s(null),o(!1),u.current=null},[]);return(0,nt.useEffect)(()=>()=>{f.current=!0,g.current&&g.current.abort()},[]),{state:t,isStreaming:t.turnActive,isTerminal:xc(t.status),isReconnecting:n,turnActive:t.turnActive,inReview:t.scenarios.length>0&&!t.turnActive&&!Ai(t.status),isSessionClosed:Ai(t.status),requestId:i,startWith:p,chat:x,cancel:c,end:m,reset:_}}var be=D(Ie(),1);import{join as Xr,resolve as Lb}from"path";import{mkdirSync as gs,writeFileSync as jd,appendFileSync as Bb}from"fs";function kd(e){let t=Ge(e.env);return!t||!t.testGeneratorBaseUrl?{ok:!1,error:`Unknown environment "${e.env}" \u2014 fix default_env via /config`}:{ok:!0,conn:{baseUrl:`${t.testGeneratorBaseUrl}/test-generator/api/v2`,tmsBaseUrl:t.tmsBaseUrl,authResolver:e.resolver,projectId:e.projectId,folderId:e.folderId,log:e.log}}}function Cd(e){return e.turnActive?!0:e.requestId!=null&&!e.isSessionClosed&&!e.saved}function Ed(e){return e.isRunning||e.hasLiveResults}function Id(e){let t=(e??"").trim().match(/^[sS](\d+)$/);if(!t)return{level:"scenarios"};let r=parseInt(t[1],10);return r<1?{level:"scenarios"}:{level:"cases",scenarioIdx:r-1}}function Ad(e,t){return`S${e+1}.C${t+1}`}function _d(e,t){return e.reduce((r,n)=>r+(n.test_cases??[]).filter(o=>!t.has(o.id)).length,0)}function Pd(e,t){return e.map(r=>({...r,test_cases:(r.test_cases??[]).filter(n=>!t.has(n.id))})).filter(r=>(r.test_cases??[]).length>0)}var Rn=D(Ie(),1);import{createHash as Sb}from"crypto";function wb(e){return Sb("sha1").update(JSON.stringify({t:e.title,p:e.preconditions,m:e.manual_steps})).digest("hex")}var Ao=class{constructor(t){this.deps=t;this.max=t.maxConcurrent??3}cache=new Map;caseById=new Map;queue=[];active=0;max;onSnapshot(t){t.forEach((r,n)=>{(r.test_cases??[]).forEach((o,i)=>{if(!qt(o)||o.manual_steps==null)return;let s=wb(o),u=this.cache.get(o.id);u&&u.hash===s||(u?.controller?.abort(),this.caseById.set(o.id,o),this.cache.set(o.id,{hash:s,ref:Ad(n,i),status:"pending"}),this.queue.includes(o.id)||this.queue.push(o.id))})}),this.pump()}pump(){for(;this.active<this.max&&this.queue.length>0;){let t=this.queue.shift(),r=this.cache.get(t),n=this.caseById.get(t);!r||!n||r.status!=="pending"||(this.active++,this.runOne(t,n,r))}}async runOne(t,r,n){let o=`bifurcation-${t}`,i=new AbortController;n.controller=i;let s=this.deps.run??this.defaultRun.bind(this);Ft(o,()=>i.abort());let u=Date.now();try{this.safeLog("tcg_bif_start",{caseId:t,ref:n.ref});let f=await s(Ec(r),i.signal);if(!i.signal.aborted&&this.cache.get(t)===n){n.status="done",n.result=f;try{this.deps.persist?.(t,f,n.ref)}catch{}this.safeLog("tcg_bif_done",{caseId:t,ref:n.ref,total_flows:f.total_flows,is_single_flow:f.is_single_flow,credits_consumed:f.credits_consumed,durationMs:Date.now()-u})}}catch(f){!i.signal.aborted&&this.cache.get(t)===n&&(n.status="error",n.error=f.message,this.safeLog("tcg_bif_error",{caseId:t,ref:n.ref,errorCode:"bifurcation_failed",durationMs:Date.now()-u}))}finally{on(o),this.active--,this.pump()}}safeLog(t,r){try{this.deps.log?.(t,r)}catch{}}async defaultRun(t,r){let n=await this.deps.resolveAuth(),o=Ic({objective:t,model:this.deps.model,sessionId:this.deps.sessionId,auth:n});return Ac(o,this.deps.spawnOpts,r)}getStatus(t){return this.cache.get(t)?.status}getResult(t){return this.cache.get(t)?.result}dispose(){for(let[t,r]of this.cache)r.controller?.abort(),on(`bifurcation-${t}`);this.cache.clear(),this.caseById.clear(),this.queue=[],this.active=0}};function Dd(e){let t=(0,Rn.useRef)(null);return(0,Rn.useEffect)(()=>{if(!e.enabled)return;let r=e.log,n=r?(o,i,s,u)=>r(i,u??{}):void 0;return t.current=new Ao({model:e.model,sessionId:e.sessionId,resolveAuth:e.resolveAuth,spawnOpts:{environment:e.environment,log:n},log:r,persist:e.persist}),()=>{t.current?.dispose(),t.current=null}},[e.enabled,e.sessionId,e.model,e.environment]),(0,Rn.useEffect)(()=>{t.current&&t.current.onSnapshot(e.scenarios)},[e.scenarios]),{getStatus:r=>t.current?.getStatus(r),getResult:r=>t.current?.getResult(r),manager:t}}import{resolve as $d,isAbsolute as Tb,extname as kb}from"path";import{homedir as Bd}from"os";var Rb=/(?<=^|\s)@(?:"([^"]*)"|([^\s@]+))/g;function Ld(e){let t=[];for(let r of e.matchAll(Rb)){let n=r[1]!==void 0?r[1]:r[2];t.push({raw:r[0],value:n,start:r.index,end:r.index+r[0].length})}return t}var Cb=/^s\d+(\.c\d+)?$/i;function Eb(e){return e==="~"?Bd():e.startsWith("~/")?$d(Bd(),e.slice(2)):e}function Ib(e){return/^https?:\/\//i.test(e)?!1:e.includes("/")?!0:to.has(kb(e).toLowerCase())}function Od(e,t){let r=Ld(e),n=[],o=[];for(let s of r){let u=s.value,f=s.end;if(!s.raw.includes('"')){let p=u.match(/[.,;:!?]+$/);p&&(u=u.slice(0,-p[0].length),f-=p[0].length)}if(Cb.test(u)||!Ib(u))continue;let g=Eb(u),w=Tb(g)?g:$d(t,g);n.push(w),o.push([s.start,f])}let i=e;for(let[s,u]of o.sort((f,g)=>g[0]-f[0]))i=i.slice(0,s)+i.slice(u);return i=i.replace(/[ \t]{2,}/g," ").replace(/ +([.,;:!?])/g,"$1").trim(),{paths:n,promptText:i}}var Ab=["request_id","session_id","caseId","ref","total_flows","is_single_flow","credits_consumed","durationMs","pct","tookMs","scenarioCount","caseCount","savedCount","fellBack","turnIndex","status","errorCode","objectiveChars","scenarioLimit","perScenarioLimit","memoryEnhancement"],_b=new Set(Ab);function ms(e){let t={};for(let r of Object.keys(e))_b.has(r)&&e[r]!==void 0&&(t[r]=e[r]);return t}import{mkdirSync as Pb,appendFileSync as Db}from"fs";import{join as Md}from"path";function Nd(e,t,r,n,o=mt){let i=Md(o,"tcg",e&&e.length>0?e:"pending"),s=Md(i,"errors.log");try{let u=r instanceof Error?r.stack??r.message:String(r),f=`[${new Date().toISOString()}] phase=${t} ${u}${n?" "+JSON.stringify(n):""}
6
6
  `;Pb(i,{recursive:!0}),Db(s,f)}catch{}return s}var We=D(H(),1);async function $b(e){let t=e?.getResolvedBasicAuth?.();if(t)return{username:t.username,access_key:t.access_key};let r=await e?.getToken?.();return typeof r=="string"&&r.length>0?{auth:{type:"bearer",token:r}}:{}}function Vd(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function Fd(e){let{tcg:t,initialChatMode:r,tuiConfig:n,auth:o,session:i,appendStatic:s,handleInput:u,freezeTcgArtifact:f,rearmArtifactFreeze:g,initialGenerateLimits:w,ensureProjectAndFolder:p,config:x}=e,[c,m]=(0,be.useState)(r??"run"),[_,U]=(0,be.useState)(null),[B,F]=(0,be.useState)(null),[q,$]=(0,be.useState)(null),[z,ae]=(0,be.useState)(0),[ee,te]=(0,be.useState)(!1),K=(0,be.useRef)(null),pe=(0,be.useRef)(()=>{}),Re=(0,be.useCallback)(()=>$b(o),[o]),me=(0,be.useRef)(null);me.current=t.requestId;let $e=(0,be.useCallback)((Q,ue)=>{let ce=Q.endsWith("_error")?"warn":"info",ie=ms({request_id:me.current??void 0,...ue});i.log(ce,Q,JSON.stringify(ie),ie);try{let de=typeof ie.request_id=="string"&&ie.request_id||me.current||"unknown",Te=Xr(mt,"tcg",de);gs(Te,{recursive:!0}),Bb(Xr(Te,"tcg_tui.log"),`[${new Date().toISOString()}] ${Q} ${JSON.stringify(ie)}
7
- `)}catch{}},[i]),He=(0,be.useCallback)((Q,ue)=>{let ce=Nd(me.current,ue.phase,Q),ie=typeof Q?.status=="number"?Q.status:void 0;$e(`${ue.phase}_error`,{errorCode:`${ue.phase}_failed`,status:ie});let de=ue.phase==="upload"?"\u2717 Couldn't upload attachments \u2014 generation not started. Try again.":"\u2717 Generation failed \u2014 send another request.";s((0,We.jsxs)(b,{flexDirection:"column",marginTop:1,marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:de}),(0,We.jsx)(a,{color:l.dim,children:`details: ${ce}`})]})),U(null)},[$e,s]),st=(0,be.useRef)(0),zt=(0,be.useCallback)((Q,ue,ce)=>{try{let ie=Xr(mt,"tcg",me.current??"unknown","bifurcation");gs(ie,{recursive:!0}),jd(Xr(ie,`${Q}.json`),JSON.stringify({request_id:me.current,ref:ce,...ue},null,2))}catch{}},[]),Rt=Dd({scenarios:t.state?.scenarios??[],model:n.model,sessionId:i.sessionId,resolveAuth:Re,environment:o?.creds?.getDefaultEnv?.(),enabled:!!t.requestId&&!t.isSessionClosed,log:$e,persist:zt}),ge=(0,be.useRef)(null);(0,be.useEffect)(()=>{let Q=t.requestId;if(!Q||!t.isSessionClosed&&!t.isTerminal)return;let ue=t.state?.scenarios??[];if(ue.length!==0&&ge.current!==Q){ge.current=Q;try{let ce=Xr(mt,"tcg",Q);gs(ce,{recursive:!0}),jd(Xr(ce,"request.json"),JSON.stringify({request_id:Q,objective:t.state?.objective,headline:t.state?.headline,scenarios:ue,status:t.state?.status},null,2))}catch{}}},[t.requestId,t.isTerminal,t.isSessionClosed,t.state?.scenarios,t.state?.status,t.state?.objective,t.state?.headline]);let ut=(0,be.useCallback)((Q,ue=1500)=>{$(Q),K.current&&clearTimeout(K.current),K.current=setTimeout(()=>{$(null),K.current=null},ue)},[]);(0,be.useEffect)(()=>()=>{K.current&&clearTimeout(K.current)},[]);let Ot=(0,be.useCallback)((Q,ue)=>{let ce=o.getResolver();if(!ce)return{ok:!1,error:"Not logged in \u2014 use /login"};let ie=kd({env:o.creds.getDefaultEnv(),resolver:ce,projectId:Q??n.project_id??void 0,folderId:ue??n.folder_id??void 0,log:(de,Te,dt,P)=>i.log(de,Te,"",ms(P??{}))});return ie.ok?{ok:!0,conn:ie.conn}:{ok:!1,error:ie.error}},[o,n,i]),Oe=(0,be.useRef)(!1),Le=(0,be.useRef)(null),[Kt,Ne]=(0,be.useState)(!1),Yt=(0,be.useCallback)((Q,ue,ce,ie,de)=>{let Te=process.cwd(),{paths:dt,promptText:P}=Od(Q,Te);return Pc({promptText:P,filePaths:dt,cwd:Te,scenarios:t.state?.scenarios??[],isRefine:ue,conn:ce,deps:{validate:_c,upload:(L,Y,X)=>Dc(L,Y,X,{signal:de}),buildMappings:Lc},onValidated:ie})},[t]),mr=(0,be.useRef)(!1);(0,be.useEffect)(()=>{if(c!=="generate"){mr.current=!1;return}mr.current||n.project_id&&n.folder_id||p&&o.getResolver()&&(mr.current=!0,p())},[c,n.project_id,n.folder_id,p,o]);let Cr=(0,be.useCallback)(async Q=>{U(null),F(null),te(!1);let ue=Q.trim();if(!ue)return;if(ue.startsWith("/")){pe.current(ue),ae(L=>L+1);return}let ce=n.project_id??null,ie=n.folder_id??null;if(p){let L=await p();if(L)ce=L.projectId,ie=L.folderId;else if(x){let Y=x.load();ce=Y.project_id??ce,ie=Y.folder_id??ie}}else if(x){let L=x.load();ce=L.project_id??ce,ie=L.folder_id??ie}if(!ce||!ie){F("Set a project and folder first \u2014 use /config");return}let de=Ot(ce,ie);if(!de.ok){U(de.error);return}if(Oe.current)return;Oe.current=!0;let Te=new AbortController;Le.current=Te;let dt=de.conn,P;try{P=await Yt(ue,!1,dt,()=>{s((0,We.jsx)(b,{marginTop:1,children:(0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${ue}`})})),Ne(!0)},Te.signal)}catch(L){if(L instanceof _i){F(L.errors.join(`
8
- `));return}if(Vd(L))return;He(L,{phase:"upload"});return}finally{Oe.current=!1,Ne(!1),Le.current===Te&&(Le.current=null)}if(!Te.signal.aborted){for(let L of P.warnings)e.emitFeedback("ok","/generate",L,void 0,l.generateAccent);f(),t.reset(),g();try{let L=w??{};await t.startWith(dt,{prompt:P.promptText,attachments:P.attachments,scenarioLimit:L.scenarioLimit??n.generate.scenario_limit,perScenarioLimit:L.perScenarioLimit??n.generate.per_scenario_limit,memoryEnhancement:n.generate.memory_enabled})}catch(L){He(L,{phase:"generation"})}}},[n,t,Ot,Yt,e,p,x,w,s,f,g,He]),Kr=(0,be.useCallback)(()=>U(null),[]),Er=(0,be.useCallback)(async Q=>{let ue=Ot();if(!ue.ok){U(ue.error);return}if(Oe.current)return;Oe.current=!0;let ce=new AbortController;Le.current=ce;let ie;try{ie=await Yt(Q,!0,ue.conn,()=>{s((0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${Q}`})),st.current+=1,$e("tcg_refine",{turnIndex:st.current}),Ne(!0)},ce.signal)}catch(de){if(de instanceof _i){F(de.errors.join(`
9
- `));return}if(Vd(de))return;He(de,{phase:"upload"});return}finally{Oe.current=!1,Ne(!1),Le.current===ce&&(Le.current=null)}if(!ce.signal.aborted){for(let de of ie.warnings)e.emitFeedback("ok","/generate",de,void 0,l.generateAccent);try{await t.chat(ie.promptText,{mappings:ie.mappings,attachments:ie.attachments})}catch(de){He(de,{phase:"chat"})}}},[s,t,$e,Ot,Yt,e,He]),gr=(0,be.useCallback)(async Q=>{if(!Oe.current){Oe.current=!0,s((0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${Q}`}));try{await t.chat(Q)}catch(ue){He(ue,{phase:"chat"})}finally{Oe.current=!1}}},[s,t,He]),hr=(0,be.useCallback)(Q=>{let ue=To(Q);if(ue?.command==="view"){let ce=Q.trim().split(/\s+/).slice(1)[0];if(t.state.scenarios.length===0){e.emitFeedback("ok","/view","(no generation yet)");return}let ie=Id(ce);if(ie.level==="cases"&&ie.scenarioIdx>=t.state.scenarios.length){e.emitFeedback("error","/view",`No scenario S${ie.scenarioIdx+1}`);return}e.openBrowse(ie);return}if(ue?.command==="save"){let ce=t.state.scenarios;if(ce.length===0){e.emitFeedback("error","/save","Nothing to save yet.");return}let ie=Pd(ce,e.excluded),de=ie.reduce((L,Y)=>L+(Y.test_cases??[]).filter(qt).length,0);if(de===0){e.emitFeedback("error","/save",_d(ce,e.excluded)===0?"All cases removed \u2014 nothing to save.":"No functional test cases to save.");return}let Te={...t.state,scenarios:ie},dt=Q.trim().split(/\s+/).slice(1)[0],P=dt?Lb(process.cwd(),dt):process.cwd();te(!0),e.freezeTcgArtifact(),(async()=>{let L=ie.flatMap(le=>(le.test_cases??[]).filter(qt)),Y=Date.now()+3e4;for(;Date.now()<Y&&L.some(le=>Rt.getStatus(le.id)==="pending");)await new Promise(le=>setTimeout(le,250));let X=new Map;for(let le of L)X.set(le.id,Rt.getStatus(le.id)==="done"?Rt.getResult(le.id):void 0);t.end();let Z=0,Se=le=>{let St=X.get(le.id);return St?Tc(St,le):(Z++,kc(le))};try{let le=await Cc(Te,P,{},Se);$e("tcg_save",{savedCount:le.paths.length,fellBack:Z})}catch(le){e.emitFeedback("error","/save",`Save failed: ${le.message}`);return}let Je=`test case${de===1?"":"s"}`;e.emitFeedback("ok","/save",Z>0?`Saved ${de} ${Je} \xB7 ${Z} fell back to raw steps.`:`Saved ${de} ${Je}.`)})();return}ue?.command==="new"&&te(!1),u(Q)},[u,e,t,Rt,$e]);pe.current=hr;let Tt=(0,be.useCallback)(Q=>{m(Q),ae(ue=>ue+1)},[]),br=(0,be.useCallback)(Q=>{let ue=c==="generate"&&Q==="run",ce=c==="run"&&Q==="generate",ie=Cd({requestId:t.requestId,isSessionClosed:t.isSessionClosed,turnActive:t.turnActive,saved:ee}),de=Ed({isRunning:e.runner.isRunning,hasLiveResults:e.runner.lastRunEnd!=null});return ue&&ie?(e.openSwitchConfirm("run"),!1):ce&&de?(e.openSwitchConfirm("generate"),!1):(Tt(Q),!0)},[c,t.requestId,t.isSessionClosed,t.turnActive,ee,e,Tt]),Ir=(0,be.useCallback)(async Q=>{c==="generate"?(e.freezeTcgArtifact(),await t.end().catch(()=>{}),t.reset(),te(!1),e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Discarded generation"})]}))):(e.runner.isRunning&&e.runner.cancelRun(),e.runner.clearLastRun(),e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Discarded run"})]}))),Tt(Q),Q==="generate"?e.emitFeedback("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):e.emitFeedback("ok","/run","Switched to Run mode.",void 0,l.orange)},[c,t,e,Tt]),vr=(0,be.useCallback)(()=>{if(t.isStreaming)e.freezeTcgArtifact(),t.cancel();else if(Le.current)Le.current.abort();else return;e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Generation cancelled"})]}))},[e,t]);return{chatMode:c,tcgError:_,tcgValidationError:B,composeIdleHint:q,inputClearSeq:z,submitting:Kt,handleGenerateSubmit:Cr,onRefine:Er,onClarificationAnswer:gr,onSlash:hr,onClearError:Kr,flashComposeHint:ut,setInputClearSeq:ae,setChatMode:m,setTcgError:U,setTcgValidationError:F,generateSaved:ee,requestSwitch:br,confirmSwitch:Ir,cancelGenerate:vr,bifurcation:Rt,tcgLog:$e}}var Wt=D(Ie(),1);function _o(e){return e.level==="cases"?{level:"cases",scenarioIdx:e.scenarioIdx,caseIdx:0,cursor:0}:{level:"scenarios",scenarioIdx:0,caseIdx:0,cursor:0}}var Ob=(e,t)=>Math.max(0,Math.min(t,e));function hs(e,t,r){switch(t.type){case"open":return _o(t.target);case"move":{let n=e.level==="scenarios"?r.length-1:e.level==="cases"?(r[e.scenarioIdx]??1)-1:0;return{...e,cursor:Ob(e.cursor+t.delta,Math.max(0,n))}}case"enter":return e.level==="scenarios"?{...e,level:"cases",scenarioIdx:e.cursor,caseIdx:0,cursor:0}:e.level==="cases"?{...e,level:"detail",caseIdx:e.cursor}:e;case"back":return e.level==="detail"?{...e,level:"cases",cursor:e.caseIdx}:e.level==="cases"?{...e,level:"scenarios",cursor:e.scenarioIdx}:e;default:return e}}function Ud(e){let[t,r]=(0,Wt.useState)(null),[n,o]=(0,Wt.useReducer)((p,x)=>hs(p,x,e),_o({level:"scenarios"})),[i,s]=(0,Wt.useState)(new Set),u=(0,Wt.useCallback)(p=>{r(p),o({type:"open",target:p})},[]),f=(0,Wt.useCallback)(()=>r(null),[]),g=(0,Wt.useCallback)(p=>{s(x=>{let c=new Set(x);return c.has(p)?c.delete(p):c.add(p),c})},[]),w=(0,Wt.useCallback)(p=>{s(x=>{let c=new Set(x),m=p.length>0&&p.every(_=>c.has(_));return p.forEach(_=>m?c.delete(_):c.add(_)),c})},[]);return{target:t,open:u,close:f,isOpen:t!=null,state:n,excluded:i,toggleCase:g,toggleScenario:w}}var Po=D(Ie(),1);function qd(){return{committedChat:0,committedThinking:0,prevTurnActive:!1}}function Hd(e,t,r){let n=[],o={...e};if(e.prevTurnActive&&!r&&t.thinkingLog.length>e.committedThinking){let s=t.thinkingLog.slice(e.committedThinking).reduce((f,g)=>f+(g.tookMs??0),0),u=Math.round(s/1e3);n.push({kind:"thinking-summary",text:` thought for ${u}s`}),o.committedThinking=t.thinkingLog.length}o.prevTurnActive=r;for(let i=e.committedChat;i<t.chatLog.length;i++)n.push({kind:"chat",text:t.chatLog[i].text});return o.committedChat=t.chatLog.length,{items:n,next:o}}var bs=D(H(),1);function Mb(e){return e.kind==="thinking-summary"?(0,bs.jsx)(a,{color:l.dim,children:e.text}):(0,bs.jsx)(Bc,{text:e.text})}function Gd(e,t,r){let n=(0,Po.useRef)(qd());(0,Po.useEffect)(()=>{let{items:o,next:i}=Hd(n.current,e,t);n.current=i;for(let s of o)r(Mb(s))})}var Xe=D(Ie(),1);import{readFileSync as Nb,writeFileSync as jb,renameSync as Vb,mkdirSync as Fb}from"fs";import{dirname as Ub}from"path";var vs=1,Wd=()=>({schemaVersion:vs,numStartups:0,perHint:{}}),Do=class{constructor(t=qs){this.path=t;this.data=this.read()}data;read(){try{let t=JSON.parse(Nb(this.path,"utf-8"));return t.schemaVersion!==vs?Wd():{schemaVersion:vs,numStartups:typeof t.numStartups=="number"?t.numStartups:0,perHint:t.perHint??{}}}catch{return Wd()}}write(){try{Fb(Ub(this.path),{recursive:!0});let t=`${this.path}.tmp`;jb(t,JSON.stringify(this.data,null,2)+`
7
+ `)}catch{}},[i]),He=(0,be.useCallback)((Q,ue)=>{let ce=Nd(me.current,ue.phase,Q),ie=typeof Q?.status=="number"?Q.status:void 0;$e(`${ue.phase}_error`,{errorCode:`${ue.phase}_failed`,status:ie});let de=ue.phase==="upload"?"\u2717 Couldn't upload attachments \u2014 generation not started. Try again.":"\u2717 Generation failed \u2014 send another request.";s((0,We.jsxs)(b,{flexDirection:"column",marginTop:1,marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:de}),(0,We.jsx)(a,{color:l.dim,children:`details: ${ce}`})]})),U(null)},[$e,s]),st=(0,be.useRef)(0),zt=(0,be.useCallback)((Q,ue,ce)=>{try{let ie=Xr(mt,"tcg",me.current??"unknown","bifurcation");gs(ie,{recursive:!0}),jd(Xr(ie,`${Q}.json`),JSON.stringify({request_id:me.current,ref:ce,...ue},null,2))}catch{}},[]),Rt=Dd({scenarios:t.state?.scenarios??[],model:n.model,sessionId:i.sessionId,resolveAuth:Re,environment:o?.creds?.getDefaultEnv?.(),enabled:!!t.requestId&&!t.isSessionClosed,log:$e,persist:zt}),ge=(0,be.useRef)(null);(0,be.useEffect)(()=>{let Q=t.requestId;if(!Q||!t.isSessionClosed&&!t.isTerminal)return;let ue=t.state?.scenarios??[];if(ue.length!==0&&ge.current!==Q){ge.current=Q;try{let ce=Xr(mt,"tcg",Q);gs(ce,{recursive:!0}),jd(Xr(ce,"request.json"),JSON.stringify({request_id:Q,objective:t.state?.objective,headline:t.state?.headline,scenarios:ue,status:t.state?.status},null,2))}catch{}}},[t.requestId,t.isTerminal,t.isSessionClosed,t.state?.scenarios,t.state?.status,t.state?.objective,t.state?.headline]);let ut=(0,be.useCallback)((Q,ue=1500)=>{$(Q),K.current&&clearTimeout(K.current),K.current=setTimeout(()=>{$(null),K.current=null},ue)},[]);(0,be.useEffect)(()=>()=>{K.current&&clearTimeout(K.current)},[]);let Ot=(0,be.useCallback)((Q,ue)=>{let ce=o.getResolver();if(!ce)return{ok:!1,error:"Not logged in \u2014 use /login"};let ie=kd({env:o.creds.getDefaultEnv(),resolver:ce,projectId:Q??n.project_id??void 0,folderId:ue??n.folder_id??void 0,log:(de,Te,dt,P)=>i.log(de,Te,"",ms(P??{}))});return ie.ok?{ok:!0,conn:ie.conn}:{ok:!1,error:ie.error}},[o,n,i]),Oe=(0,be.useRef)(!1),Le=(0,be.useRef)(null),[Kt,Ne]=(0,be.useState)(!1),Yt=(0,be.useCallback)((Q,ue,ce,ie,de)=>{let Te=process.cwd(),{paths:dt,promptText:P}=Od(Q,Te);return Pc({promptText:P,filePaths:dt,cwd:Te,scenarios:t.state?.scenarios??[],isRefine:ue,conn:ce,deps:{validate:_c,upload:(L,Y,X)=>Dc(L,Y,X,{signal:de}),buildMappings:Lc},onValidated:ie})},[t]),gr=(0,be.useRef)(!1);(0,be.useEffect)(()=>{if(c!=="generate"){gr.current=!1;return}gr.current||n.project_id&&n.folder_id||p&&o.getResolver()&&(gr.current=!0,p())},[c,n.project_id,n.folder_id,p,o]);let Er=(0,be.useCallback)(async Q=>{U(null),F(null),te(!1);let ue=Q.trim();if(!ue)return;if(ue.startsWith("/")){pe.current(ue),ae(L=>L+1);return}let ce=n.project_id??null,ie=n.folder_id??null;if(p){let L=await p();if(L)ce=L.projectId,ie=L.folderId;else if(x){let Y=x.load();ce=Y.project_id??ce,ie=Y.folder_id??ie}}else if(x){let L=x.load();ce=L.project_id??ce,ie=L.folder_id??ie}if(!ce||!ie){F("Set a project and folder first \u2014 use /config");return}let de=Ot(ce,ie);if(!de.ok){U(de.error);return}if(Oe.current)return;Oe.current=!0;let Te=new AbortController;Le.current=Te;let dt=de.conn,P;try{P=await Yt(ue,!1,dt,()=>{s((0,We.jsx)(b,{marginTop:1,children:(0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${ue}`})})),Ne(!0)},Te.signal)}catch(L){if(L instanceof _i){F(L.errors.join(`
8
+ `));return}if(Vd(L))return;He(L,{phase:"upload"});return}finally{Oe.current=!1,Ne(!1),Le.current===Te&&(Le.current=null)}if(!Te.signal.aborted){for(let L of P.warnings)e.emitFeedback("ok","/generate",L,void 0,l.generateAccent);f(),t.reset(),g();try{let L=w??{};await t.startWith(dt,{prompt:P.promptText,attachments:P.attachments,scenarioLimit:L.scenarioLimit??n.generate.scenario_limit,perScenarioLimit:L.perScenarioLimit??n.generate.per_scenario_limit,memoryEnhancement:n.generate.memory_enabled})}catch(L){He(L,{phase:"generation"})}}},[n,t,Ot,Yt,e,p,x,w,s,f,g,He]),Kr=(0,be.useCallback)(()=>U(null),[]),Ir=(0,be.useCallback)(async Q=>{let ue=Ot();if(!ue.ok){U(ue.error);return}if(Oe.current)return;Oe.current=!0;let ce=new AbortController;Le.current=ce;let ie;try{ie=await Yt(Q,!0,ue.conn,()=>{s((0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${Q}`})),st.current+=1,$e("tcg_refine",{turnIndex:st.current}),Ne(!0)},ce.signal)}catch(de){if(de instanceof _i){F(de.errors.join(`
9
+ `));return}if(Vd(de))return;He(de,{phase:"upload"});return}finally{Oe.current=!1,Ne(!1),Le.current===ce&&(Le.current=null)}if(!ce.signal.aborted){for(let de of ie.warnings)e.emitFeedback("ok","/generate",de,void 0,l.generateAccent);try{await t.chat(ie.promptText,{mappings:ie.mappings,attachments:ie.attachments})}catch(de){He(de,{phase:"chat"})}}},[s,t,$e,Ot,Yt,e,He]),hr=(0,be.useCallback)(async Q=>{if(!Oe.current){Oe.current=!0,s((0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${Q}`}));try{await t.chat(Q)}catch(ue){He(ue,{phase:"chat"})}finally{Oe.current=!1}}},[s,t,He]),br=(0,be.useCallback)(Q=>{let ue=To(Q);if(ue?.command==="view"){let ce=Q.trim().split(/\s+/).slice(1)[0];if(t.state.scenarios.length===0){e.emitFeedback("ok","/view","(no generation yet)");return}let ie=Id(ce);if(ie.level==="cases"&&ie.scenarioIdx>=t.state.scenarios.length){e.emitFeedback("error","/view",`No scenario S${ie.scenarioIdx+1}`);return}e.openBrowse(ie);return}if(ue?.command==="save"){let ce=t.state.scenarios;if(ce.length===0){e.emitFeedback("error","/save","Nothing to save yet.");return}let ie=Pd(ce,e.excluded),de=ie.reduce((L,Y)=>L+(Y.test_cases??[]).filter(qt).length,0);if(de===0){e.emitFeedback("error","/save",_d(ce,e.excluded)===0?"All cases removed \u2014 nothing to save.":"No functional test cases to save.");return}let Te={...t.state,scenarios:ie},dt=Q.trim().split(/\s+/).slice(1)[0],P=dt?Lb(process.cwd(),dt):process.cwd();te(!0),e.freezeTcgArtifact(),(async()=>{let L=ie.flatMap(le=>(le.test_cases??[]).filter(qt)),Y=Date.now()+3e4;for(;Date.now()<Y&&L.some(le=>Rt.getStatus(le.id)==="pending");)await new Promise(le=>setTimeout(le,250));let X=new Map;for(let le of L)X.set(le.id,Rt.getStatus(le.id)==="done"?Rt.getResult(le.id):void 0);t.end();let Z=0,Se=le=>{let St=X.get(le.id);return St?Tc(St,le):(Z++,kc(le))};try{let le=await Cc(Te,P,{},Se);$e("tcg_save",{savedCount:le.paths.length,fellBack:Z})}catch(le){e.emitFeedback("error","/save",`Save failed: ${le.message}`);return}let Je=`test case${de===1?"":"s"}`;e.emitFeedback("ok","/save",Z>0?`Saved ${de} ${Je} \xB7 ${Z} fell back to raw steps.`:`Saved ${de} ${Je}.`)})();return}ue?.command==="new"&&te(!1),u(Q)},[u,e,t,Rt,$e]);pe.current=br;let Tt=(0,be.useCallback)(Q=>{m(Q),ae(ue=>ue+1)},[]),vr=(0,be.useCallback)(Q=>{let ue=c==="generate"&&Q==="run",ce=c==="run"&&Q==="generate",ie=Cd({requestId:t.requestId,isSessionClosed:t.isSessionClosed,turnActive:t.turnActive,saved:ee}),de=Ed({isRunning:e.runner.isRunning,hasLiveResults:e.runner.lastRunEnd!=null});return ue&&ie?(e.openSwitchConfirm("run"),!1):ce&&de?(e.openSwitchConfirm("generate"),!1):(Tt(Q),!0)},[c,t.requestId,t.isSessionClosed,t.turnActive,ee,e,Tt]),Ar=(0,be.useCallback)(async Q=>{c==="generate"?(e.freezeTcgArtifact(),await t.end().catch(()=>{}),t.reset(),te(!1),e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Discarded generation"})]}))):(e.runner.isRunning&&e.runner.cancelRun(),e.runner.clearLastRun(),e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Discarded run"})]}))),Tt(Q),Q==="generate"?e.emitFeedback("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):e.emitFeedback("ok","/run","Switched to Run mode.",void 0,l.orange)},[c,t,e,Tt]),xr=(0,be.useCallback)(()=>{if(t.isStreaming)e.freezeTcgArtifact(),t.cancel();else if(Le.current)Le.current.abort();else return;e.appendStatic((0,We.jsxs)(b,{marginBottom:1,children:[(0,We.jsx)(a,{color:l.red,children:"\u2717 "}),(0,We.jsx)(a,{color:l.dim,children:"Generation cancelled"})]}))},[e,t]);return{chatMode:c,tcgError:_,tcgValidationError:B,composeIdleHint:q,inputClearSeq:z,submitting:Kt,handleGenerateSubmit:Er,onRefine:Ir,onClarificationAnswer:hr,onSlash:br,onClearError:Kr,flashComposeHint:ut,setInputClearSeq:ae,setChatMode:m,setTcgError:U,setTcgValidationError:F,generateSaved:ee,requestSwitch:vr,confirmSwitch:Ar,cancelGenerate:xr,bifurcation:Rt,tcgLog:$e}}var Wt=D(Ie(),1);function _o(e){return e.level==="cases"?{level:"cases",scenarioIdx:e.scenarioIdx,caseIdx:0,cursor:0}:{level:"scenarios",scenarioIdx:0,caseIdx:0,cursor:0}}var Ob=(e,t)=>Math.max(0,Math.min(t,e));function hs(e,t,r){switch(t.type){case"open":return _o(t.target);case"move":{let n=e.level==="scenarios"?r.length-1:e.level==="cases"?(r[e.scenarioIdx]??1)-1:0;return{...e,cursor:Ob(e.cursor+t.delta,Math.max(0,n))}}case"enter":return e.level==="scenarios"?{...e,level:"cases",scenarioIdx:e.cursor,caseIdx:0,cursor:0}:e.level==="cases"?{...e,level:"detail",caseIdx:e.cursor}:e;case"back":return e.level==="detail"?{...e,level:"cases",cursor:e.caseIdx}:e.level==="cases"?{...e,level:"scenarios",cursor:e.scenarioIdx}:e;default:return e}}function Ud(e){let[t,r]=(0,Wt.useState)(null),[n,o]=(0,Wt.useReducer)((p,x)=>hs(p,x,e),_o({level:"scenarios"})),[i,s]=(0,Wt.useState)(new Set),u=(0,Wt.useCallback)(p=>{r(p),o({type:"open",target:p})},[]),f=(0,Wt.useCallback)(()=>r(null),[]),g=(0,Wt.useCallback)(p=>{s(x=>{let c=new Set(x);return c.has(p)?c.delete(p):c.add(p),c})},[]),w=(0,Wt.useCallback)(p=>{s(x=>{let c=new Set(x),m=p.length>0&&p.every(_=>c.has(_));return p.forEach(_=>m?c.delete(_):c.add(_)),c})},[]);return{target:t,open:u,close:f,isOpen:t!=null,state:n,excluded:i,toggleCase:g,toggleScenario:w}}var Po=D(Ie(),1);function qd(){return{committedChat:0,committedThinking:0,prevTurnActive:!1}}function Hd(e,t,r){let n=[],o={...e};if(e.prevTurnActive&&!r&&t.thinkingLog.length>e.committedThinking){let s=t.thinkingLog.slice(e.committedThinking).reduce((f,g)=>f+(g.tookMs??0),0),u=Math.round(s/1e3);n.push({kind:"thinking-summary",text:` thought for ${u}s`}),o.committedThinking=t.thinkingLog.length}o.prevTurnActive=r;for(let i=e.committedChat;i<t.chatLog.length;i++)n.push({kind:"chat",text:t.chatLog[i].text});return o.committedChat=t.chatLog.length,{items:n,next:o}}var bs=D(H(),1);function Mb(e){return e.kind==="thinking-summary"?(0,bs.jsx)(a,{color:l.dim,children:e.text}):(0,bs.jsx)(Bc,{text:e.text})}function Gd(e,t,r){let n=(0,Po.useRef)(qd());(0,Po.useEffect)(()=>{let{items:o,next:i}=Hd(n.current,e,t);n.current=i;for(let s of o)r(Mb(s))})}var Xe=D(Ie(),1);import{readFileSync as Nb,writeFileSync as jb,renameSync as Vb,mkdirSync as Fb}from"fs";import{dirname as Ub}from"path";var vs=1,Wd=()=>({schemaVersion:vs,numStartups:0,perHint:{}}),Do=class{constructor(t=qs){this.path=t;this.data=this.read()}data;read(){try{let t=JSON.parse(Nb(this.path,"utf-8"));return t.schemaVersion!==vs?Wd():{schemaVersion:vs,numStartups:typeof t.numStartups=="number"?t.numStartups:0,perHint:t.perHint??{}}}catch{return Wd()}}write(){try{Fb(Ub(this.path),{recursive:!0});let t=`${this.path}.tmp`;jb(t,JSON.stringify(this.data,null,2)+`
10
10
  `),Vb(t,this.path)}catch(t){process.stderr.write(`[hints] Failed to save state: ${t instanceof Error?t.message:String(t)}
11
11
  `)}}get numStartups(){return this.data.numStartups}shownCount(t){return this.data.perHint[t]?.shownCount??0}sessionsSince(t){let r=this.data.perHint[t];return r?this.data.numStartups-r.lastShownStartup:1/0}bumpStartup(){return this.data.numStartups+=1,this.write(),this.data.numStartups}recordShown(t){let r=this.data.perHint[t];this.data.perHint[t]={shownCount:(r?.shownCount??0)+1,lastShownStartup:this.data.numStartups},this.write()}prune(t){let r=new Set(t),n=!1;for(let o of Object.keys(this.data.perHint))r.has(o)||(delete this.data.perHint[o],n=!0);n&&this.write()}};import{readFileSync as qb,writeFileSync as Hb,renameSync as Gb,mkdirSync as Wb}from"fs";import{dirname as Xb}from"path";var Xd=1,zb=3600*1e3;function zd(e,t=Date.now()){return e!==null&&t-e.fetchedAt<zb}function Kd(e,t=fi(e)){try{let r=JSON.parse(qb(t,"utf-8"));if(r.wrapperVersion!==Xd)return null;let{catalog:n}=ho(r.catalog);return n?{catalog:n,fetchedAt:typeof r.fetchedAt=="number"?r.fetchedAt:0}:null}catch{return null}}function Yd(e,t,r=fi(e)){try{Wb(Xb(r),{recursive:!0});let n={wrapperVersion:Xd,writtenByVersion:xt,fetchedAt:Date.now(),catalog:t},o=`${r}.tmp`;Hb(o,JSON.stringify(n,null,2)+`
12
12
  `),Gb(o,r)}catch(n){process.stderr.write(`[hints] Failed to save catalog cache: ${n instanceof Error?n.message:String(n)}
13
- `)}}var Kb=5e3;async function Jd(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Kb);try{let o=`${Ge(e.env).controllerBaseUrl}/public/hints/catalog?clientVersion=${encodeURIComponent(xt)}&env=${e.env}`,i=await na(o,{headers:{Accept:"application/json"},signal:t.signal});if(!i.ok)return{status:"error"};let s=await i.json(),{catalog:u}=ho(s);return u?{status:"ok",catalog:u}:{status:"error"}}catch{return{status:"error"}}finally{clearTimeout(r)}}var Lo=D(Qi(),1);function Qd(e,t=xt){let r=Lo.default.coerce(e??"");if(!r)return!0;let n=Lo.default.coerce(t);return n?Lo.default.gte(n,r):!0}var Yb={no_chrome_profile:e=>e.config.chrome_profile_path==="",code_export_off:e=>e.config.code_export.enabled===!1,generate_memory_off:e=>e.config.generate.memory_enabled===!1,auth_invalid:e=>e.tokenValid===!1,testing_no_project:e=>e.config.mode==="testing"&&e.config.project_id===null,first_runs:e=>e.numStartups<5,platform_macos:e=>e.platform==="darwin",platform_windows:e=>e.platform==="win32",not_used_generate_this_session:e=>e.sessionUsedGenerate===!1};function Zd(e,t){let r=[],n=!0;for(let o of e){let i=Yb[o];if(!i){r.push(o),n=!1;continue}i(t)||(n=!1)}return{pass:n,unknown:r}}var Jb=3,Qb=(e,t)=>e==="both"||e===t;function Zb(e,t,r){return e.boost?t.shownCount(e.id)<e.boost.maxShows&&r<Date.parse(e.boost.until):!1}var ev=e=>Number.isFinite(e)?1:Jb;function tv(e,t){let r=e.filter(i=>i.weight>0);if(r.length===0)return null;let n=r.reduce((i,s)=>i+s.weight,0),o=t()*n;for(let i of r)if(o-=i.weight,o<=0)return i.hint;return r[r.length-1].hint}function ef(e){let{catalog:t,store:r,mode:n,now:o,predicateCtx:i,rng:s}=e,u=[];if(!t.enabled)return{footer:null,skipped:u,boosted:!1};let f=[];for(let p of t.hints){if(!Qd(p.minVersion)){u.push({id:p.id,reason:"min_version"});continue}let x=Zd(p.relevance,i);if(x.unknown.length>0){u.push({id:p.id,reason:"unknown_predicate"});continue}if(!x.pass||!Qb(p.target,n))continue;if(p.retireAfterShows!==void 0&&r.shownCount(p.id)>=p.retireAfterShows){u.push({id:p.id,reason:"retired"});continue}if(r.sessionsSince(p.id)<p.cooldownSessions)continue;let c=Zb(p,r,o),m=(c?p.boost.weight:p.weight)*ev(r.sessionsSince(p.id));f.push({hint:p,weight:m,boosted:c})}let g=tv(f.map(({hint:p,weight:x})=>({hint:p,weight:x})),s),w=g?f.find(p=>p.hint.id===g.id)?.boosted??!1:!1;return{footer:g,skipped:u,boosted:w}}function tf(e){return{shown(t){e("info","hint_shown",`hint shown: ${t.id}`,{...t})},skipped(t){let r=t.reason==="unknown_predicate"?"warn":"info";e(r,"hint_skipped",`hint skipped: ${t.id} (${t.reason})`,{...t})}}}function rf(e){let[t,r]=(0,Xe.useState)(null),[n,o]=(0,Xe.useState)(0),i=(0,Xe.useRef)(null),s=(0,Xe.useRef)(!1),u=(0,Xe.useRef)(new Set),f=(0,Xe.useRef)(!1),g=(0,Xe.useRef)(null),w=(0,Xe.useRef)(null),p=(0,Xe.useRef)(null),x=(0,Xe.useRef)(!1),c=(0,Xe.useRef)(!1),m=(0,Xe.useRef)(null),_=(0,Xe.useRef)(!0);return(0,Xe.useEffect)(()=>()=>{_.current=!1},[]),(0,Xe.useEffect)(()=>{if(!e.enabled||!e.ready)return;let U=i.current??(i.current=e.store??new Do),B=e.now??Date.now;if(m.current!==e.env&&(m.current=e.env,g.current=null,x.current=!1,c.current=!1,w.current=null,p.current=null),g.current===null){let Re=Kd(e.env);g.current={catalog:Re?.catalog??null,fetchedAt:Re?.fetchedAt??0}}let F=g.current,q=zd(F.catalog?{catalog:F.catalog,fetchedAt:F.fetchedAt}:null,B()),$=e.catalog??(q?F.catalog:null);if(s.current||(s.current=!0,U.bumpStartup()),!x.current&&(x.current=!0,!q)){let Re=e.env;(async()=>{let me=await Jd({env:Re});me.status==="ok"&&(Yd(Re,me.catalog),m.current===Re&&(g.current={catalog:me.catalog,fetchedAt:B()},_.current&&o($e=>$e+1)))})()}if(!$){w.current=null,r(null);return}if(c.current||(c.current=!0,U.prune($.hints.map(Re=>Re.id))),!(p.current!==e.chatMode)&&w.current!==null)return;p.current=e.chatMode;let ae=tf(e.log),ee=e.rng??Math.random,te=B(),K={config:e.config,tokenValid:e.tokenValid,numStartups:U.numStartups,platform:process.platform,sessionUsedGenerate:e.sessionUsedGenerate},pe=ef({catalog:$,store:U,mode:e.chatMode,now:te,predicateCtx:K,rng:ee});w.current=pe.footer,r(pe.footer),pe.footer&&!u.current.has(pe.footer.id)&&(u.current.add(pe.footer.id),U.recordShown(pe.footer.id),ae.shown({id:pe.footer.id,category:pe.footer.category,surface:"footer",boosted:pe.boosted})),f.current||(f.current=!0,pe.skipped.forEach(Re=>ae.skipped(Re)))},[e.enabled,e.ready,e.chatMode,e.env,n]),{footerHint:t}}var nf=D(Ie(),1);import{readdir as rv}from"fs/promises";import{join as nv,relative as ov,extname as iv}from"path";var sv=new Set(["node_modules",".git"]),av=e=>e.startsWith("output-");async function Bo(e,t,r={}){let n=r.limit??50,o=r.maxDepth??6,i=t.toLowerCase(),s=[];async function u(f,g){if(s.length>=n||g>o)return;let w;try{w=await rv(f,{withFileTypes:!0})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||sv.has(p.name)||av(p.name))continue;let x=nv(f,p.name);if(p.isDirectory())await u(x,g+1);else if(p.isFile()){if(!to.has(iv(p.name).toLowerCase()))continue;let c=ov(e,x);(!i||c.toLowerCase().includes(i))&&s.push(c)}}}return await u(e,0),s.slice(0,n)}var ze=D(H(),1);function of({projectId:e,folderId:t,onSubmit:r,history:n,error:o,validationError:i,composeIdleHint:s,clearSeq:u,closedNotice:f,busy:g=!1}){let w=!!e&&!!t,p=(0,nf.useCallback)(x=>Bo(process.cwd(),x),[]);return(0,ze.jsxs)(b,{flexDirection:"column",children:[(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:!w&&(0,ze.jsxs)(a,{color:l.orange,children:["\u2691 ",(0,ze.jsx)(a,{color:l.muted,children:"project / folder not set \u2014 use "}),(0,ze.jsx)(a,{bold:!0,children:"/config"})]})}),i&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(Qt,{variant:"error",paddingY:0,children:(0,ze.jsx)(a,{color:l.red,children:i})})}),o&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(Qt,{variant:"error",paddingY:0,children:(0,ze.jsx)(a,{color:l.red,children:o})})}),f&&(0,ze.jsx)(b,{paddingX:1,children:(0,ze.jsx)(a,{color:l.dim,children:f})}),s&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(a,{color:l.dim,children:s})}),(0,ze.jsx)(lr,{inert:g,onSubmit:r,history:n,accent:l.generateAccent,commands:ko("","generate"),clearSeq:u,clearOnSubmit:!1,mentionFiles:p,placeholder:g?"Processing files\u2026 (Ctrl+C to cancel)":"Describe what to generate... (/ = commands)",footerBindings:g?[{keys:"ctrl+c",label:"cancel"}]:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"generate"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]})]})}var df=D(Ie(),1);var ot=D(H(),1);function cv(e){return e?`[${e[0].toUpperCase()}]`:""}var lv=8;function $o({scenarios:e,headline:t,activeSid:r}){let n=e.slice(0,lv),o=e.length-n.length;return(0,ot.jsxs)(b,{flexDirection:"column",marginBottom:1,marginLeft:2,children:[t&&(0,ot.jsx)(b,{paddingX:1,children:(0,ot.jsx)(a,{color:l.generateAccent,bold:!0,children:t})}),(0,ot.jsxs)(Qt,{title:`Scenarios (${e.length})`,titleColor:l.generateAccent,borderColor:l.generateAccent,paddingX:1,children:[n.map(i=>{let s=!!r&&i.sid===r,u=s?"\u2237":"\u2713",f=s?l.generateAccent:l.green,g=i.test_cases?.length??0;return(0,ot.jsxs)(b,{gap:1,children:[(0,ot.jsx)(a,{color:f,children:u}),(0,ot.jsx)(a,{color:l.dim,children:i.sid??`#${i.id}`}),(0,ot.jsx)(a,{children:i.title??"(untitled)"}),(0,ot.jsx)(a,{color:l.muted,children:cv(i.priority)}),(0,ot.jsxs)(a,{color:l.dim,children:[g," case",g===1?"":"s"]})]},i.id)}),o>0&&(0,ot.jsx)(a,{color:l.muted,children:`\u22EE +${o} more`}),(0,ot.jsx)(b,{marginTop:1,children:(0,ot.jsxs)(a,{color:l.dim,children:[(0,ot.jsx)(a,{color:l.generateAccent,children:"/view"})," view/edit \xB7 ",(0,ot.jsx)(a,{color:l.generateAccent,children:"/save"})," save as runnable tests"]})})]})]})}var zr=D(H(),1),sf=24;function uv(e){let t=Math.max(0,Math.min(100,e)),r=Math.round(t/100*sf);return{filled:"\u2588".repeat(r),empty:"\u2591".repeat(sf-r)}}function af({pct:e}){let t=uv(e);return(0,zr.jsxs)(b,{paddingX:1,children:[(0,zr.jsx)(a,{color:l.generateAccent,children:t.filled}),(0,zr.jsx)(a,{color:l.muted,children:t.empty}),(0,zr.jsx)(a,{color:l.dim,children:` ${e}%`})]})}var cf=D(Ie(),1);var tr=D(H(),1);function lf(e,t){let r=e.trim();return r.startsWith("/")?{kind:"slash",text:r}:r?t?{kind:"ignore",text:r}:{kind:"refine",text:r}:{kind:"ignore",text:""}}function uf({state:e,history:t,turnActive:r,busy:n=!1,onClarificationAnswer:o,onClearError:i,onRefine:s,onSlash:u}){let f=(0,cf.useCallback)(w=>Bo(process.cwd(),w),[]),g=o?w=>{i?.(),o(w)}:void 0;return(0,tr.jsxs)(tr.Fragment,{children:[e.pendingClarification&&g&&(0,tr.jsx)(b,{paddingX:1,marginTop:1,flexDirection:"column",children:(0,tr.jsx)(lr,{onSubmit:g,history:t,noHistory:!0,accent:l.generateAccent,placeholder:"Type your answer\u2026",submitVerb:"answer",footerBindings:[{keys:"\u21B5",label:"answer"}]})}),!(e.pendingClarification&&g)&&(r||n?(0,tr.jsx)(lr,{inert:!0,onSubmit:()=>{},history:t,placeholder:r?"(generating\u2026 input inert \u2014 Ctrl+C to cancel)":"(processing files\u2026 Ctrl+C to cancel)",footerBindings:r?void 0:[{keys:"ctrl+c",label:"cancel"}]}):(0,tr.jsx)(lr,{onSubmit:w=>{let p=lf(w,r);p.kind==="slash"?u?.(p.text):p.kind==="refine"&&s?.(p.text)},history:t,noHistory:!0,accent:l.generateAccent,commands:ko("","generate"),scenarios:e.scenarios,mentionFiles:f,placeholder:"Refine, or /save \xB7 /view \xB7 /run",submitVerb:"refine",footerBindings:[{keys:"\u21B5",label:"refine"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]}))]})}var At=D(H(),1);function ff({state:e,requestId:t,history:r,onClarificationAnswer:n,error:o,onClearError:i,turnActive:s,busy:u=!1,onRefine:f,onSlash:g}){let[w,p]=(0,df.useState)(!1),x=e.thinking.length===0&&e.thinkingLog.length>0,c=[...e.thinkingLog.map(m=>m.text),e.thinking].filter(m=>m.length>0).join(`
13
+ `)}}var Kb=5e3;async function Jd(e){let t=new AbortController,r=setTimeout(()=>t.abort(),Kb);try{let o=`${Ge(e.env).controllerBaseUrl}/public/hints/catalog?clientVersion=${encodeURIComponent(xt)}&env=${e.env}`,i=await na(o,{headers:{Accept:"application/json"},signal:t.signal});if(!i.ok)return{status:"error"};let s=await i.json(),{catalog:u}=ho(s);return u?{status:"ok",catalog:u}:{status:"error"}}catch{return{status:"error"}}finally{clearTimeout(r)}}var Lo=D(Qi(),1);function Qd(e,t=xt){let r=Lo.default.coerce(e??"");if(!r)return!0;let n=Lo.default.coerce(t);return n?Lo.default.gte(n,r):!0}var Yb={no_chrome_profile:e=>e.config.chrome_profile_path==="",code_export_off:e=>e.config.code_export.enabled===!1,generate_memory_off:e=>e.config.generate.memory_enabled===!1,auth_invalid:e=>e.tokenValid===!1,testing_no_project:e=>e.config.mode==="testing"&&e.config.project_id===null,first_runs:e=>e.numStartups<5,platform_macos:e=>e.platform==="darwin",platform_windows:e=>e.platform==="win32",not_used_generate_this_session:e=>e.sessionUsedGenerate===!1};function Zd(e,t){let r=[],n=!0;for(let o of e){let i=Yb[o];if(!i){r.push(o),n=!1;continue}i(t)||(n=!1)}return{pass:n,unknown:r}}var Jb=3,Qb=(e,t)=>e==="both"||e===t;function Zb(e,t,r){return e.boost?t.shownCount(e.id)<e.boost.maxShows&&r<Date.parse(e.boost.until):!1}var ev=e=>Number.isFinite(e)?1:Jb;function tv(e,t){let r=e.filter(i=>i.weight>0);if(r.length===0)return null;let n=r.reduce((i,s)=>i+s.weight,0),o=t()*n;for(let i of r)if(o-=i.weight,o<=0)return i.hint;return r[r.length-1].hint}function ef(e){let{catalog:t,store:r,mode:n,now:o,predicateCtx:i,rng:s}=e,u=[];if(!t.enabled)return{footer:null,skipped:u,boosted:!1};let f=[];for(let p of t.hints){if(!Qd(p.minVersion)){u.push({id:p.id,reason:"min_version"});continue}let x=Zd(p.relevance,i);if(x.unknown.length>0){u.push({id:p.id,reason:"unknown_predicate"});continue}if(!x.pass||!Qb(p.target,n))continue;if(p.retireAfterShows!==void 0&&r.shownCount(p.id)>=p.retireAfterShows){u.push({id:p.id,reason:"retired"});continue}if(r.sessionsSince(p.id)<p.cooldownSessions)continue;let c=Zb(p,r,o),m=(c?p.boost.weight:p.weight)*ev(r.sessionsSince(p.id));f.push({hint:p,weight:m,boosted:c})}let g=tv(f.map(({hint:p,weight:x})=>({hint:p,weight:x})),s),w=g?f.find(p=>p.hint.id===g.id)?.boosted??!1:!1;return{footer:g,skipped:u,boosted:w}}function tf(e){return{shown(t){e("info","hint_shown",`hint shown: ${t.id}`,{...t})},skipped(t){let r=t.reason==="unknown_predicate"?"warn":"info";e(r,"hint_skipped",`hint skipped: ${t.id} (${t.reason})`,{...t})}}}function rf(e){let[t,r]=(0,Xe.useState)(null),[n,o]=(0,Xe.useState)(0),i=(0,Xe.useRef)(null),s=(0,Xe.useRef)(!1),u=(0,Xe.useRef)(new Set),f=(0,Xe.useRef)(!1),g=(0,Xe.useRef)(null),w=(0,Xe.useRef)(null),p=(0,Xe.useRef)(null),x=(0,Xe.useRef)(!1),c=(0,Xe.useRef)(!1),m=(0,Xe.useRef)(null),_=(0,Xe.useRef)(!0);return(0,Xe.useEffect)(()=>()=>{_.current=!1},[]),(0,Xe.useEffect)(()=>{if(!e.enabled||!e.ready)return;let U=i.current??(i.current=e.store??new Do),B=e.now??Date.now;if(m.current!==e.env&&(m.current=e.env,g.current=null,x.current=!1,c.current=!1,w.current=null,p.current=null),g.current===null){let Re=Kd(e.env);g.current={catalog:Re?.catalog??null,fetchedAt:Re?.fetchedAt??0}}let F=g.current,q=zd(F.catalog?{catalog:F.catalog,fetchedAt:F.fetchedAt}:null,B()),$=e.catalog??(q?F.catalog:null);if(s.current||(s.current=!0,U.bumpStartup()),!x.current&&(x.current=!0,!q)){let Re=e.env;(async()=>{let me=await Jd({env:Re});me.status==="ok"&&(Yd(Re,me.catalog),m.current===Re&&(g.current={catalog:me.catalog,fetchedAt:B()},_.current&&o($e=>$e+1)))})()}if(!$){w.current=null,r(null);return}if(c.current||(c.current=!0,U.prune($.hints.map(Re=>Re.id))),!(p.current!==e.chatMode)&&w.current!==null)return;p.current=e.chatMode;let ae=tf(e.log),ee=e.rng??Math.random,te=B(),K={config:e.config,tokenValid:e.tokenValid,numStartups:U.numStartups,platform:process.platform,sessionUsedGenerate:e.sessionUsedGenerate},pe=ef({catalog:$,store:U,mode:e.chatMode,now:te,predicateCtx:K,rng:ee});w.current=pe.footer,r(pe.footer),pe.footer&&!u.current.has(pe.footer.id)&&(u.current.add(pe.footer.id),U.recordShown(pe.footer.id),ae.shown({id:pe.footer.id,category:pe.footer.category,surface:"footer",boosted:pe.boosted})),f.current||(f.current=!0,pe.skipped.forEach(Re=>ae.skipped(Re)))},[e.enabled,e.ready,e.chatMode,e.env,n]),{footerHint:t}}var nf=D(Ie(),1);import{readdir as rv}from"fs/promises";import{join as nv,relative as ov,extname as iv}from"path";var sv=new Set(["node_modules",".git"]),av=e=>e.startsWith("output-");async function Bo(e,t,r={}){let n=r.limit??50,o=r.maxDepth??6,i=t.toLowerCase(),s=[];async function u(f,g){if(s.length>=n||g>o)return;let w;try{w=await rv(f,{withFileTypes:!0})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||sv.has(p.name)||av(p.name))continue;let x=nv(f,p.name);if(p.isDirectory())await u(x,g+1);else if(p.isFile()){if(!to.has(iv(p.name).toLowerCase()))continue;let c=ov(e,x);(!i||c.toLowerCase().includes(i))&&s.push(c)}}}return await u(e,0),s.slice(0,n)}var ze=D(H(),1);function of({projectId:e,folderId:t,onSubmit:r,history:n,error:o,validationError:i,composeIdleHint:s,clearSeq:u,closedNotice:f,busy:g=!1}){let w=!!e&&!!t,p=(0,nf.useCallback)(x=>Bo(process.cwd(),x),[]);return(0,ze.jsxs)(b,{flexDirection:"column",children:[(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:!w&&(0,ze.jsxs)(a,{color:l.orange,children:["\u2691 ",(0,ze.jsx)(a,{color:l.muted,children:"project / folder not set \u2014 use "}),(0,ze.jsx)(a,{bold:!0,children:"/config"})]})}),i&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(Qt,{variant:"error",paddingY:0,children:(0,ze.jsx)(a,{color:l.red,children:i})})}),o&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(Qt,{variant:"error",paddingY:0,children:(0,ze.jsx)(a,{color:l.red,children:o})})}),f&&(0,ze.jsx)(b,{paddingX:1,children:(0,ze.jsx)(a,{color:l.dim,children:f})}),s&&(0,ze.jsx)(b,{marginLeft:2,marginTop:1,children:(0,ze.jsx)(a,{color:l.dim,children:s})}),(0,ze.jsx)(ur,{inert:g,onSubmit:r,history:n,accent:l.generateAccent,commands:ko("","generate"),clearSeq:u,clearOnSubmit:!1,mentionFiles:p,placeholder:g?"Processing files\u2026 (Ctrl+C to cancel)":"Describe what to generate... (/ = commands)",footerBindings:g?[{keys:"ctrl+c",label:"cancel"}]:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"generate"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]})]})}var df=D(Ie(),1);var ot=D(H(),1);function cv(e){return e?`[${e[0].toUpperCase()}]`:""}var lv=8;function $o({scenarios:e,headline:t,activeSid:r}){let n=e.slice(0,lv),o=e.length-n.length;return(0,ot.jsxs)(b,{flexDirection:"column",marginBottom:1,marginLeft:2,children:[t&&(0,ot.jsx)(b,{paddingX:1,children:(0,ot.jsx)(a,{color:l.generateAccent,bold:!0,children:t})}),(0,ot.jsxs)(Qt,{title:`Scenarios (${e.length})`,titleColor:l.generateAccent,borderColor:l.generateAccent,paddingX:1,children:[n.map(i=>{let s=!!r&&i.sid===r,u=s?"\u2237":"\u2713",f=s?l.generateAccent:l.green,g=i.test_cases?.length??0;return(0,ot.jsxs)(b,{gap:1,children:[(0,ot.jsx)(a,{color:f,children:u}),(0,ot.jsx)(a,{color:l.dim,children:i.sid??`#${i.id}`}),(0,ot.jsx)(a,{children:i.title??"(untitled)"}),(0,ot.jsx)(a,{color:l.muted,children:cv(i.priority)}),(0,ot.jsxs)(a,{color:l.dim,children:[g," case",g===1?"":"s"]})]},i.id)}),o>0&&(0,ot.jsx)(a,{color:l.muted,children:`\u22EE +${o} more`}),(0,ot.jsx)(b,{marginTop:1,children:(0,ot.jsxs)(a,{color:l.dim,children:[(0,ot.jsx)(a,{color:l.generateAccent,children:"/view"})," view/edit \xB7 ",(0,ot.jsx)(a,{color:l.generateAccent,children:"/save"})," save as runnable tests"]})})]})]})}var zr=D(H(),1),sf=24;function uv(e){let t=Math.max(0,Math.min(100,e)),r=Math.round(t/100*sf);return{filled:"\u2588".repeat(r),empty:"\u2591".repeat(sf-r)}}function af({pct:e}){let t=uv(e);return(0,zr.jsxs)(b,{paddingX:1,children:[(0,zr.jsx)(a,{color:l.generateAccent,children:t.filled}),(0,zr.jsx)(a,{color:l.muted,children:t.empty}),(0,zr.jsx)(a,{color:l.dim,children:` ${e}%`})]})}var cf=D(Ie(),1);var tr=D(H(),1);function lf(e,t){let r=e.trim();return r.startsWith("/")?{kind:"slash",text:r}:r?t?{kind:"ignore",text:r}:{kind:"refine",text:r}:{kind:"ignore",text:""}}function uf({state:e,history:t,turnActive:r,busy:n=!1,onClarificationAnswer:o,onClearError:i,onRefine:s,onSlash:u}){let f=(0,cf.useCallback)(w=>Bo(process.cwd(),w),[]),g=o?w=>{i?.(),o(w)}:void 0;return(0,tr.jsxs)(tr.Fragment,{children:[e.pendingClarification&&g&&(0,tr.jsx)(b,{paddingX:1,marginTop:1,flexDirection:"column",children:(0,tr.jsx)(ur,{onSubmit:g,history:t,noHistory:!0,accent:l.generateAccent,placeholder:"Type your answer\u2026",submitVerb:"answer",footerBindings:[{keys:"\u21B5",label:"answer"}]})}),!(e.pendingClarification&&g)&&(r||n?(0,tr.jsx)(ur,{inert:!0,onSubmit:()=>{},history:t,placeholder:r?"(generating\u2026 input inert \u2014 Ctrl+C to cancel)":"(processing files\u2026 Ctrl+C to cancel)",footerBindings:r?void 0:[{keys:"ctrl+c",label:"cancel"}]}):(0,tr.jsx)(ur,{onSubmit:w=>{let p=lf(w,r);p.kind==="slash"?u?.(p.text):p.kind==="refine"&&s?.(p.text)},history:t,noHistory:!0,accent:l.generateAccent,commands:ko("","generate"),scenarios:e.scenarios,mentionFiles:f,placeholder:"Refine, or /save \xB7 /view \xB7 /run",submitVerb:"refine",footerBindings:[{keys:"\u21B5",label:"refine"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]}))]})}var At=D(H(),1);function ff({state:e,requestId:t,history:r,onClarificationAnswer:n,error:o,onClearError:i,turnActive:s,busy:u=!1,onRefine:f,onSlash:g}){let[w,p]=(0,df.useState)(!1),x=e.thinking.length===0&&e.thinkingLog.length>0,c=[...e.thinkingLog.map(m=>m.text),e.thinking].filter(m=>m.length>0).join(`
14
14
 
15
15
  `);return Be((m,_)=>{_.ctrl&&m==="t"&&p(U=>!U)}),(0,At.jsxs)(b,{flexDirection:"column",children:[(0,At.jsx)(b,{marginBottom:1,marginLeft:2,children:(0,At.jsx)($c,{thinking:c,expanded:w,thinkingDone:x})}),s&&(0,At.jsx)(b,{marginLeft:2,children:(0,At.jsx)(af,{pct:e.progress})}),o&&(0,At.jsx)(b,{marginLeft:2,marginTop:1,children:(0,At.jsx)(Qt,{variant:"error",paddingY:0,children:(0,At.jsx)(a,{color:l.red,children:o})})}),e.scenarios.length>0&&(0,At.jsx)($o,{scenarios:e.scenarios,headline:e.headline,activeSid:null}),(0,At.jsx)(uf,{state:e,history:r,turnActive:s,busy:u,onClarificationAnswer:n,onClearError:i,onRefine:f,onSlash:g})]})}var bf=D(Ie(),1);var it=D(H(),1);function dv(e,t){return(e.test_cases??[]).some(r=>!t.has(r.id))}function pf({scenarios:e,cursor:t,excluded:r}){let n=e.reduce((o,i)=>o+(i.test_cases??[]).length,0);return(0,it.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,it.jsxs)(a,{children:[(0,it.jsx)(a,{color:l.dim,children:"Generate \u203A "}),(0,it.jsx)(a,{color:l.generateAccent,children:"Scenarios"}),(0,it.jsx)(a,{color:l.dim,children:` ${e.length} scenarios \xB7 ${n} cases`})]}),(0,it.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),(0,it.jsx)(b,{flexDirection:"column",marginY:1,children:e.map((o,i)=>{let s=i===t,u=dv(o,r);return(0,it.jsxs)(a,{children:[(0,it.jsx)(a,{color:l.generateAccent,children:s?"\u276F ":" "}),(0,it.jsx)(a,{color:l.generateAccent,children:`S${i+1}`}),(0,it.jsx)(a,{children:` ${o.title??"(untitled)"}`}),(0,it.jsx)(a,{color:l.dim,children:` [${o.priority??"-"}] ${(o.test_cases??[]).length} cases `}),(0,it.jsx)(a,{color:u?l.green:l.red,children:u?"\u2713":"\u2717"})]},o.id)})}),(0,it.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),(0,it.jsx)(a,{color:l.dim,children:"\u2191\u2193 move \u21B5 open x remove esc back to chat"})]})}var Ke=D(H(),1);function mf({scenario:e,scenarioIdx:t,cursor:r,excluded:n}){let o=e.test_cases??[],i=o.some(s=>!qt(s));return(0,Ke.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,Ke.jsxs)(a,{children:[(0,Ke.jsx)(a,{color:l.dim,children:"Generate \u203A Scenarios \u203A "}),(0,Ke.jsx)(a,{color:l.generateAccent,children:`S${t+1} ${e.title??"(untitled)"}`}),(0,Ke.jsx)(a,{color:l.dim,children:` ${o.length} cases`})]}),(0,Ke.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),(0,Ke.jsx)(b,{flexDirection:"column",marginY:1,children:o.map((s,u)=>{let f=u===r,g=n.has(s.id);return(0,Ke.jsxs)(a,{children:[(0,Ke.jsx)(a,{color:l.generateAccent,children:f?"\u276F ":" "}),(0,Ke.jsx)(a,{color:l.generateAccent,children:`C${u+1}`}),(0,Ke.jsx)(a,{children:` ${s.title??"(untitled)"} `}),qt(s)?(0,Ke.jsx)(a,{color:g?l.red:l.green,children:g?"\u2717 removed":"\u2713 included"}):(0,Ke.jsx)(a,{color:l.dim,children:"\u2713"})]},s.id)})}),(0,Ke.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),i&&(0,Ke.jsx)(a,{color:l.dim,children:"gray \u2713 = non-functional \xB7 won't be saved by /save"}),(0,Ke.jsx)(a,{color:l.dim,children:"\u2191\u2193 move \u21B5 view detail x remove case \u2190 / esc back"})]})}var No=D(Ie(),1);function Oo(e,t){let r=Math.max(1,t),n=[];for(let o of e.split(`
16
16
  `)){let i=o.split(/\s+/).filter(f=>f.length>0);if(i.length===0){n.push("");continue}let s="",u=()=>{s&&(n.push(s),s="")};for(let f of i){for(;f.length>r;)u(),n.push(f.slice(0,r)),f=f.slice(r);s===""?s=f:s.length+1+f.length<=r?s+=" "+f:(u(),s=f)}u()}return n}function gf(e,t,r,n){let o=Math.max(20,n),i=[];if(r){for(let u of Oo(r,o))i.push({text:u,tone:"meta"});i.push({text:"",tone:"blank"})}let s=(u,f)=>{let g=f?.trim();if(g){i.push({text:u,tone:"label"});for(let w of Oo(g,o-2))i.push({text:" "+w,tone:"text"});i.push({text:"",tone:"blank"})}};return s("Description",e?.description),s("Preconditions",e?.preconditions),t.length>0&&(i.push({text:"Steps",tone:"label"}),t.forEach((u,f)=>{let g=`${f+1}. `;Oo(u.step||"",Math.max(1,o-g.length)).forEach((x,c)=>{c===0?i.push({text:x,tone:"step",accent:g}):i.push({text:" ".repeat(g.length)+x,tone:"step"})});let p=u.expected?.trim();if(p){let x=" \u2192 ",c=" ";Oo(p,Math.max(1,o-x.length)).forEach((m,_)=>i.push({text:(_===0?x:c)+m,tone:"expected"}))}})),i}function Mo(e,t,r){let n=Math.max(0,t-r);return Math.max(0,Math.min(e,n))}var Ye=D(H(),1),fv=7;function pv(e){return e==="text"||e==="step"?void 0:l.dim}function hf({scenario:e,scenarioIdx:t,caseIdx:r,excluded:n,getStatus:o,getResult:i}){let s=(e.test_cases??[])[r],u=s?n.has(s.id):!1,f=s?qt(s):!0,g=s&&o?o(s.id):void 0,w=g==="done"?(0,Ye.jsx)(a,{color:l.generateAccent,children:"ready"}):g==="error"?(0,Ye.jsx)(a,{color:l.red,children:"failed \u2192 raw steps"}):g==="pending"?(0,Ye.jsx)(a,{color:l.dim,children:"bifurcating\u2026"}):null,p=g==="done"&&s&&i?i(s.id):void 0,x=p?p.sub_objectives.map(te=>({step:te.objective,expected:""})):Rc(s?.manual_steps),c=[s?.priority&&`Priority ${s.priority}`,s?.polarity&&`Polarity ${s.polarity}`,s?.tags&&`Tags ${s.tags}`].filter(Boolean).join(" \xB7 "),{stdout:m}=$r(),_=Math.max(20,(m?.columns??80)-4),U=Math.max(3,(m?.rows??24)-fv),B=gf(s,x,c,_),[F,q]=(0,No.useState)(0);(0,No.useEffect)(()=>{q(0)},[s?.id]);let $=Mo(F,B.length,U);Be((te,K)=>{if(K.upArrow){q(pe=>Mo(pe-1,B.length,U));return}if(K.downArrow){q(pe=>Mo(pe+1,B.length,U));return}});let z=B.slice($,$+U),ee=B.length>U?` ${$+1}-${Math.min($+U,B.length)}/${B.length}`:"";return(0,Ye.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,Ye.jsxs)(a,{children:[(0,Ye.jsx)(a,{color:l.dim,children:`Generate \u203A S${t+1} \u203A `}),(0,Ye.jsx)(a,{color:l.generateAccent,children:`C${r+1} ${s?.title??"(untitled)"}`}),w?(0,Ye.jsx)(a,{children:" "}):null,w]}),f?(0,Ye.jsx)(a,{color:u?l.red:l.green,children:u?"\u2717 removed":"\u2713 included"}):(0,Ye.jsx)(a,{color:l.dim,children:"\u2713 non-functional \xB7 not saved by /save"}),(0,Ye.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),(0,Ye.jsx)(b,{flexDirection:"column",marginTop:1,children:z.map((te,K)=>(0,Ye.jsxs)(a,{color:pv(te.tone),children:[te.accent?(0,Ye.jsx)(a,{color:l.generateAccent,children:te.accent}):null,te.text]},$+K))}),(0,Ye.jsx)(a,{color:l.muted,children:"\u2500".repeat(60)}),(0,Ye.jsx)(a,{color:l.dim,children:`\u2191\u2193 scroll \u2190 / esc back x remove${ee}`})]})}var jo=D(H(),1);function vf({scenarios:e,target:t,onClose:r,excluded:n,onToggleCase:o,onToggleScenario:i,getStatus:s,getResult:u}){let f=e.map(c=>(c.test_cases??[]).length),[g,w]=(0,bf.useReducer)((c,m)=>hs(c,m,f),_o(t)),p=()=>{g.level==="scenarios"?r():w({type:"back"})};Be((c,m)=>{if(m.escape||m.leftArrow){p();return}if(g.level!=="detail"){if(m.return){w({type:"enter"});return}if(m.upArrow){w({type:"move",delta:-1});return}if(m.downArrow){w({type:"move",delta:1});return}}if(c==="x"){if(g.level==="scenarios"){let _=(e[g.cursor]?.test_cases??[]).map(U=>U.id);_.length>0&&i(_)}else{let _=g.level==="cases"?g.cursor:g.caseIdx,U=(e[g.scenarioIdx]?.test_cases??[])[_];U&&o(U.id)}return}});let x=e[g.scenarioIdx];if(g.level==="scenarios"||x===void 0){let c=g.level==="scenarios"?g.cursor:0;return(0,jo.jsx)(pf,{scenarios:e,cursor:c,excluded:n})}return g.level==="cases"?(0,jo.jsx)(mf,{scenario:x,scenarioIdx:g.scenarioIdx,cursor:g.cursor,excluded:n}):(0,jo.jsx)(hf,{scenario:x,scenarioIdx:g.scenarioIdx,caseIdx:g.caseIdx,excluded:n,getStatus:s,getResult:u})}var Vo=D(H(),1);function xf({tcg:e,gm:t,history:r,tuiConfig:n,browse:o}){return o?(0,Vo.jsx)(vf,{scenarios:e.state.scenarios,target:o.target,onClose:o.onClose,excluded:o.excluded,onToggleCase:o.onToggleCase,onToggleScenario:o.onToggleScenario,getStatus:o.getStatus,getResult:o.getResult}):!e.requestId||e.isSessionClosed?(0,Vo.jsx)(of,{projectId:n.project_id,folderId:n.folder_id,onSubmit:t.handleGenerateSubmit,history:r,error:t.tcgError,validationError:t.tcgValidationError,composeIdleHint:t.composeIdleHint,clearSeq:t.inputClearSeq,busy:t.submitting,closedNotice:e.isSessionClosed?`Generation ${e.state.status}. Type a new objective or /run.`:void 0}):(0,Vo.jsx)(ff,{state:e.state,requestId:e.requestId,history:r,turnActive:e.turnActive,busy:t.submitting,error:t.tcgError??e.state.error,onClearError:()=>t.onClearError?.(),onClarificationAnswer:i=>t.onClarificationAnswer?.(i),onRefine:t.onRefine,onSlash:t.onSlash})}var yf=D(Ie(),1);var Xt=D(H(),1);function mv({message:e,confirmLabel:t,choice:r}){return(0,Xt.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.dim,paddingX:1,children:[(0,Xt.jsx)(a,{bold:!0,children:e}),(0,Xt.jsxs)(b,{marginTop:1,children:[(0,Xt.jsx)(a,{color:r==="yes"?l.red:l.dim,children:`\u276F ${t}`}),(0,Xt.jsx)(a,{children:" "}),(0,Xt.jsx)(a,{color:r==="no"?l.green:l.dim,children:"\u276F No"})]}),(0,Xt.jsx)(a,{color:l.dim,children:"\u2190 \u2192 choose \xB7 \u21B5 confirm \xB7 esc cancel"})]})}function Sf({message:e,onConfirm:t,onCancel:r,confirmLabel:n="Yes, end"}){let[o,i]=(0,yf.useState)("no");return Be((s,u)=>{(u.leftArrow||u.rightArrow)&&i(f=>f==="yes"?"no":"yes"),u.return&&(o==="yes"?t:r)(),u.escape&&r()}),(0,Xt.jsx)(mv,{message:e,confirmLabel:n,choice:o})}var gv=null;function wf(e){gv=e}import{join as rr,resolve as yv}from"path";var Fo=D(H(),1);function Rf({status:e,steps:t,duration:r,creditsConsumed:n,reason:o}){let i=e==="passed",s=i?l.green:l.red,u=i?"\u2713":"\u2717",f=i?"Passed":"Failed",g=r<60?`${r.toFixed(1)}s`:`${Math.floor(r/60)}m ${Math.round(r%60)}s`,w=typeof n=="number"&&n>0?` \xB7 ${n.toFixed(4)} credits`:"",p=!i&&o?` \xB7 ${o}`:"";return(0,Fo.jsxs)(b,{children:[(0,Fo.jsxs)(a,{bold:!0,color:s,children:[u," ",f]}),(0,Fo.jsxs)(a,{color:l.dim,children:[" ","\xB7 ",t," steps \xB7 ",g,w,p]})]})}var kf=D(H(),1);function Tf(){return(0,kf.jsx)(a,{color:l.dim,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}var Uo=D(Ie(),1);import{readFileSync as xv}from"fs";var wt=D(Ie(),1);function hv(e){let t="message",r=[];for(let o of e.split(`
@@ -19,8 +19,8 @@ import{a as pi,b as Hs}from"./chunk-3MSXQU2C.js";import{a as xa,b as ya,c as Sa,
19
19
  `)}:null}async function*Cf(e){let t;try{t=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",Accept:"text/event-stream",Authorization:e.authHeader,"x-session-id":e.sessionId},body:JSON.stringify(e.body),signal:e.signal})}catch(i){e.signal.aborted||(yield{type:"error",message:String(i)});return}if(!t.ok||!t.body){yield{type:"error",message:`describe HTTP ${t.status}`};return}let r=t.body.getReader(),n=new TextDecoder,o="";try{for(;;){if(e.signal.aborted)return;let{done:i,value:s}=await r.read();if(i)break;o+=n.decode(s,{stream:!0});let u;for(;(u=o.indexOf(`
20
20
 
21
21
  `))!==-1;){let f=hv(o.slice(0,u));if(o=o.slice(u+2),f&&(yield f,f.type==="done"))return}}}finally{await r.cancel().catch(()=>{})}}var bv=50,vv=3;function Ef(){let[e,t]=(0,wt.useState)(""),r=(0,wt.useRef)(""),[n,o]=(0,wt.useState)(!1),[i,s]=(0,wt.useState)(!1),u=(0,wt.useRef)(null);(0,wt.useEffect)(()=>{if(!i)return;let p=setInterval(()=>{t(x=>{let c=r.current;return x.length>=c.length?x:c.slice(0,Math.min(c.length,x.length+vv))})},bv);return()=>clearInterval(p)},[i]);let f=(0,wt.useCallback)(p=>{u.current?.abort();let x=new AbortController;u.current=x,s(!0),r.current="",t(""),o(!0),(async()=>{try{for await(let c of Cf({...p,signal:x.signal})){if(x.signal.aborted)return;if(c.type==="delta")r.current+=c.text;else if(c.type==="usage")p.onUsage?.(c.creditsConsumed);else if(c.type==="done"||c.type==="error"){o(!1);return}}o(!1)}catch{o(!1)}})()},[]),g=(0,wt.useCallback)(()=>{u.current?.abort(),o(!1),s(!1),r.current="",t("")},[]);(0,wt.useEffect)(()=>()=>u.current?.abort(),[]);let w=n||e.length<r.current.length;return{text:e,active:n,visible:i,revealing:w,start:f,stop:g}}function If({resolve:e,hostIsTTY:t}){let r=Ef(),n=(0,Uo.useRef)(0),o=(0,Uo.useCallback)(i=>{if(!t())return;let s=e();if(!s)return;let u;try{u=xv(i.screenshot_path).toString("base64")}catch{return}r.start({url:`${s.controllerBaseUrl}/v16-alpha/stream`,authHeader:s.authHeader,sessionId:s.sessionId,onUsage:f=>{n.current+=f},body:{node:"visualizer",sub_node:"describe",session_id:s.sessionId,context_json:{objective:i.objective,query:i.recent_actions.map(f=>`${f.step}: ${f.action_type} ${f.instruction}`).join(`
22
- `),screenshot_b64:u}}})},[e,t,r]);return{describe:r,onDescribe:o,creditsRef:n}}var qo=e=>({kind:"login",env:e}),xs=e=>({kind:"switch",env:e}),Af=(e,t)=>e?{kind:"switch",env:t}:{kind:"logout"};async function ys(e){let t=await e.getTmsCredentials();return{basicAuth:e.resolvedBasic??(t?{username:t.username,access_key:t.access_key}:null),token:e.token,resolver:e.resolver,resolvedCreds:t}}function _f(e){return[{id:"run-headless",label:"Headless",type:"select",currentValue:e.runOptions.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:t=>{e.patchRunOptions({headless:t==="on"})}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:e.runOptions.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:t=>{e.patchRunOptions({cdpEndpoint:t})}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:e.runOptions.wsEndpoint,placeholder:"wss://...",onValue:t=>{e.patchRunOptions({wsEndpoint:t})}}]}function Pf(e){return wr()?[{id:"run-device",label:"Device",type:"action",currentValue:e.deviceLabel??"(none)",suppressFeedback:!0,onAction:()=>e.openDevicePicker()},{id:"run-app",label:"App",type:"action",currentValue:e.appLabel??"(none)",suppressFeedback:!0,onAction:()=>e.openAppPicker()}]:[]}function Df(e){return[{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:e.onChromeProfilePicker??(()=>{})},{id:"config-window",label:"Window Size",type:"action",currentValue:e.windowSizeLabel,onWindowSizePicker:e.onWindowSizePicker??(()=>{})},{id:"config-default-url",label:"Default URL",type:"text-input",currentValue:e.tuiConfig.default_url??"",placeholder:"https://example.com",onValue:t=>{let r=Yn(t);if(!r){e.emitFeedback("error","/config set-url","Enter a valid URL (e.g. example.com)");return}e.setConfigKey("default_url",r),e.emitFeedback("ok","/config set-url",r)}},{id:"config-network-ws",label:"WebSocket Capture",type:"select",currentValue:e.tuiConfig.network_ws?"on":"off",options:[{label:"off \u2014 no WebSocket frame capture (default)",value:"off"},{label:"on \u2014 capture WebSocket frames for assertions/extraction",value:"on"}],onValue:t=>{(t==="on"||t==="off")&&(e.setConfigKey("network_ws",t==="on"),e.emitFeedback("ok","/config set-network-ws",t))}},{id:"config-network-sse",label:"SSE Capture",type:"select",currentValue:e.tuiConfig.network_sse?"on":"off",options:[{label:"off \u2014 no SSE message capture (default)",value:"off"},{label:"on \u2014 capture SSE messages (Chromium-only) for assertions/extraction",value:"on"}],onValue:t=>{(t==="on"||t==="off")&&(e.setConfigKey("network_sse",t==="on"),e.emitFeedback("ok","/config set-network-sse",t))}}]}function Ss(e){if(!wr())return[];let t=e.tuiConfig.mobile;return[{id:"config-mobile-emulator",label:"Emulator",type:"submenu",children:[{id:"config-auto-grant-permissions",label:"Auto Grant Permissions",type:"select",currentValue:t?.auto_grant_permissions===!1?"off":"on",options:[{label:"on \u2014 grant Android runtime permissions at session start (default)",value:"on"},{label:"off \u2014 leave permission dialogs on screen",value:"off"}],onValue:r=>{(r==="on"||r==="off")&&(e.setMobile({auto_grant_permissions:r==="on"}),e.emitFeedback("ok","/config set-auto-grant-permissions",r))}}]},{id:"config-mobile-simulator",label:"Simulator",type:"submenu",children:[{id:"config-auto-accept-alerts",label:"Auto Accept Alerts",type:"select",currentValue:t?.auto_accept_alerts===!1?"off":"on",options:[{label:"on \u2014 accept iOS alerts, incl. permission prompts (default)",value:"on"},{label:"off \u2014 leave alerts on screen",value:"off"}],onValue:r=>{(r==="on"||r==="off")&&(e.setMobile({auto_accept_alerts:r==="on"}),e.emitFeedback("ok","/config set-auto-accept-alerts",r))}}]}]}function Lf(e){return{label:"Mobile",entries:[{key:"Device name",value:Qs(e?.default_target)??"(none)"},{key:"OS version",value:Zs(e?.default_target)??"(none)"},{key:"Default app",value:e?.default_app??"(none)"},{key:"Auto grant permissions (emulator)",value:e?.auto_grant_permissions===!1?"off":"on"},{key:"Auto accept alerts (simulator)",value:e?.auto_accept_alerts===!1?"off":"on"}]}}function Bf(e){return e.isRunning?"refused-running":e.hasRuns?e.isTesting&&!e.hasName?"needs-name":"proceed":"no-runs"}async function $f(e){await new an(e.tmsBaseUrl,e.username,e.accessKey).submitFeedback({instruction_id:"",test_id:e.testId,feedback_type:e.feedbackType,mode:e.mode??"human",...e.details?{details:e.details}:{}}),e.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:e.feedbackType})}var k=D(H(),1);function cE({localMode:e=!1,codeExport:t,codeLanguage:r,skipCodeValidation:n,updatePromise:o,migrationResult:i,sessionName:s,initialChatMode:u,initialObjective:f,initialGenerateLimits:g}={}){Fs();let w=(0,T.useRef)(new Kn),[p,x]=(0,T.useState)(0),c=w.current,[m]=(0,T.useState)(()=>new Vr),_=(0,T.useRef)(0),U=(0,T.useCallback)(()=>`msg-${++_.current}`,[]),[B,F]=(0,T.useState)(!1),[q,$]=(0,T.useState)(null),[z,ae]=(0,T.useState)(!1),[ee,te]=(0,T.useState)(0),[K,pe]=(0,T.useState)(!1),[Re,me]=(0,T.useState)(null),[$e,He]=(0,T.useState)(null),st=(0,T.useRef)(null),[zt,Rt]=(0,T.useState)(null),[ge,ut]=(0,T.useState)(null),[Ot,Oe]=(0,T.useState)(Jn()),[Le,Kt]=(0,T.useState)(null),[Ne,Yt]=(0,T.useState)([]),[mr,Cr]=(0,T.useState)(!1),[Kr,Er]=(0,T.useState)(!1),[gr,hr]=(0,T.useState)(null),[Tt,br]=(0,T.useState)(null),[Ir,vr]=(0,T.useState)(null),[Q,ue]=(0,T.useState)(null),ce=(0,T.useRef)(null),ie=(0,T.useRef)(null),de=(0,T.useRef)(0),Te=(0,T.useRef)(null),dt=(0,T.useRef)(!1),P=(0,T.useRef)(null),L=(0,T.useRef)(Va()),Y=(0,T.useRef)(null),X=(0,T.useRef)(!1),Z=(0,T.useRef)(""),Se=(0,T.useRef)(null),Je=(0,T.useRef)(null),le=(0,T.useRef)({}),St=(0,T.useRef)(null),{append:bt}=Xs(),Ce=(0,T.useCallback)(d=>bt((0,k.jsx)(b,{paddingX:1,children:d})),[bt]),[nr,Mt]=(0,T.useState)("booting"),[Of,Mf]=(0,T.useState)([]),[Nf,Ho]=(0,T.useState)(!1),[ws,jf]=(0,T.useState)(!1),[Tn,Vf]=(0,T.useState)("chat"),[Nt,xr]=(0,T.useState)(null),[kn,Rs]=(0,T.useState)(null),[Yr,Ts]=(0,T.useState)(!1),[Jr,Cn]=(0,T.useState)(!1),ks=(0,T.useRef)(()=>{}),Ff=(0,T.useCallback)((d,h)=>ks.current(d,h),[]),xe=Td({log:Ff});Gd(xe.state,xe.turnActive,Ce);let Go=(0,T.useRef)(!1),or=(0,T.useCallback)(()=>{Go.current||xe.state.scenarios.length!==0&&(Go.current=!0,Ce((0,k.jsx)($o,{scenarios:xe.state.scenarios,activeSid:null})))},[xe.state.scenarios,Ce]);(0,T.useEffect)(()=>{xe.isSessionClosed&&or()},[xe.isSessionClosed,or]);let[En,Qr]=(0,T.useState)(null),[Pe,Wo]=(0,T.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Uf=mi(),qf=mi(Gs),y=cd(),In=ld(),kt=(0,T.useMemo)(()=>({auth:{initResolver:d=>y.initResolver(d,(h,S,R,v)=>w.current.log(h,S,R,v)),getResolver:()=>y.getResolver(),getBasicAuth:()=>y.getBasicAuth(),getToken:()=>y.getToken()},getSession:()=>w.current,log:(d,h,S,R)=>w.current.log(d,h,S,R),state:{getTmsCredsCache:()=>Le,setTmsCredsCache:Kt,identityServicesRef:ie,screenshotQueueRef:ce},exit:{registerCleanup:Ft,setExitRemoteLogger:ua},options:{skipScreenshotQueue:e}}),[y.initResolver,y.getResolver,y.getBasicAuth,y.getToken,Le,e]),Hf=(0,T.useCallback)((d,h,S,R)=>{let v=ce.current;if(!v)return;if(Te.current&&R){L.current.track(Fa(Te.current.packTestDir,R,v,(j,N,ne,we)=>c.log(j,N,ne,we)));return}let I=de.current+h;Ua(c.sessionDir,I,d,v,(j,N,ne,we)=>c.log(j,N,ne,we),S)},[c]),Gf=(0,T.useCallback)((d,h,S)=>{c.logStep(d,h,S)},[c]),Wf=(0,T.useCallback)(d=>St.current?.setStepText(d),[]),Xf=(0,T.useCallback)(()=>St.current?.setStepComplete(),[]),{describe:Zr,onDescribe:zf,creditsRef:Xo}=If({hostIsTTY:()=>!!process.stdout.isTTY,resolve:()=>{let d=y.getResolvedBasicAuth();if(!d)return null;let h=Ge(y.creds.getDefaultEnv());return{authHeader:yi(d.username,d.access_key),sessionId:c.sessionId,controllerBaseUrl:h.controllerBaseUrl}}}),O=Pa(Hf,Gf,Wf,Xf,zf);(0,T.useEffect)(()=>{O.isRunning||Zr.stop()},[O.isRunning,Zr.stop]);let[C,Ee]=(0,T.useState)(()=>m.load()),E=qu({getDefaults:()=>m.getMobile(),setDefaults:d=>{m.setMobile(d),Ee(m.load())},resolveAppId:async(d,h)=>{let S=await y.resolveBasicAuth().catch(()=>null),R=S?{username:S.username,access_key:S.access_key}:y.getResolvedBasicAuth();if(!R?.username||!R.access_key)throw new Error("Log in to use an app id, or choose a local build.");let v=zo.current,I=await pa({appId:d,baseUrl:sn(ye),auth:{username:R.username,accessKey:R.access_key},onProgress:h,...v?{accepts:v==="emulator"?[".apk"]:[".zip"]}:{}});return{name:I.name,fromStore:I.fromStore}},appLabelFor:async d=>{try{return(await new fa().find(d))?.name}catch{return}}}),zo=(0,T.useRef)(null);zo.current=E.kind;let Ar=Us(C.mobile?.tui_target,C.mobile?.default_target?.kind),_r=Ar.kind==="emulator"||Ar.kind==="simulator",Kf=(0,T.useCallback)(async d=>{let h=process.cwd(),S=await Qu(h,d),R=await Promise.all(S.map(async j=>{let N=await Zu(rr(h,j),E.target);return{kind:"artifact",value:j,label:j,selectable:Ju(N),...N.state==="compatible"?{}:{reason:N.reason}}})),v=d.toLowerCase(),I=E.target?E.apps.filter(j=>!v||j.toLowerCase().includes(v)).map(j=>({kind:"installed",value:j,label:j})):[];return[...R,...I]},[E.apps,E.target]),Cs=E.phase==="checking"||E.phase==="doctor"||E.phase==="chooser"||E.phase==="confirm"||E.phase==="appSource"||E.phase==="appList"||E.phase==="appId"||E.phase==="picking"||E.phase==="apps",ir=(0,T.useRef)(null),Ko=(0,T.useRef)(null),[ft,Es]=(0,T.useState)(null),Pr=(0,T.useCallback)(d=>`Target is locked for this session \u2014 it already ran on ${d.label}. Use /new to start a fresh session and switch.`,[]),Yf=(0,T.useRef)(new Map),Is=(0,T.useRef)(new Set),As=(0,T.useRef)(null),[Dr,_s]=(0,T.useState)(null),[,Jf]=(0,T.useState)(0),vt=(0,T.useCallback)(()=>Jf(d=>d+1),[]),[V,je]=(0,T.useState)(null),Lr=y.creds.getActiveProfile(),ye=y.creds.getDefaultEnv(),Qf=ed({auth:y,env:ye,kind:()=>zo.current}),_t=(0,T.useCallback)((d,h)=>{let S=d?y.creds.loadProfileConfig(d,h):null;m.save({project_id:S?.project_id??null,project_name:S?.project_name??null,folder_id:S?.folder_id??null,folder_name:S?.folder_name??null}),Ee(m.load())},[y.creds,m]),Yo=(0,T.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let R=S.cached??await S.resolve();if(!R)return null;let v=Ge(h),I=new an(v.tmsBaseUrl,R.username,R.access_key);try{let N=(await I.listProjects()).find(we=>we.name==="KaneAI Generated");if(N)return{id:N.project_id,name:N.name};let ne=await I.createProject("KaneAI Generated");return{id:ne.id,name:ne.name}}catch{return null}},[y]),Jo=(0,T.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let R=S.cached??await S.resolve();if(!R)return null;let v=Ge(d),I=new an(v.tmsBaseUrl,R.username,R.access_key);try{let N=(await I.listFolders(h)).find(we=>we.name==="Untitled");if(N)return{id:N.id,name:N.name};let ne=await I.createFolder(h,"Untitled");return{id:ne.id,name:ne.name}}catch{return null}},[y]);(0,T.useEffect)(()=>{z||(c.start({model:C.model,environment:ye,profile:Lr}),s&&c.setSessionName(s),ae(!0))},[c,z,C.model,ye,Lr,s]);let Ps=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!z||Ps.current)return;Ps.current=!0;let d=s?[{label:"session",value:s},{label:"test",value:pi(rr(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:pi(rr(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];Ce((0,k.jsx)(hi,{title:"Recording",titleColor:"#ff9500",rows:d}))},[z,s,Ce]);let Ds=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!B||Ds.current||!z)return;Ds.current=!0;let d=kt.state.getTmsCredsCache();if(!d){c.log("warn","BOOT_RESOLVE_FAILED","Boot done but tmsCredsCache empty \u2014 non-controller APIs may fail");return}Ut({kind:"boot",tmsCreds:d,env:ye},kt).then(h=>{h&&(d.org_id!==void 0&&c.setOrgId(String(d.org_id)),c.setPlan(d.plan??null),c.setUserIdentity(d.username??null,d.email??null),c.log("info","BOOT_RESOLVE_OK","Boot identity attached",{username:d.username,org_id:d.org_id,plan:d.plan??null}))}).catch(h=>{c.log("error","BOOT_RESOLVE_ERROR","Boot identity attach error",{error:h instanceof Error?h.message:String(h)})})},[B,z,kt,ye,c]);let Pt=(0,T.useCallback)(async()=>{if(Le)return c.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:Le.username,org_id:Le.org_id}),Le;let d=await y.resolveBasicAuth();return d?(c.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:d.username,org_id:d.org_id,user_id:d.user_id}),Kt(d)):c.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),d},[y,Le,c]),An=(0,T.useCallback)(d=>{Ce((0,k.jsx)(hi,{title:"\u24D8 Auto-configured",titleColor:l.orange,rows:[{label:"project",value:`${d.projectName} (${d.projectId})`},{label:"folder",value:`${d.folderName} (${d.folderId})`},{label:"change with",value:(0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(a,{color:l.dim,children:"kane-cli config project <id>"}),(0,k.jsx)(a,{color:l.dim,children:"kane-cli config folder <id>"})]})}]}))},[Ce]),_n=(0,T.useCallback)(async()=>{let d=await Pt();if(!d)return c.log("warn","PROJECT_FAILED","No TMS credentials for project/folder gate"),null;let h=y.creds.getActiveProfile()??"default",S=y.creds.getDefaultEnv(),R=await ka({creds:y.creds,config:m,profile:h,env:S,tmsCreds:{username:d.username,access_key:d.access_key},isLocal:e,log:(v,I,j,N)=>c.log(v,I,j,N),onAnnounce:An});return R.status==="ok"?{projectId:R.projectId,folderId:R.folderId}:null},[Pt,m,c,y.creds,e,An]),he=(0,T.useCallback)(d=>{let h=U(),S={...d,id:h};Ce((0,k.jsx)(ju,{entry:S}))},[U,Ce]),M=(0,T.useCallback)((d,h,S,R,v)=>{Ce((0,k.jsx)(bd,{status:d,command:h,message:S,details:R,accentColor:v})),h==="/save"&&d==="ok"&&Ce((0,k.jsx)(b,{marginLeft:2,children:(0,k.jsxs)(a,{color:l.dim,children:["\u2192 Run ",(0,k.jsx)(a,{color:l.generateAccent,children:"/testmd"})," to list your saved tests."]})}))},[Ce]),Ls=(0,T.useRef)(()=>{}),sr=Ud(xe.state.scenarios.map(d=>(d.test_cases??[]).length)),Zf=(0,T.useCallback)(async()=>{let d=await _n();return Ee(m.load()),d},[_n,m]),Dt=Fd({tcg:xe,initialChatMode:u,tuiConfig:C,auth:y,session:c,runner:O,appendStatic:Ce,handleInput:d=>Ls.current(d),freezeTcgArtifact:or,rearmArtifactFreeze:()=>{Go.current=!1},openSwitchConfirm:d=>Qr({reason:"switch",to:d}),emitFeedback:M,excluded:sr.excluded,openBrowse:sr.open,initialGenerateLimits:g,ensureProjectAndFolder:Zf,config:m});ks.current=Dt.tcgLog;let{chatMode:Me,tcgError:wv,tcgValidationError:Rv,composeIdleHint:Tv,inputClearSeq:ep,handleGenerateSubmit:tp,flashComposeHint:Pn,setTcgError:kv}=Dt,rp=C.hints_enabled!==!1&&process.env.KANEAI_HINTS_DISABLED!=="1"&&!!process.stdout.isTTY&&!!process.stdin.isTTY&&process.env.KANE_SCREEN_READER!=="1",Bs=(0,T.useRef)(!1);Me==="generate"&&(Bs.current=!0);let{footerHint:np}=rf({enabled:rp,ready:nr==="ready",env:ye,config:C,tokenValid:y.tokenValid,chatMode:Me,sessionUsedGenerate:Bs.current,log:(d,h,S,R)=>w.current.log(d,h,S,R)}),yr=(0,T.useCallback)(async(d,h,S)=>{let R=E.device,v=S??(_r?"mobile":"web"),I=v==="mobile"?"device":"web",j=I==="device";c.log("info","RUN_TARGET_STATE","Dispatch target resolved",{mobile_mode:j,tui_target:C.mobile?.tui_target??null,device_bound:!!R,app_bound:!!R?.app_package,mobile_phase:E.phase,parked:!!ir.current});let N=j?Wu(d):{objective:d,token:null};if(j&&N.token&&!N.objective){he({type:"error",text:`@${N.token}: add an objective after the app token.`});return}if(!ft&&!N.token&&!h&&!Is.current.has(d)){let fe=y.getResolvedBasicAuth(),_e=fe?null:await y.getToken(),Fe=fe?yi(fe.username,fe.access_key):_e?`Bearer ${_e}`:null;if(Fe){let Ze=await rd({objective:d,sessionTarget:v,controllerBaseUrl:Ge(ye).controllerBaseUrl,authHeader:Fe,cache:Yf.current});c.log("info","CLASSIFY_VERDICT","Objective classified",{session_target:v,target:Ze?.target??null,confidence:Ze?.confidence??null});let Bt=nd(Ze,v);if(Bt.kind==="mismatch"){_s({objective:d,url:h,suggested:Bt.suggested,verdict:Bt.verdict});return}}}if(j&&!R){ir.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),E.begin();return}let ne=R;if(j&&N.token){let fe=ha(N.token);if(!fe){he({type:"error",text:`@${N.token}: ${ga}`});return}let _e=await E.bindAppForRun(fe);if(!_e.ok){he({type:"error",text:`@${N.token}: ${_e.error}`});return}ne=_e.device}else if(j){if(!R?.app_package){ir.current=d,he({type:"info",text:"Choose the app under test\u2026"}),E.requestAppSource();return}let fe=await E.validateBinding();if(!fe.ok){ir.current=d,he({type:"info",text:fe.reason}),fe.step==="device"?E.begin("reinit"):E.requestAppSource();return}}let we=j?N.objective:d,ke=X.current?null:Ga({flag:h,configDefault:C.default_url}),Qe=uc({objective:we,globalDir:rr(mt,"variables"),localDir:rr(process.cwd(),".testmuai","variables")}),Sr=c.nextRunIndex();de.current=Sr,Z.current=Qe.auteurObjective,Xo.current=0,c.logRunStart(Sr,Qe.auteurObjective,ke??""),c.setFirstRun(Qe.auteurObjective,ke??"");let jn=y.getResolvedBasicAuth(),Lt=jn,jt=null;if(!Lt&&(jt=await y.getToken(),!jt)){he({type:"error",text:"Not authenticated. Run /login first."});return}let Br=await ys({resolvedBasic:jn,token:jt,resolver:y.getResolver(),getTmsCredentials:Pt});Se.current=Br;let en=y.creds.getActiveProfile()??"default",tn=y.creds.getDefaultEnv();Ta(y.creds,m,en,tn,(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze));let Vn=m.load();if(Ee(Vn),j){if(!ne){ir.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),E.begin();return}if(!ne.app_package){ir.current=d,he({type:"info",text:"Choose the app under test\u2026"}),E.requestApp();return}}let Ve;try{Ve=await oc(I,{prepareDevice:async()=>{let fe=N.token??ne.app_package,_e=!N.token&&fe&&ne.udid?await Gu({udid:ne.udid,app:fe,runnerGen:O.sessionGen}):null,Fe=Ko.current;if(_e&&Fe&&Fe.key===_e)return he({type:"info",text:`Device ready: ${Fe.device.app_package} on ${Fe.displayName} (reusing session)`}),{device:Fe.device,...Fe.appRef?{appRef:Fe.appRef}:{},...Fe.appId?{appId:Fe.appId}:{}};let Ze=await Pt(),Bt=y.getResolvedBasicAuth(),pt=await va({...E.target?.osVersion?{device:{name:Ys(E.target),osVersion:E.target.osVersion}}:{},...ne.platform?{platform:ne.platform}:{},...N.token?{app:N.token}:ne.app_package?{app:ne.app_package}:{},defaults:C.mobile,interactive:!1,onProgress:ui=>Rt(ui),...Bt?.username&&Bt.access_key&&Ze?.org_id?{cloudUpload:{env:ye,orgId:String(Ze.org_id),userId:String(Ze.user_id??""),baseUrl:sn(ye),auth:{username:Bt.username,accessKey:Bt.access_key}}}:{}});return he({type:"info",text:`Device run: ${pt.device.app_package} on ${pt.device.udid}`}),_e&&(Ko.current={key:_e,device:pt.device,...pt.appRef?{appRef:pt.appRef}:{},...pt.appId?{appId:pt.appId}:{},displayName:pt.target.displayName}),{device:pt.device,...pt.appRef?{appRef:pt.appRef}:{},...pt.appId?{appId:pt.appId}:{}}},prepareWeb:async()=>{if(Pe.useCft)return he({type:"info",text:"CfT mode: Playwright will manage browser"}),{instance:null,tempDir:null};if(Pe.wsEndpoint)return he({type:"info",text:`WS endpoint: ${Pe.wsEndpoint.slice(0,60)}...`}),{wsEndpoint:Pe.wsEndpoint,instance:null,tempDir:null};if(Pe.cdpEndpoint)return he({type:"info",text:`CDP endpoint: ${Pe.cdpEndpoint}`}),{cdpEndpoint:Pe.cdpEndpoint,instance:null,tempDir:null};he({type:"info",text:"Starting Chrome..."});let fe=await In.ensureChrome(ke??void 0);c.logChromeLaunch(fe.port,fe.cdpEndpoint);let _e=_a({headless:Pe.headless,cdpEndpoint:fe.cdpEndpoint,chromePid:fe.process.pid});return _e&&(St.current=_e,Ft("marker-overlay",()=>_e.kill())),{cdpEndpoint:fe.cdpEndpoint,instance:fe,tempDir:null}}})}catch(fe){let _e=I==="device"?fe instanceof Error?fe.message:String(fe):Ia(fe);he({type:"error",text:_e});return}finally{Rt(null)}let Fn=Ve.kind==="web"?Ve.chrome:{instance:null,tempDir:null};if(Sr===0&&!e){c.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let fe=await _n(),_e=m.load();Ee(_e);let Fe=Ge(ye),Ze=Lt?{username:Lt.username,access_key:Lt.access_key}:await Pt();if(Ze){let Bt=await gc({tmsBaseUrl:Fe.tmsBaseUrl,auth:{username:Ze.username,access_key:Ze.access_key},objective:Qe.auteurObjective,url:ke??"",projectId:fe?.projectId??_e.project_id??"",folderId:fe?.folderId??_e.folder_id??"",hasCustomProfile:!!C.chrome_profile_path,...Ve.kind==="device"?{mobile:mc({platform:Ve.device.platform,appId:Ve.appId,deviceName:E.target?.displayName,osVersion:E.target?.osVersion,udid:Ve.device.udid})}:{},log:(pt,ui,up,dp)=>c.log(pt,ui,up,dp)});Bt&&(c.setTestId(Bt),fe?.projectId&&c.setProjectId(fe.projectId))}}c.setAuteurVariables(Qe.auteur),Je.current=Qe;let li=Lt&&!e?await dc({variables:Qe,auth:Lt,orgId:String((await Pt())?.org_id??""),env:ye,localMode:e,log:(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze)}):{};le.current=li;let Un=Ii(rr(mt,"global-memory.md")),cr=Ii(rr(process.cwd(),".testmuai","context.md"));if(Sr===0){let fe={mode:C.mode,max_steps:Pe.maxSteps,timeout:Pe.timeout>0?Pe.timeout:void 0,target:ic(Ve,{cdpEndpoint:Pe.cdpEndpoint||void 0,wsEndpoint:Pe.wsEndpoint||void 0}),app:ac(Ve),os_version:Ve.kind==="device"?E.target?.osVersion:void 0,device_name:sc(Ve,E.target??void 0),chrome_profile:C.chrome_profile_path||void 0,cdp_endpoint:Pe.cdpEndpoint||void 0,ws_endpoint:Pe.wsEndpoint||void 0,headless:Pe.headless,global_context:Un??void 0,local_context:cr??void 0,variables:Object.keys(Qe.auteur).length>0?Qe.auteur:void 0};c.setResolvedGlobal(fe)}dt.current||(dt.current=!0,Te.current=await Ba({objectiveOrName:c.sessionName??d,sessionId:c.sessionId,title:c.sessionName??d,producerVersion:xt,pid:process.pid,surfaces:ke?[ke]:void 0,packRootDir:rr(c.sessionDir,"evidence")})),P.current||(P.current=La(Fn.cdpEndpoint),P.current());let qn=lc(Qe.auteur,Qe.auteurObjective),lp=cc({objective:Qe.auteurObjective,url:Ve.kind==="device"?void 0:ke??void 0,requireStartUrl:Ve.kind==="web"&&!X.current&&ke===null,model:C.model,chrome:Fn,auth:Br,sessionId:c.sessionId,runIndex:Sr,windowSize:C.window_size,maxSteps:Pe.maxSteps,headless:Pe.headless,networkWs:C.network_ws,networkSse:C.network_sse,bugDetection:C.bug_detection,variables:Object.keys(qn).length>0?qn:void 0,globalContext:Un??void 0,localContext:cr??void 0,sessionContext:c.getContext(),device:Ve.kind==="device"?Ve.device:void 0,evidence:$a(Te.current)});ke&&$(ke),me(null),Y.current=null,Es({kind:j?"mobile":"web",label:Ve.kind==="device"?rn(Ve.device.target_kind==="simulator"?"simulator":"emulator"):"Desktop"}),O.startRun(lp,{environment:ye,mode:C.mode,assertionMode:C.assertion_mode,log:(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze)}),te(fe=>fe+1)},[y,In,m,C,c,ye,O,he,Pe,_n,Pt,_r,ft,E.device,E.target,E.begin,E.requestApp,E.requestAppSource,E.validateBinding,E.bindAppForRun]),Dn=(0,T.useCallback)(d=>{let h=Dr;if(h){if(_s(null),c.log("info","CLASSIFY_ACTION","Classification prompt answered",{action:d,suggested:h.suggested,target:h.verdict.target,confidence:h.verdict.confidence}),d==="cancel"){he({type:"info",text:`Run cancelled \u2014 "${h.objective}" was not run.`});return}if(Is.current.add(h.objective),d==="keep"){yr(h.objective,h.url);return}if(h.suggested==="web"){m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ee(m.load()),E.reset(),he({type:"info",text:"Session target: Desktop (Chrome)"}),yr(h.objective,h.url,"web");return}As.current=h.verdict.appHint??null,ir.current=h.objective,E.begin(d==="pick"?"reinit":"confirm")}},[Dr,c,he,yr,m,E]);Hu({phase:E.phase,device:E.device,requestApp:E.requestAppSource,pendingRef:ir,dispatch:d=>{yr(d)},notify:he,onSettle:()=>{As.current=null}});let op=(0,T.useCallback)(async d=>{let h=yv(d),S=Za(h),R=new Kn;for(let ke of S.warnings)R.log("warn","RESOLVER_WARNING",ke);let v=y.getResolvedBasicAuth(),I=null;v||(I=await y.getToken());let j=await ys({resolvedBasic:v,token:I,resolver:y.getResolver(),getTmsCredentials:Pt}),N=ye,ne=Ge(N),we=y.creds.getActiveProfile()??"default";return{path:h,cwd:process.cwd(),opts:{},isAgent:!1,disableAskUser:!0,resolved:S,resolvedAuth:j,cliOverrides:{},environment:N,envConfig:ne,profile:we,model:"v16-alpha",creds:y.creds,configStore:m,session:R,skipGlobalRemoteLogger:!0,onAnnounce:An}},[y,m,ye,An,Pt]),Ae=Rd({buildInput:op,remoteLogger:null}),Qo=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(O.bifurcationInfo&&O.bifurcationInfo!==Qo.current){Qo.current=O.bifurcationInfo;let{flows:d,isSingleFlow:h}=O.bifurcationInfo;h&&d.length===1&&d[0]?c.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:d[0]}):!h&&d.length>1&&c.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:d.length})}},[O.bifurcationInfo,c,he]);let Zo=T.default.useRef(null),ei=T.default.useRef(0),ti=T.default.useRef(0);(0,T.useEffect)(()=>{if(O.lastRunEnd&&O.lastRunEnd!==Zo.current){Zo.current=O.lastRunEnd,X.current=!0;let{status:d,duration:h,summary:S,reason:R,context:v}=O.lastRunEnd,{passed:I,failed:j,total:N}=Da(O.steps);ei.current+=N,ti.current+=h??0;let ne=O.lastRunEnd?.credits_consumed,we=ne!=null||Xo.current>0?(ne??0)+Xo.current:void 0;me({status:d,duration:h??0,summary:S??"",stepsPassed:I,stepsFailed:j,stepsTotal:N,reason:R,finalState:O.lastRunEnd?.final_state,creditsConsumed:we}),c.logRunEnd(de.current,d,h,S,O.lastRunEnd?.result_code);let ke=O.bifurcationInfo,Qe=ke&&!ke.isSingleFlow?ke.flows:null,Sr=wa(O.lastRunEnd,de.current,Qe),jn=Ra(O.lastRunEnd,Z.current,de.current,Sr);c.addRunResult(jn,O.lastRunEnd?.total_runs),Ti(Te.current,O.getEvidenceState(),O.lastRunEnd);let Lt=O.lastRunEnd?.per_flow_metadata;if(ke&&!ke.isSingleFlow&&Lt&&Lt.length>1)for(let jt=0;jt<Lt.length;jt++){let Br=Lt[jt],en=O.steps[jt],tn=en?.children??[],Vn=tn.filter(cr=>cr.status==="passed").length,Ve=tn.filter(cr=>cr.status==="failed").length,Fn=tn.reduce((cr,qn)=>cr+(qn.duration??0),0),li=en?.status==="failed"?"failed":"passed",Un=ke.flows[jt]??en?.objective??Z.current;c.addFlow({runIndex:de.current,flowId:ke.flows[jt],objective:Un,status:li,summary:Br.summary??"",duration:Fn,steps:Vn+Ve,stepsPassed:Vn,stepsFailed:Ve,reason:Br.error_message??void 0,creditsConsumed:Br.credits_consumed??void 0})}else c.addFlow({runIndex:de.current,objective:Z.current,status:d,summary:S??"",duration:h??0,steps:N,stepsPassed:I,stepsFailed:j,reason:R,creditsConsumed:O.lastRunEnd?.credits_consumed})}},[O.lastRunEnd,c,he]);let ri=(0,T.useRef)(null);(0,T.useEffect)(()=>{O.askingUser&&(ri.current=O.askingUser)},[O.askingUser]);let ni=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(Re&&!O.isRunning&&O.lastRunEnd){if(ni.current===O.lastRunEnd)return;ni.current=O.lastRunEnd,Ce((0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(Rf,{status:Re.status,steps:Re.stepsTotal,duration:Re.duration,creditsConsumed:Re.creditsConsumed,reason:Re.reason}),(0,k.jsx)(Tf,{})]})),me(null)}},[Re,O.isRunning,O.lastRunEnd,Ce]);let $s=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(Ae.runSummary&&!Ae.running){if($s.current===Ae.runSummary)return;$s.current=Ae.runSummary,(Ae.summary||Ae.links)&&Ce((0,k.jsxs)(b,{flexDirection:"column",children:[Ae.summary&&(0,k.jsx)(rc,{data:Ae.summary}),Ae.links&&(0,k.jsx)(Qn,{...Ae.links,autoExit:!1})]}))}},[Ae.runSummary,Ae.running,Ae.summary,Ae.links,Ce]),(0,T.useEffect)(()=>{St.current?.setRunActive(O.isRunning)},[O.isRunning]),(0,T.useEffect)(()=>{if(O.runError&&!O.isRunning){let d=O.runError.trim();c.log("error","RUNNER_ERROR","Runner error occurred",{error:d}),c.escalateRun(c.nextRunIndex()-1),!O.lastRunEnd&&Y.current!==O.runError&&(Y.current=O.runError,Ti(Te.current,O.getEvidenceState(),null));let S=d.split(`
22
+ `),screenshot_b64:u}}})},[e,t,r]);return{describe:r,onDescribe:o,creditsRef:n}}var qo=e=>({kind:"login",env:e}),xs=e=>({kind:"switch",env:e}),Af=(e,t)=>e?{kind:"switch",env:t}:{kind:"logout"};async function ys(e){let t=await e.getTmsCredentials();return{basicAuth:e.resolvedBasic??(t?{username:t.username,access_key:t.access_key}:null),token:e.token,resolver:e.resolver,resolvedCreds:t}}function _f(e){return[{id:"run-headless",label:"Headless",type:"select",currentValue:e.runOptions.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:t=>{e.patchRunOptions({headless:t==="on"})}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:e.runOptions.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:t=>{e.patchRunOptions({cdpEndpoint:t})}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:e.runOptions.wsEndpoint,placeholder:"wss://...",onValue:t=>{e.patchRunOptions({wsEndpoint:t})}}]}function Pf(e){return Rr()?[{id:"run-device",label:"Device",type:"action",currentValue:e.deviceLabel??"(none)",suppressFeedback:!0,onAction:()=>e.openDevicePicker()},{id:"run-app",label:"App",type:"action",currentValue:e.appLabel??"(none)",suppressFeedback:!0,onAction:()=>e.openAppPicker()}]:[]}function Df(e){return[{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:e.onChromeProfilePicker??(()=>{})},{id:"config-window",label:"Window Size",type:"action",currentValue:e.windowSizeLabel,onWindowSizePicker:e.onWindowSizePicker??(()=>{})},{id:"config-default-url",label:"Default URL",type:"text-input",currentValue:e.tuiConfig.default_url??"",placeholder:"https://example.com",onValue:t=>{let r=Yn(t);if(!r){e.emitFeedback("error","/config set-url","Enter a valid URL (e.g. example.com)");return}e.setConfigKey("default_url",r),e.emitFeedback("ok","/config set-url",r)}},{id:"config-network-ws",label:"WebSocket Capture",type:"select",currentValue:e.tuiConfig.network_ws?"on":"off",options:[{label:"off \u2014 no WebSocket frame capture (default)",value:"off"},{label:"on \u2014 capture WebSocket frames for assertions/extraction",value:"on"}],onValue:t=>{(t==="on"||t==="off")&&(e.setConfigKey("network_ws",t==="on"),e.emitFeedback("ok","/config set-network-ws",t))}},{id:"config-network-sse",label:"SSE Capture",type:"select",currentValue:e.tuiConfig.network_sse?"on":"off",options:[{label:"off \u2014 no SSE message capture (default)",value:"off"},{label:"on \u2014 capture SSE messages (Chromium-only) for assertions/extraction",value:"on"}],onValue:t=>{(t==="on"||t==="off")&&(e.setConfigKey("network_sse",t==="on"),e.emitFeedback("ok","/config set-network-sse",t))}}]}function Ss(e){if(!Rr())return[];let t=e.tuiConfig.mobile;return[{id:"config-mobile-emulator",label:"Emulator",type:"submenu",children:[{id:"config-auto-grant-permissions",label:"Auto Grant Permissions",type:"select",currentValue:t?.auto_grant_permissions===!1?"off":"on",options:[{label:"on \u2014 grant Android runtime permissions at session start (default)",value:"on"},{label:"off \u2014 leave permission dialogs on screen",value:"off"}],onValue:r=>{(r==="on"||r==="off")&&(e.setMobile({auto_grant_permissions:r==="on"}),e.emitFeedback("ok","/config set-auto-grant-permissions",r))}}]},{id:"config-mobile-simulator",label:"Simulator",type:"submenu",children:[{id:"config-auto-accept-alerts",label:"Auto Accept Alerts",type:"select",currentValue:t?.auto_accept_alerts===!1?"off":"on",options:[{label:"on \u2014 accept iOS alerts, incl. permission prompts (default)",value:"on"},{label:"off \u2014 leave alerts on screen",value:"off"}],onValue:r=>{(r==="on"||r==="off")&&(e.setMobile({auto_accept_alerts:r==="on"}),e.emitFeedback("ok","/config set-auto-accept-alerts",r))}}]}]}function Lf(e){return{label:"Mobile",entries:[{key:"Device name",value:Qs(e?.default_target)??"(none)"},{key:"OS version",value:Zs(e?.default_target)??"(none)"},{key:"Default app",value:e?.default_app??"(none)"},{key:"Auto grant permissions (emulator)",value:e?.auto_grant_permissions===!1?"off":"on"},{key:"Auto accept alerts (simulator)",value:e?.auto_accept_alerts===!1?"off":"on"}]}}function Bf(e){return e.isRunning?"refused-running":e.hasRuns?e.isTesting&&!e.hasName?"needs-name":"proceed":"no-runs"}async function $f(e){await new an(e.tmsBaseUrl,e.username,e.accessKey).submitFeedback({instruction_id:"",test_id:e.testId,feedback_type:e.feedbackType,mode:e.mode??"human",...e.details?{details:e.details}:{}}),e.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:e.feedbackType})}var k=D(H(),1);function cE({localMode:e=!1,codeExport:t,codeLanguage:r,skipCodeValidation:n,updatePromise:o,migrationResult:i,sessionName:s,initialChatMode:u,initialObjective:f,initialGenerateLimits:g}={}){Fs();let w=(0,T.useRef)(new Kn),[p,x]=(0,T.useState)(0),c=w.current,[m]=(0,T.useState)(()=>new Vr),_=(0,T.useRef)(0),U=(0,T.useCallback)(()=>`msg-${++_.current}`,[]),[B,F]=(0,T.useState)(!1),[q,$]=(0,T.useState)(null),[z,ae]=(0,T.useState)(!1),[ee,te]=(0,T.useState)(0),[K,pe]=(0,T.useState)(!1),[Re,me]=(0,T.useState)(null),[$e,He]=(0,T.useState)(null),st=(0,T.useRef)(null),[zt,Rt]=(0,T.useState)(null),[ge,ut]=(0,T.useState)(null),[Ot,Oe]=(0,T.useState)(Jn()),[Le,Kt]=(0,T.useState)(null),[Ne,Yt]=(0,T.useState)([]),[gr,Er]=(0,T.useState)(!1),[Kr,Ir]=(0,T.useState)(!1),[hr,br]=(0,T.useState)(null),[Tt,vr]=(0,T.useState)(null),[Ar,xr]=(0,T.useState)(null),[Q,ue]=(0,T.useState)(null),ce=(0,T.useRef)(null),ie=(0,T.useRef)(null),de=(0,T.useRef)(0),Te=(0,T.useRef)(null),dt=(0,T.useRef)(!1),P=(0,T.useRef)(null),L=(0,T.useRef)(Va()),Y=(0,T.useRef)(null),X=(0,T.useRef)(!1),Z=(0,T.useRef)(""),Se=(0,T.useRef)(null),Je=(0,T.useRef)(null),le=(0,T.useRef)({}),St=(0,T.useRef)(null),{append:bt}=Xs(),Ce=(0,T.useCallback)(d=>bt((0,k.jsx)(b,{paddingX:1,children:d})),[bt]),[nr,Mt]=(0,T.useState)("booting"),[Of,Mf]=(0,T.useState)([]),[Nf,Ho]=(0,T.useState)(!1),[ws,jf]=(0,T.useState)(!1),[Tn,Vf]=(0,T.useState)("chat"),[Nt,yr]=(0,T.useState)(null),[kn,Rs]=(0,T.useState)(null),[Yr,Ts]=(0,T.useState)(!1),[Jr,Cn]=(0,T.useState)(!1),ks=(0,T.useRef)(()=>{}),Ff=(0,T.useCallback)((d,h)=>ks.current(d,h),[]),xe=Td({log:Ff});Gd(xe.state,xe.turnActive,Ce);let Go=(0,T.useRef)(!1),or=(0,T.useCallback)(()=>{Go.current||xe.state.scenarios.length!==0&&(Go.current=!0,Ce((0,k.jsx)($o,{scenarios:xe.state.scenarios,activeSid:null})))},[xe.state.scenarios,Ce]);(0,T.useEffect)(()=>{xe.isSessionClosed&&or()},[xe.isSessionClosed,or]);let[En,Qr]=(0,T.useState)(null),[Pe,Wo]=(0,T.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Uf=mi(),qf=mi(Gs),y=cd(),In=ld(),kt=(0,T.useMemo)(()=>({auth:{initResolver:d=>y.initResolver(d,(h,S,R,v)=>w.current.log(h,S,R,v)),getResolver:()=>y.getResolver(),getBasicAuth:()=>y.getBasicAuth(),getToken:()=>y.getToken()},getSession:()=>w.current,log:(d,h,S,R)=>w.current.log(d,h,S,R),state:{getTmsCredsCache:()=>Le,setTmsCredsCache:Kt,identityServicesRef:ie,screenshotQueueRef:ce},exit:{registerCleanup:Ft,setExitRemoteLogger:ua},options:{skipScreenshotQueue:e}}),[y.initResolver,y.getResolver,y.getBasicAuth,y.getToken,Le,e]),Hf=(0,T.useCallback)((d,h,S,R)=>{let v=ce.current;if(!v)return;if(Te.current&&R){L.current.track(Fa(Te.current.packTestDir,R,v,(j,N,ne,we)=>c.log(j,N,ne,we)));return}let I=de.current+h;Ua(c.sessionDir,I,d,v,(j,N,ne,we)=>c.log(j,N,ne,we),S)},[c]),Gf=(0,T.useCallback)((d,h,S)=>{c.logStep(d,h,S)},[c]),Wf=(0,T.useCallback)(d=>St.current?.setStepText(d),[]),Xf=(0,T.useCallback)(()=>St.current?.setStepComplete(),[]),{describe:Zr,onDescribe:zf,creditsRef:Xo}=If({hostIsTTY:()=>!!process.stdout.isTTY,resolve:()=>{let d=y.getResolvedBasicAuth();if(!d)return null;let h=Ge(y.creds.getDefaultEnv());return{authHeader:yi(d.username,d.access_key),sessionId:c.sessionId,controllerBaseUrl:h.controllerBaseUrl}}}),O=Pa(Hf,Gf,Wf,Xf,zf);(0,T.useEffect)(()=>{O.isRunning||Zr.stop()},[O.isRunning,Zr.stop]);let[C,Ee]=(0,T.useState)(()=>m.load()),E=qu({getDefaults:()=>m.getMobile(),setDefaults:d=>{m.setMobile(d),Ee(m.load())},resolveAppId:async(d,h)=>{let S=await y.resolveBasicAuth().catch(()=>null),R=S?{username:S.username,access_key:S.access_key}:y.getResolvedBasicAuth();if(!R?.username||!R.access_key)throw new Error("Log in to use an app id, or choose a local build.");let v=zo.current,I=await pa({appId:d,baseUrl:sn(ye),auth:{username:R.username,accessKey:R.access_key},onProgress:h,...v?{accepts:v==="emulator"?[".apk"]:[".zip"]}:{}});return{name:I.name,fromStore:I.fromStore}},appLabelFor:async d=>{try{return(await new fa().find(d))?.name}catch{return}}}),zo=(0,T.useRef)(null);zo.current=E.kind;let _r=Us(C.mobile?.tui_target,C.mobile?.default_target?.kind),ir=_r.kind==="emulator"||_r.kind==="simulator",Kf=(0,T.useCallback)(async d=>{let h=process.cwd(),S=await Qu(h,d),R=await Promise.all(S.map(async j=>{let N=await Zu(rr(h,j),E.target);return{kind:"artifact",value:j,label:j,selectable:Ju(N),...N.state==="compatible"?{}:{reason:N.reason}}})),v=d.toLowerCase(),I=E.target?E.apps.filter(j=>!v||j.toLowerCase().includes(v)).map(j=>({kind:"installed",value:j,label:j})):[];return[...R,...I]},[E.apps,E.target]),Cs=E.phase==="checking"||E.phase==="doctor"||E.phase==="chooser"||E.phase==="confirm"||E.phase==="appSource"||E.phase==="appList"||E.phase==="appId"||E.phase==="picking"||E.phase==="apps",sr=(0,T.useRef)(null),Ko=(0,T.useRef)(null),[ft,Es]=(0,T.useState)(null),Pr=(0,T.useCallback)(d=>`Target is locked for this session \u2014 it already ran on ${d.label}. Use /new to start a fresh session and switch.`,[]),Yf=(0,T.useRef)(new Map),Is=(0,T.useRef)(new Set),As=(0,T.useRef)(null),[Dr,_s]=(0,T.useState)(null),[,Jf]=(0,T.useState)(0),vt=(0,T.useCallback)(()=>Jf(d=>d+1),[]),[V,je]=(0,T.useState)(null),Lr=y.creds.getActiveProfile(),ye=y.creds.getDefaultEnv(),Qf=ed({auth:y,env:ye,kind:()=>zo.current}),_t=(0,T.useCallback)((d,h)=>{let S=d?y.creds.loadProfileConfig(d,h):null;m.save({project_id:S?.project_id??null,project_name:S?.project_name??null,folder_id:S?.folder_id??null,folder_name:S?.folder_name??null}),Ee(m.load())},[y.creds,m]),Yo=(0,T.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let R=S.cached??await S.resolve();if(!R)return null;let v=Ge(h),I=new an(v.tmsBaseUrl,R.username,R.access_key);try{let N=(await I.listProjects()).find(we=>we.name==="KaneAI Generated");if(N)return{id:N.project_id,name:N.name};let ne=await I.createProject("KaneAI Generated");return{id:ne.id,name:ne.name}}catch{return null}},[y]),Jo=(0,T.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let R=S.cached??await S.resolve();if(!R)return null;let v=Ge(d),I=new an(v.tmsBaseUrl,R.username,R.access_key);try{let N=(await I.listFolders(h)).find(we=>we.name==="Untitled");if(N)return{id:N.id,name:N.name};let ne=await I.createFolder(h,"Untitled");return{id:ne.id,name:ne.name}}catch{return null}},[y]);(0,T.useEffect)(()=>{z||(c.start({model:C.model,environment:ye,profile:Lr}),s&&c.setSessionName(s),ae(!0))},[c,z,C.model,ye,Lr,s]);let Ps=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!z||Ps.current)return;Ps.current=!0;let d=s?[{label:"session",value:s},{label:"test",value:pi(rr(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:pi(rr(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];Ce((0,k.jsx)(hi,{title:"Recording",titleColor:"#ff9500",rows:d}))},[z,s,Ce]);let Ds=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!B||Ds.current||!z)return;Ds.current=!0;let d=kt.state.getTmsCredsCache();if(!d){c.log("warn","BOOT_RESOLVE_FAILED","Boot done but tmsCredsCache empty \u2014 non-controller APIs may fail");return}Ut({kind:"boot",tmsCreds:d,env:ye},kt).then(h=>{h&&(d.org_id!==void 0&&c.setOrgId(String(d.org_id)),c.setPlan(d.plan??null),c.setUserIdentity(d.username??null,d.email??null),c.log("info","BOOT_RESOLVE_OK","Boot identity attached",{username:d.username,org_id:d.org_id,plan:d.plan??null}))}).catch(h=>{c.log("error","BOOT_RESOLVE_ERROR","Boot identity attach error",{error:h instanceof Error?h.message:String(h)})})},[B,z,kt,ye,c]);let Pt=(0,T.useCallback)(async()=>{if(Le)return c.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:Le.username,org_id:Le.org_id}),Le;let d=await y.resolveBasicAuth();return d?(c.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:d.username,org_id:d.org_id,user_id:d.user_id}),Kt(d)):c.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),d},[y,Le,c]),An=(0,T.useCallback)(d=>{Ce((0,k.jsx)(hi,{title:"\u24D8 Auto-configured",titleColor:l.orange,rows:[{label:"project",value:`${d.projectName} (${d.projectId})`},{label:"folder",value:`${d.folderName} (${d.folderId})`},{label:"change with",value:(0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(a,{color:l.dim,children:"kane-cli config project <id>"}),(0,k.jsx)(a,{color:l.dim,children:"kane-cli config folder <id>"})]})}]}))},[Ce]),_n=(0,T.useCallback)(async()=>{let d=await Pt();if(!d)return c.log("warn","PROJECT_FAILED","No TMS credentials for project/folder gate"),null;let h=y.creds.getActiveProfile()??"default",S=y.creds.getDefaultEnv(),R=await ka({creds:y.creds,config:m,profile:h,env:S,tmsCreds:{username:d.username,access_key:d.access_key},isLocal:e,log:(v,I,j,N)=>c.log(v,I,j,N),onAnnounce:An});return R.status==="ok"?{projectId:R.projectId,folderId:R.folderId}:null},[Pt,m,c,y.creds,e,An]),he=(0,T.useCallback)(d=>{let h=U(),S={...d,id:h};Ce((0,k.jsx)(ju,{entry:S}))},[U,Ce]),M=(0,T.useCallback)((d,h,S,R,v)=>{Ce((0,k.jsx)(bd,{status:d,command:h,message:S,details:R,accentColor:v})),h==="/save"&&d==="ok"&&Ce((0,k.jsx)(b,{marginLeft:2,children:(0,k.jsxs)(a,{color:l.dim,children:["\u2192 Run ",(0,k.jsx)(a,{color:l.generateAccent,children:"/testmd"})," to list your saved tests."]})}))},[Ce]),Ls=(0,T.useRef)(()=>{}),ar=Ud(xe.state.scenarios.map(d=>(d.test_cases??[]).length)),Zf=(0,T.useCallback)(async()=>{let d=await _n();return Ee(m.load()),d},[_n,m]),Dt=Fd({tcg:xe,initialChatMode:u,tuiConfig:C,auth:y,session:c,runner:O,appendStatic:Ce,handleInput:d=>Ls.current(d),freezeTcgArtifact:or,rearmArtifactFreeze:()=>{Go.current=!1},openSwitchConfirm:d=>Qr({reason:"switch",to:d}),emitFeedback:M,excluded:ar.excluded,openBrowse:ar.open,initialGenerateLimits:g,ensureProjectAndFolder:Zf,config:m});ks.current=Dt.tcgLog;let{chatMode:Me,tcgError:wv,tcgValidationError:Rv,composeIdleHint:Tv,inputClearSeq:ep,handleGenerateSubmit:tp,flashComposeHint:Pn,setTcgError:kv}=Dt,rp=C.hints_enabled!==!1&&process.env.KANEAI_HINTS_DISABLED!=="1"&&!!process.stdout.isTTY&&!!process.stdin.isTTY&&process.env.KANE_SCREEN_READER!=="1",Bs=(0,T.useRef)(!1);Me==="generate"&&(Bs.current=!0);let{footerHint:np}=rf({enabled:rp,ready:nr==="ready",env:ye,config:C,tokenValid:y.tokenValid,chatMode:Me,sessionUsedGenerate:Bs.current,log:(d,h,S,R)=>w.current.log(d,h,S,R)}),Sr=(0,T.useCallback)(async(d,h,S)=>{let R=E.device,v=S??(ir?"mobile":"web"),I=v==="mobile"?"device":"web",j=I==="device";c.log("info","RUN_TARGET_STATE","Dispatch target resolved",{mobile_mode:j,tui_target:C.mobile?.tui_target??null,device_bound:!!R,app_bound:!!R?.app_package,mobile_phase:E.phase,parked:!!sr.current});let N=j?Wu(d):{objective:d,token:null};if(j&&N.token&&!N.objective){he({type:"error",text:`@${N.token}: add an objective after the app token.`});return}if(!ft&&!N.token&&!h&&!Is.current.has(d)){let fe=y.getResolvedBasicAuth(),_e=fe?null:await y.getToken(),Fe=fe?yi(fe.username,fe.access_key):_e?`Bearer ${_e}`:null;if(Fe){let Ze=await rd({objective:d,sessionTarget:v,controllerBaseUrl:Ge(ye).controllerBaseUrl,authHeader:Fe,cache:Yf.current});c.log("info","CLASSIFY_VERDICT","Objective classified",{session_target:v,target:Ze?.target??null,confidence:Ze?.confidence??null});let Bt=nd(Ze,v);if(Bt.kind==="mismatch"){_s({objective:d,url:h,suggested:Bt.suggested,verdict:Bt.verdict});return}}}if(j&&!R){sr.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),E.begin();return}let ne=R;if(j&&N.token){let fe=ha(N.token);if(!fe){he({type:"error",text:`@${N.token}: ${ga}`});return}let _e=await E.bindAppForRun(fe);if(!_e.ok){he({type:"error",text:`@${N.token}: ${_e.error}`});return}ne=_e.device}else if(j){if(!R?.app_package){sr.current=d,he({type:"info",text:"Choose the app under test\u2026"}),E.requestAppSource();return}let fe=await E.validateBinding();if(!fe.ok){sr.current=d,he({type:"info",text:fe.reason}),fe.step==="device"?E.begin("reinit"):E.requestAppSource();return}}let we=j?N.objective:d,ke=X.current?null:Ga({flag:h,configDefault:C.default_url}),Qe=uc({objective:we,globalDir:rr(mt,"variables"),localDir:rr(process.cwd(),".testmuai","variables")}),wr=c.nextRunIndex();de.current=wr,Z.current=Qe.auteurObjective,Xo.current=0,c.logRunStart(wr,Qe.auteurObjective,ke??""),c.setFirstRun(Qe.auteurObjective,ke??"");let jn=y.getResolvedBasicAuth(),Lt=jn,jt=null;if(!Lt&&(jt=await y.getToken(),!jt)){he({type:"error",text:"Not authenticated. Run /login first."});return}let Br=await ys({resolvedBasic:jn,token:jt,resolver:y.getResolver(),getTmsCredentials:Pt});Se.current=Br;let en=y.creds.getActiveProfile()??"default",tn=y.creds.getDefaultEnv();Ta(y.creds,m,en,tn,(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze));let Vn=m.load();if(Ee(Vn),j){if(!ne){sr.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),E.begin();return}if(!ne.app_package){sr.current=d,he({type:"info",text:"Choose the app under test\u2026"}),E.requestApp();return}}let Ve;try{Ve=await oc(I,{prepareDevice:async()=>{let fe=N.token??ne.app_package,_e=!N.token&&fe&&ne.udid?await Gu({udid:ne.udid,app:fe,runnerGen:O.sessionGen}):null,Fe=Ko.current;if(_e&&Fe&&Fe.key===_e)return he({type:"info",text:`Device ready: ${Fe.device.app_package} on ${Fe.displayName} (reusing session)`}),{device:Fe.device,...Fe.appRef?{appRef:Fe.appRef}:{},...Fe.appId?{appId:Fe.appId}:{}};let Ze=await Pt(),Bt=y.getResolvedBasicAuth(),pt=await va({...E.target?.osVersion?{device:{name:Ys(E.target),osVersion:E.target.osVersion}}:{},...ne.platform?{platform:ne.platform}:{},...N.token?{app:N.token}:ne.app_package?{app:ne.app_package}:{},defaults:C.mobile,interactive:!1,onProgress:ui=>Rt(ui),...Bt?.username&&Bt.access_key&&Ze?.org_id?{cloudUpload:{env:ye,orgId:String(Ze.org_id),userId:String(Ze.user_id??""),baseUrl:sn(ye),auth:{username:Bt.username,accessKey:Bt.access_key}}}:{}});return he({type:"info",text:`Device run: ${pt.device.app_package} on ${pt.device.udid}`}),_e&&(Ko.current={key:_e,device:pt.device,...pt.appRef?{appRef:pt.appRef}:{},...pt.appId?{appId:pt.appId}:{},displayName:pt.target.displayName}),{device:pt.device,...pt.appRef?{appRef:pt.appRef}:{},...pt.appId?{appId:pt.appId}:{}}},prepareWeb:async()=>{if(Pe.useCft)return he({type:"info",text:"CfT mode: Playwright will manage browser"}),{instance:null,tempDir:null};if(Pe.wsEndpoint)return he({type:"info",text:`WS endpoint: ${Pe.wsEndpoint.slice(0,60)}...`}),{wsEndpoint:Pe.wsEndpoint,instance:null,tempDir:null};if(Pe.cdpEndpoint)return he({type:"info",text:`CDP endpoint: ${Pe.cdpEndpoint}`}),{cdpEndpoint:Pe.cdpEndpoint,instance:null,tempDir:null};he({type:"info",text:"Starting Chrome..."});let fe=await In.ensureChrome(ke??void 0);c.logChromeLaunch(fe.port,fe.cdpEndpoint);let _e=_a({headless:Pe.headless,cdpEndpoint:fe.cdpEndpoint,chromePid:fe.process.pid});return _e&&(St.current=_e,Ft("marker-overlay",()=>_e.kill())),{cdpEndpoint:fe.cdpEndpoint,instance:fe,tempDir:null}}})}catch(fe){let _e=I==="device"?fe instanceof Error?fe.message:String(fe):Ia(fe);he({type:"error",text:_e});return}finally{Rt(null)}let Fn=Ve.kind==="web"?Ve.chrome:{instance:null,tempDir:null};if(wr===0&&!e){c.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let fe=await _n(),_e=m.load();Ee(_e);let Fe=Ge(ye),Ze=Lt?{username:Lt.username,access_key:Lt.access_key}:await Pt();if(Ze){let Bt=await gc({tmsBaseUrl:Fe.tmsBaseUrl,auth:{username:Ze.username,access_key:Ze.access_key},objective:Qe.auteurObjective,url:ke??"",projectId:fe?.projectId??_e.project_id??"",folderId:fe?.folderId??_e.folder_id??"",hasCustomProfile:!!C.chrome_profile_path,...Ve.kind==="device"?{mobile:mc({platform:Ve.device.platform,appId:Ve.appId,deviceName:E.target?.displayName,osVersion:E.target?.osVersion,udid:Ve.device.udid})}:{},log:(pt,ui,up,dp)=>c.log(pt,ui,up,dp)});Bt&&(c.setTestId(Bt),fe?.projectId&&c.setProjectId(fe.projectId))}}c.setAuteurVariables(Qe.auteur),Je.current=Qe;let li=Lt&&!e?await dc({variables:Qe,auth:Lt,orgId:String((await Pt())?.org_id??""),env:ye,localMode:e,log:(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze)}):{};le.current=li;let Un=Ii(rr(mt,"global-memory.md")),lr=Ii(rr(process.cwd(),".testmuai","context.md"));if(wr===0){let fe={mode:C.mode,max_steps:Pe.maxSteps,timeout:Pe.timeout>0?Pe.timeout:void 0,target:ic(Ve,{cdpEndpoint:Pe.cdpEndpoint||void 0,wsEndpoint:Pe.wsEndpoint||void 0}),app:ac(Ve),os_version:Ve.kind==="device"?E.target?.osVersion:void 0,device_name:sc(Ve,E.target??void 0),chrome_profile:C.chrome_profile_path||void 0,cdp_endpoint:Pe.cdpEndpoint||void 0,ws_endpoint:Pe.wsEndpoint||void 0,headless:Pe.headless,global_context:Un??void 0,local_context:lr??void 0,variables:Object.keys(Qe.auteur).length>0?Qe.auteur:void 0};c.setResolvedGlobal(fe)}dt.current||(dt.current=!0,Te.current=await Ba({objectiveOrName:c.sessionName??d,sessionId:c.sessionId,title:c.sessionName??d,producerVersion:xt,pid:process.pid,surfaces:ke?[ke]:void 0,packRootDir:rr(c.sessionDir,"evidence")})),P.current||(P.current=La(Fn.cdpEndpoint),P.current());let qn=lc(Qe.auteur,Qe.auteurObjective),lp=cc({objective:Qe.auteurObjective,url:Ve.kind==="device"?void 0:ke??void 0,requireStartUrl:Ve.kind==="web"&&!X.current&&ke===null,model:C.model,chrome:Fn,auth:Br,sessionId:c.sessionId,runIndex:wr,windowSize:C.window_size,maxSteps:Pe.maxSteps,headless:Pe.headless,networkWs:C.network_ws,networkSse:C.network_sse,bugDetection:C.bug_detection,variables:Object.keys(qn).length>0?qn:void 0,globalContext:Un??void 0,localContext:lr??void 0,sessionContext:c.getContext(),device:Ve.kind==="device"?Ve.device:void 0,evidence:$a(Te.current)});ke&&$(ke),me(null),Y.current=null,Es({kind:j?"mobile":"web",label:Ve.kind==="device"?rn(Ve.device.target_kind==="simulator"?"simulator":"emulator"):"Desktop"}),O.startRun(lp,{environment:ye,mode:C.mode,assertionMode:C.assertion_mode,log:(fe,_e,Fe,Ze)=>c.log(fe,_e,Fe,Ze)}),te(fe=>fe+1)},[y,In,m,C,c,ye,O,he,Pe,_n,Pt,ir,ft,E.device,E.target,E.begin,E.requestApp,E.requestAppSource,E.validateBinding,E.bindAppForRun]),Dn=(0,T.useCallback)(d=>{let h=Dr;if(h){if(_s(null),c.log("info","CLASSIFY_ACTION","Classification prompt answered",{action:d,suggested:h.suggested,target:h.verdict.target,confidence:h.verdict.confidence}),d==="cancel"){he({type:"info",text:`Run cancelled \u2014 "${h.objective}" was not run.`});return}if(Is.current.add(h.objective),d==="keep"){Sr(h.objective,h.url);return}if(h.suggested==="web"){m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ee(m.load()),E.reset(),he({type:"info",text:"Session target: Desktop (Chrome)"}),Sr(h.objective,h.url,"web");return}As.current=h.verdict.appHint??null,sr.current=h.objective,E.begin(d==="pick"?"reinit":"confirm")}},[Dr,c,he,Sr,m,E]);Hu({phase:E.phase,device:E.device,requestApp:E.requestAppSource,pendingRef:sr,dispatch:d=>{Sr(d)},notify:he,onSettle:()=>{As.current=null}});let op=(0,T.useCallback)(async d=>{let h=yv(d),S=Za(h),R=new Kn;for(let ke of S.warnings)R.log("warn","RESOLVER_WARNING",ke);let v=y.getResolvedBasicAuth(),I=null;v||(I=await y.getToken());let j=await ys({resolvedBasic:v,token:I,resolver:y.getResolver(),getTmsCredentials:Pt}),N=ye,ne=Ge(N),we=y.creds.getActiveProfile()??"default";return{path:h,cwd:process.cwd(),opts:{},isAgent:!1,disableAskUser:!0,resolved:S,resolvedAuth:j,cliOverrides:{},environment:N,envConfig:ne,profile:we,model:"v16-alpha",creds:y.creds,configStore:m,session:R,skipGlobalRemoteLogger:!0,onAnnounce:An}},[y,m,ye,An,Pt]),Ae=Rd({buildInput:op,remoteLogger:null}),Qo=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(O.bifurcationInfo&&O.bifurcationInfo!==Qo.current){Qo.current=O.bifurcationInfo;let{flows:d,isSingleFlow:h}=O.bifurcationInfo;h&&d.length===1&&d[0]?c.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:d[0]}):!h&&d.length>1&&c.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:d.length})}},[O.bifurcationInfo,c,he]);let Zo=T.default.useRef(null),ei=T.default.useRef(0),ti=T.default.useRef(0);(0,T.useEffect)(()=>{if(O.lastRunEnd&&O.lastRunEnd!==Zo.current){Zo.current=O.lastRunEnd,X.current=!0;let{status:d,duration:h,summary:S,reason:R,context:v}=O.lastRunEnd,{passed:I,failed:j,total:N}=Da(O.steps);ei.current+=N,ti.current+=h??0;let ne=O.lastRunEnd?.credits_consumed,we=ne!=null||Xo.current>0?(ne??0)+Xo.current:void 0;me({status:d,duration:h??0,summary:S??"",stepsPassed:I,stepsFailed:j,stepsTotal:N,reason:R,finalState:O.lastRunEnd?.final_state,creditsConsumed:we}),c.logRunEnd(de.current,d,h,S,O.lastRunEnd?.result_code);let ke=O.bifurcationInfo,Qe=ke&&!ke.isSingleFlow?ke.flows:null,wr=wa(O.lastRunEnd,de.current,Qe),jn=Ra(O.lastRunEnd,Z.current,de.current,wr);c.addRunResult(jn,O.lastRunEnd?.total_runs),Ti(Te.current,O.getEvidenceState(),O.lastRunEnd);let Lt=O.lastRunEnd?.per_flow_metadata;if(ke&&!ke.isSingleFlow&&Lt&&Lt.length>1)for(let jt=0;jt<Lt.length;jt++){let Br=Lt[jt],en=O.steps[jt],tn=en?.children??[],Vn=tn.filter(lr=>lr.status==="passed").length,Ve=tn.filter(lr=>lr.status==="failed").length,Fn=tn.reduce((lr,qn)=>lr+(qn.duration??0),0),li=en?.status==="failed"?"failed":"passed",Un=ke.flows[jt]??en?.objective??Z.current;c.addFlow({runIndex:de.current,flowId:ke.flows[jt],objective:Un,status:li,summary:Br.summary??"",duration:Fn,steps:Vn+Ve,stepsPassed:Vn,stepsFailed:Ve,reason:Br.error_message??void 0,creditsConsumed:Br.credits_consumed??void 0})}else c.addFlow({runIndex:de.current,objective:Z.current,status:d,summary:S??"",duration:h??0,steps:N,stepsPassed:I,stepsFailed:j,reason:R,creditsConsumed:O.lastRunEnd?.credits_consumed})}},[O.lastRunEnd,c,he]);let ri=(0,T.useRef)(null);(0,T.useEffect)(()=>{O.askingUser&&(ri.current=O.askingUser)},[O.askingUser]);let ni=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(Re&&!O.isRunning&&O.lastRunEnd){if(ni.current===O.lastRunEnd)return;ni.current=O.lastRunEnd,Ce((0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(Rf,{status:Re.status,steps:Re.stepsTotal,duration:Re.duration,creditsConsumed:Re.creditsConsumed,reason:Re.reason}),(0,k.jsx)(Tf,{})]})),me(null)}},[Re,O.isRunning,O.lastRunEnd,Ce]);let $s=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(Ae.runSummary&&!Ae.running){if($s.current===Ae.runSummary)return;$s.current=Ae.runSummary,(Ae.summary||Ae.links)&&Ce((0,k.jsxs)(b,{flexDirection:"column",children:[Ae.summary&&(0,k.jsx)(rc,{data:Ae.summary}),Ae.links&&(0,k.jsx)(Qn,{...Ae.links,autoExit:!1})]}))}},[Ae.runSummary,Ae.running,Ae.summary,Ae.links,Ce]),(0,T.useEffect)(()=>{St.current?.setRunActive(O.isRunning)},[O.isRunning]),(0,T.useEffect)(()=>{if(O.runError&&!O.isRunning){let d=O.runError.trim();c.log("error","RUNNER_ERROR","Runner error occurred",{error:d}),c.escalateRun(c.nextRunIndex()-1),!O.lastRunEnd&&Y.current!==O.runError&&(Y.current=O.runError,Ti(Te.current,O.getEvidenceState(),null));let S=d.split(`
23
23
  `).slice(-8).join(`
24
24
  `);he({type:"error",text:`Runner error:
25
- ${S}`})}},[O.runError,O.isRunning,O.lastRunEnd,he,c]);let Ln=(0,T.useCallback)(async(d={})=>{let h=Te.current;return h?(c.flushRecorder(),await Oa(h,{saved:!!c.sessionName,local:e,deviceName:E.target?.displayName,deviceModel:E.target?.modelIdentifier,recordedTestPath:c.recorder?.lastWrittenPath??null,externalIdInput:{session_id:c.sessionId,commit_id:c.sessionId,test_id:c.testId??void 0,testcase_id:d.testcaseId??c.testcaseId??void 0,project_id:C.project_id??void 0,folder_id:C.folder_id??void 0,org_id:c.orgId??void 0,session_name:c.sessionName??void 0,user_name:c.userName??void 0,user_email:c.userEmail??void 0,sharable_link:nc(Ge(ye).testManagerUiUrl,C.project_id,d.testcaseId??c.testcaseId,d.shareId)},cdpBrowserCapture:P.current??void 0,model:C.model,tuiLogPath:rr(c.sessionDir,"tui.log"),log:(S,R,v,I)=>c.log(S,R,v,I)})):null},[c,C]),Bn=(0,T.useCallback)(async d=>{let h=Te.current?.packDir??null,S=await Ln({testcaseId:d?.testcaseId,shareId:d?.shareId});return Te.current=null,dt.current=!1,P.current=null,S?.sealed?h:null},[Ln]),$n=(0,T.useCallback)(async()=>{c.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Oe(Jn()),ut({status:"uploading"});let d=y.getResolvedBasicAuth(),h=null;if(!d&&(h=await y.getToken(),!h))return c.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let S=Le??await Pt();if(!S)return c.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),c.setUploadStatus("failed","Could not get TMS credentials"),null;c.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:c.testId,commit_id:c.sessionId,project_id:C.project_id,session_dir:c.sessionDir,run_dirs:c.getRunDirs()});let R={basicAuth:d??null,token:h,resolver:y.getResolver(),resolvedCreds:S};ce.current&&(c.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await L.current.settle(),await ce.current.drain(),c.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let v=fc({mobile:_r,session:c,env:ye,auth:R,variables:Je.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:le.current,projectId:C.project_id,folderId:C.folder_id,totalSteps:ei.current,totalDuration:ti.current,screenshotExtMap:ce.current?.getExtMap(),codeExport:pc({codeExport:t,codeLanguage:r,skipCodeValidation:n},C.code_export),onProgress:(N,ne,we)=>{c.log("info","EXIT_PROGRESS","Upload progress",{step:N,status:ne,detail:we}),Oe(ke=>tc(ke,N,ne,we))},log:(N,ne,we,ke)=>c.log(N,ne,we,ke),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0,evidence:Te.current?{executionId:Te.current.executionId,packTestDir:Te.current.packTestDir,sealedPackPath:Te.current.packDir,sealFn:Ln}:void 0}),j=await new hc(v).execute();if(j.success){c.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:j.testId,testcase_id:j.testcaseId??null,share_id:j.shareId??null}),c.setUploadStatus("uploaded"),j.testId&&c.setTestId(j.testId),j.testcaseId&&c.setTestcaseId(j.testcaseId);let N=Ge(ye),ne=C.project_id,we=j.testcaseId&&j.shareId&&ne?Ci(N.testManagerUiUrl,ne,j.testcaseId,j.shareId):void 0,ke=j.testcaseId&&ne?Ei(N.testManagerUiUrl,ne,j.testcaseId):void 0;ut({status:"success",testUrl:we,testCaseLink:ke,codeExportDir:j.codeExportDir}),wf({shareableLink:we,testCaseLink:ke,codeExportDir:j.codeExportDir})}else c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:j.error}),c.setUploadStatus("failed",j.error),ut({status:"failed",error:j.error});return j},[y,ye,c,C,Le,Pt,Ln]),On=(0,T.useCallback)(async()=>{c.log("info","SESSION_RESET_START","Starting session reset via /new"),Cr(!0);let d=c.getFlows();d.length>0&&Ce((0,k.jsx)(fs,{flows:d}));let h=null;if(!e)try{h=await $n()??null}catch(I){c.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(I)}),he({type:"error",text:"Upload failed \u2014 session data saved locally."})}let S=null;try{let{persistRecordedSession:I}=await import("./persist-recorded-session-MFQ7JCLJ.js");S=await I(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,packTestDir:Te.current?.packTestDir})}catch(I){c.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(I)})}if(h?.success&&h.testcaseId||S){let I=Ge(ye),j=C.project_id,N=h?.testcaseId;Ce((0,k.jsx)(Qn,{recordedTestPath:S?.recordedTestPath,outputDir:S?.outputDir,shareableLink:N&&h?.shareId&&j?Ci(I.testManagerUiUrl,j,N,h.shareId):void 0,testCaseLink:N&&j?Ei(I.testManagerUiUrl,j,N):void 0,codeExportDir:h?.codeExportDir,autoExit:!1}))}let R=await Bn(h);R&&he({type:"info",text:Na(R)}),c.testId&&Yt(I=>[...I,{testId:c.testId,runCount:ee}]),await O.shutdownRunner(),In.killChrome(),await c.finish("complete");let v=new Kn;v.start({model:C.model,environment:ye,profile:Lr??null}),w.current=v,x(I=>I+1),c.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:v.sessionId});try{await Ut({kind:"resessionize",env:ye},kt)}catch(I){c.log("error","SESSION_RESET_IDENTITY_FAILED","Identity re-attach failed during /new",{error:String(I)})}te(0),ei.current=0,ti.current=0,de.current=0,Z.current="",Je.current=null,le.current={},Nn.current=0,ii.current=0,ri.current=null,ni.current=null,Zo.current=null,Y.current=null,X.current=!1,Qo.current=null,Es(null),Ko.current=null,me(null),$(null),ut(null),Oe(Jn()),Cr(!1),M("ok","/new","Session reset")},[c,he,Ce,M,e,$n,Bn,In,O,ee,C,ye,Lr,kt]),Os=(0,T.useCallback)(async()=>{switch(Bf({hasRuns:c.nextRunIndex()>0,isRunning:O.isRunning,isTesting:C.mode==="testing",hasName:!!c.sessionName})){case"refused-running":he({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return;case"no-runs":he({type:"info",text:"No runs in current session."});return;case"needs-name":vr("new"),br(Pi());return;case"proceed":await On();return}},[c,O,he,C.mode,On]),Ms=(0,T.useCallback)(async()=>{await O.shutdownRunner(),await c.finish("complete"),Mr(0,"Session complete")},[c,O]),ip=(0,T.useCallback)(async d=>{Er(!1);let h=c.testId??(Ne.length>0?Ne[Ne.length-1].testId:null);if(d&&h){c.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:d});try{let S=Ge(ye),R=y.getResolvedBasicAuth();R&&await $f({tmsBaseUrl:S.tmsBaseUrl,username:R.username,accessKey:R.access_key,testId:h,feedbackType:d,log:(v,I,j,N)=>c.log(v,I,j,N)})}catch(S){c.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(S)})}}else c.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");Ms()},[ye,y,c,Ms,Ne]),Mn=(0,T.useCallback)(async()=>{let d=c.nextRunIndex()>0,h=null;if(d&&!e){c.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),pe(!0);try{h=await $n()??null}catch(v){c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(v)})}c.testId&&Yt(v=>[...v,{testId:c.testId,runCount:ee}])}try{let{persistRecordedSession:v}=await import("./persist-recorded-session-MFQ7JCLJ.js"),I=await v(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,packTestDir:Te.current?.packTestDir});I&&ue(I)}catch(v){c.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(v)})}let S=await Bn(h);if(S&&process.stdout.isTTY&&(pe(!0),await new Promise(v=>hr({packPath:S,resolve:v})),hr(null)),d&&!e&&await c.finish("complete"),!(c.testId??(Ne.length>0?Ne[Ne.length-1].testId:null))||e){await c.finish("complete"),Mr(0,"No test ID \u2014 quick exit");return}pe(!0),Er(!0)},[c,e,$n,Bn,ee,Ne,C]),ar=(0,T.useCallback)(async()=>{if(K)return;c.log("info","EXIT_START","TUI exit initiated");let d=C.mode==="testing",h=c.nextRunIndex()>0;if(d&&h&&!c.sessionName){vr("exit"),br(Pi());return}await Mn()},[K,c,C.mode,Mn]),sp=(0,T.useCallback)(d=>{d&&c.setSessionName(d);let h=Ir;br(null),vr(null),h==="new"?On():Mn()},[c,Ir,Mn,On]);(0,T.useEffect)(()=>{if(!K)return;let d=300*1e3,h=setTimeout(async()=>{c.setUploadStatus("failed","Upload timed out after 5m"),await c.finish("complete"),Mr(0,"Upload timed out after 5m")},d);return()=>clearTimeout(h)},[K,c]);let Nn=T.default.useRef(0),oi=T.default.useRef(null),ii=T.default.useRef(0),si=T.default.useRef(0),ai=T.default.useRef(null);Be((d,h)=>{if(h.ctrl&&d==="c"){if(Me==="generate"&&(xe.isStreaming||Dt.submitting)){Dt.cancelGenerate(),si.current++,ai.current&&clearTimeout(ai.current),ai.current=setTimeout(()=>{si.current=0},2e3),si.current>=2&&ar();return}if(!Ae.running){if(K){ii.current+=1,ii.current>=2&&(c.setUploadStatus("pending","Force exit by user"),c.finish("complete"),Mr(0,"Force exit by user"));return}if(O.isRunning){O.cancelRun(),he({type:"info",text:"Run cancelled."}),Nn.current++,oi.current&&clearTimeout(oi.current),oi.current=setTimeout(()=>{Nn.current=0},2e3),Nn.current>=2&&ar();return}ar()}}}),Be((d,h)=>{if(h.ctrl&&d==="t"&&Me==="generate"&&!xe.isStreaming){Pn("no thinking yet");return}});let Ns=T.default.useMemo(()=>{let d=y.creds.getActiveProfile()??"none",h=y.creds.getDefaultEnv(),S={runOptions:{headless:Pe.headless,cdpEndpoint:Pe.cdpEndpoint,wsEndpoint:Pe.wsEndpoint},patchRunOptions:v=>Wo(I=>({...I,...v})),deviceLabel:E.target?.displayName??null,appLabel:E.device?.app_package??null,openDevicePicker:()=>{if(ft){M("error","/config device",Pr(ft));return}xr(null),E.begin("reinit")},openAppPicker:()=>{if(ft){M("error","/config app",Pr(ft));return}if(xr(null),E.target){E.requestApp();return}E.begin("reinit")}},R={tuiConfig:C,setMobile:v=>{m.setMobile(v),Ee(m.load())},setConfigKey:(v,I)=>{m.set(v,I),Ee(m.load())},emitFeedback:M,onChromeProfilePicker:()=>{},onWindowSizePicker:()=>{},windowSizeLabel:`${C.window_size.width}x${C.window_size.height}`};return[{id:"run",label:"Run",type:"submenu",children:[{id:"run-start",label:"Start Run",type:"action"},{id:"run-config",label:"Run Config",type:"submenu",children:[{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Pe.maxSteps),onValue:v=>{let I=parseInt(v,10);I>0&&Wo(j=>({...j,maxSteps:I}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Pe.timeout?String(Pe.timeout):"",placeholder:"0 = no timeout",onValue:v=>{let I=parseInt(v,10);Wo(j=>({...j,timeout:isNaN(I)?0:I}))}},{id:"run-config-desktop",label:"Desktop",type:"submenu",children:_f(S)},...wr()?[{id:"run-config-mobile",label:"Mobile",type:"submenu",children:Pf(S)}]:[]]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{y.logout().then(v=>{vt();let I=y.creds.getActiveProfile(),j=y.creds.getDefaultEnv();_t(I,j);let N=Af(I,j);Ut(N,kt).catch(()=>{}),v?M("ok","/logout",`Logged out: ${v.profile} [${v.env}]`):M("ok","/logout","No active profile")}).catch(()=>{M("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let v=y.creds.getActiveProfile()??"none",I=y.creds.getDefaultEnv(),j=y.creds.loadBasicAuth(v,I),N=j?"basic":y.creds.loadCredentials(v,I)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:v},{key:"Environment",value:I}]},{label:"Authentication",entries:[{key:"Method",value:N},...j?[{key:"Username",value:j.username}]:[]]},{label:"Token",entries:[{key:"Status",value:y.tokenValid?"valid":"not logged in",color:y.tokenValid?l.green:l.red}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let v=y.creds.getActiveProfile()??"default",I=y.creds.getDefaultEnv(),j=Ge(I);try{let N=y.getBasicAuth(),ne=N?null:await y.getToken();if(!N&&!ne){He({text:"Not authenticated. Run /login first.",color:l.red});return}let{ControllerClient:we}=await import("./controller-client-OB4WD2C4.js"),Qe=await(N?new we(j.controllerBaseUrl,{username:N.username,accessKey:N.access_key}):new we(j.controllerBaseUrl,ne)).getCreditBalance();He({text:`Credits \u2014 available: ${Qe.available_credits}, total: ${Qe.total_credits} (${v} / ${I})`,color:l.green})}catch(N){He({text:`Balance check failed: ${N instanceof Error?N.message:String(N)}`,color:l.red})}st.current&&clearTimeout(st.current),st.current=setTimeout(()=>{He(null),st.current=null},5e3)})()}},{id:"profiles",label:"Profiles",type:"action",onProfilesView:()=>{}}]},{id:"config",label:"Config",type:"submenu",children:[{id:"config-show",label:"Show",type:"action",onInfo:()=>({title:"Show Config",sections:[{label:"General",entries:[{key:"Model",value:"v16-alpha"},{key:"Mode",value:C.mode},{key:"Assertion Mode",value:C.assertion_mode},{key:"WebSocket Capture",value:C.network_ws?"on":"off"},{key:"SSE Capture",value:C.network_sse?"on":"off"},{key:"Bug Detection",value:C.bug_detection},{key:"Final Validation",value:C.final_validation?"on":"off"},{key:"Hints",value:C.hints_enabled===!1?"off":"on"}]},{label:"Browser",entries:[{key:"Window",value:`${C.window_size.width}x${C.window_size.height}`},{key:"Chrome Profile",value:C.chrome_profile_path?C.chrome_profile_path.split("/").pop()??C.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:C.project_name?`${C.project_name} (${C.project_id})`:C.project_id??"(none)"},{key:"Folder",value:C.folder_name?`${C.folder_name} (${C.folder_id})`:C.folder_id??"(none)"},{key:"Default URL",value:C.default_url??di}]},{label:"Code Export",entries:[{key:"Enabled",value:C.code_export.enabled?"yes":"no"},{key:"Language",value:C.code_export.language},{key:"Skip Validation",value:C.code_export.skip_validation?"yes":"no"}]},Lf(C.mobile)]})},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...C.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:l.dim}]}]})}},{id:"config-desktop",label:"Desktop",type:"submenu",children:Df(R)},...Ss(R).length>0?[{id:"config-mobile",label:"Mobile",type:"submenu",children:Ss(R)}]:[],{id:"config-run",label:"Run",type:"submenu",children:[{id:"config-mode",label:"Mode",type:"select",currentValue:C.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:v=>{(v==="action"||v==="testing")&&(m.set("mode",v),Ee(m.load()),M("ok","/config set-mode",v))}},{id:"config-assertion-mode",label:"Assertion Mode",type:"select",currentValue:C.assertion_mode,options:[{label:"visual \u2014 vision model (default)",value:"visual"},{label:"dom \u2014 DOM extraction & assertions preferred",value:"dom"}],onValue:v=>{(v==="visual"||v==="dom")&&(m.set("assertion_mode",v),Ee(m.load()),M("ok","/config set-assertion-mode",v))}},{id:"config-final-validation",label:"Final Validation",type:"select",currentValue:C.final_validation?"on":"off",options:[{label:"off \u2014 no cp_final checkpoint (default)",value:"off"},{label:"on \u2014 append cp_final, verifying the objective as a whole",value:"on"}],onValue:v=>{(v==="on"||v==="off")&&(m.set("final_validation",v==="on"),Ee(m.load()),M("ok","/config set-final-validation",v))}},{id:"config-bug-detection",label:"Bug Detection",type:"select",currentValue:C.bug_detection,options:[{label:"off \u2014 no bug detection while authoring (default)",value:"off"},{label:"stop \u2014 halt the run when a confirmed product bug is found",value:"stop"},{label:"continue \u2014 record confirmed bugs and keep authoring",value:"continue"}],onValue:v=>{(v==="off"||v==="stop"||v==="continue")&&(m.set("bug_detection",v),Ee(m.load()),M("ok","/config set-bug-detection",v))}}]},{id:"config-hints",label:"CLI Hints",type:"select",currentValue:C.hints_enabled===!1?"off":"on",options:[{label:"on",value:"on"},{label:"off",value:"off"}],onValue:v=>{let I=v==="on";m.set("hints_enabled",I),Ee(m.load()),M("ok","/config hints",`CLI hints ${I?"enabled":"disabled"}`)}},{id:"config-generate",label:"Generate",type:"submenu",currentValue:`${C.generate.scenario_limit}x${C.generate.per_scenario_limit}`,children:[{id:"config-generate-scenario-limit",label:"Scenario limit",type:"text-input",currentValue:String(C.generate.scenario_limit),placeholder:"5",onValue:v=>{let I=parseInt(v,10);if(!Number.isFinite(I)||I<1||I>20){M("error","/config",`Scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,scenario_limit:I}),Ee(m.load()),M("ok","/config",`Scenario limit: ${I}`)}},{id:"config-generate-per-scenario-limit",label:"Per-scenario limit",type:"text-input",currentValue:String(C.generate.per_scenario_limit),placeholder:"4",onValue:v=>{let I=parseInt(v,10);if(!Number.isFinite(I)||I<1||I>20){M("error","/config",`Per-scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,per_scenario_limit:I}),Ee(m.load()),M("ok","/config",`Per-scenario limit: ${I}`)}},{id:"config-generate-memory",label:"Memory",type:"select",currentValue:C.generate.memory_enabled?"on":"off",options:[{label:"on",value:"on"},{label:"off",value:"off"}],onValue:v=>{let I=v==="on";m.set("generate",{...C.generate,memory_enabled:I}),Ee(m.load()),M("ok","/config",`Memory: ${I?"on":"off"}`)}}]},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:C.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:C.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{m.set("code_export",{...C.code_export,enabled:v==="on"}),Ee(m.load()),M("ok","/config code-export enabled",v)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:C.code_export.language,options:[{label:"python",value:"python"},{label:"javascript",value:"javascript"}],onValue:v=>{v!=="python"&&v!=="javascript"||(m.set("code_export",{...C.code_export,language:v}),Ee(m.load()),M("ok","/config code-export language",v))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:C.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{m.set("code_export",{...C.code_export,skip_validation:v==="on"}),Ee(m.load()),M("ok","/config code-export skip-validation",v)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{ar()}}]},[y,m,C,he,ar,Pe,vt,M,ft,Pr,E.target,E.device,E.begin,E.requestApp]),ci=(0,T.useCallback)(d=>{if(O.askingUser){let S=O.askingUser;Ce((0,k.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,k.jsx)(b,{marginLeft:1,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"Agent Question"})}),(0,k.jsxs)(b,{borderStyle:"round",borderColor:l.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,k.jsxs)(b,{children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"?"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:S})})]}),(0,k.jsxs)(b,{marginTop:1,children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.dim,bold:!0,children:"\u2192"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:d})})]})]})]})),ri.current=null,O.sendAnswer(d);return}if(c.logCommand(d),O.isRunning){he({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let h=To(d);if(h){if(!pd(h.command,Me)){M("error",`/${h.command}`,`/${h.command} isn't available in ${Me==="run"?"Run":"Generate"} mode.`);return}switch(h.command){case"profiles":if(Me==="generate"&&xe.requestId&&h.args.action==="switch"){Qr({reason:"profile",pendingArgs:h.args});return}xr("auth");return;case"login":case"logout":case"whoami":case"balance":case"auth":xr("auth");return;case"config":if(h.args.action==="set-url"){let S=Yn(h.args.value);if(!S){M("error","/config set-url","Usage: /config set-url <url>");return}m.set("default_url",S),Ee(m.load()),M("ok","/config set-url",S);return}xr("config");return;case"mobile":{let S=zn();if(!S.supported){M("error","/mobile",S.reason);return}if(ft){M("error","/mobile",Pr(ft));return}E.begin("confirm");return}case"desktop":{if(ft){ft.kind==="web"?M("ok","/web","Session is already on Desktop."):M("error","/web",Pr(ft));return}m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ee(m.load()),E.reset(),M("ok","/web","Session target: web (Chrome)");return}case"doctor":{(async()=>{he({type:"info",text:"Running mobile toolchain checks\u2026"});let{runDoctor:S,renderDoctorText:R,doctorExitCode:v}=await import("./doctor-KJMR7NRK.js"),I=await S();he({type:"info",text:R(I)}),v(I)!==0&&he({type:"info",text:"Install the managed tooling with /mobile (interactive) or `kane-cli doctor --target <emulator|simulator> --install`."})})();return}case"help":Ts(!0);return;case"testmd":if(O.isRunning||xe.isStreaming||Ae.running){M("error","/testmd","Finish or cancel the current run/generation first.");return}Ae.clearResult(),Cn(!0);return;case"generate":if(Ae.running){M("error","/generate","Finish or cancel the running test first.");return}Me==="run"?Dt.requestSwitch("generate")&&M("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):M("ok","/generate","Already in Generate mode.",void 0,l.generateAccent);return;case"run":{let S=hd(Me,h.args.objective);switch(S.kind){case"run":yr(S.objective,h.args.url);return;case"reject":M("error","/run",'Switch to Run mode first (bare /run), then /run "objective".');return;case"already":M("ok","/run","Already in Run mode.",void 0,l.orange);return;case"toggle":Dt.requestSwitch("run")&&M("ok","/run","Switched to Run mode.",void 0,l.orange);return}return}case"update":{(async()=>{let{getUpdateCommand:S}=await import("./version-check-LWDLMWBJ.js");M("ok","/update",`To update kane-cli, run: ${S()}`)})();return}case"summary":{if(Me==="generate"&&!xe.requestId){Pn("no generation yet"),M("ok","/summary","(no generation yet)");return}let S=c.getFlows();if(S.length===0){M("ok","/summary","No runs yet in this session.");return}let R=h.args.index?parseInt(h.args.index,10):void 0;if(R!==void 0&&!c.getFlow(R)){M("error","/summary",`No flow at index ${R}`,`${S.length} flow${S.length===1?"":"s"} available. Use /summary to see all.`);return}Ce((0,k.jsx)(fs,{flows:S,filterIndex:R})),M("ok","/summary",R!==void 0?`Flow ${R}`:`${S.length} flow${S.length===1?"":"s"}`);return}case"new":Me==="generate"&&xe.requestId&&(or(),xe.end().catch(S=>{M("error","/new",`Could not end generation cleanly: ${S.message}`)}),xe.reset()),Os();return;case"name":{let S=h.raw.replace(/^\/name\s*/,"").trim();if(!S){M("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:R}=await import("./name-validator-5YGJXLZ7.js");try{R(S),c.setSessionName(S),M("ok","/name",`Session name set: ${S}`)}catch(v){M("error","/name",v.message)}})();return}case"cancel":if(Me==="generate"&&xe.isStreaming){or(),xe.cancel(),M("ok","/cancel","Cancelled");return}if(Me==="generate"&&!xe.requestId){Pn("no generation yet"),M("ok","/cancel","(no generation yet)");return}if(Ae.running){Ae.cancel(),M("ok","/cancel","Run cancelled");return}O.cancelRun(),M("ok","/cancel","Run cancelled");return;case"clear":M("ok","/clear","Chat cleared");return;case"exit":Me==="generate"&&xe.requestId&&(or(),xe.end()),ar();return;default:M("error",`/${h.command}`,"Unknown command");return}}if(d.trim().toLowerCase()==="exit"){ar();return}Ce((0,k.jsx)(Vu,{objective:d})),yr(d,void 0)},[O,he,M,Ce,c,yr,ar,Os,Me,xe.isStreaming,xe.requestId,xe,Pn,or,Ae,C,s,ft,Pr]);Ls.current=ci;let js=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!js.current&&B&&u==="generate"&&f){js.current=!0;let d=setTimeout(()=>{tp(f)},50);return()=>clearTimeout(d)}},[B,u,f]);let Vs=y.getAuthInfo(),ap=Vs?Vs.method==="basic"?"basic auth":"oauth":"not logged in",cp=(()=>{if(Yr)return["help"];if(Jr)return["testmd"];if(V)return V.phase==="wizard"?["auth","login"]:V.phase==="project"?["auth","login","project"]:V.phase==="folder"?["auth","login","folder"]:["auth","login"];let d={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return Nt==="auth"?kn?["auth",d[kn]]:["auth"]:Nt==="config"?kn?["config",d[kn]]:["config"]:Nt==="help"?["help"]:O.askingUser?["agent question"]:[]})();return(0,k.jsxs)(b,{flexDirection:"column",children:[!B&&!ws&&(0,k.jsx)(Nu,{onComplete:()=>{let d=y.creds.getActiveProfile(),h=y.creds.getDefaultEnv(),S=d?y.creds.loadCredentials(d,h):null,R=d?y.creds.loadBasicAuth(d,h):null,v=!!(S||R),I=R?.username??d??null;Ce((0,k.jsx)(xo,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:xt,authenticated:v,user:I})),jf(!0);let j=(N,ne,we,ke)=>{c.log(N,ne,we,ke)};if(Ha(y.creds,j).then(N=>{if(N.status==="authenticated"){let{profile:ne,env:we,tmsCreds:ke}=N.result;y.creds.setActiveProfile(ne),y.creds.setDefaultEnv(we),vt(),Kt(ke),Mt("ready"),F(!0)}else N.status==="needs_pick"?(Mf(N.profiles),Mt("pick")):Mt("login")}).catch(N=>{c.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(N)}),Mt("login")}),o&&o.then(async N=>{if(N){let{getUpdateCommand:ne}=await import("./version-check-LWDLMWBJ.js");M("ok","update available",`${N.current} \u2192 ${N.latest}`,`Run: ${ne()}`)}}).catch(()=>{}),i&&i.changes.length>0){let N=`kane-cli updated to ${i.toVersion}. Default settings changed:`,ne=[...i.changes.map(we=>`\u2022 ${we.description} (${we.field}: ${JSON.stringify(we.from)} \u2192 ${JSON.stringify(we.to)})`),"","Use /config to review or revert any of these."].join(`
26
- `);M("ok","defaults updated",N,ne)}}}),!B&&nr==="booting"&&ws&&(0,k.jsx)(b,{paddingX:1,children:(0,k.jsx)(a,{color:"yellow",children:"Checking authentication..."})}),!B&&nr==="pick"&&(0,k.jsx)(Sv,{profiles:Of,onCancel:()=>Mt("login"),onSelect:async(d,h)=>{y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),vt(),Ho(!0);let S=(R,v,I,j)=>{c.log(R,v,I,j)};try{let R=await qa(y.creds,d,h,S);Ho(!1),R.status==="authenticated"?(_t(d,h),Kt(R.result.tmsCreds),Mt("ready"),F(!0)):Mt("login")}catch{Ho(!1),Mt("login")}},validating:Nf}),!B&&nr==="login"&&!V&&(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(d,h,S,R)=>{let{validateBasicAuth:v}=await import("./validate-basic-XEPS5I6V.js");await v(h,S,R),y.creds.saveBasicAuth(d,h,{username:S,access_key:R}),y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),Ct(y.creds,m,d,h),y.setTokenValid(!0),vt()},onOAuthLogin:async(d,h)=>{y.creds.setDefaultEnv(h),await y.login(d),Ct(y.creds,m,d,h),vt()},onComplete:(d,h)=>{Ut(qo(h),kt).then(()=>{vt(),je({phase:"project",profile:d,env:h})}).catch(()=>{je({phase:"project",profile:d,env:h})})},onCancel:()=>{Mr(0,"Login cancelled at startup")}}),!B&&nr==="login"&&V?.phase==="project"&&(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:d,project_name:h}),M("ok","/config project",h,`id: ${d}`),je({...V,phase:"folder"})},onCancel:async()=>{let d=await Yo(V.profile,V.env);d&&($t(y.creds,m,V.profile,V.env,{projectId:d.id,projectName:d.name}),M("ok","/config project",d.name,`id: ${d.id}`),je({...V,phase:"folder"}))}}),!B&&nr==="login"&&V?.phase==="folder"&&(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:y.creds.loadProfileConfig(V.profile,V.env)?.project_id??"",currentFolderId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:d,folder_name:h}),M("ok","/config folder",h,`id: ${d}`),_t(V.profile,V.env),je(null),Mt("ready"),F(!0)},onCancel:async()=>{let d=y.creds.loadProfileConfig(V.profile,V.env);if(!d?.project_id)return;let h=await Jo(V.env,d.project_id);h&&($t(y.creds,m,V.profile,V.env,{folderId:h.id,folderName:h.name}),M("ok","/config folder",h.name,`id: ${h.id}`),_t(V.profile,V.env),je(null),Mt("ready"),F(!0))}}),B&&Tn==="menu"&&!K&&(0,k.jsx)(b,{marginBottom:1,children:(0,k.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,k.jsx)(a,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsx)(a,{color:"#ff9500",children:C.model}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsx)(a,{color:l.dim,children:ap}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsxs)(a,{color:l.dim,children:[Lr??"no profile","/",ye]})]})}),B&&!K&&(0,k.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[Tn==="menu"&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ss,{items:Ns,onRunSelected:()=>Vf("chat"),onActiveViewChange:Rs,renderLoginWizard:d=>{let h=V?.phase??"wizard";if(h==="project")return(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(S,R)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:S,project_name:R}),M("ok","/config project",R,`id: ${S}`),je(v=>v?{...v,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let S=await Yo(V.profile,V.env);S&&($t(y.creds,m,V.profile,V.env,{projectId:S.id,projectName:S.name}),M("ok","/config project",S.name,`id: ${S.id}`),je(R=>R?{...R,phase:"folder"}:null))}});if(h==="folder"){let S=y.creds.loadProfileConfig(V.profile,V.env);return(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:S?.project_id??"",currentFolderId:null,env:V.env,onSelect:(R,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:R,folder_name:v}),M("ok","/config folder",v,`id: ${R}`),_t(V.profile,V.env),je(null),d()},onCancel:async()=>{if(!V)return;let R=y.creds.loadProfileConfig(V.profile,V.env);if(!R?.project_id)return;let v=await Jo(V.env,R.project_id);v&&($t(y.creds,m,V.profile,V.env,{folderId:v.id,folderName:v.name}),M("ok","/config folder",v.name,`id: ${v.id}`),_t(V.profile,V.env),je(null),d())}})}return(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(S,R,v,I)=>{let{validateBasicAuth:j}=await import("./validate-basic-XEPS5I6V.js");await j(R,v,I),y.creds.saveBasicAuth(S,R,{username:v,access_key:I}),y.creds.setActiveProfile(S),y.creds.setDefaultEnv(R),Ct(y.creds,m,S,R),y.setTokenValid(!0),vt()},onOAuthLogin:async(S,R)=>{y.creds.setDefaultEnv(R),await y.login(S),Ct(y.creds,m,S,R),vt()},onComplete:(S,R)=>{Ut(qo(R),kt).then(()=>{je({phase:"project",profile:S,env:R})}).catch(()=>{je({phase:"project",profile:S,env:R})})},onCancel:()=>{je(null),d()}})},renderProfilesView:d=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(h,S)=>{let R=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(h),y.creds.setDefaultEnv(S),Ct(y.creds,m,h,S),_t(h,S),vt(),Ut(xs(S),kt).catch(()=>{}),M("ok","/profiles switch",`${R} \u2192 ${h} [${S}]`)},onCancel:d}),renderChromeProfilePicker:d=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:h=>{m.set("chrome_profile_path",h),Ee(m.load()),M("ok","/config chrome-profile",h),d()},onCancel:d}),renderProjectPicker:d=>(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(h,S)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:h,projectName:S}),M("ok","/config project",S,`id: ${h}`),Ee(m.load()),d()},onCancel:d}),renderFolderPicker:d=>(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:C.project_id??"",currentFolderId:C.folder_id,env:ye,onSelect:(h,S)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:h,folderName:S}),M("ok","/config folder",S,`id: ${h}`),Ee(m.load()),d()},onCancel:d}),renderWindowSizePicker:d=>(0,k.jsx)(ds,{currentWidth:C.window_size.width,currentHeight:C.window_size.height,onSelect:(h,S)=>{m.set("window_size",{width:h,height:S}),Ee(m.load()),M("ok","/config set-window",`${h} \xD7 ${S}`),d()},onCancel:d})}),$e&&(0,k.jsx)(b,{paddingX:1,marginTop:1,children:(0,k.jsx)(a,{color:$e.color,children:$e.text})})]}),Tn==="chat"&&(0,k.jsxs)(k.Fragment,{children:[zt&&!O.isRunning&&(0,k.jsx)(bi,{label:zt.replace(/[.…\s]+$/,"")}),(()=>{let d=Ks({isRunning:O.isRunning,bifurcationInfo:O.bifurcationInfo,steps:O.steps,cmInitCounts:O.cmInitCounts,replayInfo:O.replayInfo});return d?(0,k.jsx)(bi,{label:d.label,hasBifurcation:d.hasBifurcation}):null})(),O.isRunning&&O.steps.length>0&&(0,k.jsx)(zs,{steps:O.steps,bifurcated:!!O.bifurcationInfo&&!O.bifurcationInfo.isSingleFlow,flows:O.bifurcationInfo?.flows,cmInitCounts:O.cmInitCounts,onStepCommit:Ce,describe:Zr.text,describeVisible:Zr.visible,describeRevealing:Zr.revealing},`run-${de.current}`),Ae.runViewProps&&(0,k.jsx)(ec,{...Ae.runViewProps,onCancel:()=>{Ae.runViewProps?.onCancel?.(),Ae.cancel()}}),Yr&&(0,k.jsx)(xd,{onClose:()=>Ts(!1),version:xt,environment:y.creds.getDefaultEnv(),sessionId:c.sessionId,runUrl:C.default_url??di,mode:Me}),Jr&&(0,k.jsx)(wd,{cwd:process.cwd(),currentOrgId:String(Le?.org_id??""),onClose:()=>Cn(!1),onRun:d=>{if(O.isRunning||xe.isStreaming||Ae.running){setTimeout(()=>M("error","/testmd","Finish or cancel the current run first."),0);return}Cn(!1),!(Me==="generate"&&!Dt.requestSwitch("run"))&&(Me==="generate"&&setTimeout(()=>M("ok","/testmd",`Switched to Run mode to run ${d.relPath}`,void 0,l.orange),0),Ae.start(d.path).catch(h=>setTimeout(()=>M("error","/testmd",`Run failed: ${h.message}`),0)))},onExport:d=>{Cn(!1),vc(d.path,{language:C.code_export.language??"python",env:ye}).then(h=>setTimeout(()=>M("ok","/testmd",`Exported code \u2192 ${h.codeDir}`),0)).catch(h=>setTimeout(()=>M("error","/testmd",`Export failed: ${h.message}`),0))}}),Nt&&!O.isRunning&&(()=>{let d=Ns.find(h=>h.id===Nt);return d?.children?(0,k.jsx)(ss,{items:d.children,onRunSelected:()=>xr(null),onDismiss:()=>xr(null),onActiveViewChange:Rs,renderLoginWizard:h=>{let S=V?.phase??"wizard";if(S==="project")return(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(R,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:R,project_name:v}),M("ok","/config project",v,`id: ${R}`),je(I=>I?{...I,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let R=await Yo(V.profile,V.env);R&&($t(y.creds,m,V.profile,V.env,{projectId:R.id,projectName:R.name}),M("ok","/config project",R.name,`id: ${R.id}`),je(v=>v?{...v,phase:"folder"}:null))}});if(S==="folder"){let R=y.creds.loadProfileConfig(V.profile,V.env);return(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:R?.project_id??"",currentFolderId:null,env:V.env,onSelect:(v,I)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:v,folder_name:I}),M("ok","/config folder",I,`id: ${v}`),_t(V.profile,V.env),je(null),h()},onCancel:async()=>{if(!V)return;let v=y.creds.loadProfileConfig(V.profile,V.env);if(!v?.project_id)return;let I=await Jo(V.env,v.project_id);I&&($t(y.creds,m,V.profile,V.env,{folderId:I.id,folderName:I.name}),M("ok","/config folder",I.name,`id: ${I.id}`),_t(V.profile,V.env),je(null),h())}})}return(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(R,v,I,j)=>{let{validateBasicAuth:N}=await import("./validate-basic-XEPS5I6V.js");await N(v,I,j),y.creds.saveBasicAuth(R,v,{username:I,access_key:j}),y.creds.setActiveProfile(R),y.creds.setDefaultEnv(v),Ct(y.creds,m,R,v),y.setTokenValid(!0),vt()},onOAuthLogin:async(R,v)=>{y.creds.setDefaultEnv(v),await y.login(R),Ct(y.creds,m,R,v),vt()},onComplete:(R,v)=>{Ut(qo(v),kt).then(()=>{je({phase:"project",profile:R,env:v})}).catch(()=>{je({phase:"project",profile:R,env:v})})},onCancel:()=>{je(null),h()}})},renderProfilesView:h=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(S,R)=>{let v=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(S),y.creds.setDefaultEnv(R),Ct(y.creds,m,S,R),_t(S,R),vt(),Ut(xs(R),kt).catch(()=>{}),M("ok","/profiles switch",`${v} \u2192 ${S} [${R}]`),h()},onCancel:h}),renderChromeProfilePicker:h=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:S=>{m.save({chrome_profile_path:S}),Ee(m.load()),M("ok","/config chrome-profile",S),h()},onCancel:h}),renderProjectPicker:h=>(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(S,R)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:S,projectName:R}),Ee(m.load()),M("ok","/config project",R,`id: ${S}`),h()},onCancel:h}),renderFolderPicker:h=>(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:C.project_id??"",currentFolderId:C.folder_id,env:ye,onSelect:(S,R)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:S,folderName:R}),Ee(m.load()),M("ok","/config folder",R,`id: ${S}`),h()},onCancel:h}),renderWindowSizePicker:h=>(0,k.jsx)(ds,{currentWidth:C.window_size.width,currentHeight:C.window_size.height,onSelect:(S,R)=>{m.set("window_size",{width:S,height:R}),Ee(m.load()),M("ok","/config set-window",`${S} \xD7 ${R}`),h()},onCancel:h})},Nt):null})(),Nt&&$e&&(0,k.jsx)(b,{paddingX:1,marginTop:1,children:(0,k.jsx)(a,{color:$e.color,children:$e.text})}),Me==="run"&&!Nt&&!Yr&&!Jr&&!Tt&&O.askingUser&&(0,k.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,k.jsx)(b,{marginLeft:1,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"Agent Question"})}),(0,k.jsx)(b,{borderStyle:"round",borderColor:l.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,k.jsxs)(b,{children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"?"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:O.askingUser})})]})})]}),En&&(()=>{let d=En,h=d.reason==="switch"?d.to==="run"?"Discard the current generation and switch to Run?":"Stop the current run / discard its results and switch to Generate?":"Switching profile will end this generation. Continue?",S=d.reason==="switch"?"Discard & switch":"Yes, end";return(0,k.jsx)(Sf,{message:h,confirmLabel:S,onConfirm:async()=>{if(d.reason==="switch"){let v=d.to;Qr(null),Dt.confirmSwitch(v);return}or();let R=d.pendingArgs;if(Qr(null),await xe.end(),xe.reset(),R.profile){let v=y.creds.getDefaultEnv(),I=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(R.profile),y.creds.setDefaultEnv(v),Ct(y.creds,m,R.profile,v),_t(R.profile,v),vt(),Ut({kind:"switch",env:v},kt).catch(()=>{}),M("ok","/profiles switch",`${I} \u2192 ${R.profile} [${v}]`)}else ci("/profiles switch")},onCancel:()=>Qr(null)})})(),Cs&&(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,marginTop:1,children:[E.phase==="doctor"?(0,k.jsx)(id,{checks:E.checks,busyMessage:E.busyMessage,onRetry:E.recheck,onInstall:E.install,onCancel:E.cancel}):E.phase==="apps"&&E.kind?(0,k.jsx)(Sa,{kind:E.kind,onSelect:d=>E.selectApp(d),onBack:E.back,onCancel:E.back}):E.phase==="appList"&&E.kind?(0,k.jsx)(ya,{kind:E.kind,busyMessage:E.busyMessage,listApps:Qf,onSelect:d=>{E.selectAppId(d.appId)},onManualEntry:E.requestAppId,onCancel:E.back}):E.phase==="appId"?(0,k.jsx)(za,{busyMessage:E.busyMessage,onSubmit:d=>E.selectAppId(d),onBack:E.back}):E.phase==="chooser"?(0,k.jsx)(Wa,{mode:"mobile-only",onSelect:d=>{(d==="emulator"||d==="simulator")&&E.selectKind(d)},onCancel:E.back}):E.phase==="confirm"&&E.saved?(0,k.jsx)(gd,{saved:E.saved,onContinue:()=>E.confirmSaved(),onChangeDevice:()=>E.begin("reinit"),onChangeApp:()=>E.confirmSaved({keepApp:!1}),onCancel:E.cancel}):E.phase==="appSource"&&E.kind?(0,k.jsx)(Xa,{kind:E.kind,onSelect:d=>d==="uploaded"?E.requestCloudApps():E.requestApp(),onCancel:E.back}):(0,k.jsx)(xa,{targets:E.targets,preselectedTarget:C.mobile?.default_target,busyMessage:E.busyMessage??(E.phase==="checking"?"Checking mobile toolchain\u2026":null),onSelect:d=>{E.selectTarget(d)},onCancel:E.back,...E.kind?{kind:E.kind}:{}}),E.error&&(0,k.jsx)(a,{color:"red",children:E.error})]}),Dr&&(0,k.jsx)(td,{suggested:Dr.suggested,sessionTargetLabel:Ar.kind==="unset"||Ar.kind==="choose-mobile"?"Desktop":rn(Ar.kind),appHint:Dr.verdict.appHint,savedDeviceName:ea(C.mobile?.default_target),onAccept:()=>Dn("accept"),onPickDevice:()=>Dn("pick"),onKeep:()=>Dn("keep"),onCancel:()=>Dn("cancel")}),Me==="run"&&!Nt&&!Yr&&!Jr&&!Tt&&!En&&!Ae.running&&!Cs&&!Dr&&(0,k.jsx)(lr,{onSubmit:ci,onEscape:void 0,history:Uf,commands:fd(vn(dd),ft),clearSeq:ep,loadMentionItems:_r?Kf:void 0,mentionHint:_r&&!E.target?"No device selected \u2014 run /mobile to choose one.":void 0,placeholder:O.askingUser?"Type your answer...":O.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)",footerBindings:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"},{keys:"/generate",label:"test cases"}]}),Me==="generate"&&!Nt&&!Yr&&!Jr&&!Tt&&!En&&(0,k.jsx)(xf,{tcg:xe,gm:Dt,history:qf,tuiConfig:C,browse:sr.isOpen?{target:sr.target,onClose:sr.close,excluded:sr.excluded,onToggleCase:sr.toggleCase,onToggleScenario:sr.toggleScenario,getStatus:Dt.bifurcation.getStatus,getResult:Dt.bifurcation.getResult}:null})]})]}),B&&K&&ge&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ki,{steps:Ot,status:ge.status,testUrl:ge.testUrl,error:ge.error}),ge.status==="success"&&(0,k.jsx)(Qn,{recordedTestPath:Q?.recordedTestPath,outputDir:Q?.outputDir,shareableLink:ge.testUrl,testCaseLink:ge.testCaseLink,codeExportDir:ge.codeExportDir,autoExit:!1})]}),Tt&&(0,k.jsx)(Mc,{defaultName:Tt,onSubmit:sp}),gr&&(0,k.jsx)(ja,{packPath:gr.packPath,viewerBase:Ma(ye??"prod"),onDone:()=>gr.resolve()}),Kr&&(0,k.jsx)(Oc,{onSubmit:ip}),mr&&ge&&(0,k.jsx)(ki,{steps:Ot,status:ge.status,error:ge.error}),B&&!K&&(0,k.jsx)($u,{profile:Lr,environment:ye,tokenValid:y.tokenValid,runCount:ee,sessionId:c.sessionId,viewMode:Tn,breadcrumb:cp,chatMode:Me,footerHint:np,tcgRequestId:xe.requestId,tcgStreamStatus:xe.isStreaming?"streaming":xe.isReconnecting?"reconnecting":xe.isTerminal&&xe.state.status.toLowerCase()==="completed"?"completed":xe.isTerminal&&xe.state.status.toLowerCase()==="failed"?"failed":null,sessionTarget:_r?{kind:Ar.kind==="simulator"?"simulator":"emulator",...E.target?{deviceName:E.target.displayName}:{},...E.device?.app_package?{appPackage:E.device.app_package}:{}}:{kind:"desktop"},targetLocked:ft!==null})]})}function Sv({profiles:e,onSelect:t,onCancel:r,validating:n}){let[o,i]=(0,T.useState)(0);return Be((s,u)=>{if(!n){if(u.escape){r();return}if(u.upArrow&&o>0&&i(f=>f-1),u.downArrow&&o<e.length-1&&i(f=>f+1),u.return){let f=e[o];t(f.profile,f.env)}}}),(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,k.jsx)(a,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,k.jsx)(b,{marginTop:1,flexDirection:"column",children:e.map((s,u)=>(0,k.jsxs)(a,{children:[u===o?"\u276F ":" ",(0,k.jsx)(a,{color:u===o?"#ff9500":"white",bold:u===o,children:s.profile}),(0,k.jsxs)(a,{color:"gray",children:[" [",s.env,"]"]})]},`${s.profile}-${s.env}`))}),n&&(0,k.jsx)(b,{marginTop:1,children:(0,k.jsx)(a,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,k.jsx)(b,{marginTop:1,children:(0,k.jsx)(a,{color:"gray",children:"Esc = new login"})})]})}export{rd as a,nd as b,ad as c,If as d,$f as e,cE as f};
25
+ ${S}`})}},[O.runError,O.isRunning,O.lastRunEnd,he,c]);let Ln=(0,T.useCallback)(async(d={})=>{let h=Te.current;return h?(c.flushRecorder(),await Oa(h,{saved:!!c.sessionName,local:e,deviceName:E.target?.displayName,deviceModel:E.target?.modelIdentifier,recordedTestPath:c.recorder?.lastWrittenPath??null,externalIdInput:{session_id:c.sessionId,commit_id:c.sessionId,test_id:c.testId??void 0,testcase_id:d.testcaseId??c.testcaseId??void 0,project_id:C.project_id??void 0,folder_id:C.folder_id??void 0,org_id:c.orgId??void 0,session_name:c.sessionName??void 0,user_name:c.userName??void 0,user_email:c.userEmail??void 0,sharable_link:nc(Ge(ye).testManagerUiUrl,C.project_id,d.testcaseId??c.testcaseId,d.shareId)},cdpBrowserCapture:P.current??void 0,model:C.model,tuiLogPath:rr(c.sessionDir,"tui.log"),log:(S,R,v,I)=>c.log(S,R,v,I)})):null},[c,C]),Bn=(0,T.useCallback)(async d=>{let h=Te.current?.packDir??null,S=await Ln({testcaseId:d?.testcaseId,shareId:d?.shareId});return Te.current=null,dt.current=!1,P.current=null,S?.sealed?h:null},[Ln]),$n=(0,T.useCallback)(async()=>{c.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Oe(Jn()),ut({status:"uploading"});let d=y.getResolvedBasicAuth(),h=null;if(!d&&(h=await y.getToken(),!h))return c.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let S=Le??await Pt();if(!S)return c.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),c.setUploadStatus("failed","Could not get TMS credentials"),null;c.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:c.testId,commit_id:c.sessionId,project_id:C.project_id,session_dir:c.sessionDir,run_dirs:c.getRunDirs()});let R={basicAuth:d??null,token:h,resolver:y.getResolver(),resolvedCreds:S};ce.current&&(c.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await L.current.settle(),await ce.current.drain(),c.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let v=fc({mobile:ir,session:c,env:ye,auth:R,variables:Je.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:le.current,projectId:C.project_id,folderId:C.folder_id,totalSteps:ei.current,totalDuration:ti.current,screenshotExtMap:ce.current?.getExtMap(),codeExport:pc({codeExport:t,codeLanguage:r,skipCodeValidation:n},C.code_export),onProgress:(N,ne,we)=>{c.log("info","EXIT_PROGRESS","Upload progress",{step:N,status:ne,detail:we}),Oe(ke=>tc(ke,N,ne,we))},log:(N,ne,we,ke)=>c.log(N,ne,we,ke),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0,evidence:Te.current?{executionId:Te.current.executionId,packTestDir:Te.current.packTestDir,sealedPackPath:Te.current.packDir,sealFn:Ln}:void 0}),j=await new hc(v).execute();if(j.success){c.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:j.testId,testcase_id:j.testcaseId??null,share_id:j.shareId??null}),c.setUploadStatus("uploaded"),j.testId&&c.setTestId(j.testId),j.testcaseId&&c.setTestcaseId(j.testcaseId);let N=Ge(ye),ne=C.project_id,we=j.testcaseId&&j.shareId&&ne?Ci(N.testManagerUiUrl,ne,j.testcaseId,j.shareId):void 0,ke=j.testcaseId&&ne?Ei(N.testManagerUiUrl,ne,j.testcaseId):void 0;ut({status:"success",testUrl:we,testCaseLink:ke,codeExportDir:j.codeExportDir}),wf({shareableLink:we,testCaseLink:ke,codeExportDir:j.codeExportDir})}else c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:j.error}),c.setUploadStatus("failed",j.error),ut({status:"failed",error:j.error});return j},[y,ye,c,C,Le,Pt,Ln]),On=(0,T.useCallback)(async()=>{c.log("info","SESSION_RESET_START","Starting session reset via /new"),Er(!0);let d=c.getFlows();d.length>0&&Ce((0,k.jsx)(fs,{flows:d}));let h=null;if(!e)try{h=await $n()??null}catch(I){c.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(I)}),he({type:"error",text:"Upload failed \u2014 session data saved locally."})}let S=null;try{let{persistRecordedSession:I}=await import("./persist-recorded-session-RKG7HOEW.js");S=await I(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,mobile:ir,packTestDir:Te.current?.packTestDir})}catch(I){c.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(I)})}if(h?.success&&h.testcaseId||S){let I=Ge(ye),j=C.project_id,N=h?.testcaseId;Ce((0,k.jsx)(Qn,{recordedTestPath:S?.recordedTestPath,outputDir:S?.outputDir,shareableLink:N&&h?.shareId&&j?Ci(I.testManagerUiUrl,j,N,h.shareId):void 0,testCaseLink:N&&j?Ei(I.testManagerUiUrl,j,N):void 0,codeExportDir:h?.codeExportDir,autoExit:!1}))}let R=await Bn(h);R&&he({type:"info",text:Na(R)}),c.testId&&Yt(I=>[...I,{testId:c.testId,runCount:ee}]),await O.shutdownRunner(),In.killChrome(),await c.finish("complete");let v=new Kn;v.start({model:C.model,environment:ye,profile:Lr??null}),w.current=v,x(I=>I+1),c.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:v.sessionId});try{await Ut({kind:"resessionize",env:ye},kt)}catch(I){c.log("error","SESSION_RESET_IDENTITY_FAILED","Identity re-attach failed during /new",{error:String(I)})}te(0),ei.current=0,ti.current=0,de.current=0,Z.current="",Je.current=null,le.current={},Nn.current=0,ii.current=0,ri.current=null,ni.current=null,Zo.current=null,Y.current=null,X.current=!1,Qo.current=null,Es(null),Ko.current=null,me(null),$(null),ut(null),Oe(Jn()),Er(!1),M("ok","/new","Session reset")},[c,he,Ce,M,e,$n,Bn,In,O,ee,C,ye,Lr,kt]),Os=(0,T.useCallback)(async()=>{switch(Bf({hasRuns:c.nextRunIndex()>0,isRunning:O.isRunning,isTesting:C.mode==="testing",hasName:!!c.sessionName})){case"refused-running":he({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return;case"no-runs":he({type:"info",text:"No runs in current session."});return;case"needs-name":xr("new"),vr(Pi());return;case"proceed":await On();return}},[c,O,he,C.mode,On]),Ms=(0,T.useCallback)(async()=>{await O.shutdownRunner(),await c.finish("complete"),Mr(0,"Session complete")},[c,O]),ip=(0,T.useCallback)(async d=>{Ir(!1);let h=c.testId??(Ne.length>0?Ne[Ne.length-1].testId:null);if(d&&h){c.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:d});try{let S=Ge(ye),R=y.getResolvedBasicAuth();R&&await $f({tmsBaseUrl:S.tmsBaseUrl,username:R.username,accessKey:R.access_key,testId:h,feedbackType:d,log:(v,I,j,N)=>c.log(v,I,j,N)})}catch(S){c.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(S)})}}else c.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");Ms()},[ye,y,c,Ms,Ne]),Mn=(0,T.useCallback)(async()=>{let d=c.nextRunIndex()>0,h=null;if(d&&!e){c.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),pe(!0);try{h=await $n()??null}catch(v){c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(v)})}c.testId&&Yt(v=>[...v,{testId:c.testId,runCount:ee}])}try{let{persistRecordedSession:v}=await import("./persist-recorded-session-RKG7HOEW.js"),I=await v(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,mobile:ir,packTestDir:Te.current?.packTestDir});I&&ue(I)}catch(v){c.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(v)})}let S=await Bn(h);if(S&&process.stdout.isTTY&&(pe(!0),await new Promise(v=>br({packPath:S,resolve:v})),br(null)),d&&!e&&await c.finish("complete"),!(c.testId??(Ne.length>0?Ne[Ne.length-1].testId:null))||e){await c.finish("complete"),Mr(0,"No test ID \u2014 quick exit");return}pe(!0),Ir(!0)},[c,e,$n,Bn,ee,Ne,C]),cr=(0,T.useCallback)(async()=>{if(K)return;c.log("info","EXIT_START","TUI exit initiated");let d=C.mode==="testing",h=c.nextRunIndex()>0;if(d&&h&&!c.sessionName){xr("exit"),vr(Pi());return}await Mn()},[K,c,C.mode,Mn]),sp=(0,T.useCallback)(d=>{d&&c.setSessionName(d);let h=Ar;vr(null),xr(null),h==="new"?On():Mn()},[c,Ar,Mn,On]);(0,T.useEffect)(()=>{if(!K)return;let d=300*1e3,h=setTimeout(async()=>{c.setUploadStatus("failed","Upload timed out after 5m"),await c.finish("complete"),Mr(0,"Upload timed out after 5m")},d);return()=>clearTimeout(h)},[K,c]);let Nn=T.default.useRef(0),oi=T.default.useRef(null),ii=T.default.useRef(0),si=T.default.useRef(0),ai=T.default.useRef(null);Be((d,h)=>{if(h.ctrl&&d==="c"){if(Me==="generate"&&(xe.isStreaming||Dt.submitting)){Dt.cancelGenerate(),si.current++,ai.current&&clearTimeout(ai.current),ai.current=setTimeout(()=>{si.current=0},2e3),si.current>=2&&cr();return}if(!Ae.running){if(K){ii.current+=1,ii.current>=2&&(c.setUploadStatus("pending","Force exit by user"),c.finish("complete"),Mr(0,"Force exit by user"));return}if(O.isRunning){O.cancelRun(),he({type:"info",text:"Run cancelled."}),Nn.current++,oi.current&&clearTimeout(oi.current),oi.current=setTimeout(()=>{Nn.current=0},2e3),Nn.current>=2&&cr();return}cr()}}}),Be((d,h)=>{if(h.ctrl&&d==="t"&&Me==="generate"&&!xe.isStreaming){Pn("no thinking yet");return}});let Ns=T.default.useMemo(()=>{let d=y.creds.getActiveProfile()??"none",h=y.creds.getDefaultEnv(),S={runOptions:{headless:Pe.headless,cdpEndpoint:Pe.cdpEndpoint,wsEndpoint:Pe.wsEndpoint},patchRunOptions:v=>Wo(I=>({...I,...v})),deviceLabel:E.target?.displayName??null,appLabel:E.device?.app_package??null,openDevicePicker:()=>{if(ft){M("error","/config device",Pr(ft));return}yr(null),E.begin("reinit")},openAppPicker:()=>{if(ft){M("error","/config app",Pr(ft));return}if(yr(null),E.target){E.requestApp();return}E.begin("reinit")}},R={tuiConfig:C,setMobile:v=>{m.setMobile(v),Ee(m.load())},setConfigKey:(v,I)=>{m.set(v,I),Ee(m.load())},emitFeedback:M,onChromeProfilePicker:()=>{},onWindowSizePicker:()=>{},windowSizeLabel:`${C.window_size.width}x${C.window_size.height}`};return[{id:"run",label:"Run",type:"submenu",children:[{id:"run-start",label:"Start Run",type:"action"},{id:"run-config",label:"Run Config",type:"submenu",children:[{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Pe.maxSteps),onValue:v=>{let I=parseInt(v,10);I>0&&Wo(j=>({...j,maxSteps:I}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Pe.timeout?String(Pe.timeout):"",placeholder:"0 = no timeout",onValue:v=>{let I=parseInt(v,10);Wo(j=>({...j,timeout:isNaN(I)?0:I}))}},{id:"run-config-desktop",label:"Desktop",type:"submenu",children:_f(S)},...Rr()?[{id:"run-config-mobile",label:"Mobile",type:"submenu",children:Pf(S)}]:[]]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{y.logout().then(v=>{vt();let I=y.creds.getActiveProfile(),j=y.creds.getDefaultEnv();_t(I,j);let N=Af(I,j);Ut(N,kt).catch(()=>{}),v?M("ok","/logout",`Logged out: ${v.profile} [${v.env}]`):M("ok","/logout","No active profile")}).catch(()=>{M("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let v=y.creds.getActiveProfile()??"none",I=y.creds.getDefaultEnv(),j=y.creds.loadBasicAuth(v,I),N=j?"basic":y.creds.loadCredentials(v,I)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:v},{key:"Environment",value:I}]},{label:"Authentication",entries:[{key:"Method",value:N},...j?[{key:"Username",value:j.username}]:[]]},{label:"Token",entries:[{key:"Status",value:y.tokenValid?"valid":"not logged in",color:y.tokenValid?l.green:l.red}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let v=y.creds.getActiveProfile()??"default",I=y.creds.getDefaultEnv(),j=Ge(I);try{let N=y.getBasicAuth(),ne=N?null:await y.getToken();if(!N&&!ne){He({text:"Not authenticated. Run /login first.",color:l.red});return}let{ControllerClient:we}=await import("./controller-client-OB4WD2C4.js"),Qe=await(N?new we(j.controllerBaseUrl,{username:N.username,accessKey:N.access_key}):new we(j.controllerBaseUrl,ne)).getCreditBalance();He({text:`Credits \u2014 available: ${Qe.available_credits}, total: ${Qe.total_credits} (${v} / ${I})`,color:l.green})}catch(N){He({text:`Balance check failed: ${N instanceof Error?N.message:String(N)}`,color:l.red})}st.current&&clearTimeout(st.current),st.current=setTimeout(()=>{He(null),st.current=null},5e3)})()}},{id:"profiles",label:"Profiles",type:"action",onProfilesView:()=>{}}]},{id:"config",label:"Config",type:"submenu",children:[{id:"config-show",label:"Show",type:"action",onInfo:()=>({title:"Show Config",sections:[{label:"General",entries:[{key:"Model",value:"v16-alpha"},{key:"Mode",value:C.mode},{key:"Assertion Mode",value:C.assertion_mode},{key:"WebSocket Capture",value:C.network_ws?"on":"off"},{key:"SSE Capture",value:C.network_sse?"on":"off"},{key:"Bug Detection",value:C.bug_detection},{key:"Final Validation",value:C.final_validation?"on":"off"},{key:"Hints",value:C.hints_enabled===!1?"off":"on"}]},{label:"Browser",entries:[{key:"Window",value:`${C.window_size.width}x${C.window_size.height}`},{key:"Chrome Profile",value:C.chrome_profile_path?C.chrome_profile_path.split("/").pop()??C.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:C.project_name?`${C.project_name} (${C.project_id})`:C.project_id??"(none)"},{key:"Folder",value:C.folder_name?`${C.folder_name} (${C.folder_id})`:C.folder_id??"(none)"},{key:"Default URL",value:C.default_url??di}]},{label:"Code Export",entries:[{key:"Enabled",value:C.code_export.enabled?"yes":"no"},{key:"Language",value:C.code_export.language},{key:"Skip Validation",value:C.code_export.skip_validation?"yes":"no"}]},Lf(C.mobile)]})},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...C.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:l.dim}]}]})}},{id:"config-desktop",label:"Desktop",type:"submenu",children:Df(R)},...Ss(R).length>0?[{id:"config-mobile",label:"Mobile",type:"submenu",children:Ss(R)}]:[],{id:"config-run",label:"Run",type:"submenu",children:[{id:"config-mode",label:"Mode",type:"select",currentValue:C.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:v=>{(v==="action"||v==="testing")&&(m.set("mode",v),Ee(m.load()),M("ok","/config set-mode",v))}},{id:"config-assertion-mode",label:"Assertion Mode",type:"select",currentValue:C.assertion_mode,options:[{label:"visual \u2014 vision model (default)",value:"visual"},{label:"dom \u2014 DOM extraction & assertions preferred",value:"dom"}],onValue:v=>{(v==="visual"||v==="dom")&&(m.set("assertion_mode",v),Ee(m.load()),M("ok","/config set-assertion-mode",v))}},{id:"config-final-validation",label:"Final Validation",type:"select",currentValue:C.final_validation?"on":"off",options:[{label:"off \u2014 no cp_final checkpoint (default)",value:"off"},{label:"on \u2014 append cp_final, verifying the objective as a whole",value:"on"}],onValue:v=>{(v==="on"||v==="off")&&(m.set("final_validation",v==="on"),Ee(m.load()),M("ok","/config set-final-validation",v))}},{id:"config-bug-detection",label:"Bug Detection",type:"select",currentValue:C.bug_detection,options:[{label:"off \u2014 no bug detection while authoring (default)",value:"off"},{label:"stop \u2014 halt the run when a confirmed product bug is found",value:"stop"},{label:"continue \u2014 record confirmed bugs and keep authoring",value:"continue"}],onValue:v=>{(v==="off"||v==="stop"||v==="continue")&&(m.set("bug_detection",v),Ee(m.load()),M("ok","/config set-bug-detection",v))}}]},{id:"config-hints",label:"CLI Hints",type:"select",currentValue:C.hints_enabled===!1?"off":"on",options:[{label:"on",value:"on"},{label:"off",value:"off"}],onValue:v=>{let I=v==="on";m.set("hints_enabled",I),Ee(m.load()),M("ok","/config hints",`CLI hints ${I?"enabled":"disabled"}`)}},{id:"config-generate",label:"Generate",type:"submenu",currentValue:`${C.generate.scenario_limit}x${C.generate.per_scenario_limit}`,children:[{id:"config-generate-scenario-limit",label:"Scenario limit",type:"text-input",currentValue:String(C.generate.scenario_limit),placeholder:"5",onValue:v=>{let I=parseInt(v,10);if(!Number.isFinite(I)||I<1||I>20){M("error","/config",`Scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,scenario_limit:I}),Ee(m.load()),M("ok","/config",`Scenario limit: ${I}`)}},{id:"config-generate-per-scenario-limit",label:"Per-scenario limit",type:"text-input",currentValue:String(C.generate.per_scenario_limit),placeholder:"4",onValue:v=>{let I=parseInt(v,10);if(!Number.isFinite(I)||I<1||I>20){M("error","/config",`Per-scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,per_scenario_limit:I}),Ee(m.load()),M("ok","/config",`Per-scenario limit: ${I}`)}},{id:"config-generate-memory",label:"Memory",type:"select",currentValue:C.generate.memory_enabled?"on":"off",options:[{label:"on",value:"on"},{label:"off",value:"off"}],onValue:v=>{let I=v==="on";m.set("generate",{...C.generate,memory_enabled:I}),Ee(m.load()),M("ok","/config",`Memory: ${I?"on":"off"}`)}}]},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:C.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:C.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{m.set("code_export",{...C.code_export,enabled:v==="on"}),Ee(m.load()),M("ok","/config code-export enabled",v)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:C.code_export.language,options:[{label:"python",value:"python"},{label:"javascript (web only)",value:"javascript"}],onValue:v=>{v!=="python"&&v!=="javascript"||(m.set("code_export",{...C.code_export,language:v}),Ee(m.load()),M("ok","/config code-export language",v))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:C.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{m.set("code_export",{...C.code_export,skip_validation:v==="on"}),Ee(m.load()),M("ok","/config code-export skip-validation",v)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{cr()}}]},[y,m,C,he,cr,Pe,vt,M,ft,Pr,E.target,E.device,E.begin,E.requestApp]),ci=(0,T.useCallback)(d=>{if(O.askingUser){let S=O.askingUser;Ce((0,k.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,k.jsx)(b,{marginLeft:1,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"Agent Question"})}),(0,k.jsxs)(b,{borderStyle:"round",borderColor:l.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,k.jsxs)(b,{children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"?"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:S})})]}),(0,k.jsxs)(b,{marginTop:1,children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.dim,bold:!0,children:"\u2192"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:d})})]})]})]})),ri.current=null,O.sendAnswer(d);return}if(c.logCommand(d),O.isRunning){he({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let h=To(d);if(h){if(!pd(h.command,Me)){M("error",`/${h.command}`,`/${h.command} isn't available in ${Me==="run"?"Run":"Generate"} mode.`);return}switch(h.command){case"profiles":if(Me==="generate"&&xe.requestId&&h.args.action==="switch"){Qr({reason:"profile",pendingArgs:h.args});return}yr("auth");return;case"login":case"logout":case"whoami":case"balance":case"auth":yr("auth");return;case"config":if(h.args.action==="set-url"){let S=Yn(h.args.value);if(!S){M("error","/config set-url","Usage: /config set-url <url>");return}m.set("default_url",S),Ee(m.load()),M("ok","/config set-url",S);return}yr("config");return;case"mobile":{let S=zn();if(!S.supported){M("error","/mobile",S.reason);return}if(ft){M("error","/mobile",Pr(ft));return}E.begin("confirm");return}case"desktop":{if(ft){ft.kind==="web"?M("ok","/web","Session is already on Desktop."):M("error","/web",Pr(ft));return}m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ee(m.load()),E.reset(),M("ok","/web","Session target: web (Chrome)");return}case"doctor":{(async()=>{he({type:"info",text:"Running mobile toolchain checks\u2026"});let{runDoctor:S,renderDoctorText:R,doctorExitCode:v}=await import("./doctor-2KRK42L2.js"),I=await S();he({type:"info",text:R(I)}),v(I)!==0&&he({type:"info",text:"Install the managed tooling with /mobile (interactive) or `kane-cli doctor --target <emulator|simulator> --install`."})})();return}case"help":Ts(!0);return;case"testmd":if(O.isRunning||xe.isStreaming||Ae.running){M("error","/testmd","Finish or cancel the current run/generation first.");return}Ae.clearResult(),Cn(!0);return;case"generate":if(Ae.running){M("error","/generate","Finish or cancel the running test first.");return}Me==="run"?Dt.requestSwitch("generate")&&M("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):M("ok","/generate","Already in Generate mode.",void 0,l.generateAccent);return;case"run":{let S=hd(Me,h.args.objective);switch(S.kind){case"run":Sr(S.objective,h.args.url);return;case"reject":M("error","/run",'Switch to Run mode first (bare /run), then /run "objective".');return;case"already":M("ok","/run","Already in Run mode.",void 0,l.orange);return;case"toggle":Dt.requestSwitch("run")&&M("ok","/run","Switched to Run mode.",void 0,l.orange);return}return}case"update":{(async()=>{let{getUpdateCommand:S}=await import("./version-check-FRVZSYNF.js");M("ok","/update",`To update kane-cli, run: ${S()}`)})();return}case"summary":{if(Me==="generate"&&!xe.requestId){Pn("no generation yet"),M("ok","/summary","(no generation yet)");return}let S=c.getFlows();if(S.length===0){M("ok","/summary","No runs yet in this session.");return}let R=h.args.index?parseInt(h.args.index,10):void 0;if(R!==void 0&&!c.getFlow(R)){M("error","/summary",`No flow at index ${R}`,`${S.length} flow${S.length===1?"":"s"} available. Use /summary to see all.`);return}Ce((0,k.jsx)(fs,{flows:S,filterIndex:R})),M("ok","/summary",R!==void 0?`Flow ${R}`:`${S.length} flow${S.length===1?"":"s"}`);return}case"new":Me==="generate"&&xe.requestId&&(or(),xe.end().catch(S=>{M("error","/new",`Could not end generation cleanly: ${S.message}`)}),xe.reset()),Os();return;case"name":{let S=h.raw.replace(/^\/name\s*/,"").trim();if(!S){M("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:R}=await import("./name-validator-5YGJXLZ7.js");try{R(S),c.setSessionName(S),M("ok","/name",`Session name set: ${S}`)}catch(v){M("error","/name",v.message)}})();return}case"cancel":if(Me==="generate"&&xe.isStreaming){or(),xe.cancel(),M("ok","/cancel","Cancelled");return}if(Me==="generate"&&!xe.requestId){Pn("no generation yet"),M("ok","/cancel","(no generation yet)");return}if(Ae.running){Ae.cancel(),M("ok","/cancel","Run cancelled");return}O.cancelRun(),M("ok","/cancel","Run cancelled");return;case"clear":M("ok","/clear","Chat cleared");return;case"exit":Me==="generate"&&xe.requestId&&(or(),xe.end()),cr();return;default:M("error",`/${h.command}`,"Unknown command");return}}if(d.trim().toLowerCase()==="exit"){cr();return}Ce((0,k.jsx)(Vu,{objective:d})),Sr(d,void 0)},[O,he,M,Ce,c,Sr,cr,Os,Me,xe.isStreaming,xe.requestId,xe,Pn,or,Ae,C,s,ft,Pr]);Ls.current=ci;let js=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!js.current&&B&&u==="generate"&&f){js.current=!0;let d=setTimeout(()=>{tp(f)},50);return()=>clearTimeout(d)}},[B,u,f]);let Vs=y.getAuthInfo(),ap=Vs?Vs.method==="basic"?"basic auth":"oauth":"not logged in",cp=(()=>{if(Yr)return["help"];if(Jr)return["testmd"];if(V)return V.phase==="wizard"?["auth","login"]:V.phase==="project"?["auth","login","project"]:V.phase==="folder"?["auth","login","folder"]:["auth","login"];let d={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return Nt==="auth"?kn?["auth",d[kn]]:["auth"]:Nt==="config"?kn?["config",d[kn]]:["config"]:Nt==="help"?["help"]:O.askingUser?["agent question"]:[]})();return(0,k.jsxs)(b,{flexDirection:"column",children:[!B&&!ws&&(0,k.jsx)(Nu,{onComplete:()=>{let d=y.creds.getActiveProfile(),h=y.creds.getDefaultEnv(),S=d?y.creds.loadCredentials(d,h):null,R=d?y.creds.loadBasicAuth(d,h):null,v=!!(S||R),I=R?.username??d??null;Ce((0,k.jsx)(xo,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:xt,authenticated:v,user:I})),jf(!0);let j=(N,ne,we,ke)=>{c.log(N,ne,we,ke)};if(Ha(y.creds,j).then(N=>{if(N.status==="authenticated"){let{profile:ne,env:we,tmsCreds:ke}=N.result;y.creds.setActiveProfile(ne),y.creds.setDefaultEnv(we),vt(),Kt(ke),Mt("ready"),F(!0)}else N.status==="needs_pick"?(Mf(N.profiles),Mt("pick")):Mt("login")}).catch(N=>{c.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(N)}),Mt("login")}),o&&o.then(async N=>{if(N){let{getUpdateCommand:ne}=await import("./version-check-FRVZSYNF.js");M("ok","update available",`${N.current} \u2192 ${N.latest}`,`Run: ${ne()}`)}}).catch(()=>{}),i&&i.changes.length>0){let N=`kane-cli updated to ${i.toVersion}. Default settings changed:`,ne=[...i.changes.map(we=>`\u2022 ${we.description} (${we.field}: ${JSON.stringify(we.from)} \u2192 ${JSON.stringify(we.to)})`),"","Use /config to review or revert any of these."].join(`
26
+ `);M("ok","defaults updated",N,ne)}}}),!B&&nr==="booting"&&ws&&(0,k.jsx)(b,{paddingX:1,children:(0,k.jsx)(a,{color:"yellow",children:"Checking authentication..."})}),!B&&nr==="pick"&&(0,k.jsx)(Sv,{profiles:Of,onCancel:()=>Mt("login"),onSelect:async(d,h)=>{y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),vt(),Ho(!0);let S=(R,v,I,j)=>{c.log(R,v,I,j)};try{let R=await qa(y.creds,d,h,S);Ho(!1),R.status==="authenticated"?(_t(d,h),Kt(R.result.tmsCreds),Mt("ready"),F(!0)):Mt("login")}catch{Ho(!1),Mt("login")}},validating:Nf}),!B&&nr==="login"&&!V&&(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(d,h,S,R)=>{let{validateBasicAuth:v}=await import("./validate-basic-OMAFYHME.js");await v(h,S,R),y.creds.saveBasicAuth(d,h,{username:S,access_key:R}),y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),Ct(y.creds,m,d,h),y.setTokenValid(!0),vt()},onOAuthLogin:async(d,h)=>{y.creds.setDefaultEnv(h),await y.login(d),Ct(y.creds,m,d,h),vt()},onComplete:(d,h)=>{Ut(qo(h),kt).then(()=>{vt(),je({phase:"project",profile:d,env:h})}).catch(()=>{je({phase:"project",profile:d,env:h})})},onCancel:()=>{Mr(0,"Login cancelled at startup")}}),!B&&nr==="login"&&V?.phase==="project"&&(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:d,project_name:h}),M("ok","/config project",h,`id: ${d}`),je({...V,phase:"folder"})},onCancel:async()=>{let d=await Yo(V.profile,V.env);d&&($t(y.creds,m,V.profile,V.env,{projectId:d.id,projectName:d.name}),M("ok","/config project",d.name,`id: ${d.id}`),je({...V,phase:"folder"}))}}),!B&&nr==="login"&&V?.phase==="folder"&&(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:y.creds.loadProfileConfig(V.profile,V.env)?.project_id??"",currentFolderId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:d,folder_name:h}),M("ok","/config folder",h,`id: ${d}`),_t(V.profile,V.env),je(null),Mt("ready"),F(!0)},onCancel:async()=>{let d=y.creds.loadProfileConfig(V.profile,V.env);if(!d?.project_id)return;let h=await Jo(V.env,d.project_id);h&&($t(y.creds,m,V.profile,V.env,{folderId:h.id,folderName:h.name}),M("ok","/config folder",h.name,`id: ${h.id}`),_t(V.profile,V.env),je(null),Mt("ready"),F(!0))}}),B&&Tn==="menu"&&!K&&(0,k.jsx)(b,{marginBottom:1,children:(0,k.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,k.jsx)(a,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsx)(a,{color:"#ff9500",children:C.model}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsx)(a,{color:l.dim,children:ap}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsxs)(a,{color:l.dim,children:[Lr??"no profile","/",ye]})]})}),B&&!K&&(0,k.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[Tn==="menu"&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ss,{items:Ns,onRunSelected:()=>Vf("chat"),onActiveViewChange:Rs,renderLoginWizard:d=>{let h=V?.phase??"wizard";if(h==="project")return(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(S,R)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:S,project_name:R}),M("ok","/config project",R,`id: ${S}`),je(v=>v?{...v,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let S=await Yo(V.profile,V.env);S&&($t(y.creds,m,V.profile,V.env,{projectId:S.id,projectName:S.name}),M("ok","/config project",S.name,`id: ${S.id}`),je(R=>R?{...R,phase:"folder"}:null))}});if(h==="folder"){let S=y.creds.loadProfileConfig(V.profile,V.env);return(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:S?.project_id??"",currentFolderId:null,env:V.env,onSelect:(R,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:R,folder_name:v}),M("ok","/config folder",v,`id: ${R}`),_t(V.profile,V.env),je(null),d()},onCancel:async()=>{if(!V)return;let R=y.creds.loadProfileConfig(V.profile,V.env);if(!R?.project_id)return;let v=await Jo(V.env,R.project_id);v&&($t(y.creds,m,V.profile,V.env,{folderId:v.id,folderName:v.name}),M("ok","/config folder",v.name,`id: ${v.id}`),_t(V.profile,V.env),je(null),d())}})}return(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(S,R,v,I)=>{let{validateBasicAuth:j}=await import("./validate-basic-OMAFYHME.js");await j(R,v,I),y.creds.saveBasicAuth(S,R,{username:v,access_key:I}),y.creds.setActiveProfile(S),y.creds.setDefaultEnv(R),Ct(y.creds,m,S,R),y.setTokenValid(!0),vt()},onOAuthLogin:async(S,R)=>{y.creds.setDefaultEnv(R),await y.login(S),Ct(y.creds,m,S,R),vt()},onComplete:(S,R)=>{Ut(qo(R),kt).then(()=>{je({phase:"project",profile:S,env:R})}).catch(()=>{je({phase:"project",profile:S,env:R})})},onCancel:()=>{je(null),d()}})},renderProfilesView:d=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(h,S)=>{let R=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(h),y.creds.setDefaultEnv(S),Ct(y.creds,m,h,S),_t(h,S),vt(),Ut(xs(S),kt).catch(()=>{}),M("ok","/profiles switch",`${R} \u2192 ${h} [${S}]`)},onCancel:d}),renderChromeProfilePicker:d=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:h=>{m.set("chrome_profile_path",h),Ee(m.load()),M("ok","/config chrome-profile",h),d()},onCancel:d}),renderProjectPicker:d=>(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(h,S)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:h,projectName:S}),M("ok","/config project",S,`id: ${h}`),Ee(m.load()),d()},onCancel:d}),renderFolderPicker:d=>(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:C.project_id??"",currentFolderId:C.folder_id,env:ye,onSelect:(h,S)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:h,folderName:S}),M("ok","/config folder",S,`id: ${h}`),Ee(m.load()),d()},onCancel:d}),renderWindowSizePicker:d=>(0,k.jsx)(ds,{currentWidth:C.window_size.width,currentHeight:C.window_size.height,onSelect:(h,S)=>{m.set("window_size",{width:h,height:S}),Ee(m.load()),M("ok","/config set-window",`${h} \xD7 ${S}`),d()},onCancel:d})}),$e&&(0,k.jsx)(b,{paddingX:1,marginTop:1,children:(0,k.jsx)(a,{color:$e.color,children:$e.text})})]}),Tn==="chat"&&(0,k.jsxs)(k.Fragment,{children:[zt&&!O.isRunning&&(0,k.jsx)(bi,{label:zt.replace(/[.…\s]+$/,"")}),(()=>{let d=Ks({isRunning:O.isRunning,bifurcationInfo:O.bifurcationInfo,steps:O.steps,cmInitCounts:O.cmInitCounts,replayInfo:O.replayInfo});return d?(0,k.jsx)(bi,{label:d.label,hasBifurcation:d.hasBifurcation}):null})(),O.isRunning&&O.steps.length>0&&(0,k.jsx)(zs,{steps:O.steps,bifurcated:!!O.bifurcationInfo&&!O.bifurcationInfo.isSingleFlow,flows:O.bifurcationInfo?.flows,cmInitCounts:O.cmInitCounts,onStepCommit:Ce,describe:Zr.text,describeVisible:Zr.visible,describeRevealing:Zr.revealing},`run-${de.current}`),Ae.runViewProps&&(0,k.jsx)(ec,{...Ae.runViewProps,onCancel:()=>{Ae.runViewProps?.onCancel?.(),Ae.cancel()}}),Yr&&(0,k.jsx)(xd,{onClose:()=>Ts(!1),version:xt,environment:y.creds.getDefaultEnv(),sessionId:c.sessionId,runUrl:C.default_url??di,mode:Me}),Jr&&(0,k.jsx)(wd,{cwd:process.cwd(),currentOrgId:String(Le?.org_id??""),onClose:()=>Cn(!1),onRun:d=>{if(O.isRunning||xe.isStreaming||Ae.running){setTimeout(()=>M("error","/testmd","Finish or cancel the current run first."),0);return}Cn(!1),!(Me==="generate"&&!Dt.requestSwitch("run"))&&(Me==="generate"&&setTimeout(()=>M("ok","/testmd",`Switched to Run mode to run ${d.relPath}`,void 0,l.orange),0),Ae.start(d.path).catch(h=>setTimeout(()=>M("error","/testmd",`Run failed: ${h.message}`),0)))},onExport:d=>{Cn(!1),vc(d.path,{language:C.code_export.language??"python",env:ye}).then(h=>setTimeout(()=>M("ok","/testmd",`Exported code \u2192 ${h.codeDir}`),0)).catch(h=>setTimeout(()=>M("error","/testmd",`Export failed: ${h.message}`),0))}}),Nt&&!O.isRunning&&(()=>{let d=Ns.find(h=>h.id===Nt);return d?.children?(0,k.jsx)(ss,{items:d.children,onRunSelected:()=>yr(null),onDismiss:()=>yr(null),onActiveViewChange:Rs,renderLoginWizard:h=>{let S=V?.phase??"wizard";if(S==="project")return(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(R,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:R,project_name:v}),M("ok","/config project",v,`id: ${R}`),je(I=>I?{...I,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let R=await Yo(V.profile,V.env);R&&($t(y.creds,m,V.profile,V.env,{projectId:R.id,projectName:R.name}),M("ok","/config project",R.name,`id: ${R.id}`),je(v=>v?{...v,phase:"folder"}:null))}});if(S==="folder"){let R=y.creds.loadProfileConfig(V.profile,V.env);return(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:R?.project_id??"",currentFolderId:null,env:V.env,onSelect:(v,I)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:v,folder_name:I}),M("ok","/config folder",I,`id: ${v}`),_t(V.profile,V.env),je(null),h()},onCancel:async()=>{if(!V)return;let v=y.creds.loadProfileConfig(V.profile,V.env);if(!v?.project_id)return;let I=await Jo(V.env,v.project_id);I&&($t(y.creds,m,V.profile,V.env,{folderId:I.id,folderName:I.name}),M("ok","/config folder",I.name,`id: ${I.id}`),_t(V.profile,V.env),je(null),h())}})}return(0,k.jsx)(Gn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(R,v,I,j)=>{let{validateBasicAuth:N}=await import("./validate-basic-OMAFYHME.js");await N(v,I,j),y.creds.saveBasicAuth(R,v,{username:I,access_key:j}),y.creds.setActiveProfile(R),y.creds.setDefaultEnv(v),Ct(y.creds,m,R,v),y.setTokenValid(!0),vt()},onOAuthLogin:async(R,v)=>{y.creds.setDefaultEnv(v),await y.login(R),Ct(y.creds,m,R,v),vt()},onComplete:(R,v)=>{Ut(qo(v),kt).then(()=>{je({phase:"project",profile:R,env:v})}).catch(()=>{je({phase:"project",profile:R,env:v})})},onCancel:()=>{je(null),h()}})},renderProfilesView:h=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(S,R)=>{let v=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(S),y.creds.setDefaultEnv(R),Ct(y.creds,m,S,R),_t(S,R),vt(),Ut(xs(R),kt).catch(()=>{}),M("ok","/profiles switch",`${v} \u2192 ${S} [${R}]`),h()},onCancel:h}),renderChromeProfilePicker:h=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:S=>{m.save({chrome_profile_path:S}),Ee(m.load()),M("ok","/config chrome-profile",S),h()},onCancel:h}),renderProjectPicker:h=>(0,k.jsx)(Nr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(S,R)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:S,projectName:R}),Ee(m.load()),M("ok","/config project",R,`id: ${S}`),h()},onCancel:h}),renderFolderPicker:h=>(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:C.project_id??"",currentFolderId:C.folder_id,env:ye,onSelect:(S,R)=>{$t(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:S,folderName:R}),Ee(m.load()),M("ok","/config folder",R,`id: ${S}`),h()},onCancel:h}),renderWindowSizePicker:h=>(0,k.jsx)(ds,{currentWidth:C.window_size.width,currentHeight:C.window_size.height,onSelect:(S,R)=>{m.set("window_size",{width:S,height:R}),Ee(m.load()),M("ok","/config set-window",`${S} \xD7 ${R}`),h()},onCancel:h})},Nt):null})(),Nt&&$e&&(0,k.jsx)(b,{paddingX:1,marginTop:1,children:(0,k.jsx)(a,{color:$e.color,children:$e.text})}),Me==="run"&&!Nt&&!Yr&&!Jr&&!Tt&&O.askingUser&&(0,k.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,k.jsx)(b,{marginLeft:1,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"Agent Question"})}),(0,k.jsx)(b,{borderStyle:"round",borderColor:l.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,k.jsxs)(b,{children:[(0,k.jsx)(b,{width:3,children:(0,k.jsx)(a,{color:l.orange,bold:!0,children:"?"})}),(0,k.jsx)(b,{flexShrink:1,children:(0,k.jsx)(a,{wrap:"wrap",children:O.askingUser})})]})})]}),En&&(()=>{let d=En,h=d.reason==="switch"?d.to==="run"?"Discard the current generation and switch to Run?":"Stop the current run / discard its results and switch to Generate?":"Switching profile will end this generation. Continue?",S=d.reason==="switch"?"Discard & switch":"Yes, end";return(0,k.jsx)(Sf,{message:h,confirmLabel:S,onConfirm:async()=>{if(d.reason==="switch"){let v=d.to;Qr(null),Dt.confirmSwitch(v);return}or();let R=d.pendingArgs;if(Qr(null),await xe.end(),xe.reset(),R.profile){let v=y.creds.getDefaultEnv(),I=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(R.profile),y.creds.setDefaultEnv(v),Ct(y.creds,m,R.profile,v),_t(R.profile,v),vt(),Ut({kind:"switch",env:v},kt).catch(()=>{}),M("ok","/profiles switch",`${I} \u2192 ${R.profile} [${v}]`)}else ci("/profiles switch")},onCancel:()=>Qr(null)})})(),Cs&&(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,marginTop:1,children:[E.phase==="doctor"?(0,k.jsx)(id,{checks:E.checks,busyMessage:E.busyMessage,onRetry:E.recheck,onInstall:E.install,onCancel:E.cancel}):E.phase==="apps"&&E.kind?(0,k.jsx)(Sa,{kind:E.kind,onSelect:d=>E.selectApp(d),onBack:E.back,onCancel:E.back}):E.phase==="appList"&&E.kind?(0,k.jsx)(ya,{kind:E.kind,busyMessage:E.busyMessage,listApps:Qf,onSelect:d=>{E.selectAppId(d.appId)},onManualEntry:E.requestAppId,onCancel:E.back}):E.phase==="appId"?(0,k.jsx)(za,{busyMessage:E.busyMessage,onSubmit:d=>E.selectAppId(d),onBack:E.back}):E.phase==="chooser"?(0,k.jsx)(Wa,{mode:"mobile-only",onSelect:d=>{(d==="emulator"||d==="simulator")&&E.selectKind(d)},onCancel:E.back}):E.phase==="confirm"&&E.saved?(0,k.jsx)(gd,{saved:E.saved,onContinue:()=>E.confirmSaved(),onChangeDevice:()=>E.begin("reinit"),onChangeApp:()=>E.confirmSaved({keepApp:!1}),onCancel:E.cancel}):E.phase==="appSource"&&E.kind?(0,k.jsx)(Xa,{kind:E.kind,onSelect:d=>d==="uploaded"?E.requestCloudApps():E.requestApp(),onCancel:E.back}):(0,k.jsx)(xa,{targets:E.targets,preselectedTarget:C.mobile?.default_target,busyMessage:E.busyMessage??(E.phase==="checking"?"Checking mobile toolchain\u2026":null),onSelect:d=>{E.selectTarget(d)},onCancel:E.back,...E.kind?{kind:E.kind}:{}}),E.error&&(0,k.jsx)(a,{color:"red",children:E.error})]}),Dr&&(0,k.jsx)(td,{suggested:Dr.suggested,sessionTargetLabel:_r.kind==="unset"||_r.kind==="choose-mobile"?"Desktop":rn(_r.kind),appHint:Dr.verdict.appHint,savedDeviceName:ea(C.mobile?.default_target),onAccept:()=>Dn("accept"),onPickDevice:()=>Dn("pick"),onKeep:()=>Dn("keep"),onCancel:()=>Dn("cancel")}),Me==="run"&&!Nt&&!Yr&&!Jr&&!Tt&&!En&&!Ae.running&&!Cs&&!Dr&&(0,k.jsx)(ur,{onSubmit:ci,onEscape:void 0,history:Uf,commands:fd(vn(dd),ft),clearSeq:ep,loadMentionItems:ir?Kf:void 0,mentionHint:ir&&!E.target?"No device selected \u2014 run /mobile to choose one.":void 0,placeholder:O.askingUser?"Type your answer...":O.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)",footerBindings:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"},{keys:"/generate",label:"test cases"}]}),Me==="generate"&&!Nt&&!Yr&&!Jr&&!Tt&&!En&&(0,k.jsx)(xf,{tcg:xe,gm:Dt,history:qf,tuiConfig:C,browse:ar.isOpen?{target:ar.target,onClose:ar.close,excluded:ar.excluded,onToggleCase:ar.toggleCase,onToggleScenario:ar.toggleScenario,getStatus:Dt.bifurcation.getStatus,getResult:Dt.bifurcation.getResult}:null})]})]}),B&&K&&ge&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ki,{steps:Ot,status:ge.status,testUrl:ge.testUrl,error:ge.error}),ge.status==="success"&&(0,k.jsx)(Qn,{recordedTestPath:Q?.recordedTestPath,outputDir:Q?.outputDir,shareableLink:ge.testUrl,testCaseLink:ge.testCaseLink,codeExportDir:ge.codeExportDir,autoExit:!1})]}),Tt&&(0,k.jsx)(Mc,{defaultName:Tt,onSubmit:sp}),hr&&(0,k.jsx)(ja,{packPath:hr.packPath,viewerBase:Ma(ye??"prod"),onDone:()=>hr.resolve()}),Kr&&(0,k.jsx)(Oc,{onSubmit:ip}),gr&&ge&&(0,k.jsx)(ki,{steps:Ot,status:ge.status,error:ge.error}),B&&!K&&(0,k.jsx)($u,{profile:Lr,environment:ye,tokenValid:y.tokenValid,runCount:ee,sessionId:c.sessionId,viewMode:Tn,breadcrumb:cp,chatMode:Me,footerHint:np,tcgRequestId:xe.requestId,tcgStreamStatus:xe.isStreaming?"streaming":xe.isReconnecting?"reconnecting":xe.isTerminal&&xe.state.status.toLowerCase()==="completed"?"completed":xe.isTerminal&&xe.state.status.toLowerCase()==="failed"?"failed":null,sessionTarget:ir?{kind:_r.kind==="simulator"?"simulator":"emulator",...E.target?{deviceName:E.target.displayName}:{},...E.device?.app_package?{appPackage:E.device.app_package}:{}}:{kind:"desktop"},targetLocked:ft!==null})]})}function Sv({profiles:e,onSelect:t,onCancel:r,validating:n}){let[o,i]=(0,T.useState)(0);return Be((s,u)=>{if(!n){if(u.escape){r();return}if(u.upArrow&&o>0&&i(f=>f-1),u.downArrow&&o<e.length-1&&i(f=>f+1),u.return){let f=e[o];t(f.profile,f.env)}}}),(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,k.jsx)(a,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,k.jsx)(b,{marginTop:1,flexDirection:"column",children:e.map((s,u)=>(0,k.jsxs)(a,{children:[u===o?"\u276F ":" ",(0,k.jsx)(a,{color:u===o?"#ff9500":"white",bold:u===o,children:s.profile}),(0,k.jsxs)(a,{color:"gray",children:[" [",s.env,"]"]})]},`${s.profile}-${s.env}`))}),n&&(0,k.jsx)(b,{marginTop:1,children:(0,k.jsx)(a,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,k.jsx)(b,{marginTop:1,children:(0,k.jsx)(a,{color:"gray",children:"Esc = new login"})})]})}export{rd as a,nd as b,ad as c,If as d,$f as e,cE as f};