@testmuai/kane-cli 0.4.2 → 0.4.4
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/{ChromeProfilePicker-HNP7QQ4J.js → ChromeProfilePicker-H427EL5U.js} +1 -1
- package/dist/{CliFeedbackPrompt-OSNATI4W.js → CliFeedbackPrompt-D7DXZR4B.js} +1 -1
- package/dist/{CliUploadProgress-7HRWDZ4P.js → CliUploadProgress-TZOIZVBK.js} +1 -1
- package/dist/{ConfigView-PQH67FUK.js → ConfigView-ZU5ZNKUD.js} +1 -1
- package/dist/FolderPicker-3NJWN2F2.js +2 -0
- package/dist/{HelpView-HFKFRKG3.js → HelpView-DWUH3LLF.js} +1 -1
- package/dist/{InfoBox-3IN3IZ2I.js → InfoBox-5GHCKHZE.js} +1 -1
- package/dist/{LinksBox-DI5QKX6K.js → LinksBox-7RJTKT4B.js} +1 -1
- package/dist/{ProfilesView-N6XNSUHQ.js → ProfilesView-YSIGYTJM.js} +1 -1
- package/dist/{ProjectPicker-6QIVHOO7.js → ProjectPicker-XC6TSIR2.js} +1 -1
- package/dist/{SaveSessionPrompt-7CZHPNYK.js → SaveSessionPrompt-MRUJIK7M.js} +1 -1
- package/dist/SingleShotApp-M6GGEFNF.js +2 -0
- package/dist/{SummaryBox-7ZK2A6MA.js → SummaryBox-ANGQ3UJN.js} +1 -1
- package/dist/TestMdRunView-PMTEPMCQ.js +2 -0
- package/dist/{WhoamiView-3E447A3G.js → WhoamiView-D5XIL6WM.js} +1 -1
- package/dist/{changelog-ZBTZCYKI.js → changelog-LAWVQATM.js} +1 -1
- package/dist/{chunk-CZBHDBID.js → chunk-2COEECXK.js} +1 -1
- package/dist/{chunk-NKFXY5TF.js → chunk-2PAQTECV.js} +2 -2
- package/dist/{chunk-RCL22HDJ.js → chunk-34JPQPWA.js} +1 -1
- package/dist/{chunk-VBZIIF5N.js → chunk-5JCW7SWD.js} +1 -1
- package/dist/{chunk-S7JV4A3U.js → chunk-6TJO4BQP.js} +1 -1
- package/dist/{chunk-YB67GRWE.js → chunk-ALVFWRMC.js} +1 -1
- package/dist/{chunk-4ZHU4DLD.js → chunk-CIJJJRAO.js} +1 -1
- package/dist/{chunk-EEF6OT52.js → chunk-D3NAXZ2R.js} +8 -8
- package/dist/{chunk-34YRU7WM.js → chunk-F5QI2E6V.js} +2 -2
- package/dist/{chunk-KPF3BPJ5.js → chunk-FNRTXVR2.js} +1 -1
- package/dist/chunk-FS2B5IHO.js +2 -0
- package/dist/{chunk-GNJBT6SS.js → chunk-GAZK7QSI.js} +1 -1
- package/dist/{chunk-PQIPYWTP.js → chunk-H6SXCNLJ.js} +1 -1
- package/dist/{chunk-UHGECBEN.js → chunk-IUECYFR6.js} +1 -1
- package/dist/{chunk-RD6G3CMN.js → chunk-JRBDKEHJ.js} +1 -1
- package/dist/chunk-JSCT5YQ6.js +2 -0
- package/dist/chunk-JULO4KDA.js +22 -0
- package/dist/{chunk-VL57GII7.js → chunk-JWJAOZT6.js} +1 -1
- package/dist/{chunk-QXVI3LI4.js → chunk-KXRQELOX.js} +1 -1
- package/dist/{chunk-ELZIC2EH.js → chunk-LCLMSRS3.js} +1 -1
- package/dist/{chunk-OISHNB7D.js → chunk-LUYOWEJW.js} +1 -1
- package/dist/{chunk-7CBWZLRS.js → chunk-M23DF6UM.js} +1 -1
- package/dist/{chunk-PF7PBYCJ.js → chunk-MCYS4R5P.js} +1 -1
- package/dist/{chunk-R7T6Z6QW.js → chunk-MRKDRLID.js} +1 -1
- package/dist/{chunk-FFTIDI5K.js → chunk-POFY6TC3.js} +1 -1
- package/dist/{chunk-HN7DVSVI.js → chunk-PUU7A26K.js} +1 -1
- package/dist/chunk-QAS2SVT3.js +5 -0
- package/dist/chunk-QIMR6EU3.js +8 -0
- package/dist/{chunk-AAJSF67A.js → chunk-QSOQ2JMW.js} +1 -1
- package/dist/{chunk-4UKCDU64.js → chunk-RKAQBRNT.js} +1 -1
- package/dist/{chunk-DGUXTSHM.js → chunk-RSRBUJRW.js} +1 -1
- package/dist/chunk-TTRJNNAV.js +2 -0
- package/dist/{chunk-BM25JQ3Z.js → chunk-W4OWTRMO.js} +1 -1
- package/dist/{chunk-Y6IUJZMV.js → chunk-WUY26ICP.js} +1 -1
- package/dist/{chunk-TQGNNJX5.js → chunk-YJY3HPGV.js} +1 -1
- package/dist/{chunk-LOSNFBZV.js → chunk-YPOA4277.js} +1 -1
- package/dist/{chunk-AKKATURY.js → chunk-Z5YG763L.js} +2 -2
- package/dist/chunk-ZTYRCGGQ.js +60 -0
- package/dist/{generate-headless-WL6A6ACX.js → generate-headless-FYQ4IAPL.js} +2 -2
- package/dist/index.js +36 -36
- package/dist/{list-commands-MK4W3Q7O.js → list-commands-JMSIAYLR.js} +1 -1
- package/dist/login-flow-WMUIDH7C.js +2 -0
- package/dist/{persist-recorded-session-A5EJ25AE.js → persist-recorded-session-QUEFYH4U.js} +1 -1
- package/dist/{pipeline-L5TDZMLS.js → pipeline-IXEPO6AR.js} +1 -1
- package/dist/{recording-banner-6UI6NNRK.js → recording-banner-TI2Q7HV5.js} +1 -1
- package/dist/{require-project-folder-J5WZR653.js → require-project-folder-HOSORDUO.js} +1 -1
- package/dist/{run-test-md-I76IV7QA.js → run-test-md-XFQCBCIC.js} +6 -6
- package/dist/{skill-installer-ZLBRT4QP.js → skill-installer-WYDRFJRS.js} +1 -1
- package/dist/tcg-generate-7IZZWQSU.js +2 -0
- package/dist/testmd-actions-QH7EQAOK.js +2 -0
- package/dist/token-refresh-YTRMAHED.js +2 -0
- package/dist/{validate-basic-QUPVT2EV.js → validate-basic-CAF6WSCM.js} +1 -1
- package/dist/{version-check-RVK5YKDZ.js → version-check-2RMMQEZJ.js} +1 -1
- package/package.json +6 -5
- package/dist/FolderPicker-SET7IG6S.js +0 -2
- package/dist/SingleShotApp-A4VXMXEZ.js +0 -2
- package/dist/TestMdRunView-KGHEZZBK.js +0 -2
- package/dist/chunk-3QWAABMG.js +0 -2
- package/dist/chunk-DQASLGFG.js +0 -60
- package/dist/chunk-H2P7UJAU.js +0 -8
- package/dist/chunk-K4PLPKPF.js +0 -5
- package/dist/chunk-LY5LHKGG.js +0 -18
- package/dist/chunk-RLSBAT6P.js +0 -2
- package/dist/chunk-WFSTRBQF.js +0 -2
- package/dist/login-flow-CDR6ARK3.js +0 -2
- package/dist/tcg-generate-R6P4QUGO.js +0 -2
- package/dist/testmd-actions-W2INQVTH.js +0 -2
- package/dist/token-refresh-4QLWR5ZI.js +0 -2
package/dist/chunk-LY5LHKGG.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as fi,b as Gr,c as Gn,d as pi,e as qn,f as gi,h as hi,i as xi,j as vi,k as bi,l as yi,m as it,n as Ti,o as wi,p as Si,q as Wn,r as Ri,s as qr,t as ki,u as Ci,v as Ii}from"./chunk-QXVI3LI4.js";import{a as Dr,b as Co}from"./chunk-3MSXQU2C.js";import{a as Ei}from"./chunk-OISHNB7D.js";import{a as Po,b as Do,d as No,e as Uo,f as Go,g as ni,h as Fr,i as Nr,k as ri,l as oi,m as ii,n as si,o as Ur,p as ai,q as ci,r as li,t as ot,u as di}from"./chunk-DQASLGFG.js";import{a as ui}from"./chunk-EEF6OT52.js";import{a as Yo,b as Jo,l as mi}from"./chunk-AKKATURY.js";import{a as _i,b as Wr}from"./chunk-R7T6Z6QW.js";import{a as Qo}from"./chunk-HN7DVSVI.js";import{b as Ko}from"./chunk-AH4AXJML.js";import{a as Io,b as Lr,c as yt,d as $n,e as Ho,f as zo}from"./chunk-DGUXTSHM.js";import{c as Fn}from"./chunk-BM25JQ3Z.js";import{a as qt}from"./chunk-H2P7UJAU.js";import{a as Fo}from"./chunk-FPFOW6BS.js";import{a as _o,b as Ao,c as Bo,d as qo,e as Wo,f as Xo,h as Zo}from"./chunk-FFTIDI5K.js";import{a as Nn,b as ei,c as $r}from"./chunk-VL57GII7.js";import{a as jr}from"./chunk-PQIPYWTP.js";import{c as ti}from"./chunk-TQGNNJX5.js";import{a as Un}from"./chunk-RD6G3CMN.js";import{b as Ut}from"./chunk-4ZHU4DLD.js";import{b as Gt}from"./chunk-4UKCDU64.js";import{a as jo,d as rt,e as dn,f as Tt,g as Wt}from"./chunk-LOIRZFV3.js";import{g as Mo}from"./chunk-VBZIIF5N.js";import{a as un}from"./chunk-LPUQ4HWQ.js";import{a as Xe,b as et,c as Lo}from"./chunk-VE3SUJMA.js";import{a as Oo}from"./chunk-Y6IUJZMV.js";import{a as $o}from"./chunk-LOSNFBZV.js";import{a as On}from"./chunk-PF7PBYCJ.js";import{a as Vo}from"./chunk-WFSTRBQF.js";import{a as qe}from"./chunk-S7JV4A3U.js";import{a as Mr}from"./chunk-7CBWZLRS.js";import{a as dt}from"./chunk-UHGECBEN.js";import{b as Eo}from"./chunk-C6S4IEBC.js";import{b as Vr}from"./chunk-ELZIC2EH.js";import{c as Or}from"./chunk-YB67GRWE.js";import{a as Nt}from"./chunk-GNJBT6SS.js";import{a as cn,c as je,j as ln,v as r}from"./chunk-3QWAABMG.js";import{a as M}from"./chunk-HCBYKLMW.js";import{a as g,b as n,i as ye,j as ko,k as Vn}from"./chunk-C44QQJR4.js";import{a as me}from"./chunk-6YGTRKDT.js";import{e as k}from"./chunk-UR6MHSHU.js";var S=k(me(),1);var Ai=k(me(),1);var Ht=k(M(),1);function Bi({path:e}){return e.length===0?null:(0,Ht.jsx)(g,{children:e.map((t,o)=>(0,Ht.jsxs)(Ai.default.Fragment,{children:[o>0&&(0,Ht.jsx)(n,{color:r.muted,children:" \u203A "}),(0,Ht.jsx)(n,{color:r.dim,children:t})]},o))})}var z=k(M(),1);function Pi({profile:e,environment:t,tokenValid:o,runCount:i,sessionId:m,viewMode:s,breadcrumb:u,chatMode:x,tcgRequestId:h,tcgStreamStatus:y}){let{stdout:A}=Vn(),T=A?.columns??80,C=x??"run",l=t==="stage",d=t==="prod",B=C==="generate"?r.generateAccent:r.orange,V=y==="completed"?r.green:y==="failed"?r.red:r.generateAccent;return(0,z.jsxs)(g,{flexDirection:"column",children:[(0,z.jsx)(n,{color:r.muted,children:"\u2500".repeat(T)}),u&&u.length>0&&(0,z.jsx)(g,{paddingX:1,children:(0,z.jsx)(Bi,{path:u})}),(0,z.jsxs)(g,{paddingX:1,gap:1,children:[(0,z.jsx)(n,{color:r.dim,children:"Mode:"}),(0,z.jsx)(n,{color:B,bold:!0,children:C==="generate"?"Generate":"Run"}),(0,z.jsx)(n,{color:r.muted,children:"|"}),C==="generate"?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(n,{color:r.dim,children:"req"}),(0,z.jsx)(n,{color:r.dim,children:h??"\u2014"}),y&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(n,{color:r.muted,children:"\xB7"}),(0,z.jsx)(n,{color:V,children:y})]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(n,{color:r.dim,children:"Session:"}),(0,z.jsx)(n,{color:r.dim,children:m})]}),(0,z.jsx)(n,{color:r.muted,children:"|"}),(0,z.jsx)(n,{color:o?r.green:r.red,children:"\u25CF"}),(0,z.jsx)(n,{color:r.dim,children:o?"authenticated":"not logged in"}),!d&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(n,{color:r.muted,children:"|"}),l?(0,z.jsx)(n,{color:r.orange,bold:!0,children:"\u26A0 stage"}):(0,z.jsx)(n,{color:r.green,children:t})]})]}),(0,z.jsxs)(g,{paddingX:1,gap:1,children:[(0,z.jsx)(n,{color:r.dim,children:e??"no profile"}),C==="run"&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(n,{color:r.muted,children:"|"}),(0,z.jsxs)(n,{color:r.dim,children:["runs: ",i]})]}),(0,z.jsx)(n,{color:r.muted,children:"|"}),(0,z.jsx)(n,{dimColor:!0,children:Co()})]}),(0,z.jsx)(g,{paddingX:1,children:(0,z.jsx)(n,{dimColor:!0,children:s==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var Bt=k(me(),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 J=k(M(),1),Hn="#af87d7",Hr="#875faf",Di="#5b3a7a",ga="#ff9500",ha="#ea580c";var zr="#666666",xa="#555555",At=[[Hn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Hr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],Xr=At.map(([,e])=>[...e]);function Li({visibleRows:e=At.length}){let t=Math.min(e,At.length);return(0,J.jsxs)(g,{flexDirection:"column",children:[At.slice(0,t).map(([o,i],m)=>{let s=Xr[m];return(0,J.jsx)(n,{children:s.map((u,x)=>{if(u==="\u2588")return(0,J.jsx)(n,{color:o,children:"\u2588"},x);let h=x>0&&s[x-1]==="\u2588",y=m>0&&x>0&&Xr[m-1][x-1]==="\u2588";return h||y?(0,J.jsx)(n,{color:Di,children:"\u2592"},x):(0,J.jsx)(n,{children:" "},x)})},m)}),t>=At.length&&(0,J.jsxs)(n,{children:[" ",Xr[At.length-1].map((o,i)=>o==="\u2588"?(0,J.jsx)(n,{color:Di,children:"\u2580"},i):(0,J.jsx)(n,{children:" "},i))]})]})}function va({visibleRows:e=mn.length}){let t=Math.min(e,mn.length);return(0,J.jsx)(g,{flexDirection:"column",children:mn.slice(0,t).map((o,i)=>(0,J.jsx)(n,{children:o.map((m,s)=>{let u=m[0],x=m[1],h=m[2];return x?(0,J.jsx)(n,{color:x,backgroundColor:h,children:u},s):(0,J.jsx)(n,{children:u},s)})},i))})}function zn({size:e="compact",helmetVisibleRows:t=mn.length,textVisibleRows:o=At.length,showMeta:i=!1,user:m=null,authenticated:s=!1,version:u=""}){return e==="compact"?(0,J.jsx)(Li,{}):(0,J.jsxs)(g,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,J.jsx)(n,{color:ga,italic:!0,children:" Welcome to"}),(0,J.jsx)(n,{children:" "}),(0,J.jsxs)(g,{gap:2,children:[(0,J.jsx)(va,{visibleRows:t}),(0,J.jsxs)(g,{flexDirection:"column",children:[(0,J.jsx)(Li,{visibleRows:o}),(0,J.jsx)(g,{justifyContent:"flex-end",width:73,children:(0,J.jsx)(n,{color:ha,italic:!0,children:"Command-line interface"})})]})]}),i&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(n,{children:" "}),(0,J.jsxs)(n,{children:[(0,J.jsx)(n,{color:zr,children:" Browser automation powered by AI. "}),(0,J.jsx)(n,{color:xa,children:`v${u}`})]}),(0,J.jsx)(n,{children:" "}),(0,J.jsx)(n,{children:(0,J.jsx)(n,{color:zr,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,J.jsx)(n,{children:(0,J.jsx)(n,{color:zr,children:" data \u2014 right from your terminal."})}),(0,J.jsx)(n,{children:" "})]})]})}var Jr=k(M(),1),Kr=8,Yr=7;function ji({onComplete:e}){let[t,o]=(0,Bt.useState)(0),[i,m]=(0,Bt.useState)(0),[s,u]=(0,Bt.useState)(!1),[x]=(0,Bt.useState)(()=>{let h=new On,y=h.getActiveProfile(),A=h.getDefaultEnv(),T=y?h.loadCredentials(y,A):null,C=y?h.loadBasicAuth(y,A):null;return{authenticated:!!(T||C),user:C?.username??y??null}});return jr(()=>{o(h=>Math.min(Kr,h+1))},t<Kr?60:null),jr(()=>{m(h=>Math.min(Yr,h+1))},i<Yr?80:null),(0,Bt.useEffect)(()=>{t>=Kr&&i>=Yr&&!s&&(u(!0),e?.())},[t,i,s,e]),(0,Jr.jsx)(g,{flexDirection:"column",children:(0,Jr.jsx)(zn,{size:"full",helmetVisibleRows:t,textVisibleRows:i,showMeta:s,user:x.user,authenticated:x.authenticated,version:cn})})}var mt=k(M(),1);function Mi({entry:e}){return e.type==="input"?(0,mt.jsxs)(g,{children:[(0,mt.jsx)(n,{color:r.orange,children:"\u276F "}),(0,mt.jsx)(n,{children:e.text})]}):e.type==="error"?(0,mt.jsx)(g,{marginLeft:2,children:(0,mt.jsx)(n,{color:r.red,children:e.text})}):(0,mt.jsx)(g,{marginLeft:2,children:(0,mt.jsx)(n,{color:e.type==="info"?r.dim:void 0,children:e.text})})}var st=k(me(),1);var Me=k(M(),1);function ba(e,t){let o=[],m=Math.max(t-4,30);o.push({type:"title",text:e.title});for(let s=0;s<e.sections.length;s++){let u=e.sections[s];s>0&&o.push({type:"divider",text:"\u2500".repeat(m)}),u.label&&o.push({type:"header",text:u.label});let x=u.entries.length>0?Math.max(...u.entries.map(h=>h.key.length)):0;for(let h of u.entries){let y="\xB7".repeat(Math.max(2,x-h.key.length+3)),A=`${h.key} ${y} ${h.value}`;o.push({type:"entry",text:A,color:h.color})}}return o.push({type:"footer",text:"esc back"}),o}function Vi({data:e,width:t=60}){let o=ba(e,t);return(0,Me.jsx)(g,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:o.map((i,m)=>{if(i.type==="title")return(0,Me.jsx)(n,{color:r.orange,bold:!0,children:i.text},m);if(i.type==="header")return(0,Me.jsx)(g,{marginTop:1,children:(0,Me.jsx)(n,{color:r.dim,children:i.text})},m);if(i.type==="divider")return(0,Me.jsx)(g,{marginTop:1,marginBottom:0,children:(0,Me.jsx)(n,{color:r.muted,children:i.text})},m);if(i.type==="footer")return(0,Me.jsx)(g,{marginTop:1,children:(0,Me.jsx)(n,{color:r.dim,children:i.text})},m);let s=i.text.match(/^(.+?) (·+) (.+)$/);return s?(0,Me.jsxs)(n,{children:[(0,Me.jsxs)(n,{color:r.secondary,children:[s[1]," "]}),(0,Me.jsxs)(n,{color:r.muted,children:[s[2]," "]}),(0,Me.jsx)(n,{color:i.color,children:s[3]})]},m):(0,Me.jsx)(n,{color:i.color,children:i.text},m)})})}var Ce=k(M(),1);function Qr(e,t){let o=[];function i(m,s){for(let u of m)o.push({item:u,depth:s}),u.type==="submenu"&&u.children&&t.length>s&&t[s]===u.id&&i(u.children,s+1)}return i(e,0),o}function Zr({items:e,onRunSelected:t,initialExpandedPath:o,onDismiss:i,renderLoginWizard:m,renderProfilesView:s,renderChromeProfilePicker:u,renderProjectPicker:x,renderFolderPicker:h,renderWindowSizePicker:y,onActiveViewChange:A}){let[T,C]=(0,st.useState)(()=>{let j=o??[],F=Qr(e,j),E=0;if(j.length>0){let O=F.findIndex(ee=>ee.item.id===j[0]);O>=0&&O+1<F.length&&(E=O+1)}return{expandedPath:j,selectedIndex:E,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),l=Qr(e,T.expandedPath),d=l[T.selectedIndex]?.item,B=(0,st.useRef)(null),V=(0,st.useCallback)(j=>{C(F=>({...F,feedback:j})),B.current&&clearTimeout(B.current),B.current=setTimeout(()=>{C(F=>({...F,feedback:null})),B.current=null},4e3)},[]);(0,st.useEffect)(()=>()=>{B.current&&clearTimeout(B.current)},[]),(0,st.useEffect)(()=>{A?.(T.activeView)},[T.activeView,A]);let $=(0,st.useCallback)(()=>{C(j=>({...j,activeView:null,infoData:null}))},[]);return ye((j,F)=>{if(T.activeView==="infoView"){F.escape&&$();return}if(!(T.activeView==="loginWizard"||T.activeView==="profilesView"||T.activeView==="chromeProfilePicker"||T.activeView==="projectPicker"||T.activeView==="folderPicker"||T.activeView==="windowSizePicker")){if(T.isEditing){if(F.escape){C(E=>({...E,isEditing:!1,inputValue:""}));return}if(F.return){let E=T.inputValue.trim();if(d?.onValue&&E){let O=d.currentValue;d.onValue(E),V(O?`${d.label}: ${O} \u2192 ${E}`:`${d.label}: ${E}`)}C(O=>({...O,isEditing:!1,inputValue:""}));return}if(F.backspace||F.delete){C(E=>({...E,inputValue:E.inputValue.slice(0,-1)}));return}j&&!F.ctrl&&!F.meta&&C(E=>({...E,inputValue:E.inputValue+j}));return}if(T.isSelecting&&d?.options){let E=d.options;if(F.escape){C(O=>({...O,isSelecting:!1}));return}if(F.upArrow){C(O=>({...O,inputValue:String(Math.max(0,Number(O.inputValue||"0")-1))}));return}if(F.downArrow){C(O=>({...O,inputValue:String(Math.min(E.length-1,Number(O.inputValue||"0")+1))}));return}if(F.return){let O=Number(T.inputValue||"0"),ee=E[O];if(ee&&d.onValue){let te=d.currentValue;d.onValue(ee.value),V(te?`${d.label}: ${te} \u2192 ${ee.label}`:`${d.label}: ${ee.label}`)}C(te=>({...te,isSelecting:!1,inputValue:""}));return}return}if(F.upArrow){C(E=>({...E,selectedIndex:Math.max(0,E.selectedIndex-1)}));return}if(F.downArrow){C(E=>({...E,selectedIndex:Math.min(l.length-1,E.selectedIndex+1)}));return}if(F.escape){if(T.expandedPath.length===0){i?.();return}C(E=>{let O=E.expandedPath.slice(0,-1),ee=Qr(e,O),te=E.expandedPath[E.expandedPath.length-1],ae=ee.findIndex(q=>q.item.id===te);return{...E,expandedPath:O,selectedIndex:ae>=0?ae:0}});return}if(F.return&&d){if(d.id==="run-start"){t();return}if(d.type==="submenu"){let E=l[T.selectedIndex]?.depth??0;C(O=>({...O,expandedPath:[...O.expandedPath.slice(0,E),d.id],selectedIndex:O.selectedIndex+1}));return}if(d.onInfo){let E=d.onInfo();C(O=>({...O,activeView:"infoView",infoData:E}));return}if(d.onLoginWizard){d.onLoginWizard(),C(E=>({...E,activeView:"loginWizard"}));return}if(d.onProfilesView){d.onProfilesView(),C(E=>({...E,activeView:"profilesView"}));return}if(d.onChromeProfilePicker){d.onChromeProfilePicker(),C(E=>({...E,activeView:"chromeProfilePicker"}));return}if(d.onProjectPicker){d.onProjectPicker(),C(E=>({...E,activeView:"projectPicker"}));return}if(d.onFolderPicker){d.onFolderPicker(),C(E=>({...E,activeView:"folderPicker"}));return}if(d.onWindowSizePicker){d.onWindowSizePicker(),C(E=>({...E,activeView:"windowSizePicker"}));return}if(d.type==="action"){d.onAction?.(),d.suppressFeedback||V(`${d.label} done`);return}if(d.type==="select"&&d.options){let E=d.options.findIndex(O=>O.value===d.currentValue);C(O=>({...O,isSelecting:!0,inputValue:String(Math.max(0,E))}));return}if(d.type==="text-input"){C(E=>({...E,isEditing:!0,inputValue:d.currentValue??""}));return}}}}),(0,Ce.jsx)(g,{flexDirection:"column",paddingX:1,children:T.activeView==="infoView"&&T.infoData?(0,Ce.jsx)(Vi,{data:T.infoData}):T.activeView==="loginWizard"&&m?m($):T.activeView==="profilesView"&&s?s($):T.activeView==="chromeProfilePicker"&&u?u($):T.activeView==="projectPicker"&&x?x($):T.activeView==="folderPicker"&&h?h($):T.activeView==="windowSizePicker"&&y?y($):(0,Ce.jsxs)(Ce.Fragment,{children:[l.map(({item:j,depth:F},E)=>{let O=E===T.selectedIndex,ee=" ".repeat(F),te=O?"\u276F ":" ",ae=j.type==="submenu"?T.expandedPath.includes(j.id)?"\u25BC ":"\u25B6 ":" ",q=j.currentValue!=null?` [${j.currentValue}]`:"";if(O&&T.isSelecting&&j.options){let ue=Number(T.inputValue||"0");return(0,Ce.jsxs)(g,{flexDirection:"column",children:[(0,Ce.jsxs)(n,{color:r.orange,children:[ee,te,ae,j.label]}),j.options.map((be,Ve)=>(0,Ce.jsxs)(n,{color:Ve===ue?r.orange:void 0,children:[ee," ",Ve===ue?"\u276F ":" ",be.label]},be.value))]},j.id)}return O&&T.isEditing?(0,Ce.jsxs)(n,{color:r.orange,children:[ee,te,ae,j.label,": ",T.inputValue,(0,Ce.jsx)(n,{color:r.dim,children:"\u2588"})]},j.id):(0,Ce.jsxs)(n,{color:O?r.orange:void 0,dimColor:!O&&F>0,children:[ee,te,ae,j.label,(0,Ce.jsx)(n,{dimColor:!0,children:q})]},j.id)}),T.feedback&&(0,Ce.jsx)(g,{marginTop:1,children:(0,Ce.jsxs)(n,{color:r.green,children:["\u2713 ",T.feedback]})}),(0,Ce.jsx)(Nt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var fn=k(me(),1);var Ae=k(M(),1),eo=800,to=3840,no=600,ro=2160;function Oi(e,t){if(!t)return"Enter a value";let o=Number(t);if(!Number.isInteger(o))return"Must be a whole number";if(e==="width"){if(o<eo)return`Min ${eo}`;if(o>to)return`Max ${to}`}else{if(o<no)return`Min ${no}`;if(o>ro)return`Max ${ro}`}return null}function oo({currentWidth:e,currentHeight:t,onSelect:o,onCancel:i}){let[m,s]=(0,fn.useState)("width"),[u,x]=(0,fn.useState)(String(e)),[h,y]=(0,fn.useState)(String(t)),[A,T]=(0,fn.useState)(null);ye((l,d)=>{if(d.escape){i();return}if(d.tab||d.rightArrow||d.leftArrow){s(B=>B==="width"?"height":"width"),T(null);return}if(d.return){let B=Oi("width",u);if(B){s("width"),T(`Width: ${B}`);return}let V=Oi("height",h);if(V){s("height"),T(`Height: ${V}`);return}o(Number(u),Number(h));return}if(d.backspace||d.delete){m==="width"?x(B=>B.slice(0,-1)):y(B=>B.slice(0,-1)),T(null);return}l&&/^\d$/.test(l)&&(m==="width"?x(B=>B+l):y(B=>B+l),T(null))});let C=(l,d,B)=>{let V=m===B,$=V?r.orange:r.secondary;return(0,Ae.jsxs)(g,{flexDirection:"column",children:[(0,Ae.jsxs)(n,{color:r.dim,children:[" ",l]}),(0,Ae.jsx)(g,{borderStyle:"round",borderColor:$,paddingX:1,width:10,children:(0,Ae.jsxs)(n,{color:V?void 0:r.dim,children:[d||" ",V?(0,Ae.jsx)(n,{color:r.dim,children:"\u2588"}):""]})}),(0,Ae.jsxs)(n,{color:r.dim,dimColor:!0,children:[" ",B==="width"?`${eo}\u2013${to}`:`${no}\u2013${ro}`]})]})};return(0,Ae.jsxs)(g,{flexDirection:"column",paddingX:1,children:[(0,Ae.jsx)(n,{color:r.orange,bold:!0,children:"Window Size"}),(0,Ae.jsxs)(g,{marginTop:1,gap:1,children:[C("Width",u,"width"),(0,Ae.jsx)(g,{alignItems:"center",marginTop:1,children:(0,Ae.jsx)(n,{color:r.dim,children:"x"})}),C("Height",h,"height")]}),A&&(0,Ae.jsx)(g,{marginTop:1,children:(0,Ae.jsx)(n,{color:r.red,children:A})}),(0,Ae.jsx)(Nt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var Be=k(me(),1);async function $i(e,t,o){let i=e.loadCredentials(t,o),m=e.loadClient(t,o);if(i&&m){let u=new Vo(o);await Promise.allSettled([u.revokeToken(i.access_token,m.client_id,"access_token"),u.revokeToken(i.refresh_token,m.client_id,"refresh_token")])}e.deleteProfileFull(t,o);let s=e.listProfiles();return s.length>0&&(e.setActiveProfile(s[0].profile),e.setDefaultEnv(s[0].env)),{profile:t,env:o,switchedTo:s.length>0?s[0]:void 0}}function Fi(){let[e]=(0,Be.useState)(()=>new On),[t,o]=(0,Be.useState)(()=>{let d=e.resolveAuth();if(!d)return!1;if(d.method==="basic")return!0;let{credentials:B}=e.getActiveCredentials();return B?B.expires_at>Date.now()/1e3:!1}),i=(0,Be.useRef)(null),m=(0,Be.useRef)(null),s=(0,Be.useCallback)(()=>{let d=e.resolveAuth();return d?{method:d.method,profile:d.profile,env:d.env}:null},[e]),u=(0,Be.useCallback)(async()=>{let{credentials:d,profile:B,env:V}=e.getActiveCredentials();if(!d||!B||!V)return null;let $=d.expires_at,j=Date.now()/1e3;if($-j<300){if(m.current)return m.current;let F=(async()=>{try{let E=await Oo({creds:e,profile:B,env:V,credentials:d});return E?(o(!0),E.accessToken):null}catch{return o(!1),null}finally{m.current=null}})();return m.current=F,F}return o(!0),d.access_token},[e]),x=(0,Be.useCallback)(()=>{let d=e.resolveAuth();return!d||d.method!=="basic"?null:{username:d.username,access_key:d.access_key}},[e]),h=(0,Be.useCallback)((d,B)=>{i.current?.revoke();let V=qe(d),$=x(),j=new Fo(V.controllerBaseUrl,u,$,B);return i.current=j,j},[x,u]),y=(0,Be.useCallback)(()=>i.current,[]),A=(0,Be.useCallback)(()=>{let d=x();if(d)return d;let B=i.current?.cached;return B?{username:B.username,access_key:B.access_key}:null},[x]),T=(0,Be.useCallback)(async()=>{let d=i.current;return d?d.resolve():null},[]),C=(0,Be.useCallback)(async(d="default")=>{let B=e.getDefaultEnv();await new $o(d,B,e).login(),e.setActiveProfile(d);try{let $=new qt;Xe(e,$,d,B)}catch{}o(!0)},[e]),l=(0,Be.useCallback)(async()=>{let d=e.getActiveProfile();if(!d)return null;let B=e.getDefaultEnv(),V=await $i(e,d,B);return o(!1),{profile:V.profile,env:V.env}},[e]);return{creds:e,tokenValid:t,setTokenValid:o,getToken:u,getBasicAuth:x,getAuthInfo:s,login:C,logout:l,initResolver:h,getResolver:y,getResolvedBasicAuth:A,resolveBasicAuth:T}}var ft=k(me(),1);import{mkdtempSync as ya,rmSync as Ta}from"fs";import{join as wa}from"path";import{tmpdir as Sa}from"os";function Ni(){let[e]=(0,ft.useState)(()=>new qt),t=(0,ft.useRef)(null),o=(0,ft.useRef)(null),i=(0,ft.useRef)(null),m=(0,ft.useCallback)(async u=>{if(t.current)return t.current;if(i.current)return i.current;let x=(async()=>{let h=e.load(),y;if(h.chrome_profile_path)y=h.chrome_profile_path.replace("~",process.env.HOME??"~");else{o.current&&(Tt("tempDir","Previous temp dir removed before retry"),o.current=null);let T=ya(wa(Sa(),"kane-clean-"));o.current=T,y=T,rt("tempDir",()=>{try{Ta(T,{recursive:!0,force:!0})}catch{}})}let A=await Uo({userDataDir:y,width:h.window_size.width,height:h.window_size.height,startUrl:u??h.default_url??void 0});return t.current=A,rt("chrome",()=>{A.kill()}),A})();i.current=x;try{return await x}finally{i.current=null}},[e]),s=(0,ft.useCallback)(()=>{Tt("chrome","Chrome killed"),Tt("tempDir","Temp dir removed"),t.current=null,o.current=null},[]);return{ensureChrome:m,killChrome:s}}var Xn=[{name:"run",description:"Execute a test run",args:'"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|chrome-profile|project|folder"},{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"}];function Kn(e){let t=e.trim();if(!t.startsWith("/"))return null;let i=t.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(i.length===0)return null;let m=i[0],s={},u=1;for(;u<i.length;){let x=i[u];if(x.startsWith("--")){let h=x.slice(2),y=i[u+1];y&&!y.startsWith("--")?(s[h]=y.replace(/^"|"$/g,""),u+=2):(s[h]=void 0,u++)}else{let h=x.replace(/^"|"$/g,"");m==="run"?s.objective=h:m==="config"?s.action?s.value=h:s.action=h:m==="profiles"?s.action=h:m==="summary"&&(s.index=h),u++}}return{command:m,args:s,raw:t}}var Rl=[{name:"Testing",commands:Xn.filter(e=>["run","cancel"].includes(e.name))},{name:"Auth",commands:Xn.filter(e=>["login","logout","whoami","balance","profiles"].includes(e.name))},{name:"Settings",commands:Xn.filter(e=>["config"].includes(e.name))},{name:"Session",commands:Xn.filter(e=>["new","name","summary","help","clear","exit"].includes(e.name))}];var Ui=[{name:"testmd",description:"Browse & run saved tests under cwd"},{name:"auth",description:"Login, logout, profiles"},{name:"config",description:"View/change settings"},{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"}],Ra={name:"cancel",description:"Abort current run"},ka={name:"cancel",description:"Cancel current generation"},zt=[{name:"generate",description:"Switch to Generate mode (test case generator)"},{name:"summary",description:"View run summaries",args:"[index]"},Ra,...Ui],pn=[{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>]"},ka,...Ui],Gi=zt;function Yn(e,t="run"){let o=t==="generate"?pn:zt,i=e.startsWith("/")?e.slice(1):e;return i?o.filter(m=>m.name.startsWith(i)):o}var Ca=new Set([...zt,...pn].map(e=>e.name));function qi(e,t){let o=t==="generate"?pn:zt;return Ca.has(e)?o.some(i=>i.name===e):!0}function Wi(e,t){let o=t?.trim();return o?e==="generate"?{kind:"reject"}:{kind:"run",objective:o}:e==="generate"?{kind:"toggle"}:{kind:"already"}}var wt=k(M(),1);function io({flows:e,filterIndex:t}){let o=t!==void 0?e.filter(i=>i.index===t):e;return o.length===0?null:(0,wt.jsx)(g,{flexDirection:"column",children:o.map(i=>(0,wt.jsxs)(g,{flexDirection:"column",marginTop:1,children:[(0,wt.jsxs)(g,{marginLeft:1,children:[(0,wt.jsx)(n,{color:r.purple,bold:!0,children:"Flow "+i.index+": "}),(0,wt.jsx)(n,{color:r.purple,children:i.objective})]}),(0,wt.jsx)(Xo,{status:i.status==="error"?"failed":i.status,summary:i.summary,duration:i.duration,steps:i.steps,stepsPassed:i.stepsPassed,stepsFailed:i.stepsFailed,reason:i.reason,creditsConsumed:i.creditsConsumed})]},i.index))})}var St=k(M(),1),Ia={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},Ea={ok:r.green,error:r.red,cancelled:r.dim};function Hi({status:e,command:t,message:o,details:i,accentColor:m}){let s=t.startsWith("/")?t.slice(1):t,u=m??Ea[e];return(0,St.jsxs)(g,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,St.jsx)(g,{marginLeft:1,children:(0,St.jsxs)(n,{color:u,bold:!0,children:[Ia[e]," ",s]})}),(0,St.jsxs)(g,{borderStyle:"round",borderColor:u,paddingX:2,flexDirection:"column",width:70,children:[(0,St.jsx)(n,{children:o}),i&&(0,St.jsx)(n,{color:r.dim,children:i})]})]})}var vn=k(me(),1);import{join as hn}from"path";var gn=k(M(),1);function zi({tabs:e,activeIndex:t}){return(0,gn.jsx)(g,{children:e.map((o,i)=>(0,gn.jsx)(g,{marginRight:1,children:i===t?(0,gn.jsx)(n,{color:r.orange,bold:!0,children:`[ ${o} ]`}):(0,gn.jsx)(n,{color:r.dim,children:` ${o} `})},o))})}var R=k(M(),1),xn=["Commands","Shortcuts","Tests","Setup","About"],Jn=18,_a="https://www.testmuai.com/support/docs/kane-cli-introduction",Aa="https://github.com/LambdaTest/kane-cli/issues";function Xi({onClose:e,version:t,environment:o,sessionId:i,runUrl:m,mode:s="run"}){let[u,x]=(0,vn.useState)(0),[h,y]=(0,vn.useState)(0);(0,vn.useEffect)(()=>{y(0)},[u]);let A=xn[u],T=A==="Commands"?Ba(s):A==="Shortcuts"?Pa():A==="Tests"?Da():A==="Setup"?La():ja({version:t,environment:o,sessionId:i,runUrl:m}),C=T.length,l=h>0,d=h+Jn<C,B=T.slice(h,h+Jn);ye(($,j)=>{if(j.escape){e();return}if(j.rightArrow||j.tab){x(F=>(F+1)%xn.length);return}if(j.leftArrow){x(F=>(F-1+xn.length)%xn.length);return}if(j.upArrow){y(F=>Math.max(0,F-1));return}if(j.downArrow){y(F=>Math.min(Math.max(0,C-Jn),F+1));return}});let V=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return C>Jn&&V.push({keys:"\u2191\u2193",label:"scroll"}),(0,R.jsxs)(g,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,R.jsx)(zi,{tabs:[...xn],activeIndex:u,onChange:x}),l&&(0,R.jsx)(g,{marginTop:1,children:(0,R.jsx)(n,{color:r.dim,children:"\u25B2 more above"})}),(0,R.jsx)(g,{marginTop:l?0:1,flexDirection:"column",children:B}),d&&(0,R.jsx)(g,{children:(0,R.jsx)(n,{color:r.dim,children:"\u25BC more below"})}),(0,R.jsx)(Nt,{bindings:V,escBackLabel:"back to chat"})]})}function Ba(e){let t=e==="generate"?pn:zt;return[(0,R.jsx)(n,{color:r.dim,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,R.jsx)(g,{marginLeft:2,children:(0,R.jsx)(n,{color:r.orange,children:'"search amazon for laptop"'})},"ex"),(0,R.jsx)(g,{marginBottom:1},"sp"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Slash commands"},"cmd-h"),...t.map(o=>(0,R.jsxs)(g,{marginLeft:2,children:[(0,R.jsx)(g,{width:14,children:(0,R.jsxs)(n,{color:r.orange,children:["/",o.name]})}),o.args&&(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:o.args})}),(0,R.jsx)(n,{color:r.dim,children:o.description})]},o.name)),(0,R.jsx)(g,{marginBottom:1},"sp2"),(0,R.jsx)(g,{marginLeft:2,children:(0,R.jsx)(n,{color:r.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,R.jsx)(g,{marginLeft:2,children:(0,R.jsx)(n,{color:r.dim,children:"/config submenu: show \xB7 set-mode \xB7 set-window \xB7 chrome-profile \xB7 project \xB7 folder"})},"config-sub")]}function Qn(e,t){return[(0,R.jsx)(n,{color:r.dim,bold:!0,children:e},`h-${e}`),...t.map(([o,i],m)=>(0,R.jsxs)(g,{marginLeft:2,children:[(0,R.jsx)(g,{width:26,children:(0,R.jsx)(n,{color:r.orange,children:o})}),(0,R.jsx)(n,{color:r.dim,children:i})]},`r-${e}-${m}`)),(0,R.jsx)(g,{marginBottom:1},`s-${e}`)]}function Pa(){return[...Qn("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"]]),...Qn("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"]]),...Qn("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...Qn("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Platform caveats"},"cv-h"),(0,R.jsx)(n,{color:r.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,R.jsx)(n,{color:r.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,R.jsx)(n,{color:r.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,R.jsx)(n,{color:r.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,R.jsx)(n,{color:r.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,R.jsx)(n,{color:r.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function Da(){return[(0,R.jsxs)(n,{color:r.dim,children:["Sessions you run here are saved as ",(0,R.jsx)(n,{color:r.orange,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,R.jsx)(g,{marginBottom:1},"t-sp1"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Auto-save"},"t-save-h"),(0,R.jsxs)(n,{color:r.dim,children:[" In ",(0,R.jsx)(n,{color:r.orange,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,R.jsxs)(n,{color:r.dim,children:[" In ",(0,R.jsx)(n,{color:r.orange,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,R.jsxs)(n,{color:r.dim,children:[" Output: ",(0,R.jsx)(n,{color:r.orange,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,R.jsx)(n,{color:r.orange,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,R.jsx)(g,{marginBottom:1},"t-sp2"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,R.jsxs)(n,{color:r.dim,children:[" ",(0,R.jsx)(n,{color:r.orange,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,R.jsx)(n,{color:r.orange,children:"kane-cli testmd list"})," \xB7 bare ",(0,R.jsx)(n,{color:r.orange,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,R.jsx)(n,{color:r.dim,children:" The .md file carries its own config (mode, max_steps, variables, \u2026) so the replay is reproducible."},"t-run-2"),(0,R.jsx)(g,{marginBottom:1},"t-sp3"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,R.jsxs)(n,{color:r.dim,children:[" Type ",(0,R.jsxs)(n,{color:r.orange,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,R.jsxs)(n,{color:r.dim,children:[" Discarding at the save prompt: press ",(0,R.jsx)(n,{color:r.orange,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function La(){return[(0,R.jsx)(n,{color:r.dim,bold:!0,children:"1. Login"},"s1-h"),(0,R.jsx)(n,{color:r.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"2. Project & folder"},"s2-h"),(0,R.jsx)(n,{color:r.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"3. Mode"},"s3-h"),(0,R.jsx)(n,{color:r.dim,children:" testing (saves to TMS) | action (local report). /config set-mode"},"s3-b"),(0,R.jsx)(g,{marginBottom:1},"spacer-1"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Variables (later wins)"},"v-h"),(0,R.jsxs)(n,{color:r.dim,children:[" ",`${hn(je,"variables")}/*.json`," (global)"]},"v-1"),(0,R.jsxs)(n,{color:r.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,R.jsx)(n,{color:r.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,R.jsx)(g,{marginBottom:1},"spacer-2"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Context files"},"c-h"),(0,R.jsxs)(n,{color:r.dim,children:[" Global: ",hn(je,"global-memory.md")]},"c-1"),(0,R.jsxs)(n,{color:r.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,R.jsx)(g,{marginBottom:1},"spacer-3"),(0,R.jsx)(n,{color:r.dim,bold:!0,children:"Paths"},"p-h"),(0,R.jsxs)(n,{color:r.dim,children:[" Config: ",hn(je,"tui-config.json")," \xB7 Auth: ",hn(je,"config.json")]},"p-1"),(0,R.jsxs)(n,{color:r.dim,children:[" Sessions: ",hn(je,"sessions"),"/"]},"p-2")]}function ja({version:e,environment:t,sessionId:o,runUrl:i}){return[(0,R.jsxs)(g,{children:[(0,R.jsx)(n,{color:r.orange,bold:!0,children:"kane-cli "}),(0,R.jsxs)(n,{color:r.muted,children:["v",e]})]},"title"),(0,R.jsx)(g,{marginBottom:1},"sp"),(0,R.jsxs)(g,{children:[(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:"Environment"})}),(0,R.jsx)(n,{children:t})]},"env"),(0,R.jsxs)(g,{children:[(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:"Session"})}),(0,R.jsx)(n,{children:o})]},"sess"),(0,R.jsxs)(g,{children:[(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:"Default URL"})}),(0,R.jsx)(n,{color:r.orange,children:i})]},"url"),(0,R.jsx)(g,{marginBottom:1},"sp2"),(0,R.jsxs)(g,{children:[(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:"Docs"})}),(0,R.jsx)(n,{color:r.orange,underline:!0,children:_a})]},"docs"),(0,R.jsxs)(g,{children:[(0,R.jsx)(g,{width:14,children:(0,R.jsx)(n,{color:r.dim,children:"Bugs"})}),(0,R.jsx)(n,{color:r.orange,underline:!0,children:Aa})]},"bugs")]}var Zn=k(me(),1);import{existsSync as Ki,readFileSync as zl,rmSync as Ma,unlinkSync as Va}from"fs";function Yi(e){let t=Ko(e);Ki(t)&&Ma(t,{recursive:!0,force:!0}),Ki(e)&&Va(e)}var so=k(M(),1);function Ji({cwd:e,currentOrgId:t,onClose:o,onRun:i,onExport:m}){let[s,u]=(0,Zn.useState)("list"),[x,h]=(0,Zn.useState)(null),[y,A]=(0,Zn.useState)(0);return s==="inspect"&&x?(0,so.jsx)(Jo,{path:x.path,relPath:x.relPath,onBack:()=>u("list"),onAction:T=>{if(T==="run")i(x);else if(T==="export")m(x);else{try{Yi(x.path)}catch{}h(null),u("list"),A(C=>C+1)}}}):(0,so.jsx)(Yo,{root:e,currentOrgId:t,onSelect:T=>{h(T),u("inspect")},onCancel:o},y)}var Pe=k(me(),1);function Qi(e){let[t,o]=(0,Pe.useState)(null),[i,m]=(0,Pe.useState)(!1),[s,u]=(0,Pe.useState)(null),[x,h]=(0,Pe.useState)(null),[y,A]=(0,Pe.useState)(null),T=(0,Pe.useRef)(0),C=(0,Pe.useRef)([]),l=(0,Pe.useRef)(!1),d=(0,Pe.useRef)(null),B=(0,Pe.useRef)(e);B.current=e;let V=(0,Pe.useCallback)(async F=>{if(l.current)return null;l.current=!0;let E=++T.current,O=[];C.current=O;let ee=q=>`testmd-run-${E}-${q}`,te={register:(q,ue)=>{let be=ee(q);O.push(be),rt(be,ue)},deregister:q=>dn(ee(q)),cleanup:(q,ue)=>Tt(ee(q),ue),remoteLogger:B.current.remoteLogger},ae={runSteps:q=>new Promise(ue=>{let be=()=>{d.current=null,ue()};d.current=be,o({...q,exitOnComplete:!1,onAllComplete:()=>{q.onAllComplete?.(),be()}})}),onLockState:q=>{},onRetryAttempt:q=>{},onSummary:async q=>{u(q)},onLinks:async q=>{h(q)},runUpload:q=>q.execute(),onAgentEvent:q=>{}};m(!0),u(null),h(null),A(null);try{let q=await B.current.buildInput(F),ue=await di(q,ae,te);return A(ue),ue}finally{l.current=!1,d.current=null,m(!1),o(null);for(let q of O)Tt(q,"run-finished");O.length=0}},[]),$=(0,Pe.useCallback)(()=>{for(let E of C.current)Tt(E,"cancelled");C.current=[];let F=d.current;d.current=null,F?.()},[]),j=(0,Pe.useCallback)(()=>{u(null),h(null),A(null)},[]);return{start:V,cancel:$,clearResult:j,running:i,runViewProps:t,summary:s,links:x,runSummary:y}}var Ie=k(me(),1);function Zi(e={}){let[t,o]=(0,Ie.useState)(()=>Gn({requestId:"",objective:""})),[i,m]=(0,Ie.useState)(!1),[s,u]=(0,Ie.useState)(null),x=(0,Ie.useRef)(null),h=(0,Ie.useRef)(!1),y=(0,Ie.useRef)(null),A=(0,Ie.useCallback)(async(V,$,j)=>{h.current=!1;let F=0,E=0,O=0;for await(let ee of V){if(h.current)break;switch(o(te=>gi(te,ee)),ee.type){case"thinking_done":j?.("tcg_thinking",{tookMs:ee.tookMs});break;case"progress":{let te=Math.min(100,Math.floor(ee.pct/25)*25);te>O&&(O=te,j?.("tcg_progress",{pct:te}));break}case"snapshot":F=ee.data.scenarios.length,E=ee.data.scenarios.reduce((te,ae)=>te+(ae.test_cases?.length??0),0),j?.("tcg_snapshot",{scenarioCount:F,caseCount:E});break;case"clarification":j?.("tcg_clarification",{});break;case"done":j?.("tcg_request_done",{status:ee.status,scenarioCount:F,caseCount:E,durationMs:Date.now()-$});break;case"error":j?.("tcg_request_error",{errorCode:"tcg_request_failed",durationMs:Date.now()-$});break}}},[]),T=(0,Ie.useCallback)(async(V,$)=>{if(x.current)throw new Error("useTcgSession: a session is already active; call reset() or end() first");let j=e.makeClient??hi;x.current=j(V),y.current=new AbortController;let F=Gn({requestId:"",objective:$.prompt});o(qn(F));let E;try{E=await x.current.start($,y.current.signal)}catch(ee){throw x.current=null,y.current=null,o(te=>({...te,turnActive:!1})),ee}u(E.requestId),o(qn({...E.state,requestId:E.requestId,objective:$.prompt}));let O=Date.now();e.log?.("tcg_request_start",{request_id:E.requestId,objectiveChars:$.prompt.length,scenarioLimit:$.scenarioLimit,perScenarioLimit:$.perScenarioLimit,memoryEnhancement:$.memoryEnhancement}),await A(E.events,O,e.log)},[A,e.makeClient,e.log]),C=(0,Ie.useCallback)(async(V,$)=>{if(!x.current||!s)throw new Error("useTcgSession: chat() with no active request");o(j=>qn(pi(j)));try{await x.current.chat(s,V,$)}catch(j){throw o(F=>({...F,turnActive:!1})),j}},[s]),l=(0,Ie.useCallback)(async()=>{if(!(!s||!x.current)){h.current=!0,y.current&&y.current.abort();try{await x.current.cancel(s)}catch{}x.current=null,u(null),o(V=>({...V,turnActive:!1}))}},[s]),d=(0,Ie.useCallback)(async()=>{if(!(!s||!x.current)){h.current=!0,y.current&&y.current.abort();try{await x.current.end(s)}catch{}x.current=null,u(null),o(V=>({...V,turnActive:!1}))}},[s]),B=(0,Ie.useCallback)(()=>{h.current=!0,y.current&&y.current.abort(),y.current=null,o(Gn({requestId:"",objective:""})),u(null),m(!1),x.current=null},[]);return(0,Ie.useEffect)(()=>()=>{h.current=!0,y.current&&y.current.abort()},[]),{state:t,isStreaming:t.turnActive,isTerminal:fi(t.status),isReconnecting:i,turnActive:t.turnActive,inReview:t.scenarios.length>0&&!t.turnActive&&!Gr(t.status),isSessionClosed:Gr(t.status),requestId:s,startWith:T,chat:C,cancel:l,end:d,reset:B}}var Y=k(me(),1);import{join as Xt,resolve as Ya}from"path";import{mkdirSync as co,writeFileSync as ps,appendFileSync as Ja}from"fs";function es(e){let t=qe(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 ts(e){return e.turnActive?!0:e.requestId!=null&&!e.isSessionClosed&&!e.saved}function ns(e){return e.isRunning||e.hasLiveResults}function rs(e){let t=(e??"").trim().match(/^[sS](\d+)$/);if(!t)return{level:"scenarios"};let o=parseInt(t[1],10);return o<1?{level:"scenarios"}:{level:"cases",scenarioIdx:o-1}}function os(e,t){return`S${e+1}.C${t+1}`}function is(e,t){return e.reduce((o,i)=>o+(i.test_cases??[]).filter(m=>!t.has(m.id)).length,0)}function ss(e,t){return e.map(o=>({...o,test_cases:(o.test_cases??[]).filter(i=>!t.has(i.id))})).filter(o=>(o.test_cases??[]).length>0)}var bn=k(me(),1);import{createHash as Oa}from"crypto";function $a(e){return Oa("sha1").update(JSON.stringify({t:e.title,p:e.preconditions,m:e.manual_steps})).digest("hex")}var er=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((o,i)=>{(o.test_cases??[]).forEach((m,s)=>{if(!it(m)||m.manual_steps==null)return;let u=$a(m),x=this.cache.get(m.id);x&&x.hash===u||(x?.controller?.abort(),this.caseById.set(m.id,m),this.cache.set(m.id,{hash:u,ref:os(i,s),status:"pending"}),this.queue.includes(m.id)||this.queue.push(m.id))})}),this.pump()}pump(){for(;this.active<this.max&&this.queue.length>0;){let t=this.queue.shift(),o=this.cache.get(t),i=this.caseById.get(t);!o||!i||o.status!=="pending"||(this.active++,this.runOne(t,i,o))}}async runOne(t,o,i){let m=`bifurcation-${t}`,s=new AbortController;i.controller=s;let u=this.deps.run??this.defaultRun.bind(this);rt(m,()=>s.abort());let x=Date.now();try{this.safeLog("tcg_bif_start",{caseId:t,ref:i.ref});let h=await u(Ti(o),s.signal);if(!s.signal.aborted&&this.cache.get(t)===i){i.status="done",i.result=h;try{this.deps.persist?.(t,h,i.ref)}catch{}this.safeLog("tcg_bif_done",{caseId:t,ref:i.ref,total_flows:h.total_flows,is_single_flow:h.is_single_flow,estimated_steps_total:(h.sub_objectives??[]).reduce((y,A)=>y+(A.estimated_steps??0),0),credits_consumed:h.credits_consumed,durationMs:Date.now()-x})}}catch(h){!s.signal.aborted&&this.cache.get(t)===i&&(i.status="error",i.error=h.message,this.safeLog("tcg_bif_error",{caseId:t,ref:i.ref,errorCode:"bifurcation_failed",durationMs:Date.now()-x}))}finally{dn(m),this.active--,this.pump()}}safeLog(t,o){try{this.deps.log?.(t,o)}catch{}}async defaultRun(t,o){let i=await this.deps.resolveAuth(),m=wi({objective:t,model:this.deps.model,sessionId:this.deps.sessionId,auth:i});return Si(m,this.deps.spawnOpts,o)}getStatus(t){return this.cache.get(t)?.status}getResult(t){return this.cache.get(t)?.result}dispose(){for(let[t,o]of this.cache)o.controller?.abort(),dn(`bifurcation-${t}`);this.cache.clear(),this.caseById.clear(),this.queue=[],this.active=0}};function as(e){let t=(0,bn.useRef)(null);return(0,bn.useEffect)(()=>{if(!e.enabled)return;let o=e.log,i=o?(m,s,u,x)=>o(s,x??{}):void 0;return t.current=new er({model:e.model,sessionId:e.sessionId,resolveAuth:e.resolveAuth,spawnOpts:{environment:e.environment,log:i},log:o,persist:e.persist}),()=>{t.current?.dispose(),t.current=null}},[e.enabled,e.sessionId,e.model,e.environment]),(0,bn.useEffect)(()=>{t.current&&t.current.onSnapshot(e.scenarios)},[e.scenarios]),{getStatus:o=>t.current?.getStatus(o),getResult:o=>t.current?.getResult(o),manager:t}}import{resolve as us,isAbsolute as Na,extname as Ua}from"path";import{homedir as ls}from"os";var Fa=/(?<=^|\s)@(?:"([^"]*)"|([^\s@]+))/g;function cs(e){let t=[];for(let o of e.matchAll(Fa)){let i=o[1]!==void 0?o[1]:o[2];t.push({raw:o[0],value:i,start:o.index,end:o.index+o[0].length})}return t}var Ga=/^s\d+(\.c\d+)?$/i;function qa(e){return e==="~"?ls():e.startsWith("~/")?us(ls(),e.slice(2)):e}function Wa(e){return/^https?:\/\//i.test(e)?!1:e.includes("/")?!0:Wn.has(Ua(e).toLowerCase())}function ds(e,t){let o=cs(e),i=[],m=[];for(let u of o){let x=u.value,h=u.end;if(!u.raw.includes('"')){let T=x.match(/[.,;:!?]+$/);T&&(x=x.slice(0,-T[0].length),h-=T[0].length)}if(Ga.test(x)||!Wa(x))continue;let y=qa(x),A=Na(y)?y:us(t,y);i.push(A),m.push([u.start,h])}let s=e;for(let[u,x]of m.sort((h,y)=>y[0]-h[0]))s=s.slice(0,u)+s.slice(x);return s=s.replace(/[ \t]{2,}/g," ").replace(/ +([.,;:!?])/g,"$1").trim(),{paths:i,promptText:s}}var Ha=["request_id","session_id","caseId","ref","total_flows","is_single_flow","estimated_steps_total","credits_consumed","durationMs","pct","tookMs","scenarioCount","caseCount","savedCount","fellBack","turnIndex","status","errorCode","objectiveChars","scenarioLimit","perScenarioLimit","memoryEnhancement"],za=new Set(Ha);function ao(e){let t={};for(let o of Object.keys(e))za.has(o)&&e[o]!==void 0&&(t[o]=e[o]);return t}import{mkdirSync as Xa,appendFileSync as Ka}from"fs";import{join as ms}from"path";function fs(e,t,o,i,m=je){let s=ms(m,"tcg",e&&e.length>0?e:"pending"),u=ms(s,"errors.log");try{let x=o instanceof Error?o.stack??o.message:String(o),h=`[${new Date().toISOString()}] phase=${t} ${x}${i?" "+JSON.stringify(i):""}
|
|
3
|
-
`;Xa(s,{recursive:!0}),Ka(u,h)}catch{}return u}var Te=k(M(),1);async function Qa(e){let t=e?.getResolvedBasicAuth?.();if(t)return{username:t.username,access_key:t.access_key};let o=await e?.getToken?.();return typeof o=="string"&&o.length>0?{auth:{type:"bearer",token:o}}:{}}function gs(e){return typeof e=="object"&&e!==null&&e.name==="AbortError"}function hs(e){let{tcg:t,initialChatMode:o,tuiConfig:i,auth:m,session:s,appendStatic:u,handleInput:x,freezeTcgArtifact:h,rearmArtifactFreeze:y,initialGenerateLimits:A,ensureProjectAndFolder:T,config:C}=e,[l,d]=(0,Y.useState)(o??"run"),[B,V]=(0,Y.useState)(null),[$,j]=(0,Y.useState)(null),[F,E]=(0,Y.useState)(null),[O,ee]=(0,Y.useState)(0),[te,ae]=(0,Y.useState)(!1),q=(0,Y.useRef)(null),ue=(0,Y.useRef)(()=>{}),be=(0,Y.useCallback)(()=>Qa(m),[m]),Ve=(0,Y.useRef)(null);Ve.current=t.requestId;let De=(0,Y.useCallback)((U,H)=>{let Q=U.endsWith("_error")?"warn":"info",W=ao({request_id:Ve.current??void 0,...H});s.log(Q,U,JSON.stringify(W),W);try{let re=typeof W.request_id=="string"&&W.request_id||Ve.current||"unknown",he=Xt(je,"tcg",re);co(he,{recursive:!0}),Ja(Xt(he,"tcg_tui.log"),`[${new Date().toISOString()}] ${U} ${JSON.stringify(W)}
|
|
4
|
-
`)}catch{}},[s]),Ne=(0,Y.useCallback)((U,H)=>{let Q=fs(Ve.current,H.phase,U),W=typeof U?.status=="number"?U.status:void 0;De(`${H.phase}_error`,{errorCode:`${H.phase}_failed`,status:W});let re=H.phase==="upload"?"\u2717 Couldn't upload attachments \u2014 generation not started. Try again.":"\u2717 Generation failed \u2014 send another request.";u((0,Te.jsxs)(g,{flexDirection:"column",marginTop:1,marginBottom:1,children:[(0,Te.jsx)(n,{color:r.red,children:re}),(0,Te.jsx)(n,{color:r.dim,children:`details: ${Q}`})]})),V(null)},[De,u]),Rt=(0,Y.useRef)(0),Ue=(0,Y.useCallback)((U,H,Q)=>{try{let W=Xt(je,"tcg",Ve.current??"unknown","bifurcation");co(W,{recursive:!0}),ps(Xt(W,`${U}.json`),JSON.stringify({request_id:Ve.current,ref:Q,...H},null,2))}catch{}},[]),tt=as({scenarios:t.state?.scenarios??[],model:i.model,sessionId:s.sessionId,resolveAuth:be,environment:m?.creds?.getDefaultEnv?.(),enabled:!!t.requestId&&!t.isSessionClosed,log:De,persist:Ue}),Jt=(0,Y.useRef)(null);(0,Y.useEffect)(()=>{let U=t.requestId;if(!U||!t.isSessionClosed&&!t.isTerminal)return;let H=t.state?.scenarios??[];if(H.length!==0&&Jt.current!==U){Jt.current=U;try{let Q=Xt(je,"tcg",U);co(Q,{recursive:!0}),ps(Xt(Q,"request.json"),JSON.stringify({request_id:U,objective:t.state?.objective,headline:t.state?.headline,scenarios:H,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 Qt=(0,Y.useCallback)((U,H=1500)=>{E(U),q.current&&clearTimeout(q.current),q.current=setTimeout(()=>{E(null),q.current=null},H)},[]);(0,Y.useEffect)(()=>()=>{q.current&&clearTimeout(q.current)},[]);let Le=(0,Y.useCallback)((U,H)=>{let Q=m.getResolver();if(!Q)return{ok:!1,error:"Not logged in \u2014 use /login"};let W=es({env:m.creds.getDefaultEnv(),resolver:Q,projectId:U??i.project_id??void 0,folderId:H??i.folder_id??void 0,log:(re,he,Ye,X)=>s.log(re,he,"",ao(X??{}))});return W.ok?{ok:!0,conn:W.conn}:{ok:!1,error:W.error}},[m,i,s]),Oe=(0,Y.useRef)(!1),ke=(0,Y.useRef)(null),[yn,Pt]=(0,Y.useState)(!1),kt=(0,Y.useCallback)((U,H,Q,W,re)=>{let he=process.cwd(),{paths:Ye,promptText:X}=ds(U,he);return ki({promptText:X,filePaths:Ye,cwd:he,scenarios:t.state?.scenarios??[],isRefine:H,conn:Q,deps:{validate:Ri,upload:(ne,xe,Lt)=>Ci(ne,xe,Lt,{signal:re}),buildMappings:Ii},onValidated:W})},[t]),Zt=(0,Y.useRef)(!1);(0,Y.useEffect)(()=>{if(l!=="generate"){Zt.current=!1;return}Zt.current||i.project_id&&i.folder_id||T&&m.getResolver()&&(Zt.current=!0,T())},[l,i.project_id,i.folder_id,T,m]);let Tn=(0,Y.useCallback)(async U=>{V(null),j(null),ae(!1);let H=U.trim();if(!H)return;if(H.startsWith("/")){ue.current(H),ee(ne=>ne+1);return}let Q=i.project_id??null,W=i.folder_id??null;if(T){let ne=await T();if(ne)Q=ne.projectId,W=ne.folderId;else if(C){let xe=C.load();Q=xe.project_id??Q,W=xe.folder_id??W}}else if(C){let ne=C.load();Q=ne.project_id??Q,W=ne.folder_id??W}if(!Q||!W){j("Set a project and folder first \u2014 use /config");return}let re=Le(Q,W);if(!re.ok){V(re.error);return}if(Oe.current)return;Oe.current=!0;let he=new AbortController;ke.current=he;let Ye=re.conn,X;try{X=await kt(H,!1,Ye,()=>{u((0,Te.jsx)(g,{marginTop:1,children:(0,Te.jsx)(n,{color:r.generateAccent,bold:!0,children:`\u276F ${H}`})})),Pt(!0)},he.signal)}catch(ne){if(ne instanceof qr){j(ne.errors.join(`
|
|
5
|
-
`));return}if(gs(ne))return;Ne(ne,{phase:"upload"});return}finally{Oe.current=!1,Pt(!1),ke.current===he&&(ke.current=null)}if(!he.signal.aborted){for(let ne of X.warnings)e.emitFeedback("ok","/generate",ne,void 0,r.generateAccent);h(),t.reset(),y();try{let ne=A??{};await t.startWith(Ye,{prompt:X.promptText,attachments:X.attachments,scenarioLimit:ne.scenarioLimit??i.generate.scenario_limit,perScenarioLimit:ne.perScenarioLimit??i.generate.per_scenario_limit,memoryEnhancement:i.generate.memory_enabled})}catch(ne){Ne(ne,{phase:"generation"})}}},[i,t,Le,kt,e,T,C,A,u,h,y,Ne]),Ct=(0,Y.useCallback)(()=>V(null),[]),en=(0,Y.useCallback)(async U=>{let H=Le();if(!H.ok){V(H.error);return}if(Oe.current)return;Oe.current=!0;let Q=new AbortController;ke.current=Q;let W;try{W=await kt(U,!0,H.conn,()=>{u((0,Te.jsx)(n,{color:r.generateAccent,bold:!0,children:`\u276F ${U}`})),Rt.current+=1,De("tcg_refine",{turnIndex:Rt.current}),Pt(!0)},Q.signal)}catch(re){if(re instanceof qr){j(re.errors.join(`
|
|
6
|
-
`));return}if(gs(re))return;Ne(re,{phase:"upload"});return}finally{Oe.current=!1,Pt(!1),ke.current===Q&&(ke.current=null)}if(!Q.signal.aborted){for(let re of W.warnings)e.emitFeedback("ok","/generate",re,void 0,r.generateAccent);try{await t.chat(W.promptText,{mappings:W.mappings,attachments:W.attachments})}catch(re){Ne(re,{phase:"chat"})}}},[u,t,De,Le,kt,e,Ne]),wn=(0,Y.useCallback)(async U=>{if(!Oe.current){Oe.current=!0,u((0,Te.jsx)(n,{color:r.generateAccent,bold:!0,children:`\u276F ${U}`}));try{await t.chat(U)}catch(H){Ne(H,{phase:"chat"})}finally{Oe.current=!1}}},[u,t,Ne]),Dt=(0,Y.useCallback)(U=>{let H=Kn(U);if(H?.command==="view"){let Q=U.trim().split(/\s+/).slice(1)[0];if(t.state.scenarios.length===0){e.emitFeedback("ok","/view","(no generation yet)");return}let W=rs(Q);if(W.level==="cases"&&W.scenarioIdx>=t.state.scenarios.length){e.emitFeedback("error","/view",`No scenario S${W.scenarioIdx+1}`);return}e.openBrowse(W);return}if(H?.command==="save"){let Q=t.state.scenarios;if(Q.length===0){e.emitFeedback("error","/save","Nothing to save yet.");return}let W=ss(Q,e.excluded),re=W.reduce((ne,xe)=>ne+(xe.test_cases??[]).filter(it).length,0);if(re===0){e.emitFeedback("error","/save",is(Q,e.excluded)===0?"All cases removed \u2014 nothing to save.":"No functional test cases to save.");return}let he={...t.state,scenarios:W},Ye=U.trim().split(/\s+/).slice(1)[0],X=Ye?Ya(process.cwd(),Ye):process.cwd();ae(!0),e.freezeTcgArtifact(),(async()=>{let ne=W.flatMap(fe=>(fe.test_cases??[]).filter(it)),xe=Date.now()+3e4;for(;Date.now()<xe&&ne.some(fe=>tt.getStatus(fe.id)==="pending");)await new Promise(fe=>setTimeout(fe,250));let Lt=new Map;for(let fe of ne)Lt.set(fe.id,tt.getStatus(fe.id)==="done"?tt.getResult(fe.id):void 0);t.end();let jt=0,hr=fe=>{let Sn=Lt.get(fe.id);return Sn?vi(Sn,fe):(jt++,bi(fe))};try{let fe=await yi(he,X,{},hr);De("tcg_save",{savedCount:fe.paths.length,fellBack:jt})}catch(fe){e.emitFeedback("error","/save",`Save failed: ${fe.message}`);return}let Mt=`test case${re===1?"":"s"}`;e.emitFeedback("ok","/save",jt>0?`Saved ${re} ${Mt} \xB7 ${jt} fell back to raw steps.`:`Saved ${re} ${Mt}.`)})();return}H?.command==="new"&&ae(!1),x(U)},[x,e,t,tt,De]);ue.current=Dt;let It=(0,Y.useCallback)(U=>{d(U),ee(H=>H+1)},[]),pr=(0,Y.useCallback)(U=>{let H=l==="generate"&&U==="run",Q=l==="run"&&U==="generate",W=ts({requestId:t.requestId,isSessionClosed:t.isSessionClosed,turnActive:t.turnActive,saved:te}),re=ns({isRunning:e.runner.isRunning,hasLiveResults:e.runner.lastRunEnd!=null});return H&&W?(e.openSwitchConfirm("run"),!1):Q&&re?(e.openSwitchConfirm("generate"),!1):(It(U),!0)},[l,t.requestId,t.isSessionClosed,t.turnActive,te,e,It]),Et=(0,Y.useCallback)(async U=>{l==="generate"?(e.freezeTcgArtifact(),await t.end().catch(()=>{}),t.reset(),ae(!1),e.appendStatic((0,Te.jsxs)(g,{marginBottom:1,children:[(0,Te.jsx)(n,{color:r.red,children:"\u2717 "}),(0,Te.jsx)(n,{color:r.dim,children:"Discarded generation"})]}))):(e.runner.isRunning&&e.runner.cancelRun(),e.runner.clearLastRun(),e.appendStatic((0,Te.jsxs)(g,{marginBottom:1,children:[(0,Te.jsx)(n,{color:r.red,children:"\u2717 "}),(0,Te.jsx)(n,{color:r.dim,children:"Discarded run"})]}))),It(U),U==="generate"?e.emitFeedback("ok","/generate","Switched to Generate mode.",void 0,r.generateAccent):e.emitFeedback("ok","/run","Switched to Run mode.",void 0,r.orange)},[l,t,e,It]),gr=(0,Y.useCallback)(()=>{if(t.isStreaming)e.freezeTcgArtifact(),t.cancel();else if(ke.current)ke.current.abort();else return;e.appendStatic((0,Te.jsxs)(g,{marginBottom:1,children:[(0,Te.jsx)(n,{color:r.red,children:"\u2717 "}),(0,Te.jsx)(n,{color:r.dim,children:"Generation cancelled"})]}))},[e,t]);return{chatMode:l,tcgError:B,tcgValidationError:$,composeIdleHint:F,inputClearSeq:O,submitting:yn,handleGenerateSubmit:Tn,onRefine:en,onClarificationAnswer:wn,onSlash:Dt,onClearError:Ct,flashComposeHint:Qt,setInputClearSeq:ee,setChatMode:d,setTcgError:V,setTcgValidationError:j,generateSaved:te,requestSwitch:pr,confirmSwitch:Et,cancelGenerate:gr,bifurcation:tt,tcgLog:De}}var at=k(me(),1);function tr(e){return e.level==="cases"?{level:"cases",scenarioIdx:e.scenarioIdx,caseIdx:0,cursor:0}:{level:"scenarios",scenarioIdx:0,caseIdx:0,cursor:0}}var Za=(e,t)=>Math.max(0,Math.min(t,e));function lo(e,t,o){switch(t.type){case"open":return tr(t.target);case"move":{let i=e.level==="scenarios"?o.length-1:e.level==="cases"?(o[e.scenarioIdx]??1)-1:0;return{...e,cursor:Za(e.cursor+t.delta,Math.max(0,i))}}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 xs(e){let[t,o]=(0,at.useState)(null),[i,m]=(0,at.useReducer)((T,C)=>lo(T,C,e),tr({level:"scenarios"})),[s,u]=(0,at.useState)(new Set),x=(0,at.useCallback)(T=>{o(T),m({type:"open",target:T})},[]),h=(0,at.useCallback)(()=>o(null),[]),y=(0,at.useCallback)(T=>{u(C=>{let l=new Set(C);return l.has(T)?l.delete(T):l.add(T),l})},[]),A=(0,at.useCallback)(T=>{u(C=>{let l=new Set(C),d=T.length>0&&T.every(B=>l.has(B));return T.forEach(B=>d?l.delete(B):l.add(B)),l})},[]);return{target:t,open:x,close:h,isOpen:t!=null,state:i,excluded:s,toggleCase:y,toggleScenario:A}}var or=k(me(),1);function vs(){return{committedChat:0,committedThinking:0,prevTurnActive:!1}}function bs(e,t,o){let i=[],m={...e};if(e.prevTurnActive&&!o&&t.thinkingLog.length>e.committedThinking){let u=t.thinkingLog.slice(e.committedThinking).reduce((h,y)=>h+(y.tookMs??0),0),x=Math.round(u/1e3);i.push({kind:"thinking-summary",text:` thought for ${x}s`}),m.committedThinking=t.thinkingLog.length}m.prevTurnActive=o;for(let s=e.committedChat;s<t.chatLog.length;s++)i.push({kind:"chat",text:t.chatLog[s].text});return m.committedChat=t.chatLog.length,{items:i,next:m}}function ys(e){let t=e;return t=t.replace(/@TS\{([^}]+)\}/g,"@S{$1}"),t=t.replace(/@TS-(\d+)/g,(o,i)=>`@S${parseInt(i,10)}.C1`),t=t.replace(/@TS(\d+)/g,(o,i)=>`@S${parseInt(i,10)}`),t=t.replace(/\\n/g,`
|
|
7
|
-
`),t}var We=k(M(),1),Ts=e=>e!==void 0&&/[A-Za-z0-9]/.test(e);function nr(e){let t=[],o="",i=()=>{o&&(t.push({text:o}),o="")},m=(u,x,h)=>(u===0||!Ts(e[u-1]))&&(x+h>=e.length||!Ts(e[x+h])),s=0;for(;s<e.length;){let u=e.slice(s,s+2),x=e[s];if(u==="**"||u==="__"){let h=e.indexOf(u,s+2);if(h!==-1&&h>s+2&&(u==="**"||m(s,h,2))){i(),t.push({text:e.slice(s+2,h),bold:!0}),s=h+2;continue}}if(x==="`"){let h=e.indexOf("`",s+1);if(h!==-1&&h>s+1){i(),t.push({text:e.slice(s+1,h),code:!0}),s=h+1;continue}}if(x==="*"||x==="_"){let h=e.indexOf(x,s+1);if(h!==-1&&h>s+1&&(x==="*"||m(s,h,1))){i(),t.push({text:e.slice(s+1,h),italic:!0}),s=h+1;continue}}o+=x,s+=1}return i(),t.length===0&&t.push({text:""}),t}function rr(e){return e.map((t,o)=>(0,We.jsx)(n,{bold:t.bold,italic:t.italic,color:t.code?r.dim:void 0,children:t.text},o))}function ec(e){return e.split(`
|
|
8
|
-
`).map(t=>{if(t.trim()==="")return{kind:"blank"};let o=t.match(/^\s*[-*+]\s+(.*)$/);if(o)return{kind:"bullet",segs:nr(o[1])};let i=t.match(/^\s*(\d+)\.\s+(.*)$/);if(i)return{kind:"numbered",n:i[1],segs:nr(i[2])};let m=t.match(/^#{1,6}\s+(.*)$/);return m?{kind:"heading",segs:nr(m[1])}:{kind:"para",segs:nr(t)}})}function tc(e,t,o=""){switch(e.kind){case"blank":return(0,We.jsx)(n,{children:o||" "},t);case"heading":return(0,We.jsxs)(n,{bold:!0,children:[o,rr(e.segs)]},t);case"bullet":return(0,We.jsx)(g,{marginLeft:1,children:(0,We.jsxs)(n,{children:[o,"\u2022 ",rr(e.segs)]})},t);case"numbered":return(0,We.jsx)(g,{marginLeft:1,children:(0,We.jsxs)(n,{children:[o,`${e.n}. `,rr(e.segs)]})},t);default:return(0,We.jsxs)(n,{children:[o,rr(e.segs)]},t)}}function ws({text:e}){let t=ec(ys(e));return(0,We.jsxs)(g,{marginBottom:1,children:[(0,We.jsx)(n,{color:r.generateAccent,children:"\u2503 "}),(0,We.jsx)(g,{flexDirection:"column",children:t.map((o,i)=>tc(o,i))})]})}var uo=k(M(),1);function nc(e){return e.kind==="thinking-summary"?(0,uo.jsx)(n,{color:r.dim,children:e.text}):(0,uo.jsx)(ws,{text:e.text})}function Ss(e,t,o){let i=(0,or.useRef)(vs());(0,or.useEffect)(()=>{let{items:m,next:s}=bs(i.current,e,t);i.current=s;for(let u of m)o(nc(u))})}var Rs=k(me(),1);import{readdir as rc}from"fs/promises";import{join as oc,relative as ic,extname as sc}from"path";var ac=new Set(["node_modules",".git"]),cc=e=>e.startsWith("output-");async function ir(e,t,o={}){let i=o.limit??50,m=o.maxDepth??6,s=t.toLowerCase(),u=[];async function x(h,y){if(u.length>=i||y>m)return;let A;try{A=await rc(h,{withFileTypes:!0})}catch{return}for(let T of A){if(u.length>=i)return;if(T.name.startsWith(".")||ac.has(T.name)||cc(T.name))continue;let C=oc(h,T.name);if(T.isDirectory())await x(C,y+1);else if(T.isFile()){if(!Wn.has(sc(T.name).toLowerCase()))continue;let l=ic(e,C);(!s||l.toLowerCase().includes(s))&&u.push(l)}}}return await x(e,0),u.slice(0,i)}var we=k(M(),1);function ks({projectId:e,folderId:t,onSubmit:o,history:i,error:m,validationError:s,composeIdleHint:u,clearSeq:x,closedNotice:h,busy:y=!1}){let A=!!e&&!!t,T=(0,Rs.useCallback)(C=>ir(process.cwd(),C),[]);return(0,we.jsxs)(g,{flexDirection:"column",children:[(0,we.jsx)(g,{marginLeft:2,marginTop:1,children:!A&&(0,we.jsxs)(n,{color:r.orange,children:["\u2691 ",(0,we.jsx)(n,{color:r.muted,children:"project / folder not set \u2014 use "}),(0,we.jsx)(n,{bold:!0,children:"/config"})]})}),s&&(0,we.jsx)(g,{marginLeft:2,marginTop:1,children:(0,we.jsx)(dt,{variant:"error",paddingY:0,children:(0,we.jsx)(n,{color:r.red,children:s})})}),m&&(0,we.jsx)(g,{marginLeft:2,marginTop:1,children:(0,we.jsx)(dt,{variant:"error",paddingY:0,children:(0,we.jsx)(n,{color:r.red,children:m})})}),h&&(0,we.jsx)(g,{paddingX:1,children:(0,we.jsx)(n,{color:r.dim,children:h})}),u&&(0,we.jsx)(g,{marginLeft:2,marginTop:1,children:(0,we.jsx)(n,{color:r.dim,children:u})}),(0,we.jsx)(yt,{inert:y,onSubmit:o,history:i,accent:r.generateAccent,commands:Yn("","generate"),clearSeq:x,clearOnSubmit:!1,mentionFiles:T,placeholder:y?"Processing files\u2026 (Ctrl+C to cancel)":"Describe what to generate... (/ = commands)",footerBindings:y?[{keys:"ctrl+c",label:"cancel"}]:[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:"generate"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]})]})}var Ps=k(me(),1);var Ee=k(M(),1);function lc(e){return e?`[${e[0].toUpperCase()}]`:""}var uc=8;function sr({scenarios:e,headline:t,activeSid:o}){let i=e.slice(0,uc),m=e.length-i.length;return(0,Ee.jsxs)(g,{flexDirection:"column",marginBottom:1,marginLeft:2,children:[t&&(0,Ee.jsx)(g,{paddingX:1,children:(0,Ee.jsx)(n,{color:r.generateAccent,bold:!0,children:t})}),(0,Ee.jsxs)(dt,{title:`Scenarios (${e.length})`,titleColor:r.generateAccent,borderColor:r.generateAccent,paddingX:1,children:[i.map(s=>{let u=!!o&&s.sid===o,x=u?"\u2237":"\u2713",h=u?r.generateAccent:r.green,y=s.test_cases?.length??0;return(0,Ee.jsxs)(g,{gap:1,children:[(0,Ee.jsx)(n,{color:h,children:x}),(0,Ee.jsx)(n,{color:r.dim,children:s.sid??`#${s.id}`}),(0,Ee.jsx)(n,{children:s.title??"(untitled)"}),(0,Ee.jsx)(n,{color:r.muted,children:lc(s.priority)}),(0,Ee.jsxs)(n,{color:r.dim,children:[y," case",y===1?"":"s"]})]},s.id)}),m>0&&(0,Ee.jsx)(n,{color:r.muted,children:`\u22EE +${m} more`}),(0,Ee.jsx)(g,{marginTop:1,children:(0,Ee.jsxs)(n,{color:r.dim,children:[(0,Ee.jsx)(n,{color:r.generateAccent,children:"/view"})," view/edit \xB7 ",(0,Ee.jsx)(n,{color:r.generateAccent,children:"/save"})," save as runnable tests"]})})]})]})}var pt=k(M(),1),dc=5;function Cs({thinking:e,expanded:t,thinkingDone:o,maxLines:i=dc}){if(!t)return(0,pt.jsxs)(g,{paddingX:1,children:[(0,pt.jsx)(n,{color:r.dim,children:o?"\u2237 thinking complete ":"\u2237 thinking\u2026 "}),(0,pt.jsx)(n,{color:r.muted,children:o?"(ctrl+t to view)":"(ctrl+t to show)"})]});let m=e.split(`
|
|
9
|
-
`),s=Math.max(0,m.length-i),u=s>0?m.slice(-i).join(`
|
|
10
|
-
`):e;return(0,pt.jsxs)(dt,{variant:"default",paddingX:1,children:[s>0&&(0,pt.jsxs)(n,{color:r.muted,children:["\u22EE (",s," earlier line",s===1?"":"s"," hidden)"]}),(0,pt.jsx)(n,{color:r.dim,children:u}),o&&(0,pt.jsx)(n,{color:r.muted,children:"\u2014 thinking complete"})]})}var Kt=k(M(),1),Is=24;function mc(e){let t=Math.max(0,Math.min(100,e)),o=Math.round(t/100*Is);return{filled:"\u2588".repeat(o),empty:"\u2591".repeat(Is-o)}}function Es({pct:e}){let t=mc(e);return(0,Kt.jsxs)(g,{paddingX:1,children:[(0,Kt.jsx)(n,{color:r.generateAccent,children:t.filled}),(0,Kt.jsx)(n,{color:r.muted,children:t.empty}),(0,Kt.jsx)(n,{color:r.dim,children:` ${e}%`})]})}var _s=k(me(),1);var gt=k(M(),1);function As(e,t){let o=e.trim();return o.startsWith("/")?{kind:"slash",text:o}:o?t?{kind:"ignore",text:o}:{kind:"refine",text:o}:{kind:"ignore",text:""}}function Bs({state:e,history:t,turnActive:o,busy:i=!1,onClarificationAnswer:m,onClearError:s,onRefine:u,onSlash:x}){let h=(0,_s.useCallback)(A=>ir(process.cwd(),A),[]),y=m?A=>{s?.(),m(A)}:void 0;return(0,gt.jsxs)(gt.Fragment,{children:[e.pendingClarification&&y&&(0,gt.jsx)(g,{paddingX:1,marginTop:1,flexDirection:"column",children:(0,gt.jsx)(yt,{onSubmit:y,history:t,noHistory:!0,accent:r.generateAccent,placeholder:"Type your answer\u2026",submitVerb:"answer",footerBindings:[{keys:"\u21B5",label:"answer"}]})}),!(e.pendingClarification&&y)&&(o||i?(0,gt.jsx)(yt,{inert:!0,onSubmit:()=>{},history:t,placeholder:o?"(generating\u2026 input inert \u2014 Ctrl+C to cancel)":"(processing files\u2026 Ctrl+C to cancel)",footerBindings:o?void 0:[{keys:"ctrl+c",label:"cancel"}]}):(0,gt.jsx)(yt,{onSubmit:A=>{let T=As(A,o);T.kind==="slash"?x?.(T.text):T.kind==="refine"&&u?.(T.text)},history:t,noHistory:!0,accent:r.generateAccent,commands:Yn("","generate"),scenarios:e.scenarios,mentionFiles:h,placeholder:"Refine, or /save \xB7 /view \xB7 /run",submitVerb:"refine",footerBindings:[{keys:"\u21B5",label:"refine"},{keys:"tab",label:"complete"},{keys:"/run",label:"Run mode"},{keys:"ctrl+t",label:"thinking"}]}))]})}var Ke=k(M(),1);function Ds({state:e,requestId:t,history:o,onClarificationAnswer:i,error:m,onClearError:s,turnActive:u,busy:x=!1,onRefine:h,onSlash:y}){let[A,T]=(0,Ps.useState)(!1),C=e.thinking.length===0&&e.thinkingLog.length>0,l=[...e.thinkingLog.map(d=>d.text),e.thinking].filter(d=>d.length>0).join(`
|
|
11
|
-
|
|
12
|
-
`);return ye((d,B)=>{B.ctrl&&d==="t"&&T(V=>!V)}),(0,Ke.jsxs)(g,{flexDirection:"column",children:[(0,Ke.jsx)(g,{marginBottom:1,marginLeft:2,children:(0,Ke.jsx)(Cs,{thinking:l,expanded:A,thinkingDone:C})}),u&&(0,Ke.jsx)(g,{marginLeft:2,children:(0,Ke.jsx)(Es,{pct:e.progress})}),m&&(0,Ke.jsx)(g,{marginLeft:2,marginTop:1,children:(0,Ke.jsx)(dt,{variant:"error",paddingY:0,children:(0,Ke.jsx)(n,{color:r.red,children:m})})}),e.scenarios.length>0&&(0,Ke.jsx)(sr,{scenarios:e.scenarios,headline:e.headline,activeSid:null}),(0,Ke.jsx)(Bs,{state:e,history:o,turnActive:u,busy:x,onClarificationAnswer:i,onClearError:s,onRefine:h,onSlash:y})]})}var Os=k(me(),1);var _e=k(M(),1);function fc(e,t){return(e.test_cases??[]).some(o=>!t.has(o.id))}function Ls({scenarios:e,cursor:t,excluded:o}){let i=e.reduce((m,s)=>m+(s.test_cases??[]).length,0);return(0,_e.jsxs)(g,{flexDirection:"column",paddingX:1,children:[(0,_e.jsxs)(n,{children:[(0,_e.jsx)(n,{color:r.dim,children:"Generate \u203A "}),(0,_e.jsx)(n,{color:r.generateAccent,children:"Scenarios"}),(0,_e.jsx)(n,{color:r.dim,children:` ${e.length} scenarios \xB7 ${i} cases`})]}),(0,_e.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),(0,_e.jsx)(g,{flexDirection:"column",marginY:1,children:e.map((m,s)=>{let u=s===t,x=fc(m,o);return(0,_e.jsxs)(n,{children:[(0,_e.jsx)(n,{color:r.generateAccent,children:u?"\u276F ":" "}),(0,_e.jsx)(n,{color:r.generateAccent,children:`S${s+1}`}),(0,_e.jsx)(n,{children:` ${m.title??"(untitled)"}`}),(0,_e.jsx)(n,{color:r.dim,children:` [${m.priority??"-"}] ${(m.test_cases??[]).length} cases `}),(0,_e.jsx)(n,{color:x?r.green:r.red,children:x?"\u2713":"\u2717"})]},m.id)})}),(0,_e.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),(0,_e.jsx)(n,{color:r.dim,children:"\u2191\u2193 move \u21B5 open x remove esc back to chat"})]})}var Se=k(M(),1);function js({scenario:e,scenarioIdx:t,cursor:o,excluded:i}){let m=e.test_cases??[],s=m.some(u=>!it(u));return(0,Se.jsxs)(g,{flexDirection:"column",paddingX:1,children:[(0,Se.jsxs)(n,{children:[(0,Se.jsx)(n,{color:r.dim,children:"Generate \u203A Scenarios \u203A "}),(0,Se.jsx)(n,{color:r.generateAccent,children:`S${t+1} ${e.title??"(untitled)"}`}),(0,Se.jsx)(n,{color:r.dim,children:` ${m.length} cases`})]}),(0,Se.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),(0,Se.jsx)(g,{flexDirection:"column",marginY:1,children:m.map((u,x)=>{let h=x===o,y=i.has(u.id);return(0,Se.jsxs)(n,{children:[(0,Se.jsx)(n,{color:r.generateAccent,children:h?"\u276F ":" "}),(0,Se.jsx)(n,{color:r.generateAccent,children:`C${x+1}`}),(0,Se.jsx)(n,{children:` ${u.title??"(untitled)"} `}),it(u)?(0,Se.jsx)(n,{color:y?r.red:r.green,children:y?"\u2717 removed":"\u2713 included"}):(0,Se.jsx)(n,{color:r.dim,children:"\u2713"})]},u.id)})}),(0,Se.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),s&&(0,Se.jsx)(n,{color:r.dim,children:"gray \u2713 = non-functional \xB7 won't be saved by /save"}),(0,Se.jsx)(n,{color:r.dim,children:"\u2191\u2193 move \u21B5 view detail x remove case \u2190 / esc back"})]})}var lr=k(me(),1);function ar(e,t){let o=Math.max(1,t),i=[];for(let m of e.split(`
|
|
13
|
-
`)){let s=m.split(/\s+/).filter(h=>h.length>0);if(s.length===0){i.push("");continue}let u="",x=()=>{u&&(i.push(u),u="")};for(let h of s){for(;h.length>o;)x(),i.push(h.slice(0,o)),h=h.slice(o);u===""?u=h:u.length+1+h.length<=o?u+=" "+h:(x(),u=h)}x()}return i}function Ms(e,t,o,i){let m=Math.max(20,i),s=[];if(o){for(let x of ar(o,m))s.push({text:x,tone:"meta"});s.push({text:"",tone:"blank"})}let u=(x,h)=>{let y=h?.trim();if(y){s.push({text:x,tone:"label"});for(let A of ar(y,m-2))s.push({text:" "+A,tone:"text"});s.push({text:"",tone:"blank"})}};return u("Description",e?.description),u("Preconditions",e?.preconditions),t.length>0&&(s.push({text:"Steps",tone:"label"}),t.forEach((x,h)=>{let y=`${h+1}. `;ar(x.step||"",Math.max(1,m-y.length)).forEach((C,l)=>{l===0?s.push({text:C,tone:"step",accent:y}):s.push({text:" ".repeat(y.length)+C,tone:"step"})});let T=x.expected?.trim();if(T){let C=" \u2192 ",l=" ";ar(T,Math.max(1,m-C.length)).forEach((d,B)=>s.push({text:(B===0?C:l)+d,tone:"expected"}))}})),s}function cr(e,t,o){let i=Math.max(0,t-o);return Math.max(0,Math.min(e,i))}var Re=k(M(),1),pc=7;function gc(e){return e==="text"||e==="step"?void 0:r.dim}function Vs({scenario:e,scenarioIdx:t,caseIdx:o,excluded:i,getStatus:m,getResult:s}){let u=(e.test_cases??[])[o],x=u?i.has(u.id):!1,h=u?it(u):!0,y=u&&m?m(u.id):void 0,A=y==="done"?(0,Re.jsx)(n,{color:r.generateAccent,children:"ready"}):y==="error"?(0,Re.jsx)(n,{color:r.red,children:"failed \u2192 raw steps"}):y==="pending"?(0,Re.jsx)(n,{color:r.dim,children:"bifurcating\u2026"}):null,T=y==="done"&&u&&s?s(u.id):void 0,C=T?T.sub_objectives.map(ae=>({step:ae.objective,expected:""})):xi(u?.manual_steps),l=[u?.priority&&`Priority ${u.priority}`,u?.polarity&&`Polarity ${u.polarity}`,u?.tags&&`Tags ${u.tags}`].filter(Boolean).join(" \xB7 "),{stdout:d}=Vn(),B=Math.max(20,(d?.columns??80)-4),V=Math.max(3,(d?.rows??24)-pc),$=Ms(u,C,l,B),[j,F]=(0,lr.useState)(0);(0,lr.useEffect)(()=>{F(0)},[u?.id]);let E=cr(j,$.length,V);ye((ae,q)=>{if(q.upArrow){F(ue=>cr(ue-1,$.length,V));return}if(q.downArrow){F(ue=>cr(ue+1,$.length,V));return}});let O=$.slice(E,E+V),te=$.length>V?` ${E+1}-${Math.min(E+V,$.length)}/${$.length}`:"";return(0,Re.jsxs)(g,{flexDirection:"column",paddingX:1,children:[(0,Re.jsxs)(n,{children:[(0,Re.jsx)(n,{color:r.dim,children:`Generate \u203A S${t+1} \u203A `}),(0,Re.jsx)(n,{color:r.generateAccent,children:`C${o+1} ${u?.title??"(untitled)"}`}),A?(0,Re.jsx)(n,{children:" "}):null,A]}),h?(0,Re.jsx)(n,{color:x?r.red:r.green,children:x?"\u2717 removed":"\u2713 included"}):(0,Re.jsx)(n,{color:r.dim,children:"\u2713 non-functional \xB7 not saved by /save"}),(0,Re.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),(0,Re.jsx)(g,{flexDirection:"column",marginTop:1,children:O.map((ae,q)=>(0,Re.jsxs)(n,{color:gc(ae.tone),children:[ae.accent?(0,Re.jsx)(n,{color:r.generateAccent,children:ae.accent}):null,ae.text]},E+q))}),(0,Re.jsx)(n,{color:r.muted,children:"\u2500".repeat(60)}),(0,Re.jsx)(n,{color:r.dim,children:`\u2191\u2193 scroll \u2190 / esc back x remove${te}`})]})}var ur=k(M(),1);function $s({scenarios:e,target:t,onClose:o,excluded:i,onToggleCase:m,onToggleScenario:s,getStatus:u,getResult:x}){let h=e.map(l=>(l.test_cases??[]).length),[y,A]=(0,Os.useReducer)((l,d)=>lo(l,d,h),tr(t)),T=()=>{y.level==="scenarios"?o():A({type:"back"})};ye((l,d)=>{if(d.escape||d.leftArrow){T();return}if(y.level!=="detail"){if(d.return){A({type:"enter"});return}if(d.upArrow){A({type:"move",delta:-1});return}if(d.downArrow){A({type:"move",delta:1});return}}if(l==="x"){if(y.level==="scenarios"){let B=(e[y.cursor]?.test_cases??[]).map(V=>V.id);B.length>0&&s(B)}else{let B=y.level==="cases"?y.cursor:y.caseIdx,V=(e[y.scenarioIdx]?.test_cases??[])[B];V&&m(V.id)}return}});let C=e[y.scenarioIdx];if(y.level==="scenarios"||C===void 0){let l=y.level==="scenarios"?y.cursor:0;return(0,ur.jsx)(Ls,{scenarios:e,cursor:l,excluded:i})}return y.level==="cases"?(0,ur.jsx)(js,{scenario:C,scenarioIdx:y.scenarioIdx,cursor:y.cursor,excluded:i}):(0,ur.jsx)(Vs,{scenario:C,scenarioIdx:y.scenarioIdx,caseIdx:y.caseIdx,excluded:i,getStatus:u,getResult:x})}var dr=k(M(),1);function Fs({tcg:e,gm:t,history:o,tuiConfig:i,browse:m}){return m?(0,dr.jsx)($s,{scenarios:e.state.scenarios,target:m.target,onClose:m.onClose,excluded:m.excluded,onToggleCase:m.onToggleCase,onToggleScenario:m.onToggleScenario,getStatus:m.getStatus,getResult:m.getResult}):!e.requestId||e.isSessionClosed?(0,dr.jsx)(ks,{projectId:i.project_id,folderId:i.folder_id,onSubmit:t.handleGenerateSubmit,history:o,error:t.tcgError,validationError:t.tcgValidationError,composeIdleHint:t.composeIdleHint,clearSeq:t.inputClearSeq,busy:t.submitting,closedNotice:e.isSessionClosed?`Generation ${e.state.status}. Type a new objective or /run.`:void 0}):(0,dr.jsx)(Ds,{state:e.state,requestId:e.requestId,history:o,turnActive:e.turnActive,busy:t.submitting,error:t.tcgError??e.state.error,onClearError:()=>t.onClearError?.(),onClarificationAnswer:s=>t.onClarificationAnswer?.(s),onRefine:t.onRefine,onSlash:t.onSlash})}var Ns=k(me(),1);var ct=k(M(),1);function hc({message:e,confirmLabel:t,choice:o}){return(0,ct.jsxs)(g,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,ct.jsx)(n,{bold:!0,children:e}),(0,ct.jsxs)(g,{marginTop:1,children:[(0,ct.jsx)(n,{color:o==="yes"?r.red:r.dim,children:`\u276F ${t}`}),(0,ct.jsx)(n,{children:" "}),(0,ct.jsx)(n,{color:o==="no"?r.green:r.dim,children:"\u276F No"})]}),(0,ct.jsx)(n,{color:r.dim,children:"\u2190 \u2192 choose \xB7 \u21B5 confirm \xB7 esc cancel"})]})}function Us({message:e,onConfirm:t,onCancel:o,confirmLabel:i="Yes, end"}){let[m,s]=(0,Ns.useState)("no");return ye((u,x)=>{(x.leftArrow||x.rightArrow)&&s(h=>h==="yes"?"no":"yes"),x.return&&(m==="yes"?t:o)(),x.escape&&o()}),(0,ct.jsx)(hc,{message:e,confirmLabel:i,choice:m})}var xc=null;function Gs(e){xc=e}import{join as Yt,resolve as vc}from"path";var mr=k(M(),1);function qs({status:e,steps:t,duration:o,creditsConsumed:i,reason:m}){let s=e==="passed",u=s?r.green:r.red,x=s?"\u2713":"\u2717",h=s?"Passed":"Failed",y=o<60?`${o.toFixed(1)}s`:`${Math.floor(o/60)}m ${Math.round(o%60)}s`,A=typeof i=="number"&&i>0?` \xB7 ${i.toFixed(4)} credits`:"",T=!s&&m?` \xB7 ${m}`:"";return(0,mr.jsxs)(g,{children:[(0,mr.jsxs)(n,{bold:!0,color:u,children:[x," ",h]}),(0,mr.jsxs)(n,{color:r.dim,children:[" ","\xB7 ",t," steps \xB7 ",y,A,T]})]})}var Hs=k(M(),1);function Ws(){return(0,Hs.jsx)(n,{color:r.dim,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}var fr=e=>({kind:"login",env:e}),mo=e=>({kind:"switch",env:e}),zs=(e,t)=>e?{kind:"switch",env:t}:{kind:"logout"};async function Xs(e){await new un(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 b=k(M(),1);function op({localMode:e=!1,codeExport:t,codeLanguage:o,skipCodeValidation:i,updatePromise:m,migrationResult:s,sessionName:u,initialChatMode:x,initialObjective:h,initialGenerateLimits:y}={}){ko();let A=(0,S.useRef)(new Fn),[T,C]=(0,S.useState)(0),l=A.current,[d]=(0,S.useState)(()=>new qt),B=(0,S.useRef)(0),V=(0,S.useCallback)(()=>`msg-${++B.current}`,[]),[$,j]=(0,S.useState)(!1),[F,E]=(0,S.useState)(null),[O,ee]=(0,S.useState)(!1),[te,ae]=(0,S.useState)(0),[q,ue]=(0,S.useState)(!1),[be,Ve]=(0,S.useState)(null),[De,Ne]=(0,S.useState)(null),Rt=(0,S.useRef)(null),[Ue,tt]=(0,S.useState)(null),[Jt,Qt]=(0,S.useState)(Nn()),[Le,Oe]=(0,S.useState)(null),[ke,yn]=(0,S.useState)([]),[Pt,kt]=(0,S.useState)(!1),[Zt,Tn]=(0,S.useState)(!1),[Ct,en]=(0,S.useState)(null),[wn,Dt]=(0,S.useState)(null),[It,pr]=(0,S.useState)(null),Et=(0,S.useRef)(null),gr=(0,S.useRef)(null),U=(0,S.useRef)(0),H=(0,S.useRef)(""),Q=(0,S.useRef)(null),W=(0,S.useRef)(null),re=(0,S.useRef)({}),he=(0,S.useRef)(null),{append:Ye}=Eo(),X=(0,S.useCallback)(c=>Ye((0,b.jsx)(g,{paddingX:1,children:c})),[Ye]),[ne,xe]=(0,S.useState)("booting"),[Lt,jt]=(0,S.useState)([]),[hr,Mt]=(0,S.useState)(!1),[fe,Sn]=(0,S.useState)(!1),[Rn,Ks]=(0,S.useState)("chat"),[nt,tn]=(0,S.useState)(null),[kn,fo]=(0,S.useState)(null),[nn,po]=(0,S.useState)(!1),[rn,Cn]=(0,S.useState)(!1),go=(0,S.useRef)(()=>{}),Ys=(0,S.useCallback)((c,p)=>go.current(c,p),[]),Z=Zi({log:Ys});Ss(Z.state,Z.turnActive,X);let xr=(0,S.useRef)(!1),ht=(0,S.useCallback)(()=>{xr.current||Z.state.scenarios.length!==0&&(xr.current=!0,X((0,b.jsx)(sr,{scenarios:Z.state.scenarios,activeSid:null})))},[Z.state.scenarios,X]);(0,S.useEffect)(()=>{Z.isSessionClosed&&ht()},[Z.isSessionClosed,ht]);let[In,on]=(0,S.useState)(null),[ie,sn]=(0,S.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Js=Lr(),Qs=Lr(Io),v=Fi(),En=Ni(),He=(0,S.useMemo)(()=>({auth:{initResolver:c=>v.initResolver(c,(p,a,f,w)=>A.current.log(p,a,f,w)),getResolver:()=>v.getResolver(),getBasicAuth:()=>v.getBasicAuth(),getToken:()=>v.getToken()},getSession:()=>A.current,log:(c,p,a,f)=>A.current.log(c,p,a,f),state:{getTmsCredsCache:()=>Le,setTmsCredsCache:Oe,identityServicesRef:gr,screenshotQueueRef:Et},exit:{registerCleanup:rt,setExitRemoteLogger:jo},options:{skipScreenshotQueue:e}}),[v.initResolver,v.getResolver,v.getBasicAuth,v.getToken,Le,e]),Zs=(0,S.useCallback)((c,p,a)=>{let f=Et.current;if(!f)return;let w=U.current+p;ni(l.sessionDir,w,c,f,(L,N,G,K)=>l.log(L,N,G,K),a)},[l]),ea=(0,S.useCallback)((c,p,a)=>{l.logStep(c,p,a)},[l]),ta=(0,S.useCallback)(c=>he.current?.setStepText(c),[]),na=(0,S.useCallback)(()=>he.current?.setStepComplete(),[]),P=qo(Zs,ea,ta,na),[I,ve]=(0,S.useState)(()=>d.load()),[,ra]=(0,S.useState)(0),$e=(0,S.useCallback)(()=>ra(c=>c+1),[]),[_,pe]=(0,S.useState)(null),Vt=v.creds.getActiveProfile(),ce=v.creds.getDefaultEnv(),Je=(0,S.useCallback)((c,p)=>{let a=c?v.creds.loadProfileConfig(c,p):null;d.save({project_id:a?.project_id??null,project_name:a?.project_name??null,folder_id:a?.folder_id??null,folder_name:a?.folder_name??null}),ve(d.load())},[v.creds,d]),vr=(0,S.useCallback)(async(c,p)=>{let a=v.getResolver();if(!a)return null;let f=a.cached??await a.resolve();if(!f)return null;let w=qe(p),L=new un(w.tmsBaseUrl,f.username,f.access_key);try{let G=(await L.listProjects()).find(oe=>oe.name==="KaneAI Generated");if(G)return{id:G.project_id,name:G.name};let K=await L.createProject("KaneAI Generated");return{id:K.id,name:K.name}}catch{return null}},[v]),br=(0,S.useCallback)(async(c,p)=>{let a=v.getResolver();if(!a)return null;let f=a.cached??await a.resolve();if(!f)return null;let w=qe(c),L=new un(w.tmsBaseUrl,f.username,f.access_key);try{let G=(await L.listFolders(p)).find(oe=>oe.name==="Untitled");if(G)return{id:G.id,name:G.name};let K=await L.createFolder(p,"Untitled");return{id:K.id,name:K.name}}catch{return null}},[v]);(0,S.useEffect)(()=>{O||(l.start({model:I.model,environment:ce,profile:Vt}),u&&l.setSessionName(u),ee(!0))},[l,O,I.model,ce,Vt,u]);let ho=(0,S.useRef)(!1);(0,S.useEffect)(()=>{if(!O||ho.current)return;ho.current=!0;let c=u?[{label:"session",value:u},{label:"test",value:Dr(Yt(process.cwd(),".testmuai","tests",`${u}_test.md`))},{label:"output",value:Dr(Yt(process.cwd(),".testmuai","tests",`output-${u}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];X((0,b.jsx)(Mr,{title:"Recording",titleColor:"#ff9500",rows:c}))},[O,u,X]);let xo=(0,S.useRef)(!1);(0,S.useEffect)(()=>{if(!$||xo.current||!O)return;xo.current=!0;let c=He.state.getTmsCredsCache();if(!c){l.log("warn","BOOT_RESOLVE_FAILED","Boot done but tmsCredsCache empty \u2014 non-controller APIs may fail");return}ot({kind:"boot",tmsCreds:c,env:ce},He).then(p=>{p&&(c.org_id!==void 0&&l.setOrgId(String(c.org_id)),l.setPlan(c.plan??null),l.log("info","BOOT_RESOLVE_OK","Boot identity attached",{username:c.username,org_id:c.org_id,plan:c.plan??null}))}).catch(p=>{l.log("error","BOOT_RESOLVE_ERROR","Boot identity attach error",{error:p instanceof Error?p.message:String(p)})})},[$,O,He,ce,l]);let _t=(0,S.useCallback)(async()=>{if(Le)return l.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:Le.username,org_id:Le.org_id}),Le;let c=await v.resolveBasicAuth();return c?(l.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:c.username,org_id:c.org_id,user_id:c.user_id}),Oe(c)):l.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),c},[v,Le,l]),_n=(0,S.useCallback)(c=>{X((0,b.jsx)(Mr,{title:"\u24D8 Auto-configured",titleColor:r.orange,rows:[{label:"project",value:`${c.projectName} (${c.projectId})`},{label:"folder",value:`${c.folderName} (${c.folderId})`},{label:"change with",value:(0,b.jsxs)(g,{flexDirection:"column",children:[(0,b.jsx)(n,{color:r.dim,children:"kane-cli config project <id>"}),(0,b.jsx)(n,{color:r.dim,children:"kane-cli config folder <id>"})]})}]}))},[X]),An=(0,S.useCallback)(async()=>{let c=await _t();if(!c)return l.log("warn","PROJECT_FAILED","No TMS credentials for project/folder gate"),null;let p=v.creds.getActiveProfile()??"default",a=v.creds.getDefaultEnv(),f=await Mo({creds:v.creds,config:d,profile:p,env:a,tmsCreds:{username:c.username,access_key:c.access_key},isLocal:e,log:(w,L,N,G)=>l.log(w,L,N,G),onAnnounce:_n});return f.status==="ok"?{projectId:f.projectId,folderId:f.folderId}:null},[_t,d,l,v.creds,e,_n]),le=(0,S.useCallback)(c=>{let p=V(),a={...c,id:p};X((0,b.jsx)(Mi,{entry:a}))},[V,X]),D=(0,S.useCallback)((c,p,a,f,w)=>{X((0,b.jsx)(Hi,{status:c,command:p,message:a,details:f,accentColor:w})),p==="/save"&&c==="ok"&&X((0,b.jsx)(g,{marginLeft:2,children:(0,b.jsxs)(n,{color:r.dim,children:["\u2192 Run ",(0,b.jsx)(n,{color:r.generateAccent,children:"/testmd"})," to list your saved tests."]})}))},[X]),vo=(0,S.useRef)(()=>{}),xt=xs(Z.state.scenarios.map(c=>(c.test_cases??[]).length)),oa=(0,S.useCallback)(async()=>{let c=await An();return ve(d.load()),c},[An,d]),Qe=hs({tcg:Z,initialChatMode:x,tuiConfig:I,auth:v,session:l,runner:P,appendStatic:X,handleInput:c=>vo.current(c),freezeTcgArtifact:ht,rearmArtifactFreeze:()=>{xr.current=!1},openSwitchConfirm:c=>on({reason:"switch",to:c}),emitFeedback:D,excluded:xt.excluded,openBrowse:xt.open,initialGenerateLimits:y,ensureProjectAndFolder:oa,config:d});go.current=Qe.tcgLog;let{chatMode:ge,tcgError:yc,tcgValidationError:Tc,composeIdleHint:wc,inputClearSeq:ia,handleGenerateSubmit:sa,flashComposeHint:Bn,setTcgError:Sc}=Qe,yr=(0,S.useCallback)(async(c,p)=>{let a=ii({objective:c,globalDir:Yt(je,"variables"),localDir:Yt(process.cwd(),".testmuai","variables")}),f=l.nextRunIndex();U.current=f,H.current=a.auteurObjective,l.logRunStart(f,a.auteurObjective,p??""),l.setFirstRun(a.auteurObjective,p??"");let w=v.getResolvedBasicAuth(),L=w,N=null;if(!L&&(N=await v.getToken(),!N)){le({type:"error",text:"Not authenticated. Run /login first."});return}let G={basicAuth:w??null,token:N,resolver:v.getResolver(),resolvedCreds:null};Q.current=G;let K=v.creds.getActiveProfile()??"default",oe=v.creds.getDefaultEnv();Lo(v.creds,d,K,oe,(de,Ge,ut,Ze)=>l.log(de,Ge,ut,Ze));let Fe=d.load();if(ve(Fe),f===0&&!e){l.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let de=await An(),Ge=d.load();ve(Ge);let ut=qe(ce),Ze=L?{username:L.username,access_key:L.access_key}:await _t();if(Ze){let bt=await li({tmsBaseUrl:ut.tmsBaseUrl,auth:{username:Ze.username,access_key:Ze.access_key},objective:a.auteurObjective,url:p??I.default_url??"",projectId:de?.projectId??Ge.project_id??"",folderId:de?.folderId??Ge.folder_id??"",hasCustomProfile:!!I.chrome_profile_path,log:(Pr,ma,fa,pa)=>l.log(Pr,ma,fa,pa)});bt&&(l.setTestId(bt),de?.projectId&&l.setProjectId(de.projectId))}}let ze=null;if(ie.useCft)le({type:"info",text:"CfT mode: Playwright will manage browser"});else if(ie.wsEndpoint)le({type:"info",text:`WS endpoint: ${ie.wsEndpoint.slice(0,60)}...`});else if(ie.cdpEndpoint)le({type:"info",text:`CDP endpoint: ${ie.cdpEndpoint}`});else{le({type:"info",text:"Starting Chrome..."});try{ze=await En.ensureChrome(p)}catch(Ge){le({type:"error",text:No(Ge)});return}l.logChromeLaunch(ze.port,ze.cdpEndpoint),le({type:"info",text:`Chrome ready (port ${ze.port})`});let de=Go({headless:ie.headless,cdpEndpoint:ze.cdpEndpoint,chromePid:ze.process.pid});de&&(he.current=de,rt("marker-overlay",()=>de.kill()))}l.setAuteurVariables(a.auteur),W.current=a;let Ot=L&&!e?await si({variables:a,auth:L,orgId:String((await _t())?.org_id??""),env:ce,localMode:e,log:(de,Ge,ut,Ze)=>l.log(de,Ge,ut,Ze)}):{};re.current=Ot;let lt=Ur(Yt(je,"global-memory.md")),$t=Ur(Yt(process.cwd(),".testmuai","context.md")),an=ze?{cdpEndpoint:ze.cdpEndpoint,instance:ze,tempDir:null}:ie.wsEndpoint?{wsEndpoint:ie.wsEndpoint,instance:null,tempDir:null}:ie.cdpEndpoint?{cdpEndpoint:ie.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null};if(f===0){let de={mode:I.mode,max_steps:ie.maxSteps,timeout:ie.timeout>0?ie.timeout:void 0,target:ze?"chrome":ie.cdpEndpoint?"cdp":ie.wsEndpoint?"ws":void 0,chrome_profile:I.chrome_profile_path||void 0,cdp_endpoint:ie.cdpEndpoint||void 0,ws_endpoint:ie.wsEndpoint||void 0,headless:ie.headless,global_context:lt??void 0,local_context:$t??void 0,variables:Object.keys(a.auteur).length>0?a.auteur:void 0};l.setResolvedGlobal(de)}let Ft=oi(a.auteur,a.auteurObjective),Mn=ri({objective:a.auteurObjective,url:p,model:I.model,chrome:an,auth:G,sessionId:l.sessionId,runIndex:f,windowSize:I.window_size,maxSteps:ie.maxSteps,headless:ie.headless,variables:Object.keys(Ft).length>0?Ft:void 0,globalContext:lt??void 0,localContext:$t??void 0,sessionContext:l.getContext()});p&&E(p),Ve(null),P.startRun(Mn,{environment:ce,mode:I.mode,log:(de,Ge,ut,Ze)=>l.log(de,Ge,ut,Ze)}),ae(de=>de+1)},[v,En,d,I,l,ce,P,le,ie,An,_t]),aa=(0,S.useCallback)(async c=>{let p=vc(c),a=Qo(p),f=new Fn,w=v.getResolvedBasicAuth(),L=null;w||(L=await v.getToken());let N={basicAuth:w??null,token:L,resolver:v.getResolver(),resolvedCreds:null},G=ce,K=qe(G),oe=v.creds.getActiveProfile()??"default";return{path:p,cwd:process.cwd(),opts:{},isAgent:!1,resolved:a,resolvedAuth:N,cliOverrides:{},environment:G,envConfig:K,profile:oe,model:"v16-alpha",creds:v.creds,configStore:d,session:f,skipGlobalRemoteLogger:!0,onAnnounce:_n}},[v,d,ce,_n]),se=Qi({buildInput:aa,remoteLogger:null}),Tr=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(P.bifurcationInfo&&P.bifurcationInfo!==Tr.current){Tr.current=P.bifurcationInfo;let{flows:c,isSingleFlow:p}=P.bifurcationInfo;if(p&&c.length===1&&c[0])l.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:c[0]}),le({type:"info",text:`Objective: ${c[0]}`});else if(!p&&c.length>1){let a=[`Bifurcated into ${c.length} flows:`];c.forEach((f,w)=>a.push(` ${w+1}. ${f}`)),l.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:c.length}),le({type:"info",text:a.join(`
|
|
14
|
-
`)})}}},[P.bifurcationInfo,l,le]);let wr=S.default.useRef(null),Sr=S.default.useRef(0),Rr=S.default.useRef(0);(0,S.useEffect)(()=>{if(P.lastRunEnd&&P.lastRunEnd!==wr.current){wr.current=P.lastRunEnd;let{status:c,duration:p,summary:a,reason:f,context:w}=P.lastRunEnd,{passed:L,failed:N,total:G}=Wo(P.steps);Sr.current+=G,Rr.current+=p??0,Ve({status:c,duration:p??0,summary:a??"",stepsPassed:L,stepsFailed:N,stepsTotal:G,reason:f,finalState:P.lastRunEnd?.final_state,creditsConsumed:P.lastRunEnd?.credits_consumed}),l.logRunEnd(U.current,c,p,a);let K=P.bifurcationInfo,oe=K&&!K.isSingleFlow?K.flows:null,Fe=Po(P.lastRunEnd,U.current,oe),ze=Do(P.lastRunEnd,H.current,U.current,Fe);l.addRunResult(ze,P.lastRunEnd?.total_runs);let Ot=P.lastRunEnd?.per_flow_metadata;if(K&&!K.isSingleFlow&&Ot&&Ot.length>1)for(let lt=0;lt<Ot.length;lt++){let $t=Ot[lt],an=P.steps[lt],Ft=an?.children??[],Mn=Ft.filter(bt=>bt.status==="passed").length,de=Ft.filter(bt=>bt.status==="failed").length,Ge=Ft.reduce((bt,Pr)=>bt+(Pr.duration??0),0),ut=an?.status==="failed"?"failed":"passed",Ze=K.flows[lt]??an?.objective??H.current;l.addFlow({runIndex:U.current,flowId:K.flows[lt],objective:Ze,status:ut,summary:$t.summary??"",duration:Ge,steps:Mn+de,stepsPassed:Mn,stepsFailed:de,reason:$t.error_message??void 0,creditsConsumed:$t.credits_consumed??void 0})}else l.addFlow({runIndex:U.current,objective:H.current,status:c,summary:a??"",duration:p??0,steps:G,stepsPassed:L,stepsFailed:N,reason:f,creditsConsumed:P.lastRunEnd?.credits_consumed})}},[P.lastRunEnd,l,le]);let kr=(0,S.useRef)(null);(0,S.useEffect)(()=>{P.askingUser&&(kr.current=P.askingUser)},[P.askingUser]);let Cr=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(be&&!P.isRunning&&P.lastRunEnd){if(Cr.current===P.lastRunEnd)return;Cr.current=P.lastRunEnd,X((0,b.jsxs)(g,{flexDirection:"column",children:[(0,b.jsx)(qs,{status:be.status,steps:be.stepsTotal,duration:be.duration,creditsConsumed:be.creditsConsumed,reason:be.reason}),(0,b.jsx)(Ws,{})]})),Ve(null)}},[be,P.isRunning,P.lastRunEnd,X]);let bo=(0,S.useRef)(null);(0,S.useEffect)(()=>{if(se.runSummary&&!se.running){if(bo.current===se.runSummary)return;bo.current=se.runSummary,(se.summary||se.links)&&X((0,b.jsxs)(g,{flexDirection:"column",children:[se.summary&&(0,b.jsx)(ti,{data:se.summary}),se.links&&(0,b.jsx)(Un,{...se.links,autoExit:!1})]}))}},[se.runSummary,se.running,se.summary,se.links,X]),(0,S.useEffect)(()=>{he.current?.setRunActive(P.isRunning)},[P.isRunning]),(0,S.useEffect)(()=>{if(P.runError&&!P.isRunning){let c=P.runError.trim();l.log("error","RUNNER_ERROR","Runner error occurred",{error:c}),l.escalateRun(l.nextRunIndex()-1);let a=c.split(`
|
|
15
|
-
`).slice(-8).join(`
|
|
16
|
-
`);le({type:"error",text:`Runner error:
|
|
17
|
-
${a}`})}},[P.runError,P.isRunning,le,l]);let Pn=(0,S.useCallback)(async()=>{l.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Qt(Nn()),tt({status:"uploading"});let c=v.getResolvedBasicAuth(),p=null;if(!c&&(p=await v.getToken(),!p))return l.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let a=Le??await _t();if(!a)return l.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),l.setUploadStatus("failed","Could not get TMS credentials"),null;l.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:l.testId,commit_id:l.sessionId,project_id:I.project_id,session_dir:l.sessionDir,run_dirs:l.getRunDirs()});let f={basicAuth:c??null,token:p,resolver:v.getResolver(),resolvedCreds:a};Et.current&&(l.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await Et.current.drain(),l.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let w=ai({session:l,env:ce,auth:f,variables:W.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:re.current,projectId:I.project_id,folderId:I.folder_id,totalSteps:Sr.current,totalDuration:Rr.current,screenshotExtMap:Et.current?.getExtMap(),codeExport:ci({codeExport:t,codeLanguage:o,skipCodeValidation:i},I.code_export),onProgress:(G,K,oe)=>{l.log("info","EXIT_PROGRESS","Upload progress",{step:G,status:K,detail:oe}),Qt(Fe=>ei(Fe,G,K,oe))},log:(G,K,oe,Fe)=>l.log(G,K,oe,Fe),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),N=await new ui(w).execute();if(N.success){l.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:N.testId,testcase_id:N.testcaseId??null,share_id:N.shareId??null}),l.setUploadStatus("uploaded"),N.testId&&l.setTestId(N.testId),N.testcaseId&&l.setTestcaseId(N.testcaseId);let G=qe(ce),K=I.project_id,oe=N.testcaseId&&N.shareId&&K?Fr(G.testManagerUiUrl,K,N.testcaseId,N.shareId):void 0,Fe=N.testcaseId&&K?Nr(G.testManagerUiUrl,K,N.testcaseId):void 0;tt({status:"success",testUrl:oe,testCaseLink:Fe,codeExportDir:N.codeExportDir}),Gs({shareableLink:oe,testCaseLink:Fe,codeExportDir:N.codeExportDir})}else l.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:N.error}),l.setUploadStatus("failed",N.error),tt({status:"failed",error:N.error});return N},[v,ce,l,I,Le,_t]),Dn=(0,S.useCallback)(async()=>{l.log("info","SESSION_RESET_START","Starting session reset via /new"),kt(!0);let c=l.getFlows();c.length>0&&X((0,b.jsx)(io,{flows:c}));let p=null;if(!e)try{p=await Pn()??null}catch(w){l.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(w)}),le({type:"error",text:"Upload failed \u2014 session data saved locally."})}let a=null;try{let{persistRecordedSession:w}=await import("./persist-recorded-session-A5EJ25AE.js");a=w(l,{testcaseId:l.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:p?.codeExportDir})}catch(w){l.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(w)})}if(p?.success&&p.testcaseId||a){let w=qe(ce),L=I.project_id,N=p?.testcaseId;X((0,b.jsx)(Un,{recordedTestPath:a?.recordedTestPath,outputDir:a?.outputDir,shareableLink:N&&p?.shareId&&L?Fr(w.testManagerUiUrl,L,N,p.shareId):void 0,testCaseLink:N&&L?Nr(w.testManagerUiUrl,L,N):void 0,codeExportDir:p?.codeExportDir,autoExit:!1}))}l.testId&&yn(w=>[...w,{testId:l.testId,runCount:te}]),En.killChrome(),await l.finish("complete");let f=new Fn;f.start({model:I.model,environment:ce,profile:Vt??null}),A.current=f,C(w=>w+1),l.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:f.sessionId}),await ot({kind:"resessionize",env:ce},He),ae(0),Sr.current=0,Rr.current=0,U.current=0,H.current="",W.current=null,re.current={},jn.current=0,Er.current=0,kr.current=null,Cr.current=null,wr.current=null,Tr.current=null,Ve(null),E(null),tt(null),Qt(Nn()),kt(!1),X((0,b.jsxs)(g,{flexDirection:"column",marginY:1,children:[(0,b.jsx)(n,{color:r.dim,children:"\u2500".repeat(44)}),(0,b.jsx)(n,{color:r.green,bold:!0,children:"New session started"})]}))},[l,le,X,e,Pn,En,te,I,ce,Vt,He]),yo=(0,S.useCallback)(async()=>{if(!(l.nextRunIndex()>0)){le({type:"info",text:"No runs in current session."});return}if(P.isRunning){le({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return}if(I.mode==="testing"&&!l.sessionName){Dt("new"),en(Wr());return}await Dn()},[l,P,le,I.mode,Dn]),To=(0,S.useCallback)(async()=>{await l.finish("complete"),Wt(0,"Session complete")},[l]),ca=(0,S.useCallback)(async c=>{Tn(!1);let p=l.testId??(ke.length>0?ke[ke.length-1].testId:null);if(c&&p){l.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:c});try{let a=qe(ce),f=v.getResolvedBasicAuth();f&&await Xs({tmsBaseUrl:a.tmsBaseUrl,username:f.username,accessKey:f.access_key,testId:p,feedbackType:c,log:(w,L,N,G)=>l.log(w,L,N,G)})}catch(a){l.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(a)})}}else l.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");To()},[ce,v,l,To,ke]),Ln=(0,S.useCallback)(async()=>{let c=l.nextRunIndex()>0,p=null;if(c&&!e){l.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),ue(!0);try{p=await Pn()??null}catch(f){l.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(f)})}l.testId&&yn(f=>[...f,{testId:l.testId,runCount:te}])}try{let{persistRecordedSession:f}=await import("./persist-recorded-session-A5EJ25AE.js"),w=f(l,{testcaseId:l.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:p?.codeExportDir});w&&pr(w)}catch(f){l.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(f)})}if(c&&!e&&await l.finish("complete"),!(l.testId??(ke.length>0?ke[ke.length-1].testId:null))||e){await l.finish("complete"),Wt(0,"No test ID \u2014 quick exit");return}ue(!0),Tn(!0)},[l,e,Pn,te,ke,I]),vt=(0,S.useCallback)(async()=>{if(q)return;l.log("info","EXIT_START","TUI exit initiated");let c=I.mode==="testing",p=l.nextRunIndex()>0;if(c&&p&&!l.sessionName){Dt("exit"),en(Wr());return}await Ln()},[q,l,I.mode,Ln]),la=(0,S.useCallback)(c=>{c&&l.setSessionName(c);let p=wn;en(null),Dt(null),p==="new"?Dn():Ln()},[l,wn,Ln,Dn]);(0,S.useEffect)(()=>{if(!q)return;let c=300*1e3,p=setTimeout(async()=>{l.setUploadStatus("failed","Upload timed out after 5m"),await l.finish("complete"),Wt(0,"Upload timed out after 5m")},c);return()=>clearTimeout(p)},[q,l]);let jn=S.default.useRef(0),Ir=S.default.useRef(null),Er=S.default.useRef(0),_r=S.default.useRef(0),Ar=S.default.useRef(null);ye((c,p)=>{if(p.ctrl&&c==="c"){if(ge==="generate"&&(Z.isStreaming||Qe.submitting)){Qe.cancelGenerate(),_r.current++,Ar.current&&clearTimeout(Ar.current),Ar.current=setTimeout(()=>{_r.current=0},2e3),_r.current>=2&&vt();return}if(!se.running){if(q){Er.current+=1,Er.current>=2&&(l.setUploadStatus("pending","Force exit by user"),l.finish("complete"),Wt(0,"Force exit by user"));return}if(P.isRunning){P.cancelRun(),le({type:"info",text:"Run cancelled."}),jn.current++,Ir.current&&clearTimeout(Ir.current),Ir.current=setTimeout(()=>{jn.current=0},2e3),jn.current>=2&&vt();return}vt()}}}),ye((c,p)=>{if(p.ctrl&&c==="t"&&ge==="generate"&&!Z.isStreaming){Bn("no thinking yet");return}});let wo=S.default.useMemo(()=>{let c=v.creds.getActiveProfile()??"none",p=v.creds.getDefaultEnv();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-headless",label:"Headless",type:"select",currentValue:ie.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:a=>{sn(f=>({...f,headless:a==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(ie.maxSteps),onValue:a=>{let f=parseInt(a,10);f>0&&sn(w=>({...w,maxSteps:f}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:ie.timeout?String(ie.timeout):"",placeholder:"0 = no timeout",onValue:a=>{let f=parseInt(a,10);sn(w=>({...w,timeout:isNaN(f)?0:f}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:ie.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:a=>{sn(f=>({...f,cdpEndpoint:a}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:ie.wsEndpoint,placeholder:"wss://...",onValue:a=>{sn(f=>({...f,wsEndpoint:a}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{v.logout().then(a=>{$e();let f=v.creds.getActiveProfile(),w=v.creds.getDefaultEnv();Je(f,w);let L=zs(f,w);ot(L,He).catch(()=>{}),a?D("ok","/logout",`Logged out: ${a.profile} [${a.env}]`):D("ok","/logout","No active profile")}).catch(()=>{D("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let a=v.creds.getActiveProfile()??"none",f=v.creds.getDefaultEnv(),w=v.creds.loadBasicAuth(a,f),L=w?"basic":v.creds.loadCredentials(a,f)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:a},{key:"Environment",value:f}]},{label:"Authentication",entries:[{key:"Method",value:L},...w?[{key:"Username",value:w.username}]:[]]},{label:"Token",entries:[{key:"Status",value:v.tokenValid?"valid":"not logged in",color:v.tokenValid?r.green:r.red}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let a=v.creds.getActiveProfile()??"default",f=v.creds.getDefaultEnv(),w=qe(f);try{let L=v.getBasicAuth(),N=L?null:await v.getToken();if(!L&&!N){Ne({text:"Not authenticated. Run /login first.",color:r.red});return}let{ControllerClient:G}=await import("./controller-client-RD2YEMAH.js"),oe=await(L?new G(w.controllerBaseUrl,{username:L.username,accessKey:L.access_key}):new G(w.controllerBaseUrl,N)).getCreditBalance();Ne({text:`Credits \u2014 available: ${oe.available_credits}, total: ${oe.total_credits} (${a} / ${f})`,color:r.green})}catch(L){Ne({text:`Balance check failed: ${L instanceof Error?L.message:String(L)}`,color:r.red})}Rt.current&&clearTimeout(Rt.current),Rt.current=setTimeout(()=>{Ne(null),Rt.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:I.mode}]},{label:"Browser",entries:[{key:"Window",value:`${I.window_size.width}x${I.window_size.height}`},{key:"Chrome Profile",value:I.chrome_profile_path?I.chrome_profile_path.split("/").pop()??I.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:I.project_name?`${I.project_name} (${I.project_id})`:I.project_id??"(none)"},{key:"Folder",value:I.folder_name?`${I.folder_name} (${I.folder_id})`:I.folder_id??"(none)"},{key:"Default URL",value:ln}]},{label:"Code Export",entries:[{key:"Enabled",value:I.code_export.enabled?"yes":"no"},{key:"Language",value:I.code_export.language},{key:"Skip Validation",value:I.code_export.skip_validation?"yes":"no"}]}]})},{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:()=>{}},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...I.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:r.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${I.window_size.width}x${I.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:I.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:a=>{(a==="action"||a==="testing")&&(d.set("mode",a),ve(d.load()),D("ok","/config set-mode",a))}},{id:"config-generate",label:"Generate",type:"submenu",currentValue:`${I.generate.scenario_limit}x${I.generate.per_scenario_limit}`,children:[{id:"config-generate-scenario-limit",label:"Scenario limit",type:"text-input",currentValue:String(I.generate.scenario_limit),placeholder:"5",onValue:a=>{let f=parseInt(a,10);if(!Number.isFinite(f)||f<1||f>20){D("error","/config",`Scenario limit must be 1-20 (got ${a})`);return}d.set("generate",{...I.generate,scenario_limit:f}),ve(d.load()),D("ok","/config",`Scenario limit: ${f}`)}},{id:"config-generate-per-scenario-limit",label:"Per-scenario limit",type:"text-input",currentValue:String(I.generate.per_scenario_limit),placeholder:"4",onValue:a=>{let f=parseInt(a,10);if(!Number.isFinite(f)||f<1||f>20){D("error","/config",`Per-scenario limit must be 1-20 (got ${a})`);return}d.set("generate",{...I.generate,per_scenario_limit:f}),ve(d.load()),D("ok","/config",`Per-scenario limit: ${f}`)}},{id:"config-generate-memory",label:"Memory",type:"select",currentValue:I.generate.memory_enabled?"on":"off",options:[{label:"on",value:"on"},{label:"off",value:"off"}],onValue:a=>{let f=a==="on";d.set("generate",{...I.generate,memory_enabled:f}),ve(d.load()),D("ok","/config",`Memory: ${f?"on":"off"}`)}}]},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:I.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:I.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:a=>{d.set("code_export",{...I.code_export,enabled:a==="on"}),ve(d.load()),D("ok","/config code-export enabled",a)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:I.code_export.language,options:[{label:"python",value:"python"},{label:"javascript",value:"javascript"}],onValue:a=>{a!=="python"&&a!=="javascript"||(d.set("code_export",{...I.code_export,language:a}),ve(d.load()),D("ok","/config code-export language",a))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:I.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:a=>{d.set("code_export",{...I.code_export,skip_validation:a==="on"}),ve(d.load()),D("ok","/config code-export skip-validation",a)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{vt()}}]},[v,d,I,le,vt,ie,$e,D]),Br=(0,S.useCallback)(c=>{if(P.askingUser){let a=P.askingUser;X((0,b.jsxs)(g,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,b.jsx)(g,{marginLeft:1,children:(0,b.jsx)(n,{color:r.orange,bold:!0,children:"Agent Question"})}),(0,b.jsxs)(g,{borderStyle:"round",borderColor:r.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,b.jsxs)(g,{children:[(0,b.jsx)(g,{width:3,children:(0,b.jsx)(n,{color:r.orange,bold:!0,children:"?"})}),(0,b.jsx)(g,{flexShrink:1,children:(0,b.jsx)(n,{wrap:"wrap",children:a})})]}),(0,b.jsxs)(g,{marginTop:1,children:[(0,b.jsx)(g,{width:3,children:(0,b.jsx)(n,{color:r.dim,bold:!0,children:"\u2192"})}),(0,b.jsx)(g,{flexShrink:1,children:(0,b.jsx)(n,{wrap:"wrap",children:c})})]})]})]})),kr.current=null,P.sendAnswer(c);return}if(l.logCommand(c),P.isRunning){le({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let p=Kn(c);if(p){if(!qi(p.command,ge)){D("error",`/${p.command}`,`/${p.command} isn't available in ${ge==="run"?"Run":"Generate"} mode.`);return}switch(p.command){case"profiles":if(ge==="generate"&&Z.requestId&&p.args.action==="switch"){on({reason:"profile",pendingArgs:p.args});return}tn("auth");return;case"login":case"logout":case"whoami":case"balance":case"auth":tn("auth");return;case"config":tn("config");return;case"help":po(!0);return;case"testmd":if(P.isRunning||Z.isStreaming||se.running){D("error","/testmd","Finish or cancel the current run/generation first.");return}se.clearResult(),Cn(!0);return;case"generate":if(se.running){D("error","/generate","Finish or cancel the running test first.");return}ge==="run"?Qe.requestSwitch("generate")&&D("ok","/generate","Switched to Generate mode.",void 0,r.generateAccent):D("ok","/generate","Already in Generate mode.",void 0,r.generateAccent);return;case"run":{let a=Wi(ge,p.args.objective);switch(a.kind){case"run":yr(a.objective,ln);return;case"reject":D("error","/run",'Switch to Run mode first (bare /run), then /run "objective".');return;case"already":D("ok","/run","Already in Run mode.",void 0,r.orange);return;case"toggle":Qe.requestSwitch("run")&&D("ok","/run","Switched to Run mode.",void 0,r.orange);return}return}case"update":{(async()=>{let{getUpdateCommand:a}=await import("./version-check-RVK5YKDZ.js");D("ok","/update",`To update kane-cli, run: ${a()}`)})();return}case"summary":{if(ge==="generate"&&!Z.requestId){Bn("no generation yet"),D("ok","/summary","(no generation yet)");return}let a=l.getFlows();if(a.length===0){D("ok","/summary","No runs yet in this session.");return}let f=p.args.index?parseInt(p.args.index,10):void 0;if(f!==void 0&&!l.getFlow(f)){D("error","/summary",`No flow at index ${f}`,`${a.length} flow${a.length===1?"":"s"} available. Use /summary to see all.`);return}X((0,b.jsx)(io,{flows:a,filterIndex:f})),D("ok","/summary",f!==void 0?`Flow ${f}`:`${a.length} flow${a.length===1?"":"s"}`);return}case"new":ge==="generate"&&Z.requestId&&(ht(),Z.end().catch(a=>{D("error","/new",`Could not end generation cleanly: ${a.message}`)}),Z.reset()),yo(),D("ok","/new","Session reset");return;case"name":{let a=p.raw.replace(/^\/name\s*/,"").trim();if(!a){D("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:f}=await import("./name-validator-5YGJXLZ7.js");try{f(a),l.setSessionName(a),D("ok","/name",`Session name set: ${a}`)}catch(w){D("error","/name",w.message)}})();return}case"cancel":if(ge==="generate"&&Z.isStreaming){ht(),Z.cancel(),D("ok","/cancel","Cancelled");return}if(ge==="generate"&&!Z.requestId){Bn("no generation yet"),D("ok","/cancel","(no generation yet)");return}if(se.running){se.cancel(),D("ok","/cancel","Run cancelled");return}P.cancelRun(),D("ok","/cancel","Run cancelled");return;case"clear":D("ok","/clear","Chat cleared");return;case"exit":ge==="generate"&&Z.requestId&&(ht(),Z.end()),vt();return;default:D("error",`/${p.command}`,"Unknown command");return}}if(c.trim().toLowerCase()==="exit"){vt();return}X((0,b.jsxs)(g,{children:[(0,b.jsx)(n,{color:r.orange,children:"\u276F "}),(0,b.jsx)(n,{children:c})]})),yr(c,ln)},[P,le,D,X,l,yr,vt,yo,ge,Z.isStreaming,Z.requestId,Z,Bn,ht,se]);vo.current=Br;let So=(0,S.useRef)(!1);(0,S.useEffect)(()=>{if(!So.current&&$&&x==="generate"&&h){So.current=!0;let c=setTimeout(()=>{sa(h)},50);return()=>clearTimeout(c)}},[$,x,h]);let Ro=v.getAuthInfo(),ua=Ro?Ro.method==="basic"?"basic auth":"oauth":"not logged in",da=(()=>{if(nn)return["help"];if(rn)return["testmd"];if(_)return _.phase==="wizard"?["auth","login"]:_.phase==="project"?["auth","login","project"]:_.phase==="folder"?["auth","login","folder"]:["auth","login"];let c={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return nt==="auth"?kn?["auth",c[kn]]:["auth"]:nt==="config"?kn?["config",c[kn]]:["config"]:nt==="help"?["help"]:P.askingUser?["agent question"]:[]})();return(0,b.jsxs)(g,{flexDirection:"column",children:[!$&&!fe&&(0,b.jsx)(ji,{onComplete:()=>{let c=v.creds.getActiveProfile(),p=v.creds.getDefaultEnv(),a=c?v.creds.loadCredentials(c,p):null,f=c?v.creds.loadBasicAuth(c,p):null,w=!!(a||f),L=f?.username??c??null;X((0,b.jsx)(zn,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:cn,authenticated:w,user:L})),Sn(!0);let N=(G,K,oe,Fe)=>{l.log(G,K,oe,Fe)};if(zo(v.creds,N).then(G=>{if(G.status==="authenticated"){let{profile:K,env:oe,tmsCreds:Fe}=G.result;v.creds.setActiveProfile(K),v.creds.setDefaultEnv(oe),$e(),Oe(Fe),xe("ready"),j(!0)}else G.status==="needs_pick"?(jt(G.profiles),xe("pick")):xe("login")}).catch(G=>{l.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(G)}),xe("login")}),m&&m.then(async G=>{if(G){let{getUpdateCommand:K}=await import("./version-check-RVK5YKDZ.js");D("ok","update available",`${G.current} \u2192 ${G.latest}`,`Run: ${K()}`)}}).catch(()=>{}),s&&s.changes.length>0){let G=`kane-cli updated to ${s.toVersion}. Default settings changed:`,K=[...s.changes.map(oe=>`\u2022 ${oe.description} (${oe.field}: ${JSON.stringify(oe.from)} \u2192 ${JSON.stringify(oe.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
18
|
-
`);D("ok","defaults updated",G,K)}}}),!$&&ne==="booting"&&fe&&(0,b.jsx)(g,{paddingX:1,children:(0,b.jsx)(n,{color:"yellow",children:"Checking authentication..."})}),!$&&ne==="pick"&&(0,b.jsx)(bc,{profiles:Lt,onCancel:()=>xe("login"),onSelect:async(c,p)=>{v.creds.setActiveProfile(c),v.creds.setDefaultEnv(p),$e(),Mt(!0);let a=(f,w,L,N)=>{l.log(f,w,L,N)};try{let f=await Ho(v.creds,c,p,a);Mt(!1),f.status==="authenticated"?(Je(c,p),Oe(f.result.tmsCreds),xe("ready"),j(!0)):xe("login")}catch{Mt(!1),xe("login")}},validating:hr}),!$&&ne==="login"&&!_&&(0,b.jsx)($n,{devMode:process.env.KANE_DEV_MODE==="1",profiles:v.creds.listProfiles(),onBasicLogin:async(c,p,a,f)=>{let{validateBasicAuth:w}=await import("./validate-basic-QUPVT2EV.js");await w(p,a,f),v.creds.saveBasicAuth(c,p,{username:a,access_key:f}),v.creds.setActiveProfile(c),v.creds.setDefaultEnv(p),Xe(v.creds,d,c,p),v.setTokenValid(!0),$e()},onOAuthLogin:async(c,p)=>{v.creds.setDefaultEnv(p),await v.login(c),Xe(v.creds,d,c,p),$e()},onComplete:(c,p)=>{ot(fr(p),He).then(()=>{$e(),pe({phase:"project",profile:c,env:p})}).catch(()=>{pe({phase:"project",profile:c,env:p})})},onCancel:()=>{Wt(0,"Login cancelled at startup")}}),!$&&ne==="login"&&_?.phase==="project"&&(0,b.jsx)(Ut,{resolver:v.getResolver(),currentProjectId:null,env:_.env,onSelect:(c,p)=>{v.creds.saveProfileConfig(_.profile,_.env,{project_id:c,project_name:p}),D("ok","/config project",p,`id: ${c}`),pe({..._,phase:"folder"})},onCancel:async()=>{let c=await vr(_.profile,_.env);c&&(et(v.creds,d,_.profile,_.env,{projectId:c.id,projectName:c.name}),D("ok","/config project",c.name,`id: ${c.id}`),pe({..._,phase:"folder"}))}}),!$&&ne==="login"&&_?.phase==="folder"&&(0,b.jsx)(Gt,{resolver:v.getResolver(),projectId:v.creds.loadProfileConfig(_.profile,_.env)?.project_id??"",currentFolderId:null,env:_.env,onSelect:(c,p)=>{v.creds.saveProfileConfig(_.profile,_.env,{folder_id:c,folder_name:p}),D("ok","/config folder",p,`id: ${c}`),Je(_.profile,_.env),pe(null),xe("ready"),j(!0)},onCancel:async()=>{let c=v.creds.loadProfileConfig(_.profile,_.env);if(!c?.project_id)return;let p=await br(_.env,c.project_id);p&&(et(v.creds,d,_.profile,_.env,{folderId:p.id,folderName:p.name}),D("ok","/config folder",p.name,`id: ${p.id}`),Je(_.profile,_.env),pe(null),xe("ready"),j(!0))}}),$&&Rn==="menu"&&!q&&(0,b.jsx)(g,{marginBottom:1,children:(0,b.jsxs)(g,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,b.jsx)(n,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,b.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,b.jsx)(n,{color:"#ff9500",children:I.model}),(0,b.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,b.jsx)(n,{color:r.dim,children:ua}),(0,b.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,b.jsxs)(n,{color:r.dim,children:[Vt??"no profile","/",ce]})]})}),$&&!q&&(0,b.jsxs)(g,{flexDirection:"column",flexGrow:1,children:[Rn==="menu"&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)(Zr,{items:wo,onRunSelected:()=>Ks("chat"),onActiveViewChange:fo,renderLoginWizard:c=>{let p=_?.phase??"wizard";if(p==="project")return(0,b.jsx)(Ut,{resolver:v.getResolver(),currentProjectId:null,env:_.env,onSelect:(a,f)=>{v.creds.saveProfileConfig(_.profile,_.env,{project_id:a,project_name:f}),D("ok","/config project",f,`id: ${a}`),pe(w=>w?{...w,phase:"folder"}:null)},onCancel:async()=>{if(!_)return;let a=await vr(_.profile,_.env);a&&(et(v.creds,d,_.profile,_.env,{projectId:a.id,projectName:a.name}),D("ok","/config project",a.name,`id: ${a.id}`),pe(f=>f?{...f,phase:"folder"}:null))}});if(p==="folder"){let a=v.creds.loadProfileConfig(_.profile,_.env);return(0,b.jsx)(Gt,{resolver:v.getResolver(),projectId:a?.project_id??"",currentFolderId:null,env:_.env,onSelect:(f,w)=>{v.creds.saveProfileConfig(_.profile,_.env,{folder_id:f,folder_name:w}),D("ok","/config folder",w,`id: ${f}`),Je(_.profile,_.env),pe(null),c()},onCancel:async()=>{if(!_)return;let f=v.creds.loadProfileConfig(_.profile,_.env);if(!f?.project_id)return;let w=await br(_.env,f.project_id);w&&(et(v.creds,d,_.profile,_.env,{folderId:w.id,folderName:w.name}),D("ok","/config folder",w.name,`id: ${w.id}`),Je(_.profile,_.env),pe(null),c())}})}return(0,b.jsx)($n,{devMode:process.env.KANE_DEV_MODE==="1",profiles:v.creds.listProfiles(),onBasicLogin:async(a,f,w,L)=>{let{validateBasicAuth:N}=await import("./validate-basic-QUPVT2EV.js");await N(f,w,L),v.creds.saveBasicAuth(a,f,{username:w,access_key:L}),v.creds.setActiveProfile(a),v.creds.setDefaultEnv(f),Xe(v.creds,d,a,f),v.setTokenValid(!0),$e()},onOAuthLogin:async(a,f)=>{v.creds.setDefaultEnv(f),await v.login(a),Xe(v.creds,d,a,f),$e()},onComplete:(a,f)=>{ot(fr(f),He).then(()=>{pe({phase:"project",profile:a,env:f})}).catch(()=>{pe({phase:"project",profile:a,env:f})})},onCancel:()=>{pe(null),c()}})},renderProfilesView:c=>(0,b.jsx)(Vr,{creds:v.creds,onSwitch:(p,a)=>{let f=v.creds.getActiveProfile()??"(none)";v.creds.setActiveProfile(p),v.creds.setDefaultEnv(a),Xe(v.creds,d,p,a),Je(p,a),$e(),ot(mo(a),He).catch(()=>{}),D("ok","/profiles switch",`${f} \u2192 ${p} [${a}]`)},onCancel:c}),renderChromeProfilePicker:c=>(0,b.jsx)(Or,{currentPath:I.chrome_profile_path,onSelect:p=>{d.set("chrome_profile_path",p),ve(d.load()),D("ok","/config chrome-profile",p),c()},onCancel:c}),renderProjectPicker:c=>(0,b.jsx)(Ut,{resolver:v.getResolver(),currentProjectId:I.project_id,env:ce,onSelect:(p,a)=>{et(v.creds,d,v.creds.getActiveProfile()??"default",v.creds.getDefaultEnv(),{projectId:p,projectName:a}),D("ok","/config project",a,`id: ${p}`),ve(d.load()),c()},onCancel:c}),renderFolderPicker:c=>(0,b.jsx)(Gt,{resolver:v.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:ce,onSelect:(p,a)=>{et(v.creds,d,v.creds.getActiveProfile()??"default",v.creds.getDefaultEnv(),{folderId:p,folderName:a}),D("ok","/config folder",a,`id: ${p}`),ve(d.load()),c()},onCancel:c}),renderWindowSizePicker:c=>(0,b.jsx)(oo,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(p,a)=>{d.set("window_size",{width:p,height:a}),ve(d.load()),D("ok","/config set-window",`${p} \xD7 ${a}`),c()},onCancel:c})}),De&&(0,b.jsx)(g,{paddingX:1,marginTop:1,children:(0,b.jsx)(n,{color:De.color,children:De.text})})]}),Rn==="chat"&&(0,b.jsxs)(b.Fragment,{children:[(()=>{let c=Bo({isRunning:P.isRunning,bifurcationInfo:P.bifurcationInfo,steps:P.steps,cmInitCounts:P.cmInitCounts,replayInfo:P.replayInfo});return c?(0,b.jsx)(Ao,{label:c.label,hasBifurcation:c.hasBifurcation}):null})(),P.isRunning&&P.steps.length>0&&(0,b.jsx)(_o,{steps:P.steps,bifurcated:!!P.bifurcationInfo&&!P.bifurcationInfo.isSingleFlow,flows:P.bifurcationInfo?.flows,cmInitCounts:P.cmInitCounts,onStepCommit:X},`run-${U.current}`),se.runViewProps&&(0,b.jsx)(Zo,{...se.runViewProps,onCancel:()=>{se.runViewProps?.onCancel?.(),se.cancel()}}),nn&&(0,b.jsx)(Xi,{onClose:()=>po(!1),version:cn,environment:v.creds.getDefaultEnv(),sessionId:l.sessionId,runUrl:I.default_url??ln,mode:ge}),rn&&(0,b.jsx)(Ji,{cwd:process.cwd(),currentOrgId:String(Le?.org_id??""),onClose:()=>Cn(!1),onRun:c=>{if(P.isRunning||Z.isStreaming||se.running){setTimeout(()=>D("error","/testmd","Finish or cancel the current run first."),0);return}Cn(!1),!(ge==="generate"&&!Qe.requestSwitch("run"))&&(ge==="generate"&&setTimeout(()=>D("ok","/testmd",`Switched to Run mode to run ${c.relPath}`,void 0,r.orange),0),se.start(c.path).catch(p=>setTimeout(()=>D("error","/testmd",`Run failed: ${p.message}`),0)))},onExport:c=>{Cn(!1),mi(c.path,{language:I.code_export.language??"python",env:ce}).then(p=>setTimeout(()=>D("ok","/testmd",`Exported code \u2192 ${p.codeDir}`),0)).catch(p=>setTimeout(()=>D("error","/testmd",`Export failed: ${p.message}`),0))}}),nt&&!P.isRunning&&(()=>{let c=wo.find(p=>p.id===nt);return c?.children?(0,b.jsx)(Zr,{items:c.children,onRunSelected:()=>tn(null),onDismiss:()=>tn(null),onActiveViewChange:fo,renderLoginWizard:p=>{let a=_?.phase??"wizard";if(a==="project")return(0,b.jsx)(Ut,{resolver:v.getResolver(),currentProjectId:null,env:_.env,onSelect:(f,w)=>{v.creds.saveProfileConfig(_.profile,_.env,{project_id:f,project_name:w}),D("ok","/config project",w,`id: ${f}`),pe(L=>L?{...L,phase:"folder"}:null)},onCancel:async()=>{if(!_)return;let f=await vr(_.profile,_.env);f&&(et(v.creds,d,_.profile,_.env,{projectId:f.id,projectName:f.name}),D("ok","/config project",f.name,`id: ${f.id}`),pe(w=>w?{...w,phase:"folder"}:null))}});if(a==="folder"){let f=v.creds.loadProfileConfig(_.profile,_.env);return(0,b.jsx)(Gt,{resolver:v.getResolver(),projectId:f?.project_id??"",currentFolderId:null,env:_.env,onSelect:(w,L)=>{v.creds.saveProfileConfig(_.profile,_.env,{folder_id:w,folder_name:L}),D("ok","/config folder",L,`id: ${w}`),Je(_.profile,_.env),pe(null),p()},onCancel:async()=>{if(!_)return;let w=v.creds.loadProfileConfig(_.profile,_.env);if(!w?.project_id)return;let L=await br(_.env,w.project_id);L&&(et(v.creds,d,_.profile,_.env,{folderId:L.id,folderName:L.name}),D("ok","/config folder",L.name,`id: ${L.id}`),Je(_.profile,_.env),pe(null),p())}})}return(0,b.jsx)($n,{devMode:process.env.KANE_DEV_MODE==="1",profiles:v.creds.listProfiles(),onBasicLogin:async(f,w,L,N)=>{let{validateBasicAuth:G}=await import("./validate-basic-QUPVT2EV.js");await G(w,L,N),v.creds.saveBasicAuth(f,w,{username:L,access_key:N}),v.creds.setActiveProfile(f),v.creds.setDefaultEnv(w),Xe(v.creds,d,f,w),v.setTokenValid(!0),$e()},onOAuthLogin:async(f,w)=>{v.creds.setDefaultEnv(w),await v.login(f),Xe(v.creds,d,f,w),$e()},onComplete:(f,w)=>{ot(fr(w),He).then(()=>{pe({phase:"project",profile:f,env:w})}).catch(()=>{pe({phase:"project",profile:f,env:w})})},onCancel:()=>{pe(null),p()}})},renderProfilesView:p=>(0,b.jsx)(Vr,{creds:v.creds,onSwitch:(a,f)=>{let w=v.creds.getActiveProfile()??"(none)";v.creds.setActiveProfile(a),v.creds.setDefaultEnv(f),Xe(v.creds,d,a,f),Je(a,f),$e(),ot(mo(f),He).catch(()=>{}),D("ok","/profiles switch",`${w} \u2192 ${a} [${f}]`),p()},onCancel:p}),renderChromeProfilePicker:p=>(0,b.jsx)(Or,{currentPath:I.chrome_profile_path,onSelect:a=>{d.save({chrome_profile_path:a}),ve(d.load()),D("ok","/config chrome-profile",a),p()},onCancel:p}),renderProjectPicker:p=>(0,b.jsx)(Ut,{resolver:v.getResolver(),currentProjectId:I.project_id,env:ce,onSelect:(a,f)=>{et(v.creds,d,v.creds.getActiveProfile()??"default",v.creds.getDefaultEnv(),{projectId:a,projectName:f}),ve(d.load()),D("ok","/config project",f,`id: ${a}`),p()},onCancel:p}),renderFolderPicker:p=>(0,b.jsx)(Gt,{resolver:v.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:ce,onSelect:(a,f)=>{et(v.creds,d,v.creds.getActiveProfile()??"default",v.creds.getDefaultEnv(),{folderId:a,folderName:f}),ve(d.load()),D("ok","/config folder",f,`id: ${a}`),p()},onCancel:p}),renderWindowSizePicker:p=>(0,b.jsx)(oo,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(a,f)=>{d.set("window_size",{width:a,height:f}),ve(d.load()),D("ok","/config set-window",`${a} \xD7 ${f}`),p()},onCancel:p})},nt):null})(),nt&&De&&(0,b.jsx)(g,{paddingX:1,marginTop:1,children:(0,b.jsx)(n,{color:De.color,children:De.text})}),ge==="run"&&!nt&&!nn&&!rn&&!Ct&&P.askingUser&&(0,b.jsxs)(g,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,b.jsx)(g,{marginLeft:1,children:(0,b.jsx)(n,{color:r.orange,bold:!0,children:"Agent Question"})}),(0,b.jsx)(g,{borderStyle:"round",borderColor:r.orange,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,b.jsxs)(g,{children:[(0,b.jsx)(g,{width:3,children:(0,b.jsx)(n,{color:r.orange,bold:!0,children:"?"})}),(0,b.jsx)(g,{flexShrink:1,children:(0,b.jsx)(n,{wrap:"wrap",children:P.askingUser})})]})})]}),In&&(()=>{let c=In,p=c.reason==="switch"?c.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?",a=c.reason==="switch"?"Discard & switch":"Yes, end";return(0,b.jsx)(Us,{message:p,confirmLabel:a,onConfirm:async()=>{if(c.reason==="switch"){let w=c.to;on(null),Qe.confirmSwitch(w);return}ht();let f=c.pendingArgs;if(on(null),await Z.end(),Z.reset(),f.profile){let w=v.creds.getDefaultEnv(),L=v.creds.getActiveProfile()??"(none)";v.creds.setActiveProfile(f.profile),v.creds.setDefaultEnv(w),Xe(v.creds,d,f.profile,w),Je(f.profile,w),$e(),ot({kind:"switch",env:w},He).catch(()=>{}),D("ok","/profiles switch",`${L} \u2192 ${f.profile} [${w}]`)}else Br("/profiles switch")},onCancel:()=>on(null)})})(),ge==="run"&&!nt&&!nn&&!rn&&!Ct&&!In&&!se.running&&(0,b.jsx)(yt,{onSubmit:Br,onEscape:void 0,history:Js,commands:Gi,clearSeq:ia,placeholder:P.askingUser?"Type your answer...":P.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"}]}),ge==="generate"&&!nt&&!nn&&!rn&&!Ct&&!In&&(0,b.jsx)(Fs,{tcg:Z,gm:Qe,history:Qs,tuiConfig:I,browse:xt.isOpen?{target:xt.target,onClose:xt.close,excluded:xt.excluded,onToggleCase:xt.toggleCase,onToggleScenario:xt.toggleScenario,getStatus:Qe.bifurcation.getStatus,getResult:Qe.bifurcation.getResult}:null})]})]}),$&&q&&Ue&&(0,b.jsxs)(b.Fragment,{children:[(0,b.jsx)($r,{steps:Jt,status:Ue.status,testUrl:Ue.testUrl,error:Ue.error}),Ue.status==="success"&&(0,b.jsx)(Un,{recordedTestPath:It?.recordedTestPath,outputDir:It?.outputDir,shareableLink:Ue.testUrl,testCaseLink:Ue.testCaseLink,codeExportDir:Ue.codeExportDir,autoExit:!1})]}),Ct&&(0,b.jsx)(_i,{defaultName:Ct,onSubmit:la}),Zt&&(0,b.jsx)(Ei,{onSubmit:ca}),Pt&&Ue&&(0,b.jsx)($r,{steps:Jt,status:Ue.status,error:Ue.error}),$&&!q&&(0,b.jsx)(Pi,{profile:Vt,environment:ce,tokenValid:v.tokenValid,runCount:te,sessionId:l.sessionId,viewMode:Rn,breadcrumb:da,chatMode:ge,tcgRequestId:Z.requestId,tcgStreamStatus:Z.isStreaming?"streaming":Z.isReconnecting?"reconnecting":Z.isTerminal&&Z.state.status.toLowerCase()==="completed"?"completed":Z.isTerminal&&Z.state.status.toLowerCase()==="failed"?"failed":null})]})}function bc({profiles:e,onSelect:t,onCancel:o,validating:i}){let[m,s]=(0,S.useState)(0);return ye((u,x)=>{if(!i){if(x.escape){o();return}if(x.upArrow&&m>0&&s(h=>h-1),x.downArrow&&m<e.length-1&&s(h=>h+1),x.return){let h=e[m];t(h.profile,h.env)}}}),(0,b.jsxs)(g,{flexDirection:"column",paddingX:1,children:[(0,b.jsx)(n,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,b.jsx)(g,{marginTop:1,flexDirection:"column",children:e.map((u,x)=>(0,b.jsxs)(n,{children:[x===m?"\u276F ":" ",(0,b.jsx)(n,{color:x===m?"#ff9500":"white",bold:x===m,children:u.profile}),(0,b.jsxs)(n,{color:"gray",children:[" [",u.env,"]"]})]},`${u.profile}-${u.env}`))}),i&&(0,b.jsx)(g,{marginTop:1,children:(0,b.jsx)(n,{color:"yellow",children:"Validating credentials..."})}),!i&&(0,b.jsx)(g,{marginTop:1,children:(0,b.jsx)(n,{color:"gray",children:"Esc = new login"})})]})}export{$i as a,Xs as b,op as c};
|
package/dist/chunk-RLSBAT6P.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{b as l}from"./chunk-KPF3BPJ5.js";import{a as f}from"./chunk-PF7PBYCJ.js";import{a as m}from"./chunk-S7JV4A3U.js";import{a as p}from"./chunk-RZ4F3BHX.js";import{a as c,c as s,h as a,u}from"./chunk-3QWAABMG.js";var v="/public/skills/kane-cli";function C(){try{let n=new f().getDefaultEnv();if(n in u)return n}catch{}return"prod"}function k(){return`${m(C()).controllerBaseUrl}${v}`}import{readFileSync as S,writeFileSync as E,mkdirSync as g}from"fs";import{join as d}from"path";var h=d(s,"skill-check.json"),y=3600*1e3;function V(){try{let n=JSON.parse(S(h,"utf-8"));if(Date.now()-n.checkedAt<y)return n}catch{}return null}function A(n){try{g(s,{recursive:!0}),E(h,JSON.stringify({map:n,checkedAt:Date.now()}))}catch{}}function I(){for(let{dir:n}of a)try{let t=S(d(n,"VERSION"),"utf-8").trim();if(t)return t}catch{}return null}function M(n,t){let i=Object.keys(n.versions??{});if(i.length===0)return null;let o=i.slice().sort((r,e)=>l(r,e));for(let r of o){let e=n.versions[r]?.kaneCliMinVersion;if(!e||l(t,e)<=0)return r}return null}async function U(){try{let n=V()?.map;if(!n){let o=new AbortController,r=setTimeout(()=>o.abort(),5e3),e=await p(k(),{headers:{Accept:"application/json"},signal:o.signal});if(clearTimeout(r),!e.ok)return null;n=await e.json(),A(n)}let t=M(n,c);if(!t)return null;let i=I();return i===null?{current:null,latestCompatible:t}:l(i,t)>0?{current:i,latestCompatible:t}:null}catch{return null}}export{k as a,M as b,U as c};
|
package/dist/chunk-WFSTRBQF.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a as c}from"./chunk-S7JV4A3U.js";import{a as n}from"./chunk-RZ4F3BHX.js";import{s,t as a}from"./chunk-3QWAABMG.js";import{createHash as h,randomBytes as g}from"crypto";var l=class{authBaseUrl;consentUrl;constructor(t="prod"){let e=c(t);this.authBaseUrl=e.authBaseUrl,this.consentUrl=e.consentUrl}static generatePkce(){let t=g(96).toString("base64url").slice(0,128),e=h("sha256").update(t).digest("base64url");return[t,e]}buildAuthorizationUrl(t,e,r,o){let i=new URLSearchParams({response_type:"code",client_id:t,redirect_uri:o,scope:a,code_challenge:e,code_challenge_method:"S256",state:r});return`${this.consentUrl}/oauth2?${i.toString()}`}async registerClient(t){let e=await n(`${this.authBaseUrl}/oauth2/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:s,redirect_uris:[t],grant_types:["authorization_code"],response_types:["code"],client_type:"public",application_type:"native"})});if(!e.ok)throw new Error(`DCR failed: ${e.status} ${await e.text()}`);return e.json()}async exchangeCode(t,e,r,o){let i=await n(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:t,redirect_uri:o,client_id:e,code_verifier:r})});if(!i.ok)throw new Error(`Token exchange failed: ${i.status}`);return i.json()}async refreshToken(t,e){let r=await n(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:t,client_id:e})});if(!r.ok)throw new Error(`Token refresh failed: ${r.status}`);return r.json()}async revokeToken(t,e,r="access_token"){await n(`${this.authBaseUrl}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,token_type_hint:r,client_id:e})})}async validateToken(t){let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);try{let o=await n(`${this.authBaseUrl}/api/user`,{headers:{Authorization:`Bearer ${t}`,Accept:"application/json","Content-Type":"application/json"},signal:e.signal});return clearTimeout(r),o.ok}catch{return clearTimeout(r),!1}}};export{l as a};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-LOSNFBZV.js";import"./chunk-PF7PBYCJ.js";import"./chunk-WFSTRBQF.js";import"./chunk-S7JV4A3U.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3QWAABMG.js";import"./chunk-UR6MHSHU.js";export{a as LoginFlow};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as a}from"./chunk-LY5LHKGG.js";import"./chunk-QXVI3LI4.js";import"./chunk-3MSXQU2C.js";import"./chunk-OISHNB7D.js";import"./chunk-DQASLGFG.js";import"./chunk-C5UNZ6ZY.js";import"./chunk-EEF6OT52.js";import"./chunk-AKKATURY.js";import"./chunk-34YRU7WM.js";import"./chunk-RCL22HDJ.js";import"./chunk-MDBXYXSC.js";import"./chunk-R7T6Z6QW.js";import"./chunk-S3DAAAE5.js";import"./chunk-HN7DVSVI.js";import"./chunk-AH4AXJML.js";import"./chunk-DGUXTSHM.js";import"./chunk-BM25JQ3Z.js";import"./chunk-L5LI2JF4.js";import"./chunk-H2P7UJAU.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-FFTIDI5K.js";import"./chunk-K4PLPKPF.js";import"./chunk-VL57GII7.js";import"./chunk-PQIPYWTP.js";import"./chunk-TQGNNJX5.js";import"./chunk-RD6G3CMN.js";import"./chunk-4ZHU4DLD.js";import"./chunk-4UKCDU64.js";import"./chunk-YCCUBQY4.js";import"./chunk-CZBHDBID.js";import"./chunk-LOIRZFV3.js";import"./chunk-VBZIIF5N.js";import"./chunk-LPUQ4HWQ.js";import"./chunk-NLCCBXXV.js";import"./chunk-VE3SUJMA.js";import"./chunk-Y6IUJZMV.js";import"./chunk-LOSNFBZV.js";import"./chunk-PF7PBYCJ.js";import"./chunk-WFSTRBQF.js";import"./chunk-S7JV4A3U.js";import"./chunk-RZ4F3BHX.js";import"./chunk-E47GFYXA.js";import"./chunk-7CBWZLRS.js";import"./chunk-UHGECBEN.js";import{a as o}from"./chunk-C6S4IEBC.js";import"./chunk-ELZIC2EH.js";import"./chunk-YB67GRWE.js";import"./chunk-GNJBT6SS.js";import"./chunk-3QWAABMG.js";import{a as t}from"./chunk-HCBYKLMW.js";import{c as n}from"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var e=r(t(),1);async function p(i){let c=i.scenarioLimit!==void 0||i.perScenarioLimit!==void 0?{scenarioLimit:i.scenarioLimit,perScenarioLimit:i.perScenarioLimit}:void 0,{waitUntilExit:m}=n((0,e.jsx)(o,{children:(0,e.jsx)(a,{initialChatMode:"generate",initialObjective:i.objective,initialGenerateLimits:c})}),{exitOnCtrlC:!1});await m()}export{p as runGenerate};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k}from"./chunk-AKKATURY.js";import"./chunk-34YRU7WM.js";import"./chunk-RCL22HDJ.js";import"./chunk-MDBXYXSC.js";import"./chunk-AH4AXJML.js";import"./chunk-H2P7UJAU.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-CZBHDBID.js";import"./chunk-LOIRZFV3.js";import"./chunk-NLCCBXXV.js";import"./chunk-Y6IUJZMV.js";import"./chunk-PF7PBYCJ.js";import"./chunk-WFSTRBQF.js";import"./chunk-S7JV4A3U.js";import"./chunk-RZ4F3BHX.js";import"./chunk-GNJBT6SS.js";import"./chunk-3QWAABMG.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{i as ExportError,c as assertOrgMatchOrExit,j as exportTestmd,b as metaMatchesOrg,a as readMetaIfExists,d as resolveCurrentOrgId,h as runDeleteAction,k as runExportAction,e as runListAction,f as runListTui,g as runStatusAction};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
2
|
-
import{a}from"./chunk-Y6IUJZMV.js";import"./chunk-WFSTRBQF.js";import"./chunk-S7JV4A3U.js";import"./chunk-RZ4F3BHX.js";import"./chunk-3QWAABMG.js";import"./chunk-UR6MHSHU.js";export{a as refreshOAuthToken};
|