@testmuai/kane-cli 0.4.10 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (198) hide show
  1. package/dist/ChatSurface-I6PFL3OE.js +9 -0
  2. package/dist/{ChromeProfilePicker-EFEVOCWS.js → ChromeProfilePicker-YG7TKHM5.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-PPGJMKHQ.js → CliFeedbackPrompt-5RUIP4KA.js} +1 -1
  4. package/dist/CliUploadProgress-YQYPZNEV.js +2 -0
  5. package/dist/{ConfigView-Y7E4Q647.js → ConfigView-HZ7MFCAJ.js} +1 -1
  6. package/dist/EvidenceViewOffer-N4UED7VY.js +2 -0
  7. package/dist/FolderPicker-NAFYP7ES.js +2 -0
  8. package/dist/HelpView-BLWTCQ6T.js +2 -0
  9. package/dist/{InfoBox-BQ2QOIUP.js → InfoBox-7ZZGMYHY.js} +1 -1
  10. package/dist/{LinksBox-DX6BJAX5.js → LinksBox-63Q5YS5X.js} +1 -1
  11. package/dist/{ProfilesView-X35WWM4L.js → ProfilesView-AVYB43ES.js} +1 -1
  12. package/dist/{ProjectPicker-Y4A4UVHA.js → ProjectPicker-EINNALUG.js} +1 -1
  13. package/dist/{SaveSessionPrompt-IS6HZSF4.js → SaveSessionPrompt-C3LCI2KZ.js} +1 -1
  14. package/dist/ScrollbackTap-Q3IOKNMS.js +2 -0
  15. package/dist/SingleShotApp-PS42WWT7.js +2 -0
  16. package/dist/{SummaryBox-47MHU37V.js → SummaryBox-NRPQ2AMW.js} +1 -1
  17. package/dist/TestMdRunView-5FVCEQZI.js +2 -0
  18. package/dist/{WhoamiView-KVIQCGRC.js → WhoamiView-YLMIEJQN.js} +1 -1
  19. package/dist/archive-committer-3NI773TP.js +2 -0
  20. package/dist/bind-QYQ5IT4S.js +6 -0
  21. package/dist/bridge-QENVIWWC.js +2 -0
  22. package/dist/{changelog-S4ZLEQLC.js → changelog-4RSI7UIO.js} +1 -1
  23. package/dist/chat-committer-RTJCKQMM.js +2 -0
  24. package/dist/chat-controller-OTBYHB4Y.js +3 -0
  25. package/dist/chunk-22A2ECA2.js +2 -0
  26. package/dist/{chunk-OHT5RY5E.js → chunk-25YSMNUP.js} +1 -1
  27. package/dist/{chunk-LPUQ4HWQ.js → chunk-2WVKOZ6W.js} +1 -1
  28. package/dist/chunk-2YQ6TW77.js +82 -0
  29. package/dist/{chunk-FKAXPYV7.js → chunk-3SK5GXQM.js} +1 -1
  30. package/dist/chunk-427OQS2N.js +2 -0
  31. package/dist/chunk-5446YVGQ.js +4 -0
  32. package/dist/chunk-5ILXUQIX.js +2 -0
  33. package/dist/chunk-5Q46BEG7.js +2 -0
  34. package/dist/chunk-5U3GOEGG.js +7 -0
  35. package/dist/chunk-5Y2G4NC7.js +2 -0
  36. package/dist/chunk-6BQD2BXI.js +3 -0
  37. package/dist/chunk-6PS65QFF.js +2 -0
  38. package/dist/chunk-ABSEKYIB.js +13 -0
  39. package/dist/chunk-AD46OCZ4.js +4 -0
  40. package/dist/chunk-AE6SS34N.js +4 -0
  41. package/dist/chunk-B2OAEEKI.js +14 -0
  42. package/dist/chunk-B2PZAB7J.js +4 -0
  43. package/dist/chunk-BC7UVJJB.js +2 -0
  44. package/dist/chunk-BV3EARZO.js +17 -0
  45. package/dist/{chunk-QSXYNJOW.js → chunk-C5NNT7Y3.js} +1 -1
  46. package/dist/{chunk-GSKA5DKJ.js → chunk-CBIW5DTU.js} +1 -1
  47. package/dist/chunk-CE664P73.js +2 -0
  48. package/dist/{chunk-IGZPQQFP.js → chunk-D5SHVZGD.js} +1 -1
  49. package/dist/chunk-D5T4ARTB.js +2 -0
  50. package/dist/chunk-DFS4RMVP.js +2 -0
  51. package/dist/chunk-DM2GL24Z.js +3 -0
  52. package/dist/chunk-FAXRERS6.js +6 -0
  53. package/dist/chunk-FPGOV4AQ.js +17 -0
  54. package/dist/chunk-FXPPQL4D.js +6 -0
  55. package/dist/chunk-FYOCF7DY.js +2 -0
  56. package/dist/chunk-GIGD4M7V.js +5 -0
  57. package/dist/chunk-GIRXJOJI.js +2 -0
  58. package/dist/{chunk-AKLIPQVR.js → chunk-GNGGFK7C.js} +1 -1
  59. package/dist/{chunk-RQZCGHG7.js → chunk-H7ZQ4AWL.js} +1 -1
  60. package/dist/{chunk-HUAOH2JK.js → chunk-HYW5VDEC.js} +1 -1
  61. package/dist/chunk-I2S6KNZW.js +2 -0
  62. package/dist/chunk-IACKIGPX.js +2 -0
  63. package/dist/chunk-IF2R3AR4.js +6 -0
  64. package/dist/{chunk-KKIFXAJY.js → chunk-INP7FG6V.js} +1 -1
  65. package/dist/{chunk-G3PWEKD7.js → chunk-IPCC3P6T.js} +2 -2
  66. package/dist/chunk-JFAFKHDX.js +4 -0
  67. package/dist/chunk-KHDUQ33H.js +2 -0
  68. package/dist/chunk-KHU7C6EE.js +2 -0
  69. package/dist/chunk-LBBPMEO2.js +2 -0
  70. package/dist/chunk-LKXVYWKG.js +356 -0
  71. package/dist/chunk-LMJTY32X.js +6 -0
  72. package/dist/chunk-M5JQXOCE.js +12 -0
  73. package/dist/chunk-ME3GYVBV.js +2 -0
  74. package/dist/{chunk-QC73LMAN.js → chunk-MESFNOY3.js} +1 -1
  75. package/dist/chunk-MKD3KZPM.js +2 -0
  76. package/dist/{chunk-NUGGT2XH.js → chunk-MQ7DJ2XC.js} +1 -1
  77. package/dist/{chunk-IT66S24L.js → chunk-N2BUF6YU.js} +1 -1
  78. package/dist/chunk-NFOBDHZK.js +147 -0
  79. package/dist/chunk-NNZV5RCE.js +2 -0
  80. package/dist/{chunk-GF44B552.js → chunk-NOOHQBUD.js} +1 -1
  81. package/dist/chunk-NTJDMMLC.js +61 -0
  82. package/dist/chunk-NWZTYAJB.js +9 -0
  83. package/dist/{chunk-RB2YKN77.js → chunk-OXARXMMD.js} +1 -1
  84. package/dist/chunk-PGEMGGBS.js +26 -0
  85. package/dist/{chunk-JKLKZCJS.js → chunk-QI6WZ56Y.js} +1 -1
  86. package/dist/{chunk-6ATKQYAL.js → chunk-QK6KZMYG.js} +1 -1
  87. package/dist/chunk-QPZRHAYK.js +4 -0
  88. package/dist/chunk-RFHMDQXZ.js +3 -0
  89. package/dist/chunk-RGEAEAZB.js +20 -0
  90. package/dist/chunk-RKWJG3WW.js +19 -0
  91. package/dist/chunk-RTWWPEQ7.js +8 -0
  92. package/dist/chunk-TZVURR5H.js +5 -0
  93. package/dist/chunk-VJUIW2ES.js +4 -0
  94. package/dist/chunk-VK7RF53I.js +2 -0
  95. package/dist/{chunk-VLWWDXBN.js → chunk-VXS23M67.js} +1 -1
  96. package/dist/{chunk-KJLOYIWT.js → chunk-WFAMF4SG.js} +1 -1
  97. package/dist/chunk-WFSQZG26.js +11 -0
  98. package/dist/chunk-WG3BBXJF.js +7 -0
  99. package/dist/chunk-WUMNIGPR.js +2 -0
  100. package/dist/chunk-WUNN5OCH.js +4 -0
  101. package/dist/chunk-XQDDUVD3.js +4 -0
  102. package/dist/chunk-Y2S3PW7N.js +102 -0
  103. package/dist/chunk-YANCBRER.js +3 -0
  104. package/dist/{chunk-YAOWO2GE.js → chunk-YWWKKKXY.js} +1 -1
  105. package/dist/chunk-Z56AWGVY.js +2 -0
  106. package/dist/chunk-ZKYYZ5NO.js +6 -0
  107. package/dist/{chunk-EQC7WE2O.js → chunk-ZO7ROBPR.js} +1 -1
  108. package/dist/chunk-ZXDA4K6G.js +2 -0
  109. package/dist/chunk-ZZOSDBYN.js +23 -0
  110. package/dist/cover-cmd-Y5L4O4Q3.js +2 -0
  111. package/dist/credentials-WUEKK7FI.js +2 -0
  112. package/dist/descriptor-SL5A7RQE.js +2 -0
  113. package/dist/distill-cmd-EYCCCFL3.js +2 -0
  114. package/dist/evidence-4BSNTVND.js +2 -0
  115. package/dist/evolve-cmd-VUWLH3CO.js +2 -0
  116. package/dist/exit-manager-VCSIUYBR.js +2 -0
  117. package/dist/explain-JIXUWEFJ.js +2 -0
  118. package/dist/explain-cmd-55WRDIMW.js +9 -0
  119. package/dist/explain-cmd-RIDEMDMY.js +3 -0
  120. package/dist/extract-bind-T7SUAID6.js +5 -0
  121. package/dist/extract-cmd-LZW7CRT3.js +6 -0
  122. package/dist/gaps-cmd-P2DRK6FW.js +2 -0
  123. package/dist/gate-FACZRGOC.js +2 -0
  124. package/dist/{generate-headless-ODYT3HT7.js → generate-headless-C55T3GGR.js} +2 -2
  125. package/dist/headless-io-GXHKDPHB.js +2 -0
  126. package/dist/index.js +76 -39
  127. package/dist/ingest-4CGBXC2L.js +2 -0
  128. package/dist/ingest-cmd-FJ3SLTT4.js +3 -0
  129. package/dist/interactive-bind-P6AGLUMM.js +7 -0
  130. package/dist/interrupt-guard-UREUWNRL.js +2 -0
  131. package/dist/lifecycle-cmd-56OZT4LY.js +2 -0
  132. package/dist/list-cmd-JB2ABACD.js +3 -0
  133. package/dist/list-commands-M34USUNO.js +2 -0
  134. package/dist/logical-ids-QRRUXV5E.js +2 -0
  135. package/dist/login-flow-GMLHK6JT.js +2 -0
  136. package/dist/maintenance-cmd-E3HEEVQW.js +2 -0
  137. package/dist/open-MQLQKFAW.js +2 -0
  138. package/dist/persist-recorded-session-L2KAY37H.js +3 -0
  139. package/dist/pipeline-FJXQIFW7.js +2 -0
  140. package/dist/readmodel-MPTENJ2R.js +2 -0
  141. package/dist/reconcile-cmd-KTCH4KZQ.js +8 -0
  142. package/dist/{recording-banner-3XTXU2VL.js → recording-banner-2KIVZAXY.js} +1 -1
  143. package/dist/require-project-folder-NOGEHZTS.js +2 -0
  144. package/dist/revert-3TKLOYQA.js +2 -0
  145. package/dist/review-cmd-SL52N4TM.js +4 -0
  146. package/dist/run-P4CHG2VH.js +2 -0
  147. package/dist/run-test-md-ICLG4OPX.js +17 -0
  148. package/dist/{scrollback-6GINSTL2.js → scrollback-JLPJR25X.js} +1 -1
  149. package/dist/sessions-cmd-STHKGDX4.js +23 -0
  150. package/dist/signals-cmd-LXHZQLXZ.js +2 -0
  151. package/dist/{skill-installer-GYYMVNE4.js → skill-installer-KGPXQRCE.js} +1 -1
  152. package/dist/spawner-DDD3ICOX.js +2 -0
  153. package/dist/tcg-generate-KBXZIIHB.js +2 -0
  154. package/dist/testmd-actions-45BY3YFO.js +2 -0
  155. package/dist/{tms-client-NNYXLXZK.js → tms-client-VD3B3SMU.js} +1 -1
  156. package/dist/token-refresh-OCFALJ7U.js +2 -0
  157. package/dist/turn-preflight-I5SM4UIZ.js +2 -0
  158. package/dist/ui-JEJGTURD.js +4 -0
  159. package/dist/{validate-basic-4YMRWYLS.js → validate-basic-QCD4VN37.js} +1 -1
  160. package/dist/{version-check-GU2LS6NM.js → version-check-55YZMQUI.js} +1 -1
  161. package/dist/view-cmd-QE2FS3GB.js +436 -0
  162. package/package.json +8 -6
  163. package/dist/CliUploadProgress-3GGOTLPQ.js +0 -2
  164. package/dist/FolderPicker-LI5JKG2S.js +0 -2
  165. package/dist/HelpView-KHQYGSD2.js +0 -2
  166. package/dist/SingleShotApp-RO25ZX2E.js +0 -2
  167. package/dist/TestMdRunView-OXVWHOV3.js +0 -2
  168. package/dist/chunk-53O3GMZR.js +0 -8
  169. package/dist/chunk-7GOX44H7.js +0 -103
  170. package/dist/chunk-AH4AXJML.js +0 -2
  171. package/dist/chunk-AT45XB6X.js +0 -60
  172. package/dist/chunk-BH6EP2LD.js +0 -85
  173. package/dist/chunk-BQACGLXW.js +0 -5
  174. package/dist/chunk-C6S4IEBC.js +0 -2
  175. package/dist/chunk-DMG5QABA.js +0 -2
  176. package/dist/chunk-G2GQ67DP.js +0 -11
  177. package/dist/chunk-HPZREZKG.js +0 -2
  178. package/dist/chunk-IS62CNJW.js +0 -20
  179. package/dist/chunk-LOIRZFV3.js +0 -10
  180. package/dist/chunk-LRKWPAGK.js +0 -2
  181. package/dist/chunk-MDBXYXSC.js +0 -2
  182. package/dist/chunk-NAAPNSZD.js +0 -17
  183. package/dist/chunk-PUU7A26K.js +0 -11
  184. package/dist/chunk-SQOIKS77.js +0 -6
  185. package/dist/chunk-UAYCLUUZ.js +0 -27
  186. package/dist/chunk-UBN6J3ZA.js +0 -2
  187. package/dist/chunk-XCOU6AYD.js +0 -6
  188. package/dist/chunk-XCYCX4TU.js +0 -17
  189. package/dist/exit-manager-V2NW7A7U.js +0 -2
  190. package/dist/list-commands-PNYMVI6X.js +0 -2
  191. package/dist/login-flow-FIYH6K4A.js +0 -2
  192. package/dist/persist-recorded-session-OJPXI4HP.js +0 -3
  193. package/dist/pipeline-34CX3UBO.js +0 -2
  194. package/dist/require-project-folder-CFX6U6BZ.js +0 -2
  195. package/dist/run-test-md-YWKVMQDJ.js +0 -14
  196. package/dist/tcg-generate-KLY7QZY2.js +0 -2
  197. package/dist/testmd-actions-OUY5BOAV.js +0 -2
  198. package/dist/token-refresh-QCHKMPCM.js +0 -2
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as g}from"./chunk-KKIFXAJY.js";import{spawn as N,execSync as O}from"child_process";import{existsSync as v}from"fs";import{resolve as t,dirname as T}from"path";import{fileURLToPath as b}from"url";import{createInterface as A}from"readline";async function*E(s){let e=A({input:s,crlfDelay:1/0});for await(let c of e){let r=c.trim();if(r)try{let d=JSON.parse(r);d&&typeof d.type=="string"&&(yield d)}catch{}}}function S(s){return s==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_AGENT_SKIP_CP_FINAL:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_AGENT_SKIP_CP_FINAL","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function R(s){return s==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var a=T(b(import.meta.url));function C(){for(let s of["python3","python"])try{return O(`${s} --version`,{stdio:"ignore"}),s}catch{}return null}function h(){let e=process.platform==="win32"?"v16-runner.exe":"v16-runner",c={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},r=`${process.platform}-${process.arch}`,d=c[r];if(d)for(let n of d){let l=[t(a,"..","node_modules",n,"bin",e),t(a,"..","..","node_modules",n,"bin",e),t(a,"..","..","..","node_modules",n,"bin",e),t(a,"..","..","..","..","node_modules",n,"bin",e)];for(let o of l)if(v(o))return{cmd:o,args:[]}}let m=[t(a,"bin",e),t(a,"..","bin",e),t(a,"..","..","..","..","v16-runner","dist",e),t(a,"..","..","..","v16-runner","dist",e),t(process.cwd(),"v16-runner","dist",e),t(process.cwd(),"..","v16-runner","dist",e)];for(let n of m)if(v(n))return{cmd:n,args:[]};let p=[t(a,"..","..","v16-runner"),t(a,"..","..","..","..","v16-runner"),t(a,"..","..","..","v16-runner"),t(process.cwd(),"v16-runner"),t(process.cwd(),"..","v16-runner")];for(let n of p)if(v(t(n,"main.py"))){for(let o of[t(n,".venv","bin","python"),t(n,"..","browser-agent",".venv","bin","python")])if(v(o))return{cmd:o,args:["main.py"],cwd:n};let l=C();if(l)return{cmd:l,args:["main.py"],cwd:n}}return null}function W(s,e){let c=h();if(!c)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");let r={...process.env};e?.environment&&(r.TESTMUAI_ENV=e.environment),r.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(r.PYTHONIOENCODING="utf-8");let d=g(e?.environment);r.V16_SERVER_API_HOST=d.v16ServerHost,r.ATMS_URL=d.tmsBaseUrl.replace(/\/api\/?$/,""),s.username&&s.access_key&&(r.LT_USERNAME=s.username,r.LT_ACCESS_KEY=s.access_key),s.session_id&&(r.TESTMUAI_SESSION_ID=s.session_id);let m=S(e?.mode??"testing");Object.assign(r,m.set);for(let i of m.unset)delete r[i];let p=R(e?.assertionMode??"visual");Object.assign(r,p.set);for(let i of p.unset)delete r[i];let n=N(c.cmd,c.args,{stdio:["pipe","pipe","pipe"],env:r,cwd:c.cwd});n.stdin.on("error",()=>{}),n.stdin.write(JSON.stringify(s)+`
3
- `);let l=1e5,o="";n.stderr.on("data",i=>{o+=i.toString(),o.length>l&&(o=o.slice(-l))}),n.on("error",i=>{e?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:i.message})});let _=null,f=null,x=new Promise(i=>{n.on("close",(u,y)=>{_=u,f=y?String(y):null,e?.log?.("info","RUNNER_EXIT","Runner exited",{code:u,signal:f??"none"}),i({code:u,signal:f})})}),w=E(n.stdout);return{child:n,events:w,sendUserResponse(i){let u=JSON.stringify({type:"user_response",answer:i});try{n.stdin.write(u+`
4
- `)}catch{}},sendCancel(i){let u=JSON.stringify({type:"cancel",reason:i});try{n.stdin.write(u+`
5
- `)}catch{}},cancel(){n.kill("SIGTERM")},get stderr(){return o},get exitCode(){return _},get exitSignal(){return f},exited:x}}export{h as a,W as b};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as l}from"./chunk-HCBYKLMW.js";import{a as i,d as a}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var e=c(b(),1);var t=c(l(),1),d=(0,e.createContext)(null);function f({children:o}){let[n,p]=(0,e.useState)([]),s=(0,e.useRef)(0),u=(0,e.useMemo)(()=>({append:r=>p(S=>[...S,{id:`sb-${++s.current}`,content:r}])}),[]);return(0,t.jsxs)(d.Provider,{value:u,children:[n.length>0&&(0,t.jsx)(a,{items:n,children:r=>(0,t.jsx)(i,{children:r.content},r.id)}),o]})}function v(){let o=(0,e.useContext)(d);if(!o)throw new Error("useScrollback must be used within a ScrollbackProvider. Wrap this Ink render() root in <ScrollbackProvider>. Never render <Static> directly \u2014 push via append().");return o}export{f as a,v as b};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{x as a}from"./chunk-LRKWPAGK.js";import{a as c}from"./chunk-HCBYKLMW.js";import{b as u}from"./chunk-C44QQJR4.js";import{a as l}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var s=n(l(),1);var o=n(l(),1);function f(r,e){let t=(0,o.useRef)(r);t.current=r,(0,o.useEffect)(()=>{if(e===null)return;let i=setInterval(()=>t.current(),e);return()=>clearInterval(i)},[e])}var p=n(c(),1),m=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function I({active:r=!0}){let[e,t]=(0,s.useState)(0);return f(()=>{t(i=>(i+1)%m.length)},r?80:null),(0,p.jsx)(u,{color:a.orange,children:r?m[e]:"\u25CF"})}export{f as a,I as b};
@@ -1,11 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $e}from"./chunk-53O3GMZR.js";import{a as Fe}from"./chunk-FPFOW6BS.js";import{a as ke}from"./chunk-YCCUBQY4.js";import{a as Ke}from"./chunk-VE3SUJMA.js";import{a as Ue}from"./chunk-IGZPQQFP.js";import{a as Oe}from"./chunk-KKIFXAJY.js";import{a as de}from"./chunk-IT66S24L.js";import{c as Re,x as u}from"./chunk-LRKWPAGK.js";import{a as Z}from"./chunk-HCBYKLMW.js";import{a as x,b as f,h as Le,i as be,k as De}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as O}from"./chunk-UR6MHSHU.js";var Ne=O(xe(),1);import{readFileSync as et,writeFileSync as tt,mkdirSync as nt}from"fs";import{dirname as rt,join as We}from"path";var ot=We(Re,"command-history.json"),yt=We(Re,"generate-history.json"),it=200,_e=class{entries;filePath;max;constructor(t=ot,e=it){this.filePath=t,this.max=e,this.entries=this._load()}push(t){this.entries.length>0&&this.entries[this.entries.length-1]===t||(this.entries.push(t),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(t){let e=t.toLowerCase(),i=[];for(let l=this.entries.length-1;l>=0;l--)this.entries[l].toLowerCase().includes(e)&&i.push(this.entries[l]);return i}_load(){try{let t=et(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){try{nt(rt(this.filePath),{recursive:!0}),tt(this.filePath,JSON.stringify(this.entries)+`
3
- `)}catch{}}};function At(r){let t=(0,Ne.useRef)(null);return t.current||(t.current=new _e(r)),t.current}var L=O(xe(),1);var Ie=O(xe(),1);var X=O(Z(),1);function He({history:r,onSelect:t,onClose:e}){let[i,l]=(0,Ie.useState)(""),[a,g]=(0,Ie.useState)(0),v=i?r.search(i).slice(0,8):[];return be((T,d)=>{if(d.escape){e();return}if(d.return){v.length>0&&v[a]?t(v[a]):e();return}if(d.upArrow){g(w=>Math.max(0,w-1));return}if(d.downArrow){g(w=>Math.min(v.length-1,w+1));return}if(d.backspace||d.delete){l(w=>w.slice(0,-1)),g(0);return}T&&!d.ctrl&&!d.meta&&(l(w=>w+T),g(0))}),(0,X.jsxs)(x,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,X.jsx)(f,{color:u.muted,bold:!0,children:"reverse search"}),(0,X.jsxs)(x,{gap:1,children:[(0,X.jsx)(f,{color:u.dim,children:"search:"}),(0,X.jsx)(f,{children:i}),(0,X.jsx)(f,{color:u.orange,children:"\u2588"})]}),v.length>0&&(0,X.jsx)(f,{children:" "}),v.map((T,d)=>(0,X.jsx)(x,{marginLeft:2,children:(0,X.jsxs)(f,{color:d===a?u.orange:u.dim,bold:d===a,children:[d===a?"\u25B8 ":" ",T]})},`${d}-${T}`))]})}var ce=O(Z(),1);function Ge({commands:r,selectedIndex:t}){return r.length===0?null:(0,ce.jsx)(x,{flexDirection:"column",marginBottom:0,children:r.map((e,i)=>{let l=i===t;return(0,ce.jsxs)(x,{children:[(0,ce.jsx)(f,{color:l?u.orange:u.dim,children:l?"\u276F ":" "}),(0,ce.jsxs)(f,{color:l?u.orange:void 0,bold:l,children:["/",e.name]}),e.args&&(0,ce.jsxs)(f,{color:u.dim,children:[" ",e.args]}),(0,ce.jsxs)(f,{color:u.dim,children:[" ",e.description]})]},e.name)})})}var Ye=O(xe(),1);var H=O(Z(),1),qe={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Ve(r){let t={scenario:0,case:0,file:0};for(let e of r)t[e.kind]++;return["scenario","case","file"].filter(e=>t[e]>0).map(e=>`${t[e]} ${qe[e]}`).join(" \xB7 ")}var Ee=7;function je({items:r,selectedIndex:t,accent:e=u.orange}){let i=r.length;if(i===0)return null;let l=Math.floor(Ee/2),a=i<=Ee?0:Math.max(0,Math.min(t-l,i-Ee)),g=Math.min(i,a+Ee),v=a,T=i-g;return(0,H.jsxs)(x,{flexDirection:"column",marginBottom:0,children:[v>0&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:` \u22EF ${v} above \u2014 ${Ve(r.slice(0,a))}`})}),r.slice(a,g).map((d,w)=>{let K=a+w,D=K===t,C=w===0||r[K-1].kind!==d.kind;return(0,H.jsxs)(Ye.default.Fragment,{children:[C&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:qe[d.kind]})}),(0,H.jsxs)(x,{children:[(0,H.jsx)(f,{color:D?e:u.dim,children:D?"\u276F ":" "}),(0,H.jsx)(f,{color:D?e:void 0,bold:D,children:d.label})]})]},`${d.kind}:${d.value}:${K}`)}),T>0&&(0,H.jsx)(x,{children:(0,H.jsx)(f,{color:u.dim,children:` \u22EF ${T} more \u2014 ${Ve(r.slice(g))}`})})]})}var ye=O(xe(),1);var st=27,lt=127,at=11;function ct(r){return r>=64&&r<=126}function ut(r,t){r===at&&t({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function ft(r,t){r===lt&&t({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function dt(r,t){let e=r.map(l=>String.fromCharCode(l)).join(""),i=/^\[1;([0-9]+)([A-D])$/.exec(e);if(i){let l=parseInt(i[1],10),a=i[2],g={raw:"\x1B"+e};if(l===2)g.shift=!0;else if(l===3)g.meta=!0;else if(l===5)g.ctrl=!0;else return;a==="A"?g.arrowUp=!0:a==="B"?g.arrowDown=!0:a==="C"?g.arrowRight=!0:a==="D"&&(g.arrowLeft=!0),t(g);return}if(e==="[H"||e==="[1~"||e==="[7~"){t({home:!0,raw:"\x1B"+e});return}if(e==="[F"||e==="[4~"||e==="[8~"){t({end:!0,raw:"\x1B"+e});return}if(e==="[3;5~"){t({delete:!0,ctrl:!0,raw:"\x1B"+e});return}if(e==="[3;3~"){t({delete:!0,meta:!0,raw:"\x1B"+e});return}}function mt(r,t){r===72?t({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&t({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function ht(){let r="IDLE",t=[];function e(){r="IDLE",t=[]}return{feed(i,l){for(let a of i)r==="IDLE"?a===st?(r="ESC",t=[]):ut(a,l):r==="ESC"?a===91?(r="CSI",t=[]):a===79?(r="SS3",t=[]):(ft(a,l),e()):r==="CSI"?(t.push(a),ct(a)&&(dt([91,...t],l),e())):r==="SS3"&&(mt(a,l),e())},flushIdle(i){r==="ESC"&&t.length===0&&i({raw:"\x1B"}),e()}}}function ze(r,t={}){let e=(0,ye.useRef)(r);e.current=r;let{stdin:i}=Le();(0,ye.useEffect)(()=>{if(t.isActive===!1||!i)return;let l=ht(),a=null,g=v=>{a&&(clearTimeout(a),a=null);let T=Buffer.isBuffer(v)?v:Buffer.from(v,"binary");l.feed(T,d=>e.current(d)),a=setTimeout(()=>{l.flushIdle(d=>e.current(d)),a=null},50)};return i.on("data",g),()=>{i.removeListener("data",g),a&&clearTimeout(a)}},[t.isActive,i])}var E=O(Z(),1);function gt(r,t){let e=t-1;for(;e>=0&&r[e]!=="@"&&r[e]!==" "&&r[e]!==`
4
- `;)e--;return e<0||r[e]!=="@"||e>0&&r[e-1]!==" "&&r[e-1]!==`
5
- `?null:{at:e,query:r.slice(e+1,t).join("")}}var Pe=10;function pt(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
6
- `).replace(/\r/g,`
7
- `).replace(/[\x00-\x08\x0b-\x1f\x7f]/g,"")}function xt(r,t){let e=[],i=0;for(;i<=r.length;){let l=i;for(;l<r.length&&r[l]!==`
8
- `;)l++;if(i===l)e.push({start:i,end:i});else{let a=i;for(;a<l;){let g=Math.min(a+t,l);e.push({start:a,end:g}),a=g}}if(l>=r.length)break;i=l+1}return e}function bt(r,t,e){if(r.length===0)return 0;if(t>=e.length)return r.length-1;if(e[t]===`
9
- `){for(let i=r.length-1;i>=0;i--)if(r[i].end===t)return i;return r.length-1}for(let i=0;i<r.length;i++){let l=r[i];if(l.start<=t&&t<l.end)return i}return r.length-1}function Xe(r,t,e,i){let l=xt(r,e);if(l.length===0)return null;let a=bt(l,t,r),g=a+i;if(g<0||g>=l.length)return null;let v=t-l[a].start,T=l[g],d=T.end-T.start;return T.start+Math.min(v,d)}function qt({onSubmit:r,onEscape:t,history:e,placeholder:i="Type an objective or /command...",commands:l,clearSeq:a,submitVerb:g,footerBindings:v,inert:T=!1,clearOnSubmit:d=!0,noHistory:w=!1,accent:K=u.orange,scenarios:D,mentionFiles:C}){let[s,R]=(0,L.useState)([]),[m,h]=(0,L.useState)(0),[W,G]=(0,L.useState)("none"),[ee,M]=(0,L.useState)(-1),V=(0,L.useRef)(""),[ve,ie]=(0,L.useState)(!0),{stdout:te}=De(),se=te?.columns??80,[U,Y]=(0,L.useState)(0),[ne,J]=(0,L.useState)(0),[Ae,Te]=(0,L.useState)([]),[me,he]=(0,L.useState)(null),P=(0,L.useRef)(!1);(0,L.useEffect)(()=>{if(a!==void 0){if(!P.current){P.current=!0;return}R([]),h(0),M(-1),V.current="",ie(!0),G("none"),Y(0)}},[a]);let p=s.join(""),A=(()=>{if(W!=="none"||s.length===0)return"";if(p.startsWith("/")&&l&&p.length>=2){let n=p.slice(1).toLowerCase(),o=l.find(S=>S.name.startsWith(n)&&S.name!==n);return o?`/${o.name}`.slice(p.length):""}if(p.startsWith("/")||w)return"";let c=e.getAll();for(let n=c.length-1;n>=0;n--)if(c[n].startsWith(p)&&c[n]!==p)return c[n].slice(p.length);return""})(),_=(()=>{if(!l||!p.startsWith("/"))return[];let c=p.length>=2?p.slice(1).toLowerCase():"";return c&&l.some(n=>n.name===c)?[]:l.filter(n=>!c||n.name.startsWith(c))})(),k=_.length>0&&p.startsWith("/"),q=!!C||!!(D&&D.length)?gt(s,m):null,Ce=q?q.query:null,re=(()=>{if(!q)return[];let c=q.query.toLowerCase(),n=[];(D??[]).forEach((o,S)=>{let y=`s${S+1}`;(!c||y.includes(c)||(o.title??"").toLowerCase().includes(c))&&n.push({kind:"scenario",value:y,label:`@${y} ${o.title??o.sid??""}`.trim()})}),(D??[]).forEach((o,S)=>{let I=S+1;(o.test_cases??[]).forEach((y,F)=>{let j=`s${I}.c${F+1}`;(!c||j.includes(c)||(y.title??"").toLowerCase().includes(c))&&n.push({kind:"case",value:j,label:`@${j} ${y.title??""}`.trim()})})});for(let o of Ae)n.push({kind:"file",value:o,label:o});return n})(),ge=q!==null&&q.at!==me&&!k&&W==="none"&&re.length>0;(0,L.useEffect)(()=>{if(!C||Ce===null){Te([]);return}let c=!1;return C(Ce).then(n=>{c||Te(n)}).catch(()=>{c||Te([])}),()=>{c=!0}},[Ce,C]),(0,L.useEffect)(()=>{ne>=re.length&&J(0)},[re.length]);let Me=c=>{if(!q)return;let n=c.kind==="file"&&/\s/.test(c.value)?`@"${c.value}"`:`@${c.value}`,o=[...s.slice(0,q.at),...n,...s.slice(m)];R(o),h(q.at+n.length),J(0),he(q.at),ie(!1)};if(be((c,n)=>{if(ve&&c&&ie(!1),n.return){if(ge&&re[ne]){Me(re[ne]);return}if(k&&_[U]){let o=`/${_[U].name}`;w||e.push(o),r(o),R([]),h(0),G("none"),M(-1),V.current="",ie(!0),Y(0);return}p.trim()&&(w||e.push(p.trim()),r(p.trim()),d&&(R([]),h(0),G("none"),M(-1),V.current="",ie(!0),Y(0)));return}if(n.escape){if(ge){he(q.at);return}W!=="none"?G("none"):s.length>0?(R([]),h(0),M(-1),V.current=""):t?.();return}if(n.tab&&!n.shift){if(ge&&re[ne]){Me(re[ne]);return}if(k&&_[U]){let o=`/${_[U].name}`;R([...o]),h(o.length),Y(0);return}if(A){let o=p+A;R([...o]),h(o.length);return}return}if(n.ctrl&&c==="r"){if(w)return;G("search");return}if(n.ctrl&&c==="a"){h(0);return}if(n.ctrl&&c==="e"){h(s.length);return}if(n.ctrl&&c==="w"){if(m===0)return;let o=m-1;for(;o>0&&s[o]===" ";)o--;for(;o>0&&s[o-1]!==" ";)o--;let S=[...s.slice(0,o),...s.slice(m)];R(S),h(o);return}if(n.ctrl&&c==="u"){R([]),h(0),M(-1),G("none");return}if(n.meta&&c==="b"){let o=m-1;for(;o>0&&s[o]===" ";)o--;for(;o>0&&s[o-1]!==" ";)o--;h(Math.max(0,o));return}if(n.meta&&c==="f"){let o=m;for(;o<s.length&&s[o]!==" ";)o++;for(;o<s.length&&s[o]===" ";)o++;h(o);return}if(n.leftArrow){if(n.ctrl||n.shift)return;h(o=>Math.max(0,o-1));return}if(n.rightArrow){if(n.ctrl||n.shift)return;if(m>=s.length&&A){let o=p+A;R([...o]),h(o.length)}else h(o=>Math.min(s.length,o+1));return}if(n.upArrow){if(n.shift)return;if(ge){J(o=>Math.max(0,o-1));return}if(k){Y(o=>Math.max(0,o-1));return}if(W==="none"){let o=Math.max(1,se-2),S=Xe(s,m,o,-1);if(S!==null){h(S);return}if(w)return;let I=e.getAll();if(I.length===0)return;if(ee===-1){V.current=p,M(I.length-1);let y=I[I.length-1];R([...y]),h(y.length)}else if(ee>0){let y=ee-1;M(y);let F=I[y];R([...F]),h(F.length)}}return}if(n.downArrow){if(n.shift)return;if(ge){J(o=>Math.min(re.length-1,o+1));return}if(k){Y(o=>Math.min(_.length-1,o+1));return}if(W==="none"){let o=Math.max(1,se-2),S=Xe(s,m,o,1);if(S!==null){h(S);return}if(w)return;let I=e.getAll();if(ee===-1)return;if(ee<I.length-1){let y=ee+1;M(y);let F=I[y];R([...F]),h(F.length)}else{M(-1);let y=V.current;R([...y]),h(y.length)}}return}if(n.backspace||n.delete){if(n.meta||n.ctrl)return;if(m>0){let o=[...s.slice(0,m-1),...s.slice(m)];R(o),h(m-1),M(-1),Y(0),he(null),J(0)}return}if(c&&!n.ctrl&&!n.meta){let o=pt(c);if(!o)return;let S=[...s.slice(0,m),...o,...s.slice(m)];R(S),h(m+o.length),M(-1),Y(0),he(null),J(0)}},{isActive:!T&&W!=="search"}),ze(c=>{if(c.home){h(0);return}if(c.end){h(s.length);return}if(c.killToEnd){R(s.slice(0,m));return}if(c.arrowLeft&&(c.ctrl||c.meta)){let n=m-1;for(;n>0&&s[n]===" ";)n--;for(;n>0&&s[n-1]!==" ";)n--;h(Math.max(0,n));return}if(c.arrowRight&&(c.ctrl||c.meta)){let n=m;for(;n<s.length&&s[n]!==" ";)n++;for(;n<s.length&&s[n]===" ";)n++;h(n);return}if(c.backspace&&c.meta){if(m===0)return;let n=m-1;for(;n>0&&s[n]===" ";)n--;for(;n>0&&s[n-1]!==" ";)n--;let o=[...s.slice(0,n),...s.slice(m)];R(o),h(n);return}if(c.delete&&(c.ctrl||c.meta)){let n=m;for(;n<s.length&&s[n]===" ";)n++;for(;n<s.length&&s[n]!==" ";)n++;R([...s.slice(0,m),...s.slice(n)]);return}},{isActive:!T&&W!=="search"}),T)return(0,E.jsxs)(x,{flexDirection:"column",children:[(0,E.jsx)(f,{color:u.muted,children:"\u2500".repeat(se)}),(0,E.jsxs)(x,{children:[(0,E.jsx)(f,{color:u.muted,children:"\u276F "}),(0,E.jsx)(f,{color:u.dim,children:i})]}),(0,E.jsx)(de,{bindings:v??[{keys:"ctrl+c",label:"cancel"},{keys:"/cancel",label:"stop turn"},{keys:"ctrl+t",label:"thinking"}],suppressEscBack:!0})]});let Qe=c=>{R([...c]),h(c.length),G("none")},Ze=()=>{G("none")},we=(()=>{if(ve&&s.length===0)return null;let c=m>=s.length,n=s.slice(0,m).join(""),o,S;c?(o=" ",S=""):s[m]===`
10
- `?(o=" ",S=s.slice(m).join("")):(o=s[m],S=s.slice(m+1).join(""));let I=n+o+S+A,y=n.length,F=y+1,j=F+S.length,Se=Math.max(1,se-2),B=[],oe=0;for(;oe<=I.length;){let N=I.indexOf(`
11
- `,oe);if(N===-1&&(N=I.length),oe===N)B.push({type:"content",start:oe,end:oe});else{let z=oe;for(;z<N;){let le=Math.min(z+Se,N);B.push({type:"content",start:z,end:le}),z=le}}if(N>=I.length)break;oe=N+1}let Q=Math.max(0,B.findIndex(N=>N.start<=y&&y<=N.end)),fe;if(B.length<=Pe)fe=B;else{let z=Pe-1-4;if(Q<4||Q>=B.length-z)fe=[...B.slice(0,4),{type:"ellipsis",hidden:B.length-4-z},...B.slice(B.length-z)];else{let le=Pe-2,Be=Math.floor(le/2),ae=Q-Be,pe=Q+(le-Be)-1;ae<1&&(pe+=1-ae,ae=1),pe>B.length-2&&(ae-=pe-(B.length-2),pe=B.length-2),ae=Math.max(1,ae),fe=[{type:"ellipsis",hidden:ae},...B.slice(ae,pe+1),{type:"ellipsis",hidden:B.length-pe-1}]}}return{full:I,b:y,c:F,a:j,rows:fe}})();return(0,E.jsxs)(x,{flexDirection:"column",children:[W==="search"&&(0,E.jsx)(He,{history:e,onSelect:Qe,onClose:Ze}),k&&(0,E.jsx)(Ge,{commands:_,selectedIndex:U}),ge&&(0,E.jsx)(je,{items:re,selectedIndex:ne,accent:K}),(0,E.jsx)(f,{color:u.muted,children:"\u2500".repeat(se)}),we===null?(0,E.jsxs)(x,{children:[(0,E.jsx)(f,{color:K,children:"\u276F "}),(0,E.jsx)(f,{inverse:!0,children:" "}),(0,E.jsx)(f,{color:u.dim,children:i})]}):(()=>{let c=we.rows.findIndex(n=>n.type==="content");return(0,E.jsx)(x,{flexDirection:"column",children:we.rows.map((n,o)=>{if(n.type==="ellipsis")return(0,E.jsx)(x,{children:(0,E.jsxs)(f,{color:u.dim,children:[" \u22EF ","(",n.hidden," more line",n.hidden===1?"":"s",")"]})},o);let{full:S,b:I,c:y,a:F}=we,j=n.start,ue=n.end,Se=o===c,B=Se?"\u276F ":" ",oe=Se?K:u.muted,Q=[(0,E.jsx)(f,{color:oe,children:B},"p")];j<Math.min(I,ue)&&Q.push((0,E.jsx)(f,{children:S.slice(j,Math.min(I,ue))},"b"));let fe=Math.max(I,j),N=Math.min(y,ue);fe<N&&Q.push((0,E.jsx)(f,{color:K,inverse:!0,children:S.slice(fe,N)},"c"));let z=Math.max(y,j),le=Math.min(F,ue);return z<le&&Q.push((0,E.jsx)(f,{children:S.slice(z,le)},"a")),ue>F&&Q.push((0,E.jsx)(f,{color:u.dim,children:S.slice(Math.max(F,j),ue)},"g")),(0,E.jsx)(x,{children:Q},o)})})})(),(0,E.jsx)(de,{bindings:v??[{keys:"\u2191\u2193",label:"history"},{keys:"\u21B5",label:g??"submit"},{keys:"tab",label:"complete"},{keys:"ctrl+r",label:"search"}],escBackLabel:"clear"})]})}var $=O(xe(),1);var b=O(Z(),1);function Tt(r){let t=[{id:"method",label:"Auth method",options:[{label:"Basic Auth",value:"basic"},{label:"OAuth (browser)",value:"oauth"}]}];return r&&t.push({id:"env",label:"Environment",options:[{label:"prod",value:"prod"},{label:"stage",value:"stage"}]}),t.push({id:"profile",label:"Profile"}),t.push({id:"credentials",label:"Credentials"}),t}function en({devMode:r,profiles:t,onBasicLogin:e,onOAuthLogin:i,onComplete:l,onCancel:a}){let g=Tt(r),[v,T]=(0,$.useState)(0),[d,w]=(0,$.useState)(0),[K,D]=(0,$.useState)({}),[C,s]=(0,$.useState)("select"),[R,m]=(0,$.useState)(""),[h,W]=(0,$.useState)("username"),[G,ee]=(0,$.useState)(""),[M,V]=(0,$.useState)(null),[ve,ie]=(0,$.useState)(null),te=g[v],se=K.method??"basic",U=K.env??"prod",Y=(0,$.useCallback)(()=>{let p=t.filter(A=>A.env===U).map(A=>({label:`${A.profile} [${A.env}]`,value:A.profile}));return p.push({label:"+ Create new",value:"__new__"}),p},[t,U]),ne=(0,$.useCallback)(()=>{v===0?a():(T(P=>P-1),w(0),s("select"),m(""),V(null))},[v,a]),J=(0,$.useCallback)(P=>{se==="basic"?(s("text-input"),W("username"),m("")):(s("waiting"),i(P,U).then(()=>{ie(`Logged in via OAuth as ${P} [${U}]`),s("done")}).catch(p=>{V(p.message),s("error")}))},[se,U,i]),Ae=(0,$.useCallback)(P=>{let p=P.trim();if(p){if(h==="profileName"){let A=p;D(_=>({..._,profile:A})),J(A);return}if(h==="username"){ee(p),m(""),W("accessKey"),s("text-input-masked");return}if(h==="accessKey"){let A=K.profile??"default";s("waiting"),(async()=>{try{await e(A,U,G,p),ie(`Logged in as ${A} [${U}] via basic auth`),s("done")}catch{V("Credentials not valid. Please use valid credentials."),ee(""),m(""),W("username"),s("text-input")}})()}}},[h,K.profile,U,e,G,J]),Te=(0,$.useCallback)(P=>{m(P),M&&V(null)},[M]);be((P,p)=>{if(C==="done"){let _=K.profile??"default";l(_,U);return}if(C==="error"){a();return}if(C==="waiting"){p.escape&&a();return}if(C==="text-input"||C==="text-input-masked")return;if(p.escape){ne();return}let A=te?.id==="profile"?Y():te?.options??[];if(p.upArrow){w(_=>Math.max(0,_-1));return}if(p.downArrow){w(_=>Math.min(A.length-1,_+1));return}if(p.return&&A[d]){let _=A[d];if(te.id==="profile"){if(_.value==="__new__"){s("text-input"),W("profileName"),m("");return}D(k=>({...k,profile:_.value})),T(k=>k+1),w(0),J(_.value);return}D(k=>({...k,[te.id]:_.value})),T(k=>k+1),w(0)}});let me="Login";if(C==="done")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.green,paddingX:2,paddingY:1,children:[(0,b.jsxs)(f,{color:u.green,bold:!0,children:["\u2713 ",ve]}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="error")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.red,paddingX:2,paddingY:1,children:[(0,b.jsx)(f,{color:u.red,bold:!0,children:"Login failed"}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.red,children:M})}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.dim,children:"press any key"})})]});if(C==="waiting")return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,b.jsxs)(f,{color:u.orange,bold:!0,children:[me," \u203A OAuth"]}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.secondary,children:"Opening browser for login..."})}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsx)(f,{color:u.orange,children:"Waiting for callback \u27F3"})}),(0,b.jsx)(de,{bindings:[],escBackLabel:"cancel"})]});if(C==="text-input"||C==="text-input-masked"){let P=h==="username"?"Username":h==="accessKey"?"Access Key":"Profile name",p=h==="username"||h==="accessKey"?`${me} \u203A Basic Auth`:`${me} \u203A New Profile`;return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[M&&(h==="username"||h==="accessKey")&&(0,b.jsx)(x,{marginBottom:1,children:(0,b.jsxs)(f,{color:u.red,children:["\u2717 ",M]})}),(0,b.jsx)(f,{color:u.orange,bold:!0,children:p}),h==="accessKey"&&(0,b.jsxs)(x,{marginTop:1,children:[(0,b.jsx)(f,{color:u.secondary,children:"Username: "}),(0,b.jsx)(f,{children:G})]}),(0,b.jsxs)(x,{marginTop:1,children:[(0,b.jsxs)(f,{color:u.secondary,children:[P,": "]}),(0,b.jsx)(ke,{value:R,onChange:Te,onSubmit:Ae,onCancel:ne,masked:C==="text-input-masked"})]}),(0,b.jsx)(de,{bindings:[{keys:"\u21B5",label:"confirm"}],escBackLabel:"back"})]})}let he=te?.id==="profile"?Y():te?.options??[];return(0,b.jsxs)(x,{flexDirection:"column",borderStyle:"round",borderColor:u.orange,paddingX:2,paddingY:1,children:[(0,b.jsx)(f,{color:u.orange,bold:!0,children:me}),(0,b.jsx)(x,{marginTop:1,children:(0,b.jsxs)(f,{color:u.secondary,children:[te?.label,":"]})}),(0,b.jsx)(x,{flexDirection:"column",marginTop:1,children:he.map((P,p)=>{let A=p===d,_=A?"\u276F ":" ",k=P.value==="__new__"?u.green:A?u.orange:void 0;return(0,b.jsxs)(f,{color:k,children:[_,P.label]},P.value)})}),(0,b.jsx)(de,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})}async function Je(r,t,e,i){let l=r.loadBasicAuth(t,e),a=r.loadCredentials(t,e);if(!l&&!a)return i("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:t,env:e}),{status:"needs_login",profile:t,env:e};let g=Oe(e),v=async()=>r.loadCredentials(t,e)?.access_token??null,T=new Fe(g.controllerBaseUrl,v,l,i);i("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:t,env:e,method:l?"basic":"oauth"});let d=await T.resolve(!0);if(d)return i("info","STARTUP_GATE_VALID","Credentials validated",{profile:t,env:e,username:d.username,org_id:d.org_id}),{status:"authenticated",result:{profile:t,env:e,credentials:a,basicAuth:l,tmsCreds:d,resolver:T}};if(!l&&a){let w=a.refresh_token,D=r.loadClient(t,e)?.client_id;if(w&&D){i("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:t,env:e});try{let s=await new Ue(e).refreshToken(w,D);if(s.access_token){r.saveCredentials(t,e,{...a,...s,expires_at:Date.now()/1e3+(s.expires_in??3600)});let m=await T.resolve(!0);if(m)return i("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:t,env:e,username:m.username}),{status:"authenticated",result:{profile:t,env:e,credentials:{...a,...s},basicAuth:null,tmsCreds:m,resolver:T}}}i("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:t,env:e})}catch(C){i("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:t,env:e,error:C instanceof Error?C.message:String(C)})}}else i("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:t,env:e})}return i("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:t,env:e}),{status:"needs_login",profile:t,env:e}}async function an(r,t,e=new $e){let i=r.listProfiles();if(t("info","STARTUP_GATE_START","Auth startup gate",{profile_count:i.length}),i.length===0)return t("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(i.length>1){let g=r.getActiveProfile(),v=r.getDefaultEnv();if(g&&i.some(d=>d.profile===g&&d.env===v)){t("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:g,activeEnv:v});let d=await Je(r,g,v,t);if(d.status==="authenticated")return d;t("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:g,activeEnv:v})}return t("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:i.map(T=>`${T.profile}/${T.env}`)}),{status:"needs_pick",profiles:i}}let{profile:l,env:a}=i[0];return r.setActiveProfile(l),r.setDefaultEnv(a),Ke(r,e,l,a),Je(r,l,a,t)}export{yt as a,At as b,qt as c,en as d,Je as e,an as f};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as K,c as V,d as z,e as ee,f as te}from"./chunk-G2GQ67DP.js";import{c as J}from"./chunk-NAAPNSZD.js";import{a as Q}from"./chunk-53O3GMZR.js";import{a as Z}from"./chunk-FPFOW6BS.js";import{b as H}from"./chunk-OHT5RY5E.js";import{b as W}from"./chunk-VLWWDXBN.js";import{g as E}from"./chunk-LOIRZFV3.js";import{a as O}from"./chunk-LPUQ4HWQ.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as q}from"./chunk-RB2YKN77.js";import{a as _}from"./chunk-KKIFXAJY.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-4YMRWYLS.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-FIYH6K4A.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};
@@ -1,20 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as L,b as et}from"./chunk-SQOIKS77.js";import{a as U,b as X}from"./chunk-AKLIPQVR.js";import{a as Z,b as tt}from"./chunk-MDBXYXSC.js";import{a as C,b as J,e as P,f as Q}from"./chunk-AH4AXJML.js";import{a as W}from"./chunk-53O3GMZR.js";import{a as z}from"./chunk-YAOWO2GE.js";import{a as N}from"./chunk-RB2YKN77.js";import{a as G}from"./chunk-KKIFXAJY.js";import{a as I}from"./chunk-RZ4F3BHX.js";import{x as h}from"./chunk-LRKWPAGK.js";import{a as $}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as K}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as R}from"./chunk-UR6MHSHU.js";var M=R(B(),1);import{existsSync as D,readFileSync as jt,rmSync as dt,unlinkSync as Bt}from"fs";import{resolve as Y}from"path";import{promises as rt,realpathSync as _t}from"fs";import{homedir as xt}from"os";import{join as H,parse as wt,relative as nt,resolve as ot}from"path";var it=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),v=class extends Error{constructor(i){super(`refusing to scan '${i}'. Run from your project root, or pass --root <dir>.`);this.cwd=i;this.name="HomeRefusedError"}};function st(t){try{return _t(ot(t))}catch{return ot(t)}}function yt(t){let r=st(t),i=st(xt()),n=wt(r).root;if(process.platform==="win32"){let o=e=>e.toLowerCase();return o(r)===o(i)||o(r)===o(n)}return r===i||r===n}async function A(t){if(yt(t.root))throw new v(t.root);let r=t.maxEntries??5e4,i=t.maxResults??5e3,n=new Set(t.ignore??[]),o=[],e=0,s=0,c=!1,d,l=[t.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await rt.readdir(a,{withFileTypes:!0})}catch{continue}s++;for(let E of m){if(e++,e>r){c=!0,d="max_entries";break}let x=E.name,T=H(a,x);if(E.isDirectory()){if(it.has(x)||x.startsWith(".")||x.startsWith("output-")||n.has(x))continue;l.push(T)}else if(E.isFile()&&x.endsWith("_test.md")&&(o.push({path:T,relPath:nt(t.root,T),source:"cwd"}),o.length>=i)){c=!0,d="max_results";break}}t.onProgress?.(s,o.length)}if(!c){let m=[{dir:H(t.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:E,depth:x}=m.shift(),T;try{T=await rt.readdir(E,{withFileTypes:!0})}catch{continue}s++;for(let f of T){if(e++,e>r){c=!0,d="max_entries";break}let w=f.name,y=H(E,w);if(f.isDirectory()){if(x>=20||w.startsWith(".")||w.startsWith("output-")||it.has(w))continue;m.push({dir:y,depth:x+1})}else if(f.isFile()&&w.endsWith("_test.md")&&(o.push({path:y,relPath:nt(t.root,y),source:"tests-dir"}),o.length>=i)){c=!0,d="max_results";break}}}}return{results:o,aborted:c,abortReason:d,dirsScanned:s}}import{mkdirSync as kt,writeFileSync as Et}from"fs";import{join as bt}from"path";function at(t,r){return`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`}async function Tt(t){let r=Z({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId,codeExport:{enabled:!0,language:t.language,skipValidation:t.skipValidation}}),i=await I(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:at(t.auth.username,t.auth.access_key)},body:JSON.stringify(r.body)});if(!i.ok)throw new Error(`code-export trigger failed: ${i.status} ${await i.text()}`);t.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:t.testcaseId})}async function St(t){let r=tt({tmsBaseUrl:t.tmsBaseUrl,testcaseId:t.testcaseId}),i=t.pollIntervalMs??5e3,n=t.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let e=await I(r,{headers:{authorization:at(t.auth.username,t.auth.access_key),accept:"application/json"}});if(!e.ok){await new Promise(l=>setTimeout(l,i));continue}let c=(await e.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,i));continue}let d=(c.status??"").toLowerCase();if(d==="in progress"||d==="in_progress"||d==="pending"){await new Promise(l=>setTimeout(l,i));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);kt(t.outDir,{recursive:!0});for(let l of c.url){let a=bt(t.outDir,l.file_name),m=await I(l.file_url);if(!m.ok){t.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let E=await m.text();Et(a,E,"utf-8")}return t.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:t.outDir,file_count:c.url.length}),t.outDir}throw new Error("code-export polling timed out")}async function ct(t){return await Tt(t),await St(t)}var b=R(B(),1);import{existsSync as Rt,readFileSync as vt}from"fs";var p=R($(),1);function Pt(t){L(t);let r=P(t);if(!Rt(r))return null;try{return JSON.parse(vt(r,"utf8"))}catch{return{}}}function Mt(t){return t===null?"never_run":t.testcase_id?"synced":"local_only"}function Dt(t){return t==="synced"?"\u2601":t==="local_only"?"\u25A3":"\u25CB"}function Ct(t){return t==="tests-dir"?"\u2726":" "}function Ot(t,r){return r==="all"?!0:r==="synced"?t.status==="synced":r==="local"?t.status==="local_only":r==="never_run"?t.status==="never_run":r==="cli"?t.source==="tests-dir":r==="hand"?t.source==="cwd":!0}var V=["all","synced","local","never_run","cli","hand"];function Ft(t){let r=V.indexOf(t);return V[(r+1)%V.length]}function lt({root:t,currentOrgId:r,onSelect:i,onCancel:n}){let[o,e]=(0,b.useState)([]),[s,c]=(0,b.useState)(null),[d,l]=(0,b.useState)(!0),[a,m]=(0,b.useState)("all");(0,b.useEffect)(()=>{(async()=>{try{let f=await A({root:t}),w=[];for(let y of f.results){let j=Pt(y.path);j?.org_id!==void 0&&j.org_id!==r||w.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Mt(j),source:y.source})}e(w),l(!1)}catch(f){f instanceof v,c(f.message),l(!1)}})()},[t,r]);let E=(0,b.useMemo)(()=>o.filter(f=>Ot(f,a)).map(f=>({id:f.path,label:`${Dt(f.status)} ${Ct(f.source)} ${f.relPath}`})),[o,a]),x=(0,b.useMemo)(()=>It(a,o),[a,o]);if(s)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:s})})]});let T=a==="all"?"all":$t(a);return(0,p.jsx)(z,{title:`testmd \xB7 filter: ${T}`,items:E,loading:d,itemNoun:"tests",onSelect:f=>{let w=o.find(y=>y.path===f.id);w&&i(w)},onCancel:n,onTab:()=>m(f=>Ft(f)),extraHint:"cycle filter",footer:x})}function $t(t){return t==="synced"?"synced (\u2601)":t==="local"?"local (\u25A3)":t==="never_run"?"never run (\u25CB)":t==="cli"?"cli-generated (\u2726)":t==="hand"?"hand-written":"all"}function It(t,r){let i={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(t==="synced"),children:` \u2601 synced (${i.synced}) `}),(0,p.jsx)(g,{color:n(t==="local"),children:`\u25A3 local (${i.local}) `}),(0,p.jsx)(g,{color:n(t==="never_run"),children:`\u25CB never run (${i.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(t==="cli"),children:` \u2726 cli-generated (${i.cli}) `}),(0,p.jsx)(g,{color:n(t==="hand"),children:` hand-written (${i.hand})`})]})]})}var O=R(B(),1);import{existsSync as Lt,readFileSync as At}from"fs";var u=R($(),1);function ut({path:t,relPath:r,onAction:i,onBack:n,onView:o}){let[e,s]=(0,O.useState)(null),[c,d]=(0,O.useState)(!1);(0,O.useEffect)(()=>{let a=P(t);if(Lt(a))try{s(JSON.parse(At(a,"utf8")))}catch{s(null)}},[t]),K((a,m)=>{if(m.escape){if(c){d(!1);return}n();return}if(c){a==="y"||a==="Y"?(d(!1),i("delete")):(a==="n"||a==="N")&&d(!1);return}a==="r"&&i("run"),a==="e"&&e?.testcase_id&&i("export"),a==="d"&&d(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,u.jsxs)(g,{children:[(0,u.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,u.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,u.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,u.jsx)(k,{marginTop:1,flexDirection:"column",children:e?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsx)(l,{k:"test_id",v:e.test_id}),(0,u.jsx)(l,{k:"testcase_id",v:e.testcase_id}),(0,u.jsx)(l,{k:"project_id",v:e.project_id}),(0,u.jsx)(l,{k:"folder_id",v:e.folder_id}),(0,u.jsx)(l,{k:"org_id",v:e.org_id}),(0,u.jsx)(l,{k:"session_name",v:e.session_name}),(0,u.jsx)(l,{k:"commit_id",v:e.commit_id})]}):(0,u.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,u.jsx)(k,{marginTop:1,children:(0,u.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,u.jsx)(k,{marginTop:1,children:(0,u.jsxs)(g,{color:h.dim,children:["[r] run [e] export",e?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function F(t){L(t);let r=P(t);if(!D(r))return null;try{return JSON.parse(jt(r,"utf8"))}catch{return null}}function ft(t,r){return!t||t.org_id===void 0?!0:t.org_id===r}function q(t,r){return ft(t,r)?null:(process.stderr.write(`error: this test belongs to org ${t.org_id}; you are logged in as org ${r}.
3
- Switch profiles with \`kane-cli profiles switch\` to act on it.
4
- `),2)}async function Me(t={}){let r=!!process.stdin.isTTY&&!t.json,i=new N,n=new W;await et({isInteractive:r,creds:i,config:n});let o=i.getDefaultEnv()??"prod";try{let e=await X({creds:i,env:o,log:()=>{}});return e.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(e.resolvedCreds.org_id)}}catch(e){if(e instanceof U)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw e}}async function De(t,r){if(process.stdin.isTTY&&!t.json)return await Jt(r,t.root);let i=t.root??process.cwd(),n;try{n=await A({root:i,ignore:t.ignore})}catch(o){if(o instanceof v)return process.stderr.write(`error: ${o.message}
5
- `),2;throw o}for(let o of n.results){let e=F(o.path);if(!ft(e,r))continue;let s={path:o.relPath.startsWith(".")?o.relPath:`./${o.relPath}`,name:C(o.path),has_meta:e!==null,source:o.source,synced:!!e?.testcase_id};e&&(e.test_id&&(s.test_id=e.test_id),e.testcase_id&&(s.testcase_id=e.testcase_id),e.org_id&&(s.org_id=e.org_id),e.project_id&&(s.project_id=e.project_id),e.folder_id&&(s.folder_id=e.folder_id)),process.stdout.write(JSON.stringify(s)+`
6
- `)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
7
- `),0}var mt=-1001,gt=-1002,pt=-1003,_={action:null,path:null};function Nt(t,r){return _.action=t,_.path=r,t==="run"?mt:t==="export"?gt:pt}function Wt({root:t,currentOrgId:r,onComplete:i}){let[n,o]=M.default.useState({kind:"list"});return M.default.useEffect(()=>{n.kind==="exiting"&&i(n.code)},[n,i]),n.kind==="list"?M.default.createElement(lt,{root:t,currentOrgId:r,onSelect:e=>o({kind:"inspect",path:e.path,relPath:e.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?M.default.createElement(ut,{path:n.path,relPath:n.relPath,onAction:async e=>{o({kind:"exiting",code:Nt(e,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Jt(t,r){let i=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(e=>{let{unmount:s,waitUntilExit:c}=n(M.default.createElement(Wt,{root:i,currentOrgId:t,onComplete:d=>{s(),e(d)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>e(0)).catch(()=>e(0))});if(o===mt&&_.path){let{runTestMdFile:e}=await import("./run-test-md-YWKVMQDJ.js"),s=await e(_.path,{});return _.action=null,_.path=null,s}if(o===gt&&_.path){let e=await Xt(_.path,{},t);return _.action=null,_.path=null,e}if(o===pt&&_.path){let e=await Ut(_.path,!0,t);return _.action=null,_.path=null,e}return o}async function Ce(t,r){let i=Y(t);if(!D(i))return process.stderr.write(`error: file not found: ${i}
8
- `),2;let n=F(i),o=q(n,r);if(o!==null)return o;let e={path:i,name:C(i),has_meta:n!==null};return n&&(n.commit_id&&(e.commit_id=n.commit_id),n.test_id&&(e.test_id=n.test_id),n.testcase_id&&(e.testcase_id=n.testcase_id),n.project_id&&(e.project_id=n.project_id),n.folder_id&&(e.folder_id=n.folder_id),n.org_id&&(e.org_id=n.org_id),n.session_name&&(e.session_name=n.session_name)),process.stdout.write(JSON.stringify(e)+`
9
- `),0}async function Ut(t,r,i){let n=Y(t);if(!D(n))return process.stderr.write(`error: file not found: ${n}
10
- `),2;let o=F(n),e=q(o,i);if(e!==null)return e;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
11
- This will remove '${n}' and '${J(n)}/'.
12
- `),2;let s=J(n);if(D(s))try{dt(s,{recursive:!0,force:!0})}catch(c){return process.stderr.write(`error: failed to remove ${s}: ${c.message}
13
- `),2}try{Bt(n)}catch(c){return process.stderr.write(`error: failed to remove ${n}: ${c.message}
14
- `),2}return process.stderr.write(`removed ${n} and ${s}/
15
- `),0}var S=class extends Error{kind;constructor(r,i){super(i),this.name="ExportError",this.kind=r}};async function Oe(t,r){let{codeDir:i}=await ht(t,r);return{codeDir:i}}async function ht(t,r){let i=F(t);if(!i?.testcase_id)throw new S("not-synced","this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.");let n=new W().load(),o=r.language??n.code_export?.language;if(!o)throw new S("no-language","--language not provided and no default in tui-config.");let e=r.output??Q(t,"playwright",o),s=D(e);if(s&&!r.force){let a=!1;try{let{readdirSync:m}=await import("fs");a=m(e).length>0}catch{}if(a)return{kind:"reused",codeDir:e}}s&&r.force&&dt(e,{recursive:!0,force:!0});let c=new N,d=r.env??c.getDefaultEnv()??"prod",l;try{l=await X({creds:c,env:d,log:()=>{}})}catch(a){throw a instanceof U?new S("auth-fail","not authenticated. Run `kane-cli login` first."):a}if(!l.basicAuth)throw new S("auth-incomplete","TMS basic auth could not be resolved. Run `kane-cli login` again.");try{let a=G(d);await ct({tmsBaseUrl:a.tmsBaseUrl,testcaseId:i.testcase_id,auth:l.basicAuth,language:o,framework:"playwright",skipValidation:n.code_export?.skip_validation??!0,outDir:e,log:()=>{}})}catch(a){throw new S("export-fail",`code export failed: ${a.message}`)}return{kind:"exported",codeDir:e}}async function Xt(t,r,i){let n=Y(t);if(!D(n))return process.stderr.write(`error: file not found: ${n}
16
- `),2;let o=F(n),e=q(o,i);if(e!==null)return e;try{let s=await ht(n,r);return s.kind==="reused"?process.stderr.write(`reusing existing export at ${s.codeDir}
17
- `):process.stderr.write(`exported to ${s.codeDir}
18
- `),0}catch(s){if(s instanceof S)return s.kind==="not-synced"?(process.stderr.write("error: this test has not been synced to TMS \u2014 run `kane-cli testmd run` first.\n"),2):s.kind==="no-language"?(process.stderr.write(`error: --language not provided and no default in tui-config.
19
- `),2):s.kind==="auth-fail"?(process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),2):s.kind==="auth-incomplete"?(process.stderr.write("error: TMS basic auth could not be resolved. Run `kane-cli login` again.\n"),2):(process.stderr.write(`error: ${s.message}
20
- `),2);throw s}}export{lt as a,ut as b,F as c,ft as d,q as e,Me as f,De as g,Jt as h,Ce as i,Ut as j,S as k,Oe as l,Xt as m};
@@ -1,10 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- var v=()=>!!process.env.KANE_DEV_MODE,t=[],u=!1,f=null,c=null,a=null,i=null;function x(e){i=e}function m(){return i}function h(){return u}function y(e,r){t=t.filter(o=>o.name!==e),t.push({name:e,fn:r})}function R(e){t=t.filter(r=>r.name!==e)}function w(e,r){let o=t.find(n=>n.name===e);if(!o)return;t=t.filter(n=>n.name!==e);let s=!0;try{o.fn()}catch(n){s=!1,process.stderr.write(`[exit-manager] cleanup(${e}) failed: ${n instanceof Error?n.message:String(n)}
3
- `)}r&&s&&v()&&process.stderr.write(`[exit-manager] cleanup(${e}): ${r}
4
- `)}function l(e,r,o=!1){if(u){process.exit(f??e);return}if(u=!0,f=e,o&&i)try{i.log("error","CRASH",r),i.shutdownSync()}catch{}let s=[...t].reverse(),n=[];for(let g of s)try{g.fn(),n.push(g.name)}catch(d){process.stderr.write(`[exit-manager] cleanup(${g.name}) failed: ${d instanceof Error?d.message:String(d)}
5
- `)}if(t=[],v()&&(process.stderr.write(`[exit-manager] shutdown(${e}): ${r}
6
- `),n.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${n.join(", ")}
7
- `)),o&&a){try{a()}catch{}process.stderr.write(`
8
- Kane CLI crashed unexpectedly: ${r}
9
- `+(n.length>0?`Resources cleaned up (${n.join(", ")}).
10
- `:"")),process.exit(e);return}if(c&&!o){c();return}process.exit(e)}function E(e){c=e}function $(e){a=e}var p=!1;function S(){p||(p=!0,process.on("SIGINT",()=>{l(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{l(143,"Received SIGTERM",!0)}),process.on("uncaughtException",e=>{l(1,`Uncaught exception: ${e.message}`,!0)}),process.on("unhandledRejection",e=>{l(1,`Unhandled rejection: ${String(e)}`,!0)}))}function L(){t=[],u=!1,f=null,c=null,a=null,i=null,p=!1}export{x as a,m as b,h as c,y as d,R as e,w as f,l as g,E as h,$ as i,S as j,L as k};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{homedir as e}from"os";import{join as t}from"path";var m="0.4.10",d="kane-cli",a=t(e(),".testmuai","kaneai"),g=t(a,"profiles"),h=t(a,"tui-config.json"),_="https://registry.npmjs.org/@testmuai/kane-cli",L="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",x=`https://registry.npmjs.org/${n}`,r="kane-cli",A=[{dir:t(e(),".claude","skills",r),agent:"Claude Code"},{dir:t(e(),".agents","skills",r),agent:"Codex CLI"},{dir:t(e(),".gemini","skills",r),agent:"Gemini CLI"}],u="https://dd-proxy.lambdatest.com/intake/kane-cli",R="https://kaneai-playground.lambdatest.io",U=9222,b=9230,I=t(a,"chrome-profiles"),o=t(a,"hints"),C=t(o,"state.json");function E(s){return t(o,`catalog-${s}.json`)}var p="127.0.0.1",T=18392,S=18400,c="/callback";function N(s){return`http://${p}:${s}${c}`}var P="KANE CLI",B="*",O={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server"}},k={orange:"#ff9500",generateAccent:"#0d9488",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444"};export{m as a,d as b,a as c,h as d,_ as e,L as f,n as g,A as h,u as i,R as j,U as k,b as l,I as m,C as n,E as o,p,T as q,S as r,c as s,N as t,P as u,B as v,O as w,k as x};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- function r(e){return{url:`${e.tmsBaseUrl}/kane-cli/v1/test-case/${e.testcaseId}/code`,body:{code_name:"kane-cli-trigger",language:e.codeExport.language,framework:"playwright",folder_name:"",accessibility:"false",skipCodeValidation:e.codeExport.skipValidation}}}function o(e){return`${e.tmsBaseUrl}/kane-cli/v1/test-case/${e.testcaseId}/codes?page=1&per_page=10`}export{r as a,o as b};
@@ -1,17 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as m}from"./chunk-L5LI2JF4.js";import{c as h}from"./chunk-LRKWPAGK.js";import{randomUUID as N}from"crypto";import{mkdirSync as F,writeFileSync as f,appendFileSync as A,existsSync as v}from"fs";import{join as a}from"path";import{writeFileSync as w,mkdirSync as x,existsSync as I}from"fs";import{join as p,relative as j}from"path";function _(n){let t=Object.keys(n.frontmatter).length>0?m(n.frontmatter).trimEnd():"",s=["---"];return t&&s.push(t),s.push("---",""),s.push(`# ${n.heading}`,""),n.steps.forEach((i,r)=>{s.push(`## Step ${r+1}`,i,"")}),s.join(`
3
- `)}function k(n,e){let t={},s={},i=e;for(let[r,l]of Object.entries(n)){if(r.startsWith("global.")||r.startsWith("secrets.user.")||r.startsWith("environment.")){let o=r.startsWith("secrets.user.");t[r]={value:l.value,secret:o,syntax:`{{${r}}}`,type:o?"secret":r.startsWith("environment.")?"environment":"global"},s[r]=r;continue}if(l.secret){let o=`secrets.user.${r}`;t[o]={value:l.value,secret:!0,syntax:`{{secrets.user.${r}}}`,type:"secret"},s[r]=o,i=i.replaceAll(`{{${r}}}`,`{{secrets.user.${r}}}`)}else{let o=`global.${r}`;t[o]={value:l.value,secret:!1,syntax:`{{global.${r}}}`,type:"global"},s[r]=o,i=i.replaceAll(`{{${r}}}`,`{{global.${r}}}`)}}return{variables:t,objective:i,keyMap:s}}var y=/\{\{\s*(?:global|secrets\.user|environment)\.([^{}]+?)\s*\}\}/g;function c(n){return typeof n!="string"||!n.includes("{{")?n:n.replace(y,"{{$1}}")}function d(n){if(typeof n=="string")return c(n);if(Array.isArray(n))return n.map(e=>d(e));if(n&&typeof n=="object"){let e={};for(let[t,s]of Object.entries(n))e[t]=d(s);return e}return n}var L=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),$=new Set(["model","env"]),g=class{constructor(e){this.opts=e}objectives=[];flushed=!1;lastWrittenPath=null;lastCollisionSuffixed=!1;appendObjective(e){this.objectives.push(e)}flush(){if(this.flushed||(this.flushed=!0,this.objectives.length===0))return;let e=this.opts.getName();if(!e)return;let t=p(this.opts.cwd,".testmuai","tests");try{x(t,{recursive:!0})}catch(u){process.stderr.write(`
4
- \u26A0 Failed to create ${j(this.opts.cwd,t)}/
5
- ${u.message}
6
- Your test recording was NOT saved.
7
-
8
- `);return}let s=p(t,`${e}_test.md`),i=2,r=!1;for(;I(s);)s=p(t,`${e}-${i}_test.md`),i++,r=!0;let l=d(E(this.opts.getResolvedGlobal())),o=_({frontmatter:l,heading:`Session: ${e}`,steps:this.objectives.map(c)});try{w(s,o,"utf8")}catch(u){process.stderr.write(`
9
- \u26A0 Failed to save your test recording.
10
- ${u.message}
11
- Path: ${s}
12
-
13
- `);return}this.lastWrittenPath=s,this.lastCollisionSuffixed=r}};function E(n){let e={};for(let[t,s]of Object.entries(n))L.has(t)||$.has(t)||(e[t]=s);return e}var D=a(h,"sessions"),b=class{sessionId;sessionDir;runs=[];_flows=[];_nextIndex=0;_started=!1;_testId=null;_testcaseId=null;_projectId=null;_orgId=null;_uploadStatus="pending";_uploadAttempts=0;_uploadError=null;_firstObjective=null;_firstUrl=null;_auteurVariables={};_screenshotSas=null;_model="";_environment="";_profile=null;_plan=null;_startedAt="";_remoteLogger=null;_earlyLogBuffer=[];_recorder=null;_resolvedGlobal={};_sessionName=null;_recordingEnabled=!0;_stepRunRecords=[];constructor(e){this.sessionId=N();let t=e?.baseDir?a(e.baseDir,"sessions"):D;this.sessionDir=a(t,this.sessionId)}setResolvedGlobal(e){this._resolvedGlobal={...this._resolvedGlobal,...e}}setSessionName(e){this._sessionName=e}get sessionName(){return this._sessionName}setRecordingEnabled(e){this._recordingEnabled=e}get recorder(){return this._recorder}flushRecorder(){try{this._recorder?.flush()}catch(e){process.stderr.write(`[recorder] flush failed: ${e.message}
14
- `)}}start(e){if(!this._started){this._started=!0,this._model=e.model,this._environment=e.environment,this._profile=e.profile,this._startedAt=new Date().toISOString();try{F(this.sessionDir,{recursive:!0}),this._recorder=new g({cwd:process.cwd(),getResolvedGlobal:()=>this._resolvedGlobal,getName:()=>this._sessionName});let t={session_id:this.sessionId,started_at:this._startedAt,model:e.model,environment:e.environment,profile:e.profile,plan:this._plan,objectives:[],runs:[],status:"in_progress"};f(a(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
15
- `)}catch{}this._log(`SESSION START session_id=${this.sessionId}`),this._log(`CONFIG model=${e.model} env=${e.environment} profile=${e.profile}`),this._earlyLogBuffer.push({level:"info",event:"SESSION_START",message:"Session started",context:{session_id:this.sessionId}},{level:"info",event:"CONFIG",message:"Session config",context:{model:e.model,environment:e.environment,profile:e.profile}})}}setPlan(e){this._plan=e;let t={level:"info",event:"SESSION_INFO",message:"Session info",context:{session_id:this.sessionId,plan:e??null}};this._remoteLogger?this._remoteLogger.log(t.level,t.event,t.message,t.context):this._earlyLogBuffer.push(t)}get plan(){return this._plan}setRemoteLogger(e){this._remoteLogger=e;for(let t of this._earlyLogBuffer)e.log(t.level,t.event,t.message,t.context);this._earlyLogBuffer=[]}get hasRemoteLogger(){return this._remoteLogger!==null}setAuteurVariables(e){Object.assign(this._auteurVariables,e)}get auteurVariables(){return this._auteurVariables}setScreenshotSas(e){this._screenshotSas=e}get screenshotSas(){return this._screenshotSas}get screenshotBaseUrl(){return this._screenshotSas?`${this._screenshotSas.base_url}/${this._screenshotSas.container}`:""}get startedAt(){return this._startedAt||new Date().toISOString()}log(e,t,s,i){if(t===void 0){this._log(e);let o=e.indexOf(" "),u=o>0?e.slice(0,o):e,R=o>0?e.slice(o+1):"",S=/fail|error/i.test(e)?"error":"info";this._remoteLogger?.log(S,u,R||e);return}let r=e,l=s;this._log(`${t} ${l}`),this._remoteLogger?.log(r,t,l,i)}logStep(e,t,s){this._log(`${e} ${t}`);let i=this._nextIndex>0?this._nextIndex-1:0;this._remoteLogger?.logStep(i,e,t,s)}logCommand(e){this._log(`COMMAND ${e}`)}logRunStart(e,t,s){this._log(`RUN ${e} START objective="${t.slice(0,100)}" url=${s}`),this._remoteLogger?.setRunIndex(e),this._remoteLogger?.log("info","RUN_START",`Run ${e} started`,{run_index:e,objective:t,url:s})}logRunEnd(e,t,s,i){let r=(s??0).toFixed(1),l=(i??"").slice(0,100);this._log(`RUN ${e} END status=${t} duration=${r}s summary="${l}"`),this._remoteLogger?.log("info","RUN_END",`Run ${e} ended`,{run_index:e,status:t,duration:s??0,summary:i??""}),t!=="failed"&&t!=="error"&&this._remoteLogger?.discardSteps(e)}escalateRun(e){this._remoteLogger?.escalate(e)}logChromeLaunch(e,t){this._log(`CHROME LAUNCH port=${e} endpoint=${t}`),this._remoteLogger?.log("info","CHROME_LAUNCH","Chrome launched",{port:e,cdp_endpoint:t})}async finish(e="complete"){this._log(`SESSION END status=${e} total_runs=${this.runs.length}`),this._remoteLogger?.log("info","SESSION_END","Session ended",{status:e,total_runs:this.runs.length}),await this._remoteLogger?.shutdown();let t={session_id:this.sessionId,started_at:this._startedAt,ended_at:new Date().toISOString(),model:this._model,environment:this._environment,profile:this._profile,plan:this._plan,status:e,total_runs:this.runs.length,test_id:this._testId,testcase_id:this._testcaseId,commit_id:this.sessionId,project_id:this._projectId,upload_status:this._uploadStatus,upload_attempts:this._uploadAttempts,last_upload_attempt:this._uploadAttempts>0?new Date().toISOString():null,upload_error:this._uploadError,runs:this.runs.map(s=>({index:s.index,objective:s.objective,status:s.status,summary:s.summary,run_dir:s.run_dir}))};v(this.sessionDir)&&f(a(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
16
- `),this.flushRecorder(),this._recorder=null}nextRunIndex(){return this._nextIndex}addRunResult(e,t){this.runs.push(e),this._nextIndex+=t??1,this._recordingEnabled&&this._recorder?.appendObjective(e.objective)}getContext(){return{prior_runs:this.runs.map(e=>({index:e.index,objective:e.objective,summary:e.summary,status:e.status,memory:e.context.memory,variables:e.context.variables,pointer:e.context.pointer}))}}addFlow(e){let t={...e,index:this._flows.length+1};return this._flows.push(t),t}getFlows(){return[...this._flows]}getFlow(e){return this._flows.find(t=>t.index===e)}clearFlows(){this._flows=[]}recordStepRun(e){this._stepRunRecords.push(e)}getStepRunRecords(){return[...this._stepRunRecords]}getRunsAsStepRecords(){return this.runs.map((e,t)=>({testmdStepIndex:t+1,runIndex:e.index,totalRunDirs:e.run_dirs?.length??1}))}snapshot(){return{runsLen:this.runs.length,nextRunIndex:this._nextIndex,stepRunRecordsLen:this._stepRunRecords.length}}rollback(e){this.runs.length=e.runsLen,this._nextIndex=e.nextRunIndex,this._stepRunRecords.length=e.stepRunRecordsLen}setTestId(e){this._testId=e}get testId(){return this._testId}setTestcaseId(e){this._testcaseId=e}get testcaseId(){return this._testcaseId}setProjectId(e){this._projectId=e}setOrgId(e){this._orgId=e}get orgId(){return this._orgId}setFirstRun(e,t){this._firstObjective||(this._firstObjective=e,this._firstUrl=t)}get firstObjective(){return this._firstObjective}get firstUrl(){return this._firstUrl}getRunDirs(){let e=[];for(let t of this.runs)t.run_dirs&&t.run_dirs.length>0?e.push(...t.run_dirs):t.run_dir&&e.push(t.run_dir);return e}getRunObjectives(){let e=[];for(let t of this.runs)t.flow_objectives&&t.flow_objectives.length>0?e.push(...t.flow_objectives):e.push(t.objective);return e}getRunMetadata(){let e=[];for(let t of this.runs)if(t.perFlowMetadata&&t.perFlowMetadata.length>0)e.push(...t.perFlowMetadata);else{let s={resultCode:t.resultCode,reasonCode:t.reasonCode,errorMessage:t.status==="failed"?t.summary??null:null,summary:t.summary,oneLiner:t.oneLiner},i=t.run_dirs?.length??1;for(let r=0;r<i;r++)e.push(s)}return e}setUploadStatus(e,t){this._uploadStatus=e,this._uploadAttempts+=1,this._uploadError=t??null}_log(e){if(!(!this._started||!v(this.sessionDir)))try{let t=new Date().toISOString().slice(0,19).replace("T"," "),s=a(this.sessionDir,"tui.log");A(s,`[${t}] ${e}
17
- `)}catch{}}};export{_ as a,k as b,b as c};
@@ -1,11 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as O,h as F}from"./chunk-AH4AXJML.js";import{a as k}from"./chunk-L5LI2JF4.js";import{readFileSync as se,existsSync as ne}from"fs";import{basename as C,dirname as oe,isAbsolute as re,resolve as L}from"path";var u=class extends Error{constructor(s,o,n){super(`[${o}${n!=null?`:${n}`:""}] ${s}`);this.file=o;this.line=n;this.name="TestMdParseError"}},U=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),D=new Set(["mode","max_steps","timeout","global_context","local_context","variables","session_context","code_export","code_language","url","target","chrome_profile","cdp_endpoint","ws_endpoint","headless","on_lock_conflict"]),$=new Set(["optional"]),V=new Set(["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"]),Q=new Set(["mode","on_lock_conflict"]);function R(e,t){let s=t.split(`
3
- `),{global:o,bodyStartLine:n}=X(e,s),{title:r,steps:i}=Z(e,s,n);return{path:e,title:r,global:o,steps:i}}function X(e,t){if(t[0]?.trim()!=="---")return{global:{},bodyStartLine:0};let s=-1;for(let r=1;r<t.length;r++)if(t[r].trim()==="---"){s=r;break}if(s===-1)throw new u("frontmatter is missing closing '---'",e,1);let o=t.slice(1,s).join(`
4
- `),n;try{n=k(o)??{}}catch(r){throw new u(`invalid YAML in frontmatter: ${r.message}`,e,1)}if(M(e,n,"frontmatter",1),n.on_lock_conflict!==void 0){let r=n.on_lock_conflict;if(r!=="readonly"&&r!=="fail"&&r!=="wait")throw new u(`on_lock_conflict must be 'readonly' | 'fail' | 'wait', got: ${JSON.stringify(r)}`,e,1)}return E(e,n,1),{global:n,bodyStartLine:s+1}}function Z(e,t,s){let o,n=s;for(;n<t.length&&t[n].trim()==="";)n++;let r=n<t.length?/^#\s+(.+?)\s*$/.exec(t[n]):null;r&&(o=r[1],n++);let i=[];for(let d=n;d<t.length;d++)/^##\s/.test(t[d])&&i.push(d);let a=[];for(let d=0;d<i.length;d++){let c=i[d],p=i[d+1]??t.length,m=t[c].replace(/^##\s+/,"").trim(),g=t.slice(c+1,p),{config:l,body:f,optional:h}=ee(e,c+1,g);a.push({index:d+1,heading:m,config:l,body:f,headingLine:c+1,optional:h})}return{title:o,steps:a}}function ee(e,t,s){let o=0;for(;o<s.length&&s[o].trim()==="";)o++;let n,r=t;if(o<s.length&&/^```yaml\s*$/.test(s[o])){let l=o;r=t+l,o++;let f=-1;for(;o<s.length;){if(/^```\s*$/.test(s[o])){f=o;break}o++}if(f===-1)throw new u("step-config fenced ```yaml block is not closed",e,r);let h=s.slice(l+1,f).join(`
5
- `);try{n=k(h)??{}}catch(I){throw new u(`invalid YAML in step config: ${I.message}`,e,r)}o=f+1}let i=te(s.slice(o)),a=i.filter(l=>l.trim()!=="");if(a.length>0&&/^@session\s+/.test(a[0].trim()))throw new u("@session is no longer supported (iteration 3); use @import instead",e,t);let d=/^@import\s+(\S.*)$/,p=i.filter(l=>d.test(l.trim())).length>0;if(p&&a.length!==1)throw new u("step body must be exactly one of prose / @import",e,t);let m=!1,g;if(n){if(M(e,n,p?"step config (ref)":"step config (objective)",r),p||E(e,n,r),typeof n.optional=="boolean")m=n.optional;else if(n.optional!==void 0)throw new u(`step config 'optional' must be boolean: got ${typeof n.optional}`,e,r);let l={...n};delete l.optional,Object.keys(l).length>0&&(g=l)}return p?{body:{kind:"import_ref",path:d.exec(a[0].trim())[1].trim()},optional:m}:{body:{kind:"objective",text:i.join(`
6
- `).trim()},config:g,optional:m}}function te(e){let t=0,s=e.length;for(;t<s&&e[t].trim()==="";)t++;for(;s>t&&e[s-1].trim()==="";)s--;return e.slice(t,s)}function E(e,t,s){let o=t.variables;if(o==null)return;if(typeof o!="object"||Array.isArray(o))throw new u("variables must be an object map",e,s);let n={};for(let[r,i]of Object.entries(o))if(typeof i=="string")n[r]={value:i};else if(i&&typeof i=="object"&&!Array.isArray(i)&&typeof i.value=="string")n[r]=i;else throw new u(`variable '${r}' must be a string or { value: ... } object`,e,s);t.variables=n}function M(e,t,s,o){for(let n of Object.keys(t)){if(U.has(n))throw new u(`auth/identity keys are CLI-only: ${n}`,e,o);if(s==="frontmatter"){if($.has(n))throw new u(`step-only key in frontmatter: ${n}`,e,o);if(!D.has(n))throw new u(`unknown config key: ${n}`,e,o)}else if(s==="step config (objective)"){if(!D.has(n)&&!$.has(n))throw new u(`unknown config key: ${n}`,e,o);if(V.has(n))throw new u(`chrome config is global-only: ${n}`,e,o);if(Q.has(n))throw new u(`'${n}' is run-level and cannot be set per-step`,e,o)}else if(!$.has(n))throw new u(`step config on @import may only contain 'optional': got ${n}`,e,o)}}var T=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"],b=class extends Error{constructor(t){super(t),this.name="TestMdResolveError"}};function Be(e){let t=L(e),s=A(t),o=ie(s.global),n=[];return B(s,[],n,[],t),n.forEach((i,a)=>i.flatIndex=a+1),{rootPath:t,rootTitle:s.title,rootGlobal:s.global,rootSteps:s.steps,chrome:o,steps:n}}function A(e){if(!ne(e))throw new b(`@import path not found: ${e}`);let t=se(e,"utf8");return R(e,t)}function B(e,t,s,o,n){if(t.includes(e.path)){let i=[...t,e.path].map(a=>C(a)).join(" \u2192 ");throw new b(`cyclic reference: ${i}`)}t.push(e.path);let r=o.length===0;for(let i of e.steps){let a=i.body.kind!=="objective";if(i.optional&&a&&!r)throw new b(`intermediate-ref 'optional' is not supported in v1: ${e.path}:${i.headingLine}`);let d={file:e.path,stepIndex:i.index,heading:i.heading,optional:i.optional??!1};if(i.body.kind==="objective"){let g=ae(e.global,i.config);s.push({flatIndex:0,objective:i.body.text,sourceFile:e.path,trace:[...o,d],config:g,parsedConfig:i.config,optional:i.optional??!1});continue}let c=oe(e.path),p=re(i.body.path)?i.body.path:L(c,i.body.path);if(C(p).endsWith("_test.md"))throw new b(`cannot @import a test file: only helpers may be imported (got ${p})`);let m=A(p);B(m,t,s,[...o,d],n)}t.pop()}function ie(e){let t={};for(let s of T)e[s]!==void 0&&(t[s]=e[s]);return t}function ae(e,t){let s={};for(let[o,n]of Object.entries(e))T.includes(o)||(s[o]=n);return{...s,...t??{}}}import{mkdirSync as _,writeFileSync as Ee}from"fs";import{join as S}from"path";import{createHash as le}from"crypto";function j(e){if(e==null)return null;if(Array.isArray(e))return e.map(j);if(typeof e=="object"){let t={};for(let s of Object.keys(e).sort()){let o=e[s];o!==void 0&&(t[s]=j(o))}return t}return e}function de(e){if(e.body.kind!=="objective")throw new Error("stepMd5: only objective steps have an md5; @import rows do not");let t={...e.config??{},optional:e.optional??!1},s=JSON.stringify(j(t));return le("md5").update(e.body.text).update(`
7
- `).update(s).digest("hex")}function x(e){return de({index:e.trace[e.trace.length-1].stepIndex,heading:e.trace[e.trace.length-1].heading,body:{kind:"objective",text:e.objective},config:e.parsedConfig,headingLine:1,optional:e.optional})}import{writeFileSync as pe,mkdirSync as ce,readFileSync as fe}from"fs";import{dirname as ue,basename as K}from"path";function w(e){let t=e.outPath??O(e.sourcePath);ce(ue(t),{recursive:!0});let s=[];s.push("---"),s.push(`test: ../${K(e.sourcePath)}`),s.push(`status: ${e.overallStatus}`),s.push(`started: ${e.startedISO}`),s.push(`duration_s: ${e.durationS}`),s.push(`session_id: ${e.sessionId}`),s.push("---",""),s.push(`# ${e.title??K(e.sourcePath)} \u2014 Result`,"");for(let o=0;o<e.rootSteps.length;o++){let n=e.rootSteps[o],r=e.outcomes.find(i=>i.rootStepIndex===o+1);if(s.push(ge(n,r)),n.body.kind==="objective"&&r?.stepMd5&&s.push(`md5: ${r.stepMd5}`),r?.status==="failed"&&r.reason&&s.push(`Reason: ${r.reason}`),r?.softFailures?.length)for(let i of r.softFailures){let a=i.reason?`: ${i.reason}`:"";s.push(`\u26A0 optional sub-step ${i.subStepIndex} failed${a}`)}n.body.kind==="objective"&&r?.status!=="skipped"&&s.push(n.body.text),s.push("")}return pe(t,s.join(`
8
- `),"utf8"),t}function ge(e,t){if(!t)return`## ${e.heading} (no outcome)`;let s=t.duration_s!=null?`${t.duration_s}s`:"\u2014";if(t.status==="skipped")return`## ${e.heading} \u23ED skipped`;let o=t.softFailed?" (optional)":"";if(t.refKind&&t.status==="passed"){let n=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2713 passed (via @${t.refKind} ${t.refLabel} \u2014 ${t.inlinedCount} inlined steps, ${s}${n})`}if(t.refKind&&t.status==="failed"){let n=t.failedSubStepIndex&&t.failedSubStepIndex.length>0?` \u2014 at sub-step ${t.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",r=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2717 failed${o} (via @${t.refKind} ${t.refLabel}${n}, ${s}${r})`}return t.status==="passed"?`## ${e.heading} \u2713 passed (${s})`:`## ${e.heading} \u2717 failed${o} (${s})`}var me=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,he=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,Se=/^md5:\s+([a-f0-9]{32})\s*$/;function Je(e){let s=fe(e,"utf8").split(`
9
- `),o="passed";if(s[0]?.trim()==="---")for(let r=1;r<s.length&&s[r].trim()!=="---";r++){let i=/^status:\s+(passed|failed|interrupted)\s*$/.exec(s[r]);i&&(o=i[1])}let n=[];for(let r=0;r<s.length;r++){let i=me.exec(s[r]);if(!i)continue;let a=i[1],d=i[2],c=i[3]??"",p=d.startsWith("\u2713")?"passed":d.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(c)){let g=he.exec(c),l=g?.[1]??"",f=g?.[2]??null;n.push({kind:"import",heading:a,status:p,md5:null,importPath:l,helperResultRelPath:f})}else{let g=null;for(let l=r+1;l<s.length&&!/^##\s/.test(s[l]);l++){if(s[l].trim()==="")continue;let f=Se.exec(s[l]);if(f){g=f[1];break}break}n.push({kind:"objective",heading:a,status:p,md5:g})}}return{overallStatus:o,steps:n}}import{copyFileSync as be,existsSync as ye,mkdirSync as ve,writeFileSync as Re}from"fs";import{join as y}from"path";function H(e){for(let t=0;t<e.totalRunDirs;t++){let s=e.runIndex+t,o=y(e.sessionDir,"runs",String(s)),n=y(e.stagingStepDir,"flows",String(t));ve(n,{recursive:!0});let r=[y(o,"run-test","actions.ndjson"),y(o,"actions.ndjson")],i=y(n,"actions.ndjson"),a=!1;for(let d of r)if(ye(d)){be(d,i),a=!0;break}a||Re(i,"")}}import{basename as xe,dirname as we,join as Ie}from"path";function G(e){let t=xe(e);return t.endsWith("_test.md")?t.slice(0,-8):t.endsWith(".md")?t.slice(0,-3):t}function ke(e){if(e.length<2)throw new Error("helperOutputDirName requires trace length >= 2 (root + at least one helper)");let t=G(e[0].file),s=G(e[e.length-1].file),o=e.slice(0,-1).map(n=>String(n.stepIndex));return`helper-output-${s}-${t}-${o.join("-")}`}function v(e){if(e.length<2)throw new Error("helperOutputDirPath requires trace length >= 2");let t=e[e.length-1].file;return Ie(we(t),ke(e))}import{existsSync as N,mkdirSync as $e,rmSync as je,cpSync as _e}from"fs";function W(e,t){N(e)&&(N(t)&&je(t,{recursive:!0,force:!0}),$e(t,{recursive:!0}),_e(e,t,{recursive:!0}))}import{readFileSync as Pe}from"fs";import{join as Oe,relative as Fe}from"path";function J(e){let t=De(e.resolvedTest,e.runByStep),s=new Map;for(let o of t.values()){let n=s.get(o.helperFile);n||(n=R(o.helperFile,Pe(o.helperFile,"utf8")),s.set(o.helperFile,n));let r=[],i=!1;for(let d of n.steps){let c=d.index,p=o.resolvedSteps.filter(l=>l.trace[o.helperDepth].stepIndex===c);if(p.length===0){r.push({rootStepIndex:c,status:"skipped"});continue}let m=p[0].trace[0].stepIndex,g=e.outcomes.find(l=>l.rootStepIndex===m);if(!g){r.push({rootStepIndex:c,status:"skipped"});continue}if(d.body.kind==="objective"){let l=p[0],f=Y(l,g);f==="failed"&&(i=!0);let h={rootStepIndex:c,status:f};f==="passed"&&(h.stepMd5=x(l)),r.push(h)}else{let l=!1,f=!1;for(let z of p){let P=Y(z,g);P!=="skipped"&&(f=!0),P==="failed"&&(l=!0)}let h=l?"failed":f?"passed":"skipped";h==="failed"&&(i=!0);let I=v(p[0].trace.slice(0,o.helperDepth+2)),q=Fe(o.finalDir,I);r.push({rootStepIndex:c,status:h,refKind:"import",refLabel:d.body.path,inlinedCount:p.length,helperResultRelPath:`${q}/Result.md`})}}let a=i?"failed":"passed";w({sourcePath:o.helperFile,title:n.title,rootSteps:n.steps,outcomes:r,overallStatus:a,startedISO:e.startedISO,durationS:0,sessionId:e.sessionId,outPath:Oe(o.stagingDir,"Result.md")})}}function De(e,t){let s=new Map;for(let o of e.steps)if(t.has(o.flatIndex))for(let n=1;n<o.trace.length;n++){let r=o.trace.slice(0,n+1),i=v(r),a=s.get(i);a||(a={stagingDir:`${i}.staging`,finalDir:i,helperFile:r[n].file,helperDepth:n,resolvedSteps:[]},s.set(i,a)),a.resolvedSteps.push(o)}return s}function Y(e,t){if(t.status==="passed")return"passed";if(t.status==="skipped")return"skipped";let s=e.trace.slice(1).map(r=>r.stepIndex),o=t.failedSubStepIndex??[],n=Math.min(s.length,o.length);for(let r=0;r<n;r++)if(s[r]!==o[r])return s[r]<o[r]?"passed":"skipped";return s.length===o.length?"failed":s.length<o.length?"passed":"skipped"}function St(e){let t=F(e.resolvedTest.rootPath);_(S(t,".internal"),{recursive:!0});let s=new Map;for(let n of e.stepRunRecords)s.set(n.testmdStepIndex,n);for(let n of e.resolvedTest.steps){let r=s.get(n.flatIndex);if(!r)continue;let i=n.trace[n.trace.length-1].stepIndex,a=x(n),d=a.slice(0,8),c;if(n.trace.length===1)c=S(t,".internal","steps",`${i}-${d}`);else{let p=`${v(n.trace)}.staging`;_(S(p,".internal"),{recursive:!0}),c=S(p,".internal","steps",`${i}-${d}`)}if(_(c,{recursive:!0}),H({sessionDir:e.sessionDir,runIndex:r.runIndex,totalRunDirs:r.totalRunDirs,stagingStepDir:c}),n.trace.length===1){let p=n.trace[0].stepIndex,m=e.outcomes.find(g=>g.rootStepIndex===p);m&&m.stepMd5==null&&(m.stepMd5=a)}}J({resolvedTest:e.resolvedTest,outcomes:e.outcomes,startedISO:e.startedISO,sessionId:e.sessionId,runByStep:s}),w({sourcePath:e.resolvedTest.rootPath,title:e.resolvedTest.rootTitle,rootSteps:e.resolvedTest.rootSteps,outcomes:e.outcomes,overallStatus:e.overallStatus,startedISO:e.startedISO,durationS:e.durationS,sessionId:e.sessionId,outPath:S(t,"Result.md")});let o={};if(e.commitId&&(o.commit_id=e.commitId),e.tmsIds.testId&&(o.test_id=e.tmsIds.testId),e.tmsIds.testcaseId&&(o.testcase_id=e.tmsIds.testcaseId),e.tmsIds.projectId&&(o.project_id=e.tmsIds.projectId),e.tmsIds.folderId&&(o.folder_id=e.tmsIds.folderId),e.tmsIds.orgId&&(o.org_id=e.tmsIds.orgId),e.tmsIds.sessionName&&(o.session_name=e.tmsIds.sessionName),Ee(S(t,".internal","meta.json"),JSON.stringify(o,null,2)+`
10
- `,"utf8"),e.codeExportDir){let n=e.codeExportLanguage??"python",r=S(t,`playwright-${n}-code`);try{W(e.codeExportDir,r)}catch(i){process.stderr.write(`warn: codegen copy failed: ${i.message}
11
- `)}}}export{Be as a,x as b,w as c,Je as d,v as e,W as f,St as g};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as l,d,e as m,f as g,g as S,k as y}from"./chunk-AH4AXJML.js";import{a as u}from"./chunk-53O3GMZR.js";import{g as p,h as f}from"./chunk-LOIRZFV3.js";import{existsSync as s,mkdirSync as h,readFileSync as C,renameSync as w,writeFileSync as R}from"fs";import{join as x}from"path";function G(e){y(l(e));let r=l(e);if(!s(r))return;let n=x(r,"meta.json"),o=m(e);if(s(n)&&!s(o))try{h(d(e),{recursive:!0}),w(n,o)}catch(t){process.stderr.write(`warn: meta.json migration failed: ${t.message}
3
- `)}let a=S(e);if(s(a)){let t="python";try{let i=new u().load();i.code_export?.language&&(t=i.code_export.language)}catch{}let c=g(e,"playwright",t);if(!s(c))try{w(a,c)}catch(i){process.stderr.write(`warn: generated-code migration failed: ${i.message}
4
- `)}}if(s(o))try{let t=JSON.parse(C(o,"utf8"));"md5sum"in t&&(delete t.md5sum,R(o,JSON.stringify(t,null,2)+`
5
- `,"utf8"))}catch(t){process.stderr.write(`warn: meta.json md5sum strip failed: ${t.message}
6
- `)}}async function O(e){if(!e.isInteractive)return{recovered:!1};if(E(e.creds))return{recovered:!1};let{SingleShotApp:r}=await import("./SingleShotApp-RO25ZX2E.js"),{ScrollbackProvider:n}=await import("./scrollback-6GINSTL2.js"),{render:o}=await import("./build-JIKYOZUH.js"),a=await import("./react-QWOAB3TB.js"),t={current:null},c={current:!1},{waitUntilExit:i,unmount:v}=o(a.default.createElement(n,null,a.default.createElement(r,{resultRef:t,mode:"login",loginCompleteRef:c})),{exitOnCtrlC:!1});f(()=>v()),await i();try{process.stdin.setRawMode?.(!1)}catch{}return process.stdout.write("\x1B[?25h"),c.current?{recovered:!0}:(p(0,"Startup gate cancelled"),{recovered:!1})}function E(e){let r=e.getActiveProfile(),n=e.getDefaultEnv();if(!r||!!!(e.loadBasicAuth(r,n)||e.loadCredentials(r,n)))return!1;let a=e.loadProfileConfig(r,n)??{};return!!a.project_id&&!!a.folder_id}export{G as a,O as b};