@testmuai/kane-cli 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{ChromeProfilePicker-HGRJNQDM.js → ChromeProfilePicker-J6QIIHIE.js} +1 -1
- package/dist/{CliFeedbackPrompt-JXEPBJ63.js → CliFeedbackPrompt-SEH4MXTF.js} +1 -1
- package/dist/{CliUploadProgress-L5VJUXUC.js → CliUploadProgress-U6QLD76Y.js} +1 -1
- package/dist/{ConfigView-LOEAT3HQ.js → ConfigView-5ZCHVYM2.js} +1 -1
- package/dist/FolderPicker-VYJDEDN7.js +2 -0
- package/dist/HelpView-3ESCWBPB.js +2 -0
- package/dist/{InfoBox-MK7EEGCH.js → InfoBox-OVAOOQHC.js} +1 -1
- package/dist/{LinksBox-RSWQWL6G.js → LinksBox-P3VETMP6.js} +1 -1
- package/dist/{ProfilesView-KCOMTDR5.js → ProfilesView-UBVNEYVE.js} +1 -1
- package/dist/ProjectPicker-NJKUWRET.js +2 -0
- package/dist/{SaveSessionPrompt-RGL3LAEB.js → SaveSessionPrompt-S5RCU5DX.js} +1 -1
- package/dist/SingleShotApp-WOJWOQSV.js +2 -0
- package/dist/{SummaryBox-5YPKUIHB.js → SummaryBox-M4UFKKMD.js} +1 -1
- package/dist/{TestMdRunView-QS7IUANM.js → TestMdRunView-PI433EGP.js} +1 -1
- package/dist/{WhoamiView-GL3HZQ4Q.js → WhoamiView-VJBEYTCF.js} +1 -1
- package/dist/changelog-EFAQANXW.js +4 -0
- package/dist/chunk-4QLJMIBA.js +13 -0
- package/dist/{chunk-ZLQ7YLXO.js → chunk-53K3BK7I.js} +1 -1
- package/dist/chunk-AH4AXJML.js +2 -0
- package/dist/{chunk-NOH6RERF.js → chunk-D4P6GLSX.js} +1 -1
- package/dist/chunk-FAPS5ACQ.js +9 -0
- package/dist/chunk-FSIJOBVB.js +2 -0
- package/dist/chunk-G5HHHYH7.js +2 -0
- package/dist/chunk-GCAHPH2E.js +2 -0
- package/dist/chunk-H33BV5YV.js +2 -0
- package/dist/{chunk-TK7ZJ7YX.js → chunk-HNIH3GSQ.js} +1 -1
- package/dist/{chunk-ZX3PMRMO.js → chunk-IROWNPDG.js} +1 -1
- package/dist/chunk-IXWVTWOR.js +5 -0
- package/dist/{chunk-XP5SMOND.js → chunk-J3SCNSXX.js} +1 -1
- package/dist/chunk-JI7KJKG4.js +2 -0
- package/dist/{chunk-THNGNS36.js → chunk-JPEICMHK.js} +1 -1
- package/dist/chunk-KKZRPFWO.js +2 -0
- package/dist/chunk-L3MOXBKE.js +5 -0
- package/dist/chunk-L5LI2JF4.js +38 -0
- package/dist/chunk-N7YALZKA.js +17 -0
- package/dist/{chunk-QO6VFDI4.js → chunk-NOQKUOEK.js} +1 -1
- package/dist/chunk-OQZG3V6B.js +2 -0
- package/dist/{chunk-KVDOQY2Q.js → chunk-PNQ5YMED.js} +1 -1
- package/dist/{chunk-L4GAZTAQ.js → chunk-RHXWME7G.js} +1 -1
- package/dist/{chunk-VUBZQUP4.js → chunk-RURXFEOD.js} +1 -1
- package/dist/{chunk-34DK2AUH.js → chunk-SR5UDUMJ.js} +1 -1
- package/dist/{chunk-MEB2KLWF.js → chunk-TEH6AVF4.js} +1 -1
- package/dist/{chunk-3ELBJPHQ.js → chunk-TL4SB7MQ.js} +1 -1
- package/dist/{chunk-L4OZRHUT.js → chunk-U4QMSR5Z.js} +1 -1
- package/dist/{chunk-L2HVRWIT.js → chunk-UFNKCPUB.js} +11 -11
- package/dist/chunk-V7QXJKX7.js +3 -0
- package/dist/{chunk-BR2S57O2.js → chunk-WM6GZFTC.js} +1 -1
- package/dist/chunk-X7VI7KK3.js +11 -0
- package/dist/{chunk-RXMOIIQD.js → chunk-XM4H4TJD.js} +1 -1
- package/dist/{chunk-3QD3LA72.js → chunk-YF4OL463.js} +1 -1
- package/dist/{chunk-HJ3CHMEM.js → chunk-YVLFHMUW.js} +1 -1
- package/dist/chunk-YZTCCQHR.js +2 -0
- package/dist/{chunk-XMK4GYI7.js → chunk-ZYVYAIBS.js} +1 -1
- package/dist/controller-client-OMKEBP4B.js +2 -0
- package/dist/index.js +23 -23
- package/dist/logging-AIQHWRNQ.js +2 -0
- package/dist/login-flow-E6WMJ25A.js +2 -0
- package/dist/persist-recorded-session-V5DXMRKC.js +3 -0
- package/dist/pipeline-EUZIM2ZO.js +2 -0
- package/dist/{recording-banner-IDLY2FM6.js → recording-banner-7ZKIORL5.js} +1 -1
- package/dist/resolver-F6HCOZOX.js +2 -0
- package/dist/run-test-md-BQS5SZ7E.js +65 -0
- package/dist/testmd-actions-322GQYAH.js +20 -0
- package/dist/tms-client-XOARLBEP.js +2 -0
- package/dist/{validate-basic-27BIMJ2F.js → validate-basic-XKTSGLFO.js} +1 -1
- package/dist/version-check-LUCKH72U.js +2 -0
- package/package.json +5 -5
- package/dist/FolderPicker-I6JTRNAU.js +0 -2
- package/dist/HelpView-UEUKYHFR.js +0 -2
- package/dist/ProjectPicker-AX6H5MX3.js +0 -2
- package/dist/SingleShotApp-YTFAGVZD.js +0 -2
- package/dist/changelog-CLQ7HCB3.js +0 -4
- package/dist/chunk-BM4COXQU.js +0 -53
- package/dist/chunk-BQKDPI6L.js +0 -2
- package/dist/chunk-DUR6AFYA.js +0 -5
- package/dist/chunk-DXKKUGFG.js +0 -2
- package/dist/chunk-F6HEB4PA.js +0 -2
- package/dist/chunk-FFO5XXKV.js +0 -4
- package/dist/chunk-GTFULP6B.js +0 -13
- package/dist/chunk-K7MSPKEM.js +0 -5
- package/dist/chunk-KULEBWMB.js +0 -2
- package/dist/chunk-L5Y2GUO6.js +0 -2
- package/dist/chunk-NZSHFIZX.js +0 -3
- package/dist/chunk-PWGEMRBD.js +0 -2
- package/dist/chunk-SLA75N5B.js +0 -2
- package/dist/chunk-WAFO4MT4.js +0 -20
- package/dist/chunk-YUUZDFT7.js +0 -2
- package/dist/controller-client-7BIK5FYL.js +0 -2
- package/dist/logging-GG23EW5G.js +0 -2
- package/dist/login-flow-ZUZUZIXD.js +0 -2
- package/dist/persist-recorded-session-ZXKA4H7E.js +0 -5
- package/dist/pipeline-BVH3R7YP.js +0 -2
- package/dist/resolver-QLDOAIXU.js +0 -2
- package/dist/run-test-md-UPAR3DQY.js +0 -54
- package/dist/testmd-actions-YYFFNNIH.js +0 -20
- package/dist/tms-client-CTH4NVFM.js +0 -2
- package/dist/version-check-6DXFF6IN.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,34 +1,34 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
3
|
-
import{a as Eo,b as Sr}from"./chunk-3MSXQU2C.js";import{a as Hr}from"./chunk-
|
|
3
|
+
import{a as Eo,b as Sr}from"./chunk-3MSXQU2C.js";import{a as Hr}from"./chunk-RHXWME7G.js";import{a as Pn,b as On,c as Dn,d as Mn,e as an,f as Nt,g as Gr}from"./chunk-U4QMSR5Z.js";import{a as Hn,b as Ur,c as Ao}from"./chunk-RURXFEOD.js";import{a as So}from"./chunk-XM4H4TJD.js";import{a as on,b as rn,c as jr,d as Fn,e as Br,f as Nn,g as Mt,h as At,i as ln,j as Un,k as Wn,o as qn,p as Kn,q as Gn,r as zn,v as cn,w as dn,x as Xn,y as Xr,z as Do}from"./chunk-4QLJMIBA.js";import{b as $r}from"./chunk-L3MOXBKE.js";import{a as Pr,b as zr,c as Oo,d as Jr}from"./chunk-G5HHHYH7.js";import{a as Mr}from"./chunk-UFNKCPUB.js";import"./chunk-MDBXYXSC.js";import{a as Io}from"./chunk-J3SCNSXX.js";import{a as Wr,b as Po}from"./chunk-ZYVYAIBS.js";import"./chunk-S3DAAAE5.js";import"./chunk-X7VI7KK3.js";import"./chunk-AH4AXJML.js";import{a as qr,d as Jn}from"./chunk-FSIJOBVB.js";import{a as kr,b as Rr,c as jn,d as Vr,e as Lr,f as Kr}from"./chunk-FAPS5ACQ.js";import{a as nn}from"./chunk-N7YALZKA.js";import{a as Ln,d as nt,e as Rt,f as q,g as sn,h as Ro,i as Dr}from"./chunk-G7VF5SDK.js";import"./chunk-L5LI2JF4.js";import{a as Be}from"./chunk-PNQ5YMED.js";import{b as Lt}from"./chunk-53K3BK7I.js";import{b as Ft}from"./chunk-YF4OL463.js";import"./chunk-YCCUBQY4.js";import"./chunk-JPEICMHK.js";import{a as Te,b as he,c as Bn,d as Ar}from"./chunk-VE3SUJMA.js";import{a as $n}from"./chunk-WM6GZFTC.js";import{a as Le,b as Ir}from"./chunk-IXWVTWOR.js";import{a as me}from"./chunk-HNIH3GSQ.js";import{a as Vn}from"./chunk-GCAHPH2E.js";import{a as Or}from"./chunk-JI7KJKG4.js";import{b as Fr}from"./chunk-H33BV5YV.js";import{a as Nr}from"./chunk-IFWLAQ3L.js";import"./chunk-E47GFYXA.js";import{a as Tr}from"./chunk-IROWNPDG.js";import"./chunk-SR5UDUMJ.js";import{b as ko}from"./chunk-NOQKUOEK.js";import{c as To}from"./chunk-TEH6AVF4.js";import{a as $t}from"./chunk-YVLFHMUW.js";import{a as X}from"./chunk-HCBYKLMW.js";import{a as st,c as xe,h as at,t as g}from"./chunk-TL4SB7MQ.js";import{a as b,b as l,c as tn,d as An,i as He,j as In,k as Er}from"./chunk-C44QQJR4.js";import{a as Ye}from"./chunk-6YGTRKDT.js";import{a as Vt}from"./chunk-YZTCCQHR.js";import"./chunk-KKZRPFWO.js";import"./chunk-V7QXJKX7.js";import{a as en,c as Tt,e as H}from"./chunk-UR6MHSHU.js";var vn=Tt(Xo=>{"use strict";var so=class extends Error{constructor(e,t,n){super(n),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},zo=class extends so{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};Xo.CommanderError=so;Xo.InvalidArgumentError=zo});var ao=Tt(Yo=>{"use strict";var{InvalidArgumentError:Ss}=vn(),Jo=class{constructor(e,t){switch(this.description=t||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,e[0]){case"<":this.required=!0,this._name=e.slice(1,-1);break;case"[":this.required=!1,this._name=e.slice(1,-1);break;default:this.required=!0,this._name=e;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}argParser(e){return this.parseArg=e,this}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Ss(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function ks(a){let e=a.name()+(a.variadic===!0?"...":"");return a.required?"<"+e+">":"["+e+"]"}Yo.Argument=Jo;Yo.humanReadableArgName=ks});var Zo=Tt(xi=>{"use strict";var{humanReadableArgName:Ts}=ao(),Qo=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(o=>!o._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((o,r)=>o.name().localeCompare(r.name())),t}compareOptions(e,t){let n=o=>o.short?o.short.replace(/^-/,""):o.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(o=>!o.hidden),n=e._getHelpOption();if(n&&!n.hidden){let o=n.short&&e._findOption(n.short),r=n.long&&e._findOption(n.long);!o&&!r?t.push(n):n.long&&!r?t.push(e.createOption(n.long,n.description)):n.short&&!o&&t.push(e.createOption(n.short,n.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let n=e.parent;n;n=n.parent){let o=n.options.filter(r=>!r.hidden);t.push(...o)}return this.sortOptions&&t.sort(this.compareOptions),t}visibleArguments(e){return e._argsDescription&&e.registeredArguments.forEach(t=>{t.description=t.description||e._argsDescription[t.name()]||""}),e.registeredArguments.find(t=>t.description)?e.registeredArguments:[]}subcommandTerm(e){let t=e.registeredArguments.map(n=>Ts(n)).join(" ");return e._name+(e._aliases[0]?"|"+e._aliases[0]:"")+(e.options.length?" [options]":"")+(t?" "+t:"")}optionTerm(e){return e.flags}argumentTerm(e){return e.name()}longestSubcommandTermLength(e,t){return t.visibleCommands(e).reduce((n,o)=>Math.max(n,t.subcommandTerm(o).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,o)=>Math.max(n,t.optionTerm(o).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,o)=>Math.max(n,t.optionTerm(o).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,o)=>Math.max(n,t.argumentTerm(o).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let o=e.parent;o;o=o.parent)n=o.name()+" "+n;return n+t+" "+e.usage()}commandDescription(e){return e.description()}subcommandDescription(e){return e.summary()||e.description()}optionDescription(e){let t=[];return e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&(e.required||e.optional||e.isBoolean()&&typeof e.defaultValue=="boolean")&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),e.presetArg!==void 0&&e.optional&&t.push(`preset: ${JSON.stringify(e.presetArg)}`),e.envVar!==void 0&&t.push(`env: ${e.envVar}`),t.length>0?`${e.description} (${t.join(", ")})`:e.description}argumentDescription(e){let t=[];if(e.argChoices&&t.push(`choices: ${e.argChoices.map(n=>JSON.stringify(n)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let n=`(${t.join(", ")})`;return e.description?`${e.description} ${n}`:n}return e.description}formatHelp(e,t){let n=t.padWidth(e,t),o=t.helpWidth||80,r=2,s=2;function m(h,T){if(T){let V=`${h.padEnd(n+s)}${T}`;return t.wrap(V,o-r,n+s)}return h}function d(h){return h.join(`
|
|
4
4
|
`).replace(/^/gm," ".repeat(r))}let u=[`Usage: ${t.commandUsage(e)}`,""],i=t.commandDescription(e);i.length>0&&(u=u.concat([t.wrap(i,o,0),""]));let c=t.visibleArguments(e).map(h=>m(t.argumentTerm(h),t.argumentDescription(h)));c.length>0&&(u=u.concat(["Arguments:",d(c),""]));let _=t.visibleOptions(e).map(h=>m(t.optionTerm(h),t.optionDescription(h)));if(_.length>0&&(u=u.concat(["Options:",d(_),""])),this.showGlobalOptions){let h=t.visibleGlobalOptions(e).map(T=>m(t.optionTerm(T),t.optionDescription(T)));h.length>0&&(u=u.concat(["Global Options:",d(h),""]))}let P=t.visibleCommands(e).map(h=>m(t.subcommandTerm(h),t.subcommandDescription(h)));return P.length>0&&(u=u.concat(["Commands:",d(P),""])),u.join(`
|
|
5
5
|
`)}padWidth(e,t){return Math.max(t.longestOptionTermLength(e,t),t.longestGlobalOptionTermLength(e,t),t.longestSubcommandTermLength(e,t),t.longestArgumentTermLength(e,t))}wrap(e,t,n,o=40){let r=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",s=new RegExp(`[\\n][${r}]+`);if(e.match(s))return e;let m=t-n;if(m<o)return e;let d=e.slice(0,n),u=e.slice(n).replace(`\r
|
|
6
6
|
`,`
|
|
7
7
|
`),i=" ".repeat(n),_="\\s\u200B",P=new RegExp(`
|
|
8
8
|
|.{1,${m-1}}([${_}]|$)|[^${_}]+?([${_}]|$)`,"g"),h=u.match(P)||[];return d+h.map((T,V)=>T===`
|
|
9
9
|
`?"":(V>0?i:"")+T.trimEnd()).join(`
|
|
10
|
-
`)}};
|
|
10
|
+
`)}};xi.Help=Qo});var or=Tt(nr=>{"use strict";var{InvalidArgumentError:Rs}=vn(),er=class{constructor(e,t){this.flags=e,this.description=t||"",this.required=e.includes("<"),this.optional=e.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(e),this.mandatory=!1;let n=Is(e);this.short=n.shortFlag,this.long=n.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(e,t){return this.defaultValue=e,this.defaultValueDescription=t,this}preset(e){return this.presetArg=e,this}conflicts(e){return this.conflictsWith=this.conflictsWith.concat(e),this}implies(e){let t=e;return typeof e=="string"&&(t={[e]:!0}),this.implied=Object.assign(this.implied||{},t),this}env(e){return this.envVar=e,this}argParser(e){return this.parseArg=e,this}makeOptionMandatory(e=!0){return this.mandatory=!!e,this}hideHelp(e=!0){return this.hidden=!!e,this}_concatValue(e,t){return t===this.defaultValue||!Array.isArray(t)?[e]:t.concat(e)}choices(e){return this.argChoices=e.slice(),this.parseArg=(t,n)=>{if(!this.argChoices.includes(t))throw new Rs(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,n):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return As(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},tr=class{constructor(e){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,e.forEach(t=>{t.negate?this.negativeOptions.set(t.attributeName(),t):this.positiveOptions.set(t.attributeName(),t)}),this.negativeOptions.forEach((t,n)=>{this.positiveOptions.has(n)&&this.dualOptions.add(n)})}valueFromOption(e,t){let n=t.attributeName();if(!this.dualOptions.has(n))return!0;let o=this.negativeOptions.get(n).presetArg,r=o!==void 0?o:!1;return t.negate===(r===e)}};function As(a){return a.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Is(a){let e,t,n=a.split(/[ |,]+/);return n.length>1&&!/^[[<]/.test(n[1])&&(e=n.shift()),t=n.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}nr.Option=er;nr.DualOptions=tr});var _i=Tt(bi=>{"use strict";function Ps(a,e){if(Math.abs(a.length-e.length)>3)return Math.max(a.length,e.length);let t=[];for(let n=0;n<=a.length;n++)t[n]=[n];for(let n=0;n<=e.length;n++)t[0][n]=n;for(let n=1;n<=e.length;n++)for(let o=1;o<=a.length;o++){let r=1;a[o-1]===e[n-1]?r=0:r=1,t[o][n]=Math.min(t[o-1][n]+1,t[o][n-1]+1,t[o-1][n-1]+r),o>1&&n>1&&a[o-1]===e[n-2]&&a[o-2]===e[n-1]&&(t[o][n]=Math.min(t[o][n],t[o-2][n-2]+1))}return t[a.length][e.length]}function Os(a,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=a.startsWith("--");t&&(a=a.slice(2),e=e.map(s=>s.slice(2)));let n=[],o=3,r=.4;return e.forEach(s=>{if(s.length<=1)return;let m=Ps(a,s),d=Math.max(a.length,s.length);(d-m)/d>r&&(m<o?(o=m,n=[s]):m===o&&n.push(s))}),n.sort((s,m)=>s.localeCompare(m)),t&&(n=n.map(s=>`--${s}`)),n.length>1?`
|
|
11
11
|
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
12
|
-
(Did you mean ${n[0]}?)`:""}
|
|
13
|
-
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new
|
|
14
|
-
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new sr(e,t,n)),ue.exit(e)}action(e){let t=n=>{let o=this.registeredArguments.length,r=n.slice(0,o);return this._storeOptionsAsProperties?r[o]=this:r[o]=this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=t,this}createOption(e,t){return new
|
|
15
|
-
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),n=t(e).find(o=>this._findCommand(o));if(n){let o=t(this._findCommand(n)).join("|"),r=t(e).join("|");throw new Error(`cannot add command '${r}' as already have command '${o}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let r=e.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let o=(r,s,m)=>{r==null&&e.presetArg!==void 0&&(r=e.presetArg);let d=this.getOptionValue(n);r!==null&&e.parseArg?r=this._callParseArg(e,r,d,s):r!==null&&e.variadic&&(r=e._concatValue(r,d)),r==null&&(e.negate?r=!1:e.isBoolean()||e.optional?r=!0:r=""),this.setOptionValueWithSource(n,r,m)};return this.on("option:"+t,r=>{let s=`error: option '${e.flags}' argument '${r}' is invalid.`;o(r,s,"cli")}),e.envVar&&this.on("optionEnv:"+t,r=>{let s=`error: option '${e.flags}' value '${r}' from env '${e.envVar}' is invalid.`;o(r,s,"env")}),this}_optionEx(e,t,n,o,r){if(typeof t=="object"&&t instanceof
|
|
12
|
+
(Did you mean ${n[0]}?)`:""}bi.suggestSimilar=Os});var ki=Tt(Si=>{"use strict";var Ds=en("events").EventEmitter,rr=en("child_process"),dt=en("path"),ir=en("fs"),ue=en("process"),{Argument:js,humanReadableArgName:Bs}=ao(),{CommanderError:sr}=vn(),{Help:$s}=Zo(),{Option:yi,DualOptions:Vs}=or(),{suggestSimilar:Ci}=_i(),ar=class a extends Ds{constructor(e){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=e||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:t=>ue.stdout.write(t),writeErr:t=>ue.stderr.write(t),getOutHelpWidth:()=>ue.stdout.isTTY?ue.stdout.columns:void 0,getErrHelpWidth:()=>ue.stderr.isTTY?ue.stderr.columns:void 0,outputError:(t,n)=>n(t)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(e){return this._outputConfiguration=e._outputConfiguration,this._helpOption=e._helpOption,this._helpCommand=e._helpCommand,this._helpConfiguration=e._helpConfiguration,this._exitCallback=e._exitCallback,this._storeOptionsAsProperties=e._storeOptionsAsProperties,this._combineFlagAndOptionalValue=e._combineFlagAndOptionalValue,this._allowExcessArguments=e._allowExcessArguments,this._enablePositionalOptions=e._enablePositionalOptions,this._showHelpAfterError=e._showHelpAfterError,this._showSuggestionAfterError=e._showSuggestionAfterError,this}_getCommandAndAncestors(){let e=[];for(let t=this;t;t=t.parent)e.push(t);return e}command(e,t,n){let o=t,r=n;typeof o=="object"&&o!==null&&(r=o,o=null),r=r||{};let[,s,m]=e.match(/([^ ]+) *(.*)/),d=this.createCommand(s);return o&&(d.description(o),d._executableHandler=!0),r.isDefault&&(this._defaultCommandName=d._name),d._hidden=!!(r.noHelp||r.hidden),d._executableFile=r.executableFile||null,m&&d.arguments(m),this._registerCommand(d),d.parent=this,d.copyInheritedSettings(this),o?this:d}createCommand(e){return new a(e)}createHelp(){return Object.assign(new $s,this.configureHelp())}configureHelp(e){return e===void 0?this._helpConfiguration:(this._helpConfiguration=e,this)}configureOutput(e){return e===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,e),this)}showHelpAfterError(e=!0){return typeof e!="string"&&(e=!!e),this._showHelpAfterError=e,this}showSuggestionAfterError(e=!0){return this._showSuggestionAfterError=!!e,this}addCommand(e,t){if(!e._name)throw new Error(`Command passed to .addCommand() must have a name
|
|
13
|
+
- specify the name in Command constructor or using .name()`);return t=t||{},t.isDefault&&(this._defaultCommandName=e._name),(t.noHelp||t.hidden)&&(e._hidden=!0),this._registerCommand(e),e.parent=this,e._checkForBrokenPassThrough(),this}createArgument(e,t){return new js(e,t)}argument(e,t,n,o){let r=this.createArgument(e,t);return typeof n=="function"?r.default(o).argParser(n):r.default(n),this.addArgument(r),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,n,o]=e.match(/([^ ]+) *(.*)/),r=t??"display help for command",s=this.createCommand(n);return s.helpOption(!1),o&&s.arguments(o),r&&s.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=s,this}addHelpCommand(e,t){return typeof e!="object"?(this.helpCommand(e,t),this):(this._addImplicitHelpCommand=!0,this._helpCommand=e,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(e,t){let n=["preSubcommand","preAction","postAction"];if(!n.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
|
|
14
|
+
Expecting one of '${n.join("', '")}'`);return this._lifeCycleHooks[e]?this._lifeCycleHooks[e].push(t):this._lifeCycleHooks[e]=[t],this}exitOverride(e){return e?this._exitCallback=e:this._exitCallback=t=>{if(t.code!=="commander.executeSubCommandAsync")throw t},this}_exit(e,t,n){this._exitCallback&&this._exitCallback(new sr(e,t,n)),ue.exit(e)}action(e){let t=n=>{let o=this.registeredArguments.length,r=n.slice(0,o);return this._storeOptionsAsProperties?r[o]=this:r[o]=this.opts(),r.push(this),e.apply(this,r)};return this._actionHandler=t,this}createOption(e,t){return new yi(e,t)}_callParseArg(e,t,n,o){try{return e.parseArg(t,n)}catch(r){if(r.code==="commander.invalidArgument"){let s=`${o} ${r.message}`;this.error(s,{exitCode:r.exitCode,code:r.code})}throw r}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let n=e.long&&this._findOption(e.long)?e.long:e.short;throw new Error(`Cannot add option '${e.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${n}'
|
|
15
|
+
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=o=>[o.name()].concat(o.aliases()),n=t(e).find(o=>this._findCommand(o));if(n){let o=t(this._findCommand(n)).join("|"),r=t(e).join("|");throw new Error(`cannot add command '${r}' as already have command '${o}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let r=e.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let o=(r,s,m)=>{r==null&&e.presetArg!==void 0&&(r=e.presetArg);let d=this.getOptionValue(n);r!==null&&e.parseArg?r=this._callParseArg(e,r,d,s):r!==null&&e.variadic&&(r=e._concatValue(r,d)),r==null&&(e.negate?r=!1:e.isBoolean()||e.optional?r=!0:r=""),this.setOptionValueWithSource(n,r,m)};return this.on("option:"+t,r=>{let s=`error: option '${e.flags}' argument '${r}' is invalid.`;o(r,s,"cli")}),e.envVar&&this.on("optionEnv:"+t,r=>{let s=`error: option '${e.flags}' value '${r}' from env '${e.envVar}' is invalid.`;o(r,s,"env")}),this}_optionEx(e,t,n,o,r){if(typeof t=="object"&&t instanceof yi)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let s=this.createOption(t,n);if(s.makeOptionMandatory(!!e.mandatory),typeof o=="function")s.default(r).argParser(o);else if(o instanceof RegExp){let m=o;o=(d,u)=>{let i=m.exec(d);return i?i[0]:u},s.default(r).argParser(o)}else s.default(o);return this.addOption(s)}option(e,t,n,o){return this._optionEx({},e,t,n,o)}requiredOption(e,t,n,o){return this._optionEx({mandatory:!0},e,t,n,o)}combineFlagAndOptionalValue(e=!0){return this._combineFlagAndOptionalValue=!!e,this}allowUnknownOption(e=!0){return this._allowUnknownOption=!!e,this}allowExcessArguments(e=!0){return this._allowExcessArguments=!!e,this}enablePositionalOptions(e=!0){return this._enablePositionalOptions=!!e,this}passThroughOptions(e=!0){return this._passThroughOptions=!!e,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(e=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!e,this}getOptionValue(e){return this._storeOptionsAsProperties?this[e]:this._optionValues[e]}setOptionValue(e,t){return this.setOptionValueWithSource(e,t,void 0)}setOptionValueWithSource(e,t,n){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=n,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(n=>{n.getOptionValueSource(e)!==void 0&&(t=n.getOptionValueSource(e))}),t}_prepareUserArgs(e,t){if(e!==void 0&&!Array.isArray(e))throw new Error("first parameter to parse must be array or undefined");if(t=t||{},e===void 0&&t.from===void 0){ue.versions?.electron&&(t.from="electron");let o=ue.execArgv??[];(o.includes("-e")||o.includes("--eval")||o.includes("-p")||o.includes("--print"))&&(t.from="eval")}e===void 0&&(e=ue.argv),this.rawArgs=e.slice();let n;switch(t.from){case void 0:case"node":this._scriptPath=e[1],n=e.slice(2);break;case"electron":ue.defaultApp?(this._scriptPath=e[1],n=e.slice(2)):n=e.slice(1);break;case"user":n=e.slice(0);break;case"eval":n=e.slice(1);break;default:throw new Error(`unexpected parse option { from: '${t.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",n}parse(e,t){let n=this._prepareUserArgs(e,t);return this._parseCommand([],n),this}async parseAsync(e,t){let n=this._prepareUserArgs(e,t);return await this._parseCommand([],n),this}_executeSubCommand(e,t){t=t.slice();let n=!1,o=[".js",".ts",".tsx",".mjs",".cjs"];function r(i,c){let _=dt.resolve(i,c);if(ir.existsSync(_))return _;if(o.includes(dt.extname(c)))return;let P=o.find(h=>ir.existsSync(`${_}${h}`));if(P)return`${_}${P}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=e._executableFile||`${this._name}-${e._name}`,m=this._executableDir||"";if(this._scriptPath){let i;try{i=ir.realpathSync(this._scriptPath)}catch{i=this._scriptPath}m=dt.resolve(dt.dirname(i),m)}if(m){let i=r(m,s);if(!i&&!e._executableFile&&this._scriptPath){let c=dt.basename(this._scriptPath,dt.extname(this._scriptPath));c!==this._name&&(i=r(m,`${c}-${e._name}`))}s=i||s}n=o.includes(dt.extname(s));let d;ue.platform!=="win32"?n?(t.unshift(s),t=Ei(ue.execArgv).concat(t),d=rr.spawn(ue.argv[0],t,{stdio:"inherit"})):d=rr.spawn(s,t,{stdio:"inherit"}):(t.unshift(s),t=Ei(ue.execArgv).concat(t),d=rr.spawn(ue.execPath,t,{stdio:"inherit"})),d.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(c=>{ue.on(c,()=>{d.killed===!1&&d.exitCode===null&&d.kill(c)})});let u=this._exitCallback;d.on("close",i=>{i=i??1,u?u(new sr(i,"commander.executeSubCommandAsync","(close)")):ue.exit(i)}),d.on("error",i=>{if(i.code==="ENOENT"){let c=m?`searched for local subcommand relative to directory '${m}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",_=`'${s}' does not exist
|
|
16
16
|
- if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
|
|
17
17
|
- if the default executable name is not suitable, use the executableFile option to supply a custom name or path
|
|
18
18
|
- ${c}`;throw new Error(_)}else if(i.code==="EACCES")throw new Error(`'${s}' not executable`);if(!u)ue.exit(1);else{let c=new sr(1,"commander.executeSubCommandAsync","(error)");c.nestedError=i,u(c)}}),this.runningCommand=d}_dispatchSubcommand(e,t,n){let o=this._findCommand(e);o||this.help({error:!0});let r;return r=this._chainOrCallSubCommandHook(r,o,"preSubcommand"),r=this._chainOrCall(r,()=>{if(o._executableHandler)this._executeSubCommand(o,t.concat(n));else return o._parseCommand(t,n)}),r}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(n,o,r)=>{let s=o;if(o!==null&&n.parseArg){let m=`error: command-argument value '${o}' is invalid for argument '${n.name()}'.`;s=this._callParseArg(n,o,r,m)}return s};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,o)=>{let r=n.defaultValue;n.variadic?o<this.args.length?(r=this.args.slice(o),n.parseArg&&(r=r.reduce((s,m)=>e(n,m,s),n.defaultValue))):r===void 0&&(r=[]):o<this.args.length&&(r=this.args[o],n.parseArg&&(r=e(n,r,n.defaultValue))),t[o]=r}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,o=[];return this._getCommandAndAncestors().reverse().filter(r=>r._lifeCycleHooks[t]!==void 0).forEach(r=>{r._lifeCycleHooks[t].forEach(s=>{o.push({hookedCommand:r,callback:s})})}),t==="postAction"&&o.reverse(),o.forEach(r=>{n=this._chainOrCall(n,()=>r.callback(r.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let o=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(r=>{o=this._chainOrCall(o,()=>r(this,t))}),o}_parseCommand(e,t){let n=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(n.operands),t=n.unknown,this.args=e.concat(t),e&&this._findCommand(e[0]))return this._dispatchSubcommand(e[0],e.slice(1),t);if(this._getHelpCommand()&&e[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(e[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(t),this._dispatchSubcommand(this._defaultCommandName,e,t);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(n.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},r=`command:${this.name()}`;if(this._actionHandler){o(),this._processArguments();let s;return s=this._chainOrCallHooks(s,"preAction"),s=this._chainOrCall(s,()=>this._actionHandler(this.processedArgs)),this.parent&&(s=this._chainOrCall(s,()=>{this.parent.emit(r,e,t)})),s=this._chainOrCallHooks(s,"postAction"),s}if(this.parent&&this.parent.listenerCount(r))o(),this._processArguments(),this.parent.emit(r,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(o(),this._processArguments())}else this.commands.length?(o(),this.help({error:!0})):(o(),this._processArguments())}_findCommand(e){if(e)return this.commands.find(t=>t._name===e||t._aliases.includes(e))}_findOption(e){return this.options.find(t=>t.is(e))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(e=>{e.options.forEach(t=>{t.mandatory&&e.getOptionValue(t.attributeName())===void 0&&e.missingMandatoryOptionValue(t)})})}_checkForConflictingLocalOptions(){let e=this.options.filter(n=>{let o=n.attributeName();return this.getOptionValue(o)===void 0?!1:this.getOptionValueSource(o)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let o=e.find(r=>n.conflictsWith.includes(r.attributeName()));o&&this._conflictingOption(n,o)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],o=t,r=e.slice();function s(d){return d.length>1&&d[0]==="-"}let m=null;for(;r.length;){let d=r.shift();if(d==="--"){o===n&&o.push(d),o.push(...r);break}if(m&&!s(d)){this.emit(`option:${m.name()}`,d);continue}if(m=null,s(d)){let u=this._findOption(d);if(u){if(u.required){let i=r.shift();i===void 0&&this.optionMissingArgument(u),this.emit(`option:${u.name()}`,i)}else if(u.optional){let i=null;r.length>0&&!s(r[0])&&(i=r.shift()),this.emit(`option:${u.name()}`,i)}else this.emit(`option:${u.name()}`);m=u.variadic?u:null;continue}}if(d.length>2&&d[0]==="-"&&d[1]!=="-"){let u=this._findOption(`-${d[1]}`);if(u){u.required||u.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${u.name()}`,d.slice(2)):(this.emit(`option:${u.name()}`),r.unshift(`-${d.slice(2)}`));continue}}if(/^--[^=]+=/.test(d)){let u=d.indexOf("="),i=this._findOption(d.slice(0,u));if(i&&(i.required||i.optional)){this.emit(`option:${i.name()}`,d.slice(u+1));continue}}if(s(d)&&(o=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(d)){t.push(d),r.length>0&&n.push(...r);break}else if(this._getHelpCommand()&&d===this._getHelpCommand().name()){t.push(d),r.length>0&&t.push(...r);break}else if(this._defaultCommandName){n.push(d),r.length>0&&n.push(...r);break}}if(this._passThroughOptions){o.push(d),r.length>0&&o.push(...r);break}o.push(d)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let o=this.options[n].attributeName();e[o]=o===this._versionOptionName?this._version:this[o]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
|
|
19
19
|
`,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
|
|
20
20
|
`):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
|
|
21
|
-
`),this.outputHelp({error:!0}));let n=t||{},o=n.exitCode||1,r=n.code||"commander.error";this._exit(o,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in ue.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,ue.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new
|
|
22
|
-
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let o=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>
|
|
21
|
+
`),this.outputHelp({error:!0}));let n=t||{},o=n.exitCode||1,r=n.code||"commander.error";this._exit(o,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in ue.env){let t=e.attributeName();(this.getOptionValue(t)===void 0||["default","config","env"].includes(this.getOptionValueSource(t)))&&(e.required||e.optional?this.emit(`optionEnv:${e.name()}`,ue.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Vs(this.options),t=n=>this.getOptionValue(n)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(n));this.options.filter(n=>n.implied!==void 0&&t(n.attributeName())&&e.valueFromOption(this.getOptionValue(n.attributeName()),n)).forEach(n=>{Object.keys(n.implied).filter(o=>!t(o)).forEach(o=>{this.setOptionValueWithSource(o,n.implied[o],"implied")})})}missingArgument(e){let t=`error: missing required argument '${e}'`;this.error(t,{code:"commander.missingArgument"})}optionMissingArgument(e){let t=`error: option '${e.flags}' argument missing`;this.error(t,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(e){let t=`error: required option '${e.flags}' not specified`;this.error(t,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(e,t){let n=s=>{let m=s.attributeName(),d=this.getOptionValue(m),u=this.options.find(c=>c.negate&&m===c.attributeName()),i=this.options.find(c=>!c.negate&&m===c.attributeName());return u&&(u.presetArg===void 0&&d===!1||u.presetArg!==void 0&&d===u.presetArg)?u:i||s},o=s=>{let m=n(s),d=m.attributeName();return this.getOptionValueSource(d)==="env"?`environment variable '${m.envVar}'`:`option '${m.flags}'`},r=`error: ${o(e)} cannot be used with ${o(t)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let o=[],r=this;do{let s=r.createHelp().visibleOptions(r).filter(m=>m.long).map(m=>m.long);o=o.concat(s),r=r.parent}while(r&&!r._enablePositionalOptions);t=Ci(e,o)}let n=`error: unknown option '${e}'${t}`;this.error(n,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,n=t===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let o=[];this.createHelp().visibleCommands(this).forEach(r=>{o.push(r.name()),r.alias()&&o.push(r.alias())}),t=Ci(e,o)}let n=`error: unknown command '${e}'${t}`;this.error(n,{code:"commander.unknownCommand"})}version(e,t,n){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",n=n||"output the version number";let o=this.createOption(t,n);return this._versionOptionName=o.attributeName(),this._registerOption(o),this.on("option:"+o.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
22
|
+
`),this._exit(0,"commander.version",e)}),this}description(e,t){return e===void 0&&t===void 0?this._description:(this._description=e,t&&(this._argsDescription=t),this)}summary(e){return e===void 0?this._summary:(this._summary=e,this)}alias(e){if(e===void 0)return this._aliases[0];let t=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(t=this.commands[this.commands.length-1]),e===t._name)throw new Error("Command alias can't be the same as its name");let n=this.parent?._findCommand(e);if(n){let o=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${o}'`)}return t._aliases.push(e),this}aliases(e){return e===void 0?this._aliases:(e.forEach(t=>this.alias(t)),this)}usage(e){if(e===void 0){if(this._usage)return this._usage;let t=this.registeredArguments.map(n=>Bs(n));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?t:[]).join(" ")}return this._usage=e,this}name(e){return e===void 0?this._name:(this._name=e,this)}nameFromFilename(e){return this._name=dt.basename(e,dt.extname(e)),this}executableDir(e){return e===void 0?this._executableDir:(this._executableDir=e,this)}helpInformation(e){let t=this.createHelp();return t.helpWidth===void 0&&(t.helpWidth=e&&e.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth()),t.formatHelp(this,t)}_getHelpContext(e){e=e||{};let t={error:!!e.error},n;return t.error?n=o=>this._outputConfiguration.writeErr(o):n=o=>this._outputConfiguration.writeOut(o),t.write=e.write||n,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let n=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(r=>r.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let o=this.helpInformation(n);if(t&&(o=t(o),typeof o!="string"&&!Buffer.isBuffer(o)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(o),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(r=>r.emit("afterAllHelp",n))}helpOption(e,t){return typeof e=="boolean"?(e?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(e=e??"-h, --help",t=t??"display help for command",this._helpOption=this.createOption(e,t),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(e){return this._helpOption=e,this}help(e){this.outputHelp(e);let t=ue.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let n=["beforeAll","before","after","afterAll"];if(!n.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
23
23
|
Expecting one of '${n.join("', '")}'`);let o=`${e}Help`;return this.on(o,r=>{let s;typeof t=="function"?s=t({error:r.error,command:r.command}):s=t,s&&r.write(`${s}
|
|
24
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Ci(a){return a.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",o="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?o=r[3]:n=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],n=r[3],o=r[4]),t&&o!=="0"?`${t}=${n}:${parseInt(o)+1}`:e})}Ei.Command=ar});var Ai=Tt(We=>{"use strict";var{Argument:ki}=ao(),{Command:lr}=Si(),{CommanderError:$s,InvalidArgumentError:Ti}=hn(),{Help:Vs}=Zo(),{Option:Ri}=or();We.program=new lr;We.createCommand=a=>new lr(a);We.createOption=(a,e)=>new Ri(a,e);We.createArgument=(a,e)=>new ki(a,e);We.Command=lr;We.Option=Ri;We.Argument=ki;We.Help=Vs;We.CommanderError=$s;We.InvalidArgumentError=Ti;We.InvalidOptionArgumentError=Ti});var fr=H(Ye(),1);import Ce from"process";var k=H(Ye(),1);var Yr=H(Ye(),1);var Ut=H(X(),1);function Qr({path:a}){return a.length===0?null:(0,Ut.jsx)(b,{children:a.map((e,t)=>(0,Ut.jsxs)(Yr.default.Fragment,{children:[t>0&&(0,Ut.jsx)(l,{color:g.muted,children:" \u203A "}),(0,Ut.jsx)(l,{color:g.dimmed,children:e})]},t))})}var ee=H(X(),1);function Zr({profile:a,environment:e,model:t,tokenValid:n,sessionId:o,runCount:r,viewMode:s,breadcrumb:m}){let{stdout:d}=Er(),u=d?.columns??80,i=e==="stage";return(0,ee.jsxs)(b,{flexDirection:"column",children:[(0,ee.jsx)(l,{color:g.muted,children:"\u2500".repeat(u)}),m&&m.length>0&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Qr,{path:m})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsxs)(b,{gap:1,children:[(0,ee.jsx)(l,{color:g.dimmed,children:"Model:"}),(0,ee.jsx)(l,{color:g.dimmed,children:t}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsx)(l,{color:g.dimmed,children:"Session:"}),(0,ee.jsx)(l,{color:g.dimmed,children:o}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsx)(l,{color:n?g.green:g.red,children:"\u25CF"}),(0,ee.jsx)(l,{color:g.dimmed,children:n?"authenticated":"not logged in"})]})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsxs)(b,{gap:1,children:[(0,ee.jsx)(l,{color:g.dimmed,children:a??"no profile"}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),i?(0,ee.jsx)(l,{color:g.yellow,bold:!0,children:"\u26A0 stage"}):(0,ee.jsx)(l,{color:g.green,children:e}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsxs)(l,{color:g.dimmed,children:["runs: ",r]})]})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(l,{dimColor:!0,children:Sr()})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(l,{dimColor:!0,children:s==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var Pt=H(Ye(),1);var dn=[[[" "],[" "],[" "],[" "],["\u2584","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],[" "],[" "],[" "],[" "],[" "],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7"],[" "],[" "],[" "],[" "]],[[" "],[" "],["\u2584","#875faf"],["\u2584","#af87d7","#875faf"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7","#875faf"],["\u2584","#875faf"],[" "],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2584","#000000","#af87d7"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#af87d7"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#585858","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2588","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#000000","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],[" "],["\u2580","#875faf"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2580","#875faf"],[" "],[" "]],[[" "],[" "],[" "],[" "],[" "],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],[" "],[" "],[" "],[" "],[" "]]];var z=H(X(),1),Yn="#af87d7",jo="#875faf",ei="#5b3a7a",rs="#ff9500",is="#ea580c";var Bo="#666666",ss="#555555",It=[[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],$o=It.map(([,a])=>[...a]);function ti({visibleRows:a=It.length}){let e=Math.min(a,It.length);return(0,z.jsxs)(b,{flexDirection:"column",children:[It.slice(0,e).map(([t,n],o)=>{let r=$o[o];return(0,z.jsx)(l,{children:r.map((s,m)=>{if(s==="\u2588")return(0,z.jsx)(l,{color:t,children:"\u2588"},m);let d=m>0&&r[m-1]==="\u2588",u=o>0&&m>0&&$o[o-1][m-1]==="\u2588";return d||u?(0,z.jsx)(l,{color:ei,children:"\u2592"},m):(0,z.jsx)(l,{children:" "},m)})},o)}),e>=It.length&&(0,z.jsxs)(l,{children:[" ",$o[It.length-1].map((t,n)=>t==="\u2588"?(0,z.jsx)(l,{color:ei,children:"\u2580"},n):(0,z.jsx)(l,{children:" "},n))]})]})}function as({visibleRows:a=dn.length}){let e=Math.min(a,dn.length);return(0,z.jsx)(b,{flexDirection:"column",children:dn.slice(0,e).map((t,n)=>(0,z.jsx)(l,{children:t.map((o,r)=>{let s=o[0],m=o[1],d=o[2];return m?(0,z.jsx)(l,{color:m,backgroundColor:d,children:s},r):(0,z.jsx)(l,{children:s},r)})},n))})}function Qn({size:a="compact",helmetVisibleRows:e=dn.length,textVisibleRows:t=It.length,showMeta:n=!1,user:o=null,authenticated:r=!1,version:s=""}){return a==="compact"?(0,z.jsx)(ti,{}):(0,z.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,z.jsx)(l,{color:rs,italic:!0,children:" Welcome to"}),(0,z.jsx)(l,{children:" "}),(0,z.jsxs)(b,{gap:2,children:[(0,z.jsx)(as,{visibleRows:e}),(0,z.jsxs)(b,{flexDirection:"column",children:[(0,z.jsx)(ti,{visibleRows:t}),(0,z.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,z.jsx)(l,{color:is,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(l,{children:" "}),(0,z.jsxs)(l,{children:[(0,z.jsx)(l,{color:Bo,children:" Browser automation powered by AI. "}),(0,z.jsx)(l,{color:ss,children:`v${s}`})]}),(0,z.jsx)(l,{children:" "}),(0,z.jsx)(l,{children:(0,z.jsx)(l,{color:Bo,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,z.jsx)(l,{children:(0,z.jsx)(l,{color:Bo,children:" data \u2014 right from your terminal."})}),(0,z.jsx)(l,{children:" "})]})]})}var Fo=H(X(),1),Vo=8,Lo=7;function ni({onComplete:a}){let[e,t]=(0,Pt.useState)(0),[n,o]=(0,Pt.useState)(0),[r,s]=(0,Pt.useState)(!1),[m]=(0,Pt.useState)(()=>{let d=new Le,u=d.getActiveProfile(),i=d.getDefaultEnv(),c=u?d.loadCredentials(u,i):null,_=u?d.loadBasicAuth(u,i):null;return{authenticated:!!(c||_),user:_?.username??u??null}});return So(()=>{t(d=>Math.min(Vo,d+1))},e<Vo?60:null),So(()=>{o(d=>Math.min(Lo,d+1))},n<Lo?80:null),(0,Pt.useEffect)(()=>{e>=Vo&&n>=Lo&&!r&&(s(!0),a?.())},[e,n,r,a]),(0,Fo.jsx)(b,{flexDirection:"column",children:(0,Fo.jsx)(Qn,{size:"full",helmetVisibleRows:e,textVisibleRows:n,showMeta:r,user:m.user,authenticated:m.authenticated,version:st})})}var lt=H(X(),1);function oi({entry:a}){return a.type==="input"?(0,lt.jsxs)(b,{children:[(0,lt.jsx)(l,{color:g.purple,children:"\u276F "}),(0,lt.jsx)(l,{children:a.text})]}):a.type==="error"?(0,lt.jsx)(b,{marginLeft:2,children:(0,lt.jsx)(l,{color:g.red,children:a.text})}):(0,lt.jsx)(b,{marginLeft:2,children:(0,lt.jsx)(l,{color:a.type==="info"?g.dimmed:void 0,children:a.text})})}var ot=H(Ye(),1);var Re=H(X(),1);function ls(a,e){let t=[],o=Math.max(e-4,30);t.push({type:"title",text:a.title});for(let r=0;r<a.sections.length;r++){let s=a.sections[r];r>0&&t.push({type:"divider",text:"\u2500".repeat(o)}),s.label&&t.push({type:"header",text:s.label});let m=s.entries.length>0?Math.max(...s.entries.map(d=>d.key.length)):0;for(let d of s.entries){let u="\xB7".repeat(Math.max(2,m-d.key.length+3)),i=`${d.key} ${u} ${d.value}`;t.push({type:"entry",text:i,color:d.color})}}return t.push({type:"footer",text:"esc back"}),t}function ri({data:a,width:e=60}){let t=ls(a,e);return(0,Re.jsx)(b,{flexDirection:"column",borderStyle:"round",borderColor:g.primary,paddingX:2,paddingY:1,children:t.map((n,o)=>{if(n.type==="title")return(0,Re.jsx)(l,{color:g.primary,bold:!0,children:n.text},o);if(n.type==="header")return(0,Re.jsx)(b,{marginTop:1,children:(0,Re.jsx)(l,{color:g.dim,children:n.text})},o);if(n.type==="divider")return(0,Re.jsx)(b,{marginTop:1,marginBottom:0,children:(0,Re.jsx)(l,{color:g.ambient,children:n.text})},o);if(n.type==="footer")return(0,Re.jsx)(b,{marginTop:1,children:(0,Re.jsx)(l,{color:g.dim,children:n.text})},o);let r=n.text.match(/^(.+?) (·+) (.+)$/);return r?(0,Re.jsxs)(l,{children:[(0,Re.jsxs)(l,{color:g.secondary,children:[r[1]," "]}),(0,Re.jsxs)(l,{color:g.ambient,children:[r[2]," "]}),(0,Re.jsx)(l,{color:n.color??g.base,children:r[3]})]},o):(0,Re.jsx)(l,{color:n.color??g.base,children:n.text},o)})})}var be=H(X(),1);function No(a,e){let t=[];function n(o,r){for(let s of o)t.push({item:s,depth:r}),s.type==="submenu"&&s.children&&e.length>r&&e[r]===s.id&&n(s.children,r+1)}return n(a,0),t}function Mo({items:a,onRunSelected:e,initialExpandedPath:t,onDismiss:n,renderLoginWizard:o,renderProfilesView:r,renderChromeProfilePicker:s,renderProjectPicker:m,renderFolderPicker:d,renderWindowSizePicker:u,onActiveViewChange:i}){let[c,_]=(0,ot.useState)(()=>{let E=t??[],N=No(a,E),j=0;if(E.length>0){let W=N.findIndex(re=>re.item.id===E[0]);W>=0&&W+1<N.length&&(j=W+1)}return{expandedPath:E,selectedIndex:j,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),P=No(a,c.expandedPath),h=P[c.selectedIndex]?.item,T=(0,ot.useRef)(null),V=(0,ot.useCallback)(E=>{_(N=>({...N,feedback:E})),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{_(N=>({...N,feedback:null})),T.current=null},4e3)},[]);(0,ot.useEffect)(()=>()=>{T.current&&clearTimeout(T.current)},[]),(0,ot.useEffect)(()=>{i?.(c.activeView)},[c.activeView,i]);let A=(0,ot.useCallback)(()=>{_(E=>({...E,activeView:null,infoData:null}))},[]);return He((E,N)=>{if(c.activeView==="infoView"){N.escape&&A();return}if(!(c.activeView==="loginWizard"||c.activeView==="profilesView"||c.activeView==="chromeProfilePicker"||c.activeView==="projectPicker"||c.activeView==="folderPicker"||c.activeView==="windowSizePicker")){if(c.isEditing){if(N.escape){_(j=>({...j,isEditing:!1,inputValue:""}));return}if(N.return){let j=c.inputValue.trim();if(h?.onValue&&j){let W=h.currentValue;h.onValue(j),V(W?`${h.label}: ${W} \u2192 ${j}`:`${h.label}: ${j}`)}_(W=>({...W,isEditing:!1,inputValue:""}));return}if(N.backspace||N.delete){_(j=>({...j,inputValue:j.inputValue.slice(0,-1)}));return}E&&!N.ctrl&&!N.meta&&_(j=>({...j,inputValue:j.inputValue+E}));return}if(c.isSelecting&&h?.options){let j=h.options;if(N.escape){_(W=>({...W,isSelecting:!1}));return}if(N.upArrow){_(W=>({...W,inputValue:String(Math.max(0,Number(W.inputValue||"0")-1))}));return}if(N.downArrow){_(W=>({...W,inputValue:String(Math.min(j.length-1,Number(W.inputValue||"0")+1))}));return}if(N.return){let W=Number(c.inputValue||"0"),re=j[W];if(re&&h.onValue){let Ae=h.currentValue;h.onValue(re.value),V(Ae?`${h.label}: ${Ae} \u2192 ${re.label}`:`${h.label}: ${re.label}`)}_(Ae=>({...Ae,isSelecting:!1,inputValue:""}));return}return}if(N.upArrow){_(j=>({...j,selectedIndex:Math.max(0,j.selectedIndex-1)}));return}if(N.downArrow){_(j=>({...j,selectedIndex:Math.min(P.length-1,j.selectedIndex+1)}));return}if(N.escape){if(c.expandedPath.length===0){n?.();return}_(j=>{let W=j.expandedPath.slice(0,-1),re=No(a,W),Ae=j.expandedPath[j.expandedPath.length-1],Ee=re.findIndex(qe=>qe.item.id===Ae);return{...j,expandedPath:W,selectedIndex:Ee>=0?Ee:0}});return}if(N.return&&h){if(h.id==="run-start"){e();return}if(h.type==="submenu"){let j=P[c.selectedIndex]?.depth??0;_(W=>({...W,expandedPath:[...W.expandedPath.slice(0,j),h.id],selectedIndex:W.selectedIndex+1}));return}if(h.onInfo){let j=h.onInfo();_(W=>({...W,activeView:"infoView",infoData:j}));return}if(h.onLoginWizard){h.onLoginWizard(),_(j=>({...j,activeView:"loginWizard"}));return}if(h.onProfilesView){h.onProfilesView(),_(j=>({...j,activeView:"profilesView"}));return}if(h.onChromeProfilePicker){h.onChromeProfilePicker(),_(j=>({...j,activeView:"chromeProfilePicker"}));return}if(h.onProjectPicker){h.onProjectPicker(),_(j=>({...j,activeView:"projectPicker"}));return}if(h.onFolderPicker){h.onFolderPicker(),_(j=>({...j,activeView:"folderPicker"}));return}if(h.onWindowSizePicker){h.onWindowSizePicker(),_(j=>({...j,activeView:"windowSizePicker"}));return}if(h.type==="action"){h.onAction?.(),h.suppressFeedback||V(`${h.label} done`);return}if(h.type==="select"&&h.options){let j=h.options.findIndex(W=>W.value===h.currentValue);_(W=>({...W,isSelecting:!0,inputValue:String(Math.max(0,j))}));return}if(h.type==="text-input"){_(j=>({...j,isEditing:!0,inputValue:h.currentValue??""}));return}}}}),(0,be.jsx)(b,{flexDirection:"column",paddingX:1,children:c.activeView==="infoView"&&c.infoData?(0,be.jsx)(ri,{data:c.infoData}):c.activeView==="loginWizard"&&o?o(A):c.activeView==="profilesView"&&r?r(A):c.activeView==="chromeProfilePicker"&&s?s(A):c.activeView==="projectPicker"&&m?m(A):c.activeView==="folderPicker"&&d?d(A):c.activeView==="windowSizePicker"&&u?u(A):(0,be.jsxs)(be.Fragment,{children:[P.map(({item:E,depth:N},j)=>{let W=j===c.selectedIndex,re=" ".repeat(N),Ae=W?"\u276F ":" ",Ee=E.type==="submenu"?c.expandedPath.includes(E.id)?"\u25BC ":"\u25B6 ":" ",qe=E.currentValue!=null?` [${E.currentValue}]`:"";if(W&&c.isSelecting&&E.options){let Ne=Number(c.inputValue||"0");return(0,be.jsxs)(b,{flexDirection:"column",children:[(0,be.jsxs)(l,{color:g.cyan,children:[re,Ae,Ee,E.label]}),E.options.map((ie,Qe)=>(0,be.jsxs)(l,{color:Qe===Ne?g.cyan:void 0,children:[re," ",Qe===Ne?"\u276F ":" ",ie.label]},ie.value))]},E.id)}return W&&c.isEditing?(0,be.jsxs)(l,{color:g.cyan,children:[re,Ae,Ee,E.label,": ",c.inputValue,(0,be.jsx)(l,{color:g.dimmed,children:"\u2588"})]},E.id):(0,be.jsxs)(l,{color:W?g.cyan:void 0,dimColor:!W&&N>0,children:[re,Ae,Ee,E.label,(0,be.jsx)(l,{dimColor:!0,children:qe})]},E.id)}),c.feedback&&(0,be.jsx)(b,{marginTop:1,children:(0,be.jsxs)(l,{color:g.green,children:["\u2713 ",c.feedback]})}),(0,be.jsx)($t,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var un=H(Ye(),1);var _e=H(X(),1),Uo=800,Ho=3840,Wo=600,qo=2160;function ii(a,e){if(!e)return"Enter a value";let t=Number(e);if(!Number.isInteger(t))return"Must be a whole number";if(a==="width"){if(t<Uo)return`Min ${Uo}`;if(t>Ho)return`Max ${Ho}`}else{if(t<Wo)return`Min ${Wo}`;if(t>qo)return`Max ${qo}`}return null}function Ko({currentWidth:a,currentHeight:e,onSelect:t,onCancel:n}){let[o,r]=(0,un.useState)("width"),[s,m]=(0,un.useState)(String(a)),[d,u]=(0,un.useState)(String(e)),[i,c]=(0,un.useState)(null);He((P,h)=>{if(h.escape){n();return}if(h.tab||h.rightArrow||h.leftArrow){r(T=>T==="width"?"height":"width"),c(null);return}if(h.return){let T=ii("width",s);if(T){r("width"),c(`Width: ${T}`);return}let V=ii("height",d);if(V){r("height"),c(`Height: ${V}`);return}t(Number(s),Number(d));return}if(h.backspace||h.delete){o==="width"?m(T=>T.slice(0,-1)):u(T=>T.slice(0,-1)),c(null);return}P&&/^\d$/.test(P)&&(o==="width"?m(T=>T+P):u(T=>T+P),c(null))});let _=(P,h,T)=>{let V=o===T,A=V?g.primary:g.secondary;return(0,_e.jsxs)(b,{flexDirection:"column",children:[(0,_e.jsxs)(l,{color:g.dim,children:[" ",P]}),(0,_e.jsx)(b,{borderStyle:"round",borderColor:A,paddingX:1,width:10,children:(0,_e.jsxs)(l,{color:V?g.base:g.dim,children:[h||" ",V?(0,_e.jsx)(l,{color:g.dimmed,children:"\u2588"}):""]})}),(0,_e.jsxs)(l,{color:g.dim,dimColor:!0,children:[" ",T==="width"?`${Uo}\u2013${Ho}`:`${Wo}\u2013${qo}`]})]})};return(0,_e.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,_e.jsx)(l,{color:g.primary,bold:!0,children:"Window Size"}),(0,_e.jsxs)(b,{marginTop:1,gap:1,children:[_("Width",s,"width"),(0,_e.jsx)(b,{alignItems:"center",marginTop:1,children:(0,_e.jsx)(l,{color:g.dim,children:"x"})}),_("Height",d,"height")]}),i&&(0,_e.jsx)(b,{marginTop:1,children:(0,_e.jsx)(l,{color:g.red,children:i})}),(0,_e.jsx)($t,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ye=H(Ye(),1);async function Zn(a,e,t){let n=a.loadCredentials(e,t),o=a.loadClient(e,t);if(n&&o){let s=new Ir(t);await Promise.allSettled([s.revokeToken(n.access_token,o.client_id,"access_token"),s.revokeToken(n.refresh_token,o.client_id,"refresh_token")])}a.deleteProfileFull(e,t);let r=a.listProfiles();return r.length>0&&(a.setActiveProfile(r[0].profile),a.setDefaultEnv(r[0].env)),{profile:e,env:t,switchedTo:r.length>0?r[0]:void 0}}function si(){let[a]=(0,ye.useState)(()=>new Le),[e,t]=(0,ye.useState)(()=>{let h=a.resolveAuth();if(!h)return!1;if(h.method==="basic")return!0;let{credentials:T}=a.getActiveCredentials();return T?T.expires_at>Date.now()/1e3:!1}),n=(0,ye.useRef)(null),o=(0,ye.useRef)(null),r=(0,ye.useCallback)(()=>{let h=a.resolveAuth();return h?{method:h.method,profile:h.profile,env:h.env}:null},[a]),s=(0,ye.useCallback)(async()=>{let{credentials:h,profile:T,env:V}=a.getActiveCredentials();if(!h||!T||!V)return null;let A=h.expires_at,E=Date.now()/1e3;if(A-E<300){if(o.current)return o.current;let N=(async()=>{try{let j=await Pr({creds:a,profile:T,env:V,credentials:h});return j?(t(!0),j.accessToken):null}catch{return t(!1),null}finally{o.current=null}})();return o.current=N,N}return t(!0),h.access_token},[a]),m=(0,ye.useCallback)(()=>{let h=a.resolveAuth();return!h||h.method!=="basic"?null:{username:h.username,access_key:h.access_key}},[a]),d=(0,ye.useCallback)((h,T)=>{n.current?.revoke();let V=me(h),A=m(),E=new Vn(V.controllerBaseUrl,s,A,T);return n.current=E,E},[m,s]),u=(0,ye.useCallback)(()=>n.current,[]),i=(0,ye.useCallback)(()=>{let h=m();if(h)return h;let T=n.current?.cached;return T?{username:T.username,access_key:T.access_key}:null},[m]),c=(0,ye.useCallback)(async()=>{let h=n.current;return h?h.resolve():null},[]),_=(0,ye.useCallback)(async(h="default")=>{let T=a.getDefaultEnv();await new $n(h,T,a).login(),a.setActiveProfile(h);try{let A=new Be;Te(a,A,h,T)}catch{}t(!0)},[a]),P=(0,ye.useCallback)(async()=>{let h=a.getActiveProfile();if(!h)return null;let T=a.getDefaultEnv(),V=await Zn(a,h,T);return t(!1),{profile:V.profile,env:V.env}},[a]);return{creds:a,tokenValid:e,setTokenValid:t,getToken:s,getBasicAuth:m,getAuthInfo:r,login:_,logout:P,initResolver:d,getResolver:u,getResolvedBasicAuth:i,resolveBasicAuth:c}}var ct=H(Ye(),1);import{mkdtempSync as cs,rmSync as ds}from"fs";import{join as us}from"path";import{tmpdir as fs}from"os";function ai(){let[a]=(0,ct.useState)(()=>new Be),e=(0,ct.useRef)(null),t=(0,ct.useRef)(null),n=(0,ct.useRef)(null),o=(0,ct.useCallback)(async s=>{if(e.current)return e.current;if(n.current)return n.current;let m=(async()=>{let d=a.load(),u;if(d.chrome_profile_path)u=d.chrome_profile_path.replace("~",process.env.HOME??"~");else{t.current&&(Rt("tempDir","Previous temp dir removed before retry"),t.current=null);let c=cs(us(fs(),"kane-clean-"));t.current=c,u=c,nt("tempDir",()=>{try{ds(c,{recursive:!0,force:!0})}catch{}})}let i=await Br({userDataDir:u,width:d.window_size.width,height:d.window_size.height,startUrl:s??d.default_url??void 0});return e.current=i,nt("chrome",()=>{i.kill()}),i})();n.current=m;try{return await m}finally{n.current=null}},[a]),r=(0,ct.useCallback)(()=>{Rt("chrome","Chrome killed"),Rt("tempDir","Temp dir removed"),e.current=null,t.current=null},[]);return{ensureChrome:o,killChrome:r}}var eo=[{name:"run",description:"Execute a test run",args:'"objective"'},{name:"login",description:"OAuth login",args:"[--profile name]"},{name:"logout",description:"Logout & revoke tokens",args:"[--profile name]"},{name:"whoami",description:"Show profile info",args:"[--profile name]"},{name:"balance",description:"Show credit balance"},{name:"profiles",description:"Manage profiles",args:"list|switch|delete"},{name:"config",description:"Manage configuration",args:"show|set-window|set-mode|chrome-profile|project|folder"},{name:"new",description:"Start a fresh session (uploads current first)"},{name:"name",description:"Set the current session's name (used at /exit save)",args:"<new-name>"},{name:"summary",description:"View detailed run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"help",description:"Show command reference"},{name:"clear",description:"Clear chat history"},{name:"exit",description:"Quit kane-cli"}];function li(a){let e=a.trim();if(!e.startsWith("/"))return null;let n=e.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let o=n[0],r={},s=1;for(;s<n.length;){let m=n[s];if(m.startsWith("--")){let d=m.slice(2),u=n[s+1];u&&!u.startsWith("--")?(r[d]=u.replace(/^"|"$/g,""),s+=2):(r[d]=void 0,s++)}else{let d=m.replace(/^"|"$/g,"");o==="run"?r.objective=d:o==="config"?r.action?r.value=d:r.action=d:o==="profiles"?r.action=d:o==="summary"&&(r.index=d),s++}}return{command:o,args:r,raw:e}}var Za=[{name:"Testing",commands:eo.filter(a=>["run","cancel"].includes(a.name))},{name:"Auth",commands:eo.filter(a=>["login","logout","whoami","balance","profiles"].includes(a.name))},{name:"Settings",commands:eo.filter(a=>["config"].includes(a.name))},{name:"Session",commands:eo.filter(a=>["new","name","summary","help","clear","exit"].includes(a.name))}];var to=[{name:"auth",description:"Login, logout, profiles"},{name:"config",description:"View/change settings"},{name:"help",description:"Command reference"},{name:"new",description:"Start a fresh session"},{name:"name",description:"Set the session name",args:"<new-name>"},{name:"summary",description:"View run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"exit",description:"Quit kane-cli"}];var gt=H(X(),1);function Go({flows:a,filterIndex:e}){let t=e!==void 0?a.filter(n=>n.index===e):a;return t.length===0?null:(0,gt.jsx)(b,{flexDirection:"column",children:t.map(n=>(0,gt.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,gt.jsxs)(b,{marginLeft:1,children:[(0,gt.jsx)(l,{color:"#b388ff",bold:!0,children:"Flow "+n.index+": "}),(0,gt.jsx)(l,{color:"#b388ff",children:n.objective})]}),(0,gt.jsx)(Nt,{status:n.status==="error"?"failed":n.status,summary:n.summary,duration:n.duration,steps:n.steps,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.reason,creditsConsumed:n.creditsConsumed})]},n.index))})}var ht=H(X(),1),ms={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},ci={ok:g.statusPass,error:g.statusFail,cancelled:g.dim};function di({status:a,command:e,message:t,details:n}){let o=e.startsWith("/")?e.slice(1):e;return(0,ht.jsxs)(b,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,ht.jsx)(b,{marginLeft:1,children:(0,ht.jsxs)(l,{color:ci[a],bold:!0,children:[ms[a]," ",o]})}),(0,ht.jsxs)(b,{borderStyle:"round",borderColor:ci[a],paddingX:2,flexDirection:"column",width:70,children:[(0,ht.jsx)(l,{children:t}),n&&(0,ht.jsx)(l,{color:g.dim,children:n})]})]})}var gn=H(Ye(),1);import{join as mn}from"path";var fn=H(X(),1);function ui({tabs:a,activeIndex:e}){return(0,fn.jsx)(b,{children:a.map((t,n)=>(0,fn.jsx)(b,{marginRight:1,children:n===e?(0,fn.jsx)(l,{color:g.primary,bold:!0,children:`[ ${t} ]`}):(0,fn.jsx)(l,{color:g.dim,children:` ${t} `})},t))})}var C=H(X(),1),pn=["Commands","Shortcuts","Tests","Setup","About"],no=18,ps="https://www.testmuai.com/support/docs/kane-cli-introduction",gs="https://github.com/LambdaTest/kane-cli/issues";function fi({onClose:a,version:e,environment:t,sessionId:n,runUrl:o}){let[r,s]=(0,gn.useState)(0),[m,d]=(0,gn.useState)(0);(0,gn.useEffect)(()=>{d(0)},[r]);let u=pn[r],i=u==="Commands"?hs():u==="Shortcuts"?vs():u==="Tests"?ws():u==="Setup"?xs():bs({version:e,environment:t,sessionId:n,runUrl:o}),c=i.length,_=m>0,P=m+no<c,h=i.slice(m,m+no);He((V,A)=>{if(A.escape){a();return}if(A.rightArrow||A.tab){s(E=>(E+1)%pn.length);return}if(A.leftArrow){s(E=>(E-1+pn.length)%pn.length);return}if(A.upArrow){d(E=>Math.max(0,E-1));return}if(A.downArrow){d(E=>Math.min(Math.max(0,c-no),E+1));return}});let T=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return c>no&&T.push({keys:"\u2191\u2193",label:"scroll"}),(0,C.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:g.primary,paddingX:2,paddingY:1,children:[(0,C.jsx)(ui,{tabs:[...pn],activeIndex:r,onChange:s}),_&&(0,C.jsx)(b,{marginTop:1,children:(0,C.jsx)(l,{color:g.dim,children:"\u25B2 more above"})}),(0,C.jsx)(b,{marginTop:_?0:1,flexDirection:"column",children:h}),P&&(0,C.jsx)(b,{children:(0,C.jsx)(l,{color:g.dim,children:"\u25BC more below"})}),(0,C.jsx)($t,{bindings:T,escBackLabel:"back to chat"})]})}function hs(){return[(0,C.jsx)(l,{color:g.dimmed,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.cyan,children:'"search amazon for laptop"'})},"ex"),(0,C.jsx)(b,{marginBottom:1},"sp"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Slash commands"},"cmd-h"),...to.map(a=>(0,C.jsxs)(b,{marginLeft:2,children:[(0,C.jsx)(b,{width:14,children:(0,C.jsxs)(l,{color:g.cyan,children:["/",a.name]})}),a.args&&(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:a.args})}),(0,C.jsx)(l,{color:g.dimmed,children:a.description})]},a.name)),(0,C.jsx)(b,{marginBottom:1},"sp2"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.dim,children:"/config submenu: show \xB7 set-mode \xB7 set-window \xB7 chrome-profile \xB7 project \xB7 folder"})},"config-sub")]}function oo(a,e){return[(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:a},`h-${a}`),...e.map(([t,n],o)=>(0,C.jsxs)(b,{marginLeft:2,children:[(0,C.jsx)(b,{width:26,children:(0,C.jsx)(l,{color:g.cyan,children:t})}),(0,C.jsx)(l,{color:g.dimmed,children:n})]},`r-${a}-${o}`)),(0,C.jsx)(b,{marginBottom:1},`s-${a}`)]}function vs(){return[...oo("Cursor & word edit",[["\u2190 \u2192","Cursor by char"],["Ctrl+A Ctrl+E","Start / end of line"],["Home End","Start / end (Linux/Win; rare on Mac laptops)"],["Backspace","Delete char before cursor"],["Ctrl+W","Delete word back"],["Ctrl+U","Clear input"],["Ctrl+K","Kill from cursor to end"],["Ctrl+\u2190 Ctrl+\u2192","Word jump (Linux/Win, iTerm2)"],["Option+\u2190 Option+\u2192","Word jump (Mac native)"],["Option+B Option+F","Word jump (Mac, Emacs-style)"],["Alt+Backspace","Delete word back (Option+Delete on Mac)"],["Ctrl+Delete Option+Fn+Del","Delete word forward"]]),...oo("History & completion",[["\u2191 \u2193","Previous / next history"],["Tab","Accept ghost / fill highlighted command"],["Ctrl+R","Reverse-search history"],["\u21B5","Submit"],["Esc","Close overlay / clear / back"]]),...oo("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...oo("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Platform caveats"},"cv-h"),(0,C.jsx)(l,{color:g.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function ws(){return[(0,C.jsxs)(l,{color:g.dimmed,children:["Sessions you run here are saved as ",(0,C.jsx)(l,{color:g.cyan,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,C.jsx)(b,{marginBottom:1},"t-sp1"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Auto-save"},"t-save-h"),(0,C.jsxs)(l,{color:g.dim,children:[" In ",(0,C.jsx)(l,{color:g.cyan,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,C.jsxs)(l,{color:g.dim,children:[" In ",(0,C.jsx)(l,{color:g.cyan,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,C.jsxs)(l,{color:g.dim,children:[" Output: ",(0,C.jsx)(l,{color:g.cyan,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,C.jsx)(l,{color:g.cyan,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,C.jsx)(b,{marginBottom:1},"t-sp2"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,C.jsxs)(l,{color:g.dim,children:[" ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd list"})," \xB7 bare ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,C.jsx)(l,{color:g.dim,children:" The .md file carries its own config (mode, max_steps, variables, \u2026) so the replay is reproducible."},"t-run-2"),(0,C.jsx)(b,{marginBottom:1},"t-sp3"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Type ",(0,C.jsxs)(l,{color:g.cyan,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Discarding at the save prompt: press ",(0,C.jsx)(l,{color:g.cyan,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function xs(){return[(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"1. Login"},"s1-h"),(0,C.jsx)(l,{color:g.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"2. Project & folder"},"s2-h"),(0,C.jsx)(l,{color:g.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"3. Mode"},"s3-h"),(0,C.jsx)(l,{color:g.dim,children:" testing (saves to TMS) | action (local report). /config set-mode"},"s3-b"),(0,C.jsx)(b,{marginBottom:1},"spacer-1"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Variables (later wins)"},"v-h"),(0,C.jsxs)(l,{color:g.dim,children:[" ",`${mn(xe,"variables")}/*.json`," (global)"]},"v-1"),(0,C.jsxs)(l,{color:g.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,C.jsx)(l,{color:g.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,C.jsx)(b,{marginBottom:1},"spacer-2"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Context files"},"c-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Global: ",mn(xe,"global-memory.md")]},"c-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,C.jsx)(b,{marginBottom:1},"spacer-3"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Paths"},"p-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Config: ",mn(xe,"tui-config.json")," \xB7 Auth: ",mn(xe,"config.json")]},"p-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Sessions: ",mn(xe,"sessions"),"/"]},"p-2")]}function bs({version:a,environment:e,sessionId:t,runUrl:n}){return[(0,C.jsxs)(b,{children:[(0,C.jsx)(l,{color:g.primary,bold:!0,children:"kane-cli "}),(0,C.jsxs)(l,{color:g.muted,children:["v",a]})]},"title"),(0,C.jsx)(b,{marginBottom:1},"sp"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Environment"})}),(0,C.jsx)(l,{children:e})]},"env"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Session"})}),(0,C.jsx)(l,{children:t})]},"sess"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Default URL"})}),(0,C.jsx)(l,{color:g.cyan,children:n})]},"url"),(0,C.jsx)(b,{marginBottom:1},"sp2"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Docs"})}),(0,C.jsx)(l,{color:g.cyan,underline:!0,children:ps})]},"docs"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Bugs"})}),(0,C.jsx)(l,{color:g.cyan,underline:!0,children:gs})]},"bugs")]}var _s=null;function mi(a){_s=a}import{join as Ht}from"path";var ro=H(X(),1);function pi({status:a,steps:e,duration:t,creditsConsumed:n,reason:o}){let r=a==="passed",s=r?g.green:g.red,m=r?"\u2713":"\u2717",d=r?"Passed":"Failed",u=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,i=typeof n=="number"&&n>0?` \xB7 ${n.toFixed(4)} credits`:"",c=!r&&o?` \xB7 ${o}`:"";return(0,ro.jsxs)(b,{children:[(0,ro.jsxs)(l,{bold:!0,color:s,children:[m," ",d]}),(0,ro.jsxs)(l,{color:g.dimmed,children:[" ","\xB7 ",e," steps \xB7 ",u,i,c]})]})}var hi=H(X(),1);function gi(){return(0,hi.jsx)(l,{color:g.dimmed,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}async function io(a){await new Vt(a.tmsBaseUrl,a.username,a.accessKey).submitFeedback({instruction_id:"",test_id:a.testId,feedback_type:a.feedbackType,mode:a.mode??"human",...a.details?{details:a.details}:{}}),a.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:a.feedbackType})}var y=H(X(),1);function vi({localMode:a=!1,codeExport:e,codeLanguage:t,skipCodeValidation:n,updatePromise:o,migrationResult:r,sessionName:s}={}){In();let m=(0,k.useRef)(new tn),[d,u]=(0,k.useState)(0),i=m.current,[c]=(0,k.useState)(()=>new Be),_=(0,k.useRef)(0),P=(0,k.useCallback)(()=>`msg-${++_.current}`,[]),[h,T]=(0,k.useState)(!1),[V,A]=(0,k.useState)(null),[E,N]=(0,k.useState)(!1),[j,W]=(0,k.useState)(0),[re,Ae]=(0,k.useState)(!1),[Ee,qe]=(0,k.useState)(null),[Ne,ie]=(0,k.useState)(null),Qe=(0,k.useRef)(null),[te,xt]=(0,k.useState)(null),[wn,qt]=(0,k.useState)(Hn()),[Ze,bt]=(0,k.useState)(null),[we,Ie]=(0,k.useState)([]),[xn,L]=(0,k.useState)(!1),[bn,Kt]=(0,k.useState)(!1),[_t,Ke]=(0,k.useState)(null),[Gt,pe]=(0,k.useState)(null),[ft,zt]=(0,k.useState)(null),it=(0,k.useRef)(null),Me=(0,k.useRef)(0),yt=(0,k.useRef)(""),Xt=(0,k.useRef)(null),Ct=(0,k.useRef)(null),D=(0,k.useRef)({}),M=(0,k.useRef)(null),G=(0,k.useRef)(0),[Y,$e]=(0,k.useState)([]),Q=(0,k.useCallback)(p=>{let v=`s-${++G.current}`;$e(f=>[...f,{id:v,content:p}])},[]),[se,ne]=(0,k.useState)("booting"),[oe,ae]=(0,k.useState)([]),[Pe,Ue]=(0,k.useState)(!1),[Se,Oe]=(0,k.useState)(!1),[ke,Jt]=(0,k.useState)("chat"),[Ge,Ot]=(0,k.useState)(null),[_n,mr]=(0,k.useState)(null),[yn,pr]=(0,k.useState)(!1),[Z,Yt]=(0,k.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),qi=kr(),x=si(),Cn=ai(),Ki=(0,k.useCallback)((p,v,f)=>{let w=it.current;if(!w)return;let S=Me.current+v;Un(i.sessionDir,S,p,w,(O,B,F,U)=>i.log(O,B,F,U),f)},[i]),Gi=(0,k.useCallback)((p,v,f)=>{i.logStep(p,v,f)},[i]),zi=(0,k.useCallback)(p=>M.current?.setStepText(p),[]),Xi=(0,k.useCallback)(()=>M.current?.setStepComplete(),[]),$=Mn(Ki,Gi,zi,Xi),[I,De]=(0,k.useState)(()=>c.load()),[,Ji]=(0,k.useState)(0),Ve=(0,k.useCallback)(()=>Ji(p=>p+1),[]),[R,ge]=(0,k.useState)(null),Dt=x.creds.getActiveProfile(),le=x.creds.getDefaultEnv(),et=(0,k.useCallback)((p,v)=>{let f=p?x.creds.loadProfileConfig(p,v):null;c.save({project_id:f?.project_id??null,project_name:f?.project_name??null,folder_id:f?.folder_id??null,folder_name:f?.folder_name??null}),De(c.load())},[x.creds,c]),mo=(0,k.useCallback)(async(p,v)=>{let f=x.getResolver();if(!f)return null;let w=f.cached??await f.resolve();if(!w)return null;let S=me(v),O=new Vt(S.tmsBaseUrl,w.username,w.access_key);try{let F=(await O.listProjects()).find(J=>J.name==="KaneAI Generated");if(F)return{id:F.project_id,name:F.name};let U=await O.createProject("KaneAI Generated");return{id:U.id,name:U.name}}catch{return null}},[x]),po=(0,k.useCallback)(async(p,v)=>{let f=x.getResolver();if(!f)return null;let w=f.cached??await f.resolve();if(!w)return null;let S=me(p),O=new Vt(S.tmsBaseUrl,w.username,w.access_key);try{let F=(await O.listFolders(v)).find(J=>J.name==="Untitled");if(F)return{id:F.id,name:F.name};let U=await O.createFolder(v,"Untitled");return{id:U.id,name:U.name}}catch{return null}},[x]);(0,k.useEffect)(()=>{E||(i.start({model:I.model,environment:le,profile:Dt}),s&&i.setSessionName(s),N(!0))},[i,E,I.model,le,Dt,s]);let gr=(0,k.useRef)(!1);(0,k.useEffect)(()=>{if(!E||gr.current)return;gr.current=!0;let p=s?[{label:"session",value:s},{label:"test",value:Eo(Ht(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:Eo(Ht(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];Q((0,y.jsx)(Tr,{title:"Recording",titleColor:"#ff9500",rows:p}))},[E,s,Q]);let hr=(0,k.useCallback)(async p=>{let v=me(p),f=x.getBasicAuth(),w=f?{username:f.username,accessKey:f.access_key}:await x.getToken().then(O=>O??"");if(!w)return;let S=new Or(v.controllerBaseUrl,w);try{let O=await S.getScreenshotSas();i.setScreenshotSas(O),it.current=new Wn(O,3,(B,F,U,J)=>i.log(B,F,U,J)),i.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched")}catch(O){i.log("warn","SCREENSHOT_SAS_FAILED","Screenshot SAS fetch failed",{error:O instanceof Error?O.message:String(O)})}},[x,i]),mt=(0,k.useCallback)(async p=>{let v=p??x.creds.getDefaultEnv();bt(null),it.current=null;let w=await x.initResolver(v,(S,O,B,F)=>i.log(S,O,B,F)).resolve(!0).catch(()=>null);return bt(w),w&&(i.log("info","AUTH_RESET_OK","Auth reset resolved",{username:w.username,org_id:w.org_id,env:v}),await hr(v)),w},[x,i,hr]),vr=(0,k.useRef)(!1);(0,k.useEffect)(()=>{!h||vr.current||!E||(vr.current=!0,mt().then(p=>{if(p){if(p.org_id!==void 0&&i.setOrgId(String(p.org_id)),i.log("info","BOOT_RESOLVE_OK","Boot auth resolved",{username:p.username,org_id:p.org_id}),!i.hasRemoteLogger){let v=Fr({sessionId:i.sessionId,identity:{org_id:String(p.org_id??""),user_id:String(p.user_id??""),machine_id:Nr(),email:p.email??null,email_domain:p.email_domain??"unknown",user_type:p.user_type??"unknown",env:le},getToken:async()=>x.getToken()});i.setRemoteLogger(v),v.start(),nt("remote-logger",()=>v.shutdownSync()),Ln(v)}}else i.log("warn","BOOT_RESOLVE_FAILED","Boot auth failed \u2014 non-controller APIs may fail")}).catch(p=>{i.log("error","BOOT_RESOLVE_ERROR","Boot auth error",{error:p instanceof Error?p.message:String(p)})}))},[h,E,mt,i]);let Et=(0,k.useCallback)(async()=>{if(Ze)return i.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:Ze.username,org_id:Ze.org_id}),Ze;let p=await x.resolveBasicAuth();return p?(i.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:p.username,org_id:p.org_id,user_id:p.user_id}),bt(p)):i.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),p},[x,Ze,i]),wr=(0,k.useCallback)(async()=>{let p=await Et();if(!p)return i.log("warn","PROJECT_FAILED","No TMS credentials for project resolution"),null;let v=me(le),f=new Vt(v.tmsBaseUrl,p.username,p.access_key),w=x.creds.getActiveProfile(),S=x.creds.getDefaultEnv(),O=w?x.creds.loadProfileConfig(w,S):null,B=O?.project_id??I.project_id;if(B)i.log("info","PROJECT_CACHED","Using cached project",{project_id:B});else{i.log("info","PROJECT_FETCH","No project_id in config, fetching from TMS");try{i.log("info","PROJECT_LIST","Listing projects from TMS",{url:`${v.tmsBaseUrl}/v1/projects`});let U=await f.listProjects((de,je,pt,ze)=>i.log(de,je,pt,ze));i.log("info","PROJECT_LIST_OK","Projects listed",{count:U.length});let J=U.find(de=>de.name==="KaneAI Generated");if(J)B=J.project_id,i.log("info","PROJECT_SELECTED","Using KaneAI Generated project",{project_id:B});else if(U.length>0){let de=U[0];B=de.project_id,i.log("info","PROJECT_SELECTED","Using first project",{name:de.name,project_id:B})}B&&he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:B})}catch(U){return i.log("error","PROJECT_LIST_FAILED","Project listing failed",{error:String(U)}),null}}if(!B)return i.log("warn","PROJECT_NONE","No projects found"),null;let F=O?.folder_id??I.folder_id;if(F)i.log("info","FOLDER_CACHED","Using cached folder",{folder_id:F});else try{i.log("info","FOLDER_FETCH","Fetching default folder",{project_id:B}),F=await f.getDefaultFolder(B),i.log("info","FOLDER_OK","Default folder resolved",{folder_id:F}),F&&he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:F})}catch(U){return i.log("error","FOLDER_FAILED","Default folder fetch failed",{error:String(U)}),null}return{projectId:B,folderId:F??""}},[I.project_id,I.folder_id,Et,le,c,i,x.creds]),ce=(0,k.useCallback)(p=>{let v=P(),f={...p,id:v};Q((0,y.jsx)(oi,{entry:f}))},[P,Q]),K=(0,k.useCallback)((p,v,f,w)=>{Q((0,y.jsx)(di,{status:p,command:v,message:f,details:w}))},[Q]),xr=(0,k.useCallback)(async(p,v)=>{let f=Kn({objective:p,globalDir:Ht(xe,"variables"),localDir:Ht(process.cwd(),".testmuai","variables")}),w=i.nextRunIndex();Me.current=w,yt.current=f.auteurObjective,i.logRunStart(w,f.auteurObjective,v??""),i.setFirstRun(f.auteurObjective,v??"");let S=x.getResolvedBasicAuth(),O=S,B=null;if(!O&&(B=await x.getToken(),!B)){ce({type:"error",text:"Not authenticated. Run /login first."});return}let F={basicAuth:S??null,token:B,resolver:x.getResolver(),resolvedCreds:null};Xt.current=F;let U=x.creds.getActiveProfile()??"default",J=x.creds.getDefaultEnv();Bn(x.creds,c,U,J,(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt));let de=c.load();if(De(de),w===0&&!a){i.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let fe=await wr(),Xe=me(le),Je=O?{username:O.username,access_key:O.access_key}:await Et();if(Je){let tt=await Xn({tmsBaseUrl:Xe.tmsBaseUrl,auth:{username:Je.username,access_key:Je.access_key},objective:f.auteurObjective,url:v??I.default_url??"",projectId:fe?.projectId??de.project_id??"",folderId:fe?.folderId??de.folder_id??"",hasCustomProfile:!!I.chrome_profile_path,log:(kt,Co,ns,os)=>i.log(kt,Co,ns,os)});tt&&(i.setTestId(tt),fe?.projectId&&i.setProjectId(fe.projectId))}}let je=null;if(Z.useCft)ce({type:"info",text:"CfT mode: Playwright will manage browser"});else if(Z.wsEndpoint)ce({type:"info",text:`WS endpoint: ${Z.wsEndpoint.slice(0,60)}...`});else if(Z.cdpEndpoint)ce({type:"info",text:`CDP endpoint: ${Z.cdpEndpoint}`});else{ce({type:"info",text:"Starting Chrome..."});try{je=await Cn.ensureChrome(v)}catch(Xe){ce({type:"error",text:Fn(Xe)});return}i.logChromeLaunch(je.port,je.cdpEndpoint),ce({type:"info",text:`Chrome ready (port ${je.port})`});let fe=Nn({headless:Z.headless,cdpEndpoint:je.cdpEndpoint,chromePid:je.process.pid});fe&&(M.current=fe,nt("marker-overlay",()=>fe.kill()))}i.setAuteurVariables(f.auteur),Ct.current=f;let pt=O&&!a?await Gn({variables:f,auth:O,orgId:String((await Et())?.org_id??""),env:le,localMode:a,log:(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt)}):{};D.current=pt;let ze=Mt(Ht(xe,"global-memory.md")),jt=Mt(Ht(process.cwd(),".testmuai","context.md")),Qt=je?{cdpEndpoint:je.cdpEndpoint,instance:je,tempDir:null}:Z.wsEndpoint?{wsEndpoint:Z.wsEndpoint,instance:null,tempDir:null}:Z.cdpEndpoint?{cdpEndpoint:Z.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null};if(w===0){let fe={mode:I.mode,max_steps:Z.maxSteps,timeout:Z.timeout>0?Z.timeout:void 0,target:je?"chrome":Z.cdpEndpoint?"cdp":Z.wsEndpoint?"ws":void 0,chrome_profile:I.chrome_profile_path||void 0,cdp_endpoint:Z.cdpEndpoint||void 0,ws_endpoint:Z.wsEndpoint||void 0,headless:Z.headless,global_context:ze??void 0,local_context:jt??void 0,variables:Object.keys(f.auteur).length>0?f.auteur:void 0};i.setResolvedGlobal(fe)}let Bt=qn(f.auteur,f.auteurObjective),Rn=zn({objective:f.auteurObjective,url:v,model:I.model,chrome:Qt,auth:F,sessionId:i.sessionId,runIndex:w,windowSize:I.window_size,maxSteps:Z.maxSteps,headless:Z.headless,variables:Object.keys(Bt).length>0?Bt:void 0,globalContext:ze??void 0,localContext:jt??void 0,sessionContext:i.getContext()});v&&A(v),qe(null),$.startRun(Rn,{environment:le,mode:I.mode,log:(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt)}),W(fe=>fe+1)},[x,Cn,c,I,i,le,$,ce,Z,wr,Et]),go=(0,k.useRef)(null);(0,k.useEffect)(()=>{if($.bifurcationInfo&&$.bifurcationInfo!==go.current){go.current=$.bifurcationInfo;let{flows:p,isSingleFlow:v}=$.bifurcationInfo;if(v&&p.length===1&&p[0])i.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:p[0]}),ce({type:"info",text:`Objective: ${p[0]}`});else if(!v&&p.length>1){let f=[`Bifurcated into ${p.length} flows:`];p.forEach((w,S)=>f.push(` ${S+1}. ${w}`)),i.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:p.length}),ce({type:"info",text:f.join(`
|
|
25
|
-
`)})}}},[$.bifurcationInfo,i,ce]);let ho=k.default.useRef(null),vo=k.default.useRef(0),wo=k.default.useRef(0);(0,k.useEffect)(()=>{if($.lastRunEnd&&$.lastRunEnd!==ho.current){ho.current=$.lastRunEnd;let{status:p,duration:v,summary:f,reason:w,context:S}=$.lastRunEnd,{passed:O,failed:B,total:F}=
|
|
24
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(o=>t.is(o))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Ei(a){return a.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",o="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?o=r[3]:n=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],n=r[3],o=r[4]),t&&o!=="0"?`${t}=${n}:${parseInt(o)+1}`:e})}Si.Command=ar});var Ii=Tt(We=>{"use strict";var{Argument:Ti}=ao(),{Command:lr}=ki(),{CommanderError:Ls,InvalidArgumentError:Ri}=vn(),{Help:Fs}=Zo(),{Option:Ai}=or();We.program=new lr;We.createCommand=a=>new lr(a);We.createOption=(a,e)=>new Ai(a,e);We.createArgument=(a,e)=>new Ti(a,e);We.Command=lr;We.Option=Ai;We.Argument=Ti;We.Help=Fs;We.CommanderError=Ls;We.InvalidArgumentError=Ri;We.InvalidOptionArgumentError=Ri});var fr=H(Ye(),1);import Ce from"process";import*as is from"tls";function Yr(){let a=is;if(!(typeof a.getCACertificates!="function"||typeof a.setDefaultCACertificates!="function"))try{let e=o=>typeof o=="string",t=a.getCACertificates("default").filter(e),n=a.getCACertificates("system").filter(e);a.setDefaultCACertificates([...new Set([...t,...n])])}catch{}}var k=H(Ye(),1);var Qr=H(Ye(),1);var Ut=H(X(),1);function Zr({path:a}){return a.length===0?null:(0,Ut.jsx)(b,{children:a.map((e,t)=>(0,Ut.jsxs)(Qr.default.Fragment,{children:[t>0&&(0,Ut.jsx)(l,{color:g.muted,children:" \u203A "}),(0,Ut.jsx)(l,{color:g.dimmed,children:e})]},t))})}var ee=H(X(),1);function ei({profile:a,environment:e,model:t,tokenValid:n,sessionId:o,runCount:r,viewMode:s,breadcrumb:m}){let{stdout:d}=Er(),u=d?.columns??80,i=e==="stage";return(0,ee.jsxs)(b,{flexDirection:"column",children:[(0,ee.jsx)(l,{color:g.muted,children:"\u2500".repeat(u)}),m&&m.length>0&&(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(Zr,{path:m})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsxs)(b,{gap:1,children:[(0,ee.jsx)(l,{color:g.dimmed,children:"Model:"}),(0,ee.jsx)(l,{color:g.dimmed,children:t}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsx)(l,{color:g.dimmed,children:"Session:"}),(0,ee.jsx)(l,{color:g.dimmed,children:o}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsx)(l,{color:n?g.green:g.red,children:"\u25CF"}),(0,ee.jsx)(l,{color:g.dimmed,children:n?"authenticated":"not logged in"})]})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsxs)(b,{gap:1,children:[(0,ee.jsx)(l,{color:g.dimmed,children:a??"no profile"}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),i?(0,ee.jsx)(l,{color:g.yellow,bold:!0,children:"\u26A0 stage"}):(0,ee.jsx)(l,{color:g.green,children:e}),(0,ee.jsx)(l,{color:g.muted,children:"|"}),(0,ee.jsxs)(l,{color:g.dimmed,children:["runs: ",r]})]})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(l,{dimColor:!0,children:Sr()})}),(0,ee.jsx)(b,{paddingX:1,children:(0,ee.jsx)(l,{dimColor:!0,children:s==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var Pt=H(Ye(),1);var un=[[[" "],[" "],[" "],[" "],["\u2584","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],[" "],[" "],[" "],[" "],[" "],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7"],[" "],[" "],[" "],[" "]],[[" "],[" "],["\u2584","#875faf"],["\u2584","#af87d7","#875faf"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2584","#af87d7","#875faf"],["\u2584","#875faf"],[" "],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2584","#000000","#af87d7"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#303030"],["\u2584","#000000","#af87d7"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#585858","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],["\u2588","#875faf"],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2588","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],["\u2588","#875faf"],[" "]],[[" "],[" "],["\u2588","#875faf"],["\u2588","#af87d7"],["\u2588","#000000"],["\u2584","#000000","#585858"],["\u2588","#000000"],["\u2588","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2584","#af87d7","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#000000"],["\u2588","#af87d7"],["\u2588","#875faf"],[" "],[" "]],[[" "],[" "],["\u2580","#875faf"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2580","#875faf"],[" "],[" "]],[[" "],[" "],[" "],[" "],[" "],["\u2580","#af87d7"],["\u2580","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2588","#af87d7"],["\u2580","#af87d7"],["\u2580","#af87d7"],[" "],[" "],[" "],[" "],[" "]]];var z=H(X(),1),Yn="#af87d7",jo="#875faf",ti="#5b3a7a",ss="#ff9500",as="#ea580c";var Bo="#666666",ls="#555555",It=[[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[jo,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],$o=It.map(([,a])=>[...a]);function ni({visibleRows:a=It.length}){let e=Math.min(a,It.length);return(0,z.jsxs)(b,{flexDirection:"column",children:[It.slice(0,e).map(([t,n],o)=>{let r=$o[o];return(0,z.jsx)(l,{children:r.map((s,m)=>{if(s==="\u2588")return(0,z.jsx)(l,{color:t,children:"\u2588"},m);let d=m>0&&r[m-1]==="\u2588",u=o>0&&m>0&&$o[o-1][m-1]==="\u2588";return d||u?(0,z.jsx)(l,{color:ti,children:"\u2592"},m):(0,z.jsx)(l,{children:" "},m)})},o)}),e>=It.length&&(0,z.jsxs)(l,{children:[" ",$o[It.length-1].map((t,n)=>t==="\u2588"?(0,z.jsx)(l,{color:ti,children:"\u2580"},n):(0,z.jsx)(l,{children:" "},n))]})]})}function cs({visibleRows:a=un.length}){let e=Math.min(a,un.length);return(0,z.jsx)(b,{flexDirection:"column",children:un.slice(0,e).map((t,n)=>(0,z.jsx)(l,{children:t.map((o,r)=>{let s=o[0],m=o[1],d=o[2];return m?(0,z.jsx)(l,{color:m,backgroundColor:d,children:s},r):(0,z.jsx)(l,{children:s},r)})},n))})}function Qn({size:a="compact",helmetVisibleRows:e=un.length,textVisibleRows:t=It.length,showMeta:n=!1,user:o=null,authenticated:r=!1,version:s=""}){return a==="compact"?(0,z.jsx)(ni,{}):(0,z.jsxs)(b,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,z.jsx)(l,{color:ss,italic:!0,children:" Welcome to"}),(0,z.jsx)(l,{children:" "}),(0,z.jsxs)(b,{gap:2,children:[(0,z.jsx)(cs,{visibleRows:e}),(0,z.jsxs)(b,{flexDirection:"column",children:[(0,z.jsx)(ni,{visibleRows:t}),(0,z.jsx)(b,{justifyContent:"flex-end",width:73,children:(0,z.jsx)(l,{color:as,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(l,{children:" "}),(0,z.jsxs)(l,{children:[(0,z.jsx)(l,{color:Bo,children:" Browser automation powered by AI. "}),(0,z.jsx)(l,{color:ls,children:`v${s}`})]}),(0,z.jsx)(l,{children:" "}),(0,z.jsx)(l,{children:(0,z.jsx)(l,{color:Bo,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,z.jsx)(l,{children:(0,z.jsx)(l,{color:Bo,children:" data \u2014 right from your terminal."})}),(0,z.jsx)(l,{children:" "})]})]})}var Fo=H(X(),1),Vo=8,Lo=7;function oi({onComplete:a}){let[e,t]=(0,Pt.useState)(0),[n,o]=(0,Pt.useState)(0),[r,s]=(0,Pt.useState)(!1),[m]=(0,Pt.useState)(()=>{let d=new Le,u=d.getActiveProfile(),i=d.getDefaultEnv(),c=u?d.loadCredentials(u,i):null,_=u?d.loadBasicAuth(u,i):null;return{authenticated:!!(c||_),user:_?.username??u??null}});return So(()=>{t(d=>Math.min(Vo,d+1))},e<Vo?60:null),So(()=>{o(d=>Math.min(Lo,d+1))},n<Lo?80:null),(0,Pt.useEffect)(()=>{e>=Vo&&n>=Lo&&!r&&(s(!0),a?.())},[e,n,r,a]),(0,Fo.jsx)(b,{flexDirection:"column",children:(0,Fo.jsx)(Qn,{size:"full",helmetVisibleRows:e,textVisibleRows:n,showMeta:r,user:m.user,authenticated:m.authenticated,version:st})})}var lt=H(X(),1);function ri({entry:a}){return a.type==="input"?(0,lt.jsxs)(b,{children:[(0,lt.jsx)(l,{color:g.purple,children:"\u276F "}),(0,lt.jsx)(l,{children:a.text})]}):a.type==="error"?(0,lt.jsx)(b,{marginLeft:2,children:(0,lt.jsx)(l,{color:g.red,children:a.text})}):(0,lt.jsx)(b,{marginLeft:2,children:(0,lt.jsx)(l,{color:a.type==="info"?g.dimmed:void 0,children:a.text})})}var ot=H(Ye(),1);var Re=H(X(),1);function ds(a,e){let t=[],o=Math.max(e-4,30);t.push({type:"title",text:a.title});for(let r=0;r<a.sections.length;r++){let s=a.sections[r];r>0&&t.push({type:"divider",text:"\u2500".repeat(o)}),s.label&&t.push({type:"header",text:s.label});let m=s.entries.length>0?Math.max(...s.entries.map(d=>d.key.length)):0;for(let d of s.entries){let u="\xB7".repeat(Math.max(2,m-d.key.length+3)),i=`${d.key} ${u} ${d.value}`;t.push({type:"entry",text:i,color:d.color})}}return t.push({type:"footer",text:"esc back"}),t}function ii({data:a,width:e=60}){let t=ds(a,e);return(0,Re.jsx)(b,{flexDirection:"column",borderStyle:"round",borderColor:g.primary,paddingX:2,paddingY:1,children:t.map((n,o)=>{if(n.type==="title")return(0,Re.jsx)(l,{color:g.primary,bold:!0,children:n.text},o);if(n.type==="header")return(0,Re.jsx)(b,{marginTop:1,children:(0,Re.jsx)(l,{color:g.dim,children:n.text})},o);if(n.type==="divider")return(0,Re.jsx)(b,{marginTop:1,marginBottom:0,children:(0,Re.jsx)(l,{color:g.ambient,children:n.text})},o);if(n.type==="footer")return(0,Re.jsx)(b,{marginTop:1,children:(0,Re.jsx)(l,{color:g.dim,children:n.text})},o);let r=n.text.match(/^(.+?) (·+) (.+)$/);return r?(0,Re.jsxs)(l,{children:[(0,Re.jsxs)(l,{color:g.secondary,children:[r[1]," "]}),(0,Re.jsxs)(l,{color:g.ambient,children:[r[2]," "]}),(0,Re.jsx)(l,{color:n.color??g.base,children:r[3]})]},o):(0,Re.jsx)(l,{color:n.color??g.base,children:n.text},o)})})}var be=H(X(),1);function No(a,e){let t=[];function n(o,r){for(let s of o)t.push({item:s,depth:r}),s.type==="submenu"&&s.children&&e.length>r&&e[r]===s.id&&n(s.children,r+1)}return n(a,0),t}function Mo({items:a,onRunSelected:e,initialExpandedPath:t,onDismiss:n,renderLoginWizard:o,renderProfilesView:r,renderChromeProfilePicker:s,renderProjectPicker:m,renderFolderPicker:d,renderWindowSizePicker:u,onActiveViewChange:i}){let[c,_]=(0,ot.useState)(()=>{let E=t??[],N=No(a,E),j=0;if(E.length>0){let W=N.findIndex(re=>re.item.id===E[0]);W>=0&&W+1<N.length&&(j=W+1)}return{expandedPath:E,selectedIndex:j,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),P=No(a,c.expandedPath),h=P[c.selectedIndex]?.item,T=(0,ot.useRef)(null),V=(0,ot.useCallback)(E=>{_(N=>({...N,feedback:E})),T.current&&clearTimeout(T.current),T.current=setTimeout(()=>{_(N=>({...N,feedback:null})),T.current=null},4e3)},[]);(0,ot.useEffect)(()=>()=>{T.current&&clearTimeout(T.current)},[]),(0,ot.useEffect)(()=>{i?.(c.activeView)},[c.activeView,i]);let A=(0,ot.useCallback)(()=>{_(E=>({...E,activeView:null,infoData:null}))},[]);return He((E,N)=>{if(c.activeView==="infoView"){N.escape&&A();return}if(!(c.activeView==="loginWizard"||c.activeView==="profilesView"||c.activeView==="chromeProfilePicker"||c.activeView==="projectPicker"||c.activeView==="folderPicker"||c.activeView==="windowSizePicker")){if(c.isEditing){if(N.escape){_(j=>({...j,isEditing:!1,inputValue:""}));return}if(N.return){let j=c.inputValue.trim();if(h?.onValue&&j){let W=h.currentValue;h.onValue(j),V(W?`${h.label}: ${W} \u2192 ${j}`:`${h.label}: ${j}`)}_(W=>({...W,isEditing:!1,inputValue:""}));return}if(N.backspace||N.delete){_(j=>({...j,inputValue:j.inputValue.slice(0,-1)}));return}E&&!N.ctrl&&!N.meta&&_(j=>({...j,inputValue:j.inputValue+E}));return}if(c.isSelecting&&h?.options){let j=h.options;if(N.escape){_(W=>({...W,isSelecting:!1}));return}if(N.upArrow){_(W=>({...W,inputValue:String(Math.max(0,Number(W.inputValue||"0")-1))}));return}if(N.downArrow){_(W=>({...W,inputValue:String(Math.min(j.length-1,Number(W.inputValue||"0")+1))}));return}if(N.return){let W=Number(c.inputValue||"0"),re=j[W];if(re&&h.onValue){let Ae=h.currentValue;h.onValue(re.value),V(Ae?`${h.label}: ${Ae} \u2192 ${re.label}`:`${h.label}: ${re.label}`)}_(Ae=>({...Ae,isSelecting:!1,inputValue:""}));return}return}if(N.upArrow){_(j=>({...j,selectedIndex:Math.max(0,j.selectedIndex-1)}));return}if(N.downArrow){_(j=>({...j,selectedIndex:Math.min(P.length-1,j.selectedIndex+1)}));return}if(N.escape){if(c.expandedPath.length===0){n?.();return}_(j=>{let W=j.expandedPath.slice(0,-1),re=No(a,W),Ae=j.expandedPath[j.expandedPath.length-1],Ee=re.findIndex(qe=>qe.item.id===Ae);return{...j,expandedPath:W,selectedIndex:Ee>=0?Ee:0}});return}if(N.return&&h){if(h.id==="run-start"){e();return}if(h.type==="submenu"){let j=P[c.selectedIndex]?.depth??0;_(W=>({...W,expandedPath:[...W.expandedPath.slice(0,j),h.id],selectedIndex:W.selectedIndex+1}));return}if(h.onInfo){let j=h.onInfo();_(W=>({...W,activeView:"infoView",infoData:j}));return}if(h.onLoginWizard){h.onLoginWizard(),_(j=>({...j,activeView:"loginWizard"}));return}if(h.onProfilesView){h.onProfilesView(),_(j=>({...j,activeView:"profilesView"}));return}if(h.onChromeProfilePicker){h.onChromeProfilePicker(),_(j=>({...j,activeView:"chromeProfilePicker"}));return}if(h.onProjectPicker){h.onProjectPicker(),_(j=>({...j,activeView:"projectPicker"}));return}if(h.onFolderPicker){h.onFolderPicker(),_(j=>({...j,activeView:"folderPicker"}));return}if(h.onWindowSizePicker){h.onWindowSizePicker(),_(j=>({...j,activeView:"windowSizePicker"}));return}if(h.type==="action"){h.onAction?.(),h.suppressFeedback||V(`${h.label} done`);return}if(h.type==="select"&&h.options){let j=h.options.findIndex(W=>W.value===h.currentValue);_(W=>({...W,isSelecting:!0,inputValue:String(Math.max(0,j))}));return}if(h.type==="text-input"){_(j=>({...j,isEditing:!0,inputValue:h.currentValue??""}));return}}}}),(0,be.jsx)(b,{flexDirection:"column",paddingX:1,children:c.activeView==="infoView"&&c.infoData?(0,be.jsx)(ii,{data:c.infoData}):c.activeView==="loginWizard"&&o?o(A):c.activeView==="profilesView"&&r?r(A):c.activeView==="chromeProfilePicker"&&s?s(A):c.activeView==="projectPicker"&&m?m(A):c.activeView==="folderPicker"&&d?d(A):c.activeView==="windowSizePicker"&&u?u(A):(0,be.jsxs)(be.Fragment,{children:[P.map(({item:E,depth:N},j)=>{let W=j===c.selectedIndex,re=" ".repeat(N),Ae=W?"\u276F ":" ",Ee=E.type==="submenu"?c.expandedPath.includes(E.id)?"\u25BC ":"\u25B6 ":" ",qe=E.currentValue!=null?` [${E.currentValue}]`:"";if(W&&c.isSelecting&&E.options){let Ne=Number(c.inputValue||"0");return(0,be.jsxs)(b,{flexDirection:"column",children:[(0,be.jsxs)(l,{color:g.cyan,children:[re,Ae,Ee,E.label]}),E.options.map((ie,Qe)=>(0,be.jsxs)(l,{color:Qe===Ne?g.cyan:void 0,children:[re," ",Qe===Ne?"\u276F ":" ",ie.label]},ie.value))]},E.id)}return W&&c.isEditing?(0,be.jsxs)(l,{color:g.cyan,children:[re,Ae,Ee,E.label,": ",c.inputValue,(0,be.jsx)(l,{color:g.dimmed,children:"\u2588"})]},E.id):(0,be.jsxs)(l,{color:W?g.cyan:void 0,dimColor:!W&&N>0,children:[re,Ae,Ee,E.label,(0,be.jsx)(l,{dimColor:!0,children:qe})]},E.id)}),c.feedback&&(0,be.jsx)(b,{marginTop:1,children:(0,be.jsxs)(l,{color:g.green,children:["\u2713 ",c.feedback]})}),(0,be.jsx)($t,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var fn=H(Ye(),1);var _e=H(X(),1),Uo=800,Ho=3840,Wo=600,qo=2160;function si(a,e){if(!e)return"Enter a value";let t=Number(e);if(!Number.isInteger(t))return"Must be a whole number";if(a==="width"){if(t<Uo)return`Min ${Uo}`;if(t>Ho)return`Max ${Ho}`}else{if(t<Wo)return`Min ${Wo}`;if(t>qo)return`Max ${qo}`}return null}function Ko({currentWidth:a,currentHeight:e,onSelect:t,onCancel:n}){let[o,r]=(0,fn.useState)("width"),[s,m]=(0,fn.useState)(String(a)),[d,u]=(0,fn.useState)(String(e)),[i,c]=(0,fn.useState)(null);He((P,h)=>{if(h.escape){n();return}if(h.tab||h.rightArrow||h.leftArrow){r(T=>T==="width"?"height":"width"),c(null);return}if(h.return){let T=si("width",s);if(T){r("width"),c(`Width: ${T}`);return}let V=si("height",d);if(V){r("height"),c(`Height: ${V}`);return}t(Number(s),Number(d));return}if(h.backspace||h.delete){o==="width"?m(T=>T.slice(0,-1)):u(T=>T.slice(0,-1)),c(null);return}P&&/^\d$/.test(P)&&(o==="width"?m(T=>T+P):u(T=>T+P),c(null))});let _=(P,h,T)=>{let V=o===T,A=V?g.primary:g.secondary;return(0,_e.jsxs)(b,{flexDirection:"column",children:[(0,_e.jsxs)(l,{color:g.dim,children:[" ",P]}),(0,_e.jsx)(b,{borderStyle:"round",borderColor:A,paddingX:1,width:10,children:(0,_e.jsxs)(l,{color:V?g.base:g.dim,children:[h||" ",V?(0,_e.jsx)(l,{color:g.dimmed,children:"\u2588"}):""]})}),(0,_e.jsxs)(l,{color:g.dim,dimColor:!0,children:[" ",T==="width"?`${Uo}\u2013${Ho}`:`${Wo}\u2013${qo}`]})]})};return(0,_e.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,_e.jsx)(l,{color:g.primary,bold:!0,children:"Window Size"}),(0,_e.jsxs)(b,{marginTop:1,gap:1,children:[_("Width",s,"width"),(0,_e.jsx)(b,{alignItems:"center",marginTop:1,children:(0,_e.jsx)(l,{color:g.dim,children:"x"})}),_("Height",d,"height")]}),i&&(0,_e.jsx)(b,{marginTop:1,children:(0,_e.jsx)(l,{color:g.red,children:i})}),(0,_e.jsx)($t,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}var ye=H(Ye(),1);async function Zn(a,e,t){let n=a.loadCredentials(e,t),o=a.loadClient(e,t);if(n&&o){let s=new Ir(t);await Promise.allSettled([s.revokeToken(n.access_token,o.client_id,"access_token"),s.revokeToken(n.refresh_token,o.client_id,"refresh_token")])}a.deleteProfileFull(e,t);let r=a.listProfiles();return r.length>0&&(a.setActiveProfile(r[0].profile),a.setDefaultEnv(r[0].env)),{profile:e,env:t,switchedTo:r.length>0?r[0]:void 0}}function ai(){let[a]=(0,ye.useState)(()=>new Le),[e,t]=(0,ye.useState)(()=>{let h=a.resolveAuth();if(!h)return!1;if(h.method==="basic")return!0;let{credentials:T}=a.getActiveCredentials();return T?T.expires_at>Date.now()/1e3:!1}),n=(0,ye.useRef)(null),o=(0,ye.useRef)(null),r=(0,ye.useCallback)(()=>{let h=a.resolveAuth();return h?{method:h.method,profile:h.profile,env:h.env}:null},[a]),s=(0,ye.useCallback)(async()=>{let{credentials:h,profile:T,env:V}=a.getActiveCredentials();if(!h||!T||!V)return null;let A=h.expires_at,E=Date.now()/1e3;if(A-E<300){if(o.current)return o.current;let N=(async()=>{try{let j=await Pr({creds:a,profile:T,env:V,credentials:h});return j?(t(!0),j.accessToken):null}catch{return t(!1),null}finally{o.current=null}})();return o.current=N,N}return t(!0),h.access_token},[a]),m=(0,ye.useCallback)(()=>{let h=a.resolveAuth();return!h||h.method!=="basic"?null:{username:h.username,access_key:h.access_key}},[a]),d=(0,ye.useCallback)((h,T)=>{n.current?.revoke();let V=me(h),A=m(),E=new Vn(V.controllerBaseUrl,s,A,T);return n.current=E,E},[m,s]),u=(0,ye.useCallback)(()=>n.current,[]),i=(0,ye.useCallback)(()=>{let h=m();if(h)return h;let T=n.current?.cached;return T?{username:T.username,access_key:T.access_key}:null},[m]),c=(0,ye.useCallback)(async()=>{let h=n.current;return h?h.resolve():null},[]),_=(0,ye.useCallback)(async(h="default")=>{let T=a.getDefaultEnv();await new $n(h,T,a).login(),a.setActiveProfile(h);try{let A=new Be;Te(a,A,h,T)}catch{}t(!0)},[a]),P=(0,ye.useCallback)(async()=>{let h=a.getActiveProfile();if(!h)return null;let T=a.getDefaultEnv(),V=await Zn(a,h,T);return t(!1),{profile:V.profile,env:V.env}},[a]);return{creds:a,tokenValid:e,setTokenValid:t,getToken:s,getBasicAuth:m,getAuthInfo:r,login:_,logout:P,initResolver:d,getResolver:u,getResolvedBasicAuth:i,resolveBasicAuth:c}}var ct=H(Ye(),1);import{mkdtempSync as us,rmSync as fs}from"fs";import{join as ms}from"path";import{tmpdir as ps}from"os";function li(){let[a]=(0,ct.useState)(()=>new Be),e=(0,ct.useRef)(null),t=(0,ct.useRef)(null),n=(0,ct.useRef)(null),o=(0,ct.useCallback)(async s=>{if(e.current)return e.current;if(n.current)return n.current;let m=(async()=>{let d=a.load(),u;if(d.chrome_profile_path)u=d.chrome_profile_path.replace("~",process.env.HOME??"~");else{t.current&&(Rt("tempDir","Previous temp dir removed before retry"),t.current=null);let c=us(ms(ps(),"kane-clean-"));t.current=c,u=c,nt("tempDir",()=>{try{fs(c,{recursive:!0,force:!0})}catch{}})}let i=await Br({userDataDir:u,width:d.window_size.width,height:d.window_size.height,startUrl:s??d.default_url??void 0});return e.current=i,nt("chrome",()=>{i.kill()}),i})();n.current=m;try{return await m}finally{n.current=null}},[a]),r=(0,ct.useCallback)(()=>{Rt("chrome","Chrome killed"),Rt("tempDir","Temp dir removed"),e.current=null,t.current=null},[]);return{ensureChrome:o,killChrome:r}}var eo=[{name:"run",description:"Execute a test run",args:'"objective"'},{name:"login",description:"OAuth login",args:"[--profile name]"},{name:"logout",description:"Logout & revoke tokens",args:"[--profile name]"},{name:"whoami",description:"Show profile info",args:"[--profile name]"},{name:"balance",description:"Show credit balance"},{name:"profiles",description:"Manage profiles",args:"list|switch|delete"},{name:"config",description:"Manage configuration",args:"show|set-window|set-mode|chrome-profile|project|folder"},{name:"new",description:"Start a fresh session (uploads current first)"},{name:"name",description:"Set the current session's name (used at /exit save)",args:"<new-name>"},{name:"summary",description:"View detailed run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"help",description:"Show command reference"},{name:"clear",description:"Clear chat history"},{name:"exit",description:"Quit kane-cli"}];function ci(a){let e=a.trim();if(!e.startsWith("/"))return null;let n=e.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let o=n[0],r={},s=1;for(;s<n.length;){let m=n[s];if(m.startsWith("--")){let d=m.slice(2),u=n[s+1];u&&!u.startsWith("--")?(r[d]=u.replace(/^"|"$/g,""),s+=2):(r[d]=void 0,s++)}else{let d=m.replace(/^"|"$/g,"");o==="run"?r.objective=d:o==="config"?r.action?r.value=d:r.action=d:o==="profiles"?r.action=d:o==="summary"&&(r.index=d),s++}}return{command:o,args:r,raw:e}}var nl=[{name:"Testing",commands:eo.filter(a=>["run","cancel"].includes(a.name))},{name:"Auth",commands:eo.filter(a=>["login","logout","whoami","balance","profiles"].includes(a.name))},{name:"Settings",commands:eo.filter(a=>["config"].includes(a.name))},{name:"Session",commands:eo.filter(a=>["new","name","summary","help","clear","exit"].includes(a.name))}];var to=[{name:"auth",description:"Login, logout, profiles"},{name:"config",description:"View/change settings"},{name:"help",description:"Command reference"},{name:"new",description:"Start a fresh session"},{name:"name",description:"Set the session name",args:"<new-name>"},{name:"summary",description:"View run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"exit",description:"Quit kane-cli"}];var gt=H(X(),1);function Go({flows:a,filterIndex:e}){let t=e!==void 0?a.filter(n=>n.index===e):a;return t.length===0?null:(0,gt.jsx)(b,{flexDirection:"column",children:t.map(n=>(0,gt.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,gt.jsxs)(b,{marginLeft:1,children:[(0,gt.jsx)(l,{color:"#b388ff",bold:!0,children:"Flow "+n.index+": "}),(0,gt.jsx)(l,{color:"#b388ff",children:n.objective})]}),(0,gt.jsx)(Nt,{status:n.status==="error"?"failed":n.status,summary:n.summary,duration:n.duration,steps:n.steps,stepsPassed:n.stepsPassed,stepsFailed:n.stepsFailed,reason:n.reason,creditsConsumed:n.creditsConsumed})]},n.index))})}var ht=H(X(),1),gs={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},di={ok:g.statusPass,error:g.statusFail,cancelled:g.dim};function ui({status:a,command:e,message:t,details:n}){let o=e.startsWith("/")?e.slice(1):e;return(0,ht.jsxs)(b,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,ht.jsx)(b,{marginLeft:1,children:(0,ht.jsxs)(l,{color:di[a],bold:!0,children:[gs[a]," ",o]})}),(0,ht.jsxs)(b,{borderStyle:"round",borderColor:di[a],paddingX:2,flexDirection:"column",width:70,children:[(0,ht.jsx)(l,{children:t}),n&&(0,ht.jsx)(l,{color:g.dim,children:n})]})]})}var hn=H(Ye(),1);import{join as pn}from"path";var mn=H(X(),1);function fi({tabs:a,activeIndex:e}){return(0,mn.jsx)(b,{children:a.map((t,n)=>(0,mn.jsx)(b,{marginRight:1,children:n===e?(0,mn.jsx)(l,{color:g.primary,bold:!0,children:`[ ${t} ]`}):(0,mn.jsx)(l,{color:g.dim,children:` ${t} `})},t))})}var C=H(X(),1),gn=["Commands","Shortcuts","Tests","Setup","About"],no=18,hs="https://www.testmuai.com/support/docs/kane-cli-introduction",vs="https://github.com/LambdaTest/kane-cli/issues";function mi({onClose:a,version:e,environment:t,sessionId:n,runUrl:o}){let[r,s]=(0,hn.useState)(0),[m,d]=(0,hn.useState)(0);(0,hn.useEffect)(()=>{d(0)},[r]);let u=gn[r],i=u==="Commands"?ws():u==="Shortcuts"?xs():u==="Tests"?bs():u==="Setup"?_s():ys({version:e,environment:t,sessionId:n,runUrl:o}),c=i.length,_=m>0,P=m+no<c,h=i.slice(m,m+no);He((V,A)=>{if(A.escape){a();return}if(A.rightArrow||A.tab){s(E=>(E+1)%gn.length);return}if(A.leftArrow){s(E=>(E-1+gn.length)%gn.length);return}if(A.upArrow){d(E=>Math.max(0,E-1));return}if(A.downArrow){d(E=>Math.min(Math.max(0,c-no),E+1));return}});let T=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return c>no&&T.push({keys:"\u2191\u2193",label:"scroll"}),(0,C.jsxs)(b,{flexDirection:"column",borderStyle:"round",borderColor:g.primary,paddingX:2,paddingY:1,children:[(0,C.jsx)(fi,{tabs:[...gn],activeIndex:r,onChange:s}),_&&(0,C.jsx)(b,{marginTop:1,children:(0,C.jsx)(l,{color:g.dim,children:"\u25B2 more above"})}),(0,C.jsx)(b,{marginTop:_?0:1,flexDirection:"column",children:h}),P&&(0,C.jsx)(b,{children:(0,C.jsx)(l,{color:g.dim,children:"\u25BC more below"})}),(0,C.jsx)($t,{bindings:T,escBackLabel:"back to chat"})]})}function ws(){return[(0,C.jsx)(l,{color:g.dimmed,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.cyan,children:'"search amazon for laptop"'})},"ex"),(0,C.jsx)(b,{marginBottom:1},"sp"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Slash commands"},"cmd-h"),...to.map(a=>(0,C.jsxs)(b,{marginLeft:2,children:[(0,C.jsx)(b,{width:14,children:(0,C.jsxs)(l,{color:g.cyan,children:["/",a.name]})}),a.args&&(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:a.args})}),(0,C.jsx)(l,{color:g.dimmed,children:a.description})]},a.name)),(0,C.jsx)(b,{marginBottom:1},"sp2"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,C.jsx)(b,{marginLeft:2,children:(0,C.jsx)(l,{color:g.dim,children:"/config submenu: show \xB7 set-mode \xB7 set-window \xB7 chrome-profile \xB7 project \xB7 folder"})},"config-sub")]}function oo(a,e){return[(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:a},`h-${a}`),...e.map(([t,n],o)=>(0,C.jsxs)(b,{marginLeft:2,children:[(0,C.jsx)(b,{width:26,children:(0,C.jsx)(l,{color:g.cyan,children:t})}),(0,C.jsx)(l,{color:g.dimmed,children:n})]},`r-${a}-${o}`)),(0,C.jsx)(b,{marginBottom:1},`s-${a}`)]}function xs(){return[...oo("Cursor & word edit",[["\u2190 \u2192","Cursor by char"],["Ctrl+A Ctrl+E","Start / end of line"],["Home End","Start / end (Linux/Win; rare on Mac laptops)"],["Backspace","Delete char before cursor"],["Ctrl+W","Delete word back"],["Ctrl+U","Clear input"],["Ctrl+K","Kill from cursor to end"],["Ctrl+\u2190 Ctrl+\u2192","Word jump (Linux/Win, iTerm2)"],["Option+\u2190 Option+\u2192","Word jump (Mac native)"],["Option+B Option+F","Word jump (Mac, Emacs-style)"],["Alt+Backspace","Delete word back (Option+Delete on Mac)"],["Ctrl+Delete Option+Fn+Del","Delete word forward"]]),...oo("History & completion",[["\u2191 \u2193","Previous / next history"],["Tab","Accept ghost / fill highlighted command"],["Ctrl+R","Reverse-search history"],["\u21B5","Submit"],["Esc","Close overlay / clear / back"]]),...oo("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...oo("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Platform caveats"},"cv-h"),(0,C.jsx)(l,{color:g.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,C.jsx)(l,{color:g.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function bs(){return[(0,C.jsxs)(l,{color:g.dimmed,children:["Sessions you run here are saved as ",(0,C.jsx)(l,{color:g.cyan,children:"*_test.md"})," files you can replay later."]},"t-intro"),(0,C.jsx)(b,{marginBottom:1},"t-sp1"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Auto-save"},"t-save-h"),(0,C.jsxs)(l,{color:g.dim,children:[" In ",(0,C.jsx)(l,{color:g.cyan,children:"testing"})," mode, /exit prompts to save the session under a name (default: timestamp)."]},"t-save-1"),(0,C.jsxs)(l,{color:g.dim,children:[" In ",(0,C.jsx)(l,{color:g.cyan,children:"action"})," mode, sessions are ephemeral unless launched with --name or set via /name."]},"t-save-2"),(0,C.jsxs)(l,{color:g.dim,children:[" Output: ",(0,C.jsx)(l,{color:g.cyan,children:"<cwd>/.testmuai/tests/<name>_test.md"})," + sibling ",(0,C.jsx)(l,{color:g.cyan,children:"output-<name>/"})," (Result.md + .internal/meta.json)."]},"t-save-3"),(0,C.jsx)(b,{marginBottom:1},"t-sp2"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Replay from a shell"},"t-run-h"),(0,C.jsxs)(l,{color:g.dim,children:[" ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd run path/to/foo_test.md"})," \xB7 ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd list"})," \xB7 bare ",(0,C.jsx)(l,{color:g.cyan,children:"kane-cli testmd"})," opens a TTY picker."]},"t-run-1"),(0,C.jsx)(l,{color:g.dim,children:" The .md file carries its own config (mode, max_steps, variables, \u2026) so the replay is reproducible."},"t-run-2"),(0,C.jsx)(b,{marginBottom:1},"t-sp3"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Naming a session mid-run"},"t-name-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Type ",(0,C.jsxs)(l,{color:g.cyan,children:["/name ","<new-name>"]})," any time before /exit. Name allowed chars: letters, digits, _, -."]},"t-name-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Discarding at the save prompt: press ",(0,C.jsx)(l,{color:g.cyan,children:"N"})," (only key that discards \u2014 every other key saves with default)."]},"t-name-2")]}function _s(){return[(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"1. Login"},"s1-h"),(0,C.jsx)(l,{color:g.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"2. Project & folder"},"s2-h"),(0,C.jsx)(l,{color:g.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"3. Mode"},"s3-h"),(0,C.jsx)(l,{color:g.dim,children:" testing (saves to TMS) | action (local report). /config set-mode"},"s3-b"),(0,C.jsx)(b,{marginBottom:1},"spacer-1"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Variables (later wins)"},"v-h"),(0,C.jsxs)(l,{color:g.dim,children:[" ",`${pn(xe,"variables")}/*.json`," (global)"]},"v-1"),(0,C.jsxs)(l,{color:g.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,C.jsx)(l,{color:g.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,C.jsx)(b,{marginBottom:1},"spacer-2"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Context files"},"c-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Global: ",pn(xe,"global-memory.md")]},"c-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,C.jsx)(b,{marginBottom:1},"spacer-3"),(0,C.jsx)(l,{color:g.dimmed,bold:!0,children:"Paths"},"p-h"),(0,C.jsxs)(l,{color:g.dim,children:[" Config: ",pn(xe,"tui-config.json")," \xB7 Auth: ",pn(xe,"config.json")]},"p-1"),(0,C.jsxs)(l,{color:g.dim,children:[" Sessions: ",pn(xe,"sessions"),"/"]},"p-2")]}function ys({version:a,environment:e,sessionId:t,runUrl:n}){return[(0,C.jsxs)(b,{children:[(0,C.jsx)(l,{color:g.primary,bold:!0,children:"kane-cli "}),(0,C.jsxs)(l,{color:g.muted,children:["v",a]})]},"title"),(0,C.jsx)(b,{marginBottom:1},"sp"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Environment"})}),(0,C.jsx)(l,{children:e})]},"env"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Session"})}),(0,C.jsx)(l,{children:t})]},"sess"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Default URL"})}),(0,C.jsx)(l,{color:g.cyan,children:n})]},"url"),(0,C.jsx)(b,{marginBottom:1},"sp2"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Docs"})}),(0,C.jsx)(l,{color:g.cyan,underline:!0,children:hs})]},"docs"),(0,C.jsxs)(b,{children:[(0,C.jsx)(b,{width:14,children:(0,C.jsx)(l,{color:g.dimmed,children:"Bugs"})}),(0,C.jsx)(l,{color:g.cyan,underline:!0,children:vs})]},"bugs")]}var Cs=null;function pi(a){Cs=a}import{join as Ht}from"path";var ro=H(X(),1);function gi({status:a,steps:e,duration:t,creditsConsumed:n,reason:o}){let r=a==="passed",s=r?g.green:g.red,m=r?"\u2713":"\u2717",d=r?"Passed":"Failed",u=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,i=typeof n=="number"&&n>0?` \xB7 ${n.toFixed(4)} credits`:"",c=!r&&o?` \xB7 ${o}`:"";return(0,ro.jsxs)(b,{children:[(0,ro.jsxs)(l,{bold:!0,color:s,children:[m," ",d]}),(0,ro.jsxs)(l,{color:g.dimmed,children:[" ","\xB7 ",e," steps \xB7 ",u,i,c]})]})}var vi=H(X(),1);function hi(){return(0,vi.jsx)(l,{color:g.dimmed,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}async function io(a){await new Vt(a.tmsBaseUrl,a.username,a.accessKey).submitFeedback({instruction_id:"",test_id:a.testId,feedback_type:a.feedbackType,mode:a.mode??"human",...a.details?{details:a.details}:{}}),a.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:a.feedbackType})}var y=H(X(),1);function wi({localMode:a=!1,codeExport:e,codeLanguage:t,skipCodeValidation:n,updatePromise:o,migrationResult:r,sessionName:s}={}){In();let m=(0,k.useRef)(new nn),[d,u]=(0,k.useState)(0),i=m.current,[c]=(0,k.useState)(()=>new Be),_=(0,k.useRef)(0),P=(0,k.useCallback)(()=>`msg-${++_.current}`,[]),[h,T]=(0,k.useState)(!1),[V,A]=(0,k.useState)(null),[E,N]=(0,k.useState)(!1),[j,W]=(0,k.useState)(0),[re,Ae]=(0,k.useState)(!1),[Ee,qe]=(0,k.useState)(null),[Ne,ie]=(0,k.useState)(null),Qe=(0,k.useRef)(null),[te,xt]=(0,k.useState)(null),[wn,Kt]=(0,k.useState)(Hn()),[Ze,bt]=(0,k.useState)(null),[we,Ie]=(0,k.useState)([]),[xn,L]=(0,k.useState)(!1),[bn,Gt]=(0,k.useState)(!1),[_t,Ke]=(0,k.useState)(null),[zt,pe]=(0,k.useState)(null),[ft,Xt]=(0,k.useState)(null),it=(0,k.useRef)(null),Me=(0,k.useRef)(0),yt=(0,k.useRef)(""),Jt=(0,k.useRef)(null),Ct=(0,k.useRef)(null),D=(0,k.useRef)({}),M=(0,k.useRef)(null),G=(0,k.useRef)(0),[Y,$e]=(0,k.useState)([]),Q=(0,k.useCallback)(p=>{let v=`s-${++G.current}`;$e(f=>[...f,{id:v,content:p}])},[]),[se,ne]=(0,k.useState)("booting"),[oe,ae]=(0,k.useState)([]),[Pe,Ue]=(0,k.useState)(!1),[Se,Oe]=(0,k.useState)(!1),[ke,Yt]=(0,k.useState)("chat"),[Ge,Ot]=(0,k.useState)(null),[_n,mr]=(0,k.useState)(null),[yn,pr]=(0,k.useState)(!1),[Z,Qt]=(0,k.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Ki=kr(),x=ai(),Cn=li(),Gi=(0,k.useCallback)((p,v,f)=>{let w=it.current;if(!w)return;let S=Me.current+v;Un(i.sessionDir,S,p,w,(O,B,F,U)=>i.log(O,B,F,U),f)},[i]),zi=(0,k.useCallback)((p,v,f)=>{i.logStep(p,v,f)},[i]),Xi=(0,k.useCallback)(p=>M.current?.setStepText(p),[]),Ji=(0,k.useCallback)(()=>M.current?.setStepComplete(),[]),$=Mn(Gi,zi,Xi,Ji),[I,De]=(0,k.useState)(()=>c.load()),[,Yi]=(0,k.useState)(0),Ve=(0,k.useCallback)(()=>Yi(p=>p+1),[]),[R,ge]=(0,k.useState)(null),Dt=x.creds.getActiveProfile(),le=x.creds.getDefaultEnv(),et=(0,k.useCallback)((p,v)=>{let f=p?x.creds.loadProfileConfig(p,v):null;c.save({project_id:f?.project_id??null,project_name:f?.project_name??null,folder_id:f?.folder_id??null,folder_name:f?.folder_name??null}),De(c.load())},[x.creds,c]),mo=(0,k.useCallback)(async(p,v)=>{let f=x.getResolver();if(!f)return null;let w=f.cached??await f.resolve();if(!w)return null;let S=me(v),O=new Vt(S.tmsBaseUrl,w.username,w.access_key);try{let F=(await O.listProjects()).find(J=>J.name==="KaneAI Generated");if(F)return{id:F.project_id,name:F.name};let U=await O.createProject("KaneAI Generated");return{id:U.id,name:U.name}}catch{return null}},[x]),po=(0,k.useCallback)(async(p,v)=>{let f=x.getResolver();if(!f)return null;let w=f.cached??await f.resolve();if(!w)return null;let S=me(p),O=new Vt(S.tmsBaseUrl,w.username,w.access_key);try{let F=(await O.listFolders(v)).find(J=>J.name==="Untitled");if(F)return{id:F.id,name:F.name};let U=await O.createFolder(v,"Untitled");return{id:U.id,name:U.name}}catch{return null}},[x]);(0,k.useEffect)(()=>{E||(i.start({model:I.model,environment:le,profile:Dt}),s&&i.setSessionName(s),N(!0))},[i,E,I.model,le,Dt,s]);let gr=(0,k.useRef)(!1);(0,k.useEffect)(()=>{if(!E||gr.current)return;gr.current=!0;let p=s?[{label:"session",value:s},{label:"test",value:Eo(Ht(process.cwd(),".testmuai","tests",`${s}_test.md`))},{label:"output",value:Eo(Ht(process.cwd(),".testmuai","tests",`output-${s}`))}]:[{label:"session",value:"ephemeral"},{label:"note",value:"use /name <name> to persist this session"}];Q((0,y.jsx)(Tr,{title:"Recording",titleColor:"#ff9500",rows:p}))},[E,s,Q]);let hr=(0,k.useCallback)(async p=>{let v=me(p),f=x.getBasicAuth(),w=f?{username:f.username,accessKey:f.access_key}:await x.getToken().then(O=>O??"");if(!w)return;let S=new Or(v.controllerBaseUrl,w);try{let O=await S.getScreenshotSas();i.setScreenshotSas(O),it.current=new Wn(O,3,(B,F,U,J)=>i.log(B,F,U,J)),i.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched")}catch(O){i.log("warn","SCREENSHOT_SAS_FAILED","Screenshot SAS fetch failed",{error:O instanceof Error?O.message:String(O)})}},[x,i]),mt=(0,k.useCallback)(async p=>{let v=p??x.creds.getDefaultEnv();bt(null),it.current=null;let w=await x.initResolver(v,(S,O,B,F)=>i.log(S,O,B,F)).resolve(!0).catch(()=>null);return bt(w),w&&(i.log("info","AUTH_RESET_OK","Auth reset resolved",{username:w.username,org_id:w.org_id,env:v}),await hr(v)),w},[x,i,hr]),vr=(0,k.useRef)(!1);(0,k.useEffect)(()=>{!h||vr.current||!E||(vr.current=!0,mt().then(p=>{if(p){if(p.org_id!==void 0&&i.setOrgId(String(p.org_id)),i.log("info","BOOT_RESOLVE_OK","Boot auth resolved",{username:p.username,org_id:p.org_id}),!i.hasRemoteLogger){let v=Fr({sessionId:i.sessionId,identity:{org_id:String(p.org_id??""),user_id:String(p.user_id??""),machine_id:Nr(),email:p.email??null,email_domain:p.email_domain??"unknown",user_type:p.user_type??"unknown",env:le},getToken:async()=>x.getToken()});i.setRemoteLogger(v),v.start(),nt("remote-logger",()=>v.shutdownSync()),Ln(v)}}else i.log("warn","BOOT_RESOLVE_FAILED","Boot auth failed \u2014 non-controller APIs may fail")}).catch(p=>{i.log("error","BOOT_RESOLVE_ERROR","Boot auth error",{error:p instanceof Error?p.message:String(p)})}))},[h,E,mt,i]);let Et=(0,k.useCallback)(async()=>{if(Ze)return i.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:Ze.username,org_id:Ze.org_id}),Ze;let p=await x.resolveBasicAuth();return p?(i.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:p.username,org_id:p.org_id,user_id:p.user_id}),bt(p)):i.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),p},[x,Ze,i]),wr=(0,k.useCallback)(async()=>{let p=await Et();if(!p)return i.log("warn","PROJECT_FAILED","No TMS credentials for project resolution"),null;let v=me(le),f=new Vt(v.tmsBaseUrl,p.username,p.access_key),w=x.creds.getActiveProfile(),S=x.creds.getDefaultEnv(),O=w?x.creds.loadProfileConfig(w,S):null,B=O?.project_id??I.project_id;if(B)i.log("info","PROJECT_CACHED","Using cached project",{project_id:B});else{i.log("info","PROJECT_FETCH","No project_id in config, fetching from TMS");try{i.log("info","PROJECT_LIST","Listing projects from TMS",{url:`${v.tmsBaseUrl}/v1/projects`});let U=await f.listProjects((de,je,pt,ze)=>i.log(de,je,pt,ze));i.log("info","PROJECT_LIST_OK","Projects listed",{count:U.length});let J=U.find(de=>de.name==="KaneAI Generated");if(J)B=J.project_id,i.log("info","PROJECT_SELECTED","Using KaneAI Generated project",{project_id:B});else if(U.length>0){let de=U[0];B=de.project_id,i.log("info","PROJECT_SELECTED","Using first project",{name:de.name,project_id:B})}B&&he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:B})}catch(U){return i.log("error","PROJECT_LIST_FAILED","Project listing failed",{error:String(U)}),null}}if(!B)return i.log("warn","PROJECT_NONE","No projects found"),null;let F=O?.folder_id??I.folder_id;if(F)i.log("info","FOLDER_CACHED","Using cached folder",{folder_id:F});else try{i.log("info","FOLDER_FETCH","Fetching default folder",{project_id:B}),F=await f.getDefaultFolder(B),i.log("info","FOLDER_OK","Default folder resolved",{folder_id:F}),F&&he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:F})}catch(U){return i.log("error","FOLDER_FAILED","Default folder fetch failed",{error:String(U)}),null}return{projectId:B,folderId:F??""}},[I.project_id,I.folder_id,Et,le,c,i,x.creds]),ce=(0,k.useCallback)(p=>{let v=P(),f={...p,id:v};Q((0,y.jsx)(ri,{entry:f}))},[P,Q]),K=(0,k.useCallback)((p,v,f,w)=>{Q((0,y.jsx)(ui,{status:p,command:v,message:f,details:w}))},[Q]),xr=(0,k.useCallback)(async(p,v)=>{let f=Kn({objective:p,globalDir:Ht(xe,"variables"),localDir:Ht(process.cwd(),".testmuai","variables")}),w=i.nextRunIndex();Me.current=w,yt.current=f.auteurObjective,i.logRunStart(w,f.auteurObjective,v??""),i.setFirstRun(f.auteurObjective,v??"");let S=x.getResolvedBasicAuth(),O=S,B=null;if(!O&&(B=await x.getToken(),!B)){ce({type:"error",text:"Not authenticated. Run /login first."});return}let F={basicAuth:S??null,token:B,resolver:x.getResolver(),resolvedCreds:null};Jt.current=F;let U=x.creds.getActiveProfile()??"default",J=x.creds.getDefaultEnv();Bn(x.creds,c,U,J,(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt));let de=c.load();if(De(de),w===0&&!a){i.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let fe=await wr(),Xe=me(le),Je=O?{username:O.username,access_key:O.access_key}:await Et();if(Je){let tt=await Xn({tmsBaseUrl:Xe.tmsBaseUrl,auth:{username:Je.username,access_key:Je.access_key},objective:f.auteurObjective,url:v??I.default_url??"",projectId:fe?.projectId??de.project_id??"",folderId:fe?.folderId??de.folder_id??"",hasCustomProfile:!!I.chrome_profile_path,log:(kt,Co,os,rs)=>i.log(kt,Co,os,rs)});tt&&(i.setTestId(tt),fe?.projectId&&i.setProjectId(fe.projectId))}}let je=null;if(Z.useCft)ce({type:"info",text:"CfT mode: Playwright will manage browser"});else if(Z.wsEndpoint)ce({type:"info",text:`WS endpoint: ${Z.wsEndpoint.slice(0,60)}...`});else if(Z.cdpEndpoint)ce({type:"info",text:`CDP endpoint: ${Z.cdpEndpoint}`});else{ce({type:"info",text:"Starting Chrome..."});try{je=await Cn.ensureChrome(v)}catch(Xe){ce({type:"error",text:Fn(Xe)});return}i.logChromeLaunch(je.port,je.cdpEndpoint),ce({type:"info",text:`Chrome ready (port ${je.port})`});let fe=Nn({headless:Z.headless,cdpEndpoint:je.cdpEndpoint,chromePid:je.process.pid});fe&&(M.current=fe,nt("marker-overlay",()=>fe.kill()))}i.setAuteurVariables(f.auteur),Ct.current=f;let pt=O&&!a?await Gn({variables:f,auth:O,orgId:String((await Et())?.org_id??""),env:le,localMode:a,log:(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt)}):{};D.current=pt;let ze=Mt(Ht(xe,"global-memory.md")),jt=Mt(Ht(process.cwd(),".testmuai","context.md")),Zt=je?{cdpEndpoint:je.cdpEndpoint,instance:je,tempDir:null}:Z.wsEndpoint?{wsEndpoint:Z.wsEndpoint,instance:null,tempDir:null}:Z.cdpEndpoint?{cdpEndpoint:Z.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null};if(w===0){let fe={mode:I.mode,max_steps:Z.maxSteps,timeout:Z.timeout>0?Z.timeout:void 0,target:je?"chrome":Z.cdpEndpoint?"cdp":Z.wsEndpoint?"ws":void 0,chrome_profile:I.chrome_profile_path||void 0,cdp_endpoint:Z.cdpEndpoint||void 0,ws_endpoint:Z.wsEndpoint||void 0,headless:Z.headless,global_context:ze??void 0,local_context:jt??void 0,variables:Object.keys(f.auteur).length>0?f.auteur:void 0};i.setResolvedGlobal(fe)}let Bt=qn(f.auteur,f.auteurObjective),Rn=zn({objective:f.auteurObjective,url:v,model:I.model,chrome:Zt,auth:F,sessionId:i.sessionId,runIndex:w,windowSize:I.window_size,maxSteps:Z.maxSteps,headless:Z.headless,variables:Object.keys(Bt).length>0?Bt:void 0,globalContext:ze??void 0,localContext:jt??void 0,sessionContext:i.getContext()});v&&A(v),qe(null),$.startRun(Rn,{environment:le,mode:I.mode,log:(fe,Xe,Je,tt)=>i.log(fe,Xe,Je,tt)}),W(fe=>fe+1)},[x,Cn,c,I,i,le,$,ce,Z,wr,Et]),go=(0,k.useRef)(null);(0,k.useEffect)(()=>{if($.bifurcationInfo&&$.bifurcationInfo!==go.current){go.current=$.bifurcationInfo;let{flows:p,isSingleFlow:v}=$.bifurcationInfo;if(v&&p.length===1&&p[0])i.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:p[0]}),ce({type:"info",text:`Objective: ${p[0]}`});else if(!v&&p.length>1){let f=[`Bifurcated into ${p.length} flows:`];p.forEach((w,S)=>f.push(` ${S+1}. ${w}`)),i.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:p.length}),ce({type:"info",text:f.join(`
|
|
25
|
+
`)})}}},[$.bifurcationInfo,i,ce]);let ho=k.default.useRef(null),vo=k.default.useRef(0),wo=k.default.useRef(0);(0,k.useEffect)(()=>{if($.lastRunEnd&&$.lastRunEnd!==ho.current){ho.current=$.lastRunEnd;let{status:p,duration:v,summary:f,reason:w,context:S}=$.lastRunEnd,{passed:O,failed:B,total:F}=an($.steps);vo.current+=F,wo.current+=v??0,qe({status:p,duration:v??0,summary:f??"",stepsPassed:O,stepsFailed:B,stepsTotal:F,reason:w,finalState:$.lastRunEnd?.final_state,creditsConsumed:$.lastRunEnd?.credits_consumed}),i.logRunEnd(Me.current,p,v,f);let U=$.bifurcationInfo,J=U&&!U.isSingleFlow?U.flows:null,de=on($.lastRunEnd,Me.current,J),je=rn($.lastRunEnd,yt.current,Me.current,de);i.addRunResult(je,$.lastRunEnd?.total_runs);let pt=$.lastRunEnd?.per_flow_metadata;if(U&&!U.isSingleFlow&&pt&&pt.length>1)for(let ze=0;ze<pt.length;ze++){let jt=pt[ze],Zt=$.steps[ze],Bt=Zt?.children??[],Rn=Bt.filter(kt=>kt.status==="passed").length,fe=Bt.filter(kt=>kt.status==="failed").length,Xe=Bt.reduce((kt,Co)=>kt+(Co.duration??0),0),Je=Zt?.status==="failed"?"failed":"passed",tt=U.flows[ze]??Zt?.objective??yt.current;i.addFlow({runIndex:Me.current,flowId:U.flows[ze],objective:tt,status:Je,summary:jt.summary??"",duration:Xe,steps:Rn+fe,stepsPassed:Rn,stepsFailed:fe,reason:jt.error_message??void 0,creditsConsumed:jt.credits_consumed??void 0})}else i.addFlow({runIndex:Me.current,objective:yt.current,status:p,summary:f??"",duration:v??0,steps:F,stepsPassed:O,stepsFailed:B,reason:w,creditsConsumed:$.lastRunEnd?.credits_consumed})}},[$.lastRunEnd,i,ce]);let xo=(0,k.useRef)(null);(0,k.useEffect)(()=>{$.askingUser&&(xo.current=$.askingUser)},[$.askingUser]);let bo=(0,k.useRef)(null);(0,k.useEffect)(()=>{if(Ee&&!$.isRunning&&$.lastRunEnd){if(bo.current===$.lastRunEnd)return;bo.current=$.lastRunEnd,Q((0,y.jsxs)(b,{flexDirection:"column",children:[(0,y.jsx)(gi,{status:Ee.status,steps:Ee.stepsTotal,duration:Ee.duration,creditsConsumed:Ee.creditsConsumed,reason:Ee.reason}),(0,y.jsx)(hi,{})]})),qe(null)}},[Ee,$.isRunning,$.lastRunEnd,Q]),(0,k.useEffect)(()=>{M.current?.setRunActive($.isRunning)},[$.isRunning]),(0,k.useEffect)(()=>{if($.runError&&!$.isRunning){let p=$.runError.trim();i.log("error","RUNNER_ERROR","Runner error occurred",{error:p}),i.escalateRun(i.nextRunIndex()-1);let f=p.split(`
|
|
26
26
|
`).slice(-8).join(`
|
|
27
27
|
`);ce({type:"error",text:`Runner error:
|
|
28
|
-
${f}`})}},[$.runError,$.isRunning,ce,i]);let En=(0,k.useCallback)(async()=>{i.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),qt(Hn()),xt({status:"uploading"});let p=x.getResolvedBasicAuth(),v=null;if(!p&&(v=await x.getToken(),!v))return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let f=Ze??await Et();if(!f)return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),i.setUploadStatus("failed","Could not get TMS credentials"),null;i.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:i.testId,commit_id:i.sessionId,project_id:I.project_id,session_dir:i.sessionDir,run_dirs:i.getRunDirs()});let w={basicAuth:p??null,token:v,resolver:x.getResolver(),resolvedCreds:f};it.current&&(i.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await it.current.drain(),i.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let S=ln({session:i,env:le,auth:w,variables:Ct.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:D.current,projectId:I.project_id,folderId:I.folder_id,totalSteps:vo.current,totalDuration:wo.current,codeExport:cn({codeExport:e,codeLanguage:t,skipCodeValidation:n},I.code_export),onProgress:(F,U,J)=>{i.log("info","EXIT_PROGRESS","Upload progress",{step:F,status:U,detail:J}),qt(de=>Ur(de,F,U,J))},log:(F,U,J,de)=>i.log(F,U,J,de),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),B=await new Mr(S).execute();if(B.success){i.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:B.testId,testcase_id:B.testcaseId??null,share_id:B.shareId??null}),i.setUploadStatus("uploaded"),B.testId&&i.setTestId(B.testId),B.testcaseId&&i.setTestcaseId(B.testcaseId);let F=me(le),U=I.project_id,J=B.testcaseId&&B.shareId&&U?At(F.testManagerUiUrl,U,B.testcaseId,B.shareId):void 0,de=B.testcaseId&&U?an(F.testManagerUiUrl,U,B.testcaseId):void 0;xt({status:"success",testUrl:J,testCaseLink:de,codeExportDir:B.codeExportDir}),mi({shareableLink:J,testCaseLink:de,codeExportDir:B.codeExportDir})}else i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:B.error}),i.setUploadStatus("failed",B.error),xt({status:"failed",error:B.error});return B},[x,le,i,I,Ze,Et]),Sn=(0,k.useCallback)(async()=>{i.log("info","SESSION_RESET_START","Starting session reset via /new"),L(!0);let p=i.getFlows();p.length>0&&Q((0,y.jsx)(Go,{flows:p}));let v=null;if(!a)try{v=await En()??null}catch(S){i.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(S)}),ce({type:"error",text:"Upload failed \u2014 session data saved locally."})}let f=null;try{let{persistRecordedSession:S}=await import("./persist-recorded-session-ZXKA4H7E.js");f=S(i,{testcaseId:i.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:v?.codeExportDir})}catch(S){i.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(S)})}if(v?.success&&v.testcaseId||f){let S=me(le),O=I.project_id,B=v?.testcaseId;Q((0,y.jsx)(Io,{recordedTestPath:f?.recordedTestPath,outputDir:f?.outputDir,shareableLink:B&&v?.shareId&&O?At(S.testManagerUiUrl,O,B,v.shareId):void 0,testCaseLink:B&&O?an(S.testManagerUiUrl,O,B):void 0,codeExportDir:v?.codeExportDir,autoExit:!1}))}i.testId&&Ie(S=>[...S,{testId:i.testId,runCount:j}]),Cn.killChrome(),await i.finish("complete");let w=new tn;w.start({model:I.model,environment:le,profile:Dt??null}),m.current=w,u(S=>S+1),i.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:w.sessionId}),W(0),vo.current=0,wo.current=0,Me.current=0,yt.current="",Ct.current=null,D.current={},it.current=null,Tn.current=0,yo.current=0,xo.current=null,bo.current=null,ho.current=null,go.current=null,qe(null),A(null),xt(null),qt(Hn()),L(!1),Q((0,y.jsxs)(b,{flexDirection:"column",marginY:1,children:[(0,y.jsx)(l,{color:g.dimmed,children:"\u2500".repeat(44)}),(0,y.jsx)(l,{color:g.green,bold:!0,children:"New session started"})]}))},[i,ce,Q,a,En,Cn,j,I,le,Dt]),br=(0,k.useCallback)(async()=>{if(!(i.nextRunIndex()>0)){ce({type:"info",text:"No runs in current session."});return}if($.isRunning){ce({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return}if(I.mode==="testing"&&!i.sessionName){pe("new"),Ke(Po());return}await Sn()},[i,$,ce,I.mode,Sn]),_r=(0,k.useCallback)(async()=>{await i.finish("complete"),q(0,"Session complete")},[i]),Yi=(0,k.useCallback)(async p=>{Kt(!1);let v=i.testId??(we.length>0?we[we.length-1].testId:null);if(p&&v){i.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:p});try{let f=me(le),w=x.getResolvedBasicAuth();w&&await io({tmsBaseUrl:f.tmsBaseUrl,username:w.username,accessKey:w.access_key,testId:v,feedbackType:p,log:(S,O,B,F)=>i.log(S,O,B,F)})}catch(f){i.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(f)})}}else i.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");_r()},[le,x,i,_r,we]),kn=(0,k.useCallback)(async()=>{let p=i.nextRunIndex()>0,v=null;if(p&&!a){i.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),Ae(!0);try{v=await En()??null}catch(w){i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(w)})}i.testId&&Ie(w=>[...w,{testId:i.testId,runCount:j}])}try{let{persistRecordedSession:w}=await import("./persist-recorded-session-ZXKA4H7E.js"),S=w(i,{testcaseId:i.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:v?.codeExportDir});S&&zt(S)}catch(w){i.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(w)})}if(p&&!a&&await i.finish("complete"),!(i.testId??(we.length>0?we[we.length-1].testId:null))||a){await i.finish("complete"),q(0,"No test ID \u2014 quick exit");return}Ae(!0),Kt(!0)},[i,a,En,j,we,I]),St=(0,k.useCallback)(async()=>{if(re)return;i.log("info","EXIT_START","TUI exit initiated");let p=I.mode==="testing",v=i.nextRunIndex()>0;if(p&&v&&!i.sessionName){pe("exit"),Ke(Po());return}await kn()},[re,i,I.mode,kn]),Qi=(0,k.useCallback)(p=>{p&&i.setSessionName(p);let v=Gt;Ke(null),pe(null),v==="new"?Sn():kn()},[i,Gt,kn,Sn]);(0,k.useEffect)(()=>{if(!re)return;let p=300*1e3,v=setTimeout(async()=>{i.setUploadStatus("failed","Upload timed out after 5m"),await i.finish("complete"),q(0,"Upload timed out after 5m")},p);return()=>clearTimeout(v)},[re,i]);let Tn=k.default.useRef(0),_o=k.default.useRef(null),yo=k.default.useRef(0);He((p,v)=>{if(v.ctrl&&p==="c"){if(re){yo.current+=1,yo.current>=2&&(i.setUploadStatus("pending","Force exit by user"),i.finish("complete"),q(0,"Force exit by user"));return}if($.isRunning){$.cancelRun(),ce({type:"info",text:"Run cancelled."}),Tn.current++,_o.current&&clearTimeout(_o.current),_o.current=setTimeout(()=>{Tn.current=0},2e3),Tn.current>=2&&St();return}St()}});let yr=k.default.useMemo(()=>{let p=x.creds.getActiveProfile()??"none",v=x.creds.getDefaultEnv();return[{id:"run",label:"Run",type:"submenu",children:[{id:"run-start",label:"Start Run",type:"action"},{id:"run-config",label:"Run Config",type:"submenu",children:[{id:"run-headless",label:"Headless",type:"select",currentValue:Z.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{Yt(w=>({...w,headless:f==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Z.maxSteps),onValue:f=>{let w=parseInt(f,10);w>0&&Yt(S=>({...S,maxSteps:w}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Z.timeout?String(Z.timeout):"",placeholder:"0 = no timeout",onValue:f=>{let w=parseInt(f,10);Yt(S=>({...S,timeout:isNaN(w)?0:w}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:Z.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:f=>{Yt(w=>({...w,cdpEndpoint:f}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:Z.wsEndpoint,placeholder:"wss://...",onValue:f=>{Yt(w=>({...w,wsEndpoint:f}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{x.logout().then(f=>{Ve();let w=x.creds.getActiveProfile(),S=x.creds.getDefaultEnv();et(w,S),mt().catch(()=>{}),f?K("ok","/logout",`Logged out: ${f.profile} [${f.env}]`):K("ok","/logout","No active profile")}).catch(()=>{K("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let f=x.creds.getActiveProfile()??"none",w=x.creds.getDefaultEnv(),S=x.creds.loadBasicAuth(f,w),O=S?"basic":x.creds.loadCredentials(f,w)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:f},{key:"Environment",value:w}]},{label:"Authentication",entries:[{key:"Method",value:O},...S?[{key:"Username",value:S.username}]:[]]},{label:"Token",entries:[{key:"Status",value:x.tokenValid?"valid":"not logged in",color:x.tokenValid?g.statusPass:g.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let f=x.creds.getActiveProfile()??"default",w=x.creds.getDefaultEnv(),S=me(w);try{let O=x.getBasicAuth(),B=O?null:await x.getToken();if(!O&&!B){ie({text:"Not authenticated. Run /login first.",color:g.red});return}let{ControllerClient:F}=await import("./controller-client-7BIK5FYL.js"),J=await(O?new F(S.controllerBaseUrl,{username:O.username,accessKey:O.access_key}):new F(S.controllerBaseUrl,B)).getCreditBalance();ie({text:`Credits \u2014 available: ${J.available_credits}, total: ${J.total_credits} (${f} / ${w})`,color:g.green})}catch(O){ie({text:`Balance check failed: ${O instanceof Error?O.message:String(O)}`,color:g.red})}Qe.current&&clearTimeout(Qe.current),Qe.current=setTimeout(()=>{ie(null),Qe.current=null},5e3)})()}},{id:"profiles",label:"Profiles",type:"action",onProfilesView:()=>{}}]},{id:"config",label:"Config",type:"submenu",children:[{id:"config-show",label:"Show",type:"action",onInfo:()=>({title:"Show Config",sections:[{label:"General",entries:[{key:"Model",value:"v16-alpha"},{key:"Mode",value:I.mode}]},{label:"Browser",entries:[{key:"Window",value:`${I.window_size.width}x${I.window_size.height}`},{key:"Chrome Profile",value:I.chrome_profile_path?I.chrome_profile_path.split("/").pop()??I.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:I.project_name?`${I.project_name} (${I.project_id})`:I.project_id??"(none)"},{key:"Folder",value:I.folder_name?`${I.folder_name} (${I.folder_id})`:I.folder_id??"(none)"},{key:"Default URL",value:at}]},{label:"Code Export",entries:[{key:"Enabled",value:I.code_export.enabled?"yes":"no"},{key:"Language",value:I.code_export.language},{key:"Skip Validation",value:I.code_export.skip_validation?"yes":"no"}]}]})},{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:()=>{}},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...I.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:g.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${I.window_size.width}x${I.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:I.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:f=>{(f==="action"||f==="testing")&&(c.set("mode",f),De(c.load()),K("ok","/config set-mode",f))}},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:I.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:I.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{c.set("code_export",{...I.code_export,enabled:f==="on"}),De(c.load()),K("ok","/config code-export enabled",f)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:I.code_export.language,options:[{label:"python",value:"python"},{label:"javascript",value:"javascript"}],onValue:f=>{f!=="python"&&f!=="javascript"||(c.set("code_export",{...I.code_export,language:f}),De(c.load()),K("ok","/config code-export language",f))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:I.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{c.set("code_export",{...I.code_export,skip_validation:f==="on"}),De(c.load()),K("ok","/config code-export skip-validation",f)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{St()}}]},[x,c,I,ce,St,Z,Ve,K]),Zi=(0,k.useCallback)(p=>{if($.askingUser){let f=$.askingUser;Q((0,y.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,y.jsx)(b,{marginLeft:1,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"Agent Question"})}),(0,y.jsxs)(b,{borderStyle:"round",borderColor:g.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,y.jsxs)(b,{children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"?"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{wrap:"wrap",children:f})})]}),(0,y.jsxs)(b,{marginTop:1,children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.dim,bold:!0,children:"\u2192"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{color:g.accent,wrap:"wrap",children:p})})]})]})]})),xo.current=null,$.sendAnswer(p);return}if(i.logCommand(p),$.isRunning){ce({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let v=li(p);if(v)switch(v.command){case"login":case"logout":case"whoami":case"profiles":case"balance":case"auth":Ot("auth");return;case"config":Ot("config");return;case"help":pr(!0);return;case"update":{(async()=>{let{getUpdateCommand:f}=await import("./version-check-6DXFF6IN.js");K("ok","/update",`To update kane-cli, run: ${f()}`)})();return}case"summary":{let f=i.getFlows();if(f.length===0){K("ok","/summary","No runs yet in this session.");return}let w=v.args.index?parseInt(v.args.index,10):void 0;if(w!==void 0&&!i.getFlow(w)){K("error","/summary",`No flow at index ${w}`,`${f.length} flow${f.length===1?"":"s"} available. Use /summary to see all.`);return}Q((0,y.jsx)(Go,{flows:f,filterIndex:w})),K("ok","/summary",w!==void 0?`Flow ${w}`:`${f.length} flow${f.length===1?"":"s"}`);return}case"new":br(),K("ok","/new","Session reset");return;case"name":{let f=v.raw.replace(/^\/name\s*/,"").trim();if(!f){K("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:w}=await import("./name-validator-5YGJXLZ7.js");try{w(f),i.setSessionName(f),K("ok","/name",`Session name set: ${f}`)}catch(S){K("error","/name",S.message)}})();return}case"cancel":$.cancelRun(),K("ok","/cancel","Run cancelled");return;case"clear":K("ok","/clear","Chat cleared");return;case"exit":St();return;default:K("error",`/${v.command}`,"Unknown command");return}if(p.trim().toLowerCase()==="exit"){St();return}Q((0,y.jsxs)(b,{children:[(0,y.jsx)(l,{color:"#b388ff",children:"\u276F "}),(0,y.jsx)(l,{children:p})]})),xr(p,at)},[$,ce,K,Q,i,xr,St,br]),Cr=x.getAuthInfo(),es=Cr?Cr.method==="basic"?"basic auth":"oauth":"not logged in",ts=(()=>{if(yn)return["help"];if(R)return R.phase==="wizard"?["auth","login"]:R.phase==="project"?["auth","login","project"]:R.phase==="folder"?["auth","login","folder"]:["auth","login"];let p={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return Ge==="auth"?_n?["auth",p[_n]]:["auth"]:Ge==="config"?_n?["config",p[_n]]:["config"]:Ge==="help"?["help"]:$.askingUser?["agent question"]:[]})();return(0,y.jsxs)(b,{flexDirection:"column",children:[Y.length>0&&(0,y.jsx)(An,{items:Y,children:p=>(0,y.jsx)(b,{paddingX:1,children:p.content},p.id)}),!h&&!Se&&(0,y.jsx)(ni,{onComplete:()=>{let p=x.creds.getActiveProfile(),v=x.creds.getDefaultEnv(),f=p?x.creds.loadCredentials(p,v):null,w=p?x.creds.loadBasicAuth(p,v):null,S=!!(f||w),O=w?.username??p??null;Q((0,y.jsx)(Qn,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:st,authenticated:S,user:O})),Oe(!0);let B=(F,U,J,de)=>{i.log(F,U,J,de)};if(Lr(x.creds,B).then(F=>{if(F.status==="authenticated"){let{profile:U,env:J,tmsCreds:de}=F.result;x.creds.setActiveProfile(U),x.creds.setDefaultEnv(J),Ve(),bt(de),ne("ready"),T(!0)}else F.status==="needs_pick"?(ae(F.profiles),ne("pick")):ne("login")}).catch(F=>{i.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(F)}),ne("login")}),o&&o.then(async F=>{if(F){let{getUpdateCommand:U}=await import("./version-check-6DXFF6IN.js");K("ok","update available",`${F.current} \u2192 ${F.latest}`,`Run: ${U()}`)}}).catch(()=>{}),r&&r.changes.length>0){let F=`kane-cli updated to ${r.toVersion}. Default settings changed:`,U=[...r.changes.map(J=>`\u2022 ${J.description} (${J.field}: ${JSON.stringify(J.from)} \u2192 ${JSON.stringify(J.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
29
|
-
`);K("ok","defaults updated",F,U)}}}),!h&&se==="booting"&&Se&&(0,y.jsx)(b,{paddingX:1,children:(0,y.jsx)(l,{color:"yellow",children:"Checking authentication..."})}),!h&&se==="pick"&&(0,y.jsx)(ys,{profiles:oe,onCancel:()=>ne("login"),onSelect:async(p,v)=>{x.creds.setActiveProfile(p),x.creds.setDefaultEnv(v),Ve(),Ue(!0);let f=(w,S,O,B)=>{i.log(w,S,O,B)};try{let w=await Vr(x.creds,p,v,f);Ue(!1),w.status==="authenticated"?(et(p,v),ne("ready"),T(!0)):ne("login")}catch{Ue(!1),ne("login")}},validating:Pe}),!h&&se==="login"&&!R&&(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(p,v,f,w)=>{let{validateBasicAuth:S}=await import("./validate-basic-27BIMJ2F.js");await S(v,f,w),x.creds.saveBasicAuth(p,v,{username:f,access_key:w}),x.creds.setActiveProfile(p),x.creds.setDefaultEnv(v),Te(x.creds,c,p,v),x.setTokenValid(!0),Ve()},onOAuthLogin:async(p,v)=>{x.creds.setDefaultEnv(v),await x.login(p),Te(x.creds,c,p,v),Ve()},onComplete:(p,v)=>{mt(v).then(()=>{Ve(),ge({phase:"project",profile:p,env:v})}).catch(()=>{ge({phase:"project",profile:p,env:v})})},onCancel:()=>{q(0,"Login cancelled at startup")}}),!h&&se==="login"&&R?.phase==="project"&&(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(p,v)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:p,project_name:v}),K("ok","/config project",v,`id: ${p}`),ge({...R,phase:"folder"})},onCancel:async()=>{let p=await mo(R.profile,R.env);p&&(he(x.creds,c,R.profile,R.env,{projectId:p.id,projectName:p.name}),K("ok","/config project",p.name,`id: ${p.id}`),ge({...R,phase:"folder"}))}}),!h&&se==="login"&&R?.phase==="folder"&&(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:x.creds.loadProfileConfig(R.profile,R.env)?.project_id??"",currentFolderId:null,env:R.env,onSelect:(p,v)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:p,folder_name:v}),K("ok","/config folder",v,`id: ${p}`),et(R.profile,R.env),ge(null),ne("ready"),T(!0)},onCancel:async()=>{let p=x.creds.loadProfileConfig(R.profile,R.env);if(!p?.project_id)return;let v=await po(R.env,p.project_id);v&&(he(x.creds,c,R.profile,R.env,{folderId:v.id,folderName:v.name}),K("ok","/config folder",v.name,`id: ${v.id}`),et(R.profile,R.env),ge(null),ne("ready"),T(!0))}}),h&&ke==="menu"&&!re&&(0,y.jsx)(b,{marginBottom:1,children:(0,y.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,y.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsx)(l,{color:"#ff9500",children:I.model}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsx)(l,{color:g.dimmed,children:es}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsxs)(l,{color:g.dimmed,children:[Dt??"no profile","/",le]})]})}),h&&!re&&(0,y.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[ke==="menu"&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Mo,{items:yr,onRunSelected:()=>Jt("chat"),onActiveViewChange:mr,renderLoginWizard:p=>{let v=R?.phase??"wizard";if(v==="project")return(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(f,w)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:f,project_name:w}),K("ok","/config project",w,`id: ${f}`),ge(S=>S?{...S,phase:"folder"}:null)},onCancel:async()=>{if(!R)return;let f=await mo(R.profile,R.env);f&&(he(x.creds,c,R.profile,R.env,{projectId:f.id,projectName:f.name}),K("ok","/config project",f.name,`id: ${f.id}`),ge(w=>w?{...w,phase:"folder"}:null))}});if(v==="folder"){let f=x.creds.loadProfileConfig(R.profile,R.env);return(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:f?.project_id??"",currentFolderId:null,env:R.env,onSelect:(w,S)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:w,folder_name:S}),K("ok","/config folder",S,`id: ${w}`),et(R.profile,R.env),ge(null),p()},onCancel:async()=>{if(!R)return;let w=x.creds.loadProfileConfig(R.profile,R.env);if(!w?.project_id)return;let S=await po(R.env,w.project_id);S&&(he(x.creds,c,R.profile,R.env,{folderId:S.id,folderName:S.name}),K("ok","/config folder",S.name,`id: ${S.id}`),et(R.profile,R.env),ge(null),p())}})}return(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(f,w,S,O)=>{let{validateBasicAuth:B}=await import("./validate-basic-27BIMJ2F.js");await B(w,S,O),x.creds.saveBasicAuth(f,w,{username:S,access_key:O}),x.creds.setActiveProfile(f),x.creds.setDefaultEnv(w),Te(x.creds,c,f,w),x.setTokenValid(!0),Ve()},onOAuthLogin:async(f,w)=>{x.creds.setDefaultEnv(w),await x.login(f),Te(x.creds,c,f,w),Ve()},onComplete:(f,w)=>{mt(w).then(()=>{ge({phase:"project",profile:f,env:w})}).catch(()=>{ge({phase:"project",profile:f,env:w})})},onCancel:()=>{ge(null),p()}})},renderProfilesView:p=>(0,y.jsx)(ko,{creds:x.creds,onSwitch:(v,f)=>{let w=x.creds.getActiveProfile()??"(none)";x.creds.setActiveProfile(v),x.creds.setDefaultEnv(f),Te(x.creds,c,v,f),et(v,f),Ve(),mt(f).catch(()=>{}),K("ok","/profiles switch",`${w} \u2192 ${v} [${f}]`)},onCancel:p}),renderChromeProfilePicker:p=>(0,y.jsx)(To,{currentPath:I.chrome_profile_path,onSelect:v=>{c.set("chrome_profile_path",v),De(c.load()),K("ok","/config chrome-profile",v),p()},onCancel:p}),renderProjectPicker:p=>(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:I.project_id,env:le,onSelect:(v,f)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:v,projectName:f}),K("ok","/config project",f,`id: ${v}`),De(c.load()),p()},onCancel:p}),renderFolderPicker:p=>(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:le,onSelect:(v,f)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:v,folderName:f}),K("ok","/config folder",f,`id: ${v}`),De(c.load()),p()},onCancel:p}),renderWindowSizePicker:p=>(0,y.jsx)(Ko,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(v,f)=>{c.set("window_size",{width:v,height:f}),De(c.load()),K("ok","/config set-window",`${v} \xD7 ${f}`),p()},onCancel:p})}),Ne&&(0,y.jsx)(b,{paddingX:1,marginTop:1,children:(0,y.jsx)(l,{color:Ne.color,children:Ne.text})})]}),ke==="chat"&&(0,y.jsxs)(y.Fragment,{children:[(()=>{let p=Dn({isRunning:$.isRunning,bifurcationInfo:$.bifurcationInfo,steps:$.steps,cmInitCounts:$.cmInitCounts,replayInfo:$.replayInfo});return p?(0,y.jsx)(On,{label:p.label,hasBifurcation:p.hasBifurcation}):null})(),$.isRunning&&$.steps.length>0&&(0,y.jsx)(Pn,{steps:$.steps,bifurcated:!!$.bifurcationInfo&&!$.bifurcationInfo.isSingleFlow,flows:$.bifurcationInfo?.flows,cmInitCounts:$.cmInitCounts,onStepCommit:Q},`run-${Me.current}`),yn&&(0,y.jsx)(fi,{onClose:()=>pr(!1),version:st,environment:x.creds.getDefaultEnv(),sessionId:i.sessionId,runUrl:I.default_url??at}),Ge&&!$.isRunning&&(()=>{let p=yr.find(v=>v.id===Ge);return p?.children?(0,y.jsx)(Mo,{items:p.children,onRunSelected:()=>Ot(null),onDismiss:()=>Ot(null),onActiveViewChange:mr,renderLoginWizard:v=>{let f=R?.phase??"wizard";if(f==="project")return(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(w,S)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:w,project_name:S}),K("ok","/config project",S,`id: ${w}`),ge(O=>O?{...O,phase:"folder"}:null)},onCancel:async()=>{if(!R)return;let w=await mo(R.profile,R.env);w&&(he(x.creds,c,R.profile,R.env,{projectId:w.id,projectName:w.name}),K("ok","/config project",w.name,`id: ${w.id}`),ge(S=>S?{...S,phase:"folder"}:null))}});if(f==="folder"){let w=x.creds.loadProfileConfig(R.profile,R.env);return(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:w?.project_id??"",currentFolderId:null,env:R.env,onSelect:(S,O)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:S,folder_name:O}),K("ok","/config folder",O,`id: ${S}`),et(R.profile,R.env),ge(null),v()},onCancel:async()=>{if(!R)return;let S=x.creds.loadProfileConfig(R.profile,R.env);if(!S?.project_id)return;let O=await po(R.env,S.project_id);O&&(he(x.creds,c,R.profile,R.env,{folderId:O.id,folderName:O.name}),K("ok","/config folder",O.name,`id: ${O.id}`),et(R.profile,R.env),ge(null),v())}})}return(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(w,S,O,B)=>{let{validateBasicAuth:F}=await import("./validate-basic-27BIMJ2F.js");await F(S,O,B),x.creds.saveBasicAuth(w,S,{username:O,access_key:B}),x.creds.setActiveProfile(w),x.creds.setDefaultEnv(S),Te(x.creds,c,w,S),x.setTokenValid(!0),Ve()},onOAuthLogin:async(w,S)=>{x.creds.setDefaultEnv(S),await x.login(w),Te(x.creds,c,w,S),Ve()},onComplete:(w,S)=>{mt(S).then(()=>{ge({phase:"project",profile:w,env:S})}).catch(()=>{ge({phase:"project",profile:w,env:S})})},onCancel:()=>{ge(null),v()}})},renderProfilesView:v=>(0,y.jsx)(ko,{creds:x.creds,onSwitch:(f,w)=>{let S=x.creds.getActiveProfile()??"(none)";x.creds.setActiveProfile(f),x.creds.setDefaultEnv(w),Te(x.creds,c,f,w),et(f,w),Ve(),mt(w).catch(()=>{}),K("ok","/profiles switch",`${S} \u2192 ${f} [${w}]`),v()},onCancel:v}),renderChromeProfilePicker:v=>(0,y.jsx)(To,{currentPath:I.chrome_profile_path,onSelect:f=>{c.save({chrome_profile_path:f}),De(c.load()),K("ok","/config chrome-profile",f),v()},onCancel:v}),renderProjectPicker:v=>(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:I.project_id,env:le,onSelect:(f,w)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:f,projectName:w}),De(c.load()),K("ok","/config project",w,`id: ${f}`),v()},onCancel:v}),renderFolderPicker:v=>(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:le,onSelect:(f,w)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:f,folderName:w}),De(c.load()),K("ok","/config folder",w,`id: ${f}`),v()},onCancel:v}),renderWindowSizePicker:v=>(0,y.jsx)(Ko,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(f,w)=>{c.set("window_size",{width:f,height:w}),De(c.load()),K("ok","/config set-window",`${f} \xD7 ${w}`),v()},onCancel:v})},Ge):null})(),Ge&&Ne&&(0,y.jsx)(b,{paddingX:1,marginTop:1,children:(0,y.jsx)(l,{color:Ne.color,children:Ne.text})}),!Ge&&!yn&&!_t&&$.askingUser&&(0,y.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,y.jsx)(b,{marginLeft:1,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"Agent Question"})}),(0,y.jsx)(b,{borderStyle:"round",borderColor:g.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,y.jsxs)(b,{children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"?"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{wrap:"wrap",children:$.askingUser})})]})})]}),!Ge&&!yn&&!_t&&(0,y.jsx)(Rr,{onSubmit:Zi,onEscape:void 0,history:qi,commands:to,placeholder:$.askingUser?"Type your answer...":$.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)"})]})]}),h&&re&&te&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Ao,{steps:wn,status:te.status,testUrl:te.testUrl,error:te.error}),te.status==="success"&&(0,y.jsx)(Io,{recordedTestPath:ft?.recordedTestPath,outputDir:ft?.outputDir,shareableLink:te.testUrl,testCaseLink:te.testCaseLink,codeExportDir:te.codeExportDir,autoExit:!1})]}),_t&&(0,y.jsx)(Wr,{defaultName:_t,onSubmit:Qi}),bn&&(0,y.jsx)(Hr,{onSubmit:Yi}),xn&&te&&(0,y.jsx)(Ao,{steps:wn,status:te.status,error:te.error}),h&&!re&&(0,y.jsx)(Zr,{profile:Dt,environment:le,model:I.model,tokenValid:x.tokenValid,sessionId:i.sessionId,runCount:j,viewMode:ke,breadcrumb:ts})]})}function ys({profiles:a,onSelect:e,onCancel:t,validating:n}){let[o,r]=(0,k.useState)(0);return He((s,m)=>{if(!n){if(m.escape){t();return}if(m.upArrow&&o>0&&r(d=>d-1),m.downArrow&&o<a.length-1&&r(d=>d+1),m.return){let d=a[o];e(d.profile,d.env)}}}),(0,y.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,y.jsx)(l,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,y.jsx)(b,{marginTop:1,flexDirection:"column",children:a.map((s,m)=>(0,y.jsxs)(l,{children:[m===o?"\u276F ":" ",(0,y.jsx)(l,{color:m===o?"#ff9500":"white",bold:m===o,children:s.profile}),(0,y.jsxs)(l,{color:"gray",children:[" [",s.env,"]"]})]},`${s.profile}-${s.env}`))}),n&&(0,y.jsx)(b,{marginTop:1,children:(0,y.jsx)(l,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,y.jsx)(b,{marginTop:1,children:(0,y.jsx)(l,{color:"gray",children:"Esc = new login"})})]})}var Ii=H(Ai(),1),{program:Mc,createCommand:Uc,createArgument:Hc,createOption:Wc,CommanderError:qc,InvalidArgumentError:Kc,InvalidOptionArgumentError:Gc,Command:Pi,Argument:zc,Option:rt,Help:Xc}=Ii.default;import{join as ut}from"path";var $i=H(Ye(),1);var Fe=H(Ye(),1);var vt=H(X(),1);function Oi({steps:a,bifurcationInfo:e,perFlowMetadata:t}){return!e||e.isSingleFlow||!t||t.length<=1?null:(0,vt.jsx)(b,{flexDirection:"column",children:t.map((n,o)=>{let r=a[o],s=r?.children??[],m=s.filter(P=>P.status==="passed").length,d=s.filter(P=>P.status==="failed").length,u=m+d,i=s.reduce((P,h)=>P+(h.duration??0),0),c=r?.status==="failed"?"failed":"passed",_=e.flows[o]??r?.objective??`Flow ${o+1}`;return(0,vt.jsxs)(b,{flexDirection:"column",marginTop:o>0?1:0,children:[(0,vt.jsxs)(b,{marginLeft:1,children:[(0,vt.jsx)(l,{color:"#b388ff",bold:!0,children:"Flow "+(o+1)+": "}),(0,vt.jsx)(l,{color:"#b388ff",children:_})]}),(0,vt.jsx)(Nt,{status:c,summary:n?.summary??"",duration:i,steps:u,stepsPassed:m,stepsFailed:d,reason:n?.error_message??void 0,creditsConsumed:n?.credits_consumed??void 0})]},`flow-summary-${o}`)})})}var ve=H(X(),1);function Di({config:a,spawnOpts:e,cancelRef:t,banner:n,onComplete:o,onStepEnd:r,onReasoning:s,onStepComplete:m}){let{exit:d}=In(),u=Mn(r,void 0,s,m),i=(0,Fe.useRef)(!1),c=(0,Fe.useRef)(!1),[_,P]=(0,Fe.useState)("");(0,Fe.useEffect)(()=>{i.current||(i.current=!0,u.startRun(a,e))},[a,e,u]),(0,Fe.useEffect)(()=>{t&&(t.current=()=>u.cancelRun())},[t,u]);let h=(0,Fe.useRef)(0);He((A,E)=>{E.ctrl&&A==="c"&&(u.isRunning?(h.current++,h.current>=2?d():u.cancelRun()):d())}),He((A,E)=>{u.askingUser&&(E.return?(u.sendAnswer(_),P("")):E.backspace||E.delete?P(N=>N.slice(0,-1)):A&&!E.ctrl&&!E.meta&&P(N=>N+A))},{isActive:!!u.askingUser}),(0,Fe.useEffect)(()=>{if(!u.isRunning&&u.lastRunEnd&&!c.current){c.current=!0;let{passed:A,failed:E,total:N}=sn(u.steps),j=u.bifurcationInfo;o({lastRunEnd:u.lastRunEnd,stepsPassed:A,stepsFailed:E,stepsTotal:N,hadError:!1,bifurcationFlows:j&&!j.isSingleFlow?j.flows:null}),d()}},[u.isRunning,u.lastRunEnd,u.steps,o,d]),(0,Fe.useEffect)(()=>{u.runError&&!u.isRunning&&!c.current&&(c.current=!0,o({lastRunEnd:null,stepsPassed:0,stepsFailed:0,stepsTotal:0,hadError:!0,bifurcationFlows:null}),d())},[u.runError,u.isRunning,o,d]);let T=u.lastRunEnd?(()=>{let{passed:A,failed:E,total:N}=sn(u.steps);return{status:u.lastRunEnd.status,duration:u.lastRunEnd.duration??0,summary:u.lastRunEnd.summary??"",stepsPassed:A,stepsFailed:E,stepsTotal:N,reason:u.lastRunEnd.reason,finalState:u.lastRunEnd.final_state,creditsConsumed:u.lastRunEnd.credits_consumed}})():null,V=(0,Fe.useMemo)(()=>n?[{key:"banner",...n}]:[],[n]);return(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(An,{items:V,children:A=>(0,ve.jsxs)(b,{flexDirection:"column",marginBottom:1,children:[(0,ve.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,ve.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,ve.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,ve.jsx)(l,{color:g.cyan,children:A.model}),(0,ve.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,ve.jsx)(l,{color:g.dimmed,children:A.auth})]}),A.status?.map((E,N)=>(0,ve.jsx)(l,{color:g.dimmed,children:E},N))]},A.key)}),(()=>{let A=Dn({isRunning:u.isRunning,bifurcationInfo:u.bifurcationInfo,steps:u.steps,cmInitCounts:u.cmInitCounts,replayInfo:u.replayInfo});return A?(0,ve.jsx)(On,{label:A.label,hasBifurcation:A.hasBifurcation}):null})(),u.steps.length>0&&(0,ve.jsx)(Pn,{steps:u.steps,bifurcated:!!u.bifurcationInfo&&!u.bifurcationInfo.isSingleFlow,flows:u.bifurcationInfo?.flows,cmInitCounts:u.cmInitCounts,staticSteps:!0}),u.askingUser&&(0,ve.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,ve.jsxs)(l,{color:g.yellow,children:['Agent is asking: "',u.askingUser,'"']}),(0,ve.jsxs)(l,{children:["> ",_,"\u2588"]})]}),u.runError&&(0,ve.jsx)(Gr,{message:u.runError,code:"RUNNER_ERROR"}),T&&u.lastRunEnd&&(0,ve.jsx)(Oi,{steps:u.steps,bifurcationInfo:u.bifurcationInfo,perFlowMetadata:u.lastRunEnd.per_flow_metadata??[]}),T&&(0,ve.jsx)(Nt,{status:T.status==="passed"?"passed":"failed",summary:T.summary??"",duration:T.duration,steps:T.stepsTotal,stepsPassed:T.stepsPassed,stepsFailed:T.stepsFailed,reason:T.reason,creditsConsumed:T.creditsConsumed})]})}import{createInterface as Ls}from"readline";function Wt(a){process.stdout.write(JSON.stringify(a)+`
|
|
30
|
-
`)}async function
|
|
31
|
-
`),process.exit(2));let{runListTui:t,resolveCurrentOrgId:n}=await import("./testmd-actions-YYFFNNIH.js"),o=await n({});o.ok||process.exit(o.code),process.exit(await t(o.orgId))});Ms(e),Us(e),Hs(e),Ws(e),qs(e)}function Ns(a,e){return e.concat(a)}function Ms(a){a.command("run <path>").description("Run a test from a *_test.md file").option("--headless","Run Chrome in headless mode").option("--max-steps <n>","Max agent steps","30").option("--timeout <seconds>","Kill after N seconds").option("--cdp-endpoint <url>","Connect to existing Chrome via CDP").option("--ws-endpoint <url>","Playwright WebSocket endpoint").option("--global-context <file>",`Override global context (default: ${Fs(xe,"global-memory.md")})`).option("--local-context <file>","Override local context (default: .testmuai/context.md in cwd)").addOption(new rt("--model <name>","Model override").hideHelp()).option("--variables <json>","Inline variables JSON").option("--variables-file <path>","Load variables from file").option("--session-context <json>","Session context JSON (prior runs)").addOption(new rt("--cft","Use Playwright Chromium instead of managed Chrome").hideHelp()).option("--username <user>","Basic auth username (skip OAuth)").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").option("--mode <name>","Run mode: action | testing").option("--agent","Agent mode: plain NDJSON output, no colors/UI").option("--task-skills","Enable domain-specific task skills (experimental)").addOption(new rt("--local","Skip TMS integration (no uploads, no variables/secrets push)").hideHelp()).option("--code-export","Generate code export after upload").option("--code-language <lang>","Code-export language (python|javascript)").option("--name <name>","Persist session under this name").option("--skip-code-validation","Skip post-codegen validation").option("--no-skip-code-validation","Force post-codegen validation").option("--on-lock-conflict <mode>","lock conflict policy: readonly|fail|wait",e=>{if(e!=="readonly"&&e!=="fail"&&e!=="wait")throw new Error(`--on-lock-conflict must be readonly|fail|wait, got: ${e}`);return e}).option("--push","always commit at end-of-run (no retry semantics)").option("--retry","on replay failure, full-restart with shrinking replay window; falls back to complete re-author after --retry-count attempts").option("--retry-count <n>","max replay restart attempts before falling back to complete re-author (default: 3)",e=>{let t=parseInt(e,10);if(Number.isNaN(t)||t<0)throw new Error(`--retry-count must be a non-negative integer, got: ${e}`);return e}).option("--author","bypass walker; force fresh test+testcase in TMS; replace local output entirely").action(async(e,t)=>{let{runTestMdFile:n}=await import("./run-test-md-UPAR3DQY.js"),o=await n(e,t);process.exit(o)})}function Us(a){a.command("list").description("List *_test.md files in the working directory (recursive)").option("--root <dir>","Root directory to scan (default: cwd)").option("--ignore <name>","Skip a directory by name (repeatable)",Ns,[]).option("--json","Force NDJSON output even on TTY").action(async e=>{let{runListAction:t,resolveCurrentOrgId:n}=await import("./testmd-actions-YYFFNNIH.js"),o=await n({json:!!e.json});o.ok||process.exit(o.code),process.exit(await t(e,o.orgId))})}function Hs(a){a.command("status <path>").description("Print local meta.json for a *_test.md (no live TMS check in v1)").action(async e=>{let{runStatusAction:t,resolveCurrentOrgId:n}=await import("./testmd-actions-YYFFNNIH.js"),o=await n({});o.ok||process.exit(o.code),process.exit(await t(e,o.orgId))})}function Ws(a){a.command("delete <path>").description("Remove output-<stem>/ and the *_test.md source file (TMS untouched)").option("--yes","Skip confirmation prompt (required in non-TTY)").action(async(e,t)=>{let{runDeleteAction:n,resolveCurrentOrgId:o}=await import("./testmd-actions-YYFFNNIH.js"),r=await o({});r.ok||process.exit(r.code),process.exit(await n(e,!!t.yes,r.orgId))})}function qs(a){a.command("export <path>").description("Generate standalone test code (Playwright)").option("--language <lang>","python|javascript (falls back to tui-config)").option("--output <dir>","Override output dir (default: output-<stem>/playwright-<lang>-code/)").option("--force","Overwrite an existing local export").action(async(e,t)=>{let{runExportAction:n,resolveCurrentOrgId:o}=await import("./testmd-actions-YYFFNNIH.js"),r=await o({});r.ok||process.exit(r.code),process.exit(await n(e,t,r.orgId))})}function vn(a){let e=new Pi;if(e.name("kane-cli").version(st),a[0]==="--help"||a[0]==="-h"||a[0]==="help"){(async()=>{let{HelpView:n}=await import("./HelpView-UEUKYHFR.js"),{render:o}=await import("./build-JIKYOZUH.js"),r=await import("./react-QWOAB3TB.js"),{waitUntilExit:s}=o(r.default.createElement(n));await s(),q(0,"Help displayed")})();return}e.command("login").option("--oauth","Login via OAuth (opens browser)").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").addOption(new rt("--env <name>","Environment (prod or stage)").default("prod").hideHelp()).option("--profile <name>","Profile name","default").option("--project-id <id>","Project ID (skip picker)").option("--folder-id <id>","Folder ID (skip picker)").addOption(new rt("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").action(async n=>{let o=new Le,r=new Be,s=n.env,m=n.profile;if(!process.stdin.isTTY||n.oauth||n.username){if(o.setDefaultEnv(s),n.oauth)await new $n(m,s,o).login(),console.log(`Logged in as ${m} [${s}] via OAuth`);else if(n.username&&n.accessKey){try{let{validateBasicAuth:V}=await import("./validate-basic-27BIMJ2F.js");await V(s,n.username,n.accessKey)}catch{console.error("Credentials not valid. Please use valid credentials."),q(1,"Invalid basic-auth credentials");return}o.saveBasicAuth(m,s,{username:n.username,access_key:n.accessKey}),console.log(`Logged in as ${m} [${s}] via basic auth`)}else console.error("Provide --oauth, or --username and --access-key"),q(1,"Missing --oauth or credentials for login");o.setActiveProfile(m),r.set("model",n.model),n.chromeProfile&&r.set("chrome_profile_path",n.chromeProfile);let T=null;if(n.username&&n.accessKey)T={username:n.username,access_key:n.accessKey};else try{let A=await Oo({creds:o,env:s,log:()=>{}});A.resolvedCreds&&(T={username:A.resolvedCreds.username,access_key:A.resolvedCreds.access_key})}catch{}if(n.projectId&&(he(o,r,m,s,{projectId:n.projectId}),console.log(`Project set to ${n.projectId}`)),n.folderId&&(he(o,r,m,s,{folderId:n.folderId}),console.log(`Folder set to ${n.folderId}`)),T&&(!n.projectId||!n.folderId))try{let V=await Do({creds:o,config:r,profile:m,env:s,tmsCreds:T,log:()=>{}});n.projectId||console.log(`Auto-selected project: ${V.projectName} (${V.projectId})`),n.folderId||console.log(`Auto-selected folder: ${V.folderName} (${V.folderId})`)}catch(V){console.warn(`Could not auto-select project/folder: ${V instanceof Error?V.message:V}`)}Te(o,r,m,s),console.log("Setup complete."),q(0,"Setup complete")}let{SingleShotApp:d}=await import("./SingleShotApp-YTFAGVZD.js"),{render:u}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),c={current:null},_={current:!1},{waitUntilExit:P,unmount:h}=u(i.default.createElement(d,{resultRef:c,mode:"login",loginCompleteRef:_}),{exitOnCtrlC:!1});rn(()=>h()),await P();try{process.stdin.setRawMode?.(!1)}catch{}process.stdout.write("\x1B[?25h"),_.current&&console.log("Login setup complete."),process.exit(0)}),e.command("logout").action(async()=>{let n=new Le,o=n.getActiveProfile();if(!o){console.log("No active profile to logout");return}let r=n.getDefaultEnv(),s=await Zn(n,o,r),m=new Be;s.switchedTo?(Te(n,m,s.switchedTo.profile,s.switchedTo.env),console.log(`Logged out ${s.profile} [${s.env}]. Switched to ${s.switchedTo.profile} [${s.switchedTo.env}]`)):(m.save({project_id:null,project_name:null,folder_id:null,folder_name:null}),console.log(`Logged out ${s.profile} [${s.env}]. No profiles remaining.`))}),e.command("whoami").option("--profile <name>","Profile name").action(async n=>{let o=new Le,r=n.profile??o.getActiveProfile()??"default",s=o.getDefaultEnv(),m=o.loadCredentials(r,s),d=o.loadBasicAuth(r,s),u="none",i,c,_;if(d)u="basic",i=d.username;else if(m){u="oauth";let A=m.expires_at,E=Date.now()/1e3;c=A>E?"valid":"expired",_=new Date(A*1e3).toISOString().slice(0,10)}else c="missing";let{WhoamiView:P}=await import("./WhoamiView-GL3HZQ4Q.js"),{render:h}=await import("./build-JIKYOZUH.js"),T=await import("./react-QWOAB3TB.js"),{waitUntilExit:V}=h(T.default.createElement(P,{profile:r,env:s,authenticated:u!=="none",authMethod:u,username:i,tokenStatus:c,expiresAt:_}));await V()}),e.command("config <action> [value]").action(async(n,o)=>{let r=new Be,s=new Le;if(n==="show"){let m=r.load(),d=s.getActiveProfile()??"default",u=s.getDefaultEnv(),i=s.loadBasicAuth(d,u),c=s.loadCredentials(d,u),_=i?`basic (${i.username})`:c?"oauth":"not configured",{ConfigView:P}=await import("./ConfigView-LOEAT3HQ.js"),{render:h}=await import("./build-JIKYOZUH.js"),T=await import("./react-QWOAB3TB.js"),{waitUntilExit:V}=h(T.default.createElement(P,{model:m.model,authLabel:_,profile:d,env:u,defaultUrl:at,projectId:m.project_id,projectName:m.project_name,folderId:m.folder_id,windowSize:`${m.window_size.width}x${m.window_size.height}`,chromeProfile:m.chrome_profile_path}));await V()}else if(n==="set-window"&&o){let m=o.split("x").map(Number),[d,u]=m;!d||!u||!Number.isInteger(d)||!Number.isInteger(u)?console.error("Invalid format. Use: kane-cli config set-window WIDTHxHEIGHT"):d<800||d>3840?console.error(`Width must be between 800 and 3840 (got ${d})`):u<600||u>2160?console.error(`Height must be between 600 and 2160 (got ${u})`):(r.set("window_size",{width:d,height:u}),console.log(`Window size set to ${d}x${u}`))}else if(n==="set-mode"){if(o!=="action"&&o!=="testing"){console.error("Mode must be 'action' or 'testing'."),q(1,"Invalid mode");return}r.set("mode",o),console.log(`Mode set to ${o}`)}else if(n==="chrome-profile"){if(o||!process.stdin.isTTY){o||(console.error("Usage: kane-cli config chrome-profile <path>"),q(1,"Missing chrome-profile path")),r.set("chrome_profile_path",o),console.log(`Chrome profile set to ${o}`);return}let{ChromeProfilePicker:m}=await import("./ChromeProfilePicker-HGRJNQDM.js"),{render:d}=await import("./build-JIKYOZUH.js"),u=await import("./react-QWOAB3TB.js");await new Promise(i=>{let{unmount:c}=d(u.default.createElement(m,{currentPath:r.load().chrome_profile_path,onSelect:_=>{r.set("chrome_profile_path",_),console.log(`Chrome profile set to ${_}`),c(),i()},onCancel:()=>{c(),i()}}))})}else if(n==="project"){if(o||!process.stdin.isTTY){o||(console.error("Usage: kane-cli config project <project-id>"),q(1,"Missing project ID"));let T=s.getActiveProfile()??"default",V=s.getDefaultEnv();he(s,r,T,V,{projectId:o}),console.log(`Project set to ${o}`);return}let m=s.getDefaultEnv(),d=me(m),u=s.loadBasicAuth(s.getActiveProfile()??"default",m);if(!u){console.log("Login first to browse projects");return}let{ProjectPicker:i}=await import("./ProjectPicker-AX6H5MX3.js"),{AuthResolver:c}=await import("./resolver-QLDOAIXU.js"),{render:_}=await import("./build-JIKYOZUH.js"),P=await import("./react-QWOAB3TB.js"),h=new c(d.controllerBaseUrl,async()=>null,u);await h.resolve(),await new Promise(T=>{let{unmount:V}=_(P.default.createElement(i,{resolver:h,currentProjectId:r.load().project_id,env:m,onSelect:(A,E)=>{let N=s.getActiveProfile()??"default",j=s.getDefaultEnv();he(s,r,N,j,{projectId:A,projectName:E}),console.log(`Project set to ${E} (${A})`),V(),T()},onCancel:()=>{V(),T()}}))})}else if(n==="folder"){if(o||!process.stdin.isTTY){if(o||(console.error("Usage: kane-cli config folder <folder-id>"),q(1,"Missing folder ID")),!r.load().project_id){console.log("Select a project first: kane-cli config project <id>");return}let A=s.getActiveProfile()??"default",E=s.getDefaultEnv();he(s,r,A,E,{folderId:o}),console.log(`Folder set to ${o}`);return}let m=r.load();if(!m.project_id){console.log("Select a project first: kane-cli config project");return}let d=s.getDefaultEnv(),u=me(d),i=s.loadBasicAuth(s.getActiveProfile()??"default",d);if(!i){console.log("Login first to browse folders");return}let{FolderPicker:c}=await import("./FolderPicker-I6JTRNAU.js"),{AuthResolver:_}=await import("./resolver-QLDOAIXU.js"),{render:P}=await import("./build-JIKYOZUH.js"),h=await import("./react-QWOAB3TB.js"),T=new _(u.controllerBaseUrl,async()=>null,i);await T.resolve(),await new Promise(V=>{let{unmount:A}=P(h.default.createElement(c,{resolver:T,projectId:m.project_id,currentFolderId:m.folder_id,env:d,onSelect:(E,N)=>{let j=s.getActiveProfile()??"default",W=s.getDefaultEnv();he(s,r,j,W,{folderId:E,folderName:N}),console.log(`Folder set to ${N} (${E})`),A(),V()},onCancel:()=>{A(),V()}}))})}else console.log("Usage: kane-cli config show|set-window|set-mode|chrome-profile|project|folder")}),e.command("run").argument("<objective>","Test objective (use {{var}} to reference variables)").option("--headless","Run Chrome in headless mode").option("--max-steps <n>","Maximum agent steps","30").option("--timeout <seconds>","Kill run after N seconds").option("--cdp-endpoint <url>","Connect to existing Chrome CDP endpoint").option("--ws-endpoint <url>","Connect via Playwright WebSocket (e.g. LambdaTest wss:// URL)").option("--global-context <file>",`Override global context markdown (default: ${ut(xe,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new rt("--model <name>","Model override").hideHelp()).option("--variables <json>",`Inline variables JSON, e.g. '{"user": {"value": "alice"}}'`).option("--variables-file <path>","Load variables from a JSON file").option("--session-context <json>","Session context JSON (prior runs)").addOption(new rt("--cft","Use Playwright Chromium instead of managed Chrome").hideHelp()).option("--username <user>","Basic auth username (skip OAuth)").option("--access-key <key>","Basic auth access key (skip OAuth)").option("--env <name>","Environment (prod or stage)").option("--mode <name>","Run mode: 'action' (strict \u2014 hard-stop on auth/blocked/error) or 'testing' (lenient \u2014 fall through). Overrides config; default: testing.").option("--agent","Agent mode: plain NDJSON output, no colors/UI").option("--task-skills","Enable domain-specific task skills (experimental)").addOption(new rt("--local","Skip TMS integration (no uploads, no variables/secrets push)").hideHelp()).option("--code-export","Generate code export after upload").option("--code-language <lang>","Code export language: python (default) | javascript").option("--name <name>","Persist the session under this name (validated [a-zA-Z0-9_-]+)").option("--skip-code-validation","Skip post-codegen worker-side validation").option("--no-skip-code-validation","Force post-codegen worker-side validation").addHelpText("after",`
|
|
28
|
+
${f}`})}},[$.runError,$.isRunning,ce,i]);let En=(0,k.useCallback)(async()=>{i.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),Kt(Hn()),xt({status:"uploading"});let p=x.getResolvedBasicAuth(),v=null;if(!p&&(v=await x.getToken(),!v))return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let f=Ze??await Et();if(!f)return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),i.setUploadStatus("failed","Could not get TMS credentials"),null;i.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:i.testId,commit_id:i.sessionId,project_id:I.project_id,session_dir:i.sessionDir,run_dirs:i.getRunDirs()});let w={basicAuth:p??null,token:v,resolver:x.getResolver(),resolvedCreds:f};it.current&&(i.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await it.current.drain(),i.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let S=cn({session:i,env:le,auth:w,variables:Ct.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:D.current,projectId:I.project_id,folderId:I.folder_id,totalSteps:vo.current,totalDuration:wo.current,codeExport:dn({codeExport:e,codeLanguage:t,skipCodeValidation:n},I.code_export),onProgress:(F,U,J)=>{i.log("info","EXIT_PROGRESS","Upload progress",{step:F,status:U,detail:J}),Kt(de=>Ur(de,F,U,J))},log:(F,U,J,de)=>i.log(F,U,J,de),shouldUploadArtifacts:!0,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),B=await new Mr(S).execute();if(B.success){i.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:B.testId,testcase_id:B.testcaseId??null,share_id:B.shareId??null}),i.setUploadStatus("uploaded"),B.testId&&i.setTestId(B.testId),B.testcaseId&&i.setTestcaseId(B.testcaseId);let F=me(le),U=I.project_id,J=B.testcaseId&&B.shareId&&U?At(F.testManagerUiUrl,U,B.testcaseId,B.shareId):void 0,de=B.testcaseId&&U?ln(F.testManagerUiUrl,U,B.testcaseId):void 0;xt({status:"success",testUrl:J,testCaseLink:de,codeExportDir:B.codeExportDir}),pi({shareableLink:J,testCaseLink:de,codeExportDir:B.codeExportDir})}else i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:B.error}),i.setUploadStatus("failed",B.error),xt({status:"failed",error:B.error});return B},[x,le,i,I,Ze,Et]),Sn=(0,k.useCallback)(async()=>{i.log("info","SESSION_RESET_START","Starting session reset via /new"),L(!0);let p=i.getFlows();p.length>0&&Q((0,y.jsx)(Go,{flows:p}));let v=null;if(!a)try{v=await En()??null}catch(S){i.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(S)}),ce({type:"error",text:"Upload failed \u2014 session data saved locally."})}let f=null;try{let{persistRecordedSession:S}=await import("./persist-recorded-session-V5DXMRKC.js");f=S(i,{testcaseId:i.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:v?.codeExportDir})}catch(S){i.log("error","SESSION_RESET_PERSIST_FAILED","Persist failed during /new",{error:String(S)})}if(v?.success&&v.testcaseId||f){let S=me(le),O=I.project_id,B=v?.testcaseId;Q((0,y.jsx)(Io,{recordedTestPath:f?.recordedTestPath,outputDir:f?.outputDir,shareableLink:B&&v?.shareId&&O?At(S.testManagerUiUrl,O,B,v.shareId):void 0,testCaseLink:B&&O?ln(S.testManagerUiUrl,O,B):void 0,codeExportDir:v?.codeExportDir,autoExit:!1}))}i.testId&&Ie(S=>[...S,{testId:i.testId,runCount:j}]),Cn.killChrome(),await i.finish("complete");let w=new nn;w.start({model:I.model,environment:le,profile:Dt??null}),m.current=w,u(S=>S+1),i.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:w.sessionId}),W(0),vo.current=0,wo.current=0,Me.current=0,yt.current="",Ct.current=null,D.current={},it.current=null,Tn.current=0,yo.current=0,xo.current=null,bo.current=null,ho.current=null,go.current=null,qe(null),A(null),xt(null),Kt(Hn()),L(!1),Q((0,y.jsxs)(b,{flexDirection:"column",marginY:1,children:[(0,y.jsx)(l,{color:g.dimmed,children:"\u2500".repeat(44)}),(0,y.jsx)(l,{color:g.green,bold:!0,children:"New session started"})]}))},[i,ce,Q,a,En,Cn,j,I,le,Dt]),br=(0,k.useCallback)(async()=>{if(!(i.nextRunIndex()>0)){ce({type:"info",text:"No runs in current session."});return}if($.isRunning){ce({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return}if(I.mode==="testing"&&!i.sessionName){pe("new"),Ke(Po());return}await Sn()},[i,$,ce,I.mode,Sn]),_r=(0,k.useCallback)(async()=>{await i.finish("complete"),q(0,"Session complete")},[i]),Qi=(0,k.useCallback)(async p=>{Gt(!1);let v=i.testId??(we.length>0?we[we.length-1].testId:null);if(p&&v){i.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:p});try{let f=me(le),w=x.getResolvedBasicAuth();w&&await io({tmsBaseUrl:f.tmsBaseUrl,username:w.username,accessKey:w.access_key,testId:v,feedbackType:p,log:(S,O,B,F)=>i.log(S,O,B,F)})}catch(f){i.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(f)})}}else i.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");_r()},[le,x,i,_r,we]),kn=(0,k.useCallback)(async()=>{let p=i.nextRunIndex()>0,v=null;if(p&&!a){i.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),Ae(!0);try{v=await En()??null}catch(w){i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(w)})}i.testId&&Ie(w=>[...w,{testId:i.testId,runCount:j}])}try{let{persistRecordedSession:w}=await import("./persist-recorded-session-V5DXMRKC.js"),S=w(i,{testcaseId:i.testcaseId??void 0,projectId:I.project_id??void 0,folderId:I.folder_id??void 0,codeExportDir:v?.codeExportDir});S&&Xt(S)}catch(w){i.log("error","EXIT_PERSIST_FAILED","Persist failed during /exit",{error:String(w)})}if(p&&!a&&await i.finish("complete"),!(i.testId??(we.length>0?we[we.length-1].testId:null))||a){await i.finish("complete"),q(0,"No test ID \u2014 quick exit");return}Ae(!0),Gt(!0)},[i,a,En,j,we,I]),St=(0,k.useCallback)(async()=>{if(re)return;i.log("info","EXIT_START","TUI exit initiated");let p=I.mode==="testing",v=i.nextRunIndex()>0;if(p&&v&&!i.sessionName){pe("exit"),Ke(Po());return}await kn()},[re,i,I.mode,kn]),Zi=(0,k.useCallback)(p=>{p&&i.setSessionName(p);let v=zt;Ke(null),pe(null),v==="new"?Sn():kn()},[i,zt,kn,Sn]);(0,k.useEffect)(()=>{if(!re)return;let p=300*1e3,v=setTimeout(async()=>{i.setUploadStatus("failed","Upload timed out after 5m"),await i.finish("complete"),q(0,"Upload timed out after 5m")},p);return()=>clearTimeout(v)},[re,i]);let Tn=k.default.useRef(0),_o=k.default.useRef(null),yo=k.default.useRef(0);He((p,v)=>{if(v.ctrl&&p==="c"){if(re){yo.current+=1,yo.current>=2&&(i.setUploadStatus("pending","Force exit by user"),i.finish("complete"),q(0,"Force exit by user"));return}if($.isRunning){$.cancelRun(),ce({type:"info",text:"Run cancelled."}),Tn.current++,_o.current&&clearTimeout(_o.current),_o.current=setTimeout(()=>{Tn.current=0},2e3),Tn.current>=2&&St();return}St()}});let yr=k.default.useMemo(()=>{let p=x.creds.getActiveProfile()??"none",v=x.creds.getDefaultEnv();return[{id:"run",label:"Run",type:"submenu",children:[{id:"run-start",label:"Start Run",type:"action"},{id:"run-config",label:"Run Config",type:"submenu",children:[{id:"run-headless",label:"Headless",type:"select",currentValue:Z.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{Qt(w=>({...w,headless:f==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Z.maxSteps),onValue:f=>{let w=parseInt(f,10);w>0&&Qt(S=>({...S,maxSteps:w}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Z.timeout?String(Z.timeout):"",placeholder:"0 = no timeout",onValue:f=>{let w=parseInt(f,10);Qt(S=>({...S,timeout:isNaN(w)?0:w}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:Z.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:f=>{Qt(w=>({...w,cdpEndpoint:f}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:Z.wsEndpoint,placeholder:"wss://...",onValue:f=>{Qt(w=>({...w,wsEndpoint:f}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{x.logout().then(f=>{Ve();let w=x.creds.getActiveProfile(),S=x.creds.getDefaultEnv();et(w,S),mt().catch(()=>{}),f?K("ok","/logout",`Logged out: ${f.profile} [${f.env}]`):K("ok","/logout","No active profile")}).catch(()=>{K("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let f=x.creds.getActiveProfile()??"none",w=x.creds.getDefaultEnv(),S=x.creds.loadBasicAuth(f,w),O=S?"basic":x.creds.loadCredentials(f,w)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:f},{key:"Environment",value:w}]},{label:"Authentication",entries:[{key:"Method",value:O},...S?[{key:"Username",value:S.username}]:[]]},{label:"Token",entries:[{key:"Status",value:x.tokenValid?"valid":"not logged in",color:x.tokenValid?g.statusPass:g.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let f=x.creds.getActiveProfile()??"default",w=x.creds.getDefaultEnv(),S=me(w);try{let O=x.getBasicAuth(),B=O?null:await x.getToken();if(!O&&!B){ie({text:"Not authenticated. Run /login first.",color:g.red});return}let{ControllerClient:F}=await import("./controller-client-OMKEBP4B.js"),J=await(O?new F(S.controllerBaseUrl,{username:O.username,accessKey:O.access_key}):new F(S.controllerBaseUrl,B)).getCreditBalance();ie({text:`Credits \u2014 available: ${J.available_credits}, total: ${J.total_credits} (${f} / ${w})`,color:g.green})}catch(O){ie({text:`Balance check failed: ${O instanceof Error?O.message:String(O)}`,color:g.red})}Qe.current&&clearTimeout(Qe.current),Qe.current=setTimeout(()=>{ie(null),Qe.current=null},5e3)})()}},{id:"profiles",label:"Profiles",type:"action",onProfilesView:()=>{}}]},{id:"config",label:"Config",type:"submenu",children:[{id:"config-show",label:"Show",type:"action",onInfo:()=>({title:"Show Config",sections:[{label:"General",entries:[{key:"Model",value:"v16-alpha"},{key:"Mode",value:I.mode}]},{label:"Browser",entries:[{key:"Window",value:`${I.window_size.width}x${I.window_size.height}`},{key:"Chrome Profile",value:I.chrome_profile_path?I.chrome_profile_path.split("/").pop()??I.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:I.project_name?`${I.project_name} (${I.project_id})`:I.project_id??"(none)"},{key:"Folder",value:I.folder_name?`${I.folder_name} (${I.folder_id})`:I.folder_id??"(none)"},{key:"Default URL",value:at}]},{label:"Code Export",entries:[{key:"Enabled",value:I.code_export.enabled?"yes":"no"},{key:"Language",value:I.code_export.language},{key:"Skip Validation",value:I.code_export.skip_validation?"yes":"no"}]}]})},{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:()=>{}},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...I.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:g.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${I.window_size.width}x${I.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:I.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:f=>{(f==="action"||f==="testing")&&(c.set("mode",f),De(c.load()),K("ok","/config set-mode",f))}},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:I.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:I.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{c.set("code_export",{...I.code_export,enabled:f==="on"}),De(c.load()),K("ok","/config code-export enabled",f)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:I.code_export.language,options:[{label:"python",value:"python"},{label:"javascript",value:"javascript"}],onValue:f=>{f!=="python"&&f!=="javascript"||(c.set("code_export",{...I.code_export,language:f}),De(c.load()),K("ok","/config code-export language",f))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:I.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:f=>{c.set("code_export",{...I.code_export,skip_validation:f==="on"}),De(c.load()),K("ok","/config code-export skip-validation",f)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{St()}}]},[x,c,I,ce,St,Z,Ve,K]),es=(0,k.useCallback)(p=>{if($.askingUser){let f=$.askingUser;Q((0,y.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,y.jsx)(b,{marginLeft:1,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"Agent Question"})}),(0,y.jsxs)(b,{borderStyle:"round",borderColor:g.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,y.jsxs)(b,{children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"?"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{wrap:"wrap",children:f})})]}),(0,y.jsxs)(b,{marginTop:1,children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.dim,bold:!0,children:"\u2192"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{color:g.accent,wrap:"wrap",children:p})})]})]})]})),xo.current=null,$.sendAnswer(p);return}if(i.logCommand(p),$.isRunning){ce({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let v=ci(p);if(v)switch(v.command){case"login":case"logout":case"whoami":case"profiles":case"balance":case"auth":Ot("auth");return;case"config":Ot("config");return;case"help":pr(!0);return;case"update":{(async()=>{let{getUpdateCommand:f}=await import("./version-check-LUCKH72U.js");K("ok","/update",`To update kane-cli, run: ${f()}`)})();return}case"summary":{let f=i.getFlows();if(f.length===0){K("ok","/summary","No runs yet in this session.");return}let w=v.args.index?parseInt(v.args.index,10):void 0;if(w!==void 0&&!i.getFlow(w)){K("error","/summary",`No flow at index ${w}`,`${f.length} flow${f.length===1?"":"s"} available. Use /summary to see all.`);return}Q((0,y.jsx)(Go,{flows:f,filterIndex:w})),K("ok","/summary",w!==void 0?`Flow ${w}`:`${f.length} flow${f.length===1?"":"s"}`);return}case"new":br(),K("ok","/new","Session reset");return;case"name":{let f=v.raw.replace(/^\/name\s*/,"").trim();if(!f){K("error","/name","Usage: /name <new-name>");return}(async()=>{let{validateNameOrThrow:w}=await import("./name-validator-5YGJXLZ7.js");try{w(f),i.setSessionName(f),K("ok","/name",`Session name set: ${f}`)}catch(S){K("error","/name",S.message)}})();return}case"cancel":$.cancelRun(),K("ok","/cancel","Run cancelled");return;case"clear":K("ok","/clear","Chat cleared");return;case"exit":St();return;default:K("error",`/${v.command}`,"Unknown command");return}if(p.trim().toLowerCase()==="exit"){St();return}Q((0,y.jsxs)(b,{children:[(0,y.jsx)(l,{color:"#b388ff",children:"\u276F "}),(0,y.jsx)(l,{children:p})]})),xr(p,at)},[$,ce,K,Q,i,xr,St,br]),Cr=x.getAuthInfo(),ts=Cr?Cr.method==="basic"?"basic auth":"oauth":"not logged in",ns=(()=>{if(yn)return["help"];if(R)return R.phase==="wizard"?["auth","login"]:R.phase==="project"?["auth","login","project"]:R.phase==="folder"?["auth","login","folder"]:["auth","login"];let p={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return Ge==="auth"?_n?["auth",p[_n]]:["auth"]:Ge==="config"?_n?["config",p[_n]]:["config"]:Ge==="help"?["help"]:$.askingUser?["agent question"]:[]})();return(0,y.jsxs)(b,{flexDirection:"column",children:[Y.length>0&&(0,y.jsx)(An,{items:Y,children:p=>(0,y.jsx)(b,{paddingX:1,children:p.content},p.id)}),!h&&!Se&&(0,y.jsx)(oi,{onComplete:()=>{let p=x.creds.getActiveProfile(),v=x.creds.getDefaultEnv(),f=p?x.creds.loadCredentials(p,v):null,w=p?x.creds.loadBasicAuth(p,v):null,S=!!(f||w),O=w?.username??p??null;Q((0,y.jsx)(Qn,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:st,authenticated:S,user:O})),Oe(!0);let B=(F,U,J,de)=>{i.log(F,U,J,de)};if(Lr(x.creds,B).then(F=>{if(F.status==="authenticated"){let{profile:U,env:J,tmsCreds:de}=F.result;x.creds.setActiveProfile(U),x.creds.setDefaultEnv(J),Ve(),bt(de),ne("ready"),T(!0)}else F.status==="needs_pick"?(ae(F.profiles),ne("pick")):ne("login")}).catch(F=>{i.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(F)}),ne("login")}),o&&o.then(async F=>{if(F){let{getUpdateCommand:U}=await import("./version-check-LUCKH72U.js");K("ok","update available",`${F.current} \u2192 ${F.latest}`,`Run: ${U()}`)}}).catch(()=>{}),r&&r.changes.length>0){let F=`kane-cli updated to ${r.toVersion}. Default settings changed:`,U=[...r.changes.map(J=>`\u2022 ${J.description} (${J.field}: ${JSON.stringify(J.from)} \u2192 ${JSON.stringify(J.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
29
|
+
`);K("ok","defaults updated",F,U)}}}),!h&&se==="booting"&&Se&&(0,y.jsx)(b,{paddingX:1,children:(0,y.jsx)(l,{color:"yellow",children:"Checking authentication..."})}),!h&&se==="pick"&&(0,y.jsx)(Es,{profiles:oe,onCancel:()=>ne("login"),onSelect:async(p,v)=>{x.creds.setActiveProfile(p),x.creds.setDefaultEnv(v),Ve(),Ue(!0);let f=(w,S,O,B)=>{i.log(w,S,O,B)};try{let w=await Vr(x.creds,p,v,f);Ue(!1),w.status==="authenticated"?(et(p,v),ne("ready"),T(!0)):ne("login")}catch{Ue(!1),ne("login")}},validating:Pe}),!h&&se==="login"&&!R&&(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(p,v,f,w)=>{let{validateBasicAuth:S}=await import("./validate-basic-XKTSGLFO.js");await S(v,f,w),x.creds.saveBasicAuth(p,v,{username:f,access_key:w}),x.creds.setActiveProfile(p),x.creds.setDefaultEnv(v),Te(x.creds,c,p,v),x.setTokenValid(!0),Ve()},onOAuthLogin:async(p,v)=>{x.creds.setDefaultEnv(v),await x.login(p),Te(x.creds,c,p,v),Ve()},onComplete:(p,v)=>{mt(v).then(()=>{Ve(),ge({phase:"project",profile:p,env:v})}).catch(()=>{ge({phase:"project",profile:p,env:v})})},onCancel:()=>{q(0,"Login cancelled at startup")}}),!h&&se==="login"&&R?.phase==="project"&&(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(p,v)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:p,project_name:v}),K("ok","/config project",v,`id: ${p}`),ge({...R,phase:"folder"})},onCancel:async()=>{let p=await mo(R.profile,R.env);p&&(he(x.creds,c,R.profile,R.env,{projectId:p.id,projectName:p.name}),K("ok","/config project",p.name,`id: ${p.id}`),ge({...R,phase:"folder"}))}}),!h&&se==="login"&&R?.phase==="folder"&&(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:x.creds.loadProfileConfig(R.profile,R.env)?.project_id??"",currentFolderId:null,env:R.env,onSelect:(p,v)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:p,folder_name:v}),K("ok","/config folder",v,`id: ${p}`),et(R.profile,R.env),ge(null),ne("ready"),T(!0)},onCancel:async()=>{let p=x.creds.loadProfileConfig(R.profile,R.env);if(!p?.project_id)return;let v=await po(R.env,p.project_id);v&&(he(x.creds,c,R.profile,R.env,{folderId:v.id,folderName:v.name}),K("ok","/config folder",v.name,`id: ${v.id}`),et(R.profile,R.env),ge(null),ne("ready"),T(!0))}}),h&&ke==="menu"&&!re&&(0,y.jsx)(b,{marginBottom:1,children:(0,y.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,y.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsx)(l,{color:"#ff9500",children:I.model}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsx)(l,{color:g.dimmed,children:ts}),(0,y.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,y.jsxs)(l,{color:g.dimmed,children:[Dt??"no profile","/",le]})]})}),h&&!re&&(0,y.jsxs)(b,{flexDirection:"column",flexGrow:1,children:[ke==="menu"&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Mo,{items:yr,onRunSelected:()=>Yt("chat"),onActiveViewChange:mr,renderLoginWizard:p=>{let v=R?.phase??"wizard";if(v==="project")return(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(f,w)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:f,project_name:w}),K("ok","/config project",w,`id: ${f}`),ge(S=>S?{...S,phase:"folder"}:null)},onCancel:async()=>{if(!R)return;let f=await mo(R.profile,R.env);f&&(he(x.creds,c,R.profile,R.env,{projectId:f.id,projectName:f.name}),K("ok","/config project",f.name,`id: ${f.id}`),ge(w=>w?{...w,phase:"folder"}:null))}});if(v==="folder"){let f=x.creds.loadProfileConfig(R.profile,R.env);return(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:f?.project_id??"",currentFolderId:null,env:R.env,onSelect:(w,S)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:w,folder_name:S}),K("ok","/config folder",S,`id: ${w}`),et(R.profile,R.env),ge(null),p()},onCancel:async()=>{if(!R)return;let w=x.creds.loadProfileConfig(R.profile,R.env);if(!w?.project_id)return;let S=await po(R.env,w.project_id);S&&(he(x.creds,c,R.profile,R.env,{folderId:S.id,folderName:S.name}),K("ok","/config folder",S.name,`id: ${S.id}`),et(R.profile,R.env),ge(null),p())}})}return(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(f,w,S,O)=>{let{validateBasicAuth:B}=await import("./validate-basic-XKTSGLFO.js");await B(w,S,O),x.creds.saveBasicAuth(f,w,{username:S,access_key:O}),x.creds.setActiveProfile(f),x.creds.setDefaultEnv(w),Te(x.creds,c,f,w),x.setTokenValid(!0),Ve()},onOAuthLogin:async(f,w)=>{x.creds.setDefaultEnv(w),await x.login(f),Te(x.creds,c,f,w),Ve()},onComplete:(f,w)=>{mt(w).then(()=>{ge({phase:"project",profile:f,env:w})}).catch(()=>{ge({phase:"project",profile:f,env:w})})},onCancel:()=>{ge(null),p()}})},renderProfilesView:p=>(0,y.jsx)(ko,{creds:x.creds,onSwitch:(v,f)=>{let w=x.creds.getActiveProfile()??"(none)";x.creds.setActiveProfile(v),x.creds.setDefaultEnv(f),Te(x.creds,c,v,f),et(v,f),Ve(),mt(f).catch(()=>{}),K("ok","/profiles switch",`${w} \u2192 ${v} [${f}]`)},onCancel:p}),renderChromeProfilePicker:p=>(0,y.jsx)(To,{currentPath:I.chrome_profile_path,onSelect:v=>{c.set("chrome_profile_path",v),De(c.load()),K("ok","/config chrome-profile",v),p()},onCancel:p}),renderProjectPicker:p=>(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:I.project_id,env:le,onSelect:(v,f)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:v,projectName:f}),K("ok","/config project",f,`id: ${v}`),De(c.load()),p()},onCancel:p}),renderFolderPicker:p=>(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:le,onSelect:(v,f)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:v,folderName:f}),K("ok","/config folder",f,`id: ${v}`),De(c.load()),p()},onCancel:p}),renderWindowSizePicker:p=>(0,y.jsx)(Ko,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(v,f)=>{c.set("window_size",{width:v,height:f}),De(c.load()),K("ok","/config set-window",`${v} \xD7 ${f}`),p()},onCancel:p})}),Ne&&(0,y.jsx)(b,{paddingX:1,marginTop:1,children:(0,y.jsx)(l,{color:Ne.color,children:Ne.text})})]}),ke==="chat"&&(0,y.jsxs)(y.Fragment,{children:[(()=>{let p=Dn({isRunning:$.isRunning,bifurcationInfo:$.bifurcationInfo,steps:$.steps,cmInitCounts:$.cmInitCounts,replayInfo:$.replayInfo});return p?(0,y.jsx)(On,{label:p.label,hasBifurcation:p.hasBifurcation}):null})(),$.isRunning&&$.steps.length>0&&(0,y.jsx)(Pn,{steps:$.steps,bifurcated:!!$.bifurcationInfo&&!$.bifurcationInfo.isSingleFlow,flows:$.bifurcationInfo?.flows,cmInitCounts:$.cmInitCounts,onStepCommit:Q},`run-${Me.current}`),yn&&(0,y.jsx)(mi,{onClose:()=>pr(!1),version:st,environment:x.creds.getDefaultEnv(),sessionId:i.sessionId,runUrl:I.default_url??at}),Ge&&!$.isRunning&&(()=>{let p=yr.find(v=>v.id===Ge);return p?.children?(0,y.jsx)(Mo,{items:p.children,onRunSelected:()=>Ot(null),onDismiss:()=>Ot(null),onActiveViewChange:mr,renderLoginWizard:v=>{let f=R?.phase??"wizard";if(f==="project")return(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:null,env:R.env,onSelect:(w,S)=>{x.creds.saveProfileConfig(R.profile,R.env,{project_id:w,project_name:S}),K("ok","/config project",S,`id: ${w}`),ge(O=>O?{...O,phase:"folder"}:null)},onCancel:async()=>{if(!R)return;let w=await mo(R.profile,R.env);w&&(he(x.creds,c,R.profile,R.env,{projectId:w.id,projectName:w.name}),K("ok","/config project",w.name,`id: ${w.id}`),ge(S=>S?{...S,phase:"folder"}:null))}});if(f==="folder"){let w=x.creds.loadProfileConfig(R.profile,R.env);return(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:w?.project_id??"",currentFolderId:null,env:R.env,onSelect:(S,O)=>{x.creds.saveProfileConfig(R.profile,R.env,{folder_id:S,folder_name:O}),K("ok","/config folder",O,`id: ${S}`),et(R.profile,R.env),ge(null),v()},onCancel:async()=>{if(!R)return;let S=x.creds.loadProfileConfig(R.profile,R.env);if(!S?.project_id)return;let O=await po(R.env,S.project_id);O&&(he(x.creds,c,R.profile,R.env,{folderId:O.id,folderName:O.name}),K("ok","/config folder",O.name,`id: ${O.id}`),et(R.profile,R.env),ge(null),v())}})}return(0,y.jsx)(jn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:x.creds.listProfiles(),onBasicLogin:async(w,S,O,B)=>{let{validateBasicAuth:F}=await import("./validate-basic-XKTSGLFO.js");await F(S,O,B),x.creds.saveBasicAuth(w,S,{username:O,access_key:B}),x.creds.setActiveProfile(w),x.creds.setDefaultEnv(S),Te(x.creds,c,w,S),x.setTokenValid(!0),Ve()},onOAuthLogin:async(w,S)=>{x.creds.setDefaultEnv(S),await x.login(w),Te(x.creds,c,w,S),Ve()},onComplete:(w,S)=>{mt(S).then(()=>{ge({phase:"project",profile:w,env:S})}).catch(()=>{ge({phase:"project",profile:w,env:S})})},onCancel:()=>{ge(null),v()}})},renderProfilesView:v=>(0,y.jsx)(ko,{creds:x.creds,onSwitch:(f,w)=>{let S=x.creds.getActiveProfile()??"(none)";x.creds.setActiveProfile(f),x.creds.setDefaultEnv(w),Te(x.creds,c,f,w),et(f,w),Ve(),mt(w).catch(()=>{}),K("ok","/profiles switch",`${S} \u2192 ${f} [${w}]`),v()},onCancel:v}),renderChromeProfilePicker:v=>(0,y.jsx)(To,{currentPath:I.chrome_profile_path,onSelect:f=>{c.save({chrome_profile_path:f}),De(c.load()),K("ok","/config chrome-profile",f),v()},onCancel:v}),renderProjectPicker:v=>(0,y.jsx)(Lt,{resolver:x.getResolver(),currentProjectId:I.project_id,env:le,onSelect:(f,w)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{projectId:f,projectName:w}),De(c.load()),K("ok","/config project",w,`id: ${f}`),v()},onCancel:v}),renderFolderPicker:v=>(0,y.jsx)(Ft,{resolver:x.getResolver(),projectId:I.project_id??"",currentFolderId:I.folder_id,env:le,onSelect:(f,w)=>{he(x.creds,c,x.creds.getActiveProfile()??"default",x.creds.getDefaultEnv(),{folderId:f,folderName:w}),De(c.load()),K("ok","/config folder",w,`id: ${f}`),v()},onCancel:v}),renderWindowSizePicker:v=>(0,y.jsx)(Ko,{currentWidth:I.window_size.width,currentHeight:I.window_size.height,onSelect:(f,w)=>{c.set("window_size",{width:f,height:w}),De(c.load()),K("ok","/config set-window",`${f} \xD7 ${w}`),v()},onCancel:v})},Ge):null})(),Ge&&Ne&&(0,y.jsx)(b,{paddingX:1,marginTop:1,children:(0,y.jsx)(l,{color:Ne.color,children:Ne.text})}),!Ge&&!yn&&!_t&&$.askingUser&&(0,y.jsxs)(b,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,y.jsx)(b,{marginLeft:1,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"Agent Question"})}),(0,y.jsx)(b,{borderStyle:"round",borderColor:g.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,y.jsxs)(b,{children:[(0,y.jsx)(b,{width:3,children:(0,y.jsx)(l,{color:g.primary,bold:!0,children:"?"})}),(0,y.jsx)(b,{flexShrink:1,children:(0,y.jsx)(l,{wrap:"wrap",children:$.askingUser})})]})})]}),!Ge&&!yn&&!_t&&(0,y.jsx)(Rr,{onSubmit:es,onEscape:void 0,history:Ki,commands:to,placeholder:$.askingUser?"Type your answer...":$.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)"})]})]}),h&&re&&te&&(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(Ao,{steps:wn,status:te.status,testUrl:te.testUrl,error:te.error}),te.status==="success"&&(0,y.jsx)(Io,{recordedTestPath:ft?.recordedTestPath,outputDir:ft?.outputDir,shareableLink:te.testUrl,testCaseLink:te.testCaseLink,codeExportDir:te.codeExportDir,autoExit:!1})]}),_t&&(0,y.jsx)(Wr,{defaultName:_t,onSubmit:Zi}),bn&&(0,y.jsx)(Hr,{onSubmit:Qi}),xn&&te&&(0,y.jsx)(Ao,{steps:wn,status:te.status,error:te.error}),h&&!re&&(0,y.jsx)(ei,{profile:Dt,environment:le,model:I.model,tokenValid:x.tokenValid,sessionId:i.sessionId,runCount:j,viewMode:ke,breadcrumb:ns})]})}function Es({profiles:a,onSelect:e,onCancel:t,validating:n}){let[o,r]=(0,k.useState)(0);return He((s,m)=>{if(!n){if(m.escape){t();return}if(m.upArrow&&o>0&&r(d=>d-1),m.downArrow&&o<a.length-1&&r(d=>d+1),m.return){let d=a[o];e(d.profile,d.env)}}}),(0,y.jsxs)(b,{flexDirection:"column",paddingX:1,children:[(0,y.jsx)(l,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,y.jsx)(b,{marginTop:1,flexDirection:"column",children:a.map((s,m)=>(0,y.jsxs)(l,{children:[m===o?"\u276F ":" ",(0,y.jsx)(l,{color:m===o?"#ff9500":"white",bold:m===o,children:s.profile}),(0,y.jsxs)(l,{color:"gray",children:[" [",s.env,"]"]})]},`${s.profile}-${s.env}`))}),n&&(0,y.jsx)(b,{marginTop:1,children:(0,y.jsx)(l,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,y.jsx)(b,{marginTop:1,children:(0,y.jsx)(l,{color:"gray",children:"Esc = new login"})})]})}var Pi=H(Ii(),1),{program:Wc,createCommand:qc,createArgument:Kc,createOption:Gc,CommanderError:zc,InvalidArgumentError:Xc,InvalidOptionArgumentError:Jc,Command:Oi,Argument:Yc,Option:rt,Help:Qc}=Pi.default;import{join as ut}from"path";var Vi=H(Ye(),1);var Fe=H(Ye(),1);var vt=H(X(),1);function Di({steps:a,bifurcationInfo:e,perFlowMetadata:t}){return!e||e.isSingleFlow||!t||t.length<=1?null:(0,vt.jsx)(b,{flexDirection:"column",children:t.map((n,o)=>{let r=a[o],s=r?.children??[],m=s.filter(P=>P.status==="passed").length,d=s.filter(P=>P.status==="failed").length,u=m+d,i=s.reduce((P,h)=>P+(h.duration??0),0),c=r?.status==="failed"?"failed":"passed",_=e.flows[o]??r?.objective??`Flow ${o+1}`;return(0,vt.jsxs)(b,{flexDirection:"column",marginTop:o>0?1:0,children:[(0,vt.jsxs)(b,{marginLeft:1,children:[(0,vt.jsx)(l,{color:"#b388ff",bold:!0,children:"Flow "+(o+1)+": "}),(0,vt.jsx)(l,{color:"#b388ff",children:_})]}),(0,vt.jsx)(Nt,{status:c,summary:n?.summary??"",duration:i,steps:u,stepsPassed:m,stepsFailed:d,reason:n?.error_message??void 0,creditsConsumed:n?.credits_consumed??void 0})]},`flow-summary-${o}`)})})}var ve=H(X(),1);function ji({config:a,spawnOpts:e,cancelRef:t,banner:n,onComplete:o,onStepEnd:r,onReasoning:s,onStepComplete:m}){let{exit:d}=In(),u=Mn(r,void 0,s,m),i=(0,Fe.useRef)(!1),c=(0,Fe.useRef)(!1),[_,P]=(0,Fe.useState)("");(0,Fe.useEffect)(()=>{i.current||(i.current=!0,u.startRun(a,e))},[a,e,u]),(0,Fe.useEffect)(()=>{t&&(t.current=()=>u.cancelRun())},[t,u]);let h=(0,Fe.useRef)(0);He((A,E)=>{E.ctrl&&A==="c"&&(u.isRunning?(h.current++,h.current>=2?d():u.cancelRun()):d())}),He((A,E)=>{u.askingUser&&(E.return?(u.sendAnswer(_),P("")):E.backspace||E.delete?P(N=>N.slice(0,-1)):A&&!E.ctrl&&!E.meta&&P(N=>N+A))},{isActive:!!u.askingUser}),(0,Fe.useEffect)(()=>{if(!u.isRunning&&u.lastRunEnd&&!c.current){c.current=!0;let{passed:A,failed:E,total:N}=an(u.steps),j=u.bifurcationInfo;o({lastRunEnd:u.lastRunEnd,stepsPassed:A,stepsFailed:E,stepsTotal:N,hadError:!1,bifurcationFlows:j&&!j.isSingleFlow?j.flows:null}),d()}},[u.isRunning,u.lastRunEnd,u.steps,o,d]),(0,Fe.useEffect)(()=>{u.runError&&!u.isRunning&&!c.current&&(c.current=!0,o({lastRunEnd:null,stepsPassed:0,stepsFailed:0,stepsTotal:0,hadError:!0,bifurcationFlows:null}),d())},[u.runError,u.isRunning,o,d]);let T=u.lastRunEnd?(()=>{let{passed:A,failed:E,total:N}=an(u.steps);return{status:u.lastRunEnd.status,duration:u.lastRunEnd.duration??0,summary:u.lastRunEnd.summary??"",stepsPassed:A,stepsFailed:E,stepsTotal:N,reason:u.lastRunEnd.reason,finalState:u.lastRunEnd.final_state,creditsConsumed:u.lastRunEnd.credits_consumed}})():null,V=(0,Fe.useMemo)(()=>n?[{key:"banner",...n}]:[],[n]);return(0,ve.jsxs)(b,{flexDirection:"column",children:[(0,ve.jsx)(An,{items:V,children:A=>(0,ve.jsxs)(b,{flexDirection:"column",marginBottom:1,children:[(0,ve.jsxs)(b,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,ve.jsx)(l,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,ve.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,ve.jsx)(l,{color:g.cyan,children:A.model}),(0,ve.jsx)(l,{color:g.dimmed,children:" \u2502 "}),(0,ve.jsx)(l,{color:g.dimmed,children:A.auth})]}),A.status?.map((E,N)=>(0,ve.jsx)(l,{color:g.dimmed,children:E},N))]},A.key)}),(()=>{let A=Dn({isRunning:u.isRunning,bifurcationInfo:u.bifurcationInfo,steps:u.steps,cmInitCounts:u.cmInitCounts,replayInfo:u.replayInfo});return A?(0,ve.jsx)(On,{label:A.label,hasBifurcation:A.hasBifurcation}):null})(),u.steps.length>0&&(0,ve.jsx)(Pn,{steps:u.steps,bifurcated:!!u.bifurcationInfo&&!u.bifurcationInfo.isSingleFlow,flows:u.bifurcationInfo?.flows,cmInitCounts:u.cmInitCounts,staticSteps:!0}),u.askingUser&&(0,ve.jsxs)(b,{flexDirection:"column",marginTop:1,children:[(0,ve.jsxs)(l,{color:g.yellow,children:['Agent is asking: "',u.askingUser,'"']}),(0,ve.jsxs)(l,{children:["> ",_,"\u2588"]})]}),u.runError&&(0,ve.jsx)(Gr,{message:u.runError,code:"RUNNER_ERROR"}),T&&u.lastRunEnd&&(0,ve.jsx)(Di,{steps:u.steps,bifurcationInfo:u.bifurcationInfo,perFlowMetadata:u.lastRunEnd.per_flow_metadata??[]}),T&&(0,ve.jsx)(Nt,{status:T.status==="passed"?"passed":"failed",summary:T.summary??"",duration:T.duration,steps:T.stepsTotal,stepsPassed:T.stepsPassed,stepsFailed:T.stepsFailed,reason:T.reason,creditsConsumed:T.creditsConsumed})]})}import{createInterface as Ns}from"readline";function Wt(a){process.stdout.write(JSON.stringify(a)+`
|
|
30
|
+
`)}async function Bi(a,e,t){let n=$r(a,e);Jn().then(c=>{c&&Wt({type:"update_available",current:c.current,latest:c.latest,severity:c.severity})}).catch(()=>{});let o=Ns({input:process.stdin});o.on("line",c=>{try{let _=JSON.parse(c);_.type==="user_response"?n.sendUserResponse(_.answer??""):_.type==="cancel"&&n.sendCancel(_.reason??"")}catch{}});let r=null,s=!1,m=0,d=null,u=0,i=!1;for await(let c of n.events)switch(c.type){case"run_start":i&&u++;break;case"step_start":{let _=c;t?.onStepLog?.("STEP_START",`Step ${_.index} started`,{index:_.index,objective:_.objective,child_id:_.child_id});let P={step:_.index+1,status:"running",remark:_.objective??`Step ${_.index+1}`};_.child_id&&(P.child_id=_.child_id),Wt(P);break}case"step_event":c.event==="reasoning"&&c.detail&&c.detail!=="reasoning"&&t?.onReasoning?.(c.detail),t?.onStepLog?.("STEP_EVENT",`Step ${c.index} ${c.event}`,{index:c.index,phase:c.event,action_type:c.action_type,detail:c.detail,child_id:c.child_id});break;case"step_end":{let _=c;t?.onStepLog?.("STEP_END",`Step ${_.index} ${_.status}`,{index:_.index,status:_.status,duration:_.duration,summary:_.summary,child_id:_.child_id}),t?.onStepComplete?.(),m++;let P={step:_.index+1,status:_.status==="passed"?"done":"failed",remark:_.summary??""};_.child_id&&(P.child_id=_.child_id),Wt(P);let h=i?Math.max(0,u-1):0;t?.onStepEnd?.(_.index,h);break}case"bifurcation":{let _=c,P=_.flows??[],h=_.count??P.length;(_.is_single_flow??h<=1)||(d=P,i=!0,u=0),Wt({type:"bifurcation",flows:P,count:h});break}case"ask_user":{let _=c;Wt({type:"ask_user",question:_.question,step_index:_.step_index,..._.options?{options:_.options}:{}});break}case"run_end":{r=c;break}case"error":{s=!0,Wt({type:"error",message:c.message});break}default:break}return o.close(),await n.exited,{lastRunEnd:r,stepsTotal:m,hadError:s,bifurcationFlows:d}}import{join as Ms}from"path";function $i(a){let e=a.command("testmd").description("Manage test.md files (run, list, status, delete, export)").action(async()=>{process.stdin.isTTY||(process.stderr.write(`error: testmd requires a sub-action in non-TTY mode (run | list | status | delete | export)
|
|
31
|
+
`),process.exit(2));let{runListTui:t,resolveCurrentOrgId:n}=await import("./testmd-actions-322GQYAH.js"),o=await n({});o.ok||process.exit(o.code),process.exit(await t(o.orgId))});Hs(e),Ws(e),qs(e),Ks(e),Gs(e)}function Us(a,e){return e.concat(a)}function Hs(a){a.command("run <path>").description("Run a test from a *_test.md file").option("--headless","Run Chrome in headless mode").option("--max-steps <n>","Max agent steps","30").option("--timeout <seconds>","Kill after N seconds").option("--cdp-endpoint <url>","Connect to existing Chrome via CDP").option("--ws-endpoint <url>","Playwright WebSocket endpoint").option("--global-context <file>",`Override global context (default: ${Ms(xe,"global-memory.md")})`).option("--local-context <file>","Override local context (default: .testmuai/context.md in cwd)").addOption(new rt("--model <name>","Model override").hideHelp()).option("--variables <json>","Inline variables JSON").option("--variables-file <path>","Load variables from file").option("--session-context <json>","Session context JSON (prior runs)").addOption(new rt("--cft","Use Playwright Chromium instead of managed Chrome").hideHelp()).option("--username <user>","Basic auth username (skip OAuth)").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").option("--mode <name>","Run mode: action | testing").option("--agent","Agent mode: plain NDJSON output, no colors/UI").option("--task-skills","Enable domain-specific task skills (experimental)").addOption(new rt("--local","Skip TMS integration (no uploads, no variables/secrets push)").hideHelp()).option("--code-export","Generate code export after upload").option("--code-language <lang>","Code-export language (python|javascript)").option("--name <name>","Persist session under this name").option("--skip-code-validation","Skip post-codegen validation").option("--no-skip-code-validation","Force post-codegen validation").option("--on-lock-conflict <mode>","lock conflict policy: readonly|fail|wait",e=>{if(e!=="readonly"&&e!=="fail"&&e!=="wait")throw new Error(`--on-lock-conflict must be readonly|fail|wait, got: ${e}`);return e}).option("--push","always commit at end-of-run (no retry semantics)").option("--retry","on replay failure, full-restart with shrinking replay window; falls back to complete re-author after --retry-count attempts").option("--retry-count <n>","max replay restart attempts before falling back to complete re-author (default: 3)",e=>{let t=parseInt(e,10);if(Number.isNaN(t)||t<0)throw new Error(`--retry-count must be a non-negative integer, got: ${e}`);return e}).option("--author","bypass walker; force fresh test+testcase in TMS; replace local output entirely").action(async(e,t)=>{let{runTestMdFile:n}=await import("./run-test-md-BQS5SZ7E.js"),o=await n(e,t);process.exit(o)})}function Ws(a){a.command("list").description("List *_test.md files in the working directory (recursive)").option("--root <dir>","Root directory to scan (default: cwd)").option("--ignore <name>","Skip a directory by name (repeatable)",Us,[]).option("--json","Force NDJSON output even on TTY").action(async e=>{let{runListAction:t,resolveCurrentOrgId:n}=await import("./testmd-actions-322GQYAH.js"),o=await n({json:!!e.json});o.ok||process.exit(o.code),process.exit(await t(e,o.orgId))})}function qs(a){a.command("status <path>").description("Print local meta.json for a *_test.md (no live TMS check in v1)").action(async e=>{let{runStatusAction:t,resolveCurrentOrgId:n}=await import("./testmd-actions-322GQYAH.js"),o=await n({});o.ok||process.exit(o.code),process.exit(await t(e,o.orgId))})}function Ks(a){a.command("delete <path>").description("Remove output-<stem>/ and the *_test.md source file (TMS untouched)").option("--yes","Skip confirmation prompt (required in non-TTY)").action(async(e,t)=>{let{runDeleteAction:n,resolveCurrentOrgId:o}=await import("./testmd-actions-322GQYAH.js"),r=await o({});r.ok||process.exit(r.code),process.exit(await n(e,!!t.yes,r.orgId))})}function Gs(a){a.command("export <path>").description("Generate standalone test code (Playwright)").option("--language <lang>","python|javascript (falls back to tui-config)").option("--output <dir>","Override output dir (default: output-<stem>/playwright-<lang>-code/)").option("--force","Overwrite an existing local export").action(async(e,t)=>{let{runExportAction:n,resolveCurrentOrgId:o}=await import("./testmd-actions-322GQYAH.js"),r=await o({});r.ok||process.exit(r.code),process.exit(await n(e,t,r.orgId))})}function qt(a){let e=new Oi;if(e.name("kane-cli").version(st).showHelpAfterError("(run `kane-cli --help` to see all commands; `-h` and `help` also work)"),e.on("command:*",n=>{e.error(`error: unknown command '${n[0]}'`,{exitCode:2,code:"commander.unknownCommand"})}),a[0]==="--help"||a[0]==="-h"||a[0]==="help"){(async()=>{let{HelpView:n}=await import("./HelpView-3ESCWBPB.js"),{render:o}=await import("./build-JIKYOZUH.js"),r=await import("./react-QWOAB3TB.js"),{waitUntilExit:s}=o(r.default.createElement(n));await s(),q(0,"Help displayed")})();return}e.command("login").option("--oauth","Login via OAuth (opens browser)").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").addOption(new rt("--env <name>","Environment (prod or stage)").default("prod").hideHelp()).option("--profile <name>","Profile name","default").option("--project-id <id>","Project ID (skip picker)").option("--folder-id <id>","Folder ID (skip picker)").addOption(new rt("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").action(async n=>{let o=new Le,r=new Be,s=n.env,m=n.profile;if(!process.stdin.isTTY||n.oauth||n.username){if(o.setDefaultEnv(s),n.oauth)await new $n(m,s,o).login(),console.log(`Logged in as ${m} [${s}] via OAuth`);else if(n.username&&n.accessKey){try{let{validateBasicAuth:V}=await import("./validate-basic-XKTSGLFO.js");await V(s,n.username,n.accessKey)}catch{console.error("Credentials not valid. Please use valid credentials."),q(1,"Invalid basic-auth credentials");return}o.saveBasicAuth(m,s,{username:n.username,access_key:n.accessKey}),console.log(`Logged in as ${m} [${s}] via basic auth`)}else console.error("Provide --oauth, or --username and --access-key"),q(1,"Missing --oauth or credentials for login");o.setActiveProfile(m),r.set("model",n.model),n.chromeProfile&&r.set("chrome_profile_path",n.chromeProfile);let T=null;if(n.username&&n.accessKey)T={username:n.username,access_key:n.accessKey};else try{let A=await Oo({creds:o,env:s,log:()=>{}});A.resolvedCreds&&(T={username:A.resolvedCreds.username,access_key:A.resolvedCreds.access_key})}catch{}if(n.projectId&&(he(o,r,m,s,{projectId:n.projectId}),console.log(`Project set to ${n.projectId}`)),n.folderId&&(he(o,r,m,s,{folderId:n.folderId}),console.log(`Folder set to ${n.folderId}`)),T&&(!n.projectId||!n.folderId))try{let V=await Do({creds:o,config:r,profile:m,env:s,tmsCreds:T,log:()=>{}});n.projectId||console.log(`Auto-selected project: ${V.projectName} (${V.projectId})`),n.folderId||console.log(`Auto-selected folder: ${V.folderName} (${V.folderId})`)}catch(V){console.warn(`Could not auto-select project/folder: ${V instanceof Error?V.message:V}`)}Te(o,r,m,s),console.log("Setup complete."),q(0,"Setup complete")}let{SingleShotApp:d}=await import("./SingleShotApp-WOJWOQSV.js"),{render:u}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),c={current:null},_={current:!1},{waitUntilExit:P,unmount:h}=u(i.default.createElement(d,{resultRef:c,mode:"login",loginCompleteRef:_}),{exitOnCtrlC:!1});sn(()=>h()),await P();try{process.stdin.setRawMode?.(!1)}catch{}process.stdout.write("\x1B[?25h"),_.current&&console.log("Login setup complete."),process.exit(0)}),e.command("logout").action(async()=>{let n=new Le,o=n.getActiveProfile();if(!o){console.log("No active profile to logout");return}let r=n.getDefaultEnv(),s=await Zn(n,o,r),m=new Be;s.switchedTo?(Te(n,m,s.switchedTo.profile,s.switchedTo.env),console.log(`Logged out ${s.profile} [${s.env}]. Switched to ${s.switchedTo.profile} [${s.switchedTo.env}]`)):(m.save({project_id:null,project_name:null,folder_id:null,folder_name:null}),console.log(`Logged out ${s.profile} [${s.env}]. No profiles remaining.`))}),e.command("whoami").option("--profile <name>","Profile name").action(async n=>{let o=new Le,r=n.profile??o.getActiveProfile()??"default",s=o.getDefaultEnv(),m=o.loadCredentials(r,s),d=o.loadBasicAuth(r,s),u="none",i,c,_;if(d)u="basic",i=d.username;else if(m){u="oauth";let A=m.expires_at,E=Date.now()/1e3;c=A>E?"valid":"expired",_=new Date(A*1e3).toISOString().slice(0,10)}else c="missing";let{WhoamiView:P}=await import("./WhoamiView-VJBEYTCF.js"),{render:h}=await import("./build-JIKYOZUH.js"),T=await import("./react-QWOAB3TB.js"),{waitUntilExit:V}=h(T.default.createElement(P,{profile:r,env:s,authenticated:u!=="none",authMethod:u,username:i,tokenStatus:c,expiresAt:_}));await V()}),e.command("config <action> [value]").action(async(n,o)=>{let r=new Be,s=new Le;if(n==="show"){let m=r.load(),d=s.getActiveProfile()??"default",u=s.getDefaultEnv(),i=s.loadBasicAuth(d,u),c=s.loadCredentials(d,u),_=i?`basic (${i.username})`:c?"oauth":"not configured",{ConfigView:P}=await import("./ConfigView-5ZCHVYM2.js"),{render:h}=await import("./build-JIKYOZUH.js"),T=await import("./react-QWOAB3TB.js"),{waitUntilExit:V}=h(T.default.createElement(P,{model:m.model,authLabel:_,profile:d,env:u,defaultUrl:at,projectId:m.project_id,projectName:m.project_name,folderId:m.folder_id,windowSize:`${m.window_size.width}x${m.window_size.height}`,chromeProfile:m.chrome_profile_path}));await V()}else if(n==="set-window"&&o){let m=o.split("x").map(Number),[d,u]=m;!d||!u||!Number.isInteger(d)||!Number.isInteger(u)?console.error("Invalid format. Use: kane-cli config set-window WIDTHxHEIGHT"):d<800||d>3840?console.error(`Width must be between 800 and 3840 (got ${d})`):u<600||u>2160?console.error(`Height must be between 600 and 2160 (got ${u})`):(r.set("window_size",{width:d,height:u}),console.log(`Window size set to ${d}x${u}`))}else if(n==="set-mode"){if(o!=="action"&&o!=="testing"){console.error("Mode must be 'action' or 'testing'."),q(1,"Invalid mode");return}r.set("mode",o),console.log(`Mode set to ${o}`)}else if(n==="chrome-profile"){if(o||!process.stdin.isTTY){o||(console.error("Usage: kane-cli config chrome-profile <path>"),q(1,"Missing chrome-profile path")),r.set("chrome_profile_path",o),console.log(`Chrome profile set to ${o}`);return}let{ChromeProfilePicker:m}=await import("./ChromeProfilePicker-J6QIIHIE.js"),{render:d}=await import("./build-JIKYOZUH.js"),u=await import("./react-QWOAB3TB.js");await new Promise(i=>{let{unmount:c}=d(u.default.createElement(m,{currentPath:r.load().chrome_profile_path,onSelect:_=>{r.set("chrome_profile_path",_),console.log(`Chrome profile set to ${_}`),c(),i()},onCancel:()=>{c(),i()}}))})}else if(n==="project"){if(o||!process.stdin.isTTY){o||(console.error("Usage: kane-cli config project <project-id>"),q(1,"Missing project ID"));let T=s.getActiveProfile()??"default",V=s.getDefaultEnv();he(s,r,T,V,{projectId:o}),console.log(`Project set to ${o}`);return}let m=s.getDefaultEnv(),d=me(m),u=s.loadBasicAuth(s.getActiveProfile()??"default",m);if(!u){console.log("Login first to browse projects");return}let{ProjectPicker:i}=await import("./ProjectPicker-NJKUWRET.js"),{AuthResolver:c}=await import("./resolver-F6HCOZOX.js"),{render:_}=await import("./build-JIKYOZUH.js"),P=await import("./react-QWOAB3TB.js"),h=new c(d.controllerBaseUrl,async()=>null,u);await h.resolve(),await new Promise(T=>{let{unmount:V}=_(P.default.createElement(i,{resolver:h,currentProjectId:r.load().project_id,env:m,onSelect:(A,E)=>{let N=s.getActiveProfile()??"default",j=s.getDefaultEnv();he(s,r,N,j,{projectId:A,projectName:E}),console.log(`Project set to ${E} (${A})`),V(),T()},onCancel:()=>{V(),T()}}))})}else if(n==="folder"){if(o||!process.stdin.isTTY){if(o||(console.error("Usage: kane-cli config folder <folder-id>"),q(1,"Missing folder ID")),!r.load().project_id){console.log("Select a project first: kane-cli config project <id>");return}let A=s.getActiveProfile()??"default",E=s.getDefaultEnv();he(s,r,A,E,{folderId:o}),console.log(`Folder set to ${o}`);return}let m=r.load();if(!m.project_id){console.log("Select a project first: kane-cli config project");return}let d=s.getDefaultEnv(),u=me(d),i=s.loadBasicAuth(s.getActiveProfile()??"default",d);if(!i){console.log("Login first to browse folders");return}let{FolderPicker:c}=await import("./FolderPicker-VYJDEDN7.js"),{AuthResolver:_}=await import("./resolver-F6HCOZOX.js"),{render:P}=await import("./build-JIKYOZUH.js"),h=await import("./react-QWOAB3TB.js"),T=new _(u.controllerBaseUrl,async()=>null,i);await T.resolve(),await new Promise(V=>{let{unmount:A}=P(h.default.createElement(c,{resolver:T,projectId:m.project_id,currentFolderId:m.folder_id,env:d,onSelect:(E,N)=>{let j=s.getActiveProfile()??"default",W=s.getDefaultEnv();he(s,r,j,W,{folderId:E,folderName:N}),console.log(`Folder set to ${N} (${E})`),A(),V()},onCancel:()=>{A(),V()}}))})}else console.log("Usage: kane-cli config show|set-window|set-mode|chrome-profile|project|folder")}),e.command("run").argument("<objective>","Test objective (use {{var}} to reference variables)").option("--headless","Run Chrome in headless mode").option("--max-steps <n>","Maximum agent steps","30").option("--timeout <seconds>","Kill run after N seconds").option("--cdp-endpoint <url>","Connect to existing Chrome CDP endpoint").option("--ws-endpoint <url>","Connect via Playwright WebSocket (e.g. LambdaTest wss:// URL)").option("--global-context <file>",`Override global context markdown (default: ${ut(xe,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new rt("--model <name>","Model override").hideHelp()).option("--variables <json>",`Inline variables JSON, e.g. '{"user": {"value": "alice"}}'`).option("--variables-file <path>","Load variables from a JSON file").option("--session-context <json>","Session context JSON (prior runs)").addOption(new rt("--cft","Use Playwright Chromium instead of managed Chrome").hideHelp()).option("--username <user>","Basic auth username (skip OAuth)").option("--access-key <key>","Basic auth access key (skip OAuth)").option("--env <name>","Environment (prod or stage)").option("--mode <name>","Run mode: 'action' (strict \u2014 hard-stop on auth/blocked/error) or 'testing' (lenient \u2014 fall through). Overrides config; default: testing.").option("--agent","Agent mode: plain NDJSON output, no colors/UI").option("--task-skills","Enable domain-specific task skills (experimental)").addOption(new rt("--local","Skip TMS integration (no uploads, no variables/secrets push)").hideHelp()).option("--code-export","Generate code export after upload").option("--code-language <lang>","Code export language: python (default) | javascript").option("--name <name>","Persist the session under this name (validated [a-zA-Z0-9_-]+)").option("--skip-code-validation","Skip post-codegen worker-side validation").option("--no-skip-code-validation","Force post-codegen worker-side validation").addHelpText("after",`
|
|
32
32
|
Variables:
|
|
33
33
|
Variables are loaded in order (later wins):
|
|
34
34
|
1. Global: ${ut(xe,"variables")}/*.json
|
|
@@ -52,17 +52,17 @@ Context Files:
|
|
|
52
52
|
Override with --global-context / --local-context flags.
|
|
53
53
|
`).action(async(n,o)=>{try{if(o.name){let{validateNameOrThrow:D}=await import("./name-validator-5YGJXLZ7.js");try{D(o.name)}catch(M){console.error(`error: ${M.message}`),q(2,"Invalid --name");return}}n&&n.endsWith(".md")&&!n.startsWith("-")&&(process.stderr.write(`error: '.md' files are no longer accepted by 'kane run'.
|
|
54
54
|
Use 'kane-cli testmd run <path>' instead.
|
|
55
|
-
`),process.exit(2));let r=new Le,s=new Be,m=s.load(),d;if(o.mode===void 0)d=m.mode==="action"?"action":"testing";else if(o.mode==="action"||o.mode==="testing")d=o.mode;else{console.error("Invalid --mode. Must be 'action' or 'testing'."),q(2,"Invalid --mode");return}let u=new
|
|
56
|
-
`)};Ie?.setRunActive(!0);let M;try{M=await
|
|
57
|
-
Timeout: ${o.timeout}s exceeded \u2014 cancelling...`),Me.current?.()},D)}Ie?.setRunActive(!0);try{await yt()}finally{Ie?.setRunActive(!1)}if(Xt&&clearTimeout(Xt),pe){let D=nn(pe,0,it);L.addRunResult(on(pe,te.auteurObjective,0,D),pe.total_runs);let M=pe.status==="passed"?"passed":zt?"error":"failed";L.addFlow({runIndex:0,objective:te.auteurObjective,status:M,summary:pe.summary??"",duration:pe.duration??0,steps:ft,stepsPassed:M==="passed"?ft:0,stepsFailed:M==="passed"?0:ft,reason:pe.reason,creditsConsumed:pe.credits_consumed})}if(Rt("chrome","Ink run completed"),L.log("info","DIRECT_UPLOAD_START","Starting direct upload (ink mode)",{ink_mode:!0,last_event:!!pe,local:!!o.local}),pe&&!o.local)try{let D=me(h),M=ie.project_id;if(E.basicAuth){let{UploadPipeline:G}=await import("./pipeline-BVH3R7YP.js");Ke&&(L.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot upload queue before pipeline"),await Ke.drain(),L.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot upload queue drained"));let Y=ln({session:L,env:h,auth:E,variables:te,variableIds:bn,projectId:ie.project_id,folderId:ie.folder_id,totalSteps:ft,totalDuration:pe.duration??0,codeExport:cn({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},m.code_export),onProgress:()=>{},log:(ne,oe,ae,Pe)=>L.log(ne,oe,ae,Pe),shouldUploadArtifacts:!o.local,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),$e=new G(Y),{renderUploadProgress:Q}=await import("./CliUploadProgress-L5VJUXUC.js"),se=await Q($e,ne=>{if(ne.testcaseId&&ne.shareId&&M)return At(D.testManagerUiUrl,M,ne.testcaseId,ne.shareId)});if(se.success){se.testcaseId&&L.setTestcaseId(se.testcaseId);let ne=d==="testing",oe=L.nextRunIndex()>0;if(ne&&!o.name&&oe&&process.stdin.isTTY)try{let{renderSavePrompt:Se,defaultSessionTimestamp:Oe}=await import("./SaveSessionPrompt-RGL3LAEB.js"),ke=await Se(Oe());ke&&L.setSessionName(ke)}catch(Se){L.log("warn","DIRECT_SAVE_PROMPT_FAILED","Save prompt failed",{error:String(Se)})}let ae=null;try{let{persistRecordedSession:Se}=await import("./persist-recorded-session-ZXKA4H7E.js");ae=Se(L,{testcaseId:L.testcaseId??void 0,projectId:ie.project_id??void 0,folderId:ie.folder_id??void 0,codeExportDir:se.codeExportDir})}catch(Se){L.log("error","DIRECT_PERSIST_ERROR","Persist failed in ink mode",{error:String(Se)})}let Pe=se.testcaseId&&se.shareId&&M?At(D.testManagerUiUrl,M,se.testcaseId,se.shareId):void 0,Ue=se.testcaseId&&M?an(D.testManagerUiUrl,M,se.testcaseId):void 0;if(Pe||Ue||se.codeExportDir||ae){let{LinksBox:Se}=await import("./LinksBox-RSWQWL6G.js"),{render:Oe}=await import("./build-JIKYOZUH.js"),ke=await import("./react-QWOAB3TB.js"),{waitUntilExit:Jt}=Oe(ke.default.createElement(Se,{recordedTestPath:ae?.recordedTestPath,outputDir:ae?.outputDir,shareableLink:Pe,testCaseLink:Ue,codeExportDir:se.codeExportDir}),{stdout:process.stderr});await Jt()}}if(L.testId){let{renderFeedbackPrompt:ne}=await import("./CliFeedbackPrompt-JXEPBJ63.js"),oe=await ne();if(oe)try{await io({tmsBaseUrl:D.tmsBaseUrl,username:E.basicAuth.username,accessKey:E.basicAuth.access_key,testId:L.testId,feedbackType:oe,log:(ae,Pe,Ue,Se)=>L.log(ae,Pe,Ue,Se)})}catch(ae){L.log("warn","FEEDBACK_FAILED","Feedback submission failed",{error:String(ae)})}}}}catch(D){L.log("error","DIRECT_UPLOAD_FAILED","Direct upload failed (ink mode)",{error:D instanceof Error?D.stack??D.message:String(D)}),console.error(`Upload failed: ${D}`)}await L.finish("complete"),pe||q(zt?2:1,"Run ended with no result");let Ct=pe.reason??"";(Ct.includes("Cancel")||Ct.includes("Timeout"))&&q(3,`Run: ${Ct}`),pe.status==="passed"&&q(0,"Run passed"),q(1,"Run failed")}catch(r){q(2,`CLI error: ${r instanceof Error?r.message:String(r)}`)}}),Bi(e),e.command("profiles [action] [name]").option("--env <name>","Environment for switch/delete").action(async(n,o,r)=>{let s=new Le;if(n==="list"||!n&&!process.stdin.isTTY){let i=s.listProfiles();if(i.length===0){console.log("No profiles configured. Run: kane-cli login");return}let c=s.getActiveProfile(),_=s.getDefaultEnv();for(let P of i){let h=P.profile===c&&P.env===_?" (active)":"";console.log(`${P.profile} [${P.env}]${h}`)}return}if(n==="switch"&&o){let i=r?.env??s.getDefaultEnv();s.setActiveProfile(o),s.setDefaultEnv(i),Te(s,new Be,o,i),console.log(`Switched to ${o} [${i}]`);return}if(n==="delete"&&o){let i=r?.env??s.getDefaultEnv();s.deleteProfileFull(o,i),console.log(`Deleted profile ${o} [${i}]`);return}process.stdin.isTTY||(console.error("Usage: kane-cli profiles list|switch|delete <name> [--env <env>]"),q(1,"Invalid profiles usage"));let{ProfilesView:m}=await import("./ProfilesView-KCOMTDR5.js"),{render:d}=await import("./build-JIKYOZUH.js"),u=await import("./react-QWOAB3TB.js");await new Promise(i=>{let{unmount:c}=d(u.default.createElement(m,{creds:s,onSwitch:(_,P)=>{s.setActiveProfile(_),s.setDefaultEnv(P),console.log(`Switched to ${_} [${P}]`)},onCancel:()=>{c(),i()}}))})}),e.command("feedback").requiredOption("--test-id <id>","Test ID").requiredOption("--feedback-type <type>","Feedback type: positive or negative").option("--details <text>","Feedback details (max 500 characters)").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").action(async n=>{n.feedbackType!=="positive"&&n.feedbackType!=="negative"&&(console.error('Error: --feedback-type must be "positive" or "negative"'),q(1,'Invalid --feedback-type (must be "positive" or "negative")')),n.details&&n.details.length>500&&(console.error("Error: --details must be 500 characters or fewer"),q(1,"--details exceeds 500 character limit"));let o=new Le,r=n.env??o.getDefaultEnv(),s=me(r),m=!1,d=n.username,u=n.accessKey,i;if(n.username&&n.accessKey)m=!0;else{let A=o.resolveAuth();A?.method==="basic"&&(m=!0,d=A.username,u=A.access_key)}if(!m){let{credentials:A}=o.getActiveCredentials();A||(console.error("Not authenticated. Run: kane-cli login"),q(2,"Not authenticated for feedback")),i=A.access_token}let c=async()=>i??null,_=m&&d&&u?{username:d,access_key:u}:null,h=await new Vn(s.controllerBaseUrl,c,_).resolve(),T=h?.username??d,V=h?.access_key??u;(!T||!V)&&(console.error(JSON.stringify({error:"Could not resolve TMS credentials"})),q(1,"Could not resolve TMS credentials for feedback"));try{let{TmsClient:A}=await import("./tms-client-CTH4NVFM.js"),N=await new A(s.tmsBaseUrl,T,V).submitFeedback({instruction_id:"",test_id:n.testId,feedback_type:n.feedbackType,details:n.details,mode:"agent"});console.log(JSON.stringify(N)),q(0,"Feedback submitted")}catch(A){console.error(JSON.stringify({error:A instanceof Error?A.message:String(A)})),q(1,`Feedback failed: ${A instanceof Error?A.message:String(A)}`)}}),e.command("balance").description("Check credit balance").option("--profile <name>","Profile name").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").action(async n=>{let o=new Le,r=n.profile??o.getActiveProfile()??"default",s=n.env??o.getDefaultEnv(),m=me(s),d=o.loadBasicAuth(r,s),u=null;if(n.username&&n.accessKey)u={username:n.username,accessKey:n.accessKey};else if(d)u={username:d.username,accessKey:d.access_key};else{let i=o.loadCredentials(r,s);i||(console.error(`No credentials for profile "${r}" [${s}]. Run "kane-cli login" first.`),q(2,`No credentials for profile "${r}" [${s}]`)),u=i.access_token}try{let{ControllerClient:i}=await import("./controller-client-7BIK5FYL.js"),_=await new i(m.controllerBaseUrl,u).getCreditBalance();console.log(`Available credits: ${_.available_credits}`),console.log(`Total credits: ${_.total_credits}`),q(0,"Balance retrieved")}catch(i){console.error(`Error: ${i instanceof Error?i.message:String(i)}`),q(1,`Balance check failed: ${i instanceof Error?i.message:String(i)}`)}}),e.command("help").action(()=>{e.help()}),e.command("changelog").description("Show recent release notes").option("--all","Show all releases instead of latest 5").action(async n=>{let{fetchChangelog:o,formatChangelog:r}=await import("./changelog-CLQ7HCB3.js"),s=await o({all:n.all});console.log(r(s))}),e.parse(["node","kane-cli",...a])}function Vi(a){let e,t,n,o=[];for(let r=0;r<a.length;r++){let s=a[r];if(s==="--code-export")e=!0;else if(s==="--skip-code-validation")n=!0;else if(s==="--no-skip-code-validation")n=!1;else if(s==="--code-language"){let m=a[r+1];m!==void 0&&(t=m,r++)}else s.startsWith("--code-language=")?t=s.slice(16):o.push(s)}return{codeExport:e,codeLanguage:t,skipCodeValidation:n,filteredArgs:o}}function lo(a,e){let t=a.split(".").map(o=>Number(o)||0),n=e.split(".").map(o=>Number(o)||0);for(let o=0;o<3;o++){let r=t[o]??0,s=n[o]??0;if(r<s)return-1;if(r>s)return 1}return 0}var Ks=[{version:"0.2.11",description:"Code export is now enabled by default (Python remains the default language; JavaScript is also available). Default run mode is now 'testing'.",apply:a=>{let e=[];return a.code_export.enabled===!1&&e.push({field:"code_export.enabled",from:!1,to:!0,description:"Code export is now enabled by default."}),a.mode==="action"&&e.push({field:"mode",from:"action",to:"testing",description:"Default run mode is now 'testing'."}),{cfg:{...a,code_export:{...a.code_export,enabled:!0},mode:"testing"},changes:e}}}];function Li(a,e=st,t=Ks){let n=a.exists(),o=a.load();if(!n)return a.set("last_seen_version",e),{changes:[],fromVersion:e,toVersion:e,appliedVersions:[]};let r=o.last_seen_version||"0.0.0";if(lo(r,e)>=0)return{changes:[],fromVersion:r,toVersion:r,appliedVersions:[]};let s=t.filter(c=>lo(r,c.version)<0&&lo(c.version,e)<=0).sort((c,_)=>lo(c.version,_.version)),m=o,d=[],u=[];for(let c of s){let{cfg:_,changes:P}=c.apply(m);m=_,d.push(...P),u.push(c.version)}let i={...m,last_seen_version:e};return a.writeRaw(i),{changes:d,fromVersion:r,toVersion:e,appliedVersions:u}}function Fi(a){return a.changes.length===0?"":[`kane-cli updated to ${a.toVersion}. Default settings changed:`,...a.changes.map(t=>` \u2022 ${t.description} (${t.field}: ${JSON.stringify(t.from)} \u2192 ${JSON.stringify(t.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
58
|
-
`)}Dr();var
|
|
55
|
+
`),process.exit(2));let r=new Le,s=new Be,m=s.load(),d;if(o.mode===void 0)d=m.mode==="action"?"action":"testing";else if(o.mode==="action"||o.mode==="testing")d=o.mode;else{console.error("Invalid --mode. Must be 'action' or 'testing'."),q(2,"Invalid --mode");return}let u=new nn,{printRecordingBanner:i}=await import("./recording-banner-7ZKIORL5.js");await i({isAgent:!!o.agent||!process.stdin.isTTY,sessionId:u.sessionId,sessionName:o.name??null,testPath:o.name?ut(process.cwd(),".testmuai","tests",`${o.name}_test.md`):null,outputPath:o.name?ut(process.cwd(),".testmuai","tests",`output-${o.name}`):null});let c=!!(o.username&&o.accessKey);if(await Jr({isInteractive:!!process.stdin.isTTY&&!o.agent&&!c,creds:r,config:s}),!c){let D=r.getActiveProfile(),M=r.getDefaultEnv();D&&(r.loadBasicAuth(D,M)||r.loadCredentials(D,M))||(console.error("Not authenticated. Run: kane-cli login --oauth, or kane-cli login --username <user> --access-key <key>"),q(1,"Not authenticated"))}let _=`${r.getActiveProfile()??"no profile"}/${r.getDefaultEnv()}`,P=[],h=o.env??r.getDefaultEnv(),T=null,V=[],A=(D,M,G,Y)=>{T?T(D,M,G,Y):V.push([D,M,G,Y])},E;try{E=await Oo({creds:r,env:h,usernameFlag:o.username,accessKeyFlag:o.accessKey,log:A})}catch(D){throw D instanceof zr&&(console.error(D.code==="not_authenticated"?"Not authenticated. Run: kane-cli login":"Token refresh failed. Run: kane-cli login"),q(2,D.code==="not_authenticated"?"Not authenticated":"Token refresh failed")),D}let N=!!E.basicAuth,j=E.basicAuth?.username,W=E.basicAuth?.access_key,re=E.token,Ae=E.resolver,Ee=E.resolvedCreds;E.basicAuth&&P.push(`Auth: ${E.basicAuth.username}`);let qe=r.getActiveProfile()??"default",Ne=r.getDefaultEnv();Bn(r,s,qe,Ne);let ie=s.load();if(!o.local&&!Ar({projectId:ie.project_id,projectName:ie.project_name,folderId:ie.folder_id,folderName:ie.folder_name})){let D=E.basicAuth??(E.resolvedCreds?{username:E.resolvedCreds.username,access_key:E.resolvedCreds.access_key}:null);if(D)try{await Do({creds:r,config:s,profile:qe,env:Ne,tmsCreds:D,log:A}),ie=s.load()}catch(M){console.error(`Could not auto-configure project/folder: ${M instanceof Error?M.message:M}`),q(2,"Project/folder auto-configure failed")}else console.error("Project and folder must be configured. Run `kane-cli login` to set up defaults, or `kane-cli config project <id>` and `kane-cli config folder <id>` to set them manually."),q(2,"Project/folder not configured")}let Qe=at,te=Kn({objective:n,globalDir:ut(xe,"variables"),localDir:ut(process.cwd(),".testmuai","variables"),file:o.variablesFile,inline:o.variables,onLoadError:D=>console.error(D)}),xt;if(o.sessionContext)try{xt=JSON.parse(o.sessionContext)}catch{console.error("Invalid --session-context JSON"),q(2,"Invalid --session-context JSON")}let wn=o.globalContext??ut(xe,"global-memory.md"),Kt=o.localContext??ut(process.cwd(),".testmuai","context.md"),Ze=Mt(wn),bt=Mt(Kt),we;try{we=await Xr({config:m,startUrl:Qe??void 0,headless:o.headless,cft:o.cft,wsEndpoint:o.wsEndpoint,cdpEndpoint:o.cdpEndpoint})}catch(D){console.error(Fn(D));let M=D instanceof jr?"Chrome not found at standard paths":`Chrome failed: ${D instanceof Error?D.message:D}`;q(2,M)}we.instance&&nt("chrome",()=>{we.instance.kill()});let Ie=null,xn=we.cdpEndpoint??o.cdpEndpoint;xn&&!o.cft&&!o.wsEndpoint&&(Ie=Nn({headless:o.headless,cdpEndpoint:xn,chromePid:we.instance?.process.pid}),Ie&&nt("marker-overlay",()=>Ie.kill())),o.cft?P.push("CfT mode: Playwright will manage its own browser"):o.wsEndpoint?P.push(`Playwright WS endpoint (${o.wsEndpoint.slice(0,60)}...)`):o.cdpEndpoint?P.push(`CDP connected (${o.cdpEndpoint})`):we.cdpEndpoint&&P.push(`Chrome ready (${we.cdpEndpoint})`);let L=u;L.start({model:o.model??m.model,environment:h,profile:r.getActiveProfile()}),o.name&&L.setSessionName(o.name),E.resolvedCreds?.org_id!==void 0&&L.setOrgId(String(E.resolvedCreds.org_id)),T=(D,M,G,Y)=>L.log(D,M,G,Y);for(let D of V)L.log(...D);if(V.length=0,E.resolvedCreds){let{createRemoteLogger:D}=await import("./logging-AIQHWRNQ.js"),{getMachineId:M}=await import("./machine-id-DZN4MYOO.js"),G=D({sessionId:L.sessionId,identity:{org_id:String(E.resolvedCreds.org_id??""),user_id:String(E.resolvedCreds.user_id??""),machine_id:M(),email:E.resolvedCreds.email??null,email_domain:E.resolvedCreds.email_domain??"unknown",user_type:E.resolvedCreds.user_type??"unknown",env:h},getToken:async()=>E.token});L.setRemoteLogger(G),G.start(),nt("remote-logger",()=>G.shutdownSync()),Ln(G)}let bn=E.basicAuth&&!o.local?await Gn({variables:te,auth:E.basicAuth,orgId:String(E.resolvedCreds?.org_id??""),env:h,localMode:!!o.local,log:(D,M,G,Y)=>L.log(D,M,G,Y)}):{};if(L.setAuteurVariables(te.auteur),L.setFirstRun(te.auteurObjective,at),!o.local&&E.basicAuth&&ie.project_id){let D=me(h),M=await Xn({tmsBaseUrl:D.tmsBaseUrl,auth:E.basicAuth,objective:te.auteurObjective,url:at,projectId:ie.project_id,folderId:ie.folder_id??"",hasCustomProfile:!!m.chrome_profile_path,log:(G,Y,$e,Q)=>L.log(G,Y,$e,Q)});M&&L.setTestId(M)}L.setResolvedGlobal({mode:d,max_steps:parseInt(o.maxSteps,10),timeout:o.timeout?parseInt(o.timeout,10):void 0,target:we.instance?"chrome":o.cdpEndpoint?"cdp":o.wsEndpoint?"ws":void 0,chrome_profile:ie.chrome_profile_path||void 0,cdp_endpoint:o.cdpEndpoint||void 0,ws_endpoint:o.wsEndpoint||void 0,headless:o.headless,global_context:Ze??void 0,local_context:bt??void 0,variables:Object.keys(te.auteur).length>0?te.auteur:void 0});let Gt=qn(te.auteur,te.auteurObjective),_t=zn({objective:te.auteurObjective,url:Qe??void 0,model:o.model??m.model,chrome:we,auth:E,sessionId:L.sessionId,runIndex:0,windowSize:m.window_size,maxSteps:parseInt(o.maxSteps,10),headless:o.headless,disableAskUser:!process.stdin.isTTY,enableTaskSkills:o.taskSkills,variables:Object.keys(Gt).length>0?Gt:void 0,globalContext:Ze??void 0,localContext:bt??void 0,sessionContext:xt}),Ke=null;if(!o.local)try{let{ControllerClient:D}=await import("./controller-client-OMKEBP4B.js"),M;if(N&&j&&W)M={username:j,accessKey:W};else if(re)M=re;else throw new Error("No auth available");let Y=await new D(me(h).controllerBaseUrl,M).getScreenshotSas();L.setScreenshotSas(Y),Ke=new Wn(Y,3,($e,Q,se,ne)=>L.log($e,Q,se,ne)),L.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched",{base_url:Y.base_url,container:Y.container,expiry:Y.expiry})}catch(D){L.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS token fetch failed",{error:D instanceof Error?D.message:String(D)})}let zt=Ke?(D,M,G)=>{Un(L.sessionDir,M,D,Ke,(Y,$e,Q,se)=>L.log(Y,$e,Q,se),G)}:void 0;if(!process.stdin.isTTY&&!o.agent&&(o.agent=!0),o.agent){let D=oe=>{process.stdout.write(JSON.stringify(oe)+`
|
|
56
|
+
`)};Ie?.setRunActive(!0);let M;try{M=await Bi(_t,{environment:h,mode:d,log:(oe,ae,Pe,Ue)=>L.log(oe,ae,Pe,Ue)},{onStepEnd:zt,onStepLog:(oe,ae,Pe)=>L.logStep(oe,ae,Pe),onReasoning:oe=>Ie?.setStepText(oe),onStepComplete:()=>Ie?.setStepComplete()})}finally{Ie?.setRunActive(!1)}let{lastRunEnd:G,stepsTotal:Y,hadError:$e,bifurcationFlows:Q}=M;if($e&&L.escalateRun(0),G){let oe=on(G,0,Q);L.addRunResult(rn(G,te.auteurObjective,0,oe),G.total_runs);let ae=G.status==="passed"?"passed":$e?"error":"failed";L.addFlow({runIndex:0,objective:te.auteurObjective,status:ae,summary:G.summary??"",duration:G.duration??0,steps:Y,stepsPassed:ae==="passed"?Y:0,stepsFailed:ae==="passed"?0:Y,reason:G.reason,creditsConsumed:G.credits_consumed})}Rt("chrome","Agent run completed");let se;if(L.log("info","DIRECT_UPLOAD_START","Starting direct upload (agent mode)",{agent_mode:!0,last_run_end:!!G,local:!!o.local}),G&&!o.local)try{let oe=me(h),ae=ie.project_id;if(E.basicAuth){let{UploadPipeline:Pe}=await import("./pipeline-EUZIM2ZO.js");Ke&&await Ke.drain();let Ue=cn({session:L,env:h,auth:E,variables:te,variableIds:bn,projectId:ae,folderId:ie.folder_id,totalSteps:Y,totalDuration:G.duration??0,codeExport:dn({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},m.code_export),onProgress:()=>{},log:(ke,Yt,Ge,Ot)=>L.log(ke,Yt,Ge,Ot),shouldUploadArtifacts:!o.local,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),Oe=await new Pe(Ue).execute();Oe.success&&(Oe.testcaseId&&L.setTestcaseId(Oe.testcaseId),Oe.testcaseId&&Oe.shareId&&ae&&(se=At(oe.testManagerUiUrl,ae,Oe.testcaseId,Oe.shareId)));try{let{persistRecordedSession:ke}=await import("./persist-recorded-session-V5DXMRKC.js");ke(L,{testcaseId:L.testcaseId??void 0,projectId:ie.project_id??void 0,folderId:ie.folder_id??void 0,codeExportDir:Oe.codeExportDir})}catch(ke){L.log("error","DIRECT_PERSIST_ERROR","Persist failed in agent mode",{error:String(ke)})}}}catch(oe){L.log("error","DIRECT_UPLOAD_ERROR","Upload failed in agent mode",{error:oe instanceof Error?oe.message:String(oe)})}if(G){let oe={...G};se&&(oe.test_url=se),D(oe)}await L.finish("complete"),G||q($e?2:1,"Agent run ended with no result");let ne=G.reason??"";(ne.includes("Cancel")||ne.includes("Timeout"))&&q(3,`Agent run: ${ne}`),G.status==="passed"&&q(0,"Agent run passed"),q(1,"Agent run failed")}let pe=null,ft=0,Xt=!1,it=null,Me={current:null},{waitUntilExit:yt}=tn(Vi.default.createElement(ji,{config:_t,spawnOpts:{environment:h,mode:d,log:(D,M,G,Y)=>L.log(D,M,G,Y)},cancelRef:Me,banner:{model:o.model??m.model,auth:_,status:P},onComplete:D=>{pe=D.lastRunEnd,ft=D.stepsTotal,Xt=D.hadError,it=D.bifurcationFlows},onStepEnd:zt,onReasoning:D=>Ie?.setStepText(D),onStepComplete:()=>Ie?.setStepComplete()}),{stdout:process.stderr,exitOnCtrlC:!1}),Jt;if(o.timeout){let D=parseInt(o.timeout,10)*1e3;Jt=setTimeout(()=>{console.error(`
|
|
57
|
+
Timeout: ${o.timeout}s exceeded \u2014 cancelling...`),Me.current?.()},D)}Ie?.setRunActive(!0);try{await yt()}finally{Ie?.setRunActive(!1)}if(Jt&&clearTimeout(Jt),pe){let D=on(pe,0,it);L.addRunResult(rn(pe,te.auteurObjective,0,D),pe.total_runs);let M=pe.status==="passed"?"passed":Xt?"error":"failed";L.addFlow({runIndex:0,objective:te.auteurObjective,status:M,summary:pe.summary??"",duration:pe.duration??0,steps:ft,stepsPassed:M==="passed"?ft:0,stepsFailed:M==="passed"?0:ft,reason:pe.reason,creditsConsumed:pe.credits_consumed})}if(Rt("chrome","Ink run completed"),L.log("info","DIRECT_UPLOAD_START","Starting direct upload (ink mode)",{ink_mode:!0,last_event:!!pe,local:!!o.local}),pe&&!o.local)try{let D=me(h),M=ie.project_id;if(E.basicAuth){let{UploadPipeline:G}=await import("./pipeline-EUZIM2ZO.js");Ke&&(L.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot upload queue before pipeline"),await Ke.drain(),L.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot upload queue drained"));let Y=cn({session:L,env:h,auth:E,variables:te,variableIds:bn,projectId:ie.project_id,folderId:ie.folder_id,totalSteps:ft,totalDuration:pe.duration??0,codeExport:dn({codeExport:o.codeExport,codeLanguage:o.codeLanguage,skipCodeValidation:o.skipCodeValidation},m.code_export),onProgress:()=>{},log:(ne,oe,ae,Pe)=>L.log(ne,oe,ae,Pe),shouldUploadArtifacts:!o.local,shouldReplaceLocalOutput:!1,shouldCommit:!1,isFirstRun:!0}),$e=new G(Y),{renderUploadProgress:Q}=await import("./CliUploadProgress-U6QLD76Y.js"),se=await Q($e,ne=>{if(ne.testcaseId&&ne.shareId&&M)return At(D.testManagerUiUrl,M,ne.testcaseId,ne.shareId)});if(se.success){se.testcaseId&&L.setTestcaseId(se.testcaseId);let ne=d==="testing",oe=L.nextRunIndex()>0;if(ne&&!o.name&&oe&&process.stdin.isTTY)try{let{renderSavePrompt:Se,defaultSessionTimestamp:Oe}=await import("./SaveSessionPrompt-S5RCU5DX.js"),ke=await Se(Oe());ke&&L.setSessionName(ke)}catch(Se){L.log("warn","DIRECT_SAVE_PROMPT_FAILED","Save prompt failed",{error:String(Se)})}let ae=null;try{let{persistRecordedSession:Se}=await import("./persist-recorded-session-V5DXMRKC.js");ae=Se(L,{testcaseId:L.testcaseId??void 0,projectId:ie.project_id??void 0,folderId:ie.folder_id??void 0,codeExportDir:se.codeExportDir})}catch(Se){L.log("error","DIRECT_PERSIST_ERROR","Persist failed in ink mode",{error:String(Se)})}let Pe=se.testcaseId&&se.shareId&&M?At(D.testManagerUiUrl,M,se.testcaseId,se.shareId):void 0,Ue=se.testcaseId&&M?ln(D.testManagerUiUrl,M,se.testcaseId):void 0;if(Pe||Ue||se.codeExportDir||ae){let{LinksBox:Se}=await import("./LinksBox-P3VETMP6.js"),{render:Oe}=await import("./build-JIKYOZUH.js"),ke=await import("./react-QWOAB3TB.js"),{waitUntilExit:Yt}=Oe(ke.default.createElement(Se,{recordedTestPath:ae?.recordedTestPath,outputDir:ae?.outputDir,shareableLink:Pe,testCaseLink:Ue,codeExportDir:se.codeExportDir}),{stdout:process.stderr});await Yt()}}if(L.testId){let{renderFeedbackPrompt:ne}=await import("./CliFeedbackPrompt-SEH4MXTF.js"),oe=await ne();if(oe)try{await io({tmsBaseUrl:D.tmsBaseUrl,username:E.basicAuth.username,accessKey:E.basicAuth.access_key,testId:L.testId,feedbackType:oe,log:(ae,Pe,Ue,Se)=>L.log(ae,Pe,Ue,Se)})}catch(ae){L.log("warn","FEEDBACK_FAILED","Feedback submission failed",{error:String(ae)})}}}}catch(D){L.log("error","DIRECT_UPLOAD_FAILED","Direct upload failed (ink mode)",{error:D instanceof Error?D.stack??D.message:String(D)}),console.error(`Upload failed: ${D}`)}await L.finish("complete"),pe||q(Xt?2:1,"Run ended with no result");let Ct=pe.reason??"";(Ct.includes("Cancel")||Ct.includes("Timeout"))&&q(3,`Run: ${Ct}`),pe.status==="passed"&&q(0,"Run passed"),q(1,"Run failed")}catch(r){q(2,`CLI error: ${r instanceof Error?r.message:String(r)}`)}}),$i(e),e.command("profiles [action] [name]").option("--env <name>","Environment for switch/delete").action(async(n,o,r)=>{let s=new Le;if(n==="list"||!n&&!process.stdin.isTTY){let i=s.listProfiles();if(i.length===0){console.log("No profiles configured. Run: kane-cli login");return}let c=s.getActiveProfile(),_=s.getDefaultEnv();for(let P of i){let h=P.profile===c&&P.env===_?" (active)":"";console.log(`${P.profile} [${P.env}]${h}`)}return}if(n==="switch"&&o){let i=r?.env??s.getDefaultEnv();s.setActiveProfile(o),s.setDefaultEnv(i),Te(s,new Be,o,i),console.log(`Switched to ${o} [${i}]`);return}if(n==="delete"&&o){let i=r?.env??s.getDefaultEnv();s.deleteProfileFull(o,i),console.log(`Deleted profile ${o} [${i}]`);return}process.stdin.isTTY||(console.error("Usage: kane-cli profiles list|switch|delete <name> [--env <env>]"),q(1,"Invalid profiles usage"));let{ProfilesView:m}=await import("./ProfilesView-UBVNEYVE.js"),{render:d}=await import("./build-JIKYOZUH.js"),u=await import("./react-QWOAB3TB.js");await new Promise(i=>{let{unmount:c}=d(u.default.createElement(m,{creds:s,onSwitch:(_,P)=>{s.setActiveProfile(_),s.setDefaultEnv(P),console.log(`Switched to ${_} [${P}]`)},onCancel:()=>{c(),i()}}))})}),e.command("feedback").requiredOption("--test-id <id>","Test ID").requiredOption("--feedback-type <type>","Feedback type: positive or negative").option("--details <text>","Feedback details (max 500 characters)").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").action(async n=>{n.feedbackType!=="positive"&&n.feedbackType!=="negative"&&(console.error('Error: --feedback-type must be "positive" or "negative"'),q(1,'Invalid --feedback-type (must be "positive" or "negative")')),n.details&&n.details.length>500&&(console.error("Error: --details must be 500 characters or fewer"),q(1,"--details exceeds 500 character limit"));let o=new Le,r=n.env??o.getDefaultEnv(),s=me(r),m=!1,d=n.username,u=n.accessKey,i;if(n.username&&n.accessKey)m=!0;else{let A=o.resolveAuth();A?.method==="basic"&&(m=!0,d=A.username,u=A.access_key)}if(!m){let{credentials:A}=o.getActiveCredentials();A||(console.error("Not authenticated. Run: kane-cli login"),q(2,"Not authenticated for feedback")),i=A.access_token}let c=async()=>i??null,_=m&&d&&u?{username:d,access_key:u}:null,h=await new Vn(s.controllerBaseUrl,c,_).resolve(),T=h?.username??d,V=h?.access_key??u;(!T||!V)&&(console.error(JSON.stringify({error:"Could not resolve TMS credentials"})),q(1,"Could not resolve TMS credentials for feedback"));try{let{TmsClient:A}=await import("./tms-client-XOARLBEP.js"),N=await new A(s.tmsBaseUrl,T,V).submitFeedback({instruction_id:"",test_id:n.testId,feedback_type:n.feedbackType,details:n.details,mode:"agent"});console.log(JSON.stringify(N)),q(0,"Feedback submitted")}catch(A){console.error(JSON.stringify({error:A instanceof Error?A.message:String(A)})),q(1,`Feedback failed: ${A instanceof Error?A.message:String(A)}`)}}),e.command("balance").description("Check credit balance").option("--profile <name>","Profile name").option("--username <user>","Basic auth username").option("--access-key <key>","Basic auth access key").option("--env <name>","Environment (prod or stage)").action(async n=>{let o=new Le,r=n.profile??o.getActiveProfile()??"default",s=n.env??o.getDefaultEnv(),m=me(s),d=o.loadBasicAuth(r,s),u=null;if(n.username&&n.accessKey)u={username:n.username,accessKey:n.accessKey};else if(d)u={username:d.username,accessKey:d.access_key};else{let i=o.loadCredentials(r,s);i||(console.error(`No credentials for profile "${r}" [${s}]. Run "kane-cli login" first.`),q(2,`No credentials for profile "${r}" [${s}]`)),u=i.access_token}try{let{ControllerClient:i}=await import("./controller-client-OMKEBP4B.js"),_=await new i(m.controllerBaseUrl,u).getCreditBalance();console.log(`Available credits: ${_.available_credits}`),console.log(`Total credits: ${_.total_credits}`),q(0,"Balance retrieved")}catch(i){console.error(`Error: ${i instanceof Error?i.message:String(i)}`),q(1,`Balance check failed: ${i instanceof Error?i.message:String(i)}`)}}),e.command("help").action(()=>{e.help()}),e.command("changelog").description("Show recent release notes").option("--all","Show all releases instead of latest 5").action(async n=>{let{fetchChangelog:o,formatChangelog:r}=await import("./changelog-EFAQANXW.js"),s=await o({all:n.all});console.log(r(s))}),e.parse(["node","kane-cli",...a])}function Li(a){let e,t,n,o=[];for(let r=0;r<a.length;r++){let s=a[r];if(s==="--code-export")e=!0;else if(s==="--skip-code-validation")n=!0;else if(s==="--no-skip-code-validation")n=!1;else if(s==="--code-language"){let m=a[r+1];m!==void 0&&(t=m,r++)}else s.startsWith("--code-language=")?t=s.slice(16):o.push(s)}return{codeExport:e,codeLanguage:t,skipCodeValidation:n,filteredArgs:o}}function lo(a,e){let t=a.split(".").map(o=>Number(o)||0),n=e.split(".").map(o=>Number(o)||0);for(let o=0;o<3;o++){let r=t[o]??0,s=n[o]??0;if(r<s)return-1;if(r>s)return 1}return 0}var zs=[{version:"0.2.11",description:"Code export is now enabled by default (Python remains the default language; JavaScript is also available). Default run mode is now 'testing'.",apply:a=>{let e=[];return a.code_export.enabled===!1&&e.push({field:"code_export.enabled",from:!1,to:!0,description:"Code export is now enabled by default."}),a.mode==="action"&&e.push({field:"mode",from:"action",to:"testing",description:"Default run mode is now 'testing'."}),{cfg:{...a,code_export:{...a.code_export,enabled:!0},mode:"testing"},changes:e}}}];function Fi(a,e=st,t=zs){let n=a.exists(),o=a.load();if(!n)return a.set("last_seen_version",e),{changes:[],fromVersion:e,toVersion:e,appliedVersions:[]};let r=o.last_seen_version||"0.0.0";if(lo(r,e)>=0)return{changes:[],fromVersion:r,toVersion:r,appliedVersions:[]};let s=t.filter(c=>lo(r,c.version)<0&&lo(c.version,e)<=0).sort((c,_)=>lo(c.version,_.version)),m=o,d=[],u=[];for(let c of s){let{cfg:_,changes:P}=c.apply(m);m=_,d.push(...P),u.push(c.version)}let i={...m,last_seen_version:e};return a.writeRaw(i),{changes:d,fromVersion:r,toVersion:e,appliedVersions:u}}function Ni(a){return a.changes.length===0?"":[`kane-cli updated to ${a.toVersion}. Default settings changed:`,...a.changes.map(t=>` \u2022 ${t.description} (${t.field}: ${JSON.stringify(t.from)} \u2192 ${JSON.stringify(t.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
58
|
+
`)}Dr();Yr();var Wi=Jn().catch(()=>null),co=null,qi=()=>co||(co=Fi(new Be),co),uo=Ce.argv.slice(2),Xs=uo.includes("--dev"),cr=uo.includes("--local"),Js=uo.includes("--tui");Xs&&(Ce.env.KANE_DEV_MODE="1");var Ys=uo.filter(a=>!["--dev","--local","--tui"].includes(a));function Qs(a){let e=[],t;for(let n=0;n<a.length;n++){let o=a[n];if(o==="--name"&&n+1<a.length){t=a[n+1],n++;continue}if(o.startsWith("--name=")){t=o.slice(7);continue}e.push(o)}return{name:t,rest:e}}var fo=Li(Ys),wt=fo.filteredArgs,Mi=fo.codeExport,dr=fo.codeLanguage,ur=fo.skipCodeValidation,Ui=()=>{Wi.then(a=>{a&&Ce.stderr.write(`
|
|
59
59
|
Update available: ${a.current} \u2192 ${a.latest} \u2014 run \`${qr()}\` to update
|
|
60
60
|
|
|
61
|
-
`)})},
|
|
61
|
+
`)})},Hi=()=>{let a=Ni(qi());a&&Ce.stderr.write(`
|
|
62
62
|
${a}
|
|
63
63
|
|
|
64
|
-
`)},
|
|
65
|
-
`),Ce.exit(1)),
|
|
66
|
-
`),Ce.exit(2)}}let{waitUntilExit:e,unmount:t}=
|
|
64
|
+
`)},Zs=new Set(["--help","-h","--version","-V"]),ea=wt[0]==="help"||wt.some(a=>Zs.has(a));if(ea)qt(wt);else if(Js){Ce.stdin.isTTY||(Ce.stderr.write(`Error: --tui mode requires an interactive terminal (TTY).
|
|
65
|
+
`),Ce.exit(1)),Ui();let{name:a}=Qs(wt);if(a){let{validateNameOrThrow:n}=await import("./name-validator-5YGJXLZ7.js");try{n(a)}catch(o){Ce.stderr.write(`error: ${o.message}
|
|
66
|
+
`),Ce.exit(2)}}let{waitUntilExit:e,unmount:t}=tn(fr.default.createElement(wi,{localMode:cr,codeExport:Mi,codeLanguage:dr,skipCodeValidation:ur,updatePromise:Wi,migrationResult:qi(),sessionName:a}),{exitOnCtrlC:!1});sn(()=>t()),Ro(()=>{try{Ce.stdin.setRawMode?.(!1)}catch{}Ce.stdout.write("\x1B[?25h")}),e().then(()=>{q(0,"TUI session ended")})}else if(wt.length>0){let a=new Set(["login","logout","whoami","config","run","profiles","feedback","balance","help","update","changelog","setup","sessions","testmd"]),e=wt[0],t=a.has(e),n=e.startsWith("-");Ui(),Hi();let r=cr&&(e==="run"||!t&&!n)?[...wt,"--local"]:wt;t||n?qt(r):qt(["run",...r])}else{Ce.stdin.isTTY||(Ce.stderr.write(`Error: kane-cli requires an interactive terminal (TTY) when run without arguments.
|
|
67
67
|
Usage: kane-cli "objective" for non-interactive mode.
|
|
68
|
-
`),Ce.exit(1));let a={current:null},{waitUntilExit:e,unmount:t}=
|
|
68
|
+
`),Ce.exit(1));let a={current:null},{waitUntilExit:e,unmount:t}=tn(fr.default.createElement(Kr,{resultRef:a}),{exitOnCtrlC:!1});sn(()=>t()),Ro(()=>{try{Ce.stdin.setRawMode?.(!1)}catch{}Ce.stdout.write("\x1B[?25h")}),e().then(()=>{let n=a.current;if(!n){q(0,"Single-shot session ended (no objective)");return}let o=n.objective.trim();if(o==="--help"||o==="-h"||o==="help"){qt(["--help"]);return}Hi();let r=["run",n.objective];cr&&r.push("--local"),Mi&&r.push("--code-export"),dr&&r.push("--code-language",dr),ur===!0&&r.push("--skip-code-validation"),ur===!1&&r.push("--no-skip-code-validation"),qt(r)})}
|