@testmuai/kane-cli 0.8.4 → 0.8.5
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.
- package/dist/{ChatSurface-H26E7DM6.js → ChatSurface-HAIVTS4J.js} +1 -1
- package/dist/{ChromeProfilePicker-USUPENU2.js → ChromeProfilePicker-5ILSVC2K.js} +1 -1
- package/dist/{CliFeedbackPrompt-ZIAZ2M2U.js → CliFeedbackPrompt-LFKEYMKP.js} +1 -1
- package/dist/{CliUploadProgress-LEOJTXHT.js → CliUploadProgress-Y7ITY2I7.js} +1 -1
- package/dist/{ConfigView-JBIQPG7O.js → ConfigView-OECNNCXC.js} +1 -1
- package/dist/{EvidenceViewOffer-IWQ6Q2CI.js → EvidenceViewOffer-FODRAS6Z.js} +1 -1
- package/dist/FolderPicker-5U3RHHBE.js +2 -0
- package/dist/{InfoBox-ORHNXPET.js → InfoBox-HWMHNWPM.js} +1 -1
- package/dist/{LinksBox-6SKDUB5T.js → LinksBox-TAGYCFFO.js} +1 -1
- package/dist/{ProfilesView-Y5GTLDJY.js → ProfilesView-QJBR3RCM.js} +1 -1
- package/dist/{ProjectPicker-WDCMKWNQ.js → ProjectPicker-PP75ILZU.js} +1 -1
- package/dist/{SaveSessionPrompt-I4KLFESC.js → SaveSessionPrompt-UCRET3II.js} +1 -1
- package/dist/SingleShotApp-XWOPGLKZ.js +2 -0
- package/dist/{SummaryBox-QWKW5FHK.js → SummaryBox-SLM3OFS2.js} +1 -1
- package/dist/TestMdRunView-6BY3IUH5.js +2 -0
- package/dist/{TestrunEvidenceTable-ENJJ2GIW.js → TestrunEvidenceTable-PTIBYAXO.js} +1 -1
- package/dist/{WhoamiView-H6M536AY.js → WhoamiView-WPHMNYUV.js} +1 -1
- package/dist/{app-download-PSRQWDVW.js → app-download-GYQYLGT3.js} +1 -1
- package/dist/{auth-JVH2EHK2.js → auth-3DLNMZC2.js} +1 -1
- package/dist/{binary-YTQJP2FG.js → binary-XJ3RF3VO.js} +1 -1
- package/dist/{bind-OUXCFLSE.js → bind-2N4Q6YKH.js} +2 -2
- package/dist/{bootstrap-3NEI7O6I.js → bootstrap-5IHKW5SE.js} +1 -1
- package/dist/bridge-LOBTHY3P.js +2 -0
- package/dist/{changelog-WDKG4WCV.js → changelog-WCCTI47M.js} +1 -1
- package/dist/{chunk-BXRZGISN.js → chunk-2K2BX23I.js} +1 -1
- package/dist/{chunk-W75AVBFG.js → chunk-2WSOPZJU.js} +1 -1
- package/dist/{chunk-TXH2KG7U.js → chunk-35EUIBYJ.js} +1 -1
- package/dist/{chunk-NEHX45NQ.js → chunk-3AJ3QSF5.js} +11 -11
- package/dist/{chunk-66RJPH73.js → chunk-4D3DNCQY.js} +1 -1
- package/dist/{chunk-XHNPNYJP.js → chunk-4UMQDH52.js} +1 -1
- package/dist/{chunk-5HYXTFGB.js → chunk-5NSYHRDN.js} +1 -1
- package/dist/{chunk-BWSL2KQQ.js → chunk-5S46D5AJ.js} +1 -1
- package/dist/{chunk-PWFZZWYU.js → chunk-66BSTNLD.js} +1 -1
- package/dist/{chunk-UTIGOLON.js → chunk-6BTZ2Q4P.js} +1 -1
- package/dist/{chunk-BDUCWZYO.js → chunk-6DTWVLSJ.js} +1 -1
- package/dist/{chunk-NDAAY2RL.js → chunk-7JUUNZQP.js} +1 -1
- package/dist/chunk-7PADFQ5S.js +71 -0
- package/dist/{chunk-RN3YHD4S.js → chunk-AJPLHW4T.js} +1 -1
- package/dist/{chunk-DYGUHGZ6.js → chunk-AMULIFC5.js} +1 -1
- package/dist/{chunk-A6TJUSOS.js → chunk-BAL7E4OH.js} +1 -1
- package/dist/{chunk-7HXZZ3VA.js → chunk-BG66IAO6.js} +1 -1
- package/dist/{chunk-QBF5FJVL.js → chunk-BJHII5SD.js} +1 -1
- package/dist/chunk-BVKDHHPK.js +5 -0
- package/dist/chunk-CCUGKBIH.js +2 -0
- package/dist/{chunk-UONRTWLU.js → chunk-CGYSFLM2.js} +1 -1
- package/dist/{chunk-7LP4X25A.js → chunk-CNNJ4U2L.js} +1 -1
- package/dist/{chunk-QWDFFEEJ.js → chunk-DCUT3GJA.js} +1 -1
- package/dist/{chunk-2HT3RYKJ.js → chunk-DJ7T7BMV.js} +1 -1
- package/dist/{chunk-PRLTUEKP.js → chunk-E3BXNQYE.js} +1 -1
- package/dist/{chunk-U55NUF4E.js → chunk-EFRJNPBZ.js} +2 -2
- package/dist/chunk-EKCGZXZE.js +2 -0
- package/dist/{chunk-BGMI5PH4.js → chunk-FDWEL5HR.js} +1 -1
- package/dist/chunk-FRSHEJUS.js +2 -0
- package/dist/{chunk-SFXQFUM6.js → chunk-FTZPWXF7.js} +1 -1
- package/dist/{chunk-62WYSEAT.js → chunk-G4AFOZKU.js} +1 -1
- package/dist/{chunk-L4EDLDLZ.js → chunk-GYF4CH62.js} +2 -2
- package/dist/{chunk-DWWAIXVZ.js → chunk-GZ4X53ZA.js} +2 -2
- package/dist/{chunk-PQWSHTSH.js → chunk-HFCDUFV3.js} +1 -1
- package/dist/{chunk-YB73T7QH.js → chunk-HQWLSA5M.js} +1 -1
- package/dist/{chunk-KAMJ7U4M.js → chunk-JJWQUQJ2.js} +1 -1
- package/dist/{chunk-OVLCJ2VX.js → chunk-JN2DP4R2.js} +1 -1
- package/dist/{chunk-VYYTENPY.js → chunk-JRQKUQWL.js} +1 -1
- package/dist/{chunk-IXTFWIQ6.js → chunk-K2QV7FGP.js} +1 -1
- package/dist/{chunk-GJED4QGF.js → chunk-K7UYWAZH.js} +1 -1
- package/dist/{chunk-55NSNWM5.js → chunk-KBMQGNKO.js} +9 -9
- package/dist/{chunk-35L2QXWP.js → chunk-KWKUMBHS.js} +2 -2
- package/dist/{chunk-52GWEKFD.js → chunk-KX2GOJ4C.js} +2 -2
- package/dist/{chunk-BCCWICSS.js → chunk-LA2EMSHE.js} +1 -1
- package/dist/{chunk-N7N222VC.js → chunk-M335FQYJ.js} +2 -2
- package/dist/{chunk-HHHNQW5Z.js → chunk-MJ56GUKS.js} +1 -1
- package/dist/{chunk-NEAMQMYH.js → chunk-MUGMUKSZ.js} +1 -1
- package/dist/{chunk-HXSEA7JS.js → chunk-NHOHQBIF.js} +1 -1
- package/dist/{chunk-KUYJ6FEN.js → chunk-NLECZCMZ.js} +1 -1
- package/dist/{chunk-7HPEHQHH.js → chunk-NYSMQ7UY.js} +1 -1
- package/dist/{chunk-DXJKMZEC.js → chunk-O3AY6JHJ.js} +1 -1
- package/dist/{chunk-OSB32HJE.js → chunk-OWTEHU6B.js} +1 -1
- package/dist/{chunk-A3PGLDQY.js → chunk-PB3GADUD.js} +1 -1
- package/dist/{chunk-YBX2SQ5R.js → chunk-PCOSE5SW.js} +2 -2
- package/dist/{chunk-ZI6W65E3.js → chunk-PEI2566X.js} +1 -1
- package/dist/{chunk-PSWB3BWQ.js → chunk-PQUMOFT5.js} +1 -1
- package/dist/chunk-PUFJEU46.js +2 -0
- package/dist/{chunk-4CHO7SAT.js → chunk-PWYEOBXV.js} +1 -1
- package/dist/{chunk-VBCIDWSK.js → chunk-Q6JHBDW2.js} +1 -1
- package/dist/{chunk-JR46A564.js → chunk-R7OGNE3W.js} +1 -1
- package/dist/{chunk-A4XJUWAQ.js → chunk-RY6TFVAX.js} +1 -1
- package/dist/{chunk-ZK57J37M.js → chunk-T3XDMR5B.js} +1 -1
- package/dist/{chunk-N5JHMCRU.js → chunk-T5LKD2OB.js} +1 -1
- package/dist/{chunk-L77ZOU4N.js → chunk-TCK3QMKY.js} +1 -1
- package/dist/{chunk-GSYJUHRK.js → chunk-TJZMYU2W.js} +1 -1
- package/dist/{chunk-DZJQNL66.js → chunk-UX3KPYTI.js} +1 -1
- package/dist/{chunk-BSCMUMSV.js → chunk-VT2XNEOD.js} +3 -3
- package/dist/{chunk-J27JJWMT.js → chunk-W27F2NWA.js} +1 -1
- package/dist/{chunk-JT7I6OST.js → chunk-WLOGO44E.js} +1 -1
- package/dist/{chunk-6CR2HTIM.js → chunk-WYST42WI.js} +1 -1
- package/dist/{chunk-SIH6JG7S.js → chunk-YFLKS4UV.js} +3 -3
- package/dist/{chunk-JCILRPOM.js → chunk-Z2T7E5HM.js} +2 -2
- package/dist/{chunk-JRADU3PO.js → chunk-ZFZ7YXEU.js} +1 -1
- package/dist/{chunk-7VTYRTEJ.js → chunk-ZIRMSWKS.js} +1 -1
- package/dist/{config-SFM45WCV.js → config-OKTAPFOT.js} +1 -1
- package/dist/{credentials-3CENDBPH.js → credentials-SO3DSQEM.js} +1 -1
- package/dist/{deps-bundle-P37ZJDXC.js → deps-bundle-FRM65BQO.js} +1 -1
- package/dist/{deps-resolve-VSICFRWU.js → deps-resolve-RPZORKUN.js} +1 -1
- package/dist/{dispatch-HDGQAEWN.js → dispatch-OZRMWY25.js} +1 -1
- package/dist/doctor-VWGEQYBB.js +2 -0
- package/dist/{evidence-ABYJOIV2.js → evidence-5AUZMKE3.js} +1 -1
- package/dist/{evolve-cmd-MROTNJIV.js → evolve-cmd-TWYJL4EG.js} +1 -1
- package/dist/{extract-bind-LBZMEDUK.js → extract-bind-EW7XUDLQ.js} +2 -2
- package/dist/{extract-cmd-K4KBPMB7.js → extract-cmd-HOVGMBGM.js} +1 -1
- package/dist/{generate-headless-EBMWSLTR.js → generate-headless-FYTJULPG.js} +2 -2
- package/dist/index.js +163 -145
- package/dist/{ingest-cmd-ULEWNGCI.js → ingest-cmd-RJLTFNMN.js} +1 -1
- package/dist/install-46S4VOZ4.js +2 -0
- package/dist/{interactive-bind-IYAJN45L.js → interactive-bind-PSEYAL54.js} +3 -3
- package/dist/{list-commands-YPBJNGCE.js → list-commands-2SVSEAP6.js} +1 -1
- package/dist/login-flow-U43QVFPH.js +2 -0
- package/dist/{mobile-prompts-LHUYRSV7.js → mobile-prompts-T6HZ2YLY.js} +1 -1
- package/dist/{persist-recorded-session-KCXYXSQG.js → persist-recorded-session-O2NCYTSD.js} +1 -1
- package/dist/pipeline-BHEA7ODT.js +2 -0
- package/dist/prepare-target-27UN4KNO.js +2 -0
- package/dist/{reconcile-cmd-TSQDYEUT.js → reconcile-cmd-FU3JIHTO.js} +1 -1
- package/dist/{reconcile-deps-ETMGIQNM.js → reconcile-deps-SUKZA2FL.js} +2 -2
- package/dist/{reconcile-engine-TLFTAOTZ.js → reconcile-engine-ILL4M3NW.js} +1 -1
- package/dist/{recording-banner-ACOLKL4K.js → recording-banner-5VXVKCV4.js} +1 -1
- package/dist/{registry-3Q6PNWCK.js → registry-BKV3EDTK.js} +1 -1
- package/dist/replay-policy-CVQ6OJX5.js +2 -0
- package/dist/{require-project-folder-5KWTJAXN.js → require-project-folder-2IO6IX5W.js} +1 -1
- package/dist/{resolve-run-intent-L2I7G55O.js → resolve-run-intent-ZML3HKG7.js} +1 -1
- package/dist/{resolver-NRU6HGTL.js → resolver-CBTWTZZR.js} +1 -1
- package/dist/{run-RHLRZCV5.js → run-EXIYK6PU.js} +1 -1
- package/dist/{run-T53Z5TCY.js → run-R7GND73C.js} +1 -1
- package/dist/{run-test-md-JYDYT3XF.js → run-test-md-664ASWRQ.js} +2 -2
- package/dist/{skill-installer-NWF53JAB.js → skill-installer-QLQK4JJE.js} +1 -1
- package/dist/{spawner-LKYUMXSO.js → spawner-ANLF7OX3.js} +1 -1
- package/dist/tcg-generate-VBC5ODDI.js +2 -0
- package/dist/{testmd-actions-CRRUXYOP.js → testmd-actions-QZD3N4EH.js} +1 -1
- package/dist/token-refresh-PIUX5OFA.js +2 -0
- package/dist/{validate-basic-X2XPEBFD.js → validate-basic-D7IJUFUQ.js} +1 -1
- package/dist/{verdicts-J2SDU4MW.js → verdicts-EO5TZ5BW.js} +1 -1
- package/dist/{version-check-DAWGRSJ5.js → version-check-JRLPWQ6T.js} +1 -1
- package/dist/{walk-session-D6TCM33V.js → walk-session-IODOH7QU.js} +1 -1
- package/dist/{with-telemetry-RXLIXUMR.js → with-telemetry-ASNQQBGP.js} +1 -1
- package/package.json +11 -11
- package/dist/FolderPicker-G4DT3OEZ.js +0 -2
- package/dist/HelpView-I27LWSL5.js +0 -2
- package/dist/SingleShotApp-Y77CNTSO.js +0 -2
- package/dist/TestMdRunView-PPM6LD3I.js +0 -2
- package/dist/bridge-AFQTFWCU.js +0 -2
- package/dist/chunk-2PH43Z3P.js +0 -69
- package/dist/chunk-3JLWPEQW.js +0 -2
- package/dist/chunk-C5UNZ6ZY.js +0 -2
- package/dist/chunk-EQSE6NIB.js +0 -5
- package/dist/chunk-PH22FRN5.js +0 -2
- package/dist/chunk-QDIZQ3ZF.js +0 -2
- package/dist/doctor-CPMWU5TL.js +0 -2
- package/dist/install-YDH2CORO.js +0 -2
- package/dist/login-flow-W5SAB7NN.js +0 -2
- package/dist/pipeline-ELIXCTFZ.js +0 -2
- package/dist/prepare-target-OU2DQXSW.js +0 -2
- package/dist/replay-policy-6USQBT3E.js +0 -2
- package/dist/tcg-generate-2PHA7VNL.js +0 -2
- package/dist/token-refresh-XKXPM6H3.js +0 -2
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as pi,b as Us}from"./chunk-3MSXQU2C.js";import{a as ua,b as da,c as fa,d as Ma,e as ja}from"./chunk-62WYSEAT.js";import{a as Cc}from"./chunk-UTIGOLON.js";import{a as lc,b as Ii,c as eo,d as uc,e as to,f as dc,h as fc,i as pc,j as mc,k as gc,l as hc,m as Ut,n as bc,o as vc,p as xc,q as ro,r as yc,s as Ai,t as Sc,u as wc,v as Rc}from"./chunk-N5JHMCRU.js";import{b as Tc,c as kc}from"./chunk-ZK57J37M.js";import{A as rc,B as nc,C as oc,D as ic,G as Ft,J as ac,a as an,b as pa,c as ma,e as xa,f as ya,g as Sa,h as Pa,i as Da,j as La,k as Jn,l as Oa,n as ki,o as za,p as Ci,r as Ka,s as Ya,t as Ja,u as Qa,w as Za,x as ec,y as tc,z as Ei}from"./chunk-2PH43Z3P.js";import{c as Ua,d as qa,n as cc}from"./chunk-35L2QXWP.js";import{a as Ec,b as _i}from"./chunk-A4XJUWAQ.js";import{b as Fa,t as Ha}from"./chunk-DEZ7CXGM.js";import{c as Xa}from"./chunk-QDIZQ3ZF.js";import{a as Zn}from"./chunk-A6TJUSOS.js";import{c as sc}from"./chunk-EQSE6NIB.js";import{a as _a}from"./chunk-IXTFWIQ6.js";import{E as Ta,K as ka,L as Ri,M as Ca,N as Ea}from"./chunk-NEHX45NQ.js";import{c as Ia,e as Aa}from"./chunk-GSYJUHRK.js";import{a as qs,b as mi,c as lr,d as Wn,e as Ba,f as $a}from"./chunk-4CHO7SAT.js";import{a as Na}from"./chunk-L77ZOU4N.js";import{c as Yn}from"./chunk-UONRTWLU.js";import{a as Ws,b as bi,c as Xs,d as Ra,e as Va,g as Ga}from"./chunk-KAMJ7U4M.js";import{e as wa}from"./chunk-OSB32HJE.js";import{a as Vr}from"./chunk-BDUCWZYO.js";import{a as Qn,b as Wa,c as Ti}from"./chunk-KUYJ6FEN.js";import{a as gi}from"./chunk-5Y2G4NC7.js";import{a as va}from"./chunk-VYYTENPY.js";import{a as wi,b as ia,e as sa,f as aa,g as ca,h as la}from"./chunk-BXRZGISN.js";import{c as Qs,e as Zs,g as ea}from"./chunk-52GWEKFD.js";import{b as Mr}from"./chunk-GJED4QGF.js";import{b as jr}from"./chunk-PRLTUEKP.js";import{h as ha}from"./chunk-SFXQFUM6.js";import{a as cn}from"./chunk-BPMSNGXQ.js";import{a as Ct,b as Bt,c as ga}from"./chunk-VE3SUJMA.js";import{a as ba}from"./chunk-BGMI5PH4.js";import{a as Xn,d as on,e as zn}from"./chunk-7HXZZ3VA.js";import{j as Si}from"./chunk-JCILRPOM.js";import{d as Ks}from"./chunk-MSGW4JDG.js";import{a as Kn,b as Or}from"./chunk-TZXXJWHA.js";import{i as ta,m as Vt,n as sn,o as ur,p as Nr}from"./chunk-56PAQAX5.js";import{a as na,b as wr,c as oa}from"./chunk-66RJPH73.js";import{h as ra}from"./chunk-TAOHYWEO.js";import{b as vi}from"./chunk-7HPEHQHH.js";import{c as xi}from"./chunk-HHHNQW5Z.js";import{a as jt}from"./chunk-7VTYRTEJ.js";import{a as nn,b as $r}from"./chunk-UOMRMCMI.js";import{a as Js}from"./chunk-JRADU3PO.js";import{a as Ys}from"./chunk-A3PGLDQY.js";import{a as Ge}from"./chunk-JT7I6OST.js";import{a as yi}from"./chunk-NLCCBXXV.js";import{a as zs}from"./chunk-RZ4F3BHX.js";import{a as Vs,d as Yt,e as rn}from"./chunk-EYOCNMUM.js";import{a as Gn}from"./chunk-XHNPNYJP.js";import{a as hi}from"./chunk-HXSEA7JS.js";import{a as Jt,b as Hs}from"./chunk-PSWB3BWQ.js";import{a as xt,c as mt,k as di,o as Fs,p as fi,y as l}from"./chunk-PH22FRN5.js";import{b as Gs}from"./chunk-DFS4RMVP.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as b,b as a,i as Be,j as js,k as Br}from"./chunk-C44QQJR4.js";import{a as Ee}from"./chunk-6YGTRKDT.js";import{c as re,e as D}from"./chunk-UR6MHSHU.js";var Ur=re((xv,_c)=>{"use strict";var rp="2.0.0",np=Number.MAX_SAFE_INTEGER||9007199254740991,op=16,ip=250,sp=["major","premajor","minor","preminor","patch","prepatch","prerelease"];_c.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:op,MAX_SAFE_BUILD_LENGTH:ip,MAX_SAFE_INTEGER:np,RELEASE_TYPES:sp,SEMVER_SPEC_VERSION:rp,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var ln=re((yv,Pc)=>{"use strict";var ap=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};Pc.exports=ap});var qr=re((qt,Dc)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Pi,MAX_SAFE_BUILD_LENGTH:cp,MAX_LENGTH:lp}=Ur(),up=ln();qt=Dc.exports={};var dp=qt.re=[],fp=qt.safeRe=[],W=qt.src=[],pp=qt.safeSrc=[],X=qt.t={},mp=0,Di="[a-zA-Z0-9-]",gp=[["\\s",1],["\\d",lp],[Di,cp]],hp=e=>{for(let[t,r]of gp)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},se=(e,t,r)=>{let n=hp(t),o=mp++;up(e,o,t),X[e]=o,W[o]=t,pp[o]=n,dp[o]=new RegExp(t,r?"g":void 0),fp[o]=new RegExp(n,r?"g":void 0)};se("NUMERICIDENTIFIER","0|[1-9]\\d*");se("NUMERICIDENTIFIERLOOSE","\\d+");se("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Di}*`);se("MAINVERSION",`(${W[X.NUMERICIDENTIFIER]})\\.(${W[X.NUMERICIDENTIFIER]})\\.(${W[X.NUMERICIDENTIFIER]})`);se("MAINVERSIONLOOSE",`(${W[X.NUMERICIDENTIFIERLOOSE]})\\.(${W[X.NUMERICIDENTIFIERLOOSE]})\\.(${W[X.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASEIDENTIFIER",`(?:${W[X.NONNUMERICIDENTIFIER]}|${W[X.NUMERICIDENTIFIER]})`);se("PRERELEASEIDENTIFIERLOOSE",`(?:${W[X.NONNUMERICIDENTIFIER]}|${W[X.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASE",`(?:-(${W[X.PRERELEASEIDENTIFIER]}(?:\\.${W[X.PRERELEASEIDENTIFIER]})*))`);se("PRERELEASELOOSE",`(?:-?(${W[X.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${W[X.PRERELEASEIDENTIFIERLOOSE]})*))`);se("BUILDIDENTIFIER",`${Di}+`);se("BUILD",`(?:\\+(${W[X.BUILDIDENTIFIER]}(?:\\.${W[X.BUILDIDENTIFIER]})*))`);se("FULLPLAIN",`v?${W[X.MAINVERSION]}${W[X.PRERELEASE]}?${W[X.BUILD]}?`);se("FULL",`^${W[X.FULLPLAIN]}$`);se("LOOSEPLAIN",`[v=\\s]*${W[X.MAINVERSIONLOOSE]}${W[X.PRERELEASELOOSE]}?${W[X.BUILD]}?`);se("LOOSE",`^${W[X.LOOSEPLAIN]}$`);se("GTLT","((?:<|>)?=?)");se("XRANGEIDENTIFIERLOOSE",`${W[X.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);se("XRANGEIDENTIFIER",`${W[X.NUMERICIDENTIFIER]}|x|X|\\*`);se("XRANGEPLAIN",`[v=\\s]*(${W[X.XRANGEIDENTIFIER]})(?:\\.(${W[X.XRANGEIDENTIFIER]})(?:\\.(${W[X.XRANGEIDENTIFIER]})(?:${W[X.PRERELEASE]})?${W[X.BUILD]}?)?)?`);se("XRANGEPLAINLOOSE",`[v=\\s]*(${W[X.XRANGEIDENTIFIERLOOSE]})(?:\\.(${W[X.XRANGEIDENTIFIERLOOSE]})(?:\\.(${W[X.XRANGEIDENTIFIERLOOSE]})(?:${W[X.PRERELEASELOOSE]})?${W[X.BUILD]}?)?)?`);se("XRANGE",`^${W[X.GTLT]}\\s*${W[X.XRANGEPLAIN]}$`);se("XRANGELOOSE",`^${W[X.GTLT]}\\s*${W[X.XRANGEPLAINLOOSE]}$`);se("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Pi}})(?:\\.(\\d{1,${Pi}}))?(?:\\.(\\d{1,${Pi}}))?`);se("COERCE",`${W[X.COERCEPLAIN]}(?:$|[^\\d])`);se("COERCEFULL",W[X.COERCEPLAIN]+`(?:${W[X.PRERELEASE]})?(?:${W[X.BUILD]})?(?:$|[^\\d])`);se("COERCERTL",W[X.COERCE],!0);se("COERCERTLFULL",W[X.COERCEFULL],!0);se("LONETILDE","(?:~>?)");se("TILDETRIM",`(\\s*)${W[X.LONETILDE]}\\s+`,!0);qt.tildeTrimReplace="$1~";se("TILDE",`^${W[X.LONETILDE]}${W[X.XRANGEPLAIN]}$`);se("TILDELOOSE",`^${W[X.LONETILDE]}${W[X.XRANGEPLAINLOOSE]}$`);se("LONECARET","(?:\\^)");se("CARETTRIM",`(\\s*)${W[X.LONECARET]}\\s+`,!0);qt.caretTrimReplace="$1^";se("CARET",`^${W[X.LONECARET]}${W[X.XRANGEPLAIN]}$`);se("CARETLOOSE",`^${W[X.LONECARET]}${W[X.XRANGEPLAINLOOSE]}$`);se("COMPARATORLOOSE",`^${W[X.GTLT]}\\s*(${W[X.LOOSEPLAIN]})$|^$`);se("COMPARATOR",`^${W[X.GTLT]}\\s*(${W[X.FULLPLAIN]})$|^$`);se("COMPARATORTRIM",`(\\s*)${W[X.GTLT]}\\s*(${W[X.LOOSEPLAIN]}|${W[X.XRANGEPLAIN]})`,!0);qt.comparatorTrimReplace="$1$2$3";se("HYPHENRANGE",`^\\s*(${W[X.XRANGEPLAIN]})\\s+-\\s+(${W[X.XRANGEPLAIN]})\\s*$`);se("HYPHENRANGELOOSE",`^\\s*(${W[X.XRANGEPLAINLOOSE]})\\s+-\\s+(${W[X.XRANGEPLAINLOOSE]})\\s*$`);se("STAR","(<|>)?=?\\s*\\*");se("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");se("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var no=re((Sv,Lc)=>{"use strict";var bp=Object.freeze({loose:!0}),vp=Object.freeze({}),xp=e=>e?typeof e!="object"?bp:e:vp;Lc.exports=xp});var Li=re((wv,Oc)=>{"use strict";var Bc=/^[0-9]+$/,$c=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Bc.test(e),n=Bc.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},yp=(e,t)=>$c(t,e);Oc.exports={compareIdentifiers:$c,rcompareIdentifiers:yp}});var et=re((Rv,Mc)=>{"use strict";var oo=ln(),{MAX_LENGTH:Nc,MAX_SAFE_INTEGER:io}=Ur(),{safeRe:so,t:ao}=qr(),Sp=no(),{compareIdentifiers:Bi}=Li(),wp=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if(Bi(e[n],r[n])!==0)return!1;return!0},$i=class e{constructor(t,r){if(r=Sp(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>Nc)throw new TypeError(`version is longer than ${Nc} characters`);oo("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?so[ao.LOOSE]:so[ao.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>io||this.major<0)throw new TypeError("Invalid major version");if(this.minor>io||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>io||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<io)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(oo("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(oo("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 Bi(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(oo("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 Bi(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?so[ao.PRERELEASELOOSE]:so[ao.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]),wp(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}};Mc.exports=$i});var dr=re((Tv,Vc)=>{"use strict";var jc=et(),Rp=(e,t,r=!1)=>{if(e instanceof jc)return e;try{return new jc(e,t)}catch(n){if(!r)return null;throw n}};Vc.exports=Rp});var Uc=re((kv,Fc)=>{"use strict";var Tp=dr(),kp=(e,t)=>{let r=Tp(e,t);return r?r.version:null};Fc.exports=kp});var Hc=re((Cv,qc)=>{"use strict";var Cp=dr(),Ep=(e,t)=>{let r=Cp(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};qc.exports=Ep});var Xc=re((Ev,Wc)=>{"use strict";var Gc=et(),Ip=(e,t,r,n,o)=>{typeof r=="string"&&(o=n,n=r,r=void 0);try{return new Gc(e instanceof Gc?e.version:e,r).inc(t,n,o).version}catch{return null}};Wc.exports=Ip});var Yc=re((Iv,Kc)=>{"use strict";var zc=dr(),Ap=(e,t)=>{let r=zc(e,null,!0),n=zc(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"};Kc.exports=Ap});var Qc=re((Av,Jc)=>{"use strict";var _p=et(),Pp=(e,t)=>new _p(e,t).major;Jc.exports=Pp});var el=re((_v,Zc)=>{"use strict";var Dp=et(),Lp=(e,t)=>new Dp(e,t).minor;Zc.exports=Lp});var rl=re((Pv,tl)=>{"use strict";var Bp=et(),$p=(e,t)=>new Bp(e,t).patch;tl.exports=$p});var ol=re((Dv,nl)=>{"use strict";var Op=dr(),Np=(e,t)=>{let r=Op(e,t);return r&&r.prerelease.length?r.prerelease:null};nl.exports=Np});var Et=re((Lv,sl)=>{"use strict";var il=et(),Mp=(e,t,r)=>new il(e,r).compare(new il(t,r));sl.exports=Mp});var cl=re((Bv,al)=>{"use strict";var jp=Et(),Vp=(e,t,r)=>jp(t,e,r);al.exports=Vp});var ul=re(($v,ll)=>{"use strict";var Fp=Et(),Up=(e,t)=>Fp(e,t,!0);ll.exports=Up});var co=re((Ov,fl)=>{"use strict";var dl=et(),qp=(e,t,r)=>{let n=new dl(e,r),o=new dl(t,r);return n.compare(o)||n.compareBuild(o)};fl.exports=qp});var ml=re((Nv,pl)=>{"use strict";var Hp=co(),Gp=(e,t)=>e.sort((r,n)=>Hp(r,n,t));pl.exports=Gp});var hl=re((Mv,gl)=>{"use strict";var Wp=co(),Xp=(e,t)=>e.sort((r,n)=>Wp(n,r,t));gl.exports=Xp});var un=re((jv,bl)=>{"use strict";var zp=Et(),Kp=(e,t,r)=>zp(e,t,r)>0;bl.exports=Kp});var lo=re((Vv,vl)=>{"use strict";var Yp=Et(),Jp=(e,t,r)=>Yp(e,t,r)<0;vl.exports=Jp});var Oi=re((Fv,xl)=>{"use strict";var Qp=Et(),Zp=(e,t,r)=>Qp(e,t,r)===0;xl.exports=Zp});var Ni=re((Uv,yl)=>{"use strict";var em=Et(),tm=(e,t,r)=>em(e,t,r)!==0;yl.exports=tm});var uo=re((qv,Sl)=>{"use strict";var rm=Et(),nm=(e,t,r)=>rm(e,t,r)>=0;Sl.exports=nm});var fo=re((Hv,wl)=>{"use strict";var om=Et(),im=(e,t,r)=>om(e,t,r)<=0;wl.exports=im});var Mi=re((Gv,Rl)=>{"use strict";var sm=Oi(),am=Ni(),cm=un(),lm=uo(),um=lo(),dm=fo(),fm=(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 sm(e,r,n);case"!=":return am(e,r,n);case">":return cm(e,r,n);case">=":return lm(e,r,n);case"<":return um(e,r,n);case"<=":return dm(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Rl.exports=fm});var kl=re((Wv,Tl)=>{"use strict";var pm=et(),mm=dr(),{safeRe:po,t:mo}=qr(),gm=(e,t)=>{if(e instanceof pm)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?po[mo.COERCEFULL]:po[mo.COERCE]);else{let f=t.includePrerelease?po[mo.COERCERTLFULL]:po[mo.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 mm(`${n}.${o}.${i}${s}${u}`,t)};Tl.exports=gm});var El=re((Xv,Cl)=>{"use strict";var hm=dr(),bm=Ur(),vm=et(),xm=(e,t,r)=>{if(!bm.RELEASE_TYPES.includes(t))return null;let n=ym(e,r);return n&&Sm(n,t)},ym=(e,t)=>{let r=e instanceof vm?e.version:e;return hm(r,t)},Sm=(e,t)=>{if(wm(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()},wm=e=>e.startsWith("pre");Cl.exports=xm});var Al=re((zv,Il)=>{"use strict";var ji=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}};Il.exports=ji});var It=re((Kv,Ll)=>{"use strict";var Rm=/\s+/g,Vi=class e{constructor(t,r){if(r=km(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof Fi)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(Rm," "),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=>!Pl(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&&Bm(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(Lm,"");let n=((this.options.includePrerelease&&Pm)|(this.options.loose&&Dm))+":"+t,o=_l.get(n);if(o)return o;let i=this.options.loose,s=i?gt[tt.HYPHENRANGELOOSE]:gt[tt.HYPHENRANGE];t=t.replace(s,Gm(this.options.includePrerelease)),De("hyphen replace",t),t=t.replace(gt[tt.COMPARATORTRIM],Im),De("comparator trim",t),t=t.replace(gt[tt.TILDETRIM],Am),De("tilde trim",t),t=t.replace(gt[tt.CARETTRIM],_m),De("caret trim",t);let u=t.split(" ").map(p=>$m(p,this.options)).join(" ").split(/\s+/).map(p=>Hm(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 Fi(p,this.options));for(let p of g){if(Pl(p))return[p];f.set(p.value,p)}f.size>1&&f.has("")&&f.delete("");let w=[...f.values()];return _l.set(n,w),w}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Dl(n,r)&&t.set.some(o=>Dl(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 Cm(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Wm(this.set[r],t,this.options))return!0;return!1}};Ll.exports=Vi;var Tm=Al(),_l=new Tm,km=no(),Fi=dn(),De=ln(),Cm=et(),{safeRe:gt,src:Em,t:tt,comparatorTrimReplace:Im,tildeTrimReplace:Am,caretTrimReplace:_m}=qr(),{FLAG_INCLUDE_PRERELEASE:Pm,FLAG_LOOSE:Dm}=Ur(),Lm=new RegExp(Em[tt.BUILD],"g"),Pl=e=>e.value==="<0.0.0-0",Bm=e=>e.value==="",Dl=(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},$m=(e,t)=>(e=e.replace(gt[tt.BUILD],""),De("comp",e,t),e=jm(e,t),De("caret",e),e=Nm(e,t),De("tildes",e),e=Fm(e,t),De("xrange",e),e=qm(e,t),De("stars",e),e),qe=e=>!e||e.toLowerCase()==="x"||e==="*",Om=(e,t,r)=>qe(e)&&!qe(t)||qe(t)&&r&&!qe(r),Nm=(e,t)=>e.trim().split(/\s+/).map(r=>Mm(r,t)).join(" "),Mm=(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})},jm=(e,t)=>e.trim().split(/\s+/).map(r=>Vm(r,t)).join(" "),Vm=(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})},Fm=(e,t)=>(De("replaceXRanges",e,t),e.split(/\s+/).map(r=>Um(r,t)).join(" ")),Um=(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),Om(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})},qm=(e,t)=>(De("replaceStars",e,t),e.trim().replace(gt[tt.STAR],"")),Hm=(e,t)=>(De("replaceGTE0",e,t),e.trim().replace(gt[t.includePrerelease?tt.GTE0PRE:tt.GTE0],"")),Gm=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()),Wm=(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!==Fi.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 dn=re((Yv,jl)=>{"use strict";var fn=Symbol("SemVer ANY"),Hi=class e{static get ANY(){return fn}constructor(t,r){if(r=Bl(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),qi("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===fn?this.value="":this.value=this.operator+this.semver.version,qi("comp",this)}parse(t){let r=this.options.loose?$l[Ol.COMPARATORLOOSE]:$l[Ol.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 Nl(n[2],this.options.loose):this.semver=fn}toString(){return this.value}test(t){if(qi("Comparator.test",t,this.options.loose),this.semver===fn||t===fn)return!0;if(typeof t=="string")try{t=new Nl(t,this.options)}catch{return!1}return Ui(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 Ml(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new Ml(this.value,r).test(t.semver):(r=Bl(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("=")||Ui(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||Ui(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};jl.exports=Hi;var Bl=no(),{safeRe:$l,t:Ol}=qr(),Ui=Mi(),qi=ln(),Nl=et(),Ml=It()});var pn=re((Jv,Vl)=>{"use strict";var Xm=It(),zm=(e,t,r)=>{try{t=new Xm(t,r)}catch{return!1}return t.test(e)};Vl.exports=zm});var Ul=re((Qv,Fl)=>{"use strict";var Km=It(),Ym=(e,t)=>new Km(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));Fl.exports=Ym});var Hl=re((Zv,ql)=>{"use strict";var Jm=et(),Qm=It(),Zm=(e,t,r)=>{let n=null,o=null,i=null;try{i=new Qm(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===-1)&&(n=s,o=new Jm(n,r))}),n};ql.exports=Zm});var Wl=re((ex,Gl)=>{"use strict";var eg=et(),tg=It(),rg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new tg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===1)&&(n=s,o=new eg(n,r))}),n};Gl.exports=rg});var Kl=re((tx,zl)=>{"use strict";var Gi=et(),ng=It(),Xl=un(),og=(e,t)=>{e=new ng(e,t);let r=new Gi("0.0.0");if(e.test(r)||(r=new Gi("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 Gi(s.semver.version);switch(s.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!i||Xl(u,i))&&(i=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),i&&(!r||Xl(r,i))&&(r=i)}return r&&e.test(r)?r:null};zl.exports=og});var Jl=re((rx,Yl)=>{"use strict";var ig=It(),sg=(e,t)=>{try{return new ig(e,t).range||"*"}catch{return null}};Yl.exports=sg});var go=re((nx,tu)=>{"use strict";var ag=et(),eu=dn(),{ANY:cg}=eu,lg=It(),ug=pn(),Ql=un(),Zl=lo(),dg=fo(),fg=uo(),pg=(e,t,r,n)=>{e=new ag(e,n),t=new lg(t,n);let o,i,s,u,f;switch(r){case">":o=Ql,i=dg,s=Zl,u=">",f=">=";break;case"<":o=Zl,i=fg,s=Ql,u="<",f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ug(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===cg&&(c=new eu(">=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};tu.exports=pg});var nu=re((ox,ru)=>{"use strict";var mg=go(),gg=(e,t,r)=>mg(e,t,">",r);ru.exports=gg});var iu=re((ix,ou)=>{"use strict";var hg=go(),bg=(e,t,r)=>hg(e,t,"<",r);ou.exports=bg});var cu=re((sx,au)=>{"use strict";var su=It(),vg=(e,t,r)=>(e=new su(e,r),t=new su(t,r),e.intersects(t,r));au.exports=vg});var uu=re((ax,lu)=>{"use strict";var xg=pn(),yg=Et();lu.exports=(e,t,r)=>{let n=[],o=null,i=null,s=e.sort((w,p)=>yg(w,p,r));for(let w of s)xg(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 hu=re((cx,gu)=>{"use strict";var du=It(),zi=dn(),{ANY:Wi}=zi,Xi=pn(),Ki=Et(),Sg=(e,t,r={})=>{if(e===t)return!0;e=new du(e,r),t=new du(t,r);let n=!1;e:for(let o of e.set){for(let i of t.set){let s=Rg(o,i,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},wg=[new zi(">=0.0.0-0")],fu=[new zi(">=0.0.0")],Rg=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Wi){if(t.length===1&&t[0].semver===Wi)return!0;r.includePrerelease?e=wg:e=fu}if(t.length===1&&t[0].semver===Wi){if(r.includePrerelease)return!0;t=fu}let n=new Set,o,i;for(let c of e)c.operator===">"||c.operator===">="?o=pu(o,c,r):c.operator==="<"||c.operator==="<="?i=mu(i,c,r):n.add(c.semver);if(n.size>1)return null;let s;if(o&&i){if(s=Ki(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&&!Xi(c,String(o),r)||i&&!Xi(c,String(i),r))return null;for(let m of t)if(!Xi(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=pu(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=mu(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)},pu=(e,t,r)=>{if(!e)return t;let n=Ki(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},mu=(e,t,r)=>{if(!e)return t;let n=Ki(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};gu.exports=Sg});var Ji=re((lx,xu)=>{"use strict";var Yi=qr(),bu=Ur(),Tg=et(),vu=Li(),kg=dr(),Cg=Uc(),Eg=Hc(),Ig=Xc(),Ag=Yc(),_g=Qc(),Pg=el(),Dg=rl(),Lg=ol(),Bg=Et(),$g=cl(),Og=ul(),Ng=co(),Mg=ml(),jg=hl(),Vg=un(),Fg=lo(),Ug=Oi(),qg=Ni(),Hg=uo(),Gg=fo(),Wg=Mi(),Xg=kl(),zg=El(),Kg=dn(),Yg=It(),Jg=pn(),Qg=Ul(),Zg=Hl(),eh=Wl(),th=Kl(),rh=Jl(),nh=go(),oh=nu(),ih=iu(),sh=cu(),ah=uu(),ch=hu();xu.exports={parse:kg,valid:Cg,clean:Eg,inc:Ig,diff:Ag,major:_g,minor:Pg,patch:Dg,prerelease:Lg,compare:Bg,rcompare:$g,compareLoose:Og,compareBuild:Ng,sort:Mg,rsort:jg,gt:Vg,lt:Fg,eq:Ug,neq:qg,gte:Hg,lte:Gg,cmp:Wg,coerce:Xg,truncate:zg,Comparator:Kg,Range:Yg,satisfies:Jg,toComparators:Qg,maxSatisfying:Zg,minSatisfying:eh,minVersion:th,validRange:rh,outside:nh,gtr:oh,ltr:ih,intersects:sh,simplifyRange:ah,subset:ch,SemVer:Tg,re:Yi.re,src:Yi.src,tokens:Yi.t,SEMVER_SPEC_VERSION:bu.SEMVER_SPEC_VERSION,RELEASE_TYPES:bu.RELEASE_TYPES,compareIdentifiers:vu.compareIdentifiers,rcompareIdentifiers:vu.rcompareIdentifiers}});var T=D(Ee(),1);var Ic=D(Ee(),1);var Fr=D(G(),1);function Ac({path:e}){return e.length===0?null:(0,Fr.jsx)(b,{children:e.map((t,r)=>(0,Fr.jsxs)(Ic.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 yu=D(Ji(),1),lh=1,uh=new Set(["discover","workflow","nudge","recovery"]),dh=new Set(["run","generate","both"]),fh=new Set(["banner","footer"]),ho=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 ph(e){if(!ho(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 Su(e,t){return e.text[t]??e.text.default??(e.target!=="both"?e.text[e.target]:void 0)}function mh(e,t){return t==="both"?!!e.default||!!e.run&&!!e.generate:t==="run"?!!e.run||!!e.default:!!e.generate||!!e.default}function gh(e,t){if(!ho(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 hh(e){if(!ho(e))return null;let t=Hr(e.id);if(!t)return null;let r=dh.has(e.target)?e.target:void 0;if(e.target!==void 0&&r===void 0)return null;let n=r??"both",o=ph(e.text);if(!mh(o,n))return null;let i=uh.has(e.category)?e.category:"nudge",s=fh.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)&&yu.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,P=gh(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:P}}function bo(e){if(!ho(e)||!Array.isArray(e.hints)||typeof e.enabled!="boolean")return{catalog:null,dropped:0};let t=Gr(e.schemaVersion)??0;if(Math.floor(t)>lh)return{catalog:null,dropped:0};let r=0,n=new Set,o=[];for(let i of e.hints){let s=hh(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 Tu=D(G(),1),wu="tip: ";function Ru({hint:e,mode:t,termWidth:r}){if(e.target!=="both"&&e.target!==t)return null;let n=Su(e,t);if(!n)return null;let o=Math.max(8,r-wu.length-2),i=n.length>o?n.slice(0,o-1)+"\u2026":n;return(0,Tu.jsx)(a,{color:l.dim,children:wu+i})}var ee=D(G(),1);function vo(e,t){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}\u2026`}function bh(e,t){if(e.kind==="desktop")return"Desktop";let r=rn(e.kind);return e.deviceName?e.appPackage&&t>=72?`${r} \xB7 ${vo(e.deviceName,30)} \xB7 ${vo(e.appPackage,36)}`:t>=48?`${r} \xB7 ${vo(e.deviceName,40)}`:`${r} \xB7 ${vo(e.deviceName,Math.max(8,t-12))}`:t<36?r:`${r} \xB7 setting up`}function ku({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}=Br(),m=c?.columns??80,P=u??"run",U=t==="stage",B=t==="prod",F=P==="generate"?l.generateAccent:l.orange,H=g==="completed"?l.green:g==="failed"?l.red:l.generateAccent,$=bh(p,m);return(0,ee.jsxs)(b,{flexDirection:"column",children:[(0,ee.jsx)(a,{color:l.muted,children:"\u2500".repeat(m)}),s&&s.length>0&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Ac,{path:s})}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:"Mode:"}),(0,ee.jsx)(a,{color:F,bold:!0,children:P==="generate"?"Generate":"Run"}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),P==="generate"?(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.dim,children:"req"}),(0,ee.jsx)(a,{color:l.dim,children:f??"\u2014"}),g&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"\xB7"}),(0,ee.jsx)(a,{color:H,children:g})]})]}):(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.dim,children:"Session:"}),(0,ee.jsx)(a,{color:l.dim,children:o})]}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsx)(a,{color:r?l.green:l.red,children:"\u25CF"}),(0,ee.jsx)(a,{color:l.dim,children:r?"authenticated":"not logged in"}),!B&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"|"}),U?(0,ee.jsx)(a,{color:l.orange,bold:!0,children:"\u26A0 stage"}):(0,ee.jsx)(a,{color:l.green,children:t})]})]}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:e??"no profile"}),P==="run"&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsxs)(a,{color:l.dim,children:["runs: ",n]})]}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsx)(a,{dimColor:!0,children:Us()})]}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:"Config:"}),(0,ee.jsx)(a,{color:p.kind==="desktop"?l.dim:l.orange,children:$}),x&&(0,ee.jsx)(a,{color:l.dim,children:"\xB7 locked (/new to change)"})]}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(a,{dimColor:!0,children:i==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})}),w&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Ru,{hint:w,mode:P,termWidth:m})})]})}var Tr=D(Ee(),1);var mn=[[[" "],[" "],[" "],[" "],["\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(G(),1),xo="#af87d7",Qi="#875faf",Cu="#5b3a7a",vh="#ff9500",xh="#ea580c";var Zi="#666666",yh="#555555",Rr=[[xo,"\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"],[xo,"\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"],[xo,"\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"],[xo,"\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"],[Qi,"\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"],[Qi,"\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"],[Qi,"\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"]],es=Rr.map(([,e])=>[...e]);function Eu({visibleRows:e=Rr.length}){let t=Math.min(e,Rr.length);return(0,ve.jsxs)(b,{flexDirection:"column",children:[Rr.slice(0,t).map(([r,n],o)=>{let i=es[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&&es[o-1][u-1]==="\u2588";return f||g?(0,ve.jsx)(a,{color:Cu,children:"\u2592"},u):(0,ve.jsx)(a,{children:" "},u)})},o)}),t>=Rr.length&&(0,ve.jsxs)(a,{children:[" ",es[Rr.length-1].map((r,n)=>r==="\u2588"?(0,ve.jsx)(a,{color:Cu,children:"\u2580"},n):(0,ve.jsx)(a,{children:" "},n))]})]})}function Sh({visibleRows:e=mn.length}){let t=Math.min(e,mn.length);return(0,ve.jsx)(b,{flexDirection:"column",children:mn.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 yo({size:e="compact",helmetVisibleRows:t=mn.length,textVisibleRows:r=Rr.length,showMeta:n=!1,user:o=null,authenticated:i=!1,version:s=""}){return e==="compact"?(0,ve.jsx)(Eu,{}):(0,ve.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,ve.jsx)(a,{color:vh,italic:!0,children:" Welcome to"}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(b,{gap:2,children:[(0,ve.jsx)(Sh,{visibleRows:t}),(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(Eu,{visibleRows:r}),(0,ve.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,ve.jsx)(a,{color:xh,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:Zi,children:" Browser automation powered by AI. "}),(0,ve.jsx)(a,{color:yh,children:`v${s}`})]}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:Zi,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:Zi,children:" data \u2014 right from your terminal."})}),(0,ve.jsx)(a,{children:" "})]})]})}var ns=D(G(),1),ts=8,rs=7;function Iu({onComplete:e}){let[t,r]=(0,Tr.useState)(0),[n,o]=(0,Tr.useState)(0),[i,s]=(0,Tr.useState)(!1),[u]=(0,Tr.useState)(()=>{let f=new Gn,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(ts,f+1))},t<ts?60:null),gi(()=>{o(f=>Math.min(rs,f+1))},n<rs?80:null),(0,Tr.useEffect)(()=>{t>=ts&&n>=rs&&!i&&(s(!0),e?.())},[t,n,i,e]),(0,ns.jsx)(b,{flexDirection:"column",children:(0,ns.jsx)(yo,{size:"full",helmetVisibleRows:t,textVisibleRows:n,showMeta:i,user:u.user,authenticated:u.authenticated,version:xt})})}var Qt=D(G(),1);function Au({entry:e}){return e.type==="input"?(0,Qt.jsxs)(b,{children:[(0,Qt.jsx)(a,{color:l.orange,children:"\u276F "}),(0,Qt.jsx)(a,{children:e.text})]}):e.type==="error"?(0,Qt.jsx)(b,{marginLeft:2,children:(0,Qt.jsx)(a,{color:l.red,children:e.text})}):(0,Qt.jsx)(b,{marginLeft:2,children:(0,Qt.jsx)(a,{color:e.type==="info"?l.dim:void 0,children:e.text})})}var os=D(G(),1);function _u({objective:e}){let{stdout:t}=Br(),r=Math.max(24,(t?.columns??80)-4);return(0,os.jsx)(Jt,{title:"run",width:r,children:(0,os.jsx)(Hs,{label:"objective",value:e})})}var Ht=D(Ee(),1);var ht=D(G(),1);function wh(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 Pu({data:e,width:t=60}){let r=wh(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(G(),1);function is(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,Ht.useState)(()=>{let F=r??[],H=is(e,F),$=0;if(F.length>0){let z=H.findIndex(fe=>fe.item.id===F[0]);z>=0&&z+1<H.length&&($=z+1)}return{expandedPath:F,selectedIndex:$,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),c=is(e,p.expandedPath),m=c[p.selectedIndex]?.item,P=(0,Ht.useRef)(null),U=(0,Ht.useCallback)(F=>{x(H=>({...H,feedback:F})),P.current&&clearTimeout(P.current),P.current=setTimeout(()=>{x(H=>({...H,feedback:null})),P.current=null},4e3)},[]);(0,Ht.useEffect)(()=>()=>{P.current&&clearTimeout(P.current)},[]),(0,Ht.useEffect)(()=>{w?.(p.activeView)},[p.activeView,w]);let B=(0,Ht.useCallback)(()=>{x(F=>({...F,activeView:null,infoData:null}))},[]);return Be((F,H)=>{if(p.activeView==="infoView"){H.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(H.escape){x($=>({...$,isEditing:!1,inputValue:""}));return}if(H.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(H.backspace||H.delete){x($=>({...$,inputValue:$.inputValue.slice(0,-1)}));return}F&&!H.ctrl&&!H.meta&&x($=>({...$,inputValue:$.inputValue+F}));return}if(p.isSelecting&&m?.options){let $=m.options;if(H.escape){x(z=>({...z,isSelecting:!1}));return}if(H.upArrow){x(z=>({...z,inputValue:String(Math.max(0,Number(z.inputValue||"0")-1))}));return}if(H.downArrow){x(z=>({...z,inputValue:String(Math.min($.length-1,Number(z.inputValue||"0")+1))}));return}if(H.return){let z=Number(p.inputValue||"0"),fe=$[z];if(fe&&m.onValue){let oe=m.currentValue;m.onValue(fe.value),U(oe?`${m.label}: ${oe} \u2192 ${fe.label}`:`${m.label}: ${fe.label}`)}x(oe=>({...oe,isSelecting:!1,inputValue:""}));return}return}if(H.upArrow){x($=>({...$,selectedIndex:Math.max(0,$.selectedIndex-1)}));return}if(H.downArrow){x($=>({...$,selectedIndex:Math.min(c.length-1,$.selectedIndex+1)}));return}if(H.escape){if(p.expandedPath.length===0){n?.();return}x($=>{let z=$.expandedPath.slice(0,-1),fe=is(e,z),oe=$.expandedPath[$.expandedPath.length-1],ie=fe.findIndex(Y=>Y.item.id===oe);return{...$,expandedPath:z,selectedIndex:ie>=0?ie:0}});return}if(H.return&&m){if(m.id==="run-start"){t();return}if(m.type==="submenu"){let $=c[p.selectedIndex]?.depth??0;x(z=>({...z,expandedPath:[...z.expandedPath.slice(0,$),m.id],selectedIndex:z.selectedIndex+1}));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)(Pu,{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:H},$)=>{let z=$===p.selectedIndex,fe=" ".repeat(H),oe=z?"\u276F ":" ",ie=F.type==="submenu"?p.expandedPath.includes(F.id)?"\u25BC ":"\u25B6 ":F.type==="select"&&F.options?z&&p.isSelecting?"\u25BC ":"\u25B6 ":" ",Y=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:[fe,oe,ie,F.label]}),F.options.map((we,me)=>(0,rt.jsxs)(a,{color:me===pe?l.orange:void 0,children:[fe," ",me===pe?"\u276F ":" ",we.label]},we.value))]},F.id)}return z&&p.isEditing?(0,rt.jsxs)(a,{color:l.orange,children:[fe,oe,ie,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&&H>0,children:[fe,oe,ie,F.label,(0,rt.jsx)(a,{dimColor:!0,children:Y})]},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)(jt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var J=D(Ee(),1);import{access as Rh}from"fs/promises";async function Du(e){try{return await Rh(e),!0}catch{return!1}}function Th(e,t){if(wr(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 kh(e){return e==="emulator"||e==="simulator"?e:null}var So={emulator:"android",simulator:"ios"};function Ch(e){return`${e.platform}\0${e.kind}\0${nn(e)}`}function Eh(e,t){let r=Xn(t.id);return e.find(n=>n.platform===t.platform&&n.kind===t.kind&&(Xn(n.id)===r||n.virtualName!==void 0&&Xn(n.virtualName)===r))}function Lu(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,P]=(0,J.useState)(null),[U,B]=(0,J.useState)(null),[F,H]=(0,J.useState)(null),[$,z]=(0,J.useState)(null),[fe,oe]=(0,J.useState)(null),ie=(0,J.useRef)(null),Y=(0,J.useRef)(null),pe=(0,J.useRef)(null),we=(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),Xt=(0,J.useRef)(null),Rt=(0,J.useRef)(()=>{}),ge=(0,J.useRef)({pathExists:Du,...e});ge.current={pathExists:Du,...e},(0,J.useEffect)(()=>{t==="ready"&&(He.current=null)},[t]);let ut=(0,J.useCallback)((I,L,K)=>{K().catch(q=>{I===me.current&&(P(null),B(q instanceof Error?q.message:String(q)),r(L))})},[]),$t=(0,J.useCallback)(async(I,L,K)=>{r("picking"),P("Looking for devices\u2026");let q=K?So[K]:void 0,te=(await zn(q)).filter(Ae=>!K||Ae.kind===K);if(I===me.current){if(p(te),P(null),te.length===0){B(K==="emulator"?"No Android emulator found on this machine.":K==="simulator"?"No iOS simulator found on this machine.":"No emulator or simulator found on this machine.");return}st.current=null,oe(null)}},[]),Oe=(0,J.useCallback)((I,L)=>{let K={target:I,savedDeviceLabel:I.displayName,savedKind:I.kind,...L?{appPath:L,savedAppLabel:u.current??L}:{},deviceMissing:!1,appMissing:!L};st.current=K,Xt.current=K,oe(K),P(null),r("confirm")},[]),Le=(0,J.useCallback)(async(I,L)=>{let K=on(So[L]);if(!K||!K.available())return!0;let q=await K.checks({appiumUrl:ge.current.getDefaults()?.appium_url});return I!==me.current?!1:(g(q),q.some(Ae=>Ae.required&&Ae.status==="fail"&&!Ae.fixedByBundle)?(P(null),r("doctor"),!1):!0)},[]),zt=(0,J.useCallback)(async(I,L)=>{let K=ge.current.getDefaults(),q=K?.default_target;if(i.current=L,o(L),P("Checking the saved setup\u2026"),!await Le(I,L))return;let te=So[L],Ae=(await zn(te)).filter(rr=>rr.kind===L);if(I!==me.current)return;p(Ae),P(null);let Je=q?Eh(Ae,q):void 0,de=ca(K?.default_app)?K?.default_app:void 0,St=de?wr(de)||await ge.current.pathExists(de):!1;if(I!==me.current)return;let bt=de&&wr(de)?await ge.current.appLabelFor?.(de)??de:de;if(I!==me.current)return;let ke={...Je?{target:Je}:{},savedDeviceLabel:q?.id??"(unknown device)",savedKind:L,...de&&St?{appPath:de}:{},...bt?{savedAppLabel:bt}:{},deviceMissing:!Je,appMissing:!de||!St};st.current=ke,Xt.current=ke,u.current=de&&bt!==de?bt:null,oe(ke),r("confirm")},[Le]),Me=(0,J.useCallback)(async(I,L)=>{r("checking");let K=Kn();if(I!==me.current)return;if(!K.supported){g([{id:"host.platform",label:"host",required:!0,status:"fail",detail:K.reason}]),r("doctor");return}g([]);let q=ge.current.getDefaults(),te=kh(q?.default_target?.kind);if(L==="confirm"&&te&&q?.default_target){st.current=null,oe(null),await zt(I,te);return}r("chooser")},[zt]),Kt=(0,J.useCallback)(I=>{let L=++me.current;i.current=I,o(I);let K=ge.current.getDefaults();ge.current.setDefaults({...K,tui_target:I}),B(null),ut(L,"chooser",async()=>{r("picking"),P(I==="simulator"?"Checking the iOS toolchain\u2026":"Checking the Android toolchain\u2026"),await Le(L,I)&&(P("Checking the mobile dependencies\u2026"),await Si().ensure(I,{automatic:!0,onProgress:q=>{L===me.current&&P(q)}}),L===me.current&&await $t(L,$e.current,I))})},[Le,$t,ut]),mr=(0,J.useCallback)((I="confirm",L={})=>{let K=++me.current;$e.current=I;let q=ge.current.getDefaults();He.current=q?.tui_target??"desktop";let te=(L.kind?Yt(L.kind):void 0)??Yt(q?.default_target?.kind??"")??"emulator";ge.current.setDefaults({...q,tui_target:te}),g([]),p([]),c([]),H(null),z(null),B(null),oe(null),st.current=null,ie.current=null,Y.current=null,I==="reinit"&&(pe.current=null),ut(K,"doctor",()=>Me(K,I))},[ut,Me]),kr=(0,J.useCallback)(()=>{let I=++me.current;B(null),ut(I,"doctor",()=>Me(I,$e.current))},[ut,Me]),Kr=(0,J.useCallback)(I=>{let L=++me.current;B(null),P("Installing managed mobile dependencies\u2026");let K=I??["emulator",...process.platform==="darwin"?["simulator"]:[]];ut(L,"doctor",async()=>{for(let q of K)await Si().ensure(q,{automatic:!1,approved:!0,onProgress:te=>{L===me.current&&P(te)}});L===me.current&&P(null),await Me(L,$e.current)})},[ut,Me]),Cr=(0,J.useCallback)(async I=>{let L=on(I.platform);if(!L){B(`No provider registered for platform "${I.platform}"`);return}let q=await(ge.current.deviceBusyOn??(()=>ea(Zs(),[],[],I.kind)))({udid:I.id,displayName:I.displayName});if(q!==null){let Je=typeof q=="number"?q:q.port,de=typeof q=="number"?void 0:q.device;B(Qs({udid:I.id,displayName:I.displayName},Je,de));return}ie.current=I,Y.current=L,z(I),B(null),c([]),wi(L,I);let te=s.current;te&&!Th(te,I.kind)&&(s.current=null);let Ae=ge.current.getDefaults();ge.current.setDefaults({...Ae,...Yt(I.kind)?{tui_target:Yt(I.kind)}:{},default_target:{platform:I.platform,kind:I.kind,id:nn(I)}}),s.current&&H($r(I,s.current,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),Oe(I,s.current)},[Oe]),gr=(0,J.useCallback)((I={})=>{let L=st.current;if(!L?.target){B("That device is no longer connected \u2014 pick another one.");return}let K=L.target,q=on(K.platform);if(!q){B(`No provider registered for platform "${K.platform}"`);return}if(ie.current=K,Y.current=q,z(K),B(null),c([]),wi(q,K),!(I.keepApp!==!1&&L.appPath)){r("appSource");return}let Ae=ge.current.getDefaults();s.current=L.appPath,H($r(K,L.appPath,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),r("ready")},[]),hr=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}r("apps")},[]),Tt=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}B(null),r("appList")},[]),br=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}B(null),r("appId")},[]),Er=(0,J.useCallback)(async I=>{let L=ie.current,K=ge.current.resolveAppId;if(!L)return{ok:!1,error:"Pick a device before choosing an app"};if(!K)return{ok:!1,error:"Log in to use an app id, or choose a local build."};let q=++me.current;B(null),P("Downloading the application \u2014 this can take a while, please wait\u2026");try{let te=await K(I,Je=>{q===me.current&&P(Je)});if(q!==me.current)return{ok:!1};let Ae=ge.current.getDefaults();return s.current=I,u.current=te.name,pe.current=null,P(null),H($r(L,I,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),ge.current.setDefaults({...Ae,...Yt(L.kind)?{tui_target:Yt(L.kind)}:{},default_target:{platform:L.platform,kind:L.kind,id:nn(L)},default_app:I}),Oe(L,I),{ok:!0}}catch(te){return q!==me.current?{ok:!1}:(P(null),{ok:!1,error:te instanceof Error?te.message:String(te)})}},[Oe]),vr=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}r("appSource")},[]),Q=(0,J.useCallback)(async(I,L={})=>{let K=L.persist!==!1,q=ie.current;if(!q)return B("Pick a device before choosing an app"),{ok:!1,error:"Pick a device before choosing an app"};if(I.kind!=="package"&&!await ge.current.pathExists(I.value))return{ok:!1,error:`${I.value} is not there.`};let te=ge.current.getDefaults();return s.current=I.value,u.current=null,pe.current=null,B(null),P(null),H($r(q,I.value,{noReset:te?.no_reset,appiumUrl:te?.appium_url})),Oe(q,I.value),K&&ge.current.setDefaults({...te,...Yt(q.kind)?{tui_target:Yt(q.kind)}:{},default_target:{platform:q.platform,kind:q.kind,id:nn(q)},default_app:I.value}),{ok:!0}},[Oe]),ce=(0,J.useCallback)(()=>{r("appSource")},[]),ae=(0,J.useCallback)(async I=>{let L=ie.current,K=Y.current;if(!L||!K)return{ok:!1,error:"No device is bound \u2014 run /mobile first"};try{let q=await ia(K,L,bt=>P(bt)),te=await K.ensureApp(q,I,bt=>P(bt));P(null);let Ae=Ch(L);pe.current={targetIdentity:Ae,packageId:te};let Je=we.current.get(Ae)??[];if(!Je.includes(te)){let bt=[...Je,te].sort();we.current.set(Ae,bt),c(bt)}let de=ge.current.getDefaults(),St=$r(q,te,{noReset:de?.no_reset,appiumUrl:de?.appium_url});return H(St),{ok:!0,device:St}}catch(q){return P(null),{ok:!1,error:q instanceof Error?q.message:String(q)}}},[]),ne=(0,J.useCallback)(async()=>{let I=ie.current;if(!I)return{ok:!1,reason:"No device is selected.",step:"device"};let L=So[I.kind];if(!(await zn(L)).some(te=>te.id===I.id||te.virtualName&&te.virtualName===I.virtualName))return{ok:!1,reason:`${I.displayName} is no longer connected.`,step:"device"};let q=s.current;return q?wr(q)?{ok:!0}:await ge.current.pathExists(q)?{ok:!0}:{ok:!1,reason:`${q} is no longer there.`,step:"app"}:{ok:!1,reason:"No app is selected.",step:"app"}},[]),le=(0,J.useCallback)(()=>{++me.current,Xt.current=null,r("idle"),g([]),p([]),c([]),P(null),B(null),H(null),z(null),oe(null),st.current=null,ie.current=null,Y.current=null,pe.current=null,s.current=null,u.current=null},[]),Re=(0,J.useCallback)(()=>{let I=Xt.current,L=()=>{if(!I)return!1;let K=I.target?on(I.target.platform):null;return ie.current=I.target??null,Y.current=K??null,s.current=I.appPath??null,st.current=I,i.current=I.savedKind,o(I.savedKind),z(I.target??null),oe(I),P(null),B(null),r("confirm"),!0};switch(t){case"picking":B(null),r("chooser");return;case"appSource":if(B(null),L())return;if(ie.current){Oe(ie.current,s.current);return}r("chooser");return;case"apps":case"appList":case"appId":B(null),P(null),r("appSource");return;case"chooser":if(L())return;Rt.current();return;default:Rt.current()}},[t,Oe]),dt=(0,J.useCallback)(()=>{let I=He.current;if(I){let L=ge.current.getDefaults();ge.current.setDefaults({...L,tui_target:I}),He.current=null}le()},[le]);return Rt.current=dt,{phase:t,kind:n,selectKind:Kt,checks:f,targets:w,apps:x,busyMessage:m,error:U,device:F,target:$,saved:fe,begin:mr,recheck:kr,install:Kr,cancel:dt,back:Re,selectTarget:Cr,confirmSaved:gr,requestApp:hr,requestAppSource:vr,requestCloudApps:Tt,requestAppId:br,selectApp:Q,selectAppId:Er,skipApp:ce,bindAppForRun:ae,validateBinding:ne,reset:le}}var gn=D(Ee(),1);function Bu(e){let{phase:t,device:r,requestApp:n,pendingRef:o,dispatch:i,notify:s,onSettle:u}=e,f=(0,gn.useRef)(null),g=(0,gn.useRef)(!1);(0,gn.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 Ih}from"fs/promises";async function $u(e){let t=e.statFile??Ih,r="";if(!wr(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 Ou(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 Mu,readdir as Ah,stat as _h}from"fs/promises";import{extname as ju,join as Vu,relative as Ph}from"path";var Dh=new Set(["node_modules",".git"]),Lh=new Set([".apk",".zip",".apks",".aab",".ipa",".app"]);function Fu(e){return e.state!=="incompatible"}var Nu=new Map;function Bh(e,t){return`${e}\0${t?.platform??""}\0${t?.androidApiLevel??""}\0${t?.androidAbis?.join(",")??""}`}function $h(e){let t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:void 0}function Oh(e){let t=new Set;return Ks(e,{filter:r=>{let n=/^lib\/([^/]+)\//.exec(r.name);return n?.[1]&&t.add(n[1]),!1}}),[...t].sort()}async function Uu(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 Ah(f,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||Dh.has(p.name)||p.name.startsWith("output-"))continue;let x=Vu(f,p.name),c=ju(p.name).toLowerCase();if(Lh.has(c)&&(p.isFile()||c===".app"&&p.isDirectory())){let P=Ph(e,x);(!i||P.toLowerCase().includes(i))&&s.push(P);continue}p.isDirectory()&&await u(x,g+1)}}return await u(e,0),s}async function qu(e,t){let r;try{r=(await _h(e)).mtimeMs}catch{}let n=Bh(e,t),o=r===void 0?void 0:Nu.get(n);if(o&&o.mtimeMs===r)return o.result;let i=u=>(r!==void 0&&Nu.set(n,{mtimeMs:r,result:u}),u),s=ju(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=$h(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=Oh(new Uint8Array(await Mu(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 Mh(Vu(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&&Nh(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 Nh(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 Mh(e){let r=(await Mu(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(Ee(),1);function Hu(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):an(o);return(u?u(p,{username:w.username,accessKey:w.access_key}):new ra(p,{username:w.username,accessKey:w.access_key})).list({type:f,...r})},[])}var hn=D(G(),1);function Gu({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,hn.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,children:[(0,hn.jsx)(a,{color:l.orange,children:f}),(0,hn.jsxs)(a,{color:l.dim,children:[` \u21B5 ${g}`,e==="mobile"?" p pick a device":"",` k keep ${t}`," esc cancel"]})]})}async function Wu(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=jh(await i.json());return s&&e.cache?.set(e.objective,s),s}catch{return null}finally{clearTimeout(o)}}function jh(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 Xu(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 zu=D(Ee(),1);var Fe=D(G(),1),Vh={pass:"\u2713",fail:"\u2717",info:"\u2139"},Fh={pass:l.green,fail:l.red,info:l.secondary};function Ku({checks:e,busyMessage:t,onRetry:r,onInstall:n,onCancel:o}){let[i,s]=(0,zu.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 Us}from"./chunk-3MSXQU2C.js";import{a as ua,b as da,c as fa,d as Ma,e as ja}from"./chunk-G4AFOZKU.js";import{a as Cc}from"./chunk-6BTZ2Q4P.js";import{a as lc,b as Ii,c as eo,d as uc,e as to,f as dc,h as fc,i as pc,j as mc,k as gc,l as hc,m as Ut,n as bc,o as vc,p as xc,q as ro,r as yc,s as Ai,t as Sc,u as wc,v as Tc}from"./chunk-T5LKD2OB.js";import{b as Rc,c as kc}from"./chunk-T3XDMR5B.js";import{A as rc,B as nc,C as oc,D as ic,G as Ft,J as ac,a as an,b as pa,c as ma,e as xa,f as ya,g as Sa,h as Pa,i as Da,j as La,k as Jn,l as Oa,n as ki,o as za,p as Ci,r as Ka,s as Ya,t as Ja,u as Qa,w as Za,x as ec,y as tc,z as Ei}from"./chunk-7PADFQ5S.js";import{c as Ua,d as qa,n as cc}from"./chunk-KWKUMBHS.js";import{a as Ec,b as _i}from"./chunk-RY6TFVAX.js";import{b as Fa,t as Ha}from"./chunk-DEZ7CXGM.js";import{c as Xa}from"./chunk-PUFJEU46.js";import{a as Zn}from"./chunk-BAL7E4OH.js";import{c as sc}from"./chunk-BVKDHHPK.js";import{a as _a}from"./chunk-K2QV7FGP.js";import{E as Ra,K as ka,L as Ti,M as Ca,N as Ea}from"./chunk-3AJ3QSF5.js";import{c as Ia,e as Aa}from"./chunk-TJZMYU2W.js";import{a as qs,b as mi,c as lr,d as Wn,e as Ba,f as $a}from"./chunk-PWYEOBXV.js";import{a as Na}from"./chunk-TCK3QMKY.js";import{c as Yn}from"./chunk-CGYSFLM2.js";import{a as Ws,b as bi,c as Xs,d as Ta,e as Va,g as Ga}from"./chunk-JJWQUQJ2.js";import{e as wa}from"./chunk-OWTEHU6B.js";import{a as Vr}from"./chunk-6DTWVLSJ.js";import{a as Qn,b as Wa,c as Ri}from"./chunk-NLECZCMZ.js";import{a as gi}from"./chunk-5Y2G4NC7.js";import{a as va}from"./chunk-JRQKUQWL.js";import{a as wi,b as ia,e as sa,f as aa,g as ca,h as la}from"./chunk-2K2BX23I.js";import{c as Qs,e as Zs,g as ea}from"./chunk-KX2GOJ4C.js";import{b as Mr}from"./chunk-K7UYWAZH.js";import{b as jr}from"./chunk-E3BXNQYE.js";import{h as ha}from"./chunk-FTZPWXF7.js";import{a as cn}from"./chunk-BPMSNGXQ.js";import{a as Ct,b as Bt,c as ga}from"./chunk-VE3SUJMA.js";import{a as ba}from"./chunk-FDWEL5HR.js";import{a as Xn,d as on,e as zn}from"./chunk-BG66IAO6.js";import{j as Si}from"./chunk-Z2T7E5HM.js";import{d as Ks}from"./chunk-MSGW4JDG.js";import{a as Kn,b as Or}from"./chunk-TZXXJWHA.js";import{i as ta,m as Vt,n as sn,o as ur,p as Nr}from"./chunk-56PAQAX5.js";import{a as na,b as wr,c as oa}from"./chunk-4D3DNCQY.js";import{h as ra}from"./chunk-TAOHYWEO.js";import{b as vi}from"./chunk-NYSMQ7UY.js";import{c as xi}from"./chunk-MJ56GUKS.js";import{a as jt}from"./chunk-ZIRMSWKS.js";import{a as nn,b as $r}from"./chunk-UOMRMCMI.js";import{a as Js}from"./chunk-ZFZ7YXEU.js";import{a as Ys}from"./chunk-PB3GADUD.js";import{a as Ge}from"./chunk-WLOGO44E.js";import{a as yi}from"./chunk-NLCCBXXV.js";import{a as zs}from"./chunk-RZ4F3BHX.js";import{a as Vs,d as Yt,e as rn}from"./chunk-EYOCNMUM.js";import{a as Gn}from"./chunk-4UMQDH52.js";import{a as hi}from"./chunk-NHOHQBIF.js";import{a as Jt,b as Hs}from"./chunk-PQUMOFT5.js";import{a as xt,b as mt,j as di,n as Fs,o as fi,x as l}from"./chunk-CCUGKBIH.js";import{b as Gs}from"./chunk-DFS4RMVP.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as b,b as a,i as Be,j as js,k as Br}from"./chunk-C44QQJR4.js";import{a as Ee}from"./chunk-6YGTRKDT.js";import{c as re,e as D}from"./chunk-UR6MHSHU.js";var Ur=re((xv,_c)=>{"use strict";var rp="2.0.0",np=Number.MAX_SAFE_INTEGER||9007199254740991,op=16,ip=250,sp=["major","premajor","minor","preminor","patch","prepatch","prerelease"];_c.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:op,MAX_SAFE_BUILD_LENGTH:ip,MAX_SAFE_INTEGER:np,RELEASE_TYPES:sp,SEMVER_SPEC_VERSION:rp,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var ln=re((yv,Pc)=>{"use strict";var ap=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};Pc.exports=ap});var qr=re((qt,Dc)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:Pi,MAX_SAFE_BUILD_LENGTH:cp,MAX_LENGTH:lp}=Ur(),up=ln();qt=Dc.exports={};var dp=qt.re=[],fp=qt.safeRe=[],W=qt.src=[],pp=qt.safeSrc=[],X=qt.t={},mp=0,Di="[a-zA-Z0-9-]",gp=[["\\s",1],["\\d",lp],[Di,cp]],hp=e=>{for(let[t,r]of gp)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},se=(e,t,r)=>{let n=hp(t),o=mp++;up(e,o,t),X[e]=o,W[o]=t,pp[o]=n,dp[o]=new RegExp(t,r?"g":void 0),fp[o]=new RegExp(n,r?"g":void 0)};se("NUMERICIDENTIFIER","0|[1-9]\\d*");se("NUMERICIDENTIFIERLOOSE","\\d+");se("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Di}*`);se("MAINVERSION",`(${W[X.NUMERICIDENTIFIER]})\\.(${W[X.NUMERICIDENTIFIER]})\\.(${W[X.NUMERICIDENTIFIER]})`);se("MAINVERSIONLOOSE",`(${W[X.NUMERICIDENTIFIERLOOSE]})\\.(${W[X.NUMERICIDENTIFIERLOOSE]})\\.(${W[X.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASEIDENTIFIER",`(?:${W[X.NONNUMERICIDENTIFIER]}|${W[X.NUMERICIDENTIFIER]})`);se("PRERELEASEIDENTIFIERLOOSE",`(?:${W[X.NONNUMERICIDENTIFIER]}|${W[X.NUMERICIDENTIFIERLOOSE]})`);se("PRERELEASE",`(?:-(${W[X.PRERELEASEIDENTIFIER]}(?:\\.${W[X.PRERELEASEIDENTIFIER]})*))`);se("PRERELEASELOOSE",`(?:-?(${W[X.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${W[X.PRERELEASEIDENTIFIERLOOSE]})*))`);se("BUILDIDENTIFIER",`${Di}+`);se("BUILD",`(?:\\+(${W[X.BUILDIDENTIFIER]}(?:\\.${W[X.BUILDIDENTIFIER]})*))`);se("FULLPLAIN",`v?${W[X.MAINVERSION]}${W[X.PRERELEASE]}?${W[X.BUILD]}?`);se("FULL",`^${W[X.FULLPLAIN]}$`);se("LOOSEPLAIN",`[v=\\s]*${W[X.MAINVERSIONLOOSE]}${W[X.PRERELEASELOOSE]}?${W[X.BUILD]}?`);se("LOOSE",`^${W[X.LOOSEPLAIN]}$`);se("GTLT","((?:<|>)?=?)");se("XRANGEIDENTIFIERLOOSE",`${W[X.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);se("XRANGEIDENTIFIER",`${W[X.NUMERICIDENTIFIER]}|x|X|\\*`);se("XRANGEPLAIN",`[v=\\s]*(${W[X.XRANGEIDENTIFIER]})(?:\\.(${W[X.XRANGEIDENTIFIER]})(?:\\.(${W[X.XRANGEIDENTIFIER]})(?:${W[X.PRERELEASE]})?${W[X.BUILD]}?)?)?`);se("XRANGEPLAINLOOSE",`[v=\\s]*(${W[X.XRANGEIDENTIFIERLOOSE]})(?:\\.(${W[X.XRANGEIDENTIFIERLOOSE]})(?:\\.(${W[X.XRANGEIDENTIFIERLOOSE]})(?:${W[X.PRERELEASELOOSE]})?${W[X.BUILD]}?)?)?`);se("XRANGE",`^${W[X.GTLT]}\\s*${W[X.XRANGEPLAIN]}$`);se("XRANGELOOSE",`^${W[X.GTLT]}\\s*${W[X.XRANGEPLAINLOOSE]}$`);se("COERCEPLAIN",`(^|[^\\d])(\\d{1,${Pi}})(?:\\.(\\d{1,${Pi}}))?(?:\\.(\\d{1,${Pi}}))?`);se("COERCE",`${W[X.COERCEPLAIN]}(?:$|[^\\d])`);se("COERCEFULL",W[X.COERCEPLAIN]+`(?:${W[X.PRERELEASE]})?(?:${W[X.BUILD]})?(?:$|[^\\d])`);se("COERCERTL",W[X.COERCE],!0);se("COERCERTLFULL",W[X.COERCEFULL],!0);se("LONETILDE","(?:~>?)");se("TILDETRIM",`(\\s*)${W[X.LONETILDE]}\\s+`,!0);qt.tildeTrimReplace="$1~";se("TILDE",`^${W[X.LONETILDE]}${W[X.XRANGEPLAIN]}$`);se("TILDELOOSE",`^${W[X.LONETILDE]}${W[X.XRANGEPLAINLOOSE]}$`);se("LONECARET","(?:\\^)");se("CARETTRIM",`(\\s*)${W[X.LONECARET]}\\s+`,!0);qt.caretTrimReplace="$1^";se("CARET",`^${W[X.LONECARET]}${W[X.XRANGEPLAIN]}$`);se("CARETLOOSE",`^${W[X.LONECARET]}${W[X.XRANGEPLAINLOOSE]}$`);se("COMPARATORLOOSE",`^${W[X.GTLT]}\\s*(${W[X.LOOSEPLAIN]})$|^$`);se("COMPARATOR",`^${W[X.GTLT]}\\s*(${W[X.FULLPLAIN]})$|^$`);se("COMPARATORTRIM",`(\\s*)${W[X.GTLT]}\\s*(${W[X.LOOSEPLAIN]}|${W[X.XRANGEPLAIN]})`,!0);qt.comparatorTrimReplace="$1$2$3";se("HYPHENRANGE",`^\\s*(${W[X.XRANGEPLAIN]})\\s+-\\s+(${W[X.XRANGEPLAIN]})\\s*$`);se("HYPHENRANGELOOSE",`^\\s*(${W[X.XRANGEPLAINLOOSE]})\\s+-\\s+(${W[X.XRANGEPLAINLOOSE]})\\s*$`);se("STAR","(<|>)?=?\\s*\\*");se("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");se("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var no=re((Sv,Lc)=>{"use strict";var bp=Object.freeze({loose:!0}),vp=Object.freeze({}),xp=e=>e?typeof e!="object"?bp:e:vp;Lc.exports=xp});var Li=re((wv,Oc)=>{"use strict";var Bc=/^[0-9]+$/,$c=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Bc.test(e),n=Bc.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},yp=(e,t)=>$c(t,e);Oc.exports={compareIdentifiers:$c,rcompareIdentifiers:yp}});var et=re((Tv,Mc)=>{"use strict";var oo=ln(),{MAX_LENGTH:Nc,MAX_SAFE_INTEGER:io}=Ur(),{safeRe:so,t:ao}=qr(),Sp=no(),{compareIdentifiers:Bi}=Li(),wp=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if(Bi(e[n],r[n])!==0)return!1;return!0},$i=class e{constructor(t,r){if(r=Sp(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>Nc)throw new TypeError(`version is longer than ${Nc} characters`);oo("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?so[ao.LOOSE]:so[ao.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>io||this.major<0)throw new TypeError("Invalid major version");if(this.minor>io||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>io||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<io)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(oo("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(oo("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 Bi(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(oo("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 Bi(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?so[ao.PRERELEASELOOSE]:so[ao.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]),wp(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}};Mc.exports=$i});var dr=re((Rv,Vc)=>{"use strict";var jc=et(),Tp=(e,t,r=!1)=>{if(e instanceof jc)return e;try{return new jc(e,t)}catch(n){if(!r)return null;throw n}};Vc.exports=Tp});var Uc=re((kv,Fc)=>{"use strict";var Rp=dr(),kp=(e,t)=>{let r=Rp(e,t);return r?r.version:null};Fc.exports=kp});var Hc=re((Cv,qc)=>{"use strict";var Cp=dr(),Ep=(e,t)=>{let r=Cp(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};qc.exports=Ep});var Xc=re((Ev,Wc)=>{"use strict";var Gc=et(),Ip=(e,t,r,n,o)=>{typeof r=="string"&&(o=n,n=r,r=void 0);try{return new Gc(e instanceof Gc?e.version:e,r).inc(t,n,o).version}catch{return null}};Wc.exports=Ip});var Yc=re((Iv,Kc)=>{"use strict";var zc=dr(),Ap=(e,t)=>{let r=zc(e,null,!0),n=zc(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"};Kc.exports=Ap});var Qc=re((Av,Jc)=>{"use strict";var _p=et(),Pp=(e,t)=>new _p(e,t).major;Jc.exports=Pp});var el=re((_v,Zc)=>{"use strict";var Dp=et(),Lp=(e,t)=>new Dp(e,t).minor;Zc.exports=Lp});var rl=re((Pv,tl)=>{"use strict";var Bp=et(),$p=(e,t)=>new Bp(e,t).patch;tl.exports=$p});var ol=re((Dv,nl)=>{"use strict";var Op=dr(),Np=(e,t)=>{let r=Op(e,t);return r&&r.prerelease.length?r.prerelease:null};nl.exports=Np});var Et=re((Lv,sl)=>{"use strict";var il=et(),Mp=(e,t,r)=>new il(e,r).compare(new il(t,r));sl.exports=Mp});var cl=re((Bv,al)=>{"use strict";var jp=Et(),Vp=(e,t,r)=>jp(t,e,r);al.exports=Vp});var ul=re(($v,ll)=>{"use strict";var Fp=Et(),Up=(e,t)=>Fp(e,t,!0);ll.exports=Up});var co=re((Ov,fl)=>{"use strict";var dl=et(),qp=(e,t,r)=>{let n=new dl(e,r),o=new dl(t,r);return n.compare(o)||n.compareBuild(o)};fl.exports=qp});var ml=re((Nv,pl)=>{"use strict";var Hp=co(),Gp=(e,t)=>e.sort((r,n)=>Hp(r,n,t));pl.exports=Gp});var hl=re((Mv,gl)=>{"use strict";var Wp=co(),Xp=(e,t)=>e.sort((r,n)=>Wp(n,r,t));gl.exports=Xp});var un=re((jv,bl)=>{"use strict";var zp=Et(),Kp=(e,t,r)=>zp(e,t,r)>0;bl.exports=Kp});var lo=re((Vv,vl)=>{"use strict";var Yp=Et(),Jp=(e,t,r)=>Yp(e,t,r)<0;vl.exports=Jp});var Oi=re((Fv,xl)=>{"use strict";var Qp=Et(),Zp=(e,t,r)=>Qp(e,t,r)===0;xl.exports=Zp});var Ni=re((Uv,yl)=>{"use strict";var em=Et(),tm=(e,t,r)=>em(e,t,r)!==0;yl.exports=tm});var uo=re((qv,Sl)=>{"use strict";var rm=Et(),nm=(e,t,r)=>rm(e,t,r)>=0;Sl.exports=nm});var fo=re((Hv,wl)=>{"use strict";var om=Et(),im=(e,t,r)=>om(e,t,r)<=0;wl.exports=im});var Mi=re((Gv,Tl)=>{"use strict";var sm=Oi(),am=Ni(),cm=un(),lm=uo(),um=lo(),dm=fo(),fm=(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 sm(e,r,n);case"!=":return am(e,r,n);case">":return cm(e,r,n);case">=":return lm(e,r,n);case"<":return um(e,r,n);case"<=":return dm(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Tl.exports=fm});var kl=re((Wv,Rl)=>{"use strict";var pm=et(),mm=dr(),{safeRe:po,t:mo}=qr(),gm=(e,t)=>{if(e instanceof pm)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?po[mo.COERCEFULL]:po[mo.COERCE]);else{let f=t.includePrerelease?po[mo.COERCERTLFULL]:po[mo.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 mm(`${n}.${o}.${i}${s}${u}`,t)};Rl.exports=gm});var El=re((Xv,Cl)=>{"use strict";var hm=dr(),bm=Ur(),vm=et(),xm=(e,t,r)=>{if(!bm.RELEASE_TYPES.includes(t))return null;let n=ym(e,r);return n&&Sm(n,t)},ym=(e,t)=>{let r=e instanceof vm?e.version:e;return hm(r,t)},Sm=(e,t)=>{if(wm(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()},wm=e=>e.startsWith("pre");Cl.exports=xm});var Al=re((zv,Il)=>{"use strict";var ji=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}};Il.exports=ji});var It=re((Kv,Ll)=>{"use strict";var Tm=/\s+/g,Vi=class e{constructor(t,r){if(r=km(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof Fi)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(Tm," "),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=>!Pl(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&&Bm(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(Lm,"");let n=((this.options.includePrerelease&&Pm)|(this.options.loose&&Dm))+":"+t,o=_l.get(n);if(o)return o;let i=this.options.loose,s=i?gt[tt.HYPHENRANGELOOSE]:gt[tt.HYPHENRANGE];t=t.replace(s,Gm(this.options.includePrerelease)),De("hyphen replace",t),t=t.replace(gt[tt.COMPARATORTRIM],Im),De("comparator trim",t),t=t.replace(gt[tt.TILDETRIM],Am),De("tilde trim",t),t=t.replace(gt[tt.CARETTRIM],_m),De("caret trim",t);let u=t.split(" ").map(p=>$m(p,this.options)).join(" ").split(/\s+/).map(p=>Hm(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 Fi(p,this.options));for(let p of g){if(Pl(p))return[p];f.set(p.value,p)}f.size>1&&f.has("")&&f.delete("");let w=[...f.values()];return _l.set(n,w),w}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Dl(n,r)&&t.set.some(o=>Dl(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 Cm(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Wm(this.set[r],t,this.options))return!0;return!1}};Ll.exports=Vi;var Rm=Al(),_l=new Rm,km=no(),Fi=dn(),De=ln(),Cm=et(),{safeRe:gt,src:Em,t:tt,comparatorTrimReplace:Im,tildeTrimReplace:Am,caretTrimReplace:_m}=qr(),{FLAG_INCLUDE_PRERELEASE:Pm,FLAG_LOOSE:Dm}=Ur(),Lm=new RegExp(Em[tt.BUILD],"g"),Pl=e=>e.value==="<0.0.0-0",Bm=e=>e.value==="",Dl=(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},$m=(e,t)=>(e=e.replace(gt[tt.BUILD],""),De("comp",e,t),e=jm(e,t),De("caret",e),e=Nm(e,t),De("tildes",e),e=Fm(e,t),De("xrange",e),e=qm(e,t),De("stars",e),e),qe=e=>!e||e.toLowerCase()==="x"||e==="*",Om=(e,t,r)=>qe(e)&&!qe(t)||qe(t)&&r&&!qe(r),Nm=(e,t)=>e.trim().split(/\s+/).map(r=>Mm(r,t)).join(" "),Mm=(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})},jm=(e,t)=>e.trim().split(/\s+/).map(r=>Vm(r,t)).join(" "),Vm=(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})},Fm=(e,t)=>(De("replaceXRanges",e,t),e.split(/\s+/).map(r=>Um(r,t)).join(" ")),Um=(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),Om(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})},qm=(e,t)=>(De("replaceStars",e,t),e.trim().replace(gt[tt.STAR],"")),Hm=(e,t)=>(De("replaceGTE0",e,t),e.trim().replace(gt[t.includePrerelease?tt.GTE0PRE:tt.GTE0],"")),Gm=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()),Wm=(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!==Fi.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 dn=re((Yv,jl)=>{"use strict";var fn=Symbol("SemVer ANY"),Hi=class e{static get ANY(){return fn}constructor(t,r){if(r=Bl(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),qi("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===fn?this.value="":this.value=this.operator+this.semver.version,qi("comp",this)}parse(t){let r=this.options.loose?$l[Ol.COMPARATORLOOSE]:$l[Ol.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 Nl(n[2],this.options.loose):this.semver=fn}toString(){return this.value}test(t){if(qi("Comparator.test",t,this.options.loose),this.semver===fn||t===fn)return!0;if(typeof t=="string")try{t=new Nl(t,this.options)}catch{return!1}return Ui(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 Ml(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new Ml(this.value,r).test(t.semver):(r=Bl(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("=")||Ui(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||Ui(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};jl.exports=Hi;var Bl=no(),{safeRe:$l,t:Ol}=qr(),Ui=Mi(),qi=ln(),Nl=et(),Ml=It()});var pn=re((Jv,Vl)=>{"use strict";var Xm=It(),zm=(e,t,r)=>{try{t=new Xm(t,r)}catch{return!1}return t.test(e)};Vl.exports=zm});var Ul=re((Qv,Fl)=>{"use strict";var Km=It(),Ym=(e,t)=>new Km(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));Fl.exports=Ym});var Hl=re((Zv,ql)=>{"use strict";var Jm=et(),Qm=It(),Zm=(e,t,r)=>{let n=null,o=null,i=null;try{i=new Qm(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===-1)&&(n=s,o=new Jm(n,r))}),n};ql.exports=Zm});var Wl=re((ex,Gl)=>{"use strict";var eg=et(),tg=It(),rg=(e,t,r)=>{let n=null,o=null,i=null;try{i=new tg(t,r)}catch{return null}return e.forEach(s=>{i.test(s)&&(!n||o.compare(s)===1)&&(n=s,o=new eg(n,r))}),n};Gl.exports=rg});var Kl=re((tx,zl)=>{"use strict";var Gi=et(),ng=It(),Xl=un(),og=(e,t)=>{e=new ng(e,t);let r=new Gi("0.0.0");if(e.test(r)||(r=new Gi("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 Gi(s.semver.version);switch(s.operator){case">":u.prerelease.length===0?u.patch++:u.prerelease.push(0),u.raw=u.format();case"":case">=":(!i||Xl(u,i))&&(i=u);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),i&&(!r||Xl(r,i))&&(r=i)}return r&&e.test(r)?r:null};zl.exports=og});var Jl=re((rx,Yl)=>{"use strict";var ig=It(),sg=(e,t)=>{try{return new ig(e,t).range||"*"}catch{return null}};Yl.exports=sg});var go=re((nx,tu)=>{"use strict";var ag=et(),eu=dn(),{ANY:cg}=eu,lg=It(),ug=pn(),Ql=un(),Zl=lo(),dg=fo(),fg=uo(),pg=(e,t,r,n)=>{e=new ag(e,n),t=new lg(t,n);let o,i,s,u,f;switch(r){case">":o=Ql,i=dg,s=Zl,u=">",f=">=";break;case"<":o=Zl,i=fg,s=Ql,u="<",f="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ug(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===cg&&(c=new eu(">=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};tu.exports=pg});var nu=re((ox,ru)=>{"use strict";var mg=go(),gg=(e,t,r)=>mg(e,t,">",r);ru.exports=gg});var iu=re((ix,ou)=>{"use strict";var hg=go(),bg=(e,t,r)=>hg(e,t,"<",r);ou.exports=bg});var cu=re((sx,au)=>{"use strict";var su=It(),vg=(e,t,r)=>(e=new su(e,r),t=new su(t,r),e.intersects(t,r));au.exports=vg});var uu=re((ax,lu)=>{"use strict";var xg=pn(),yg=Et();lu.exports=(e,t,r)=>{let n=[],o=null,i=null,s=e.sort((w,p)=>yg(w,p,r));for(let w of s)xg(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 hu=re((cx,gu)=>{"use strict";var du=It(),zi=dn(),{ANY:Wi}=zi,Xi=pn(),Ki=Et(),Sg=(e,t,r={})=>{if(e===t)return!0;e=new du(e,r),t=new du(t,r);let n=!1;e:for(let o of e.set){for(let i of t.set){let s=Tg(o,i,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},wg=[new zi(">=0.0.0-0")],fu=[new zi(">=0.0.0")],Tg=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===Wi){if(t.length===1&&t[0].semver===Wi)return!0;r.includePrerelease?e=wg:e=fu}if(t.length===1&&t[0].semver===Wi){if(r.includePrerelease)return!0;t=fu}let n=new Set,o,i;for(let c of e)c.operator===">"||c.operator===">="?o=pu(o,c,r):c.operator==="<"||c.operator==="<="?i=mu(i,c,r):n.add(c.semver);if(n.size>1)return null;let s;if(o&&i){if(s=Ki(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&&!Xi(c,String(o),r)||i&&!Xi(c,String(i),r))return null;for(let m of t)if(!Xi(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=pu(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=mu(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)},pu=(e,t,r)=>{if(!e)return t;let n=Ki(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},mu=(e,t,r)=>{if(!e)return t;let n=Ki(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};gu.exports=Sg});var Ji=re((lx,xu)=>{"use strict";var Yi=qr(),bu=Ur(),Rg=et(),vu=Li(),kg=dr(),Cg=Uc(),Eg=Hc(),Ig=Xc(),Ag=Yc(),_g=Qc(),Pg=el(),Dg=rl(),Lg=ol(),Bg=Et(),$g=cl(),Og=ul(),Ng=co(),Mg=ml(),jg=hl(),Vg=un(),Fg=lo(),Ug=Oi(),qg=Ni(),Hg=uo(),Gg=fo(),Wg=Mi(),Xg=kl(),zg=El(),Kg=dn(),Yg=It(),Jg=pn(),Qg=Ul(),Zg=Hl(),eh=Wl(),th=Kl(),rh=Jl(),nh=go(),oh=nu(),ih=iu(),sh=cu(),ah=uu(),ch=hu();xu.exports={parse:kg,valid:Cg,clean:Eg,inc:Ig,diff:Ag,major:_g,minor:Pg,patch:Dg,prerelease:Lg,compare:Bg,rcompare:$g,compareLoose:Og,compareBuild:Ng,sort:Mg,rsort:jg,gt:Vg,lt:Fg,eq:Ug,neq:qg,gte:Hg,lte:Gg,cmp:Wg,coerce:Xg,truncate:zg,Comparator:Kg,Range:Yg,satisfies:Jg,toComparators:Qg,maxSatisfying:Zg,minSatisfying:eh,minVersion:th,validRange:rh,outside:nh,gtr:oh,ltr:ih,intersects:sh,simplifyRange:ah,subset:ch,SemVer:Rg,re:Yi.re,src:Yi.src,tokens:Yi.t,SEMVER_SPEC_VERSION:bu.SEMVER_SPEC_VERSION,RELEASE_TYPES:bu.RELEASE_TYPES,compareIdentifiers:vu.compareIdentifiers,rcompareIdentifiers:vu.rcompareIdentifiers}});var R=D(Ee(),1);var Ic=D(Ee(),1);var Fr=D(G(),1);function Ac({path:e}){return e.length===0?null:(0,Fr.jsx)(b,{children:e.map((t,r)=>(0,Fr.jsxs)(Ic.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 yu=D(Ji(),1),lh=1,uh=new Set(["discover","workflow","nudge","recovery"]),dh=new Set(["run","generate","both"]),fh=new Set(["banner","footer"]),ho=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 ph(e){if(!ho(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 Su(e,t){return e.text[t]??e.text.default??(e.target!=="both"?e.text[e.target]:void 0)}function mh(e,t){return t==="both"?!!e.default||!!e.run&&!!e.generate:t==="run"?!!e.run||!!e.default:!!e.generate||!!e.default}function gh(e,t){if(!ho(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 hh(e){if(!ho(e))return null;let t=Hr(e.id);if(!t)return null;let r=dh.has(e.target)?e.target:void 0;if(e.target!==void 0&&r===void 0)return null;let n=r??"both",o=ph(e.text);if(!mh(o,n))return null;let i=uh.has(e.category)?e.category:"nudge",s=fh.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)&&yu.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,P=gh(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:P}}function bo(e){if(!ho(e)||!Array.isArray(e.hints)||typeof e.enabled!="boolean")return{catalog:null,dropped:0};let t=Gr(e.schemaVersion)??0;if(Math.floor(t)>lh)return{catalog:null,dropped:0};let r=0,n=new Set,o=[];for(let i of e.hints){let s=hh(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 Ru=D(G(),1),wu="tip: ";function Tu({hint:e,mode:t,termWidth:r}){if(e.target!=="both"&&e.target!==t)return null;let n=Su(e,t);if(!n)return null;let o=Math.max(8,r-wu.length-2),i=n.length>o?n.slice(0,o-1)+"\u2026":n;return(0,Ru.jsx)(a,{color:l.dim,children:wu+i})}var ee=D(G(),1);function vo(e,t){return e.length<=t?e:`${e.slice(0,Math.max(1,t-1))}\u2026`}function bh(e,t){if(e.kind==="desktop")return"Desktop";let r=rn(e.kind);return e.deviceName?e.appPackage&&t>=72?`${r} \xB7 ${vo(e.deviceName,30)} \xB7 ${vo(e.appPackage,36)}`:t>=48?`${r} \xB7 ${vo(e.deviceName,40)}`:`${r} \xB7 ${vo(e.deviceName,Math.max(8,t-12))}`:t<36?r:`${r} \xB7 setting up`}function ku({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}=Br(),m=c?.columns??80,P=u??"run",U=t==="stage",B=t==="prod",F=P==="generate"?l.generateAccent:l.orange,H=g==="completed"?l.green:g==="failed"?l.red:l.generateAccent,$=bh(p,m);return(0,ee.jsxs)(b,{flexDirection:"column",children:[(0,ee.jsx)(a,{color:l.muted,children:"\u2500".repeat(m)}),s&&s.length>0&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Ac,{path:s})}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:"Mode:"}),(0,ee.jsx)(a,{color:F,bold:!0,children:P==="generate"?"Generate":"Run"}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),P==="generate"?(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.dim,children:"req"}),(0,ee.jsx)(a,{color:l.dim,children:f??"\u2014"}),g&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"\xB7"}),(0,ee.jsx)(a,{color:H,children:g})]})]}):(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.dim,children:"Session:"}),(0,ee.jsx)(a,{color:l.dim,children:o})]}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsx)(a,{color:r?l.green:l.red,children:"\u25CF"}),(0,ee.jsx)(a,{color:l.dim,children:r?"authenticated":"not logged in"}),!B&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"|"}),U?(0,ee.jsx)(a,{color:l.orange,bold:!0,children:"\u26A0 stage"}):(0,ee.jsx)(a,{color:l.green,children:t})]})]}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:e??"no profile"}),P==="run"&&(0,ee.jsxs)(ee.Fragment,{children:[(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsxs)(a,{color:l.dim,children:["runs: ",n]})]}),(0,ee.jsx)(a,{color:l.muted,children:"|"}),(0,ee.jsx)(a,{dimColor:!0,children:Us()})]}),(0,ee.jsxs)(b,{paddingX:1,gap:1,children:[(0,ee.jsx)(a,{color:l.dim,children:"Config:"}),(0,ee.jsx)(a,{color:p.kind==="desktop"?l.dim:l.orange,children:$}),x&&(0,ee.jsx)(a,{color:l.dim,children:"\xB7 locked (/new to change)"})]}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(a,{dimColor:!0,children:i==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})}),w&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Tu,{hint:w,mode:P,termWidth:m})})]})}var Rr=D(Ee(),1);var mn=[[[" "],[" "],[" "],[" "],["\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(G(),1),xo="#af87d7",Qi="#875faf",Cu="#5b3a7a",vh="#ff9500",xh="#ea580c";var Zi="#666666",yh="#555555",Tr=[[xo,"\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"],[xo,"\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"],[xo,"\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"],[xo,"\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"],[Qi,"\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"],[Qi,"\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"],[Qi,"\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"]],es=Tr.map(([,e])=>[...e]);function Eu({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=es[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&&es[o-1][u-1]==="\u2588";return f||g?(0,ve.jsx)(a,{color:Cu,children:"\u2592"},u):(0,ve.jsx)(a,{children:" "},u)})},o)}),t>=Tr.length&&(0,ve.jsxs)(a,{children:[" ",es[Tr.length-1].map((r,n)=>r==="\u2588"?(0,ve.jsx)(a,{color:Cu,children:"\u2580"},n):(0,ve.jsx)(a,{children:" "},n))]})]})}function Sh({visibleRows:e=mn.length}){let t=Math.min(e,mn.length);return(0,ve.jsx)(b,{flexDirection:"column",children:mn.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 yo({size:e="compact",helmetVisibleRows:t=mn.length,textVisibleRows:r=Tr.length,showMeta:n=!1,user:o=null,authenticated:i=!1,version:s=""}){return e==="compact"?(0,ve.jsx)(Eu,{}):(0,ve.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,ve.jsx)(a,{color:vh,italic:!0,children:" Welcome to"}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsxs)(b,{gap:2,children:[(0,ve.jsx)(Sh,{visibleRows:t}),(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(Eu,{visibleRows:r}),(0,ve.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,ve.jsx)(a,{color:xh,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:Zi,children:" The validation layer for AI coding agents. "}),(0,ve.jsx)(a,{color:yh,children:`v${s}`})]}),(0,ve.jsx)(a,{children:" "}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:Zi,children:" Kane-CLI: natural-language web & mobile-app automation, plus"})}),(0,ve.jsx)(a,{children:(0,ve.jsx)(a,{color:Zi,children:" requirements-to-coverage assurance \u2014 from your CLI or IDE."})}),(0,ve.jsx)(a,{children:" "})]})]})}var ns=D(G(),1),ts=8,rs=7;function Iu({onComplete:e}){let[t,r]=(0,Rr.useState)(0),[n,o]=(0,Rr.useState)(0),[i,s]=(0,Rr.useState)(!1),[u]=(0,Rr.useState)(()=>{let f=new Gn,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(ts,f+1))},t<ts?60:null),gi(()=>{o(f=>Math.min(rs,f+1))},n<rs?80:null),(0,Rr.useEffect)(()=>{t>=ts&&n>=rs&&!i&&(s(!0),e?.())},[t,n,i,e]),(0,ns.jsx)(b,{flexDirection:"column",children:(0,ns.jsx)(yo,{size:"full",helmetVisibleRows:t,textVisibleRows:n,showMeta:i,user:u.user,authenticated:u.authenticated,version:xt})})}var Qt=D(G(),1);function Au({entry:e}){return e.type==="input"?(0,Qt.jsxs)(b,{children:[(0,Qt.jsx)(a,{color:l.orange,children:"\u276F "}),(0,Qt.jsx)(a,{children:e.text})]}):e.type==="error"?(0,Qt.jsx)(b,{marginLeft:2,children:(0,Qt.jsx)(a,{color:l.red,children:e.text})}):(0,Qt.jsx)(b,{marginLeft:2,children:(0,Qt.jsx)(a,{color:e.type==="info"?l.dim:void 0,children:e.text})})}var os=D(G(),1);function _u({objective:e}){let{stdout:t}=Br(),r=Math.max(24,(t?.columns??80)-4);return(0,os.jsx)(Jt,{title:"run",width:r,children:(0,os.jsx)(Hs,{label:"objective",value:e})})}var Ht=D(Ee(),1);var ht=D(G(),1);function wh(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 Pu({data:e,width:t=60}){let r=wh(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(G(),1);function is(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,Ht.useState)(()=>{let F=r??[],H=is(e,F),$=0;if(F.length>0){let z=H.findIndex(fe=>fe.item.id===F[0]);z>=0&&z+1<H.length&&($=z+1)}return{expandedPath:F,selectedIndex:$,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),c=is(e,p.expandedPath),m=c[p.selectedIndex]?.item,P=(0,Ht.useRef)(null),U=(0,Ht.useCallback)(F=>{x(H=>({...H,feedback:F})),P.current&&clearTimeout(P.current),P.current=setTimeout(()=>{x(H=>({...H,feedback:null})),P.current=null},4e3)},[]);(0,Ht.useEffect)(()=>()=>{P.current&&clearTimeout(P.current)},[]),(0,Ht.useEffect)(()=>{w?.(p.activeView)},[p.activeView,w]);let B=(0,Ht.useCallback)(()=>{x(F=>({...F,activeView:null,infoData:null}))},[]);return Be((F,H)=>{if(p.activeView==="infoView"){H.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(H.escape){x($=>({...$,isEditing:!1,inputValue:""}));return}if(H.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(H.backspace||H.delete){x($=>({...$,inputValue:$.inputValue.slice(0,-1)}));return}F&&!H.ctrl&&!H.meta&&x($=>({...$,inputValue:$.inputValue+F}));return}if(p.isSelecting&&m?.options){let $=m.options;if(H.escape){x(z=>({...z,isSelecting:!1}));return}if(H.upArrow){x(z=>({...z,inputValue:String(Math.max(0,Number(z.inputValue||"0")-1))}));return}if(H.downArrow){x(z=>({...z,inputValue:String(Math.min($.length-1,Number(z.inputValue||"0")+1))}));return}if(H.return){let z=Number(p.inputValue||"0"),fe=$[z];if(fe&&m.onValue){let oe=m.currentValue;m.onValue(fe.value),U(oe?`${m.label}: ${oe} \u2192 ${fe.label}`:`${m.label}: ${fe.label}`)}x(oe=>({...oe,isSelecting:!1,inputValue:""}));return}return}if(H.upArrow){x($=>({...$,selectedIndex:Math.max(0,$.selectedIndex-1)}));return}if(H.downArrow){x($=>({...$,selectedIndex:Math.min(c.length-1,$.selectedIndex+1)}));return}if(H.escape){if(p.expandedPath.length===0){n?.();return}x($=>{let z=$.expandedPath.slice(0,-1),fe=is(e,z),oe=$.expandedPath[$.expandedPath.length-1],ie=fe.findIndex(Y=>Y.item.id===oe);return{...$,expandedPath:z,selectedIndex:ie>=0?ie:0}});return}if(H.return&&m){if(m.id==="run-start"){t();return}if(m.type==="submenu"){let $=c[p.selectedIndex]?.depth??0;x(z=>({...z,expandedPath:[...z.expandedPath.slice(0,$),m.id],selectedIndex:z.selectedIndex+1}));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)(Pu,{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:H},$)=>{let z=$===p.selectedIndex,fe=" ".repeat(H),oe=z?"\u276F ":" ",ie=F.type==="submenu"?p.expandedPath.includes(F.id)?"\u25BC ":"\u25B6 ":F.type==="select"&&F.options?z&&p.isSelecting?"\u25BC ":"\u25B6 ":" ",Y=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:[fe,oe,ie,F.label]}),F.options.map((we,me)=>(0,rt.jsxs)(a,{color:me===pe?l.orange:void 0,children:[fe," ",me===pe?"\u276F ":" ",we.label]},we.value))]},F.id)}return z&&p.isEditing?(0,rt.jsxs)(a,{color:l.orange,children:[fe,oe,ie,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&&H>0,children:[fe,oe,ie,F.label,(0,rt.jsx)(a,{dimColor:!0,children:Y})]},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)(jt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var J=D(Ee(),1);import{access as Th}from"fs/promises";async function Du(e){try{return await Th(e),!0}catch{return!1}}function Rh(e,t){if(wr(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 kh(e){return e==="emulator"||e==="simulator"?e:null}var So={emulator:"android",simulator:"ios"};function Ch(e){return`${e.platform}\0${e.kind}\0${nn(e)}`}function Eh(e,t){let r=Xn(t.id);return e.find(n=>n.platform===t.platform&&n.kind===t.kind&&(Xn(n.id)===r||n.virtualName!==void 0&&Xn(n.virtualName)===r))}function Lu(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,P]=(0,J.useState)(null),[U,B]=(0,J.useState)(null),[F,H]=(0,J.useState)(null),[$,z]=(0,J.useState)(null),[fe,oe]=(0,J.useState)(null),ie=(0,J.useRef)(null),Y=(0,J.useRef)(null),pe=(0,J.useRef)(null),we=(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),Xt=(0,J.useRef)(null),Tt=(0,J.useRef)(()=>{}),ge=(0,J.useRef)({pathExists:Du,...e});ge.current={pathExists:Du,...e},(0,J.useEffect)(()=>{t==="ready"&&(He.current=null)},[t]);let ut=(0,J.useCallback)((I,L,K)=>{K().catch(q=>{I===me.current&&(P(null),B(q instanceof Error?q.message:String(q)),r(L))})},[]),$t=(0,J.useCallback)(async(I,L,K)=>{r("picking"),P("Looking for devices\u2026");let q=K?So[K]:void 0,te=(await zn(q)).filter(Ae=>!K||Ae.kind===K);if(I===me.current){if(p(te),P(null),te.length===0){B(K==="emulator"?"No Android emulator found on this machine.":K==="simulator"?"No iOS simulator found on this machine.":"No emulator or simulator found on this machine.");return}st.current=null,oe(null)}},[]),Oe=(0,J.useCallback)((I,L)=>{let K={target:I,savedDeviceLabel:I.displayName,savedKind:I.kind,...L?{appPath:L,savedAppLabel:u.current??L}:{},deviceMissing:!1,appMissing:!L};st.current=K,Xt.current=K,oe(K),P(null),r("confirm")},[]),Le=(0,J.useCallback)(async(I,L)=>{let K=on(So[L]);if(!K||!K.available())return!0;let q=await K.checks({appiumUrl:ge.current.getDefaults()?.appium_url});return I!==me.current?!1:(g(q),q.some(Ae=>Ae.required&&Ae.status==="fail"&&!Ae.fixedByBundle)?(P(null),r("doctor"),!1):!0)},[]),zt=(0,J.useCallback)(async(I,L)=>{let K=ge.current.getDefaults(),q=K?.default_target;if(i.current=L,o(L),P("Checking the saved setup\u2026"),!await Le(I,L))return;let te=So[L],Ae=(await zn(te)).filter(rr=>rr.kind===L);if(I!==me.current)return;p(Ae),P(null);let Je=q?Eh(Ae,q):void 0,de=ca(K?.default_app)?K?.default_app:void 0,St=de?wr(de)||await ge.current.pathExists(de):!1;if(I!==me.current)return;let bt=de&&wr(de)?await ge.current.appLabelFor?.(de)??de:de;if(I!==me.current)return;let ke={...Je?{target:Je}:{},savedDeviceLabel:q?.id??"(unknown device)",savedKind:L,...de&&St?{appPath:de}:{},...bt?{savedAppLabel:bt}:{},deviceMissing:!Je,appMissing:!de||!St};st.current=ke,Xt.current=ke,u.current=de&&bt!==de?bt:null,oe(ke),r("confirm")},[Le]),Me=(0,J.useCallback)(async(I,L)=>{r("checking");let K=Kn();if(I!==me.current)return;if(!K.supported){g([{id:"host.platform",label:"host",required:!0,status:"fail",detail:K.reason}]),r("doctor");return}g([]);let q=ge.current.getDefaults(),te=kh(q?.default_target?.kind);if(L==="confirm"&&te&&q?.default_target){st.current=null,oe(null),await zt(I,te);return}r("chooser")},[zt]),Kt=(0,J.useCallback)(I=>{let L=++me.current;i.current=I,o(I);let K=ge.current.getDefaults();ge.current.setDefaults({...K,tui_target:I}),B(null),ut(L,"chooser",async()=>{r("picking"),P(I==="simulator"?"Checking the iOS toolchain\u2026":"Checking the Android toolchain\u2026"),await Le(L,I)&&(P("Checking the mobile dependencies\u2026"),await Si().ensure(I,{automatic:!0,onProgress:q=>{L===me.current&&P(q)}}),L===me.current&&await $t(L,$e.current,I))})},[Le,$t,ut]),mr=(0,J.useCallback)((I="confirm",L={})=>{let K=++me.current;$e.current=I;let q=ge.current.getDefaults();He.current=q?.tui_target??"desktop";let te=(L.kind?Yt(L.kind):void 0)??Yt(q?.default_target?.kind??"")??"emulator";ge.current.setDefaults({...q,tui_target:te}),g([]),p([]),c([]),H(null),z(null),B(null),oe(null),st.current=null,ie.current=null,Y.current=null,I==="reinit"&&(pe.current=null),ut(K,"doctor",()=>Me(K,I))},[ut,Me]),kr=(0,J.useCallback)(()=>{let I=++me.current;B(null),ut(I,"doctor",()=>Me(I,$e.current))},[ut,Me]),Kr=(0,J.useCallback)(I=>{let L=++me.current;B(null),P("Installing managed mobile dependencies\u2026");let K=I??["emulator",...process.platform==="darwin"?["simulator"]:[]];ut(L,"doctor",async()=>{for(let q of K)await Si().ensure(q,{automatic:!1,approved:!0,onProgress:te=>{L===me.current&&P(te)}});L===me.current&&P(null),await Me(L,$e.current)})},[ut,Me]),Cr=(0,J.useCallback)(async I=>{let L=on(I.platform);if(!L){B(`No provider registered for platform "${I.platform}"`);return}let q=await(ge.current.deviceBusyOn??(()=>ea(Zs(),[],[],I.kind)))({udid:I.id,displayName:I.displayName});if(q!==null){let Je=typeof q=="number"?q:q.port,de=typeof q=="number"?void 0:q.device;B(Qs({udid:I.id,displayName:I.displayName},Je,de));return}ie.current=I,Y.current=L,z(I),B(null),c([]),wi(L,I);let te=s.current;te&&!Rh(te,I.kind)&&(s.current=null);let Ae=ge.current.getDefaults();ge.current.setDefaults({...Ae,...Yt(I.kind)?{tui_target:Yt(I.kind)}:{},default_target:{platform:I.platform,kind:I.kind,id:nn(I)}}),s.current&&H($r(I,s.current,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),Oe(I,s.current)},[Oe]),gr=(0,J.useCallback)((I={})=>{let L=st.current;if(!L?.target){B("That device is no longer connected \u2014 pick another one.");return}let K=L.target,q=on(K.platform);if(!q){B(`No provider registered for platform "${K.platform}"`);return}if(ie.current=K,Y.current=q,z(K),B(null),c([]),wi(q,K),!(I.keepApp!==!1&&L.appPath)){r("appSource");return}let Ae=ge.current.getDefaults();s.current=L.appPath,H($r(K,L.appPath,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),r("ready")},[]),hr=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}r("apps")},[]),Rt=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}B(null),r("appList")},[]),br=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}B(null),r("appId")},[]),Er=(0,J.useCallback)(async I=>{let L=ie.current,K=ge.current.resolveAppId;if(!L)return{ok:!1,error:"Pick a device before choosing an app"};if(!K)return{ok:!1,error:"Log in to use an app id, or choose a local build."};let q=++me.current;B(null),P("Downloading the application \u2014 this can take a while, please wait\u2026");try{let te=await K(I,Je=>{q===me.current&&P(Je)});if(q!==me.current)return{ok:!1};let Ae=ge.current.getDefaults();return s.current=I,u.current=te.name,pe.current=null,P(null),H($r(L,I,{noReset:Ae?.no_reset,appiumUrl:Ae?.appium_url})),ge.current.setDefaults({...Ae,...Yt(L.kind)?{tui_target:Yt(L.kind)}:{},default_target:{platform:L.platform,kind:L.kind,id:nn(L)},default_app:I}),Oe(L,I),{ok:!0}}catch(te){return q!==me.current?{ok:!1}:(P(null),{ok:!1,error:te instanceof Error?te.message:String(te)})}},[Oe]),vr=(0,J.useCallback)(()=>{if(!ie.current||!Y.current){B("Pick a device before choosing an app");return}r("appSource")},[]),Q=(0,J.useCallback)(async(I,L={})=>{let K=L.persist!==!1,q=ie.current;if(!q)return B("Pick a device before choosing an app"),{ok:!1,error:"Pick a device before choosing an app"};if(I.kind!=="package"&&!await ge.current.pathExists(I.value))return{ok:!1,error:`${I.value} is not there.`};let te=ge.current.getDefaults();return s.current=I.value,u.current=null,pe.current=null,B(null),P(null),H($r(q,I.value,{noReset:te?.no_reset,appiumUrl:te?.appium_url})),Oe(q,I.value),K&&ge.current.setDefaults({...te,...Yt(q.kind)?{tui_target:Yt(q.kind)}:{},default_target:{platform:q.platform,kind:q.kind,id:nn(q)},default_app:I.value}),{ok:!0}},[Oe]),ce=(0,J.useCallback)(()=>{r("appSource")},[]),ae=(0,J.useCallback)(async I=>{let L=ie.current,K=Y.current;if(!L||!K)return{ok:!1,error:"No device is bound \u2014 run /mobile first"};try{let q=await ia(K,L,bt=>P(bt)),te=await K.ensureApp(q,I,bt=>P(bt));P(null);let Ae=Ch(L);pe.current={targetIdentity:Ae,packageId:te};let Je=we.current.get(Ae)??[];if(!Je.includes(te)){let bt=[...Je,te].sort();we.current.set(Ae,bt),c(bt)}let de=ge.current.getDefaults(),St=$r(q,te,{noReset:de?.no_reset,appiumUrl:de?.appium_url});return H(St),{ok:!0,device:St}}catch(q){return P(null),{ok:!1,error:q instanceof Error?q.message:String(q)}}},[]),ne=(0,J.useCallback)(async()=>{let I=ie.current;if(!I)return{ok:!1,reason:"No device is selected.",step:"device"};let L=So[I.kind];if(!(await zn(L)).some(te=>te.id===I.id||te.virtualName&&te.virtualName===I.virtualName))return{ok:!1,reason:`${I.displayName} is no longer connected.`,step:"device"};let q=s.current;return q?wr(q)?{ok:!0}:await ge.current.pathExists(q)?{ok:!0}:{ok:!1,reason:`${q} is no longer there.`,step:"app"}:{ok:!1,reason:"No app is selected.",step:"app"}},[]),le=(0,J.useCallback)(()=>{++me.current,Xt.current=null,r("idle"),g([]),p([]),c([]),P(null),B(null),H(null),z(null),oe(null),st.current=null,ie.current=null,Y.current=null,pe.current=null,s.current=null,u.current=null},[]),Te=(0,J.useCallback)(()=>{let I=Xt.current,L=()=>{if(!I)return!1;let K=I.target?on(I.target.platform):null;return ie.current=I.target??null,Y.current=K??null,s.current=I.appPath??null,st.current=I,i.current=I.savedKind,o(I.savedKind),z(I.target??null),oe(I),P(null),B(null),r("confirm"),!0};switch(t){case"picking":B(null),r("chooser");return;case"appSource":if(B(null),L())return;if(ie.current){Oe(ie.current,s.current);return}r("chooser");return;case"apps":case"appList":case"appId":B(null),P(null),r("appSource");return;case"chooser":if(L())return;Tt.current();return;default:Tt.current()}},[t,Oe]),dt=(0,J.useCallback)(()=>{let I=He.current;if(I){let L=ge.current.getDefaults();ge.current.setDefaults({...L,tui_target:I}),He.current=null}le()},[le]);return Tt.current=dt,{phase:t,kind:n,selectKind:Kt,checks:f,targets:w,apps:x,busyMessage:m,error:U,device:F,target:$,saved:fe,begin:mr,recheck:kr,install:Kr,cancel:dt,back:Te,selectTarget:Cr,confirmSaved:gr,requestApp:hr,requestAppSource:vr,requestCloudApps:Rt,requestAppId:br,selectApp:Q,selectAppId:Er,skipApp:ce,bindAppForRun:ae,validateBinding:ne,reset:le}}var gn=D(Ee(),1);function Bu(e){let{phase:t,device:r,requestApp:n,pendingRef:o,dispatch:i,notify:s,onSettle:u}=e,f=(0,gn.useRef)(null),g=(0,gn.useRef)(!1);(0,gn.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 Ih}from"fs/promises";async function $u(e){let t=e.statFile??Ih,r="";if(!wr(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 Ou(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 Mu,readdir as Ah,stat as _h}from"fs/promises";import{extname as ju,join as Vu,relative as Ph}from"path";var Dh=new Set(["node_modules",".git"]),Lh=new Set([".apk",".zip",".apks",".aab",".ipa",".app"]);function Fu(e){return e.state!=="incompatible"}var Nu=new Map;function Bh(e,t){return`${e}\0${t?.platform??""}\0${t?.androidApiLevel??""}\0${t?.androidAbis?.join(",")??""}`}function $h(e){let t=typeof e=="number"?e:typeof e=="string"?Number(e):NaN;return Number.isInteger(t)&&t>0?t:void 0}function Oh(e){let t=new Set;return Ks(e,{filter:r=>{let n=/^lib\/([^/]+)\//.exec(r.name);return n?.[1]&&t.add(n[1]),!1}}),[...t].sort()}async function Uu(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 Ah(f,{withFileTypes:!0,encoding:"utf8"})}catch{return}for(let p of w){if(s.length>=n)return;if(p.name.startsWith(".")||Dh.has(p.name)||p.name.startsWith("output-"))continue;let x=Vu(f,p.name),c=ju(p.name).toLowerCase();if(Lh.has(c)&&(p.isFile()||c===".app"&&p.isDirectory())){let P=Ph(e,x);(!i||P.toLowerCase().includes(i))&&s.push(P);continue}p.isDirectory()&&await u(x,g+1)}}return await u(e,0),s}async function qu(e,t){let r;try{r=(await _h(e)).mtimeMs}catch{}let n=Bh(e,t),o=r===void 0?void 0:Nu.get(n);if(o&&o.mtimeMs===r)return o.result;let i=u=>(r!==void 0&&Nu.set(n,{mtimeMs:r,result:u}),u),s=ju(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=$h(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=Oh(new Uint8Array(await Mu(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 Mh(Vu(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&&Nh(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 Nh(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 Mh(e){let r=(await Mu(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(Ee(),1);function Hu(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):an(o);return(u?u(p,{username:w.username,accessKey:w.access_key}):new ra(p,{username:w.username,accessKey:w.access_key})).list({type:f,...r})},[])}var hn=D(G(),1);function Gu({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,hn.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,children:[(0,hn.jsx)(a,{color:l.orange,children:f}),(0,hn.jsxs)(a,{color:l.dim,children:[` \u21B5 ${g}`,e==="mobile"?" p pick a device":"",` k keep ${t}`," esc cancel"]})]})}async function Wu(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=jh(await i.json());return s&&e.cache?.set(e.objective,s),s}catch{return null}finally{clearTimeout(o)}}function jh(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 Xu(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 zu=D(Ee(),1);var Fe=D(G(),1),Vh={pass:"\u2713",fail:"\u2717",info:"\u2139"},Fh={pass:l.green,fail:l.red,info:l.secondary};function Ku({checks:e,busyMessage:t,onRetry:r,onInstall:n,onCancel:o}){let[i,s]=(0,zu.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,Fe.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.red,paddingX:2,paddingY:1,children:[(0,Fe.jsxs)(b,{children:[(0,Fe.jsx)(a,{color:l.red,bold:!0,children:"Device setup"}),(0,Fe.jsx)(a,{color:l.dim,children:u>0?` ${u} blocking issue${u===1?"":"s"}`:" all checks passed"})]}),(0,Fe.jsxs)(b,{flexDirection:"column",marginTop:1,children:[t&&(0,Fe.jsx)(a,{color:l.secondary,children:t}),f.length===0?(0,Fe.jsx)(a,{color:l.dim,children:"No checks reported."}):f.map(x=>(0,Fe.jsxs)(b,{flexDirection:"column",children:[(0,Fe.jsxs)(b,{children:[(0,Fe.jsxs)(a,{color:Fh[x.status],children:[Vh[x.status]," "]}),(0,Fe.jsx)(a,{children:x.label}),x.detail?(0,Fe.jsxs)(a,{color:l.dim,children:[" \u2014 ",x.detail]}):null]}),x.status==="fail"&&x.fixText&&g.get(x.fixText)===x.id?(0,Fe.jsx)(b,{marginLeft:4,children:(0,Fe.jsxs)(a,{color:l.dim,children:["fix: ",x.fixText]})}):null]},x.id))]}),i&&(0,Fe.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,Fe.jsx)(a,{color:l.orange,children:"Press i again to download:"}),(0,Fe.jsx)(a,{color:l.dim,children:p})]}),(0,Fe.jsx)(jt,{bindings:[{keys:"i",label:"install"},{keys:"r",label:"recheck"}],escBackLabel:"cancel"})]})}var bn=D(Ee(),1);var at=D(G(),1),as=800,cs=3840,ls=600,us=2160;function Yu(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,bn.useState)("width"),[s,u]=(0,bn.useState)(String(e)),[f,g]=(0,bn.useState)(String(t)),[w,p]=(0,bn.useState)(null);Be((c,m)=>{if(m.escape){n();return}if(m.tab||m.rightArrow||m.leftArrow){i(P=>P==="width"?"height":"width"),p(null);return}if(m.return){let P=Yu("width",s);if(P){i("width"),p(`Width: ${P}`);return}let U=Yu("height",f);if(U){i("height"),p(`Height: ${U}`);return}r(Number(s),Number(f));return}if(m.backspace||m.delete){o==="width"?u(P=>P.slice(0,-1)):g(P=>P.slice(0,-1)),p(null);return}c&&/^\d$/.test(c)&&(o==="width"?u(P=>P+c):g(P=>P+c),p(null))});let x=(c,m,P)=>{let U=o===P,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:[" ",P==="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)(jt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ct=D(Ee(),1);async function Ju(e,t,r){let n=e.loadCredentials(t,r),o=e.loadClient(t,r);if(n&&o){let s=new Ys(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 Qu(){let[e]=(0,ct.useState)(()=>new Gn),[t,r]=(0,ct.useState)(()=>{let m=e.resolveAuth();if(!m)return!1;if(m.method==="basic")return!0;let{credentials:P}=e.getActiveCredentials();return P?P.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:P,env:U}=e.getActiveCredentials();if(!m||!P||!U)return null;let B=m.expires_at,F=Date.now()/1e3;if(B-F<300){if(o.current)return o.current;let H=(async()=>{try{let $=await Js({creds:e,profile:P,env:U,credentials:m});return $?(r(!0),$.accessToken):null}catch{return r(!1),null}finally{o.current=null}})();return o.current=H,H}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,P)=>{n.current?.revoke();let U=Ge(m),B=u(),F=new va(U.controllerBaseUrl,s,B,P);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 P=n.current?.cached;return P?{username:P.username,access_key:P.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 P=e.getDefaultEnv();await new ba(m,P,e).login(),e.setActiveProfile(m);try{let B=new Vr;Ct(e,B,m,P)}catch{}r(!0)},[e]),c=(0,ct.useCallback)(async()=>{let m=e.getActiveProfile();if(!m)return null;let P=e.getDefaultEnv(),U=await Ju(e,m,P);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 Zt=D(Ee(),1);import{mkdtempSync as Uh,rmSync as qh}from"fs";import{join as Hh}from"path";import{tmpdir as Gh}from"os";function Zu(){let[e]=(0,Zt.useState)(()=>new Vr),t=(0,Zt.useRef)(null),r=(0,Zt.useRef)(null),n=(0,Zt.useRef)(null),o=(0,Zt.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=Uh(Hh(Gh(),"kane-clean-"));r.current=p,g=p,Vt("tempDir",()=>{try{qh(p,{recursive:!0,force:!0})}catch{}})}let w=await ya({userDataDir:g,width:f.window_size.width,height:f.window_size.height,startUrl:s??f.default_url??void 0});return t.current=w,Vt("chrome",()=>{w.kill()}),w})();n.current=u;try{return await u}finally{n.current=null}},[e]),i=(0,Zt.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"}],Wh={web:"desktop"};function Xh(e){return Wh[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:Xh(o),args:i,raw:t}}var eS=[{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 ed=[{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"}],zh={name:"cancel",description:"Abort current run"},Kh={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]"},zh,...ed],vn=[{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>]"},Kh,...ed],td=Wr,Yh=new Set(["mobile","doctor"]),Jh=new Set(["mobile","desktop"]);function rd(e,t){return t?e.map(r=>Jh.has(r.name)?{...r,disabled:!0,disabledReason:`locked \u2014 session ran on ${t.label}; /new to switch`}:r):e}function xn(e,t=Or()){return t?e:e.filter(r=>!Yh.has(r.name))}function ko(e,t="run"){let r=xn(t==="generate"?vn:Wr),n=e.startsWith("/")?e.slice(1):e;return n?r.filter(o=>o.name.startsWith(n)):r}var Qh=new Set([...Wr,...vn].map(e=>e.name));function nd(e,t){let r=t==="generate"?vn:Wr;return Qh.has(e)?r.some(n=>n.name===e):!0}var od=D(Ee(),1);var yt=D(G(),1);function Zh(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 id({saved:e,onContinue:t,onChangeDevice:r,onChangeApp:n,onCancel:o}){let i=Zh(e),[s,u]=(0,od.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)(jt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back to chat"})]})}function sd(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(G(),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)(Va,{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(G(),1),eb={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},tb={ok:l.green,error:l.red,cancelled:l.dim};function ad({status:e,command:t,message:r,details:n,accentColor:o}){let i=t.startsWith("/")?t.slice(1):t,s=o??tb[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:[eb[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 Rn=D(Ee(),1);import{join as Sn}from"path";var yn=D(G(),1);function cd({tabs:e,activeIndex:t}){return(0,yn.jsx)(b,{children:e.map((r,n)=>(0,yn.jsx)(b,{marginRight:1,children:n===t?(0,yn.jsx)(a,{color:l.orange,bold:!0,children:`[ ${r} ]`}):(0,yn.jsx)(a,{color:l.dim,children:` ${r} `})},r))})}var _=D(G(),1),wn=["Commands","Shortcuts","Tests","Setup","About"],Co=21,rb="https://www.testmuai.com/support/docs/kane-cli-introduction",nb="https://github.com/LambdaTest/kane-cli/issues";function ld({onClose:e,version:t,environment:r,sessionId:n,runUrl:o,mode:i="run"}){let[s,u]=(0,Rn.useState)(0),[f,g]=(0,Rn.useState)(0);(0,Rn.useEffect)(()=>{g(0)},[s]);let w=wn[s],p=w==="Commands"?ob(i):w==="Shortcuts"?ib():w==="Tests"?sb():w==="Setup"?ab():cb({version:t,environment:r,sessionId:n,runUrl:o}),x=p.length,c=f>0,m=f+Co<x,P=p.slice(f,f+Co);Be((B,F)=>{if(F.escape){e();return}if(F.rightArrow||F.tab){u(H=>(H+1)%wn.length);return}if(F.leftArrow){u(H=>(H-1+wn.length)%wn.length);return}if(F.upArrow){g(H=>Math.max(0,H-1));return}if(F.downArrow){g(H=>Math.min(Math.max(0,x-Co),H+1));return}});let U=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return x>Co&&U.push({keys:"\u2191\u2193",label:"scroll"}),(0,_.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,_.jsx)(cd,{tabs:[...wn],activeIndex:s,onChange:u}),c&&(0,_.jsx)(b,{marginTop:1,children:(0,_.jsx)(a,{color:l.dim,children:"\u25B2 more above"})}),(0,_.jsx)(b,{marginTop:c?0:1,flexDirection:"column",children:P}),m&&(0,_.jsx)(b,{children:(0,_.jsx)(a,{color:l.dim,children:"\u25BC more below"})}),(0,_.jsx)(jt,{bindings:U,escBackLabel:"back to chat"})]})}function ob(e){let t=xn(e==="generate"?vn:Wr);return[(0,_.jsx)(a,{color:l.dim,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.jsx)(a,{color:l.orange,children:'"search amazon for laptop"'})},"ex"),(0,_.jsx)(b,{marginBottom:1},"sp"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Slash commands"},"cmd-h"),...t.map(r=>(0,_.jsxs)(b,{marginLeft:2,children:[(0,_.jsx)(b,{width:14,children:(0,_.jsxs)(a,{color:l.orange,children:["/",r.name]})}),r.args&&(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:r.args})}),(0,_.jsx)(a,{color:l.dim,children:r.description})]},r.name)),(0,_.jsx)(b,{marginBottom:1},"sp2"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.jsx)(a,{color:l.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.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,_.jsx)(a,{color:l.dim,bold:!0,children:e},`h-${e}`),...t.map(([r,n],o)=>(0,_.jsxs)(b,{marginLeft:2,children:[(0,_.jsx)(b,{width:26,children:(0,_.jsx)(a,{color:l.orange,children:r})}),(0,_.jsx)(a,{color:l.dim,children:n})]},`r-${e}-${o}`)),(0,_.jsx)(b,{marginBottom:1},`s-${e}`)]}function ib(){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,_.jsx)(a,{color:l.dim,bold:!0,children:"Platform caveats"},"cv-h"),(0,_.jsx)(a,{color:l.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function sb(){return[(0,_.jsxs)(a,{color:l.dim,children:["Sessions you run here are saved as ",(0,_.jsx)(a,{color:l.orange,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,_.jsx)(b,{marginBottom:1},"t-sp1"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Auto-save"},"t-save-h"),(0,_.jsxs)(a,{color:l.dim,children:[" In ",(0,_.jsx)(a,{color:l.orange,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,_.jsxs)(a,{color:l.dim,children:[" In ",(0,_.jsx)(a,{color:l.orange,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,_.jsxs)(a,{color:l.dim,children:[" Output: ",(0,_.jsx)(a,{color:l.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,_.jsx)(a,{color:l.orange,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,_.jsx)(b,{marginBottom:1},"t-sp2"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,_.jsxs)(a,{color:l.dim,children:[" ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd list"})," \xB7 bare ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,_.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,_.jsx)(b,{marginBottom:1},"t-sp3"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Type ",(0,_.jsxs)(a,{color:l.orange,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Discarding at the save prompt: press ",(0,_.jsx)(a,{color:l.orange,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function ab(){return[(0,_.jsx)(a,{color:l.dim,bold:!0,children:"1. Login"},"s1-h"),(0,_.jsx)(a,{color:l.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"2. Project & folder"},"s2-h"),(0,_.jsx)(a,{color:l.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"3. Run settings (/config \u2192 Run)"},"s3-h"),(0,_.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,_.jsx)(a,{color:l.dim,children:" assertion-mode: visual (default) = read/assert via vision \xB7 dom = DOM-based extraction/assertions"},"s3-c"),(0,_.jsx)(b,{marginBottom:1},"spacer-1"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Variables (later wins)"},"v-h"),(0,_.jsxs)(a,{color:l.dim,children:[" ",`${Sn(mt,"variables")}/*.json`," (global)"]},"v-1"),(0,_.jsxs)(a,{color:l.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,_.jsx)(a,{color:l.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,_.jsx)(b,{marginBottom:1},"spacer-2"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Context files"},"c-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Global: ",Sn(mt,"global-memory.md")]},"c-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,_.jsx)(b,{marginBottom:1},"spacer-3"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Paths"},"p-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Config: ",Sn(mt,"tui-config.json")," \xB7 Auth: ",Sn(mt,"config.json")]},"p-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Sessions: ",Sn(mt,"sessions"),"/"]},"p-2")]}function cb({version:e,environment:t,sessionId:r,runUrl:n}){return[(0,_.jsxs)(b,{children:[(0,_.jsx)(a,{color:l.orange,bold:!0,children:"kane-cli "}),(0,_.jsxs)(a,{color:l.muted,children:["v",e]})]},"title"),(0,_.jsx)(b,{marginBottom:1},"sp"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Environment"})}),(0,_.jsx)(a,{children:t})]},"env"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Session"})}),(0,_.jsx)(a,{children:r})]},"sess"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Default URL"})}),(0,_.jsx)(a,{color:l.orange,children:n})]},"url"),(0,_.jsx)(b,{marginBottom:1},"sp2"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Docs"})}),(0,_.jsx)(a,{color:l.orange,underline:!0,children:rb})]},"docs"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Bugs"})}),(0,_.jsx)(a,{color:l.orange,underline:!0,children:nb})]},"bugs")]}var Io=D(Ee(),1);import{existsSync as ud,readFileSync as IS,rmSync as lb,unlinkSync as ub}from"fs";function dd(e){let t=Fa(e);ud(t)&&lb(t,{recursive:!0,force:!0}),ud(e)&&ub(e)}var ps=D(G(),1);function fd({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{dd(u.path)}catch{}f(null),s("list"),w(x=>x+1)}}}):(0,ps.jsx)(Ua,{root:e,currentOrgId:t,onSelect:p=>{f(p),s("inspect")},onCancel:r},g)}var lt=D(Ee(),1);function pd(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),P=(0,lt.useRef)(e);P.current=e;let U=(0,lt.useCallback)(async H=>{if(c.current)return null;c.current=!0;let $=++p.current,z=[];x.current=z;let fe=Y=>`testmd-run-${$}-${Y}`,oe={register:(Y,pe)=>{let we=fe(Y);z.push(we),Vt(we,pe)},deregister:Y=>sn(fe(Y)),cleanup:(Y,pe)=>ur(fe(Y),pe),remoteLogger:P.current.remoteLogger},ie={runSteps:Y=>new Promise(pe=>{let we=()=>{m.current=null,pe()};m.current=we,r({...Y,exitOnComplete:!1,onAllComplete:()=>{Y.onAllComplete?.(),we()}})}),onLockState:Y=>{},onRetryAttempt:Y=>{},onSummary:async Y=>{s(Y)},onLinks:async Y=>{f(Y)},runUpload:Y=>Y.execute(),onAgentEvent:Y=>{}};o(!0),s(null),f(null),w(null);try{let Y=await P.current.buildInput(H),pe=await ac(Y,ie,oe);return w(pe),pe}finally{c.current=!1,m.current=null,o(!1),r(null);for(let Y of z)ur(Y,"run-finished");z.length=0}},[]),B=(0,lt.useCallback)(()=>{for(let $ of x.current)ur($,"cancelled");x.current=[];let H=m.current;m.current=null,H?.()},[]),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(Ee(),1);function md(e={}){let[t,r]=(0,nt.useState)(()=>eo({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 H=0,$=0,z=0;for await(let fe of U){if(f.current)break;switch(r(oe=>dc(oe,fe)),fe.type){case"thinking_done":F?.("tcg_thinking",{tookMs:fe.tookMs});break;case"progress":{let oe=Math.min(100,Math.floor(fe.pct/25)*25);oe>z&&(z=oe,F?.("tcg_progress",{pct:oe}));break}case"snapshot":H=fe.data.scenarios.length,$=fe.data.scenarios.reduce((oe,ie)=>oe+(ie.test_cases?.length??0),0),F?.("tcg_snapshot",{scenarioCount:H,caseCount:$});break;case"clarification":F?.("tcg_clarification",{});break;case"done":F?.("tcg_request_done",{status:fe.status,scenarioCount:H,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??fc;u.current=F(U),g.current=new AbortController;let H=eo({requestId:"",objective:B.prompt});r(to(H));let $;try{$=await u.current.start(B,g.current.signal)}catch(fe){throw u.current=null,g.current=null,r(oe=>({...oe,turnActive:!1})),fe}s($.requestId),r(to({...$.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=>to(uc(F)));try{await u.current.chat(i,U,B)}catch(F){throw r(H=>({...H,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]),P=(0,nt.useCallback)(()=>{f.current=!0,g.current&&g.current.abort(),g.current=null,r(eo({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:lc(t.status),isReconnecting:n,turnActive:t.turnActive,inReview:t.scenarios.length>0&&!t.turnActive&&!Ii(t.status),isSessionClosed:Ii(t.status),requestId:i,startWith:p,chat:x,cancel:c,end:m,reset:P}}var be=D(Ee(),1);import{join as Xr,resolve as Rb}from"path";import{mkdirSync as gs,writeFileSync as Ad,appendFileSync as Tb}from"fs";function gd(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 hd(e){return e.turnActive?!0:e.requestId!=null&&!e.isSessionClosed&&!e.saved}function bd(e){return e.isRunning||e.hasLiveResults}function vd(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 xd(e,t){return`S${e+1}.C${t+1}`}function yd(e,t){return e.reduce((r,n)=>r+(n.test_cases??[]).filter(o=>!t.has(o.id)).length,0)}function Sd(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 Tn=D(Ee(),1);import{createHash as db}from"crypto";function fb(e){return db("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(!Ut(o)||o.manual_steps==null)return;let s=fb(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:xd(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);Vt(o,()=>i.abort());let u=Date.now();try{this.safeLog("tcg_bif_start",{caseId:t,ref:n.ref});let f=await s(bc(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{sn(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=vc({objective:t,model:this.deps.model,sessionId:this.deps.sessionId,auth:n});return xc(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(),sn(`bifurcation-${t}`);this.cache.clear(),this.caseById.clear(),this.queue=[],this.active=0}};function wd(e){let t=(0,Tn.useRef)(null);return(0,Tn.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,Tn.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 kd,isAbsolute as mb,extname as gb}from"path";import{homedir as Td}from"os";var pb=/(?<=^|\s)@(?:"([^"]*)"|([^\s@]+))/g;function Rd(e){let t=[];for(let r of e.matchAll(pb)){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 hb=/^s\d+(\.c\d+)?$/i;function bb(e){return e==="~"?Td():e.startsWith("~/")?kd(Td(),e.slice(2)):e}function vb(e){return/^https?:\/\//i.test(e)?!1:e.includes("/")?!0:ro.has(gb(e).toLowerCase())}function Cd(e,t){let r=Rd(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(hb.test(u)||!vb(u))continue;let g=bb(u),w=mb(g)?g:kd(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 xb=["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"],yb=new Set(xb);function ms(e){let t={};for(let r of Object.keys(e))yb.has(r)&&e[r]!==void 0&&(t[r]=e[r]);return t}import{mkdirSync as Sb,appendFileSync as wb}from"fs";import{join as Ed}from"path";function Id(e,t,r,n,o=mt){let i=Ed(o,"tcg",e&&e.length>0?e:"pending"),s=Ed(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
|
-
`;Sb(i,{recursive:!0}),wb(s,f)}catch{}return s}var We=D(G(),1);async function kb(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 _d(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function Pd(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"),[P,U]=(0,be.useState)(null),[B,F]=(0,be.useState)(null),[H,$]=(0,be.useState)(null),[z,fe]=(0,be.useState)(0),[oe,ie]=(0,be.useState)(!1),Y=(0,be.useRef)(null),pe=(0,be.useRef)(()=>{}),we=(0,be.useCallback)(()=>kb(o),[o]),me=(0,be.useRef)(null);me.current=t.requestId;let $e=(0,be.useCallback)((Q,ce)=>{let ae=Q.endsWith("_error")?"warn":"info",ne=ms({request_id:me.current??void 0,...ce});i.log(ae,Q,JSON.stringify(ne),ne);try{let le=typeof ne.request_id=="string"&&ne.request_id||me.current||"unknown",
|
|
7
|
-
`)}catch{}},[i]),He=(0,be.useCallback)((Q,ce)=>{let ae=Id(me.current,ce.phase,Q),ne=typeof Q?.status=="number"?Q.status:void 0;$e(`${ce.phase}_error`,{errorCode:`${ce.phase}_failed`,status:ne});let le=ce.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:le}),(0,We.jsx)(a,{color:l.dim,children:`details: ${ae}`})]})),U(null)},[$e,s]),st=(0,be.useRef)(0),Xt=(0,be.useCallback)((Q,ce,ae)=>{try{let ne=Xr(mt,"tcg",me.current??"unknown","bifurcation");gs(ne,{recursive:!0}),Ad(Xr(ne,`${Q}.json`),JSON.stringify({request_id:me.current,ref:ae,...ce},null,2))}catch{}},[]),
|
|
8
|
-
`));return}if(_d(L))return;He(L,{phase:"upload"});return}finally{Oe.current=!1,Me(!1),Le.current===
|
|
9
|
-
`));return}if(_d(le))return;He(le,{phase:"upload"});return}finally{Oe.current=!1,Me(!1),Le.current===ae&&(Le.current=null)}if(!ae.signal.aborted){for(let le of ne.warnings)e.emitFeedback("ok","/generate",le,void 0,l.generateAccent);try{await t.chat(ne.promptText,{mappings:ne.mappings,attachments:ne.attachments})}catch(le){He(le,{phase:"chat"})}}},[s,t,$e,$t,Kt,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(ce){He(ce,{phase:"chat"})}finally{Oe.current=!1}}},[s,t,He]),hr=(0,be.useCallback)(Q=>{let ce=
|
|
5
|
+
`);return(0,Fe.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.red,paddingX:2,paddingY:1,children:[(0,Fe.jsxs)(b,{children:[(0,Fe.jsx)(a,{color:l.red,bold:!0,children:"Device setup"}),(0,Fe.jsx)(a,{color:l.dim,children:u>0?` ${u} blocking issue${u===1?"":"s"}`:" all checks passed"})]}),(0,Fe.jsxs)(b,{flexDirection:"column",marginTop:1,children:[t&&(0,Fe.jsx)(a,{color:l.secondary,children:t}),f.length===0?(0,Fe.jsx)(a,{color:l.dim,children:"No checks reported."}):f.map(x=>(0,Fe.jsxs)(b,{flexDirection:"column",children:[(0,Fe.jsxs)(b,{children:[(0,Fe.jsxs)(a,{color:Fh[x.status],children:[Vh[x.status]," "]}),(0,Fe.jsx)(a,{children:x.label}),x.detail?(0,Fe.jsxs)(a,{color:l.dim,children:[" \u2014 ",x.detail]}):null]}),x.status==="fail"&&x.fixText&&g.get(x.fixText)===x.id?(0,Fe.jsx)(b,{marginLeft:4,children:(0,Fe.jsxs)(a,{color:l.dim,children:["fix: ",x.fixText]})}):null]},x.id))]}),i&&(0,Fe.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,Fe.jsx)(a,{color:l.orange,children:"Press i again to download:"}),(0,Fe.jsx)(a,{color:l.dim,children:p})]}),(0,Fe.jsx)(jt,{bindings:[{keys:"i",label:"install"},{keys:"r",label:"recheck"}],escBackLabel:"cancel"})]})}var bn=D(Ee(),1);var at=D(G(),1),as=800,cs=3840,ls=600,us=2160;function Yu(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,bn.useState)("width"),[s,u]=(0,bn.useState)(String(e)),[f,g]=(0,bn.useState)(String(t)),[w,p]=(0,bn.useState)(null);Be((c,m)=>{if(m.escape){n();return}if(m.tab||m.rightArrow||m.leftArrow){i(P=>P==="width"?"height":"width"),p(null);return}if(m.return){let P=Yu("width",s);if(P){i("width"),p(`Width: ${P}`);return}let U=Yu("height",f);if(U){i("height"),p(`Height: ${U}`);return}r(Number(s),Number(f));return}if(m.backspace||m.delete){o==="width"?u(P=>P.slice(0,-1)):g(P=>P.slice(0,-1)),p(null);return}c&&/^\d$/.test(c)&&(o==="width"?u(P=>P+c):g(P=>P+c),p(null))});let x=(c,m,P)=>{let U=o===P,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:[" ",P==="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)(jt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ct=D(Ee(),1);async function Ju(e,t,r){let n=e.loadCredentials(t,r),o=e.loadClient(t,r);if(n&&o){let s=new Ys(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 Qu(){let[e]=(0,ct.useState)(()=>new Gn),[t,r]=(0,ct.useState)(()=>{let m=e.resolveAuth();if(!m)return!1;if(m.method==="basic")return!0;let{credentials:P}=e.getActiveCredentials();return P?P.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:P,env:U}=e.getActiveCredentials();if(!m||!P||!U)return null;let B=m.expires_at,F=Date.now()/1e3;if(B-F<300){if(o.current)return o.current;let H=(async()=>{try{let $=await Js({creds:e,profile:P,env:U,credentials:m});return $?(r(!0),$.accessToken):null}catch{return r(!1),null}finally{o.current=null}})();return o.current=H,H}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,P)=>{n.current?.revoke();let U=Ge(m),B=u(),F=new va(U.controllerBaseUrl,s,B,P);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 P=n.current?.cached;return P?{username:P.username,access_key:P.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 P=e.getDefaultEnv();await new ba(m,P,e).login(),e.setActiveProfile(m);try{let B=new Vr;Ct(e,B,m,P)}catch{}r(!0)},[e]),c=(0,ct.useCallback)(async()=>{let m=e.getActiveProfile();if(!m)return null;let P=e.getDefaultEnv(),U=await Ju(e,m,P);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 Zt=D(Ee(),1);import{mkdtempSync as Uh,rmSync as qh}from"fs";import{join as Hh}from"path";import{tmpdir as Gh}from"os";function Zu(){let[e]=(0,Zt.useState)(()=>new Vr),t=(0,Zt.useRef)(null),r=(0,Zt.useRef)(null),n=(0,Zt.useRef)(null),o=(0,Zt.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=Uh(Hh(Gh(),"kane-clean-"));r.current=p,g=p,Vt("tempDir",()=>{try{qh(p,{recursive:!0,force:!0})}catch{}})}let w=await ya({userDataDir:g,width:f.window_size.width,height:f.window_size.height,startUrl:s??f.default_url??void 0});return t.current=w,Vt("chrome",()=>{w.kill()}),w})();n.current=u;try{return await u}finally{n.current=null}},[e]),i=(0,Zt.useCallback)(()=>{ur("chrome","Chrome killed"),ur("tempDir","Temp dir removed"),t.current=null,r.current=null},[]);return{ensureChrome:o,killChrome:i}}var To=[{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"}],Wh={web:"desktop"};function Xh(e){return Wh[e]??e}function Ro(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:Xh(o),args:i,raw:t}}var eS=[{name:"Testing",commands:To.filter(e=>["run","cancel"].includes(e.name))},{name:"Auth",commands:To.filter(e=>["login","logout","whoami","balance","profiles"].includes(e.name))},{name:"Settings",commands:To.filter(e=>["config"].includes(e.name))},{name:"Session",commands:To.filter(e=>["new","name","summary","help","clear","exit"].includes(e.name))}];var ed=[{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"}],zh={name:"cancel",description:"Abort current run"},Kh={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]"},zh,...ed],vn=[{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>]"},Kh,...ed],td=Wr,Yh=new Set(["mobile","doctor"]),Jh=new Set(["mobile","desktop"]);function rd(e,t){return t?e.map(r=>Jh.has(r.name)?{...r,disabled:!0,disabledReason:`locked \u2014 session ran on ${t.label}; /new to switch`}:r):e}function xn(e,t=Or()){return t?e:e.filter(r=>!Yh.has(r.name))}function ko(e,t="run"){let r=xn(t==="generate"?vn:Wr),n=e.startsWith("/")?e.slice(1):e;return n?r.filter(o=>o.name.startsWith(n)):r}var Qh=new Set([...Wr,...vn].map(e=>e.name));function nd(e,t){let r=t==="generate"?vn:Wr;return Qh.has(e)?r.some(n=>n.name===e):!0}var od=D(Ee(),1);var yt=D(G(),1);function Zh(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 id({saved:e,onContinue:t,onChangeDevice:r,onChangeApp:n,onCancel:o}){let i=Zh(e),[s,u]=(0,od.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)(jt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back to chat"})]})}function sd(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(G(),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)(Va,{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(G(),1),eb={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},tb={ok:l.green,error:l.red,cancelled:l.dim};function ad({status:e,command:t,message:r,details:n,accentColor:o}){let i=t.startsWith("/")?t.slice(1):t,s=o??tb[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:[eb[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 Tn=D(Ee(),1);import{join as Sn}from"path";var yn=D(G(),1);function cd({tabs:e,activeIndex:t}){return(0,yn.jsx)(b,{children:e.map((r,n)=>(0,yn.jsx)(b,{marginRight:1,children:n===t?(0,yn.jsx)(a,{color:l.orange,bold:!0,children:`[ ${r} ]`}):(0,yn.jsx)(a,{color:l.dim,children:` ${r} `})},r))})}var _=D(G(),1),wn=["Commands","Shortcuts","Tests","Setup","About"],Co=21,rb="https://www.testmuai.com/support/docs/kane-cli-introduction",nb="https://github.com/LambdaTest/kane-cli/issues";function ld({onClose:e,version:t,environment:r,sessionId:n,runUrl:o,mode:i="run"}){let[s,u]=(0,Tn.useState)(0),[f,g]=(0,Tn.useState)(0);(0,Tn.useEffect)(()=>{g(0)},[s]);let w=wn[s],p=w==="Commands"?ob(i):w==="Shortcuts"?ib():w==="Tests"?sb():w==="Setup"?ab():cb({version:t,environment:r,sessionId:n,runUrl:o}),x=p.length,c=f>0,m=f+Co<x,P=p.slice(f,f+Co);Be((B,F)=>{if(F.escape){e();return}if(F.rightArrow||F.tab){u(H=>(H+1)%wn.length);return}if(F.leftArrow){u(H=>(H-1+wn.length)%wn.length);return}if(F.upArrow){g(H=>Math.max(0,H-1));return}if(F.downArrow){g(H=>Math.min(Math.max(0,x-Co),H+1));return}});let U=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return x>Co&&U.push({keys:"\u2191\u2193",label:"scroll"}),(0,_.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:l.orange,paddingX:2,paddingY:1,children:[(0,_.jsx)(cd,{tabs:[...wn],activeIndex:s,onChange:u}),c&&(0,_.jsx)(b,{marginTop:1,children:(0,_.jsx)(a,{color:l.dim,children:"\u25B2 more above"})}),(0,_.jsx)(b,{marginTop:c?0:1,flexDirection:"column",children:P}),m&&(0,_.jsx)(b,{children:(0,_.jsx)(a,{color:l.dim,children:"\u25BC more below"})}),(0,_.jsx)(jt,{bindings:U,escBackLabel:"back to chat"})]})}function ob(e){let t=xn(e==="generate"?vn:Wr);return[(0,_.jsx)(a,{color:l.dim,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.jsx)(a,{color:l.orange,children:'"search amazon for laptop"'})},"ex"),(0,_.jsx)(b,{marginBottom:1},"sp"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Slash commands"},"cmd-h"),...t.map(r=>(0,_.jsxs)(b,{marginLeft:2,children:[(0,_.jsx)(b,{width:14,children:(0,_.jsxs)(a,{color:l.orange,children:["/",r.name]})}),r.args&&(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:r.args})}),(0,_.jsx)(a,{color:l.dim,children:r.description})]},r.name)),(0,_.jsx)(b,{marginBottom:1},"sp2"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.jsx)(a,{color:l.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,_.jsx)(b,{marginLeft:2,children:(0,_.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,_.jsx)(a,{color:l.dim,bold:!0,children:e},`h-${e}`),...t.map(([r,n],o)=>(0,_.jsxs)(b,{marginLeft:2,children:[(0,_.jsx)(b,{width:26,children:(0,_.jsx)(a,{color:l.orange,children:r})}),(0,_.jsx)(a,{color:l.dim,children:n})]},`r-${e}-${o}`)),(0,_.jsx)(b,{marginBottom:1},`s-${e}`)]}function ib(){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,_.jsx)(a,{color:l.dim,bold:!0,children:"Platform caveats"},"cv-h"),(0,_.jsx)(a,{color:l.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,_.jsx)(a,{color:l.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function sb(){return[(0,_.jsxs)(a,{color:l.dim,children:["Sessions you run here are saved as ",(0,_.jsx)(a,{color:l.orange,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,_.jsx)(b,{marginBottom:1},"t-sp1"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Auto-save"},"t-save-h"),(0,_.jsxs)(a,{color:l.dim,children:[" In ",(0,_.jsx)(a,{color:l.orange,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,_.jsxs)(a,{color:l.dim,children:[" In ",(0,_.jsx)(a,{color:l.orange,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,_.jsxs)(a,{color:l.dim,children:[" Output: ",(0,_.jsx)(a,{color:l.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,_.jsx)(a,{color:l.orange,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,_.jsx)(b,{marginBottom:1},"t-sp2"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,_.jsxs)(a,{color:l.dim,children:[" ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd list"})," \xB7 bare ",(0,_.jsx)(a,{color:l.orange,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,_.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,_.jsx)(b,{marginBottom:1},"t-sp3"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Type ",(0,_.jsxs)(a,{color:l.orange,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Discarding at the save prompt: press ",(0,_.jsx)(a,{color:l.orange,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function ab(){return[(0,_.jsx)(a,{color:l.dim,bold:!0,children:"1. Login"},"s1-h"),(0,_.jsx)(a,{color:l.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"2. Project & folder"},"s2-h"),(0,_.jsx)(a,{color:l.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"3. Run settings (/config \u2192 Run)"},"s3-h"),(0,_.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,_.jsx)(a,{color:l.dim,children:" assertion-mode: visual (default) = read/assert via vision \xB7 dom = DOM-based extraction/assertions"},"s3-c"),(0,_.jsx)(b,{marginBottom:1},"spacer-1"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Variables (later wins)"},"v-h"),(0,_.jsxs)(a,{color:l.dim,children:[" ",`${Sn(mt,"variables")}/*.json`," (global)"]},"v-1"),(0,_.jsxs)(a,{color:l.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,_.jsx)(a,{color:l.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,_.jsx)(b,{marginBottom:1},"spacer-2"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Context files"},"c-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Global: ",Sn(mt,"global-memory.md")]},"c-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,_.jsx)(b,{marginBottom:1},"spacer-3"),(0,_.jsx)(a,{color:l.dim,bold:!0,children:"Paths"},"p-h"),(0,_.jsxs)(a,{color:l.dim,children:[" Config: ",Sn(mt,"tui-config.json")," \xB7 Auth: ",Sn(mt,"config.json")]},"p-1"),(0,_.jsxs)(a,{color:l.dim,children:[" Sessions: ",Sn(mt,"sessions"),"/"]},"p-2")]}function cb({version:e,environment:t,sessionId:r,runUrl:n}){return[(0,_.jsxs)(b,{children:[(0,_.jsx)(a,{color:l.orange,bold:!0,children:"kane-cli "}),(0,_.jsxs)(a,{color:l.muted,children:["v",e]})]},"title"),(0,_.jsx)(b,{marginBottom:1},"sp"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Environment"})}),(0,_.jsx)(a,{children:t})]},"env"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Session"})}),(0,_.jsx)(a,{children:r})]},"sess"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Default URL"})}),(0,_.jsx)(a,{color:l.orange,children:n})]},"url"),(0,_.jsx)(b,{marginBottom:1},"sp2"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Docs"})}),(0,_.jsx)(a,{color:l.orange,underline:!0,children:rb})]},"docs"),(0,_.jsxs)(b,{children:[(0,_.jsx)(b,{width:14,children:(0,_.jsx)(a,{color:l.dim,children:"Bugs"})}),(0,_.jsx)(a,{color:l.orange,underline:!0,children:nb})]},"bugs")]}var Io=D(Ee(),1);import{existsSync as ud,readFileSync as IS,rmSync as lb,unlinkSync as ub}from"fs";function dd(e){let t=Fa(e);ud(t)&&lb(t,{recursive:!0,force:!0}),ud(e)&&ub(e)}var ps=D(G(),1);function fd({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{dd(u.path)}catch{}f(null),s("list"),w(x=>x+1)}}}):(0,ps.jsx)(Ua,{root:e,currentOrgId:t,onSelect:p=>{f(p),s("inspect")},onCancel:r},g)}var lt=D(Ee(),1);function pd(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),P=(0,lt.useRef)(e);P.current=e;let U=(0,lt.useCallback)(async H=>{if(c.current)return null;c.current=!0;let $=++p.current,z=[];x.current=z;let fe=Y=>`testmd-run-${$}-${Y}`,oe={register:(Y,pe)=>{let we=fe(Y);z.push(we),Vt(we,pe)},deregister:Y=>sn(fe(Y)),cleanup:(Y,pe)=>ur(fe(Y),pe),remoteLogger:P.current.remoteLogger},ie={runSteps:Y=>new Promise(pe=>{let we=()=>{m.current=null,pe()};m.current=we,r({...Y,exitOnComplete:!1,onAllComplete:()=>{Y.onAllComplete?.(),we()}})}),onLockState:Y=>{},onAdaptiveHeal:Y=>{},onSummary:async Y=>{s(Y)},onLinks:async Y=>{f(Y)},runUpload:Y=>Y.execute(),onAgentEvent:Y=>{}};o(!0),s(null),f(null),w(null);try{let Y=await P.current.buildInput(H),pe=await ac(Y,ie,oe);return w(pe),pe}finally{c.current=!1,m.current=null,o(!1),r(null);for(let Y of z)ur(Y,"run-finished");z.length=0}},[]),B=(0,lt.useCallback)(()=>{for(let $ of x.current)ur($,"cancelled");x.current=[];let H=m.current;m.current=null,H?.()},[]),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(Ee(),1);function md(e={}){let[t,r]=(0,nt.useState)(()=>eo({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 H=0,$=0,z=0;for await(let fe of U){if(f.current)break;switch(r(oe=>dc(oe,fe)),fe.type){case"thinking_done":F?.("tcg_thinking",{tookMs:fe.tookMs});break;case"progress":{let oe=Math.min(100,Math.floor(fe.pct/25)*25);oe>z&&(z=oe,F?.("tcg_progress",{pct:oe}));break}case"snapshot":H=fe.data.scenarios.length,$=fe.data.scenarios.reduce((oe,ie)=>oe+(ie.test_cases?.length??0),0),F?.("tcg_snapshot",{scenarioCount:H,caseCount:$});break;case"clarification":F?.("tcg_clarification",{});break;case"done":F?.("tcg_request_done",{status:fe.status,scenarioCount:H,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??fc;u.current=F(U),g.current=new AbortController;let H=eo({requestId:"",objective:B.prompt});r(to(H));let $;try{$=await u.current.start(B,g.current.signal)}catch(fe){throw u.current=null,g.current=null,r(oe=>({...oe,turnActive:!1})),fe}s($.requestId),r(to({...$.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=>to(uc(F)));try{await u.current.chat(i,U,B)}catch(F){throw r(H=>({...H,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]),P=(0,nt.useCallback)(()=>{f.current=!0,g.current&&g.current.abort(),g.current=null,r(eo({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:lc(t.status),isReconnecting:n,turnActive:t.turnActive,inReview:t.scenarios.length>0&&!t.turnActive&&!Ii(t.status),isSessionClosed:Ii(t.status),requestId:i,startWith:p,chat:x,cancel:c,end:m,reset:P}}var be=D(Ee(),1);import{join as Xr,resolve as Tb}from"path";import{mkdirSync as gs,writeFileSync as Ad,appendFileSync as Rb}from"fs";function gd(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 hd(e){return e.turnActive?!0:e.requestId!=null&&!e.isSessionClosed&&!e.saved}function bd(e){return e.isRunning||e.hasLiveResults}function vd(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 xd(e,t){return`S${e+1}.C${t+1}`}function yd(e,t){return e.reduce((r,n)=>r+(n.test_cases??[]).filter(o=>!t.has(o.id)).length,0)}function Sd(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(Ee(),1);import{createHash as db}from"crypto";function fb(e){return db("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(!Ut(o)||o.manual_steps==null)return;let s=fb(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:xd(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);Vt(o,()=>i.abort());let u=Date.now();try{this.safeLog("tcg_bif_start",{caseId:t,ref:n.ref});let f=await s(bc(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{sn(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=vc({objective:t,model:this.deps.model,sessionId:this.deps.sessionId,auth:n});return xc(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(),sn(`bifurcation-${t}`);this.cache.clear(),this.caseById.clear(),this.queue=[],this.active=0}};function wd(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 kd,isAbsolute as mb,extname as gb}from"path";import{homedir as Rd}from"os";var pb=/(?<=^|\s)@(?:"([^"]*)"|([^\s@]+))/g;function Td(e){let t=[];for(let r of e.matchAll(pb)){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 hb=/^s\d+(\.c\d+)?$/i;function bb(e){return e==="~"?Rd():e.startsWith("~/")?kd(Rd(),e.slice(2)):e}function vb(e){return/^https?:\/\//i.test(e)?!1:e.includes("/")?!0:ro.has(gb(e).toLowerCase())}function Cd(e,t){let r=Td(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(hb.test(u)||!vb(u))continue;let g=bb(u),w=mb(g)?g:kd(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 xb=["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"],yb=new Set(xb);function ms(e){let t={};for(let r of Object.keys(e))yb.has(r)&&e[r]!==void 0&&(t[r]=e[r]);return t}import{mkdirSync as Sb,appendFileSync as wb}from"fs";import{join as Ed}from"path";function Id(e,t,r,n,o=mt){let i=Ed(o,"tcg",e&&e.length>0?e:"pending"),s=Ed(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
|
+
`;Sb(i,{recursive:!0}),wb(s,f)}catch{}return s}var We=D(G(),1);async function kb(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 _d(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function Pd(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"),[P,U]=(0,be.useState)(null),[B,F]=(0,be.useState)(null),[H,$]=(0,be.useState)(null),[z,fe]=(0,be.useState)(0),[oe,ie]=(0,be.useState)(!1),Y=(0,be.useRef)(null),pe=(0,be.useRef)(()=>{}),we=(0,be.useCallback)(()=>kb(o),[o]),me=(0,be.useRef)(null);me.current=t.requestId;let $e=(0,be.useCallback)((Q,ce)=>{let ae=Q.endsWith("_error")?"warn":"info",ne=ms({request_id:me.current??void 0,...ce});i.log(ae,Q,JSON.stringify(ne),ne);try{let le=typeof ne.request_id=="string"&&ne.request_id||me.current||"unknown",Te=Xr(mt,"tcg",le);gs(Te,{recursive:!0}),Rb(Xr(Te,"tcg_tui.log"),`[${new Date().toISOString()}] ${Q} ${JSON.stringify(ne)}
|
|
7
|
+
`)}catch{}},[i]),He=(0,be.useCallback)((Q,ce)=>{let ae=Id(me.current,ce.phase,Q),ne=typeof Q?.status=="number"?Q.status:void 0;$e(`${ce.phase}_error`,{errorCode:`${ce.phase}_failed`,status:ne});let le=ce.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:le}),(0,We.jsx)(a,{color:l.dim,children:`details: ${ae}`})]})),U(null)},[$e,s]),st=(0,be.useRef)(0),Xt=(0,be.useCallback)((Q,ce,ae)=>{try{let ne=Xr(mt,"tcg",me.current??"unknown","bifurcation");gs(ne,{recursive:!0}),Ad(Xr(ne,`${Q}.json`),JSON.stringify({request_id:me.current,ref:ae,...ce},null,2))}catch{}},[]),Tt=wd({scenarios:t.state?.scenarios??[],model:n.model,sessionId:i.sessionId,resolveAuth:we,environment:o?.creds?.getDefaultEnv?.(),enabled:!!t.requestId&&!t.isSessionClosed,log:$e,persist:Xt}),ge=(0,be.useRef)(null);(0,be.useEffect)(()=>{let Q=t.requestId;if(!Q||!t.isSessionClosed&&!t.isTerminal)return;let ce=t.state?.scenarios??[];if(ce.length!==0&&ge.current!==Q){ge.current=Q;try{let ae=Xr(mt,"tcg",Q);gs(ae,{recursive:!0}),Ad(Xr(ae,"request.json"),JSON.stringify({request_id:Q,objective:t.state?.objective,headline:t.state?.headline,scenarios:ce,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,ce=1500)=>{$(Q),Y.current&&clearTimeout(Y.current),Y.current=setTimeout(()=>{$(null),Y.current=null},ce)},[]);(0,be.useEffect)(()=>()=>{Y.current&&clearTimeout(Y.current)},[]);let $t=(0,be.useCallback)((Q,ce)=>{let ae=o.getResolver();if(!ae)return{ok:!1,error:"Not logged in \u2014 use /login"};let ne=gd({env:o.creds.getDefaultEnv(),resolver:ae,projectId:Q??n.project_id??void 0,folderId:ce??n.folder_id??void 0,log:(le,Te,dt,I)=>i.log(le,Te,"",ms(I??{}))});return ne.ok?{ok:!0,conn:ne.conn}:{ok:!1,error:ne.error}},[o,n,i]),Oe=(0,be.useRef)(!1),Le=(0,be.useRef)(null),[zt,Me]=(0,be.useState)(!1),Kt=(0,be.useCallback)((Q,ce,ae,ne,le)=>{let Te=process.cwd(),{paths:dt,promptText:I}=Cd(Q,Te);return Sc({promptText:I,filePaths:dt,cwd:Te,scenarios:t.state?.scenarios??[],isRefine:ce,conn:ae,deps:{validate:yc,upload:(L,K,q)=>wc(L,K,q,{signal:le}),buildMappings:Tc},onValidated:ne})},[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 kr=(0,be.useCallback)(async Q=>{U(null),F(null),ie(!1);let ce=Q.trim();if(!ce)return;if(ce.startsWith("/")){pe.current(ce),fe(L=>L+1);return}let ae=n.project_id??null,ne=n.folder_id??null;if(p){let L=await p();if(L)ae=L.projectId,ne=L.folderId;else if(x){let K=x.load();ae=K.project_id??ae,ne=K.folder_id??ne}}else if(x){let L=x.load();ae=L.project_id??ae,ne=L.folder_id??ne}if(!ae||!ne){F("Set a project and folder first \u2014 use /config");return}let le=$t(ae,ne);if(!le.ok){U(le.error);return}if(Oe.current)return;Oe.current=!0;let Te=new AbortController;Le.current=Te;let dt=le.conn,I;try{I=await Kt(ce,!1,dt,()=>{s((0,We.jsx)(b,{marginTop:1,children:(0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${ce}`})})),Me(!0)},Te.signal)}catch(L){if(L instanceof Ai){F(L.errors.join(`
|
|
8
|
+
`));return}if(_d(L))return;He(L,{phase:"upload"});return}finally{Oe.current=!1,Me(!1),Le.current===Te&&(Le.current=null)}if(!Te.signal.aborted){for(let L of I.warnings)e.emitFeedback("ok","/generate",L,void 0,l.generateAccent);f(),t.reset(),g();try{let L=w??{};await t.startWith(dt,{prompt:I.promptText,attachments:I.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,$t,Kt,e,p,x,w,s,f,g,He]),Kr=(0,be.useCallback)(()=>U(null),[]),Cr=(0,be.useCallback)(async Q=>{let ce=$t();if(!ce.ok){U(ce.error);return}if(Oe.current)return;Oe.current=!0;let ae=new AbortController;Le.current=ae;let ne;try{ne=await Kt(Q,!0,ce.conn,()=>{s((0,We.jsx)(a,{color:l.generateAccent,bold:!0,children:`\u276F ${Q}`})),st.current+=1,$e("tcg_refine",{turnIndex:st.current}),Me(!0)},ae.signal)}catch(le){if(le instanceof Ai){F(le.errors.join(`
|
|
9
|
+
`));return}if(_d(le))return;He(le,{phase:"upload"});return}finally{Oe.current=!1,Me(!1),Le.current===ae&&(Le.current=null)}if(!ae.signal.aborted){for(let le of ne.warnings)e.emitFeedback("ok","/generate",le,void 0,l.generateAccent);try{await t.chat(ne.promptText,{mappings:ne.mappings,attachments:ne.attachments})}catch(le){He(le,{phase:"chat"})}}},[s,t,$e,$t,Kt,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(ce){He(ce,{phase:"chat"})}finally{Oe.current=!1}}},[s,t,He]),hr=(0,be.useCallback)(Q=>{let ce=Ro(Q);if(ce?.command==="view"){let ae=Q.trim().split(/\s+/).slice(1)[0];if(t.state.scenarios.length===0){e.emitFeedback("ok","/view","(no generation yet)");return}let ne=vd(ae);if(ne.level==="cases"&&ne.scenarioIdx>=t.state.scenarios.length){e.emitFeedback("error","/view",`No scenario S${ne.scenarioIdx+1}`);return}e.openBrowse(ne);return}if(ce?.command==="save"){let ae=t.state.scenarios;if(ae.length===0){e.emitFeedback("error","/save","Nothing to save yet.");return}let ne=Sd(ae,e.excluded),le=ne.reduce((L,K)=>L+(K.test_cases??[]).filter(Ut).length,0);if(le===0){e.emitFeedback("error","/save",yd(ae,e.excluded)===0?"All cases removed \u2014 nothing to save.":"No functional test cases to save.");return}let Te={...t.state,scenarios:ne},dt=Q.trim().split(/\s+/).slice(1)[0],I=dt?Tb(process.cwd(),dt):process.cwd();ie(!0),e.freezeTcgArtifact(),(async()=>{let L=ne.flatMap(de=>(de.test_cases??[]).filter(Ut)),K=Date.now()+3e4;for(;Date.now()<K&&L.some(de=>Tt.getStatus(de.id)==="pending");)await new Promise(de=>setTimeout(de,250));let q=new Map;for(let de of L)q.set(de.id,Tt.getStatus(de.id)==="done"?Tt.getResult(de.id):void 0);t.end();let te=0,Ae=de=>{let St=q.get(de.id);return St?mc(St,de):(te++,gc(de))};try{let de=await hc(Te,I,{},Ae);$e("tcg_save",{savedCount:de.paths.length,fellBack:te})}catch(de){e.emitFeedback("error","/save",`Save failed: ${de.message}`);return}let Je=`test case${le===1?"":"s"}`;e.emitFeedback("ok","/save",te>0?`Saved ${le} ${Je} \xB7 ${te} fell back to raw steps.`:`Saved ${le} ${Je}.`)})();return}ce?.command==="new"&&ie(!1),u(Q)},[u,e,t,Tt,$e]);pe.current=hr;let Rt=(0,be.useCallback)(Q=>{m(Q),fe(ce=>ce+1)},[]),br=(0,be.useCallback)(Q=>{let ce=c==="generate"&&Q==="run",ae=c==="run"&&Q==="generate",ne=hd({requestId:t.requestId,isSessionClosed:t.isSessionClosed,turnActive:t.turnActive,saved:oe}),le=bd({isRunning:e.runner.isRunning,hasLiveResults:e.runner.lastRunEnd!=null});return ce&&ne?(e.openSwitchConfirm("run"),!1):ae&&le?(e.openSwitchConfirm("generate"),!1):(Rt(Q),!0)},[c,t.requestId,t.isSessionClosed,t.turnActive,oe,e,Rt]),Er=(0,be.useCallback)(async Q=>{c==="generate"?(e.freezeTcgArtifact(),await t.end().catch(()=>{}),t.reset(),ie(!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"})]}))),Rt(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,Rt]),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:P,tcgValidationError:B,composeIdleHint:H,inputClearSeq:z,submitting:zt,handleGenerateSubmit:kr,onRefine:Cr,onClarificationAnswer:gr,onSlash:hr,onClearError:Kr,flashComposeHint:ut,setInputClearSeq:fe,setChatMode:m,setTcgError:U,setTcgValidationError:F,generateSaved:oe,requestSwitch:br,confirmSwitch:Er,cancelGenerate:vr,bifurcation:Tt,tcgLog:$e}}var Gt=D(Ee(),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 Cb=(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:Cb(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 Dd(e){let[t,r]=(0,Gt.useState)(null),[n,o]=(0,Gt.useReducer)((p,x)=>hs(p,x,e),_o({level:"scenarios"})),[i,s]=(0,Gt.useState)(new Set),u=(0,Gt.useCallback)(p=>{r(p),o({type:"open",target:p})},[]),f=(0,Gt.useCallback)(()=>r(null),[]),g=(0,Gt.useCallback)(p=>{s(x=>{let c=new Set(x);return c.has(p)?c.delete(p):c.add(p),c})},[]),w=(0,Gt.useCallback)(p=>{s(x=>{let c=new Set(x),m=p.length>0&&p.every(P=>c.has(P));return p.forEach(P=>m?c.delete(P):c.add(P)),c})},[]);return{target:t,open:u,close:f,isOpen:t!=null,state:n,excluded:i,toggleCase:g,toggleScenario:w}}var Po=D(Ee(),1);function Ld(){return{committedChat:0,committedThinking:0,prevTurnActive:!1}}function Bd(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(G(),1);function Eb(e){return e.kind==="thinking-summary"?(0,bs.jsx)(a,{color:l.dim,children:e.text}):(0,bs.jsx)(Rc,{text:e.text})}function $d(e,t,r){let n=(0,Po.useRef)(Ld());(0,Po.useEffect)(()=>{let{items:o,next:i}=Bd(n.current,e,t);n.current=i;for(let s of o)r(Eb(s))})}var Xe=D(Ee(),1);import{readFileSync as Ib,writeFileSync as Ab,renameSync as _b,mkdirSync as Pb}from"fs";import{dirname as Db}from"path";var vs=1,Od=()=>({schemaVersion:vs,numStartups:0,perHint:{}}),Do=class{constructor(t=Fs){this.path=t;this.data=this.read()}data;read(){try{let t=JSON.parse(Ib(this.path,"utf-8"));return t.schemaVersion!==vs?Od():{schemaVersion:vs,numStartups:typeof t.numStartups=="number"?t.numStartups:0,perHint:t.perHint??{}}}catch{return Od()}}write(){try{Pb(Db(this.path),{recursive:!0});let t=`${this.path}.tmp`;Ab(t,JSON.stringify(this.data,null,2)+`
|
|
10
10
|
`),_b(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 Lb,writeFileSync as Bb,renameSync as $b,mkdirSync as Ob}from"fs";import{dirname as Nb}from"path";var Nd=1,Mb=3600*1e3;function Md(e,t=Date.now()){return e!==null&&t-e.fetchedAt<Mb}function jd(e,t=fi(e)){try{let r=JSON.parse(Lb(t,"utf-8"));if(r.wrapperVersion!==Nd)return null;let{catalog:n}=bo(r.catalog);return n?{catalog:n,fetchedAt:typeof r.fetchedAt=="number"?r.fetchedAt:0}:null}catch{return null}}function Vd(e,t,r=fi(e)){try{Ob(Nb(r),{recursive:!0});let n={wrapperVersion:Nd,writtenByVersion:xt,fetchedAt:Date.now(),catalog:t},o=`${r}.tmp`;Bb(o,JSON.stringify(n,null,2)+`
|
|
12
12
|
`),$b(o,r)}catch(n){process.stderr.write(`[hints] Failed to save catalog cache: ${n instanceof Error?n.message:String(n)}
|
|
@@ -19,8 +19,8 @@ import{a as pi,b as Us}from"./chunk-3MSXQU2C.js";import{a as ua,b as da,c as fa,
|
|
|
19
19
|
`)}:null}async function*hf(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=sv(o.slice(0,u));if(o=o.slice(u+2),f&&(yield f,f.type==="done"))return}}}finally{await r.cancel().catch(()=>{})}}var av=50,cv=3;function bf(){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+cv))})},av);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 hf({...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 vf({resolve:e,hostIsTTY:t}){let r=bf(),n=(0,Uo.useRef)(0),o=(0,Uo.useCallback)(i=>{if(!t())return;let s=e();if(!s)return;let u;try{u=lv(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}),xf=(e,t)=>e?{kind:"switch",env:t}:{kind:"logout"};function yf(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 Sf(e){return Or()?[{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 wf(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=Jn(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 Rf(e){return{label:"Mobile",entries:[{key:"Default device",value:e?.default_target?`${e.default_target.id} (${e.default_target.platform} \xB7 ${e.default_target.kind})`:"(none)"},{key:"Default app",value:e?.default_app??"(none)"}]}}function Tf(e){return e.isRunning?"refused-running":e.hasRuns?e.isTesting&&!e.hasName?"needs-name":"proceed":"no-runs"}async function kf(e){await new cn(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(G(),1);function XC({localMode:e=!1,codeExport:t,codeLanguage:r,skipCodeValidation:n,updatePromise:o,migrationResult:i,sessionName:s,initialChatMode:u,initialObjective:f,initialGenerateLimits:g}={}){js();let w=(0,T.useRef)(new Yn),[p,x]=(0,T.useState)(0),c=w.current,[m]=(0,T.useState)(()=>new Vr),P=(0,T.useRef)(0),U=(0,T.useCallback)(()=>`msg-${++P.current}`,[]),[B,F]=(0,T.useState)(!1),[H,$]=(0,T.useState)(null),[z,fe]=(0,T.useState)(!1),[oe,ie]=(0,T.useState)(0),[Y,pe]=(0,T.useState)(!1),[we,me]=(0,T.useState)(null),[$e,He]=(0,T.useState)(null),st=(0,T.useRef)(null),[Xt,Rt]=(0,T.useState)(null),[ge,ut]=(0,T.useState)(null),[$t,Oe]=(0,T.useState)(Qn()),[Le,zt]=(0,T.useState)(null),[Me,Kt]=(0,T.useState)([]),[mr,kr]=(0,T.useState)(!1),[Kr,Cr]=(0,T.useState)(!1),[gr,hr]=(0,T.useState)(null),[Tt,br]=(0,T.useState)(null),[Er,vr]=(0,T.useState)(null),[Q,ce]=(0,T.useState)(null),ae=(0,T.useRef)(null),ne=(0,T.useRef)(null),le=(0,T.useRef)(0),Re=(0,T.useRef)(null),dt=(0,T.useRef)(!1),I=(0,T.useRef)(null),L=(0,T.useRef)(Pa()),K=(0,T.useRef)(null),q=(0,T.useRef)(!1),te=(0,T.useRef)(""),Ae=(0,T.useRef)(null),Je=(0,T.useRef)(null),de=(0,T.useRef)({}),St=(0,T.useRef)(null),{append:bt}=Gs(),ke=(0,T.useCallback)(d=>bt((0,k.jsx)(b,{paddingX:1,children:d})),[bt]),[rr,Ot]=(0,T.useState)("booting"),[Cf,Ef]=(0,T.useState)([]),[If,Ho]=(0,T.useState)(!1),[ys,Af]=(0,T.useState)(!1),[kn,_f]=(0,T.useState)("chat"),[Nt,xr]=(0,T.useState)(null),[Cn,Ss]=(0,T.useState)(null),[Yr,ws]=(0,T.useState)(!1),[Jr,En]=(0,T.useState)(!1),Rs=(0,T.useRef)(()=>{}),Pf=(0,T.useCallback)((d,h)=>Rs.current(d,h),[]),xe=md({log:Pf});$d(xe.state,xe.turnActive,ke);let Go=(0,T.useRef)(!1),nr=(0,T.useCallback)(()=>{Go.current||xe.state.scenarios.length!==0&&(Go.current=!0,ke((0,k.jsx)($o,{scenarios:xe.state.scenarios,activeSid:null})))},[xe.state.scenarios,ke]);(0,T.useEffect)(()=>{xe.isSessionClosed&&nr()},[xe.isSessionClosed,nr]);let[In,Qr]=(0,T.useState)(null),[Pe,Wo]=(0,T.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Df=mi(),Lf=mi(qs),y=Qu(),An=Zu(),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:zt,identityServicesRef:ne,screenshotQueueRef:ae},exit:{registerCleanup:Vt,setExitRemoteLogger:ta},options:{skipScreenshotQueue:e}}),[y.initResolver,y.getResolver,y.getBasicAuth,y.getToken,Le,e]),Bf=(0,T.useCallback)((d,h,S,R)=>{let v=ae.current;if(!v)return;if(Re.current&&R){L.current.track(Da(Re.current.packTestDir,R,v,(j,M,Z,Se)=>c.log(j,M,Z,Se)));return}let E=le.current+h;La(c.sessionDir,E,d,v,(j,M,Z,Se)=>c.log(j,M,Z,Se),S)},[c]),$f=(0,T.useCallback)((d,h,S)=>{c.logStep(d,h,S)},[c]),Of=(0,T.useCallback)(d=>St.current?.setStepText(d),[]),Nf=(0,T.useCallback)(()=>St.current?.setStepComplete(),[]),{describe:Zr,onDescribe:Mf,creditsRef:Xo}=vf({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=wa(Bf,$f,Of,Nf,Mf);(0,T.useEffect)(()=>{O.isRunning||Zr.stop()},[O.isRunning,Zr.stop]);let[C,Ce]=(0,T.useState)(()=>m.load()),A=Lu({getDefaults:()=>m.getMobile(),setDefaults:d=>{m.setMobile(d),Ce(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,E=await oa({appId:d,baseUrl:an(ye),auth:{username:R.username,accessKey:R.access_key},onProgress:h,...v?{accepts:v==="emulator"?[".apk"]:[".zip"]}:{}});return{name:E.name,fromStore:E.fromStore}},appLabelFor:async d=>{try{return(await new na().find(d))?.name}catch{return}}}),zo=(0,T.useRef)(null);zo.current=A.kind;let Ir=Vs(C.mobile?.tui_target,C.mobile?.default_target?.kind),Ar=Ir.kind==="emulator"||Ir.kind==="simulator",jf=(0,T.useCallback)(async d=>{let h=process.cwd(),S=await Uu(h,d),R=await Promise.all(S.map(async j=>{let M=await qu(tr(h,j),A.target);return{kind:"artifact",value:j,label:j,selectable:Fu(M),...M.state==="compatible"?{}:{reason:M.reason}}})),v=d.toLowerCase(),E=A.target?A.apps.filter(j=>!v||j.toLowerCase().includes(v)).map(j=>({kind:"installed",value:j,label:j})):[];return[...R,...E]},[A.apps,A.target]),Ts=A.phase==="checking"||A.phase==="doctor"||A.phase==="chooser"||A.phase==="confirm"||A.phase==="appSource"||A.phase==="appList"||A.phase==="appId"||A.phase==="picking"||A.phase==="apps",or=(0,T.useRef)(null),Ko=(0,T.useRef)(null),[ft,ks]=(0,T.useState)(null),_r=(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.`,[]),Vf=(0,T.useRef)(new Map),Cs=(0,T.useRef)(new Set),Es=(0,T.useRef)(null),[Pr,Is]=(0,T.useState)(null),[,Ff]=(0,T.useState)(0),vt=(0,T.useCallback)(()=>Ff(d=>d+1),[]),[V,je]=(0,T.useState)(null),Dr=y.creds.getActiveProfile(),ye=y.creds.getDefaultEnv(),Uf=Hu({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}),Ce(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),E=new cn(v.tmsBaseUrl,R.username,R.access_key);try{let M=(await E.listProjects()).find(Se=>Se.name==="KaneAI Generated");if(M)return{id:M.project_id,name:M.name};let Z=await E.createProject("KaneAI Generated");return{id:Z.id,name:Z.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),E=new cn(v.tmsBaseUrl,R.username,R.access_key);try{let M=(await E.listFolders(h)).find(Se=>Se.name==="Untitled");if(M)return{id:M.id,name:M.name};let Z=await E.createFolder(h,"Untitled");return{id:Z.id,name:Z.name}}catch{return null}},[y]);(0,T.useEffect)(()=>{z||(c.start({model:C.model,environment:ye,profile:Dr}),s&&c.setSessionName(s),fe(!0))},[c,z,C.model,ye,Dr,s]);let As=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!z||As.current)return;As.current=!0;let d=s?[{label:"session",value:s},{label:"test",value:pi(tr(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:pi(tr(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];ke((0,k.jsx)(hi,{title:"Recording",titleColor:"#ff9500",rows:d}))},[z,s,ke]);let _s=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!B||_s.current||!z)return;_s.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}Ft({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 ir=(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}),zt(d)):c.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),d},[y,Le,c]),_n=(0,T.useCallback)(d=>{ke((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>"})]})}]}))},[ke]),Pn=(0,T.useCallback)(async()=>{let d=await ir();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 ha({creds:y.creds,config:m,profile:h,env:S,tmsCreds:{username:d.username,access_key:d.access_key},isLocal:e,log:(v,E,j,M)=>c.log(v,E,j,M),onAnnounce:_n});return R.status==="ok"?{projectId:R.projectId,folderId:R.folderId}:null},[ir,m,c,y.creds,e,_n]),he=(0,T.useCallback)(d=>{let h=U(),S={...d,id:h};ke((0,k.jsx)(Au,{entry:S}))},[U,ke]),N=(0,T.useCallback)((d,h,S,R,v)=>{ke((0,k.jsx)(ad,{status:d,command:h,message:S,details:R,accentColor:v})),h==="/save"&&d==="ok"&&ke((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."]})}))},[ke]),Ps=(0,T.useRef)(()=>{}),sr=Dd(xe.state.scenarios.map(d=>(d.test_cases??[]).length)),qf=(0,T.useCallback)(async()=>{let d=await Pn();return Ce(m.load()),d},[Pn,m]),Pt=Pd({tcg:xe,initialChatMode:u,tuiConfig:C,auth:y,session:c,runner:O,appendStatic:ke,handleInput:d=>Ps.current(d),freezeTcgArtifact:nr,rearmArtifactFreeze:()=>{Go.current=!1},openSwitchConfirm:d=>Qr({reason:"switch",to:d}),emitFeedback:N,excluded:sr.excluded,openBrowse:sr.open,initialGenerateLimits:g,ensureProjectAndFolder:qf,config:m});Rs.current=Pt.tcgLog;let{chatMode:Ne,tcgError:fv,tcgValidationError:pv,composeIdleHint:mv,inputClearSeq:Hf,handleGenerateSubmit:Gf,flashComposeHint:Dn,setTcgError:gv}=Pt,Wf=C.hints_enabled!==!1&&process.env.KANEAI_HINTS_DISABLED!=="1"&&!!process.stdout.isTTY&&!!process.stdin.isTTY&&process.env.KANE_SCREEN_READER!=="1",Ds=(0,T.useRef)(!1);Ne==="generate"&&(Ds.current=!0);let{footerHint:Xf}=Wd({enabled:Wf,ready:rr==="ready",env:ye,config:C,tokenValid:y.tokenValid,chatMode:Ne,sessionUsedGenerate:Ds.current,log:(d,h,S,R)=>w.current.log(d,h,S,R)}),yr=(0,T.useCallback)(async(d,h,S)=>{let R=A.device,v=S??(Ar?"mobile":"web"),E=v==="mobile"?"device":"web",j=E==="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:A.phase,parked:!!or.current});let M=j?Ou(d):{objective:d,token:null};if(j&&M.token&&!M.objective){he({type:"error",text:`@${M.token}: add an objective after the app token.`});return}if(!ft&&!M.token&&!h&&!Cs.current.has(d)){let ue=y.getResolvedBasicAuth(),_e=ue?null:await y.getToken(),Ve=ue?yi(ue.username,ue.access_key):_e?`Bearer ${_e}`:null;if(Ve){let Ze=await Wu({objective:d,sessionTarget:v,controllerBaseUrl:Ge(ye).controllerBaseUrl,authHeader:Ve,cache:Vf.current});c.log("info","CLASSIFY_VERDICT","Objective classified",{session_target:v,target:Ze?.target??null,confidence:Ze?.confidence??null});let Lt=Xu(Ze,v);if(Lt.kind==="mismatch"){Is({objective:d,url:h,suggested:Lt.suggested,verdict:Lt.verdict});return}}}if(j&&!R){or.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),A.begin();return}let Z=R;if(j&&M.token){let ue=aa(M.token);if(!ue){he({type:"error",text:`@${M.token}: ${sa}`});return}let _e=await A.bindAppForRun(ue);if(!_e.ok){he({type:"error",text:`@${M.token}: ${_e.error}`});return}Z=_e.device}else if(j){if(!R?.app_package){or.current=d,he({type:"info",text:"Choose the app under test\u2026"}),A.requestAppSource();return}let ue=await A.validateBinding();if(!ue.ok){or.current=d,he({type:"info",text:ue.reason}),ue.step==="device"?A.begin("reinit"):A.requestAppSource();return}}let Se=j?M.objective:d,Te=q.current?null:Oa({flag:h,configDefault:C.default_url}),Qe=ec({objective:Se,globalDir:tr(mt,"variables"),localDir:tr(process.cwd(),".testmuai","variables")}),Sr=c.nextRunIndex();le.current=Sr,te.current=Qe.auteurObjective,Xo.current=0,c.logRunStart(Sr,Qe.auteurObjective,Te??""),c.setFirstRun(Qe.auteurObjective,Te??"");let Vn=y.getResolvedBasicAuth(),Dt=Vn,Mt=null;if(!Dt&&(Mt=await y.getToken(),!Mt)){he({type:"error",text:"Not authenticated. Run /login first."});return}let Lr={basicAuth:Vn??null,token:Mt,resolver:y.getResolver(),resolvedCreds:null};Ae.current=Lr;let en=y.creds.getActiveProfile()??"default",tn=y.creds.getDefaultEnv();ga(y.creds,m,en,tn,(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze));let Fn=m.load();if(Ce(Fn),j){if(!Z){or.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),A.begin();return}if(!Z.app_package){or.current=d,he({type:"info",text:"Choose the app under test\u2026"}),A.requestApp();return}}let Ue;try{Ue=await Ka(E,{prepareDevice:async()=>{let ue=M.token??Z.app_package,_e=!M.token&&ue&&Z.udid?await $u({udid:Z.udid,app:ue,runnerGen:O.sessionGen}):null,Ve=Ko.current;if(_e&&Ve&&Ve.key===_e)return he({type:"info",text:`Device ready: ${Ve.device.app_package} on ${Ve.displayName} (reusing session)`}),{device:Ve.device,...Ve.appRef?{appRef:Ve.appRef}:{},...Ve.appId?{appId:Ve.appId}:{}};let Ze=await ir(),Lt=y.getResolvedBasicAuth(),pt=await la({...Z.udid?{device:Z.udid}:{},...Z.platform?{platform:Z.platform}:{},...M.token?{app:M.token}:Z.app_package?{app:Z.app_package}:{},defaults:C.mobile,interactive:!1,onProgress:ui=>Rt(ui),...Lt?.username&&Lt.access_key&&Ze?.org_id?{cloudUpload:{env:ye,orgId:String(Ze.org_id),userId:String(Ze.user_id??""),baseUrl:an(ye),auth:{username:Lt.username,accessKey:Lt.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 ue=await An.ensureChrome(Te??void 0);c.logChromeLaunch(ue.port,ue.cdpEndpoint);let _e=Sa({headless:Pe.headless,cdpEndpoint:ue.cdpEndpoint,chromePid:ue.process.pid});return _e&&(St.current=_e,Vt("marker-overlay",()=>_e.kill())),{cdpEndpoint:ue.cdpEndpoint,instance:ue,tempDir:null}}})}catch(ue){let _e=E==="device"?ue instanceof Error?ue.message:String(ue):xa(ue);he({type:"error",text:_e});return}finally{Rt(null)}let Un=Ue.kind==="web"?Ue.chrome:{instance:null,tempDir:null};if(Sr===0&&!e){c.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let ue=await Pn(),_e=m.load();Ce(_e);let Ve=Ge(ye),Ze=Dt?{username:Dt.username,access_key:Dt.access_key}:await ir();if(Ze){let Lt=await ic({tmsBaseUrl:Ve.tmsBaseUrl,auth:{username:Ze.username,access_key:Ze.access_key},objective:Qe.auteurObjective,url:Te??"",projectId:ue?.projectId??_e.project_id??"",folderId:ue?.folderId??_e.folder_id??"",hasCustomProfile:!!C.chrome_profile_path,...Ue.kind==="device"?{mobile:oc({platform:Ue.device.platform,appId:Ue.appId,deviceName:A.target?.displayName,osVersion:A.target?.osVersion,udid:Ue.device.udid})}:{},log:(pt,ui,ep,tp)=>c.log(pt,ui,ep,tp)});Lt&&(c.setTestId(Lt),ue?.projectId&&c.setProjectId(ue.projectId))}}c.setAuteurVariables(Qe.auteur),Je.current=Qe;let li=Dt&&!e?await tc({variables:Qe,auth:Dt,orgId:String((await ir())?.org_id??""),env:ye,localMode:e,log:(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze)}):{};de.current=li;let qn=Ei(tr(mt,"global-memory.md")),cr=Ei(tr(process.cwd(),".testmuai","context.md"));if(Sr===0){let ue={mode:C.mode,max_steps:Pe.maxSteps,timeout:Pe.timeout>0?Pe.timeout:void 0,target:Ya(Ue,{cdpEndpoint:Pe.cdpEndpoint||void 0,wsEndpoint:Pe.wsEndpoint||void 0}),app:Ja(Ue),os_version:Ue.kind==="device"?A.target?.osVersion: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:qn??void 0,local_context:cr??void 0,variables:Object.keys(Qe.auteur).length>0?Qe.auteur:void 0};c.setResolvedGlobal(ue)}dt.current||(dt.current=!0,Re.current=await ka({objectiveOrName:c.sessionName??d,sessionId:c.sessionId,title:c.sessionName??d,producerVersion:xt,pid:process.pid,surfaces:Te?[Te]:void 0,packRootDir:tr(c.sessionDir,"evidence")})),I.current||(I.current=Ta(Un.cdpEndpoint),I.current());let Hn=Za(Qe.auteur,Qe.auteurObjective),Zf=Qa({objective:Qe.auteurObjective,url:Ue.kind==="device"?void 0:Te??void 0,requireStartUrl:Ue.kind==="web"&&!q.current&&Te===null,model:C.model,chrome:Un,auth:Lr,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(Hn).length>0?Hn:void 0,globalContext:qn??void 0,localContext:cr??void 0,sessionContext:c.getContext(),device:Ue.kind==="device"?Ue.device:void 0,evidence:Ca(Re.current)});Te&&$(Te),me(null),K.current=null,ks({kind:j?"mobile":"web",label:Ue.kind==="device"?rn(Ue.device.target_kind==="simulator"?"simulator":"emulator"):"Desktop"}),O.startRun(Zf,{environment:ye,mode:C.mode,assertionMode:C.assertion_mode,log:(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze)}),ie(ue=>ue+1)},[y,An,m,C,c,ye,O,he,Pe,Pn,ir,Ar,ft,A.device,A.target,A.begin,A.requestApp,A.requestAppSource,A.validateBinding,A.bindAppForRun]),Ln=(0,T.useCallback)(d=>{let h=Pr;if(h){if(Is(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(Cs.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}),Ce(m.load()),A.reset(),he({type:"info",text:"Session target: Desktop (Chrome)"}),yr(h.objective,h.url,"web");return}Es.current=h.verdict.appHint??null,or.current=h.objective,A.begin(d==="pick"?"reinit":"confirm")}},[Pr,c,he,yr,m,A]);Bu({phase:A.phase,device:A.device,requestApp:A.requestAppSource,pendingRef:or,dispatch:d=>{yr(d)},notify:he,onSettle:()=>{Es.current=null}});let zf=(0,T.useCallback)(async d=>{let h=uv(d),S=Ha(h),R=new Yn;for(let Te of S.warnings)R.log("warn","RESOLVER_WARNING",Te);let v=y.getResolvedBasicAuth(),E=null;v||(E=await y.getToken());let j={basicAuth:v??null,token:E,resolver:y.getResolver(),resolvedCreds:null},M=ye,Z=Ge(M),Se=y.creds.getActiveProfile()??"default";return{path:h,cwd:process.cwd(),opts:{},isAgent:!1,disableAskUser:!0,resolved:S,resolvedAuth:j,cliOverrides:{},environment:M,envConfig:Z,profile:Se,model:"v16-alpha",creds:y.creds,configStore:m,session:R,skipGlobalRemoteLogger:!0,onAnnounce:_n}},[y,m,ye,_n]),Ie=pd({buildInput:zf,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,q.current=!0;let{status:d,duration:h,summary:S,reason:R,context:v}=O.lastRunEnd,{passed:E,failed:j,total:M}=Ra(O.steps);ei.current+=M,ti.current+=h??0;let Z=O.lastRunEnd?.credits_consumed,Se=Z!=null||Xo.current>0?(Z??0)+Xo.current:void 0;me({status:d,duration:h??0,summary:S??"",stepsPassed:E,stepsFailed:j,stepsTotal:M,reason:R,finalState:O.lastRunEnd?.final_state,creditsConsumed:Se}),c.logRunEnd(le.current,d,h,S,O.lastRunEnd?.result_code);let Te=O.bifurcationInfo,Qe=Te&&!Te.isSingleFlow?Te.flows:null,Sr=pa(O.lastRunEnd,le.current,Qe),Vn=ma(O.lastRunEnd,te.current,le.current,Sr);c.addRunResult(Vn,O.lastRunEnd?.total_runs),Ri(Re.current,O.getEvidenceState(),O.lastRunEnd);let Dt=O.lastRunEnd?.per_flow_metadata;if(Te&&!Te.isSingleFlow&&Dt&&Dt.length>1)for(let Mt=0;Mt<Dt.length;Mt++){let Lr=Dt[Mt],en=O.steps[Mt],tn=en?.children??[],Fn=tn.filter(cr=>cr.status==="passed").length,Ue=tn.filter(cr=>cr.status==="failed").length,Un=tn.reduce((cr,Hn)=>cr+(Hn.duration??0),0),li=en?.status==="failed"?"failed":"passed",qn=Te.flows[Mt]??en?.objective??te.current;c.addFlow({runIndex:le.current,flowId:Te.flows[Mt],objective:qn,status:li,summary:Lr.summary??"",duration:Un,steps:Fn+Ue,stepsPassed:Fn,stepsFailed:Ue,reason:Lr.error_message??void 0,creditsConsumed:Lr.credits_consumed??void 0})}else c.addFlow({runIndex:le.current,objective:te.current,status:d,summary:S??"",duration:h??0,steps:M,stepsPassed:E,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(we&&!O.isRunning&&O.lastRunEnd){if(ni.current===O.lastRunEnd)return;ni.current=O.lastRunEnd,ke((0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(pf,{status:we.status,steps:we.stepsTotal,duration:we.duration,creditsConsumed:we.creditsConsumed,reason:we.reason}),(0,k.jsx)(mf,{})]})),me(null)}},[we,O.isRunning,O.lastRunEnd,ke]);let Ls=(0,T.useRef)(null);(0,T.useEffect)(()=>{if(Ie.runSummary&&!Ie.running){if(Ls.current===Ie.runSummary)return;Ls.current=Ie.runSummary,(Ie.summary||Ie.links)&&ke((0,k.jsxs)(b,{flexDirection:"column",children:[Ie.summary&&(0,k.jsx)(Xa,{data:Ie.summary}),Ie.links&&(0,k.jsx)(Zn,{...Ie.links,autoExit:!1})]}))}},[Ie.runSummary,Ie.running,Ie.summary,Ie.links,ke]),(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&&K.current!==O.runError&&(K.current=O.runError,Ri(Re.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}),xf=(e,t)=>e?{kind:"switch",env:t}:{kind:"logout"};function yf(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 Sf(e){return Or()?[{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 wf(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=Jn(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 Tf(e){return{label:"Mobile",entries:[{key:"Default device",value:e?.default_target?`${e.default_target.id} (${e.default_target.platform} \xB7 ${e.default_target.kind})`:"(none)"},{key:"Default app",value:e?.default_app??"(none)"}]}}function Rf(e){return e.isRunning?"refused-running":e.hasRuns?e.isTesting&&!e.hasName?"needs-name":"proceed":"no-runs"}async function kf(e){await new cn(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(G(),1);function XC({localMode:e=!1,codeExport:t,codeLanguage:r,skipCodeValidation:n,updatePromise:o,migrationResult:i,sessionName:s,initialChatMode:u,initialObjective:f,initialGenerateLimits:g}={}){js();let w=(0,R.useRef)(new Yn),[p,x]=(0,R.useState)(0),c=w.current,[m]=(0,R.useState)(()=>new Vr),P=(0,R.useRef)(0),U=(0,R.useCallback)(()=>`msg-${++P.current}`,[]),[B,F]=(0,R.useState)(!1),[H,$]=(0,R.useState)(null),[z,fe]=(0,R.useState)(!1),[oe,ie]=(0,R.useState)(0),[Y,pe]=(0,R.useState)(!1),[we,me]=(0,R.useState)(null),[$e,He]=(0,R.useState)(null),st=(0,R.useRef)(null),[Xt,Tt]=(0,R.useState)(null),[ge,ut]=(0,R.useState)(null),[$t,Oe]=(0,R.useState)(Qn()),[Le,zt]=(0,R.useState)(null),[Me,Kt]=(0,R.useState)([]),[mr,kr]=(0,R.useState)(!1),[Kr,Cr]=(0,R.useState)(!1),[gr,hr]=(0,R.useState)(null),[Rt,br]=(0,R.useState)(null),[Er,vr]=(0,R.useState)(null),[Q,ce]=(0,R.useState)(null),ae=(0,R.useRef)(null),ne=(0,R.useRef)(null),le=(0,R.useRef)(0),Te=(0,R.useRef)(null),dt=(0,R.useRef)(!1),I=(0,R.useRef)(null),L=(0,R.useRef)(Pa()),K=(0,R.useRef)(null),q=(0,R.useRef)(!1),te=(0,R.useRef)(""),Ae=(0,R.useRef)(null),Je=(0,R.useRef)(null),de=(0,R.useRef)({}),St=(0,R.useRef)(null),{append:bt}=Gs(),ke=(0,R.useCallback)(d=>bt((0,k.jsx)(b,{paddingX:1,children:d})),[bt]),[rr,Ot]=(0,R.useState)("booting"),[Cf,Ef]=(0,R.useState)([]),[If,Ho]=(0,R.useState)(!1),[ys,Af]=(0,R.useState)(!1),[kn,_f]=(0,R.useState)("chat"),[Nt,xr]=(0,R.useState)(null),[Cn,Ss]=(0,R.useState)(null),[Yr,ws]=(0,R.useState)(!1),[Jr,En]=(0,R.useState)(!1),Ts=(0,R.useRef)(()=>{}),Pf=(0,R.useCallback)((d,h)=>Ts.current(d,h),[]),xe=md({log:Pf});$d(xe.state,xe.turnActive,ke);let Go=(0,R.useRef)(!1),nr=(0,R.useCallback)(()=>{Go.current||xe.state.scenarios.length!==0&&(Go.current=!0,ke((0,k.jsx)($o,{scenarios:xe.state.scenarios,activeSid:null})))},[xe.state.scenarios,ke]);(0,R.useEffect)(()=>{xe.isSessionClosed&&nr()},[xe.isSessionClosed,nr]);let[In,Qr]=(0,R.useState)(null),[Pe,Wo]=(0,R.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Df=mi(),Lf=mi(qs),y=Qu(),An=Zu(),kt=(0,R.useMemo)(()=>({auth:{initResolver:d=>y.initResolver(d,(h,S,T,v)=>w.current.log(h,S,T,v)),getResolver:()=>y.getResolver(),getBasicAuth:()=>y.getBasicAuth(),getToken:()=>y.getToken()},getSession:()=>w.current,log:(d,h,S,T)=>w.current.log(d,h,S,T),state:{getTmsCredsCache:()=>Le,setTmsCredsCache:zt,identityServicesRef:ne,screenshotQueueRef:ae},exit:{registerCleanup:Vt,setExitRemoteLogger:ta},options:{skipScreenshotQueue:e}}),[y.initResolver,y.getResolver,y.getBasicAuth,y.getToken,Le,e]),Bf=(0,R.useCallback)((d,h,S,T)=>{let v=ae.current;if(!v)return;if(Te.current&&T){L.current.track(Da(Te.current.packTestDir,T,v,(j,M,Z,Se)=>c.log(j,M,Z,Se)));return}let E=le.current+h;La(c.sessionDir,E,d,v,(j,M,Z,Se)=>c.log(j,M,Z,Se),S)},[c]),$f=(0,R.useCallback)((d,h,S)=>{c.logStep(d,h,S)},[c]),Of=(0,R.useCallback)(d=>St.current?.setStepText(d),[]),Nf=(0,R.useCallback)(()=>St.current?.setStepComplete(),[]),{describe:Zr,onDescribe:Mf,creditsRef:Xo}=vf({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=wa(Bf,$f,Of,Nf,Mf);(0,R.useEffect)(()=>{O.isRunning||Zr.stop()},[O.isRunning,Zr.stop]);let[C,Ce]=(0,R.useState)(()=>m.load()),A=Lu({getDefaults:()=>m.getMobile(),setDefaults:d=>{m.setMobile(d),Ce(m.load())},resolveAppId:async(d,h)=>{let S=await y.resolveBasicAuth().catch(()=>null),T=S?{username:S.username,access_key:S.access_key}:y.getResolvedBasicAuth();if(!T?.username||!T.access_key)throw new Error("Log in to use an app id, or choose a local build.");let v=zo.current,E=await oa({appId:d,baseUrl:an(ye),auth:{username:T.username,accessKey:T.access_key},onProgress:h,...v?{accepts:v==="emulator"?[".apk"]:[".zip"]}:{}});return{name:E.name,fromStore:E.fromStore}},appLabelFor:async d=>{try{return(await new na().find(d))?.name}catch{return}}}),zo=(0,R.useRef)(null);zo.current=A.kind;let Ir=Vs(C.mobile?.tui_target,C.mobile?.default_target?.kind),Ar=Ir.kind==="emulator"||Ir.kind==="simulator",jf=(0,R.useCallback)(async d=>{let h=process.cwd(),S=await Uu(h,d),T=await Promise.all(S.map(async j=>{let M=await qu(tr(h,j),A.target);return{kind:"artifact",value:j,label:j,selectable:Fu(M),...M.state==="compatible"?{}:{reason:M.reason}}})),v=d.toLowerCase(),E=A.target?A.apps.filter(j=>!v||j.toLowerCase().includes(v)).map(j=>({kind:"installed",value:j,label:j})):[];return[...T,...E]},[A.apps,A.target]),Rs=A.phase==="checking"||A.phase==="doctor"||A.phase==="chooser"||A.phase==="confirm"||A.phase==="appSource"||A.phase==="appList"||A.phase==="appId"||A.phase==="picking"||A.phase==="apps",or=(0,R.useRef)(null),Ko=(0,R.useRef)(null),[ft,ks]=(0,R.useState)(null),_r=(0,R.useCallback)(d=>`Target is locked for this session \u2014 it already ran on ${d.label}. Use /new to start a fresh session and switch.`,[]),Vf=(0,R.useRef)(new Map),Cs=(0,R.useRef)(new Set),Es=(0,R.useRef)(null),[Pr,Is]=(0,R.useState)(null),[,Ff]=(0,R.useState)(0),vt=(0,R.useCallback)(()=>Ff(d=>d+1),[]),[V,je]=(0,R.useState)(null),Dr=y.creds.getActiveProfile(),ye=y.creds.getDefaultEnv(),Uf=Hu({auth:y,env:ye,kind:()=>zo.current}),_t=(0,R.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}),Ce(m.load())},[y.creds,m]),Yo=(0,R.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let T=S.cached??await S.resolve();if(!T)return null;let v=Ge(h),E=new cn(v.tmsBaseUrl,T.username,T.access_key);try{let M=(await E.listProjects()).find(Se=>Se.name==="KaneAI Generated");if(M)return{id:M.project_id,name:M.name};let Z=await E.createProject("KaneAI Generated");return{id:Z.id,name:Z.name}}catch{return null}},[y]),Jo=(0,R.useCallback)(async(d,h)=>{let S=y.getResolver();if(!S)return null;let T=S.cached??await S.resolve();if(!T)return null;let v=Ge(d),E=new cn(v.tmsBaseUrl,T.username,T.access_key);try{let M=(await E.listFolders(h)).find(Se=>Se.name==="Untitled");if(M)return{id:M.id,name:M.name};let Z=await E.createFolder(h,"Untitled");return{id:Z.id,name:Z.name}}catch{return null}},[y]);(0,R.useEffect)(()=>{z||(c.start({model:C.model,environment:ye,profile:Dr}),s&&c.setSessionName(s),fe(!0))},[c,z,C.model,ye,Dr,s]);let As=(0,R.useRef)(!1);(0,R.useEffect)(()=>{if(!z||As.current)return;As.current=!0;let d=s?[{label:"session",value:s},{label:"test",value:pi(tr(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:pi(tr(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];ke((0,k.jsx)(hi,{title:"Recording",titleColor:"#ff9500",rows:d}))},[z,s,ke]);let _s=(0,R.useRef)(!1);(0,R.useEffect)(()=>{if(!B||_s.current||!z)return;_s.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}Ft({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 ir=(0,R.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}),zt(d)):c.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),d},[y,Le,c]),_n=(0,R.useCallback)(d=>{ke((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>"})]})}]}))},[ke]),Pn=(0,R.useCallback)(async()=>{let d=await ir();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(),T=await ha({creds:y.creds,config:m,profile:h,env:S,tmsCreds:{username:d.username,access_key:d.access_key},isLocal:e,log:(v,E,j,M)=>c.log(v,E,j,M),onAnnounce:_n});return T.status==="ok"?{projectId:T.projectId,folderId:T.folderId}:null},[ir,m,c,y.creds,e,_n]),he=(0,R.useCallback)(d=>{let h=U(),S={...d,id:h};ke((0,k.jsx)(Au,{entry:S}))},[U,ke]),N=(0,R.useCallback)((d,h,S,T,v)=>{ke((0,k.jsx)(ad,{status:d,command:h,message:S,details:T,accentColor:v})),h==="/save"&&d==="ok"&&ke((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."]})}))},[ke]),Ps=(0,R.useRef)(()=>{}),sr=Dd(xe.state.scenarios.map(d=>(d.test_cases??[]).length)),qf=(0,R.useCallback)(async()=>{let d=await Pn();return Ce(m.load()),d},[Pn,m]),Pt=Pd({tcg:xe,initialChatMode:u,tuiConfig:C,auth:y,session:c,runner:O,appendStatic:ke,handleInput:d=>Ps.current(d),freezeTcgArtifact:nr,rearmArtifactFreeze:()=>{Go.current=!1},openSwitchConfirm:d=>Qr({reason:"switch",to:d}),emitFeedback:N,excluded:sr.excluded,openBrowse:sr.open,initialGenerateLimits:g,ensureProjectAndFolder:qf,config:m});Ts.current=Pt.tcgLog;let{chatMode:Ne,tcgError:fv,tcgValidationError:pv,composeIdleHint:mv,inputClearSeq:Hf,handleGenerateSubmit:Gf,flashComposeHint:Dn,setTcgError:gv}=Pt,Wf=C.hints_enabled!==!1&&process.env.KANEAI_HINTS_DISABLED!=="1"&&!!process.stdout.isTTY&&!!process.stdin.isTTY&&process.env.KANE_SCREEN_READER!=="1",Ds=(0,R.useRef)(!1);Ne==="generate"&&(Ds.current=!0);let{footerHint:Xf}=Wd({enabled:Wf,ready:rr==="ready",env:ye,config:C,tokenValid:y.tokenValid,chatMode:Ne,sessionUsedGenerate:Ds.current,log:(d,h,S,T)=>w.current.log(d,h,S,T)}),yr=(0,R.useCallback)(async(d,h,S)=>{let T=A.device,v=S??(Ar?"mobile":"web"),E=v==="mobile"?"device":"web",j=E==="device";c.log("info","RUN_TARGET_STATE","Dispatch target resolved",{mobile_mode:j,tui_target:C.mobile?.tui_target??null,device_bound:!!T,app_bound:!!T?.app_package,mobile_phase:A.phase,parked:!!or.current});let M=j?Ou(d):{objective:d,token:null};if(j&&M.token&&!M.objective){he({type:"error",text:`@${M.token}: add an objective after the app token.`});return}if(!ft&&!M.token&&!h&&!Cs.current.has(d)){let ue=y.getResolvedBasicAuth(),_e=ue?null:await y.getToken(),Ve=ue?yi(ue.username,ue.access_key):_e?`Bearer ${_e}`:null;if(Ve){let Ze=await Wu({objective:d,sessionTarget:v,controllerBaseUrl:Ge(ye).controllerBaseUrl,authHeader:Ve,cache:Vf.current});c.log("info","CLASSIFY_VERDICT","Objective classified",{session_target:v,target:Ze?.target??null,confidence:Ze?.confidence??null});let Lt=Xu(Ze,v);if(Lt.kind==="mismatch"){Is({objective:d,url:h,suggested:Lt.suggested,verdict:Lt.verdict});return}}}if(j&&!T){or.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),A.begin();return}let Z=T;if(j&&M.token){let ue=aa(M.token);if(!ue){he({type:"error",text:`@${M.token}: ${sa}`});return}let _e=await A.bindAppForRun(ue);if(!_e.ok){he({type:"error",text:`@${M.token}: ${_e.error}`});return}Z=_e.device}else if(j){if(!T?.app_package){or.current=d,he({type:"info",text:"Choose the app under test\u2026"}),A.requestAppSource();return}let ue=await A.validateBinding();if(!ue.ok){or.current=d,he({type:"info",text:ue.reason}),ue.step==="device"?A.begin("reinit"):A.requestAppSource();return}}let Se=j?M.objective:d,Re=q.current?null:Oa({flag:h,configDefault:C.default_url}),Qe=ec({objective:Se,globalDir:tr(mt,"variables"),localDir:tr(process.cwd(),".testmuai","variables")}),Sr=c.nextRunIndex();le.current=Sr,te.current=Qe.auteurObjective,Xo.current=0,c.logRunStart(Sr,Qe.auteurObjective,Re??""),c.setFirstRun(Qe.auteurObjective,Re??"");let Vn=y.getResolvedBasicAuth(),Dt=Vn,Mt=null;if(!Dt&&(Mt=await y.getToken(),!Mt)){he({type:"error",text:"Not authenticated. Run /login first."});return}let Lr={basicAuth:Vn??null,token:Mt,resolver:y.getResolver(),resolvedCreds:null};Ae.current=Lr;let en=y.creds.getActiveProfile()??"default",tn=y.creds.getDefaultEnv();ga(y.creds,m,en,tn,(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze));let Fn=m.load();if(Ce(Fn),j){if(!Z){or.current=d,he({type:"info",text:"Setting up mobile device\u2026"}),A.begin();return}if(!Z.app_package){or.current=d,he({type:"info",text:"Choose the app under test\u2026"}),A.requestApp();return}}let Ue;try{Ue=await Ka(E,{prepareDevice:async()=>{let ue=M.token??Z.app_package,_e=!M.token&&ue&&Z.udid?await $u({udid:Z.udid,app:ue,runnerGen:O.sessionGen}):null,Ve=Ko.current;if(_e&&Ve&&Ve.key===_e)return he({type:"info",text:`Device ready: ${Ve.device.app_package} on ${Ve.displayName} (reusing session)`}),{device:Ve.device,...Ve.appRef?{appRef:Ve.appRef}:{},...Ve.appId?{appId:Ve.appId}:{}};let Ze=await ir(),Lt=y.getResolvedBasicAuth(),pt=await la({...Z.udid?{device:Z.udid}:{},...Z.platform?{platform:Z.platform}:{},...M.token?{app:M.token}:Z.app_package?{app:Z.app_package}:{},defaults:C.mobile,interactive:!1,onProgress:ui=>Tt(ui),...Lt?.username&&Lt.access_key&&Ze?.org_id?{cloudUpload:{env:ye,orgId:String(Ze.org_id),userId:String(Ze.user_id??""),baseUrl:an(ye),auth:{username:Lt.username,accessKey:Lt.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 ue=await An.ensureChrome(Re??void 0);c.logChromeLaunch(ue.port,ue.cdpEndpoint);let _e=Sa({headless:Pe.headless,cdpEndpoint:ue.cdpEndpoint,chromePid:ue.process.pid});return _e&&(St.current=_e,Vt("marker-overlay",()=>_e.kill())),{cdpEndpoint:ue.cdpEndpoint,instance:ue,tempDir:null}}})}catch(ue){let _e=E==="device"?ue instanceof Error?ue.message:String(ue):xa(ue);he({type:"error",text:_e});return}finally{Tt(null)}let Un=Ue.kind==="web"?Ue.chrome:{instance:null,tempDir:null};if(Sr===0&&!e){c.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let ue=await Pn(),_e=m.load();Ce(_e);let Ve=Ge(ye),Ze=Dt?{username:Dt.username,access_key:Dt.access_key}:await ir();if(Ze){let Lt=await ic({tmsBaseUrl:Ve.tmsBaseUrl,auth:{username:Ze.username,access_key:Ze.access_key},objective:Qe.auteurObjective,url:Re??"",projectId:ue?.projectId??_e.project_id??"",folderId:ue?.folderId??_e.folder_id??"",hasCustomProfile:!!C.chrome_profile_path,...Ue.kind==="device"?{mobile:oc({platform:Ue.device.platform,appId:Ue.appId,deviceName:A.target?.displayName,osVersion:A.target?.osVersion,udid:Ue.device.udid})}:{},log:(pt,ui,ep,tp)=>c.log(pt,ui,ep,tp)});Lt&&(c.setTestId(Lt),ue?.projectId&&c.setProjectId(ue.projectId))}}c.setAuteurVariables(Qe.auteur),Je.current=Qe;let li=Dt&&!e?await tc({variables:Qe,auth:Dt,orgId:String((await ir())?.org_id??""),env:ye,localMode:e,log:(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze)}):{};de.current=li;let qn=Ei(tr(mt,"global-memory.md")),cr=Ei(tr(process.cwd(),".testmuai","context.md"));if(Sr===0){let ue={mode:C.mode,max_steps:Pe.maxSteps,timeout:Pe.timeout>0?Pe.timeout:void 0,target:Ya(Ue,{cdpEndpoint:Pe.cdpEndpoint||void 0,wsEndpoint:Pe.wsEndpoint||void 0}),app:Ja(Ue),os_version:Ue.kind==="device"?A.target?.osVersion: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:qn??void 0,local_context:cr??void 0,variables:Object.keys(Qe.auteur).length>0?Qe.auteur:void 0};c.setResolvedGlobal(ue)}dt.current||(dt.current=!0,Te.current=await ka({objectiveOrName:c.sessionName??d,sessionId:c.sessionId,title:c.sessionName??d,producerVersion:xt,pid:process.pid,surfaces:Re?[Re]:void 0,packRootDir:tr(c.sessionDir,"evidence")})),I.current||(I.current=Ra(Un.cdpEndpoint),I.current());let Hn=Za(Qe.auteur,Qe.auteurObjective),Zf=Qa({objective:Qe.auteurObjective,url:Ue.kind==="device"?void 0:Re??void 0,requireStartUrl:Ue.kind==="web"&&!q.current&&Re===null,model:C.model,chrome:Un,auth:Lr,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(Hn).length>0?Hn:void 0,globalContext:qn??void 0,localContext:cr??void 0,sessionContext:c.getContext(),device:Ue.kind==="device"?Ue.device:void 0,evidence:Ca(Te.current)});Re&&$(Re),me(null),K.current=null,ks({kind:j?"mobile":"web",label:Ue.kind==="device"?rn(Ue.device.target_kind==="simulator"?"simulator":"emulator"):"Desktop"}),O.startRun(Zf,{environment:ye,mode:C.mode,assertionMode:C.assertion_mode,log:(ue,_e,Ve,Ze)=>c.log(ue,_e,Ve,Ze)}),ie(ue=>ue+1)},[y,An,m,C,c,ye,O,he,Pe,Pn,ir,Ar,ft,A.device,A.target,A.begin,A.requestApp,A.requestAppSource,A.validateBinding,A.bindAppForRun]),Ln=(0,R.useCallback)(d=>{let h=Pr;if(h){if(Is(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(Cs.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}),Ce(m.load()),A.reset(),he({type:"info",text:"Session target: Desktop (Chrome)"}),yr(h.objective,h.url,"web");return}Es.current=h.verdict.appHint??null,or.current=h.objective,A.begin(d==="pick"?"reinit":"confirm")}},[Pr,c,he,yr,m,A]);Bu({phase:A.phase,device:A.device,requestApp:A.requestAppSource,pendingRef:or,dispatch:d=>{yr(d)},notify:he,onSettle:()=>{Es.current=null}});let zf=(0,R.useCallback)(async d=>{let h=uv(d),S=Ha(h),T=new Yn;for(let Re of S.warnings)T.log("warn","RESOLVER_WARNING",Re);let v=y.getResolvedBasicAuth(),E=null;v||(E=await y.getToken());let j={basicAuth:v??null,token:E,resolver:y.getResolver(),resolvedCreds:null},M=ye,Z=Ge(M),Se=y.creds.getActiveProfile()??"default";return{path:h,cwd:process.cwd(),opts:{},isAgent:!1,disableAskUser:!0,resolved:S,resolvedAuth:j,cliOverrides:{},environment:M,envConfig:Z,profile:Se,model:"v16-alpha",creds:y.creds,configStore:m,session:T,skipGlobalRemoteLogger:!0,onAnnounce:_n}},[y,m,ye,_n]),Ie=pd({buildInput:zf,remoteLogger:null}),Qo=(0,R.useRef)(null);(0,R.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=R.default.useRef(null),ei=R.default.useRef(0),ti=R.default.useRef(0);(0,R.useEffect)(()=>{if(O.lastRunEnd&&O.lastRunEnd!==Zo.current){Zo.current=O.lastRunEnd,q.current=!0;let{status:d,duration:h,summary:S,reason:T,context:v}=O.lastRunEnd,{passed:E,failed:j,total:M}=Ta(O.steps);ei.current+=M,ti.current+=h??0;let Z=O.lastRunEnd?.credits_consumed,Se=Z!=null||Xo.current>0?(Z??0)+Xo.current:void 0;me({status:d,duration:h??0,summary:S??"",stepsPassed:E,stepsFailed:j,stepsTotal:M,reason:T,finalState:O.lastRunEnd?.final_state,creditsConsumed:Se}),c.logRunEnd(le.current,d,h,S,O.lastRunEnd?.result_code);let Re=O.bifurcationInfo,Qe=Re&&!Re.isSingleFlow?Re.flows:null,Sr=pa(O.lastRunEnd,le.current,Qe),Vn=ma(O.lastRunEnd,te.current,le.current,Sr);c.addRunResult(Vn,O.lastRunEnd?.total_runs),Ti(Te.current,O.getEvidenceState(),O.lastRunEnd);let Dt=O.lastRunEnd?.per_flow_metadata;if(Re&&!Re.isSingleFlow&&Dt&&Dt.length>1)for(let Mt=0;Mt<Dt.length;Mt++){let Lr=Dt[Mt],en=O.steps[Mt],tn=en?.children??[],Fn=tn.filter(cr=>cr.status==="passed").length,Ue=tn.filter(cr=>cr.status==="failed").length,Un=tn.reduce((cr,Hn)=>cr+(Hn.duration??0),0),li=en?.status==="failed"?"failed":"passed",qn=Re.flows[Mt]??en?.objective??te.current;c.addFlow({runIndex:le.current,flowId:Re.flows[Mt],objective:qn,status:li,summary:Lr.summary??"",duration:Un,steps:Fn+Ue,stepsPassed:Fn,stepsFailed:Ue,reason:Lr.error_message??void 0,creditsConsumed:Lr.credits_consumed??void 0})}else c.addFlow({runIndex:le.current,objective:te.current,status:d,summary:S??"",duration:h??0,steps:M,stepsPassed:E,stepsFailed:j,reason:T,creditsConsumed:O.lastRunEnd?.credits_consumed})}},[O.lastRunEnd,c,he]);let ri=(0,R.useRef)(null);(0,R.useEffect)(()=>{O.askingUser&&(ri.current=O.askingUser)},[O.askingUser]);let ni=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(we&&!O.isRunning&&O.lastRunEnd){if(ni.current===O.lastRunEnd)return;ni.current=O.lastRunEnd,ke((0,k.jsxs)(b,{flexDirection:"column",children:[(0,k.jsx)(pf,{status:we.status,steps:we.stepsTotal,duration:we.duration,creditsConsumed:we.creditsConsumed,reason:we.reason}),(0,k.jsx)(mf,{})]})),me(null)}},[we,O.isRunning,O.lastRunEnd,ke]);let Ls=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(Ie.runSummary&&!Ie.running){if(Ls.current===Ie.runSummary)return;Ls.current=Ie.runSummary,(Ie.summary||Ie.links)&&ke((0,k.jsxs)(b,{flexDirection:"column",children:[Ie.summary&&(0,k.jsx)(Xa,{data:Ie.summary}),Ie.links&&(0,k.jsx)(Zn,{...Ie.links,autoExit:!1})]}))}},[Ie.runSummary,Ie.running,Ie.summary,Ie.links,ke]),(0,R.useEffect)(()=>{St.current?.setRunActive(O.isRunning)},[O.isRunning]),(0,R.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&&K.current!==O.runError&&(K.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 Bn=(0,T.useCallback)(async(d={})=>{let h=Re.current;return h?(c.flushRecorder(),await Ea(h,{saved:!!c.sessionName,local:e,deviceName:A.target?.displayName,deviceModel:A.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:za(Ge(ye).testManagerUiUrl,C.project_id,d.testcaseId??c.testcaseId,d.shareId)},cdpBrowserCapture:I.current??void 0,model:C.model,tuiLogPath:tr(c.sessionDir,"tui.log"),log:(S,R,v,E)=>c.log(S,R,v,E)})):null},[c,C]),$n=(0,T.useCallback)(async d=>{let h=Re.current?.packDir??null,S=await Bn({testcaseId:d?.testcaseId,shareId:d?.shareId});return Re.current=null,dt.current=!1,I.current=null,S?.sealed?h:null},[Bn]),On=(0,T.useCallback)(async()=>{c.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Oe(Qn()),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 ir();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};ae.current&&(c.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await L.current.settle(),await ae.current.drain(),c.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let v=rc({mobile:Ar,session:c,env:ye,auth:R,variables:Je.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:de.current,projectId:C.project_id,folderId:C.folder_id,totalSteps:ei.current,totalDuration:ti.current,screenshotExtMap:ae.current?.getExtMap(),codeExport:nc({codeExport:t,codeLanguage:r,skipCodeValidation:n},C.code_export),onProgress:(M,Z,Se)=>{c.log("info","EXIT_PROGRESS","Upload progress",{step:M,status:Z,detail:Se}),Oe(Te=>Wa(Te,M,Z,Se))},log:(M,Z,Se,Te)=>c.log(M,Z,Se,Te),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0,evidence:Re.current?{executionId:Re.current.executionId,packTestDir:Re.current.packTestDir,sealedPackPath:Re.current.packDir,sealFn:Bn}:void 0}),j=await new sc(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 M=Ge(ye),Z=C.project_id,Se=j.testcaseId&&j.shareId&&Z?ki(M.testManagerUiUrl,Z,j.testcaseId,j.shareId):void 0,Te=j.testcaseId&&Z?Ci(M.testManagerUiUrl,Z,j.testcaseId):void 0;ut({status:"success",testUrl:Se,testCaseLink:Te,codeExportDir:j.codeExportDir}),ff({shareableLink:Se,testCaseLink:Te,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,ir,Bn]),Nn=(0,T.useCallback)(async()=>{c.log("info","SESSION_RESET_START","Starting session reset via /new"),kr(!0);let d=c.getFlows();d.length>0&&ke((0,k.jsx)(fs,{flows:d}));let h=null;if(!e)try{h=await On()??null}catch(E){c.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(E)}),he({type:"error",text:"Upload failed \u2014 session data saved locally."})}let S=null;try{let{persistRecordedSession:E}=await import("./persist-recorded-session-KCXYXSQG.js");S=await E(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,packTestDir:Re.current?.packTestDir})}catch(E){c.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(E)})}if(h?.success&&h.testcaseId||S){let E=Ge(ye),j=C.project_id,M=h?.testcaseId;ke((0,k.jsx)(Zn,{recordedTestPath:S?.recordedTestPath,outputDir:S?.outputDir,shareableLink:M&&h?.shareId&&j?ki(E.testManagerUiUrl,j,M,h.shareId):void 0,testCaseLink:M&&j?Ci(E.testManagerUiUrl,j,M):void 0,codeExportDir:h?.codeExportDir,autoExit:!1}))}let R=await $n(h);R&&he({type:"info",text:Aa(R)}),c.testId&&Kt(E=>[...E,{testId:c.testId,runCount:oe}]),await O.shutdownRunner(),An.killChrome(),await c.finish("complete");let v=new Yn;v.start({model:C.model,environment:ye,profile:Dr??null}),w.current=v,x(E=>E+1),c.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:v.sessionId});try{await Ft({kind:"resessionize",env:ye},kt)}catch(E){c.log("error","SESSION_RESET_IDENTITY_FAILED","Identity re-attach failed during /new",{error:String(E)})}ie(0),ei.current=0,ti.current=0,le.current=0,te.current="",Je.current=null,de.current={},jn.current=0,ii.current=0,ri.current=null,ni.current=null,Zo.current=null,K.current=null,q.current=!1,Qo.current=null,ks(null),Ko.current=null,me(null),$(null),ut(null),Oe(Qn()),kr(!1),N("ok","/new","Session reset")},[c,he,ke,N,e,On,$n,An,O,oe,C,ye,Dr,kt]),Bs=(0,T.useCallback)(async()=>{switch(Tf({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(_i());return;case"proceed":await Nn();return}},[c,O,he,C.mode,Nn]),$s=(0,T.useCallback)(async()=>{await O.shutdownRunner(),await c.finish("complete"),Nr(0,"Session complete")},[c,O]),Kf=(0,T.useCallback)(async d=>{Cr(!1);let h=c.testId??(Me.length>0?Me[Me.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 kf({tmsBaseUrl:S.tmsBaseUrl,username:R.username,accessKey:R.access_key,testId:h,feedbackType:d,log:(v,E,j,M)=>c.log(v,E,j,M)})}catch(S){c.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(S)})}}else c.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");$s()},[ye,y,c,$s,Me]),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 On()??null}catch(v){c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(v)})}c.testId&&Kt(v=>[...v,{testId:c.testId,runCount:oe}])}try{let{persistRecordedSession:v}=await import("./persist-recorded-session-KCXYXSQG.js"),E=await v(c,{testcaseId:c.testcaseId??void 0,projectId:C.project_id??void 0,folderId:C.folder_id??void 0,codeExportDir:h?.codeExportDir,packTestDir:Re.current?.packTestDir});E&&ce(E)}catch(v){c.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(v)})}let S=await $n(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??(Me.length>0?Me[Me.length-1].testId:null))||e){await c.finish("complete"),Nr(0,"No test ID \u2014 quick exit");return}pe(!0),Cr(!0)},[c,e,On,$n,oe,Me,C]),ar=(0,T.useCallback)(async()=>{if(Y)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(_i());return}await Mn()},[Y,c,C.mode,Mn]),Yf=(0,T.useCallback)(d=>{d&&c.setSessionName(d);let h=Er;br(null),vr(null),h==="new"?Nn():Mn()},[c,Er,Mn,Nn]);(0,T.useEffect)(()=>{if(!Y)return;let d=300*1e3,h=setTimeout(async()=>{c.setUploadStatus("failed","Upload timed out after 5m"),await c.finish("complete"),Nr(0,"Upload timed out after 5m")},d);return()=>clearTimeout(h)},[Y,c]);let jn=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(Ne==="generate"&&(xe.isStreaming||Pt.submitting)){Pt.cancelGenerate(),si.current++,ai.current&&clearTimeout(ai.current),ai.current=setTimeout(()=>{si.current=0},2e3),si.current>=2&&ar();return}if(!Ie.running){if(Y){ii.current+=1,ii.current>=2&&(c.setUploadStatus("pending","Force exit by user"),c.finish("complete"),Nr(0,"Force exit by user"));return}if(O.isRunning){O.cancelRun(),he({type:"info",text:"Run cancelled."}),jn.current++,oi.current&&clearTimeout(oi.current),oi.current=setTimeout(()=>{jn.current=0},2e3),jn.current>=2&&ar();return}ar()}}}),Be((d,h)=>{if(h.ctrl&&d==="t"&&Ne==="generate"&&!xe.isStreaming){Dn("no thinking yet");return}});let Os=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(E=>({...E,...v})),deviceLabel:A.target?.displayName??null,appLabel:A.device?.app_package??null,openDevicePicker:()=>{if(ft){N("error","/config device",_r(ft));return}xr(null),A.begin("reinit")},openAppPicker:()=>{if(ft){N("error","/config app",_r(ft));return}if(xr(null),A.target){A.requestApp();return}A.begin("reinit")}},R={tuiConfig:C,setMobile:v=>{m.setMobile(v),Ce(m.load())},setConfigKey:(v,E)=>{m.set(v,E),Ce(m.load())},emitFeedback:N,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 E=parseInt(v,10);E>0&&Wo(j=>({...j,maxSteps:E}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Pe.timeout?String(Pe.timeout):"",placeholder:"0 = no timeout",onValue:v=>{let E=parseInt(v,10);Wo(j=>({...j,timeout:isNaN(E)?0:E}))}},{id:"run-config-desktop",label:"Desktop",type:"submenu",children:yf(S)},...Or()?[{id:"run-config-mobile",label:"Mobile",type:"submenu",children:Sf(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 E=y.creds.getActiveProfile(),j=y.creds.getDefaultEnv();_t(E,j);let M=xf(E,j);Ft(M,kt).catch(()=>{}),v?N("ok","/logout",`Logged out: ${v.profile} [${v.env}]`):N("ok","/logout","No active profile")}).catch(()=>{N("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let v=y.creds.getActiveProfile()??"none",E=y.creds.getDefaultEnv(),j=y.creds.loadBasicAuth(v,E),M=j?"basic":y.creds.loadCredentials(v,E)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:v},{key:"Environment",value:E}]},{label:"Authentication",entries:[{key:"Method",value:M},...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",E=y.creds.getDefaultEnv(),j=Ge(E);try{let M=y.getBasicAuth(),Z=M?null:await y.getToken();if(!M&&!Z){He({text:"Not authenticated. Run /login first.",color:l.red});return}let{ControllerClient:Se}=await import("./controller-client-OB4WD2C4.js"),Qe=await(M?new Se(j.controllerBaseUrl,{username:M.username,accessKey:M.access_key}):new Se(j.controllerBaseUrl,Z)).getCreditBalance();He({text:`Credits \u2014 available: ${Qe.available_credits}, total: ${Qe.total_credits} (${v} / ${E})`,color:l.green})}catch(M){He({text:`Balance check failed: ${M instanceof Error?M.message:String(M)}`,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"}]},Rf(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:wf(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),Ce(m.load()),N("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),Ce(m.load()),N("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"),Ce(m.load()),N("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),Ce(m.load()),N("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 E=v==="on";m.set("hints_enabled",E),Ce(m.load()),N("ok","/config hints",`CLI hints ${E?"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 E=parseInt(v,10);if(!Number.isFinite(E)||E<1||E>20){N("error","/config",`Scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,scenario_limit:E}),Ce(m.load()),N("ok","/config",`Scenario limit: ${E}`)}},{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 E=parseInt(v,10);if(!Number.isFinite(E)||E<1||E>20){N("error","/config",`Per-scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,per_scenario_limit:E}),Ce(m.load()),N("ok","/config",`Per-scenario limit: ${E}`)}},{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 E=v==="on";m.set("generate",{...C.generate,memory_enabled:E}),Ce(m.load()),N("ok","/config",`Memory: ${E?"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"}),Ce(m.load()),N("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}),Ce(m.load()),N("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"}),Ce(m.load()),N("ok","/config code-export skip-validation",v)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{ar()}}]},[y,m,C,he,ar,Pe,vt,N,ft,_r,A.target,A.device,A.begin,A.requestApp]),ci=(0,T.useCallback)(d=>{if(O.askingUser){let S=O.askingUser;ke((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(!nd(h.command,Ne)){N("error",`/${h.command}`,`/${h.command} isn't available in ${Ne==="run"?"Run":"Generate"} mode.`);return}switch(h.command){case"profiles":if(Ne==="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=Jn(h.args.value);if(!S){N("error","/config set-url","Usage: /config set-url <url>");return}m.set("default_url",S),Ce(m.load()),N("ok","/config set-url",S);return}xr("config");return;case"mobile":{let S=Kn();if(!S.supported){N("error","/mobile",S.reason);return}if(ft){N("error","/mobile",_r(ft));return}A.begin("confirm");return}case"desktop":{if(ft){ft.kind==="web"?N("ok","/web","Session is already on Desktop."):N("error","/web",_r(ft));return}m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ce(m.load()),A.reset(),N("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-CPMWU5TL.js"),E=await S();he({type:"info",text:R(E)}),v(E)!==0&&he({type:"info",text:"Install the managed tooling with /mobile (interactive) or `kane-cli doctor --target <emulator|simulator> --install`."})})();return}case"help":ws(!0);return;case"testmd":if(O.isRunning||xe.isStreaming||Ie.running){N("error","/testmd","Finish or cancel the current run/generation first.");return}Ie.clearResult(),En(!0);return;case"generate":if(Ie.running){N("error","/generate","Finish or cancel the running test first.");return}Ne==="run"?Pt.requestSwitch("generate")&&N("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):N("ok","/generate","Already in Generate mode.",void 0,l.generateAccent);return;case"run":{let S=sd(Ne,h.args.objective);switch(S.kind){case"run":yr(S.objective,h.args.url);return;case"reject":N("error","/run",'Switch to Run mode first (bare /run), then /run "objective".');return;case"already":N("ok","/run","Already in Run mode.",void 0,l.orange);return;case"toggle":Pt.requestSwitch("run")&&N("ok","/run","Switched to Run mode.",void 0,l.orange);return}return}case"update":{(async()=>{let{getUpdateCommand:S}=await import("./version-check-DAWGRSJ5.js");N("ok","/update",`To update kane-cli, run: ${S()}`)})();return}case"summary":{if(Ne==="generate"&&!xe.requestId){Dn("no generation yet"),N("ok","/summary","(no generation yet)");return}let S=c.getFlows();if(S.length===0){N("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)){N("error","/summary",`No flow at index ${R}`,`${S.length} flow${S.length===1?"":"s"} available. Use /summary to see all.`);return}ke((0,k.jsx)(fs,{flows:S,filterIndex:R})),N("ok","/summary",R!==void 0?`Flow ${R}`:`${S.length} flow${S.length===1?"":"s"}`);return}case"new":Ne==="generate"&&xe.requestId&&(nr(),xe.end().catch(S=>{N("error","/new",`Could not end generation cleanly: ${S.message}`)}),xe.reset()),Bs();return;case"name":{let S=h.raw.replace(/^\/name\s*/,"").trim();if(!S){N("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:R}=await import("./name-validator-5YGJXLZ7.js");try{R(S),c.setSessionName(S),N("ok","/name",`Session name set: ${S}`)}catch(v){N("error","/name",v.message)}})();return}case"cancel":if(Ne==="generate"&&xe.isStreaming){nr(),xe.cancel(),N("ok","/cancel","Cancelled");return}if(Ne==="generate"&&!xe.requestId){Dn("no generation yet"),N("ok","/cancel","(no generation yet)");return}if(Ie.running){Ie.cancel(),N("ok","/cancel","Run cancelled");return}O.cancelRun(),N("ok","/cancel","Run cancelled");return;case"clear":N("ok","/clear","Chat cleared");return;case"exit":Ne==="generate"&&xe.requestId&&(nr(),xe.end()),ar();return;default:N("error",`/${h.command}`,"Unknown command");return}}if(d.trim().toLowerCase()==="exit"){ar();return}ke((0,k.jsx)(_u,{objective:d})),yr(d,void 0)},[O,he,N,ke,c,yr,ar,Bs,Ne,xe.isStreaming,xe.requestId,xe,Dn,nr,Ie,C,s,ft,_r]);Ps.current=ci;let Ns=(0,T.useRef)(!1);(0,T.useEffect)(()=>{if(!Ns.current&&B&&u==="generate"&&f){Ns.current=!0;let d=setTimeout(()=>{Gf(f)},50);return()=>clearTimeout(d)}},[B,u,f]);let Ms=y.getAuthInfo(),Jf=Ms?Ms.method==="basic"?"basic auth":"oauth":"not logged in",Qf=(()=>{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"?Cn?["auth",d[Cn]]:["auth"]:Nt==="config"?Cn?["config",d[Cn]]:["config"]:Nt==="help"?["help"]:O.askingUser?["agent question"]:[]})();return(0,k.jsxs)(b,{flexDirection:"column",children:[!B&&!ys&&(0,k.jsx)(Iu,{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),E=R?.username??d??null;ke((0,k.jsx)(yo,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:xt,authenticated:v,user:E})),Af(!0);let j=(M,Z,Se,Te)=>{c.log(M,Z,Se,Te)};if($a(y.creds,j).then(M=>{if(M.status==="authenticated"){let{profile:Z,env:Se,tmsCreds:Te}=M.result;y.creds.setActiveProfile(Z),y.creds.setDefaultEnv(Se),vt(),zt(Te),Ot("ready"),F(!0)}else M.status==="needs_pick"?(Ef(M.profiles),Ot("pick")):Ot("login")}).catch(M=>{c.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(M)}),Ot("login")}),o&&o.then(async M=>{if(M){let{getUpdateCommand:Z}=await import("./version-check-DAWGRSJ5.js");N("ok","update available",`${M.current} \u2192 ${M.latest}`,`Run: ${Z()}`)}}).catch(()=>{}),i&&i.changes.length>0){let M=`kane-cli updated to ${i.toVersion}. Default settings changed:`,Z=[...i.changes.map(Se=>`\u2022 ${Se.description} (${Se.field}: ${JSON.stringify(Se.from)} \u2192 ${JSON.stringify(Se.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
26
|
-
`);N("ok","defaults updated",M,Z)}}}),!B&&rr==="booting"&&ys&&(0,k.jsx)(b,{paddingX:1,children:(0,k.jsx)(a,{color:"yellow",children:"Checking authentication..."})}),!B&&rr==="pick"&&(0,k.jsx)(dv,{profiles:Cf,onCancel:()=>Ot("login"),onSelect:async(d,h)=>{y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),vt(),Ho(!0);let S=(R,v,E,j)=>{c.log(R,v,E,j)};try{let R=await Ba(y.creds,d,h,S);Ho(!1),R.status==="authenticated"?(_t(d,h),zt(R.result.tmsCreds),Ot("ready"),F(!0)):Ot("login")}catch{Ho(!1),Ot("login")}},validating:If}),!B&&rr==="login"&&!V&&(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(d,h,S,R)=>{let{validateBasicAuth:v}=await import("./validate-basic-X2XPEBFD.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)=>{Ft(qo(h),kt).then(()=>{vt(),je({phase:"project",profile:d,env:h})}).catch(()=>{je({phase:"project",profile:d,env:h})})},onCancel:()=>{Nr(0,"Login cancelled at startup")}}),!B&&rr==="login"&&V?.phase==="project"&&(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:d,project_name:h}),N("ok","/config project",h,`id: ${d}`),je({...V,phase:"folder"})},onCancel:async()=>{let d=await Yo(V.profile,V.env);d&&(Bt(y.creds,m,V.profile,V.env,{projectId:d.id,projectName:d.name}),N("ok","/config project",d.name,`id: ${d.id}`),je({...V,phase:"folder"}))}}),!B&&rr==="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}),N("ok","/config folder",h,`id: ${d}`),_t(V.profile,V.env),je(null),Ot("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&&(Bt(y.creds,m,V.profile,V.env,{folderId:h.id,folderName:h.name}),N("ok","/config folder",h.name,`id: ${h.id}`),_t(V.profile,V.env),je(null),Ot("ready"),F(!0))}}),B&&kn==="menu"&&!Y&&(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:Jf}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsxs)(a,{color:l.dim,children:[Dr??"no profile","/",ye]})]})}),B&&!Y&&(0,k.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[kn==="menu"&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ss,{items:Os,onRunSelected:()=>_f("chat"),onActiveViewChange:Ss,renderLoginWizard:d=>{let h=V?.phase??"wizard";if(h==="project")return(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(S,R)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:S,project_name:R}),N("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&&(Bt(y.creds,m,V.profile,V.env,{projectId:S.id,projectName:S.name}),N("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}),N("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&&(Bt(y.creds,m,V.profile,V.env,{folderId:v.id,folderName:v.name}),N("ok","/config folder",v.name,`id: ${v.id}`),_t(V.profile,V.env),je(null),d())}})}return(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(S,R,v,E)=>{let{validateBasicAuth:j}=await import("./validate-basic-X2XPEBFD.js");await j(R,v,E),y.creds.saveBasicAuth(S,R,{username:v,access_key:E}),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)=>{Ft(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(),Ft(xs(S),kt).catch(()=>{}),N("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),Ce(m.load()),N("ok","/config chrome-profile",h),d()},onCancel:d}),renderProjectPicker:d=>(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(h,S)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:h,projectName:S}),N("ok","/config project",S,`id: ${h}`),Ce(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)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:h,folderName:S}),N("ok","/config folder",S,`id: ${h}`),Ce(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}),Ce(m.load()),N("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})})]}),kn==="chat"&&(0,k.jsxs)(k.Fragment,{children:[Xt&&!O.isRunning&&(0,k.jsx)(bi,{label:Xt.replace(/[.…\s]+$/,"")}),(()=>{let d=Xs({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)(Ws,{steps:O.steps,bifurcated:!!O.bifurcationInfo&&!O.bifurcationInfo.isSingleFlow,flows:O.bifurcationInfo?.flows,cmInitCounts:O.cmInitCounts,onStepCommit:ke,describe:Zr.text,describeVisible:Zr.visible,describeRevealing:Zr.revealing},`run-${le.current}`),Ie.runViewProps&&(0,k.jsx)(Ga,{...Ie.runViewProps,onCancel:()=>{Ie.runViewProps?.onCancel?.(),Ie.cancel()}}),Yr&&(0,k.jsx)(ld,{onClose:()=>ws(!1),version:xt,environment:y.creds.getDefaultEnv(),sessionId:c.sessionId,runUrl:C.default_url??di,mode:Ne}),Jr&&(0,k.jsx)(fd,{cwd:process.cwd(),currentOrgId:String(Le?.org_id??""),onClose:()=>En(!1),onRun:d=>{if(O.isRunning||xe.isStreaming||Ie.running){setTimeout(()=>N("error","/testmd","Finish or cancel the current run first."),0);return}En(!1),!(Ne==="generate"&&!Pt.requestSwitch("run"))&&(Ne==="generate"&&setTimeout(()=>N("ok","/testmd",`Switched to Run mode to run ${d.relPath}`,void 0,l.orange),0),Ie.start(d.path).catch(h=>setTimeout(()=>N("error","/testmd",`Run failed: ${h.message}`),0)))},onExport:d=>{En(!1),cc(d.path,{language:C.code_export.language??"python",env:ye}).then(h=>setTimeout(()=>N("ok","/testmd",`Exported code \u2192 ${h.codeDir}`),0)).catch(h=>setTimeout(()=>N("error","/testmd",`Export failed: ${h.message}`),0))}}),Nt&&!O.isRunning&&(()=>{let d=Os.find(h=>h.id===Nt);return d?.children?(0,k.jsx)(ss,{items:d.children,onRunSelected:()=>xr(null),onDismiss:()=>xr(null),onActiveViewChange:Ss,renderLoginWizard:h=>{let S=V?.phase??"wizard";if(S==="project")return(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(R,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:R,project_name:v}),N("ok","/config project",v,`id: ${R}`),je(E=>E?{...E,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let R=await Yo(V.profile,V.env);R&&(Bt(y.creds,m,V.profile,V.env,{projectId:R.id,projectName:R.name}),N("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,E)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:v,folder_name:E}),N("ok","/config folder",E,`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 E=await Jo(V.env,v.project_id);E&&(Bt(y.creds,m,V.profile,V.env,{folderId:E.id,folderName:E.name}),N("ok","/config folder",E.name,`id: ${E.id}`),_t(V.profile,V.env),je(null),h())}})}return(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(R,v,E,j)=>{let{validateBasicAuth:M}=await import("./validate-basic-X2XPEBFD.js");await M(v,E,j),y.creds.saveBasicAuth(R,v,{username:E,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)=>{Ft(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(),Ft(xs(R),kt).catch(()=>{}),N("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}),Ce(m.load()),N("ok","/config chrome-profile",S),h()},onCancel:h}),renderProjectPicker:h=>(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(S,R)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:S,projectName:R}),Ce(m.load()),N("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)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:S,folderName:R}),Ce(m.load()),N("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}),Ce(m.load()),N("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})}),Ne==="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})})]})})]}),In&&(()=>{let d=In,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)(df,{message:h,confirmLabel:S,onConfirm:async()=>{if(d.reason==="switch"){let v=d.to;Qr(null),Pt.confirmSwitch(v);return}nr();let R=d.pendingArgs;if(Qr(null),await xe.end(),xe.reset(),R.profile){let v=y.creds.getDefaultEnv(),E=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(),Ft({kind:"switch",env:v},kt).catch(()=>{}),N("ok","/profiles switch",`${E} \u2192 ${R.profile} [${v}]`)}else ci("/profiles switch")},onCancel:()=>Qr(null)})})(),Ts&&(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,marginTop:1,children:[A.phase==="doctor"?(0,k.jsx)(Ku,{checks:A.checks,busyMessage:A.busyMessage,onRetry:A.recheck,onInstall:A.install,onCancel:A.cancel}):A.phase==="apps"&&A.kind?(0,k.jsx)(fa,{kind:A.kind,onSelect:d=>A.selectApp(d),onBack:A.back,onCancel:A.back}):A.phase==="appList"&&A.kind?(0,k.jsx)(da,{kind:A.kind,busyMessage:A.busyMessage,listApps:Uf,onSelect:d=>{A.selectAppId(d.appId)},onManualEntry:A.requestAppId,onCancel:A.back}):A.phase==="appId"?(0,k.jsx)(ja,{busyMessage:A.busyMessage,onSubmit:d=>A.selectAppId(d),onBack:A.back}):A.phase==="chooser"?(0,k.jsx)(Na,{mode:"mobile-only",onSelect:d=>{(d==="emulator"||d==="simulator")&&A.selectKind(d)},onCancel:A.back}):A.phase==="confirm"&&A.saved?(0,k.jsx)(id,{saved:A.saved,onContinue:()=>A.confirmSaved(),onChangeDevice:()=>A.begin("reinit"),onChangeApp:()=>A.confirmSaved({keepApp:!1}),onCancel:A.cancel}):A.phase==="appSource"&&A.kind?(0,k.jsx)(Ma,{kind:A.kind,onSelect:d=>d==="uploaded"?A.requestCloudApps():A.requestApp(),onCancel:A.back}):(0,k.jsx)(ua,{targets:A.targets,preselectedTarget:C.mobile?.default_target,busyMessage:A.busyMessage??(A.phase==="checking"?"Checking mobile toolchain\u2026":null),onSelect:d=>{A.selectTarget(d)},onCancel:A.back,...A.kind?{kind:A.kind}:{}}),A.error&&(0,k.jsx)(a,{color:"red",children:A.error})]}),Pr&&(0,k.jsx)(Gu,{suggested:Pr.suggested,sessionTargetLabel:Ir.kind==="unset"||Ir.kind==="choose-mobile"?"Desktop":rn(Ir.kind),appHint:Pr.verdict.appHint,savedDeviceName:C.mobile?.default_target?.id??null,onAccept:()=>Ln("accept"),onPickDevice:()=>Ln("pick"),onKeep:()=>Ln("keep"),onCancel:()=>Ln("cancel")}),Ne==="run"&&!Nt&&!Yr&&!Jr&&!Tt&&!In&&!Ie.running&&!Ts&&!Pr&&(0,k.jsx)(lr,{onSubmit:ci,onEscape:void 0,history:Df,commands:rd(xn(td),ft),clearSeq:Hf,loadMentionItems:Ar?jf:void 0,mentionHint:Ar&&!A.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"}]}),Ne==="generate"&&!Nt&&!Yr&&!Jr&&!Tt&&!In&&(0,k.jsx)(lf,{tcg:xe,gm:Pt,history:Lf,tuiConfig:C,browse:sr.isOpen?{target:sr.target,onClose:sr.close,excluded:sr.excluded,onToggleCase:sr.toggleCase,onToggleScenario:sr.toggleScenario,getStatus:Pt.bifurcation.getStatus,getResult:Pt.bifurcation.getResult}:null})]})]}),B&&Y&&ge&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(Ti,{steps:$t,status:ge.status,testUrl:ge.testUrl,error:ge.error}),ge.status==="success"&&(0,k.jsx)(Zn,{recordedTestPath:Q?.recordedTestPath,outputDir:Q?.outputDir,shareableLink:ge.testUrl,testCaseLink:ge.testCaseLink,codeExportDir:ge.codeExportDir,autoExit:!1})]}),Tt&&(0,k.jsx)(Ec,{defaultName:Tt,onSubmit:Yf}),gr&&(0,k.jsx)(_a,{packPath:gr.packPath,viewerBase:Ia(ye??"prod"),onDone:()=>gr.resolve()}),Kr&&(0,k.jsx)(Cc,{onSubmit:Kf}),mr&&ge&&(0,k.jsx)(Ti,{steps:$t,status:ge.status,error:ge.error}),B&&!Y&&(0,k.jsx)(ku,{profile:Dr,environment:ye,tokenValid:y.tokenValid,runCount:oe,sessionId:c.sessionId,viewMode:kn,breadcrumb:Qf,chatMode:Ne,footerHint:Xf,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:Ar?{kind:Ir.kind==="simulator"?"simulator":"emulator",...A.target?{deviceName:A.target.displayName}:{},...A.device?.app_package?{appPackage:A.device.app_package}:{}}:{kind:"desktop"},targetLocked:ft!==null})]})}function dv({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{Wu as a,Xu as b,Ju as c,vf as d,kf as e,XC as f};
|
|
25
|
+
${S}`})}},[O.runError,O.isRunning,O.lastRunEnd,he,c]);let Bn=(0,R.useCallback)(async(d={})=>{let h=Te.current;return h?(c.flushRecorder(),await Ea(h,{saved:!!c.sessionName,local:e,deviceName:A.target?.displayName,deviceModel:A.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:za(Ge(ye).testManagerUiUrl,C.project_id,d.testcaseId??c.testcaseId,d.shareId)},cdpBrowserCapture:I.current??void 0,model:C.model,tuiLogPath:tr(c.sessionDir,"tui.log"),log:(S,T,v,E)=>c.log(S,T,v,E)})):null},[c,C]),$n=(0,R.useCallback)(async d=>{let h=Te.current?.packDir??null,S=await Bn({testcaseId:d?.testcaseId,shareId:d?.shareId});return Te.current=null,dt.current=!1,I.current=null,S?.sealed?h:null},[Bn]),On=(0,R.useCallback)(async()=>{c.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Oe(Qn()),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 ir();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 T={basicAuth:d??null,token:h,resolver:y.getResolver(),resolvedCreds:S};ae.current&&(c.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await L.current.settle(),await ae.current.drain(),c.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let v=rc({mobile:Ar,session:c,env:ye,auth:T,variables:Je.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:de.current,projectId:C.project_id,folderId:C.folder_id,totalSteps:ei.current,totalDuration:ti.current,screenshotExtMap:ae.current?.getExtMap(),codeExport:nc({codeExport:t,codeLanguage:r,skipCodeValidation:n},C.code_export),onProgress:(M,Z,Se)=>{c.log("info","EXIT_PROGRESS","Upload progress",{step:M,status:Z,detail:Se}),Oe(Re=>Wa(Re,M,Z,Se))},log:(M,Z,Se,Re)=>c.log(M,Z,Se,Re),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0,evidence:Te.current?{executionId:Te.current.executionId,packTestDir:Te.current.packTestDir,sealedPackPath:Te.current.packDir,sealFn:Bn}:void 0}),j=await new sc(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 M=Ge(ye),Z=C.project_id,Se=j.testcaseId&&j.shareId&&Z?ki(M.testManagerUiUrl,Z,j.testcaseId,j.shareId):void 0,Re=j.testcaseId&&Z?Ci(M.testManagerUiUrl,Z,j.testcaseId):void 0;ut({status:"success",testUrl:Se,testCaseLink:Re,codeExportDir:j.codeExportDir}),ff({shareableLink:Se,testCaseLink:Re,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,ir,Bn]),Nn=(0,R.useCallback)(async()=>{c.log("info","SESSION_RESET_START","Starting session reset via /new"),kr(!0);let d=c.getFlows();d.length>0&&ke((0,k.jsx)(fs,{flows:d}));let h=null;if(!e)try{h=await On()??null}catch(E){c.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(E)}),he({type:"error",text:"Upload failed \u2014 session data saved locally."})}let S=null;try{let{persistRecordedSession:E}=await import("./persist-recorded-session-O2NCYTSD.js");S=await E(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(E){c.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(E)})}if(h?.success&&h.testcaseId||S){let E=Ge(ye),j=C.project_id,M=h?.testcaseId;ke((0,k.jsx)(Zn,{recordedTestPath:S?.recordedTestPath,outputDir:S?.outputDir,shareableLink:M&&h?.shareId&&j?ki(E.testManagerUiUrl,j,M,h.shareId):void 0,testCaseLink:M&&j?Ci(E.testManagerUiUrl,j,M):void 0,codeExportDir:h?.codeExportDir,autoExit:!1}))}let T=await $n(h);T&&he({type:"info",text:Aa(T)}),c.testId&&Kt(E=>[...E,{testId:c.testId,runCount:oe}]),await O.shutdownRunner(),An.killChrome(),await c.finish("complete");let v=new Yn;v.start({model:C.model,environment:ye,profile:Dr??null}),w.current=v,x(E=>E+1),c.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:v.sessionId});try{await Ft({kind:"resessionize",env:ye},kt)}catch(E){c.log("error","SESSION_RESET_IDENTITY_FAILED","Identity re-attach failed during /new",{error:String(E)})}ie(0),ei.current=0,ti.current=0,le.current=0,te.current="",Je.current=null,de.current={},jn.current=0,ii.current=0,ri.current=null,ni.current=null,Zo.current=null,K.current=null,q.current=!1,Qo.current=null,ks(null),Ko.current=null,me(null),$(null),ut(null),Oe(Qn()),kr(!1),N("ok","/new","Session reset")},[c,he,ke,N,e,On,$n,An,O,oe,C,ye,Dr,kt]),Bs=(0,R.useCallback)(async()=>{switch(Rf({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(_i());return;case"proceed":await Nn();return}},[c,O,he,C.mode,Nn]),$s=(0,R.useCallback)(async()=>{await O.shutdownRunner(),await c.finish("complete"),Nr(0,"Session complete")},[c,O]),Kf=(0,R.useCallback)(async d=>{Cr(!1);let h=c.testId??(Me.length>0?Me[Me.length-1].testId:null);if(d&&h){c.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:d});try{let S=Ge(ye),T=y.getResolvedBasicAuth();T&&await kf({tmsBaseUrl:S.tmsBaseUrl,username:T.username,accessKey:T.access_key,testId:h,feedbackType:d,log:(v,E,j,M)=>c.log(v,E,j,M)})}catch(S){c.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(S)})}}else c.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");$s()},[ye,y,c,$s,Me]),Mn=(0,R.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 On()??null}catch(v){c.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(v)})}c.testId&&Kt(v=>[...v,{testId:c.testId,runCount:oe}])}try{let{persistRecordedSession:v}=await import("./persist-recorded-session-O2NCYTSD.js"),E=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});E&&ce(E)}catch(v){c.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(v)})}let S=await $n(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??(Me.length>0?Me[Me.length-1].testId:null))||e){await c.finish("complete"),Nr(0,"No test ID \u2014 quick exit");return}pe(!0),Cr(!0)},[c,e,On,$n,oe,Me,C]),ar=(0,R.useCallback)(async()=>{if(Y)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(_i());return}await Mn()},[Y,c,C.mode,Mn]),Yf=(0,R.useCallback)(d=>{d&&c.setSessionName(d);let h=Er;br(null),vr(null),h==="new"?Nn():Mn()},[c,Er,Mn,Nn]);(0,R.useEffect)(()=>{if(!Y)return;let d=300*1e3,h=setTimeout(async()=>{c.setUploadStatus("failed","Upload timed out after 5m"),await c.finish("complete"),Nr(0,"Upload timed out after 5m")},d);return()=>clearTimeout(h)},[Y,c]);let jn=R.default.useRef(0),oi=R.default.useRef(null),ii=R.default.useRef(0),si=R.default.useRef(0),ai=R.default.useRef(null);Be((d,h)=>{if(h.ctrl&&d==="c"){if(Ne==="generate"&&(xe.isStreaming||Pt.submitting)){Pt.cancelGenerate(),si.current++,ai.current&&clearTimeout(ai.current),ai.current=setTimeout(()=>{si.current=0},2e3),si.current>=2&&ar();return}if(!Ie.running){if(Y){ii.current+=1,ii.current>=2&&(c.setUploadStatus("pending","Force exit by user"),c.finish("complete"),Nr(0,"Force exit by user"));return}if(O.isRunning){O.cancelRun(),he({type:"info",text:"Run cancelled."}),jn.current++,oi.current&&clearTimeout(oi.current),oi.current=setTimeout(()=>{jn.current=0},2e3),jn.current>=2&&ar();return}ar()}}}),Be((d,h)=>{if(h.ctrl&&d==="t"&&Ne==="generate"&&!xe.isStreaming){Dn("no thinking yet");return}});let Os=R.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(E=>({...E,...v})),deviceLabel:A.target?.displayName??null,appLabel:A.device?.app_package??null,openDevicePicker:()=>{if(ft){N("error","/config device",_r(ft));return}xr(null),A.begin("reinit")},openAppPicker:()=>{if(ft){N("error","/config app",_r(ft));return}if(xr(null),A.target){A.requestApp();return}A.begin("reinit")}},T={tuiConfig:C,setMobile:v=>{m.setMobile(v),Ce(m.load())},setConfigKey:(v,E)=>{m.set(v,E),Ce(m.load())},emitFeedback:N,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 E=parseInt(v,10);E>0&&Wo(j=>({...j,maxSteps:E}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Pe.timeout?String(Pe.timeout):"",placeholder:"0 = no timeout",onValue:v=>{let E=parseInt(v,10);Wo(j=>({...j,timeout:isNaN(E)?0:E}))}},{id:"run-config-desktop",label:"Desktop",type:"submenu",children:yf(S)},...Or()?[{id:"run-config-mobile",label:"Mobile",type:"submenu",children:Sf(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 E=y.creds.getActiveProfile(),j=y.creds.getDefaultEnv();_t(E,j);let M=xf(E,j);Ft(M,kt).catch(()=>{}),v?N("ok","/logout",`Logged out: ${v.profile} [${v.env}]`):N("ok","/logout","No active profile")}).catch(()=>{N("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let v=y.creds.getActiveProfile()??"none",E=y.creds.getDefaultEnv(),j=y.creds.loadBasicAuth(v,E),M=j?"basic":y.creds.loadCredentials(v,E)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:v},{key:"Environment",value:E}]},{label:"Authentication",entries:[{key:"Method",value:M},...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",E=y.creds.getDefaultEnv(),j=Ge(E);try{let M=y.getBasicAuth(),Z=M?null:await y.getToken();if(!M&&!Z){He({text:"Not authenticated. Run /login first.",color:l.red});return}let{ControllerClient:Se}=await import("./controller-client-OB4WD2C4.js"),Qe=await(M?new Se(j.controllerBaseUrl,{username:M.username,accessKey:M.access_key}):new Se(j.controllerBaseUrl,Z)).getCreditBalance();He({text:`Credits \u2014 available: ${Qe.available_credits}, total: ${Qe.total_credits} (${v} / ${E})`,color:l.green})}catch(M){He({text:`Balance check failed: ${M instanceof Error?M.message:String(M)}`,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"}]},Tf(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:wf(T)},{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),Ce(m.load()),N("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),Ce(m.load()),N("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"),Ce(m.load()),N("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),Ce(m.load()),N("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 E=v==="on";m.set("hints_enabled",E),Ce(m.load()),N("ok","/config hints",`CLI hints ${E?"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 E=parseInt(v,10);if(!Number.isFinite(E)||E<1||E>20){N("error","/config",`Scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,scenario_limit:E}),Ce(m.load()),N("ok","/config",`Scenario limit: ${E}`)}},{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 E=parseInt(v,10);if(!Number.isFinite(E)||E<1||E>20){N("error","/config",`Per-scenario limit must be 1-20 (got ${v})`);return}m.set("generate",{...C.generate,per_scenario_limit:E}),Ce(m.load()),N("ok","/config",`Per-scenario limit: ${E}`)}},{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 E=v==="on";m.set("generate",{...C.generate,memory_enabled:E}),Ce(m.load()),N("ok","/config",`Memory: ${E?"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"}),Ce(m.load()),N("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}),Ce(m.load()),N("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"}),Ce(m.load()),N("ok","/config code-export skip-validation",v)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{ar()}}]},[y,m,C,he,ar,Pe,vt,N,ft,_r,A.target,A.device,A.begin,A.requestApp]),ci=(0,R.useCallback)(d=>{if(O.askingUser){let S=O.askingUser;ke((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=Ro(d);if(h){if(!nd(h.command,Ne)){N("error",`/${h.command}`,`/${h.command} isn't available in ${Ne==="run"?"Run":"Generate"} mode.`);return}switch(h.command){case"profiles":if(Ne==="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=Jn(h.args.value);if(!S){N("error","/config set-url","Usage: /config set-url <url>");return}m.set("default_url",S),Ce(m.load()),N("ok","/config set-url",S);return}xr("config");return;case"mobile":{let S=Kn();if(!S.supported){N("error","/mobile",S.reason);return}if(ft){N("error","/mobile",_r(ft));return}A.begin("confirm");return}case"desktop":{if(ft){ft.kind==="web"?N("ok","/web","Session is already on Desktop."):N("error","/web",_r(ft));return}m.setMobile({tui_target:"desktop",default_target:void 0,default_app:void 0}),Ce(m.load()),A.reset(),N("ok","/web","Session target: web (Chrome)");return}case"doctor":{(async()=>{he({type:"info",text:"Running mobile toolchain checks\u2026"});let{runDoctor:S,renderDoctorText:T,doctorExitCode:v}=await import("./doctor-VWGEQYBB.js"),E=await S();he({type:"info",text:T(E)}),v(E)!==0&&he({type:"info",text:"Install the managed tooling with /mobile (interactive) or `kane-cli doctor --target <emulator|simulator> --install`."})})();return}case"help":ws(!0);return;case"testmd":if(O.isRunning||xe.isStreaming||Ie.running){N("error","/testmd","Finish or cancel the current run/generation first.");return}Ie.clearResult(),En(!0);return;case"generate":if(Ie.running){N("error","/generate","Finish or cancel the running test first.");return}Ne==="run"?Pt.requestSwitch("generate")&&N("ok","/generate","Switched to Generate mode.",void 0,l.generateAccent):N("ok","/generate","Already in Generate mode.",void 0,l.generateAccent);return;case"run":{let S=sd(Ne,h.args.objective);switch(S.kind){case"run":yr(S.objective,h.args.url);return;case"reject":N("error","/run",'Switch to Run mode first (bare /run), then /run "objective".');return;case"already":N("ok","/run","Already in Run mode.",void 0,l.orange);return;case"toggle":Pt.requestSwitch("run")&&N("ok","/run","Switched to Run mode.",void 0,l.orange);return}return}case"update":{(async()=>{let{getUpdateCommand:S}=await import("./version-check-JRLPWQ6T.js");N("ok","/update",`To update kane-cli, run: ${S()}`)})();return}case"summary":{if(Ne==="generate"&&!xe.requestId){Dn("no generation yet"),N("ok","/summary","(no generation yet)");return}let S=c.getFlows();if(S.length===0){N("ok","/summary","No runs yet in this session.");return}let T=h.args.index?parseInt(h.args.index,10):void 0;if(T!==void 0&&!c.getFlow(T)){N("error","/summary",`No flow at index ${T}`,`${S.length} flow${S.length===1?"":"s"} available. Use /summary to see all.`);return}ke((0,k.jsx)(fs,{flows:S,filterIndex:T})),N("ok","/summary",T!==void 0?`Flow ${T}`:`${S.length} flow${S.length===1?"":"s"}`);return}case"new":Ne==="generate"&&xe.requestId&&(nr(),xe.end().catch(S=>{N("error","/new",`Could not end generation cleanly: ${S.message}`)}),xe.reset()),Bs();return;case"name":{let S=h.raw.replace(/^\/name\s*/,"").trim();if(!S){N("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:T}=await import("./name-validator-5YGJXLZ7.js");try{T(S),c.setSessionName(S),N("ok","/name",`Session name set: ${S}`)}catch(v){N("error","/name",v.message)}})();return}case"cancel":if(Ne==="generate"&&xe.isStreaming){nr(),xe.cancel(),N("ok","/cancel","Cancelled");return}if(Ne==="generate"&&!xe.requestId){Dn("no generation yet"),N("ok","/cancel","(no generation yet)");return}if(Ie.running){Ie.cancel(),N("ok","/cancel","Run cancelled");return}O.cancelRun(),N("ok","/cancel","Run cancelled");return;case"clear":N("ok","/clear","Chat cleared");return;case"exit":Ne==="generate"&&xe.requestId&&(nr(),xe.end()),ar();return;default:N("error",`/${h.command}`,"Unknown command");return}}if(d.trim().toLowerCase()==="exit"){ar();return}ke((0,k.jsx)(_u,{objective:d})),yr(d,void 0)},[O,he,N,ke,c,yr,ar,Bs,Ne,xe.isStreaming,xe.requestId,xe,Dn,nr,Ie,C,s,ft,_r]);Ps.current=ci;let Ns=(0,R.useRef)(!1);(0,R.useEffect)(()=>{if(!Ns.current&&B&&u==="generate"&&f){Ns.current=!0;let d=setTimeout(()=>{Gf(f)},50);return()=>clearTimeout(d)}},[B,u,f]);let Ms=y.getAuthInfo(),Jf=Ms?Ms.method==="basic"?"basic auth":"oauth":"not logged in",Qf=(()=>{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"?Cn?["auth",d[Cn]]:["auth"]:Nt==="config"?Cn?["config",d[Cn]]:["config"]:Nt==="help"?["help"]:O.askingUser?["agent question"]:[]})();return(0,k.jsxs)(b,{flexDirection:"column",children:[!B&&!ys&&(0,k.jsx)(Iu,{onComplete:()=>{let d=y.creds.getActiveProfile(),h=y.creds.getDefaultEnv(),S=d?y.creds.loadCredentials(d,h):null,T=d?y.creds.loadBasicAuth(d,h):null,v=!!(S||T),E=T?.username??d??null;ke((0,k.jsx)(yo,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:xt,authenticated:v,user:E})),Af(!0);let j=(M,Z,Se,Re)=>{c.log(M,Z,Se,Re)};if($a(y.creds,j).then(M=>{if(M.status==="authenticated"){let{profile:Z,env:Se,tmsCreds:Re}=M.result;y.creds.setActiveProfile(Z),y.creds.setDefaultEnv(Se),vt(),zt(Re),Ot("ready"),F(!0)}else M.status==="needs_pick"?(Ef(M.profiles),Ot("pick")):Ot("login")}).catch(M=>{c.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(M)}),Ot("login")}),o&&o.then(async M=>{if(M){let{getUpdateCommand:Z}=await import("./version-check-JRLPWQ6T.js");N("ok","update available",`${M.current} \u2192 ${M.latest}`,`Run: ${Z()}`)}}).catch(()=>{}),i&&i.changes.length>0){let M=`kane-cli updated to ${i.toVersion}. Default settings changed:`,Z=[...i.changes.map(Se=>`\u2022 ${Se.description} (${Se.field}: ${JSON.stringify(Se.from)} \u2192 ${JSON.stringify(Se.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
26
|
+
`);N("ok","defaults updated",M,Z)}}}),!B&&rr==="booting"&&ys&&(0,k.jsx)(b,{paddingX:1,children:(0,k.jsx)(a,{color:"yellow",children:"Checking authentication..."})}),!B&&rr==="pick"&&(0,k.jsx)(dv,{profiles:Cf,onCancel:()=>Ot("login"),onSelect:async(d,h)=>{y.creds.setActiveProfile(d),y.creds.setDefaultEnv(h),vt(),Ho(!0);let S=(T,v,E,j)=>{c.log(T,v,E,j)};try{let T=await Ba(y.creds,d,h,S);Ho(!1),T.status==="authenticated"?(_t(d,h),zt(T.result.tmsCreds),Ot("ready"),F(!0)):Ot("login")}catch{Ho(!1),Ot("login")}},validating:If}),!B&&rr==="login"&&!V&&(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(d,h,S,T)=>{let{validateBasicAuth:v}=await import("./validate-basic-D7IJUFUQ.js");await v(h,S,T),y.creds.saveBasicAuth(d,h,{username:S,access_key:T}),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)=>{Ft(qo(h),kt).then(()=>{vt(),je({phase:"project",profile:d,env:h})}).catch(()=>{je({phase:"project",profile:d,env:h})})},onCancel:()=>{Nr(0,"Login cancelled at startup")}}),!B&&rr==="login"&&V?.phase==="project"&&(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(d,h)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:d,project_name:h}),N("ok","/config project",h,`id: ${d}`),je({...V,phase:"folder"})},onCancel:async()=>{let d=await Yo(V.profile,V.env);d&&(Bt(y.creds,m,V.profile,V.env,{projectId:d.id,projectName:d.name}),N("ok","/config project",d.name,`id: ${d.id}`),je({...V,phase:"folder"}))}}),!B&&rr==="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}),N("ok","/config folder",h,`id: ${d}`),_t(V.profile,V.env),je(null),Ot("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&&(Bt(y.creds,m,V.profile,V.env,{folderId:h.id,folderName:h.name}),N("ok","/config folder",h.name,`id: ${h.id}`),_t(V.profile,V.env),je(null),Ot("ready"),F(!0))}}),B&&kn==="menu"&&!Y&&(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:Jf}),(0,k.jsx)(a,{color:l.dim,children:" \u2502 "}),(0,k.jsxs)(a,{color:l.dim,children:[Dr??"no profile","/",ye]})]})}),B&&!Y&&(0,k.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[kn==="menu"&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(ss,{items:Os,onRunSelected:()=>_f("chat"),onActiveViewChange:Ss,renderLoginWizard:d=>{let h=V?.phase??"wizard";if(h==="project")return(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(S,T)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:S,project_name:T}),N("ok","/config project",T,`id: ${S}`),je(v=>v?{...v,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let S=await Yo(V.profile,V.env);S&&(Bt(y.creds,m,V.profile,V.env,{projectId:S.id,projectName:S.name}),N("ok","/config project",S.name,`id: ${S.id}`),je(T=>T?{...T,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:(T,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:T,folder_name:v}),N("ok","/config folder",v,`id: ${T}`),_t(V.profile,V.env),je(null),d()},onCancel:async()=>{if(!V)return;let T=y.creds.loadProfileConfig(V.profile,V.env);if(!T?.project_id)return;let v=await Jo(V.env,T.project_id);v&&(Bt(y.creds,m,V.profile,V.env,{folderId:v.id,folderName:v.name}),N("ok","/config folder",v.name,`id: ${v.id}`),_t(V.profile,V.env),je(null),d())}})}return(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(S,T,v,E)=>{let{validateBasicAuth:j}=await import("./validate-basic-D7IJUFUQ.js");await j(T,v,E),y.creds.saveBasicAuth(S,T,{username:v,access_key:E}),y.creds.setActiveProfile(S),y.creds.setDefaultEnv(T),Ct(y.creds,m,S,T),y.setTokenValid(!0),vt()},onOAuthLogin:async(S,T)=>{y.creds.setDefaultEnv(T),await y.login(S),Ct(y.creds,m,S,T),vt()},onComplete:(S,T)=>{Ft(qo(T),kt).then(()=>{je({phase:"project",profile:S,env:T})}).catch(()=>{je({phase:"project",profile:S,env:T})})},onCancel:()=>{je(null),d()}})},renderProfilesView:d=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(h,S)=>{let T=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(h),y.creds.setDefaultEnv(S),Ct(y.creds,m,h,S),_t(h,S),vt(),Ft(xs(S),kt).catch(()=>{}),N("ok","/profiles switch",`${T} \u2192 ${h} [${S}]`)},onCancel:d}),renderChromeProfilePicker:d=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:h=>{m.set("chrome_profile_path",h),Ce(m.load()),N("ok","/config chrome-profile",h),d()},onCancel:d}),renderProjectPicker:d=>(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(h,S)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:h,projectName:S}),N("ok","/config project",S,`id: ${h}`),Ce(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)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:h,folderName:S}),N("ok","/config folder",S,`id: ${h}`),Ce(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}),Ce(m.load()),N("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})})]}),kn==="chat"&&(0,k.jsxs)(k.Fragment,{children:[Xt&&!O.isRunning&&(0,k.jsx)(bi,{label:Xt.replace(/[.…\s]+$/,"")}),(()=>{let d=Xs({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)(Ws,{steps:O.steps,bifurcated:!!O.bifurcationInfo&&!O.bifurcationInfo.isSingleFlow,flows:O.bifurcationInfo?.flows,cmInitCounts:O.cmInitCounts,onStepCommit:ke,describe:Zr.text,describeVisible:Zr.visible,describeRevealing:Zr.revealing},`run-${le.current}`),Ie.runViewProps&&(0,k.jsx)(Ga,{...Ie.runViewProps,onCancel:()=>{Ie.runViewProps?.onCancel?.(),Ie.cancel()}}),Yr&&(0,k.jsx)(ld,{onClose:()=>ws(!1),version:xt,environment:y.creds.getDefaultEnv(),sessionId:c.sessionId,runUrl:C.default_url??di,mode:Ne}),Jr&&(0,k.jsx)(fd,{cwd:process.cwd(),currentOrgId:String(Le?.org_id??""),onClose:()=>En(!1),onRun:d=>{if(O.isRunning||xe.isStreaming||Ie.running){setTimeout(()=>N("error","/testmd","Finish or cancel the current run first."),0);return}En(!1),!(Ne==="generate"&&!Pt.requestSwitch("run"))&&(Ne==="generate"&&setTimeout(()=>N("ok","/testmd",`Switched to Run mode to run ${d.relPath}`,void 0,l.orange),0),Ie.start(d.path).catch(h=>setTimeout(()=>N("error","/testmd",`Run failed: ${h.message}`),0)))},onExport:d=>{En(!1),cc(d.path,{language:C.code_export.language??"python",env:ye}).then(h=>setTimeout(()=>N("ok","/testmd",`Exported code \u2192 ${h.codeDir}`),0)).catch(h=>setTimeout(()=>N("error","/testmd",`Export failed: ${h.message}`),0))}}),Nt&&!O.isRunning&&(()=>{let d=Os.find(h=>h.id===Nt);return d?.children?(0,k.jsx)(ss,{items:d.children,onRunSelected:()=>xr(null),onDismiss:()=>xr(null),onActiveViewChange:Ss,renderLoginWizard:h=>{let S=V?.phase??"wizard";if(S==="project")return(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:null,env:V.env,onSelect:(T,v)=>{y.creds.saveProfileConfig(V.profile,V.env,{project_id:T,project_name:v}),N("ok","/config project",v,`id: ${T}`),je(E=>E?{...E,phase:"folder"}:null)},onCancel:async()=>{if(!V)return;let T=await Yo(V.profile,V.env);T&&(Bt(y.creds,m,V.profile,V.env,{projectId:T.id,projectName:T.name}),N("ok","/config project",T.name,`id: ${T.id}`),je(v=>v?{...v,phase:"folder"}:null))}});if(S==="folder"){let T=y.creds.loadProfileConfig(V.profile,V.env);return(0,k.jsx)(jr,{resolver:y.getResolver(),projectId:T?.project_id??"",currentFolderId:null,env:V.env,onSelect:(v,E)=>{y.creds.saveProfileConfig(V.profile,V.env,{folder_id:v,folder_name:E}),N("ok","/config folder",E,`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 E=await Jo(V.env,v.project_id);E&&(Bt(y.creds,m,V.profile,V.env,{folderId:E.id,folderName:E.name}),N("ok","/config folder",E.name,`id: ${E.id}`),_t(V.profile,V.env),je(null),h())}})}return(0,k.jsx)(Wn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:y.creds.listProfiles(),onBasicLogin:async(T,v,E,j)=>{let{validateBasicAuth:M}=await import("./validate-basic-D7IJUFUQ.js");await M(v,E,j),y.creds.saveBasicAuth(T,v,{username:E,access_key:j}),y.creds.setActiveProfile(T),y.creds.setDefaultEnv(v),Ct(y.creds,m,T,v),y.setTokenValid(!0),vt()},onOAuthLogin:async(T,v)=>{y.creds.setDefaultEnv(v),await y.login(T),Ct(y.creds,m,T,v),vt()},onComplete:(T,v)=>{Ft(qo(v),kt).then(()=>{je({phase:"project",profile:T,env:v})}).catch(()=>{je({phase:"project",profile:T,env:v})})},onCancel:()=>{je(null),h()}})},renderProfilesView:h=>(0,k.jsx)(vi,{creds:y.creds,onSwitch:(S,T)=>{let v=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(S),y.creds.setDefaultEnv(T),Ct(y.creds,m,S,T),_t(S,T),vt(),Ft(xs(T),kt).catch(()=>{}),N("ok","/profiles switch",`${v} \u2192 ${S} [${T}]`),h()},onCancel:h}),renderChromeProfilePicker:h=>(0,k.jsx)(xi,{currentPath:C.chrome_profile_path,onSelect:S=>{m.save({chrome_profile_path:S}),Ce(m.load()),N("ok","/config chrome-profile",S),h()},onCancel:h}),renderProjectPicker:h=>(0,k.jsx)(Mr,{resolver:y.getResolver(),currentProjectId:C.project_id,env:ye,onSelect:(S,T)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{projectId:S,projectName:T}),Ce(m.load()),N("ok","/config project",T,`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,T)=>{Bt(y.creds,m,y.creds.getActiveProfile()??"default",y.creds.getDefaultEnv(),{folderId:S,folderName:T}),Ce(m.load()),N("ok","/config folder",T,`id: ${S}`),h()},onCancel:h}),renderWindowSizePicker:h=>(0,k.jsx)(ds,{currentWidth:C.window_size.width,currentHeight:C.window_size.height,onSelect:(S,T)=>{m.set("window_size",{width:S,height:T}),Ce(m.load()),N("ok","/config set-window",`${S} \xD7 ${T}`),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})}),Ne==="run"&&!Nt&&!Yr&&!Jr&&!Rt&&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})})]})})]}),In&&(()=>{let d=In,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)(df,{message:h,confirmLabel:S,onConfirm:async()=>{if(d.reason==="switch"){let v=d.to;Qr(null),Pt.confirmSwitch(v);return}nr();let T=d.pendingArgs;if(Qr(null),await xe.end(),xe.reset(),T.profile){let v=y.creds.getDefaultEnv(),E=y.creds.getActiveProfile()??"(none)";y.creds.setActiveProfile(T.profile),y.creds.setDefaultEnv(v),Ct(y.creds,m,T.profile,v),_t(T.profile,v),vt(),Ft({kind:"switch",env:v},kt).catch(()=>{}),N("ok","/profiles switch",`${E} \u2192 ${T.profile} [${v}]`)}else ci("/profiles switch")},onCancel:()=>Qr(null)})})(),Rs&&(0,k.jsxs)(b,{flexDirection:"column",paddingX:1,marginTop:1,children:[A.phase==="doctor"?(0,k.jsx)(Ku,{checks:A.checks,busyMessage:A.busyMessage,onRetry:A.recheck,onInstall:A.install,onCancel:A.cancel}):A.phase==="apps"&&A.kind?(0,k.jsx)(fa,{kind:A.kind,onSelect:d=>A.selectApp(d),onBack:A.back,onCancel:A.back}):A.phase==="appList"&&A.kind?(0,k.jsx)(da,{kind:A.kind,busyMessage:A.busyMessage,listApps:Uf,onSelect:d=>{A.selectAppId(d.appId)},onManualEntry:A.requestAppId,onCancel:A.back}):A.phase==="appId"?(0,k.jsx)(ja,{busyMessage:A.busyMessage,onSubmit:d=>A.selectAppId(d),onBack:A.back}):A.phase==="chooser"?(0,k.jsx)(Na,{mode:"mobile-only",onSelect:d=>{(d==="emulator"||d==="simulator")&&A.selectKind(d)},onCancel:A.back}):A.phase==="confirm"&&A.saved?(0,k.jsx)(id,{saved:A.saved,onContinue:()=>A.confirmSaved(),onChangeDevice:()=>A.begin("reinit"),onChangeApp:()=>A.confirmSaved({keepApp:!1}),onCancel:A.cancel}):A.phase==="appSource"&&A.kind?(0,k.jsx)(Ma,{kind:A.kind,onSelect:d=>d==="uploaded"?A.requestCloudApps():A.requestApp(),onCancel:A.back}):(0,k.jsx)(ua,{targets:A.targets,preselectedTarget:C.mobile?.default_target,busyMessage:A.busyMessage??(A.phase==="checking"?"Checking mobile toolchain\u2026":null),onSelect:d=>{A.selectTarget(d)},onCancel:A.back,...A.kind?{kind:A.kind}:{}}),A.error&&(0,k.jsx)(a,{color:"red",children:A.error})]}),Pr&&(0,k.jsx)(Gu,{suggested:Pr.suggested,sessionTargetLabel:Ir.kind==="unset"||Ir.kind==="choose-mobile"?"Desktop":rn(Ir.kind),appHint:Pr.verdict.appHint,savedDeviceName:C.mobile?.default_target?.id??null,onAccept:()=>Ln("accept"),onPickDevice:()=>Ln("pick"),onKeep:()=>Ln("keep"),onCancel:()=>Ln("cancel")}),Ne==="run"&&!Nt&&!Yr&&!Jr&&!Rt&&!In&&!Ie.running&&!Rs&&!Pr&&(0,k.jsx)(lr,{onSubmit:ci,onEscape:void 0,history:Df,commands:rd(xn(td),ft),clearSeq:Hf,loadMentionItems:Ar?jf:void 0,mentionHint:Ar&&!A.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"}]}),Ne==="generate"&&!Nt&&!Yr&&!Jr&&!Rt&&!In&&(0,k.jsx)(lf,{tcg:xe,gm:Pt,history:Lf,tuiConfig:C,browse:sr.isOpen?{target:sr.target,onClose:sr.close,excluded:sr.excluded,onToggleCase:sr.toggleCase,onToggleScenario:sr.toggleScenario,getStatus:Pt.bifurcation.getStatus,getResult:Pt.bifurcation.getResult}:null})]})]}),B&&Y&&ge&&(0,k.jsxs)(k.Fragment,{children:[(0,k.jsx)(Ri,{steps:$t,status:ge.status,testUrl:ge.testUrl,error:ge.error}),ge.status==="success"&&(0,k.jsx)(Zn,{recordedTestPath:Q?.recordedTestPath,outputDir:Q?.outputDir,shareableLink:ge.testUrl,testCaseLink:ge.testCaseLink,codeExportDir:ge.codeExportDir,autoExit:!1})]}),Rt&&(0,k.jsx)(Ec,{defaultName:Rt,onSubmit:Yf}),gr&&(0,k.jsx)(_a,{packPath:gr.packPath,viewerBase:Ia(ye??"prod"),onDone:()=>gr.resolve()}),Kr&&(0,k.jsx)(Cc,{onSubmit:Kf}),mr&&ge&&(0,k.jsx)(Ri,{steps:$t,status:ge.status,error:ge.error}),B&&!Y&&(0,k.jsx)(ku,{profile:Dr,environment:ye,tokenValid:y.tokenValid,runCount:oe,sessionId:c.sessionId,viewMode:kn,breadcrumb:Qf,chatMode:Ne,footerHint:Xf,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:Ar?{kind:Ir.kind==="simulator"?"simulator":"emulator",...A.target?{deviceName:A.target.displayName}:{},...A.device?.app_package?{appPackage:A.device.app_package}:{}}:{kind:"desktop"},targetLocked:ft!==null})]})}function dv({profiles:e,onSelect:t,onCancel:r,validating:n}){let[o,i]=(0,R.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{Wu as a,Xu as b,Ju as c,vf as d,kf as e,XC as f};
|