@testmuai/kane-cli 0.2.10 → 0.2.11
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-YIDCOJVA.js +2 -0
- package/dist/CliFeedbackPrompt-T5LVDBVG.js +2 -0
- package/dist/{CliUploadProgress-ZVRZFMGT.js → CliUploadProgress-YJW7DHBT.js} +1 -1
- package/dist/{ConfigView-XCWDFTNS.js → ConfigView-5L75H3A6.js} +1 -1
- package/dist/FolderPicker-LEE4Y5JF.js +2 -0
- package/dist/{HelpView-DOYUDPWZ.js → HelpView-SIIWVMWF.js} +1 -1
- package/dist/{LinksBox-FR4WLNX4.js → LinksBox-M72NCTRJ.js} +1 -1
- package/dist/ProfilesView-6MW5P6M4.js +2 -0
- package/dist/ProjectPicker-57G2ILEN.js +2 -0
- package/dist/SingleShotApp-UD4M2CZC.js +2 -0
- package/dist/{WhoamiView-AP6NXPTL.js → WhoamiView-ZKNSYOLI.js} +1 -1
- package/dist/{changelog-DFV22SXX.js → changelog-TWE6QJ5S.js} +1 -1
- package/dist/{chunk-UNQM5247.js → chunk-2O7RIXHD.js} +1 -1
- package/dist/{chunk-5WXHT4JD.js → chunk-55EYPGTJ.js} +1 -1
- package/dist/{chunk-75XK2HKS.js → chunk-7ONI2K3S.js} +1 -1
- package/dist/{chunk-43D3E7EA.js → chunk-C4KI7FLV.js} +1 -1
- package/dist/chunk-CKMDFVL6.js +5 -0
- package/dist/{chunk-SOUKF5VL.js → chunk-D3YS6JDD.js} +1 -1
- package/dist/{chunk-FK2AWXZN.js → chunk-HHNLJWO5.js} +1 -1
- package/dist/{chunk-7E2QYCMX.js → chunk-ID77BNBM.js} +1 -1
- package/dist/chunk-IQYKSZAW.js +20 -0
- package/dist/chunk-J3ZXTHAH.js +103 -0
- package/dist/chunk-LBW6EFWN.js +2 -0
- package/dist/chunk-M5TQDTQN.js +2 -0
- package/dist/{chunk-PXIG2FKV.js → chunk-NDMXYUJM.js} +1 -1
- package/dist/chunk-TMTSY6CU.js +2 -0
- package/dist/chunk-XQL5WHKR.js +2 -0
- package/dist/chunk-Y3MXIITZ.js +2 -0
- package/dist/chunk-Y4AOKSSQ.js +2 -0
- package/dist/chunk-YUUZDFT7.js +2 -0
- package/dist/chunk-Z3JYUFJ4.js +2 -0
- package/dist/index.js +46 -57
- package/dist/{logging-WJPMWUL5.js → logging-JWPN5HMJ.js} +1 -1
- package/dist/login-flow-WXMKYI5G.js +2 -0
- package/dist/{pipeline-ZSNZGJIH.js → pipeline-6DGALO2W.js} +1 -1
- package/dist/{tms-client-VH42IFUF.js → tms-client-CTH4NVFM.js} +1 -1
- package/dist/validate-basic-RV5TSUKJ.js +2 -0
- package/dist/{version-check-AGBPWJQA.js → version-check-FOMPCS47.js} +1 -1
- package/package.json +5 -5
- package/dist/ChromeProfilePicker-VPCR7EPX.js +0 -2
- package/dist/CliFeedbackPrompt-CKWGADHU.js +0 -2
- package/dist/FolderPicker-DN4OV6BI.js +0 -2
- package/dist/LoginWizard-NJ22OXIH.js +0 -2
- package/dist/ProfilesView-ENBYW7PJ.js +0 -2
- package/dist/ProjectPicker-43LFS6S6.js +0 -2
- package/dist/chunk-5PATFYIN.js +0 -2
- package/dist/chunk-6REBTGNQ.js +0 -106
- package/dist/chunk-7H6IY5KC.js +0 -2
- package/dist/chunk-FBK6UISI.js +0 -2
- package/dist/chunk-HFQ7T5KT.js +0 -2
- package/dist/chunk-KJAVR2NX.js +0 -2
- package/dist/chunk-OILYCYAD.js +0 -2
- package/dist/chunk-YSOCZU7T.js +0 -2
- package/dist/chunk-YTG6V347.js +0 -2
- package/dist/login-flow-5WUX5JKU.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,64 +1,49 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire } from 'module'; const require = createRequire(import.meta.url);
|
|
3
|
-
import{a as
|
|
4
|
-
`).replace(/^/gm," ".repeat(
|
|
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,r=40){let
|
|
3
|
+
import{a as ci,d as zn}from"./chunk-C4KI7FLV.js";import{a as qo,b as zo,c as Un,d as bn,e as qe,f as Ue,g as ye,h as Hn,i as Qo,j as Gn,k as ei,l as ze,m as Je,n as te,o as xn,p as zr,q as ti,r as ni,s as ri,t as di}from"./chunk-IQYKSZAW.js";import{a as ui}from"./chunk-HHNLJWO5.js";import{a as Rt,b as Jo,c as qn,d as ai,e as Jr}from"./chunk-ID77BNBM.js";import{a as li}from"./chunk-Z3JYUFJ4.js";import{b as Zt}from"./chunk-LBW6EFWN.js";import{a as Kn}from"./chunk-J3ZXTHAH.js";import{a as tt,b as Wn}from"./chunk-CKMDFVL6.js";import{a as en}from"./chunk-PWGEMRBD.js";import{b as oi}from"./chunk-55EYPGTJ.js";import{a as ii}from"./chunk-IFWLAQ3L.js";import{a as si}from"./chunk-D3YS6JDD.js";import{a as Zo}from"./chunk-L5Y2GUO6.js";import{a as Xr}from"./chunk-NDMXYUJM.js";import{a as Go}from"./chunk-E47GFYXA.js";import{b as Gr}from"./chunk-TMTSY6CU.js";import{c as qr}from"./chunk-Y4AOKSSQ.js";import{b as Qt}from"./chunk-M5TQDTQN.js";import"./chunk-Y3MXIITZ.js";import{a as ce}from"./chunk-2O7RIXHD.js";import{a as Yt}from"./chunk-XQL5WHKR.js";import{a as Z}from"./chunk-HCBYKLMW.js";import{a as gt,c as Me,h as ht,i as Wr,j as Kr,t as f}from"./chunk-7ONI2K3S.js";import{a as p,b as d,c as hn,d as Jt,i as it,j as Mn,k as Xt}from"./chunk-C44QQJR4.js";import{a as Fe}from"./chunk-6YGTRKDT.js";import{a as kt}from"./chunk-YUUZDFT7.js";import{a as Xo,b as Yo}from"./chunk-DXKKUGFG.js";import{a as gn,c as jt,e as K}from"./chunk-UR6MHSHU.js";var Bn=jt(vo=>{"use strict";var Rr=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}},xo=class extends Rr{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};vo.CommanderError=Rr;vo.InvalidArgumentError=xo});var kr=jt(yo=>{"use strict";var{InvalidArgumentError:ja}=Bn(),wo=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 ja(`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 $a(o){let e=o.name()+(o.variadic===!0?"...":"");return o.required?"<"+e+">":"["+e+"]"}yo.Argument=wo;yo.humanReadableArgName=$a});var So=jt(Zi=>{"use strict";var{humanReadableArgName:La}=kr(),_o=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(r=>!r._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((r,i)=>r.name().localeCompare(i.name())),t}compareOptions(e,t){let n=r=>r.short?r.short.replace(/^-/,""):r.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(r=>!r.hidden),n=e._getHelpOption();if(n&&!n.hidden){let r=n.short&&e._findOption(n.short),i=n.long&&e._findOption(n.long);!r&&!i?t.push(n):n.long&&!i?t.push(e.createOption(n.long,n.description)):n.short&&!r&&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 r=n.options.filter(i=>!i.hidden);t.push(...r)}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=>La(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,r)=>Math.max(n,t.subcommandTerm(r).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,r)=>Math.max(n,t.optionTerm(r).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,r)=>Math.max(n,t.optionTerm(r).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,r)=>Math.max(n,t.argumentTerm(r).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let r=e.parent;r;r=r.parent)n=r.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),r=t.helpWidth||80,i=2,a=2;function l(h,_){if(_){let I=`${h.padEnd(n+a)}${_}`;return t.wrap(I,r-i,n+a)}return h}function c(h){return h.join(`
|
|
4
|
+
`).replace(/^/gm," ".repeat(i))}let s=[`Usage: ${t.commandUsage(e)}`,""],u=t.commandDescription(e);u.length>0&&(s=s.concat([t.wrap(u,r,0),""]));let m=t.visibleArguments(e).map(h=>l(t.argumentTerm(h),t.argumentDescription(h)));m.length>0&&(s=s.concat(["Arguments:",c(m),""]));let b=t.visibleOptions(e).map(h=>l(t.optionTerm(h),t.optionDescription(h)));if(b.length>0&&(s=s.concat(["Options:",c(b),""])),this.showGlobalOptions){let h=t.visibleGlobalOptions(e).map(_=>l(t.optionTerm(_),t.optionDescription(_)));h.length>0&&(s=s.concat(["Global Options:",c(h),""]))}let E=t.visibleCommands(e).map(h=>l(t.subcommandTerm(h),t.subcommandDescription(h)));return E.length>0&&(s=s.concat(["Commands:",c(E),""])),s.join(`
|
|
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,r=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",a=new RegExp(`[\\n][${i}]+`);if(e.match(a))return e;let l=t-n;if(l<r)return e;let c=e.slice(0,n),s=e.slice(n).replace(`\r
|
|
6
6
|
`,`
|
|
7
|
-
`),
|
|
8
|
-
|.{1,${l-1}}([${
|
|
9
|
-
`?"":(
|
|
10
|
-
`)}};
|
|
7
|
+
`),u=" ".repeat(n),b="\\s\u200B",E=new RegExp(`
|
|
8
|
+
|.{1,${l-1}}([${b}]|$)|[^${b}]+?([${b}]|$)`,"g"),h=s.match(E)||[];return c+h.map((_,I)=>_===`
|
|
9
|
+
`?"":(I>0?u:"")+_.trimEnd()).join(`
|
|
10
|
+
`)}};Zi.Help=_o});var ko=jt(Ro=>{"use strict";var{InvalidArgumentError:Va}=Bn(),Eo=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=Fa(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 Va(`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 Na(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},Co=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 r=this.negativeOptions.get(n).presetArg,i=r!==void 0?r:!1;return t.negate===(i===e)}};function Na(o){return o.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Fa(o){let e,t,n=o.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}}Ro.Option=Eo;Ro.DualOptions=Co});var ts=jt(es=>{"use strict";function Ma(o,e){if(Math.abs(o.length-e.length)>3)return Math.max(o.length,e.length);let t=[];for(let n=0;n<=o.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 r=1;r<=o.length;r++){let i=1;o[r-1]===e[n-1]?i=0:i=1,t[r][n]=Math.min(t[r-1][n]+1,t[r][n-1]+1,t[r-1][n-1]+i),r>1&&n>1&&o[r-1]===e[n-2]&&o[r-2]===e[n-1]&&(t[r][n]=Math.min(t[r][n],t[r-2][n-2]+1))}return t[o.length][e.length]}function Ua(o,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=o.startsWith("--");t&&(o=o.slice(2),e=e.map(a=>a.slice(2)));let n=[],r=3,i=.4;return e.forEach(a=>{if(a.length<=1)return;let l=Ma(o,a),c=Math.max(o.length,a.length);(c-l)/c>i&&(l<r?(r=l,n=[a]):l===r&&n.push(a))}),n.sort((a,l)=>a.localeCompare(l)),t&&(n=n.map(a=>`--${a}`)),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
|
|
15
|
-
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=r=>[r.name()].concat(r.aliases()),n=t(e).find(r=>this._findCommand(r));if(n){let r=t(this._findCommand(n)).join("|"),
|
|
12
|
+
(Did you mean ${n[0]}?)`:""}es.suggestSimilar=Ua});var ss=jt(is=>{"use strict";var Ha=gn("events").EventEmitter,To=gn("child_process"),yt=gn("path"),Ao=gn("fs"),_e=gn("process"),{Argument:Wa,humanReadableArgName:Ka}=kr(),{CommanderError:Io}=Bn(),{Help:Ga}=So(),{Option:ns,DualOptions:qa}=ko(),{suggestSimilar:rs}=ts(),Po=class o extends Ha{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=>_e.stdout.write(t),writeErr:t=>_e.stderr.write(t),getOutHelpWidth:()=>_e.stdout.isTTY?_e.stdout.columns:void 0,getErrHelpWidth:()=>_e.stderr.isTTY?_e.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 r=t,i=n;typeof r=="object"&&r!==null&&(i=r,r=null),i=i||{};let[,a,l]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(a);return r&&(c.description(r),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,l&&c.arguments(l),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),r?this:c}createCommand(e){return new o(e)}createHelp(){return Object.assign(new Ga,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 Wa(e,t)}argument(e,t,n,r){let i=this.createArgument(e,t);return typeof n=="function"?i.default(r).argParser(n):i.default(n),this.addArgument(i),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,r]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",a=this.createCommand(n);return a.helpOption(!1),r&&a.arguments(r),i&&a.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=a,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 Io(e,t,n)),_e.exit(e)}action(e){let t=n=>{let r=this.registeredArguments.length,i=n.slice(0,r);return this._storeOptionsAsProperties?i[r]=this:i[r]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new ns(e,t)}_callParseArg(e,t,n,r){try{return e.parseArg(t,n)}catch(i){if(i.code==="commander.invalidArgument"){let a=`${r} ${i.message}`;this.error(a,{exitCode:i.exitCode,code:i.code})}throw i}}_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=r=>[r.name()].concat(r.aliases()),n=t(e).find(r=>this._findCommand(r));if(n){let r=t(this._findCommand(n)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${r}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),n=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let r=(i,a,l)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(n);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,a):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(n,i,l)};return this.on("option:"+t,i=>{let a=`error: option '${e.flags}' argument '${i}' is invalid.`;r(i,a,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let a=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;r(i,a,"env")}),this}_optionEx(e,t,n,r,i){if(typeof t=="object"&&t instanceof ns)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let a=this.createOption(t,n);if(a.makeOptionMandatory(!!e.mandatory),typeof r=="function")a.default(i).argParser(r);else if(r instanceof RegExp){let l=r;r=(c,s)=>{let u=l.exec(c);return u?u[0]:s},a.default(i).argParser(r)}else a.default(r);return this.addOption(a)}option(e,t,n,r){return this._optionEx({},e,t,n,r)}requiredOption(e,t,n,r){return this._optionEx({mandatory:!0},e,t,n,r)}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){_e.versions?.electron&&(t.from="electron");let r=_e.execArgv??[];(r.includes("-e")||r.includes("--eval")||r.includes("-p")||r.includes("--print"))&&(t.from="eval")}e===void 0&&(e=_e.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":_e.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,r=[".js",".ts",".tsx",".mjs",".cjs"];function i(u,m){let b=yt.resolve(u,m);if(Ao.existsSync(b))return b;if(r.includes(yt.extname(m)))return;let E=r.find(h=>Ao.existsSync(`${b}${h}`));if(E)return`${b}${E}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let a=e._executableFile||`${this._name}-${e._name}`,l=this._executableDir||"";if(this._scriptPath){let u;try{u=Ao.realpathSync(this._scriptPath)}catch{u=this._scriptPath}l=yt.resolve(yt.dirname(u),l)}if(l){let u=i(l,a);if(!u&&!e._executableFile&&this._scriptPath){let m=yt.basename(this._scriptPath,yt.extname(this._scriptPath));m!==this._name&&(u=i(l,`${m}-${e._name}`))}a=u||a}n=r.includes(yt.extname(a));let c;_e.platform!=="win32"?n?(t.unshift(a),t=os(_e.execArgv).concat(t),c=To.spawn(_e.argv[0],t,{stdio:"inherit"})):c=To.spawn(a,t,{stdio:"inherit"}):(t.unshift(a),t=os(_e.execArgv).concat(t),c=To.spawn(_e.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(m=>{_e.on(m,()=>{c.killed===!1&&c.exitCode===null&&c.kill(m)})});let s=this._exitCallback;c.on("close",u=>{u=u??1,s?s(new Io(u,"commander.executeSubCommandAsync","(close)")):_e.exit(u)}),c.on("error",u=>{if(u.code==="ENOENT"){let m=l?`searched for local subcommand relative to directory '${l}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",b=`'${a}' 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
|
-
- ${m}`;throw new Error(
|
|
18
|
+
- ${m}`;throw new Error(b)}else if(u.code==="EACCES")throw new Error(`'${a}' not executable`);if(!s)_e.exit(1);else{let m=new Io(1,"commander.executeSubCommandAsync","(error)");m.nestedError=u,s(m)}}),this.runningCommand=c}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,r,"preSubcommand"),i=this._chainOrCall(i,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),i}_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,r,i)=>{let a=r;if(r!==null&&n.parseArg){let l=`error: command-argument value '${r}' is invalid for argument '${n.name()}'.`;a=this._callParseArg(n,r,i,l)}return a};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let i=n.defaultValue;n.variadic?r<this.args.length?(i=this.args.slice(r),n.parseArg&&(i=i.reduce((a,l)=>e(n,l,a),n.defaultValue))):i===void 0&&(i=[]):r<this.args.length&&(i=this.args[r],n.parseArg&&(i=e(n,i,n.defaultValue))),t[r]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let n=e,r=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(a=>{r.push({hookedCommand:i,callback:a})})}),t==="postAction"&&r.reverse(),r.forEach(i=>{n=this._chainOrCall(n,()=>i.callback(i.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(i=>{r=this._chainOrCall(r,()=>i(this,t))}),r}_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 r=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){r(),this._processArguments();let a;return a=this._chainOrCallHooks(a,"preAction"),a=this._chainOrCall(a,()=>this._actionHandler(this.processedArgs)),this.parent&&(a=this._chainOrCall(a,()=>{this.parent.emit(i,e,t)})),a=this._chainOrCallHooks(a,"postAction"),a}if(this.parent&&this.parent.listenerCount(i))r(),this._processArguments(),this.parent.emit(i,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():(r(),this._processArguments())}else this.commands.length?(r(),this.help({error:!0})):(r(),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 r=n.attributeName();return this.getOptionValue(r)===void 0?!1:this.getOptionValueSource(r)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let r=e.find(i=>n.conflictsWith.includes(i.attributeName()));r&&this._conflictingOption(n,r)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t,i=e.slice();function a(c){return c.length>1&&c[0]==="-"}let l=null;for(;i.length;){let c=i.shift();if(c==="--"){r===n&&r.push(c),r.push(...i);break}if(l&&!a(c)){this.emit(`option:${l.name()}`,c);continue}if(l=null,a(c)){let s=this._findOption(c);if(s){if(s.required){let u=i.shift();u===void 0&&this.optionMissingArgument(s),this.emit(`option:${s.name()}`,u)}else if(s.optional){let u=null;i.length>0&&!a(i[0])&&(u=i.shift()),this.emit(`option:${s.name()}`,u)}else this.emit(`option:${s.name()}`);l=s.variadic?s:null;continue}}if(c.length>2&&c[0]==="-"&&c[1]!=="-"){let s=this._findOption(`-${c[1]}`);if(s){s.required||s.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${s.name()}`,c.slice(2)):(this.emit(`option:${s.name()}`),i.unshift(`-${c.slice(2)}`));continue}}if(/^--[^=]+=/.test(c)){let s=c.indexOf("="),u=this._findOption(c.slice(0,s));if(u&&(u.required||u.optional)){this.emit(`option:${u.name()}`,c.slice(s+1));continue}}if(a(c)&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(c)){t.push(c),i.length>0&&n.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){t.push(c),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){n.push(c),i.length>0&&n.push(...i);break}}if(this._passThroughOptions){r.push(c),i.length>0&&r.push(...i);break}r.push(c)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let r=this.options[n].attributeName();e[r]=r===this._versionOptionName?this._version:this[r]}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||{},r=n.exitCode||1,
|
|
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 r=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${r}'`)}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=>
|
|
23
|
-
Expecting one of '${n.join("', '")}'`);let r=`${e}Help`;return this.on(r,
|
|
24
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(r=>t.is(r))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ei(s){return s.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",r="9229",o;return(o=e.match(/^(--inspect(-brk)?)$/))!==null?t=o[1]:(o=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=o[1],/^\d+$/.test(o[3])?r=o[3]:n=o[3]):(o=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=o[1],n=o[3],r=o[4]),t&&r!=="0"?`${t}=${n}:${parseInt(r)+1}`:e})}ti.Command=Ro});var ii=Mt(st=>{"use strict";var{Argument:ri}=_r(),{Command:Ao}=ni(),{CommanderError:Ha,InvalidArgumentError:oi}=In(),{Help:Wa}=_o(),{Option:si}=yo();st.program=new Ao;st.createCommand=s=>new Ao(s);st.createOption=(s,e)=>new si(s,e);st.createArgument=(s,e)=>new ri(s,e);st.Command=Ao;st.Option=si;st.Argument=ri;st.Help=Wa;st.CommanderError=Ha;st.InvalidArgumentError=oi;st.InvalidOptionArgumentError=oi});var Io=U(De(),1);import Ze from"process";var $=U(De(),1);var he=U(Q(),1);function Qo({profile:s,environment:e,model:t,tokenValid:n,sessionId:r,runCount:o,viewMode:a}){let{stdout:l}=At(),i=l?.columns??80,c=e==="stage";return(0,he.jsxs)(y,{flexDirection:"column",children:[(0,he.jsx)(f,{color:v.muted,children:"\u2500".repeat(i)}),(0,he.jsx)(y,{paddingX:1,children:(0,he.jsxs)(y,{gap:1,children:[(0,he.jsx)(f,{color:v.dimmed,children:"Model:"}),(0,he.jsx)(f,{color:v.dimmed,children:t}),(0,he.jsx)(f,{color:v.muted,children:"|"}),(0,he.jsx)(f,{color:v.dimmed,children:"Session:"}),(0,he.jsx)(f,{color:v.dimmed,children:r.slice(-6)}),(0,he.jsx)(f,{color:v.muted,children:"|"}),(0,he.jsx)(f,{color:n?v.green:v.red,children:"\u25CF"}),(0,he.jsx)(f,{color:v.dimmed,children:n?"authenticated":"not logged in"})]})}),(0,he.jsx)(y,{paddingX:1,children:(0,he.jsxs)(y,{gap:1,children:[(0,he.jsx)(f,{color:v.dimmed,children:s??"no profile"}),(0,he.jsx)(f,{color:v.muted,children:"|"}),c?(0,he.jsx)(f,{color:v.yellow,bold:!0,children:"\u26A0 stage"}):(0,he.jsx)(f,{color:v.green,children:e}),(0,he.jsx)(f,{color:v.muted,children:"|"}),(0,he.jsxs)(f,{color:v.dimmed,children:["runs: ",o]})]})}),(0,he.jsx)(y,{paddingX:1,children:(0,he.jsx)(f,{dimColor:!0,children:a==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var Zo=U(De(),1);import{readFileSync as Ti,writeFileSync as ki,mkdirSync as Ii}from"fs";import{dirname as Pi,join as Oi}from"path";var Di=Oi(Ee,"command-history.json"),ji=200,Nr=class{entries;filePath;max;constructor(e=Di,t=ji){this.filePath=e,this.max=t,this.entries=this._load()}push(e){this.entries.length>0&&this.entries[this.entries.length-1]===e||(this.entries.push(e),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(e){let t=e.toLowerCase(),n=[];for(let r=this.entries.length-1;r>=0;r--)this.entries[r].toLowerCase().includes(t)&&n.push(this.entries[r]);return n}_load(){try{let e=Ti(this.filePath,"utf-8"),t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}_save(){try{Ii(Pi(this.filePath),{recursive:!0}),ki(this.filePath,JSON.stringify(this.entries)+`
|
|
25
|
-
`)}catch{}}};function Fn(s){let e=(0,Zo.useRef)(null);return e.current||(e.current=new Nr(s)),e.current}var Wt=U(De(),1);var vn=[[[" "],[" "],[" "],[" "],["\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 se=U(Q(),1),Nn="#af87d7",Ur="#875faf",es="#5b3a7a",Li="#ff9500",$i="#ea580c";var Mr="#666666",Bi="#555555",Ht=[[Nn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Nn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Nn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Nn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Ur,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Ur,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Ur,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],Hr=Ht.map(([,s])=>[...s]);function ts({visibleRows:s=Ht.length}){let e=Math.min(s,Ht.length);return(0,se.jsxs)(y,{flexDirection:"column",children:[Ht.slice(0,e).map(([t,n],r)=>{let o=Hr[r];return(0,se.jsx)(f,{children:o.map((a,l)=>{if(a==="\u2588")return(0,se.jsx)(f,{color:t,children:"\u2588"},l);let i=l>0&&o[l-1]==="\u2588",c=r>0&&l>0&&Hr[r-1][l-1]==="\u2588";return i||c?(0,se.jsx)(f,{color:es,children:"\u2592"},l):(0,se.jsx)(f,{children:" "},l)})},r)}),e>=Ht.length&&(0,se.jsxs)(f,{children:[" ",Hr[Ht.length-1].map((t,n)=>t==="\u2588"?(0,se.jsx)(f,{color:es,children:"\u2580"},n):(0,se.jsx)(f,{children:" "},n))]})]})}function Vi({visibleRows:s=vn.length}){let e=Math.min(s,vn.length);return(0,se.jsx)(y,{flexDirection:"column",children:vn.slice(0,e).map((t,n)=>(0,se.jsx)(f,{children:t.map((r,o)=>{let a=r[0],l=r[1],i=r[2];return l?(0,se.jsx)(f,{color:l,backgroundColor:i,children:a},o):(0,se.jsx)(f,{children:a},o)})},n))})}function Un({size:s="compact",helmetVisibleRows:e=vn.length,textVisibleRows:t=Ht.length,showMeta:n=!1,user:r=null,authenticated:o=!1,version:a=""}){return s==="compact"?(0,se.jsx)(ts,{}):(0,se.jsxs)(y,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,se.jsx)(f,{color:Li,italic:!0,children:" Welcome to"}),(0,se.jsx)(f,{children:" "}),(0,se.jsxs)(y,{gap:2,children:[(0,se.jsx)(Vi,{visibleRows:e}),(0,se.jsxs)(y,{flexDirection:"column",children:[(0,se.jsx)(ts,{visibleRows:t}),(0,se.jsx)(y,{justifyContent:"flex-end",width:73,children:(0,se.jsx)(f,{color:$i,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,se.jsxs)(se.Fragment,{children:[(0,se.jsx)(f,{children:" "}),(0,se.jsxs)(f,{children:[(0,se.jsx)(f,{color:Mr,children:" Browser automation powered by AI. "}),(0,se.jsx)(f,{color:Bi,children:`v${a}`})]}),(0,se.jsx)(f,{children:" "}),(0,se.jsx)(f,{children:(0,se.jsx)(f,{color:Mr,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,se.jsx)(f,{children:(0,se.jsx)(f,{color:Mr,children:" data \u2014 right from your terminal."})}),(0,se.jsx)(f,{children:" "})]})]})}var Gr=U(Q(),1),Wr=8,Kr=7;function ns({onComplete:s}){let[e,t]=(0,Wt.useState)(0),[n,r]=(0,Wt.useState)(0),[o,a]=(0,Wt.useState)(!1),[l]=(0,Wt.useState)(()=>{let i=new He,c=i.getActiveProfile(),d=i.getDefaultEnv(),m=c?i.loadCredentials(c,d):null,g=c?i.loadBasicAuth(c,d):null;return{authenticated:!!(m||g),user:g?.username??c??null}});return Tt(()=>{t(i=>Math.min(Wr,i+1))},e<Wr?60:null),Tt(()=>{r(i=>Math.min(Kr,i+1))},n<Kr?80:null),(0,Wt.useEffect)(()=>{e>=Wr&&n>=Kr&&!o&&(a(!0),s?.())},[e,n,o,s]),(0,Gr.jsx)(y,{flexDirection:"column",children:(0,Gr.jsx)(Un,{size:"full",helmetVisibleRows:e,textVisibleRows:n,showMeta:o,user:l.user,authenticated:l.authenticated,version:en})})}var ht=U(Q(),1);function rs({entry:s}){return s.type==="input"?(0,ht.jsxs)(y,{children:[(0,ht.jsx)(f,{color:v.purple,children:"\u276F "}),(0,ht.jsx)(f,{children:s.text})]}):s.type==="error"?(0,ht.jsx)(y,{marginLeft:2,children:(0,ht.jsx)(f,{color:v.red,children:s.text})}):(0,ht.jsx)(y,{marginLeft:2,children:(0,ht.jsx)(f,{color:s.type==="info"?v.dimmed:void 0,children:s.text})})}var vt=U(De(),1);var qr=U(De(),1);var ct=U(Q(),1);function os({history:s,onSelect:e,onClose:t}){let[n,r]=(0,qr.useState)(""),[o,a]=(0,qr.useState)(0),l=n?s.search(n).slice(0,8):[];return je((i,c)=>{if(c.escape){t();return}if(c.return){l.length>0&&l[o]?e(l[o]):t();return}if(c.upArrow){a(d=>Math.max(0,d-1));return}if(c.downArrow){a(d=>Math.min(l.length-1,d+1));return}if(c.backspace||c.delete){r(d=>d.slice(0,-1)),a(0);return}i&&!c.ctrl&&!c.meta&&(r(d=>d+i),a(0))}),(0,ct.jsxs)(y,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,ct.jsx)(f,{color:v.muted,bold:!0,children:"reverse search"}),(0,ct.jsxs)(y,{gap:1,children:[(0,ct.jsx)(f,{color:v.dimmed,children:"search:"}),(0,ct.jsx)(f,{children:n}),(0,ct.jsx)(f,{color:v.purple,children:"\u2588"})]}),l.length>0&&(0,ct.jsx)(f,{children:" "}),l.map((i,c)=>(0,ct.jsx)(y,{marginLeft:2,children:(0,ct.jsxs)(f,{color:c===o?v.purple:v.dimmed,bold:c===o,children:[c===o?"\u25B8 ":" ",i]})},`${c}-${i}`))]})}var Pt=U(Q(),1);function ss({commands:s,selectedIndex:e}){return s.length===0?null:(0,Pt.jsx)(y,{flexDirection:"column",marginBottom:0,children:s.map((t,n)=>{let r=n===e;return(0,Pt.jsxs)(y,{children:[(0,Pt.jsx)(f,{color:r?v.primary:v.dimmed,children:r?"\u276F ":" "}),(0,Pt.jsxs)(f,{color:r?v.primary:void 0,bold:r,children:["/",t.name]}),t.args&&(0,Pt.jsxs)(f,{color:v.dimmed,children:[" ",t.args]}),(0,Pt.jsxs)(f,{color:v.dimmed,children:[" ",t.description]})]},t.name)})})}var Be=U(Q(),1);function Mn({onSubmit:s,onEscape:e,history:t,placeholder:n="Type an objective or /command...",commands:r}){let[o,a]=(0,vt.useState)([]),[l,i]=(0,vt.useState)(0),[c,d]=(0,vt.useState)("none"),[m,g]=(0,vt.useState)(-1),p=(0,vt.useRef)(""),[_,b]=(0,vt.useState)(!0),{stdout:E}=At(),A=E?.columns??80,[P,C]=(0,vt.useState)(0),O=o.join(""),te=(()=>{if(c!=="none"||o.length===0)return"";if(O.startsWith("/")&&r&&O.length>=2){let x=O.slice(1).toLowerCase(),h=r.find(I=>I.name.startsWith(x)&&I.name!==x);return h?`/${h.name}`.slice(O.length):""}if(O.startsWith("/"))return"";let u=t.getAll();for(let x=u.length-1;x>=0;x--)if(u[x].startsWith(O)&&u[x]!==O)return u[x].slice(O.length);return""})(),Z=(()=>{if(!r||!O.startsWith("/"))return[];let u=O.length>=2?O.slice(1).toLowerCase():"";return u&&r.some(x=>x.name===u)?[]:r.filter(x=>!u||x.name.startsWith(u))})(),ne=Z.length>0&&O.startsWith("/");je((u,x)=>{if(_&&u&&b(!1),x.return){if(ne&&Z[P]){let h=`/${Z[P].name}`;a([...h]),i(h.length),C(0);return}O.trim()&&(t.push(O.trim()),s(O.trim()),a([]),i(0),d("none"),g(-1),p.current="",b(!0),C(0));return}if(x.escape){c!=="none"?d("none"):o.length>0?(a([]),i(0),g(-1),p.current=""):e?.();return}if(x.tab){if(te){let h=O+te;a([...h]),i(h.length);return}return}if(x.ctrl&&u==="r"){d("search");return}if(x.ctrl&&u==="a"){i(0);return}if(x.ctrl&&u==="e"){i(o.length);return}if(x.ctrl&&u==="w"){if(l===0)return;let h=l-1;for(;h>0&&o[h]===" ";)h--;for(;h>0&&o[h-1]!==" ";)h--;let I=[...o.slice(0,h),...o.slice(l)];a(I),i(h);return}if(x.ctrl&&u==="u"){a([]),i(0),g(-1),d("none");return}if(x.meta&&u==="b"){let h=l-1;for(;h>0&&o[h]===" ";)h--;for(;h>0&&o[h-1]!==" ";)h--;i(Math.max(0,h));return}if(x.meta&&u==="f"){let h=l;for(;h<o.length&&o[h]!==" ";)h++;for(;h<o.length&&o[h]===" ";)h++;i(h);return}if(x.leftArrow){i(h=>Math.max(0,h-1));return}if(x.rightArrow){if(l>=o.length&&te){let h=O+te;a([...h]),i(h.length)}else i(h=>Math.min(o.length,h+1));return}if(x.upArrow){if(ne){C(h=>Math.max(0,h-1));return}if(c==="none"){let h=t.getAll();if(h.length===0)return;if(m===-1){p.current=O,g(h.length-1);let I=h[h.length-1];a([...I]),i(I.length)}else if(m>0){let I=m-1;g(I);let B=h[I];a([...B]),i(B.length)}}return}if(x.downArrow){if(ne){C(h=>Math.min(Z.length-1,h+1));return}if(c==="none"){let h=t.getAll();if(m===-1)return;if(m<h.length-1){let I=m+1;g(I);let B=h[I];a([...B]),i(B.length)}else{g(-1);let I=p.current;a([...I]),i(I.length)}}return}if(x.backspace||x.delete){if(l>0){let h=[...o.slice(0,l-1),...o.slice(l)];a(h),i(l-1),g(-1),C(0)}return}if(u&&!x.ctrl&&!x.meta){let h=[...o.slice(0,l),...u,...o.slice(l)];a(h),i(l+u.length),g(-1),C(0)}},{isActive:c!=="search"});let _e=u=>{a([...u]),i(u.length),d("none")},F=()=>{d("none")},N=(()=>{if(_&&o.length===0)return null;let u=l>=o.length,x=o.slice(0,l).join(""),h=u?" ":o[l],I=u?"":o.slice(l+1).join(""),B="\u276F "+x+h+I+te,D=2,J=D+x.length,re=J+1,ee=re+I.length,Ie=B.length,me=Math.max(1,Math.ceil(Ie/A)),Re=[];for(let $e=0;$e<me;$e++)Re.push({start:$e*A,end:Math.min(($e+1)*A,Ie)});return{full:B,p:D,b:J,c:re,a:ee,lines:Re}})();return(0,Be.jsxs)(y,{flexDirection:"column",children:[c==="search"&&(0,Be.jsx)(os,{history:t,onSelect:_e,onClose:F}),ne&&(0,Be.jsx)(ss,{commands:Z,selectedIndex:P}),(0,Be.jsx)(f,{color:v.muted,children:"\u2500".repeat(A)}),N===null?(0,Be.jsxs)(y,{children:[(0,Be.jsx)(f,{color:v.purple,children:"\u276F "}),(0,Be.jsx)(f,{color:v.dimmed,children:n})]}):(0,Be.jsx)(y,{flexDirection:"column",children:N.lines.map(({start:u,end:x},h)=>{let{full:I,p:B,b:D,c:J,a:re}=N,ee=[];return x>0&&u<B&&ee.push((0,Be.jsx)(f,{color:v.purple,children:I.slice(Math.max(u,0),Math.min(B,x))},"p")),x>B&&u<D&&ee.push((0,Be.jsx)(f,{children:I.slice(Math.max(B,u),Math.min(D,x))},"b")),x>D&&u<J&&ee.push((0,Be.jsx)(f,{color:v.purple,inverse:!0,children:I.slice(Math.max(D,u),Math.min(J,x))},"c")),x>J&&u<re&&ee.push((0,Be.jsx)(f,{children:I.slice(Math.max(J,u),Math.min(re,x))},"a")),x>re&&ee.push((0,Be.jsx)(f,{color:v.dimmed,children:I.slice(Math.max(re,u),x)},"g")),(0,Be.jsx)(y,{children:ee},h)})})]})}var Te=U(De(),1);var as=U(De(),1);var Hn=U(Q(),1),Fi="#ffc580",Ni="#ffd9a8",is="#ffffff";function ls({text:s,active:e=!0}){let[t,n]=(0,as.useState)(0),r=4;if(Tt(()=>{n(a=>(a+1)%(s.length+r*2))},e?80:null),!e)return(0,Hn.jsx)(f,{color:is,children:s});let o=s.split("").map((a,l)=>{let i=t-r,c=Math.abs(l-i-r/2),d;return c<=r/2?d=Fi:c<=r?d=Ni:d=is,(0,Hn.jsx)(f,{color:d,children:a},l)});return(0,Hn.jsx)(f,{children:o})}var We=U(Q(),1),Ui={starting:v.cyan,running:v.purple,passed:v.green,failed:v.red,cancelled:v.dimmed,timed_out:v.yellow};function Wn({currentStep:s,maxSteps:e,elapsed:t,status:n}){let{stdout:r}=At(),o=r?.columns??80,a=Ui[n]??v.purple,l=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`;return(0,We.jsxs)(y,{flexDirection:"column",marginTop:1,children:[(0,We.jsx)(f,{color:v.muted,children:"\u2500".repeat(Math.min(o,60))}),(0,We.jsxs)(y,{children:[(0,We.jsx)(f,{children:" "}),(0,We.jsx)(f,{color:v.dimmed,children:"Steps "}),(0,We.jsx)(f,{bold:!0,children:s}),(0,We.jsxs)(f,{color:v.dimmed,children:["/",e]}),(0,We.jsx)(f,{children:" "}),(0,We.jsx)(f,{color:v.dimmed,children:"Elapsed "}),(0,We.jsx)(f,{bold:!0,children:l}),(0,We.jsx)(f,{children:" "}),(0,We.jsx)(f,{color:v.dimmed,children:"Status "}),(0,We.jsx)(f,{bold:!0,color:a,children:n})]})]})}var Mi={click:"\u25CF",type:"\u229E",scroll:"\u2195",navigate:"\u2192",analyze:"\u25CE",assert:"\u25C8","if-else":"\u2442",select:"\u25BC",press_key:"\u21B5",wait:"\u2026",tool_call:"\u2299"};function cs(s){return Mi[s]??"\u25CF"}var Ot=U(Q(),1);function zr({steps:s,flows:e,cmInitCounts:t,renderStep:n}){return(0,Ot.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,Ot.jsxs)(f,{color:v.dimmed,children:["\u2501\u2501 Bifurcated into ",e?.length??s.length," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]}),s.map((r,o)=>(0,Ot.jsxs)(y,{flexDirection:"column",marginTop:o>0?1:0,children:[(0,Ot.jsxs)(f,{color:v.purple,children:["Flow ",o+1,": ",e?.[o]??r.objective]}),t&&t[o]!=null&&(0,Ot.jsxs)(f,{color:v.dimmed,children:[" \u25AA Generated task with ",t[o]," checkpoints"]}),r.children&&r.children.length>0?r.children.map(a=>n(a,`f${o}-${a.index}`)):r.status==="pending"&&(0,Ot.jsx)(f,{color:v.dimmed,children:" \u25CB Waiting..."})]},o))]})}var V=U(Q(),1);function rt({step:s,indent:e=2}){let t=s.actionType?cs(s.actionType):null,n=s.status==="running",r=s.status==="passed",o=s.status==="failed",a=s.status==="pending"||s.status==="stopped",{stdout:l}=At(),i=l?.columns??80,c=Math.max(20,i-e-21),d=s.objective??"",m=d.length>c?d.slice(0,c-1)+"\u2026":d,g=(s.duration??0)*1e3,p=s.duration!=null?g<1e3?`${Math.round(g)}ms`:`${(g/1e3).toFixed(1)}s`:"";return(0,V.jsxs)(y,{flexDirection:"column",children:[(0,V.jsxs)(y,{marginLeft:e,children:[(0,V.jsx)(y,{width:4,children:(0,V.jsxs)(f,{color:v.muted,children:[String(s.index).padStart(2," ")," "]})}),(0,V.jsx)(y,{width:3,children:n?(0,V.jsx)(Uo,{}):r?(0,V.jsx)(f,{color:v.green,bold:!0,children:"\u2713"}):o?(0,V.jsx)(f,{color:v.red,bold:!0,children:"\u2717"}):(0,V.jsx)(f,{color:v.muted,children:"\u25CB"})}),(0,V.jsx)(y,{flexGrow:1,children:n?(0,V.jsx)(ls,{text:m,active:!0}):o?(0,V.jsx)(f,{color:v.red,children:m}):a?(0,V.jsx)(f,{color:v.dimmed,children:m}):(0,V.jsx)(f,{color:v.greenDim,children:m})}),(r||o)&&t?(0,V.jsx)(y,{width:3,marginLeft:1,children:(0,V.jsx)(f,{color:v.muted,children:t})}):(0,V.jsx)(y,{width:3,marginLeft:1}),(0,V.jsx)(y,{width:7,justifyContent:"flex-end",children:(0,V.jsx)(f,{color:v.dimmed,children:p})})]}),s.children&&s.children.length>0&&(0,V.jsx)(y,{flexDirection:"column",children:s.children.map((_,b)=>(0,V.jsx)(rt,{step:_,indent:e+2},`child-${b}`))})]})}function Kn({steps:s,bifurcated:e,flows:t,cmInitCounts:n,maxSteps:r=50,staticSteps:o=!1,onStepCommit:a}){let l=(0,Te.useRef)(new Set),i=(0,Te.useRef)(!1),c=(0,Te.useRef)(new Set),d=(0,Te.useRef)(!1),m=(0,Te.useRef)(new Set),g=(0,Te.useRef)(0);(0,Te.useEffect)(()=>{s.length===0&&g.current>0&&(l.current.clear(),i.current=!1,c.current.clear(),d.current=!1,m.current.clear()),g.current=s.length},[s.length]);let p=s.flatMap(u=>[u,...u.children??[]]),_=p.some(u=>u.status==="running"),b=p.some(u=>u.status==="failed"),E=p.length===0||p.every(u=>u.status==="pending"),A=p.filter(u=>u.status==="passed"||u.status==="failed").length,P;E?P="starting":_?P="running":b?P="failed":P="passed";let C=(0,Te.useRef)(null),[O,te]=(0,Te.useState)(0);(0,Te.useEffect)(()=>{p.length===0||E?(C.current=null,te(0)):_&&C.current==null&&(C.current=Date.now())},[_,E,p.length]),(0,Te.useEffect)(()=>{if(!_)return;let u=setInterval(()=>{C.current!=null&&te((Date.now()-C.current)/1e3)},500);return()=>clearInterval(u)},[_]);let Z=(0,Te.useRef)(new Set),[ne,_e]=(0,Te.useState)([]),F=(0,Te.useRef)(!1);(0,Te.useEffect)(()=>{if(!o||e)return;let u=[];if(!e&&!F.current&&n&&n[0]!=null&&(F.current=!0,n[0]>0&&u.push({key:"cm_init_0",type:"cm_init",count:n[0]})),e){!Z.current.has(-1)&&s.length>0&&(Z.current.add(-1),u.push({key:"bif_header",type:"bifurcation_header",flowCount:t?.length??s.length}));for(let x=0;x<s.length;x++){let h=s[x],I=-(x+10);Z.current.has(I)||(Z.current.add(I),u.push({key:`flow_header_${x}`,type:"flow_header",flowIdx:x,label:t?.[x]??h.objective,cmCount:n?.[x]}));for(let B of h.children??[])(B.status==="passed"||B.status==="failed")&&!Z.current.has(B.index)&&(Z.current.add(B.index),u.push({key:`step_f${x}_${B.index}`,type:"step",step:{...B}}))}}else for(let x of s)(x.status==="passed"||x.status==="failed")&&!Z.current.has(x.index)&&(Z.current.add(x.index),u.push({key:`step_${x.index}`,type:"step",step:{...x,children:x.children?[...x.children]:void 0}}));u.length>0&&_e(x=>[...x,...u])},[s,e,t,n,o]),(0,Te.useEffect)(()=>{if(a)if(!e&&!d.current&&n&&n[0]!=null&&(d.current=!0,n[0]>0&&a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsxs)(f,{color:v.dimmed,children:["\u25A0 Generated task with ",n[0]," checkpoints"]})}))),e&&t&&!i.current&&(i.current=!0,a((0,V.jsx)(f,{color:"#b388ff",children:"\u2501\u2501 Bifurcated into "+t.length+" flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"}))),e){let u=s.flatMap((x,h)=>{let I=x.children??[];return!c.current.has(h)&&I.length>0&&(c.current.add(h),a((0,V.jsx)(f,{color:"#b388ff",children:" Flow "+(h+1)+": "+(t?.[h]??"")})),n?.[h]!=null&&n[h]>0&&!m.current.has(h)&&(m.current.add(h),a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsxs)(f,{color:v.dimmed,children:[" \u25AA Generated task with ",n[h]," checkpoints"]})})))),n?.[h]!=null&&n[h]>0&&c.current.has(h)&&!m.current.has(h)&&(m.current.add(h),a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsxs)(f,{color:v.dimmed,children:[" \u25AA Generated task with ",n[h]," checkpoints"]})}))),I});for(let x of u){let h=`${x.index}-${x.objective}`;l.current.has(h)||(x.status==="passed"||x.status==="failed"||x.status==="stopped")&&(l.current.add(h),a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsx)(rt,{step:x})})))}}else for(let u of s){let x=`${u.index}-${u.objective}`,h=!!u.branchObjective;h&&!l.current.has(x)&&(l.current.add(x),a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsx)(rt,{step:{...u,children:void 0}})})));for(let I of u.children??[]){let B=`child-${u.index}-${I.index}-${I.objective}`;l.current.has(B)||(I.status==="passed"||I.status==="failed"||I.status==="stopped")&&(l.current.add(B),a((0,V.jsx)(y,{marginLeft:4,children:(0,V.jsx)(rt,{step:I})})))}!h&&!l.current.has(x)&&(u.status==="passed"||u.status==="failed"||u.status==="stopped")&&(l.current.add(x),a((0,V.jsx)(y,{marginLeft:2,children:(0,V.jsx)(rt,{step:{...u,children:void 0}})})))}},[s,a,e,t,n]);let N=[];if(a)if(e)for(let u of s){let h=(u.children??[]).filter(I=>{let B=`${I.index}-${I.objective}`;return!l.current.has(B)});h.length>0&&N.push({...u,children:h})}else for(let u of s){let x=`${u.index}-${u.objective}`,h=l.current.has(x),I=(u.children??[]).filter(B=>{let D=`child-${u.index}-${B.index}-${B.objective}`;return!l.current.has(D)});h?I.length>0&&N.push({...u,children:I}):N.push({...u,children:I})}else if(o){if(!e)for(let u of s)Z.current.has(u.index)||N.push(u)}if(!o){let u=a?N:s;return(0,V.jsxs)(y,{flexDirection:"column",children:[e?a?u.length>0?(0,V.jsx)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:u.map((h,I)=>(0,V.jsx)(y,{flexDirection:"column",marginTop:I>0?1:0,children:h.children&&h.children.length>0?h.children.map(B=>(0,V.jsx)(rt,{step:B},`f${I}-${B.index}`)):h.status==="pending"&&(0,V.jsx)(f,{color:v.dimmed,children:" \u25CB Waiting..."})},I))}):null:(0,V.jsx)(zr,{steps:s,flows:t,cmInitCounts:n,renderStep:(h,I)=>(0,V.jsx)(rt,{step:h},I)}):(0,V.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[!a&&n&&n[0]!=null&&(0,V.jsxs)(f,{color:v.dimmed,children:["\u25AA Generated task with ",n[0]," checkpoints"]}),u.map(h=>{let I=`${h.index}-${h.objective}`;return a&&l.current.has(I)?(0,V.jsx)(y,{flexDirection:"column",children:(h.children??[]).map(B=>(0,V.jsx)(y,{marginLeft:2,children:(0,V.jsx)(rt,{step:B})},B.index))},`branch-children-${h.index}`):(0,V.jsx)(rt,{step:h},h.index)})]}),_&&(0,V.jsx)(Wn,{currentStep:A,maxSteps:r,elapsed:O,status:P})]})}return e?(0,V.jsxs)(y,{flexDirection:"column",children:[(0,V.jsx)(zr,{steps:s,flows:t,cmInitCounts:n,renderStep:(u,x)=>(0,V.jsx)(rt,{step:u},x)}),_&&(0,V.jsx)(Wn,{currentStep:A,maxSteps:r,elapsed:O,status:P})]}):(0,V.jsxs)(y,{flexDirection:"column",children:[(0,V.jsx)(Qt,{items:ne,children:u=>u.type==="cm_init"?(0,V.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,V.jsxs)(f,{color:v.dimmed,children:["\u25AA Generated task with ",u.count," checkpoints"]})},u.key):u.type==="bifurcation_header"?(0,V.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,V.jsxs)(f,{color:v.dimmed,children:["\u2501\u2501 Bifurcated into ",u.flowCount," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]})},u.key):u.type==="flow_header"?(0,V.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,V.jsxs)(f,{color:v.purple,children:["Flow ",u.flowIdx+1,": ",u.label]}),u.cmCount!=null&&(0,V.jsxs)(f,{color:v.dimmed,children:[" \u25AA Generated task with ",u.cmCount," checkpoints"]})]},u.key):(0,V.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,V.jsx)(rt,{step:u.step})},u.key)}),N.length>0&&(0,V.jsx)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:N.map(u=>(0,V.jsx)(rt,{step:u},u.index))}),_&&(0,V.jsx)(Wn,{currentStep:A,maxSteps:r,elapsed:O,status:P})]})}var Jr=U(De(),1);var Gn=U(Q(),1),us=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function qn({label:s,hasBifurcation:e=!1}){let[t,n]=(0,Jr.useState)(0),[r,o]=(0,Jr.useState)(0);Tt(()=>{n(l=>(l+1)%us.length)},80),Tt(()=>{o(l=>(l+1)%4)},400);let a=s??(e?"Planning approach":"Analyzing objective");return(0,Gn.jsxs)(y,{marginLeft:1,children:[(0,Gn.jsxs)(f,{color:v.primary,children:[us[t]," "]}),(0,Gn.jsxs)(f,{color:v.dim,children:[a,".".repeat(r+1)]})]})}function zn(s){if(!s.isRunning)return null;let e=s.bifurcationInfo;if(e&&!e.isSingleFlow){let t=s.steps.findIndex(r=>r.status==="running");return(t===-1?s.cmInitCounts.length===0:t>=s.cmInitCounts.length)?{label:t>0?`Planning flow ${t+1}`:void 0,hasBifurcation:!0}:null}return s.cmInitCounts.length>0||s.steps.some(t=>t.children?.length)?null:{hasBifurcation:!!e}}var _t=U(De(),1);var Ke=U(Q(),1);function Hi(s,e){let t=[],r=Math.max(e-4,30);t.push({type:"title",text:s.title});for(let o=0;o<s.sections.length;o++){let a=s.sections[o];o>0&&t.push({type:"divider",text:"\u2500".repeat(r)}),a.label&&t.push({type:"header",text:a.label});let l=a.entries.length>0?Math.max(...a.entries.map(i=>i.key.length)):0;for(let i of a.entries){let c="\xB7".repeat(Math.max(2,l-i.key.length+3)),d=`${i.key} ${c} ${i.value}`;t.push({type:"entry",text:d,color:i.color})}}return t.push({type:"footer",text:"esc back"}),t}function ds({data:s,width:e=60}){let t=Hi(s,e);return(0,Ke.jsx)(y,{flexDirection:"column",borderStyle:"round",borderColor:v.primary,paddingX:2,paddingY:1,children:t.map((n,r)=>{if(n.type==="title")return(0,Ke.jsx)(f,{color:v.primary,bold:!0,children:n.text},r);if(n.type==="header")return(0,Ke.jsx)(y,{marginTop:1,children:(0,Ke.jsx)(f,{color:v.dim,children:n.text})},r);if(n.type==="divider")return(0,Ke.jsx)(y,{marginTop:1,marginBottom:0,children:(0,Ke.jsx)(f,{color:v.ambient,children:n.text})},r);if(n.type==="footer")return(0,Ke.jsx)(y,{marginTop:1,children:(0,Ke.jsx)(f,{color:v.dim,children:n.text})},r);let o=n.text.match(/^(.+?) (·+) (.+)$/);return o?(0,Ke.jsxs)(f,{children:[(0,Ke.jsxs)(f,{color:v.secondary,children:[o[1]," "]}),(0,Ke.jsxs)(f,{color:v.ambient,children:[o[2]," "]}),(0,Ke.jsx)(f,{color:n.color??v.base,children:o[3]})]},r):(0,Ke.jsx)(f,{color:n.color??v.base,children:n.text},r)})})}var Ve=U(Q(),1);function Xr(s,e){let t=[];function n(r,o){for(let a of r)t.push({item:a,depth:o}),a.type==="submenu"&&a.children&&e.length>o&&e[o]===a.id&&n(a.children,o+1)}return n(s,0),t}function Yr({items:s,onRunSelected:e,initialExpandedPath:t,onDismiss:n,renderLoginWizard:r,renderProfilesView:o,renderChromeProfilePicker:a,renderProjectPicker:l,renderFolderPicker:i,renderWindowSizePicker:c}){let[d,m]=(0,_t.useState)(()=>{let A=t??[],P=Xr(s,A),C=0;if(A.length>0){let O=P.findIndex(te=>te.item.id===A[0]);O>=0&&O+1<P.length&&(C=O+1)}return{expandedPath:A,selectedIndex:C,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),g=Xr(s,d.expandedPath),p=g[d.selectedIndex]?.item,_=(0,_t.useRef)(null),b=(0,_t.useCallback)(A=>{m(P=>({...P,feedback:A})),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{m(P=>({...P,feedback:null})),_.current=null},4e3)},[]);(0,_t.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]);let E=(0,_t.useCallback)(()=>{m(A=>({...A,activeView:null,infoData:null}))},[]);return je((A,P)=>{if(d.activeView==="infoView"){P.escape&&E();return}if(!(d.activeView==="loginWizard"||d.activeView==="profilesView"||d.activeView==="chromeProfilePicker"||d.activeView==="projectPicker"||d.activeView==="folderPicker"||d.activeView==="windowSizePicker")){if(d.isEditing){if(P.escape){m(C=>({...C,isEditing:!1,inputValue:""}));return}if(P.return){let C=d.inputValue.trim();if(p?.onValue&&C){let O=p.currentValue;p.onValue(C),b(O?`${p.label}: ${O} \u2192 ${C}`:`${p.label}: ${C}`)}m(O=>({...O,isEditing:!1,inputValue:""}));return}if(P.backspace||P.delete){m(C=>({...C,inputValue:C.inputValue.slice(0,-1)}));return}A&&!P.ctrl&&!P.meta&&m(C=>({...C,inputValue:C.inputValue+A}));return}if(d.isSelecting&&p?.options){let C=p.options;if(P.escape){m(O=>({...O,isSelecting:!1}));return}if(P.upArrow){m(O=>({...O,inputValue:String(Math.max(0,Number(O.inputValue||"0")-1))}));return}if(P.downArrow){m(O=>({...O,inputValue:String(Math.min(C.length-1,Number(O.inputValue||"0")+1))}));return}if(P.return){let O=Number(d.inputValue||"0"),te=C[O];if(te&&p.onValue){let Z=p.currentValue;p.onValue(te.value),b(Z?`${p.label}: ${Z} \u2192 ${te.label}`:`${p.label}: ${te.label}`)}m(Z=>({...Z,isSelecting:!1,inputValue:""}));return}return}if(P.upArrow){m(C=>({...C,selectedIndex:Math.max(0,C.selectedIndex-1)}));return}if(P.downArrow){m(C=>({...C,selectedIndex:Math.min(g.length-1,C.selectedIndex+1)}));return}if(P.escape){if(d.expandedPath.length===0){n?.();return}m(C=>{let O=C.expandedPath.slice(0,-1),te=Xr(s,O),Z=C.expandedPath[C.expandedPath.length-1],ne=te.findIndex(_e=>_e.item.id===Z);return{...C,expandedPath:O,selectedIndex:ne>=0?ne:0}});return}if(P.return&&p){if(p.id==="run-start"){e();return}if(p.type==="submenu"){let C=g[d.selectedIndex]?.depth??0;m(O=>({...O,expandedPath:[...O.expandedPath.slice(0,C),p.id],selectedIndex:O.selectedIndex+1}));return}if(p.onInfo){let C=p.onInfo();m(O=>({...O,activeView:"infoView",infoData:C}));return}if(p.onLoginWizard){p.onLoginWizard(),m(C=>({...C,activeView:"loginWizard"}));return}if(p.onProfilesView){p.onProfilesView(),m(C=>({...C,activeView:"profilesView"}));return}if(p.onChromeProfilePicker){p.onChromeProfilePicker(),m(C=>({...C,activeView:"chromeProfilePicker"}));return}if(p.onProjectPicker){p.onProjectPicker(),m(C=>({...C,activeView:"projectPicker"}));return}if(p.onFolderPicker){p.onFolderPicker(),m(C=>({...C,activeView:"folderPicker"}));return}if(p.onWindowSizePicker){p.onWindowSizePicker(),m(C=>({...C,activeView:"windowSizePicker"}));return}if(p.type==="action"){p.onAction?.(),p.suppressFeedback||b(`${p.label} done`);return}if(p.type==="select"&&p.options){let C=p.options.findIndex(O=>O.value===p.currentValue);m(O=>({...O,isSelecting:!0,inputValue:String(Math.max(0,C))}));return}if(p.type==="text-input"){m(C=>({...C,isEditing:!0,inputValue:p.currentValue??""}));return}}}}),(0,Ve.jsx)(y,{flexDirection:"column",paddingX:1,children:d.activeView==="infoView"&&d.infoData?(0,Ve.jsx)(ds,{data:d.infoData}):d.activeView==="loginWizard"&&r?r(E):d.activeView==="profilesView"&&o?o(E):d.activeView==="chromeProfilePicker"&&a?a(E):d.activeView==="projectPicker"&&l?l(E):d.activeView==="folderPicker"&&i?i(E):d.activeView==="windowSizePicker"&&c?c(E):(0,Ve.jsxs)(Ve.Fragment,{children:[g.map(({item:A,depth:P},C)=>{let O=C===d.selectedIndex,te=" ".repeat(P),Z=O?"\u276F ":" ",ne=A.type==="submenu"?d.expandedPath.includes(A.id)?"\u25BC ":"\u25B6 ":" ",_e=A.currentValue!=null?` [${A.currentValue}]`:"";if(O&&d.isSelecting&&A.options){let F=Number(d.inputValue||"0");return(0,Ve.jsxs)(y,{flexDirection:"column",children:[(0,Ve.jsxs)(f,{color:v.cyan,children:[te,Z,ne,A.label]}),A.options.map((N,u)=>(0,Ve.jsxs)(f,{color:u===F?v.cyan:void 0,children:[te," ",u===F?"\u276F ":" ",N.label]},N.value))]},A.id)}return O&&d.isEditing?(0,Ve.jsxs)(f,{color:v.cyan,children:[te,Z,ne,A.label,": ",d.inputValue,(0,Ve.jsx)(f,{color:v.dimmed,children:"\u2588"})]},A.id):(0,Ve.jsxs)(f,{color:O?v.cyan:void 0,dimColor:!O&&P>0,children:[te,Z,ne,A.label,(0,Ve.jsx)(f,{dimColor:!0,children:_e})]},A.id)}),d.feedback&&(0,Ve.jsx)(y,{marginTop:1,children:(0,Ve.jsxs)(f,{color:v.green,children:["\u2713 ",d.feedback]})})]})})}var _n=U(De(),1);var Le=U(Q(),1),Qr=800,Zr=3840,eo=600,to=2160;function fs(s,e){if(!e)return"Enter a value";let t=Number(e);if(!Number.isInteger(t))return"Must be a whole number";if(s==="width"){if(t<Qr)return`Min ${Qr}`;if(t>Zr)return`Max ${Zr}`}else{if(t<eo)return`Min ${eo}`;if(t>to)return`Max ${to}`}return null}function no({currentWidth:s,currentHeight:e,onSelect:t,onCancel:n}){let[r,o]=(0,_n.useState)("width"),[a,l]=(0,_n.useState)(String(s)),[i,c]=(0,_n.useState)(String(e)),[d,m]=(0,_n.useState)(null);je((p,_)=>{if(_.escape){n();return}if(_.tab||_.rightArrow||_.leftArrow){o(b=>b==="width"?"height":"width"),m(null);return}if(_.return){let b=fs("width",a);if(b){o("width"),m(`Width: ${b}`);return}let E=fs("height",i);if(E){o("height"),m(`Height: ${E}`);return}t(Number(a),Number(i));return}if(_.backspace||_.delete){r==="width"?l(b=>b.slice(0,-1)):c(b=>b.slice(0,-1)),m(null);return}p&&/^\d$/.test(p)&&(r==="width"?l(b=>b+p):c(b=>b+p),m(null))});let g=(p,_,b)=>{let E=r===b,A=E?v.primary:v.secondary;return(0,Le.jsxs)(y,{flexDirection:"column",children:[(0,Le.jsxs)(f,{color:v.dim,children:[" ",p]}),(0,Le.jsx)(y,{borderStyle:"round",borderColor:A,paddingX:1,width:10,children:(0,Le.jsxs)(f,{color:E?v.base:v.dim,children:[_||" ",E?(0,Le.jsx)(f,{color:v.dimmed,children:"\u2588"}):""]})}),(0,Le.jsxs)(f,{color:v.dim,dimColor:!0,children:[" ",b==="width"?`${Qr}\u2013${Zr}`:`${eo}\u2013${to}`]})]})};return(0,Le.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,Le.jsx)(f,{color:v.primary,bold:!0,children:"Window Size"}),(0,Le.jsxs)(y,{marginTop:1,gap:1,children:[g("Width",a,"width"),(0,Le.jsx)(y,{alignItems:"center",marginTop:1,children:(0,Le.jsx)(f,{color:v.dim,children:"x"})}),g("Height",i,"height")]}),d&&(0,Le.jsx)(y,{marginTop:1,children:(0,Le.jsx)(f,{color:v.red,children:d})}),(0,Le.jsx)(y,{marginTop:1,children:(0,Le.jsx)(f,{color:v.dim,children:"Tab/arrows to switch Enter to save Esc to cancel"})})]})}import{randomUUID as Wi}from"crypto";import{mkdirSync as Ki,writeFileSync as ms,appendFileSync as Gi,existsSync as ps}from"fs";import{join as bn}from"path";var qi=bn(Ee,"sessions"),bt=class{sessionId;sessionDir;runs=[];_flows=[];_nextIndex=0;_started=!1;_testId=null;_testcaseId=null;_projectId=null;_uploadStatus="pending";_uploadAttempts=0;_uploadError=null;_firstObjective=null;_firstUrl=null;_auteurVariables={};_screenshotSas=null;_model="";_environment="";_profile=null;_startedAt="";_remoteLogger=null;_earlyLogBuffer=[];constructor(){this.sessionId=Wi(),this.sessionDir=bn(qi,this.sessionId)}start(e){if(!this._started){this._started=!0,this._model=e.model,this._environment=e.environment,this._profile=e.profile,this._startedAt=new Date().toISOString();try{Ki(this.sessionDir,{recursive:!0});let t={session_id:this.sessionId,started_at:this._startedAt,model:e.model,environment:e.environment,profile:e.profile,objectives:[],runs:[],status:"in_progress"};ms(bn(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
|
|
26
|
-
`)
|
|
27
|
-
`)}nextRunIndex(){return this._nextIndex}addRunResult(e,t){this.runs.push(e),this._nextIndex+=t??1}getContext(){return{prior_runs:this.runs.map(e=>({index:e.index,objective:e.objective,summary:e.summary,status:e.status,memory:e.context.memory,variables:e.context.variables,pointer:e.context.pointer}))}}addFlow(e){let t={...e,index:this._flows.length+1};return this._flows.push(t),t}getFlows(){return[...this._flows]}getFlow(e){return this._flows.find(t=>t.index===e)}clearFlows(){this._flows=[]}setTestId(e){this._testId=e}get testId(){return this._testId}setTestcaseId(e){this._testcaseId=e}get testcaseId(){return this._testcaseId}setProjectId(e){this._projectId=e}setFirstRun(e,t){this._firstObjective||(this._firstObjective=e,this._firstUrl=t)}get firstObjective(){return this._firstObjective}get firstUrl(){return this._firstUrl}getRunDirs(){let e=[];for(let t of this.runs)t.run_dirs&&t.run_dirs.length>0?e.push(...t.run_dirs):t.run_dir&&e.push(t.run_dir);return e}getRunObjectives(){let e=[];for(let t of this.runs)t.flow_objectives&&t.flow_objectives.length>0?e.push(...t.flow_objectives):e.push(t.objective);return e}getRunMetadata(){let e=[];for(let t of this.runs)if(t.perFlowMetadata&&t.perFlowMetadata.length>0)e.push(...t.perFlowMetadata);else{let n={resultCode:t.resultCode,reasonCode:t.reasonCode,errorMessage:t.status==="failed"?t.summary??null:null,summary:t.summary,oneLiner:t.oneLiner},r=t.run_dirs?.length??1;for(let o=0;o<r;o++)e.push(n)}return e}setUploadStatus(e,t){this._uploadStatus=e,this._uploadAttempts+=1,this._uploadError=t??null}_log(e){if(!(!this._started||!ps(this.sessionDir)))try{let t=new Date().toISOString().slice(0,19).replace("T"," "),n=bn(this.sessionDir,"tui.log");Gi(n,`[${t}] ${e}
|
|
28
|
-
`)}catch{}}};import{dirname as zi,join as Ji}from"path";function xn(s,e,t){let n=s.total_runs??1,r=s.run_dir,o,a;if(n>1&&r){let l=zi(r);o=Array.from({length:n},(i,c)=>Ji(l,String(e+c))),t&&t.length===n&&(a=t)}return{allRunDirs:o,flowObjectives:a}}function wn(s,e,t,n){return{index:t,objective:e,summary:s.summary,oneLiner:s.one_liner,status:s.status,resultCode:s.result_code,reasonCode:s.reason_code,perFlowMetadata:s.per_flow_metadata,context:s.context??{memory:{},variables:{},pointer:""},run_dir:s.run_dir,run_dirs:n.allRunDirs,flow_objectives:n.flowObjectives}}import{readFileSync as Xi,writeFileSync as gs,mkdirSync as hs}from"fs";import{dirname as vs}from"path";var Jn={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:mt,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",code_export:{enabled:!1,language:"python",skip_validation:!0}},ot=class{constructor(e=No){this.path=e}load(){try{let e=Xi(this.path,"utf-8"),t=JSON.parse(e);return{...Jn,...t,code_export:{...Jn.code_export,...t.code_export??{}}}}catch{return{...Jn,code_export:{...Jn.code_export}}}}set(e,t){try{let n=this.load();n[e]=t,hs(vs(this.path),{recursive:!0}),gs(this.path,JSON.stringify(n,null,2)+`
|
|
29
|
-
`)}catch(n){let r=n instanceof Error?n.message:String(n);process.stderr.write(`[config] Failed to save config: ${r}
|
|
30
|
-
`)}}save(e){try{let n={...this.load(),...e};hs(vs(this.path),{recursive:!0}),gs(this.path,JSON.stringify(n,null,2)+`
|
|
31
|
-
`)}catch(t){let n=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${n}
|
|
32
|
-
`)}}};var Fe=U(De(),1);async function Xn(s){let e=s.credentials.expires_at,t=s.thresholdSeconds??300;if(e-Date.now()/1e3>=t)return null;let n=s.creds.loadClient(s.profile,s.env);if(!n)return null;let o=await new nn(s.env).refreshToken(s.credentials.refresh_token,n.client_id),a=Math.floor(Date.now()/1e3)+o.expires_in;return s.creds.saveCredentials(s.profile,s.env,{access_token:o.access_token,refresh_token:o.refresh_token,expires_at:a,scope:o.scope}),{accessToken:o.access_token,refreshToken:o.refresh_token,expiresAt:a,scope:o.scope}}async function Yn(s,e,t){let n=s.loadCredentials(e,t),r=s.loadClient(e,t);if(n&&r){let a=new nn(t);await Promise.allSettled([a.revokeToken(n.access_token,r.client_id,"access_token"),a.revokeToken(n.refresh_token,r.client_id,"refresh_token")])}s.deleteProfileFull(e,t);let o=s.listProfiles();return o.length>0&&(s.setActiveProfile(o[0].profile),s.setDefaultEnv(o[0].env)),{profile:e,env:t,switchedTo:o.length>0?o[0]:void 0}}function _s(){let[s]=(0,Fe.useState)(()=>new He),[e,t]=(0,Fe.useState)(()=>{let _=s.resolveAuth();if(!_)return!1;if(_.method==="basic")return!0;let{credentials:b}=s.getActiveCredentials();return b?b.expires_at>Date.now()/1e3:!1}),n=(0,Fe.useRef)(null),r=(0,Fe.useRef)(null),o=(0,Fe.useCallback)(()=>{let _=s.resolveAuth();return _?{method:_.method,profile:_.profile,env:_.env}:null},[s]),a=(0,Fe.useCallback)(async()=>{let{credentials:_,profile:b,env:E}=s.getActiveCredentials();if(!_||!b||!E)return null;let A=_.expires_at,P=Date.now()/1e3;if(A-P<300){if(r.current)return r.current;let C=(async()=>{try{let O=await Xn({creds:s,profile:b,env:E,credentials:_});return O?(t(!0),O.accessToken):null}catch{return t(!1),null}finally{r.current=null}})();return r.current=C,C}return t(!0),_.access_token},[s]),l=(0,Fe.useCallback)(()=>{let _=s.resolveAuth();return!_||_.method!=="basic"?null:{username:_.username,access_key:_.access_key}},[s]),i=(0,Fe.useCallback)((_,b)=>{n.current?.revoke();let E=ae(_),A=l(),P=new pt(E.controllerBaseUrl,a,A,b);return n.current=P,P},[l,a]),c=(0,Fe.useCallback)(()=>n.current,[]),d=(0,Fe.useCallback)(()=>{let _=l();if(_)return _;let b=n.current?.cached;return b?{username:b.username,access_key:b.access_key}:null},[l]),m=(0,Fe.useCallback)(async()=>{let _=n.current;return _?_.resolve():null},[]),g=(0,Fe.useCallback)(async(_="default")=>{let b=s.getDefaultEnv();await new hn(_,b,s).login(),s.setActiveProfile(_),t(!0)},[s]),p=(0,Fe.useCallback)(async()=>{let _=s.getActiveProfile();if(!_)return null;let b=s.getDefaultEnv(),E=await Yn(s,_,b);return t(!1),{profile:E.profile,env:E.env}},[s]);return{creds:s,tokenValid:e,setTokenValid:t,getToken:a,getBasicAuth:l,getAuthInfo:o,login:g,logout:p,initResolver:i,getResolver:c,getResolvedBasicAuth:d,resolveBasicAuth:m}}var xt=U(De(),1);import{spawn as Cs,spawnSync as Yi}from"child_process";import{existsSync as ao}from"fs";import{createConnection as Qi}from"net";import{homedir as Sn,platform as Cn}from"os";import{join as En}from"path";var ys=()=>!!process.env.KANE_DEV_MODE,Dt=[],bs=!1,xs=null,ro=null,oo=null,yn=null;function Qn(s){yn=s}function Ss(){return yn}function Ge(s,e){Dt=Dt.filter(t=>t.name!==s),Dt.push({name:s,fn:e})}function qe(s,e){let t=Dt.find(r=>r.name===s);if(!t)return;Dt=Dt.filter(r=>r.name!==s);let n=!0;try{t.fn()}catch(r){n=!1,process.stderr.write(`[exit-manager] cleanup(${s}) failed: ${r instanceof Error?r.message:String(r)}
|
|
33
|
-
`)}e&&n&&ys()&&process.stderr.write(`[exit-manager] cleanup(${s}): ${e}
|
|
34
|
-
`)}function X(s,e,t=!1){if(bs){process.exit(xs??s);return}if(bs=!0,xs=s,t&&yn)try{yn.log("error","CRASH",e),yn.shutdownSync()}catch{}let n=[...Dt].reverse(),r=[];for(let o of n)try{o.fn(),r.push(o.name)}catch(a){process.stderr.write(`[exit-manager] cleanup(${o.name}) failed: ${a instanceof Error?a.message:String(a)}
|
|
35
|
-
`)}if(Dt=[],ys()&&(process.stderr.write(`[exit-manager] shutdown(${s}): ${e}
|
|
36
|
-
`),r.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${r.join(", ")}
|
|
37
|
-
`)),t&&oo){try{oo()}catch{}process.stderr.write(`
|
|
38
|
-
Kane CLI crashed unexpectedly: ${e}
|
|
39
|
-
`+(r.length>0?`Resources cleaned up (${r.join(", ")}).
|
|
40
|
-
`:"")),process.exit(s);return}if(ro&&!t){ro();return}process.exit(s)}function so(s){ro=s}function io(s){oo=s}var ws=!1;function Es(){ws||(ws=!0,process.on("SIGINT",()=>{X(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{X(143,"Received SIGTERM",!0)}),process.on("uncaughtException",s=>{X(1,`Uncaught exception: ${s.message}`,!0)}),process.on("unhandledRejection",s=>{X(1,`Unhandled rejection: ${String(s)}`,!0)}))}var Zi=new Set(["1","true","yes"]),rn=class extends Error{constructor(e){super(e),this.name="ChromeNotFoundError"}};function er(s){return s instanceof rn?s.message:`Chrome failed: ${s instanceof Error?s.message:String(s)}`}var Zn={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",En(Sn(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",En(Sn(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",En(Sn(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",En(Sn(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",En(Sn(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function ea(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let s=Cn(),e=Zn[s]??Zn.linux;for(let t of e)if(ao(t))return t;return s==="win32"?"chrome.exe":"google-chrome"}function ta(){if(process.env.KANE_CLI_CHROME_PATH)return ao(process.env.KANE_CLI_CHROME_PATH);let s=Cn();if((Zn[s]??Zn.linux).some(r=>ao(r)))return!0;let t=s==="win32"?"chrome.exe":"google-chrome",n=s==="win32"?"where":"which";try{return Yi(n,[t],{stdio:"ignore"}).status===0}catch{return!1}}function na(){let s=Cn();return s==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
41
|
-
`):s==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
42
|
-
`):s==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
|
|
21
|
+
`),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,i=n.code||"commander.error";this._exit(r,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in _e.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()}`,_e.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new qa(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(r=>!t(r)).forEach(r=>{this.setOptionValueWithSource(r,n.implied[r],"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=a=>{let l=a.attributeName(),c=this.getOptionValue(l),s=this.options.find(m=>m.negate&&l===m.attributeName()),u=this.options.find(m=>!m.negate&&l===m.attributeName());return s&&(s.presetArg===void 0&&c===!1||s.presetArg!==void 0&&c===s.presetArg)?s:u||a},r=a=>{let l=n(a),c=l.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${l.envVar}'`:`option '${l.flags}'`},i=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let r=[],i=this;do{let a=i.createHelp().visibleOptions(i).filter(l=>l.long).map(l=>l.long);r=r.concat(a),i=i.parent}while(i&&!i._enablePositionalOptions);t=rs(e,r)}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",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let r=[];this.createHelp().visibleCommands(this).forEach(i=>{r.push(i.name()),i.alias()&&r.push(i.alias())}),t=rs(e,r)}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 r=this.createOption(t,n);return this._versionOptionName=r.attributeName(),this._registerOption(r),this.on("option:"+r.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 r=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${r}'`)}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=>Ka(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=yt.basename(e,yt.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=r=>this._outputConfiguration.writeErr(r):n=r=>this._outputConfiguration.writeOut(r),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(i=>i.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let r=this.helpInformation(n);if(t&&(r=t(r),typeof r!="string"&&!Buffer.isBuffer(r)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(r),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(i=>i.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=_e.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
|
+
Expecting one of '${n.join("', '")}'`);let r=`${e}Help`;return this.on(r,i=>{let a;typeof t=="function"?a=t({error:i.error,command:i.command}):a=t,a&&i.write(`${a}
|
|
24
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(r=>t.is(r))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function os(o){return o.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",r="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?r=i[3]:n=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],n=i[3],r=i[4]),t&&r!=="0"?`${t}=${n}:${parseInt(r)+1}`:e})}is.Command=Po});var ds=jt(at=>{"use strict";var{Argument:as}=kr(),{Command:Oo}=ss(),{CommanderError:za,InvalidArgumentError:ls}=Bn(),{Help:Ja}=So(),{Option:cs}=ko();at.program=new Oo;at.createCommand=o=>new Oo(o);at.createOption=(o,e)=>new cs(o,e);at.createArgument=(o,e)=>new as(o,e);at.Command=Oo;at.Option=cs;at.Argument=as;at.Help=Ja;at.CommanderError=za;at.InvalidArgumentError=ls;at.InvalidOptionArgumentError=ls});var $o=K(Fe(),1);import Qe from"process";var P=K(Fe(),1);var fi=K(Fe(),1);var tn=K(Z(),1);function mi({path:o}){return o.length===0?null:(0,tn.jsx)(p,{children:o.map((e,t)=>(0,tn.jsxs)(fi.default.Fragment,{children:[t>0&&(0,tn.jsx)(d,{color:f.muted,children:" \u203A "}),(0,tn.jsx)(d,{color:f.dimmed,children:e})]},t))})}var be=K(Z(),1);function pi({profile:o,environment:e,model:t,tokenValid:n,sessionId:r,runCount:i,viewMode:a,breadcrumb:l}){let{stdout:c}=Xt(),s=c?.columns??80,u=e==="stage";return(0,be.jsxs)(p,{flexDirection:"column",children:[(0,be.jsx)(d,{color:f.muted,children:"\u2500".repeat(s)}),l&&l.length>0&&(0,be.jsx)(p,{paddingX:1,children:(0,be.jsx)(mi,{path:l})}),(0,be.jsx)(p,{paddingX:1,children:(0,be.jsxs)(p,{gap:1,children:[(0,be.jsx)(d,{color:f.dimmed,children:"Model:"}),(0,be.jsx)(d,{color:f.dimmed,children:t}),(0,be.jsx)(d,{color:f.muted,children:"|"}),(0,be.jsx)(d,{color:f.dimmed,children:"Session:"}),(0,be.jsx)(d,{color:f.dimmed,children:r}),(0,be.jsx)(d,{color:f.muted,children:"|"}),(0,be.jsx)(d,{color:n?f.green:f.red,children:"\u25CF"}),(0,be.jsx)(d,{color:f.dimmed,children:n?"authenticated":"not logged in"})]})}),(0,be.jsx)(p,{paddingX:1,children:(0,be.jsxs)(p,{gap:1,children:[(0,be.jsx)(d,{color:f.dimmed,children:o??"no profile"}),(0,be.jsx)(d,{color:f.muted,children:"|"}),u?(0,be.jsx)(d,{color:f.yellow,bold:!0,children:"\u26A0 stage"}):(0,be.jsx)(d,{color:f.green,children:e}),(0,be.jsx)(d,{color:f.muted,children:"|"}),(0,be.jsxs)(d,{color:f.dimmed,children:["runs: ",i]})]})}),(0,be.jsx)(p,{paddingX:1,children:(0,be.jsx)(d,{dimColor:!0,children:a==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var Lt=K(Fe(),1);var vn=[[[" "],[" "],[" "],[" "],["\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 oe=K(Z(),1),Jn="#af87d7",Yr="#875faf",gi="#5b3a7a",Ns="#ff9500",Fs="#ea580c";var Qr="#666666",Ms="#555555",$t=[[Jn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Jn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Jn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Jn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Yr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],Zr=$t.map(([,o])=>[...o]);function hi({visibleRows:o=$t.length}){let e=Math.min(o,$t.length);return(0,oe.jsxs)(p,{flexDirection:"column",children:[$t.slice(0,e).map(([t,n],r)=>{let i=Zr[r];return(0,oe.jsx)(d,{children:i.map((a,l)=>{if(a==="\u2588")return(0,oe.jsx)(d,{color:t,children:"\u2588"},l);let c=l>0&&i[l-1]==="\u2588",s=r>0&&l>0&&Zr[r-1][l-1]==="\u2588";return c||s?(0,oe.jsx)(d,{color:gi,children:"\u2592"},l):(0,oe.jsx)(d,{children:" "},l)})},r)}),e>=$t.length&&(0,oe.jsxs)(d,{children:[" ",Zr[$t.length-1].map((t,n)=>t==="\u2588"?(0,oe.jsx)(d,{color:gi,children:"\u2580"},n):(0,oe.jsx)(d,{children:" "},n))]})]})}function Us({visibleRows:o=vn.length}){let e=Math.min(o,vn.length);return(0,oe.jsx)(p,{flexDirection:"column",children:vn.slice(0,e).map((t,n)=>(0,oe.jsx)(d,{children:t.map((r,i)=>{let a=r[0],l=r[1],c=r[2];return l?(0,oe.jsx)(d,{color:l,backgroundColor:c,children:a},i):(0,oe.jsx)(d,{children:a},i)})},n))})}function Xn({size:o="compact",helmetVisibleRows:e=vn.length,textVisibleRows:t=$t.length,showMeta:n=!1,user:r=null,authenticated:i=!1,version:a=""}){return o==="compact"?(0,oe.jsx)(hi,{}):(0,oe.jsxs)(p,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,oe.jsx)(d,{color:Ns,italic:!0,children:" Welcome to"}),(0,oe.jsx)(d,{children:" "}),(0,oe.jsxs)(p,{gap:2,children:[(0,oe.jsx)(Us,{visibleRows:e}),(0,oe.jsxs)(p,{flexDirection:"column",children:[(0,oe.jsx)(hi,{visibleRows:t}),(0,oe.jsx)(p,{justifyContent:"flex-end",width:73,children:(0,oe.jsx)(d,{color:Fs,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,oe.jsxs)(oe.Fragment,{children:[(0,oe.jsx)(d,{children:" "}),(0,oe.jsxs)(d,{children:[(0,oe.jsx)(d,{color:Qr,children:" Browser automation powered by AI. "}),(0,oe.jsx)(d,{color:Ms,children:`v${a}`})]}),(0,oe.jsx)(d,{children:" "}),(0,oe.jsx)(d,{children:(0,oe.jsx)(d,{color:Qr,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,oe.jsx)(d,{children:(0,oe.jsx)(d,{color:Qr,children:" data \u2014 right from your terminal."})}),(0,oe.jsx)(d,{children:" "})]})]})}var no=K(Z(),1),eo=8,to=7;function bi({onComplete:o}){let[e,t]=(0,Lt.useState)(0),[n,r]=(0,Lt.useState)(0),[i,a]=(0,Lt.useState)(!1),[l]=(0,Lt.useState)(()=>{let c=new tt,s=c.getActiveProfile(),u=c.getDefaultEnv(),m=s?c.loadCredentials(s,u):null,b=s?c.loadBasicAuth(s,u):null;return{authenticated:!!(m||b),user:b?.username??s??null}});return Rt(()=>{t(c=>Math.min(eo,c+1))},e<eo?60:null),Rt(()=>{r(c=>Math.min(to,c+1))},n<to?80:null),(0,Lt.useEffect)(()=>{e>=eo&&n>=to&&!i&&(a(!0),o?.())},[e,n,i,o]),(0,no.jsx)(p,{flexDirection:"column",children:(0,no.jsx)(Xn,{size:"full",helmetVisibleRows:e,textVisibleRows:n,showMeta:i,user:l.user,authenticated:l.authenticated,version:gt})})}var bt=K(Z(),1);function xi({entry:o}){return o.type==="input"?(0,bt.jsxs)(p,{children:[(0,bt.jsx)(d,{color:f.purple,children:"\u276F "}),(0,bt.jsx)(d,{children:o.text})]}):o.type==="error"?(0,bt.jsx)(p,{marginLeft:2,children:(0,bt.jsx)(d,{color:f.red,children:o.text})}):(0,bt.jsx)(p,{marginLeft:2,children:(0,bt.jsx)(d,{color:o.type==="info"?f.dimmed:void 0,children:o.text})})}var Pe=K(Fe(),1);var wi=K(Fe(),1);var Yn=K(Z(),1),Hs="#ffc580",Ws="#ffd9a8",vi="#ffffff";function yi({text:o,active:e=!0}){let[t,n]=(0,wi.useState)(0),r=4;if(Rt(()=>{n(a=>(a+1)%(o.length+r*2))},e?80:null),!e)return(0,Yn.jsx)(d,{color:vi,children:o});let i=o.split("").map((a,l)=>{let c=t-r,s=Math.abs(l-c-r/2),u;return s<=r/2?u=Hs:s<=r?u=Ws:u=vi,(0,Yn.jsx)(d,{color:u,children:a},l)});return(0,Yn.jsx)(d,{children:i})}var He=K(Z(),1),Ks={starting:f.cyan,running:f.purple,passed:f.green,failed:f.red,cancelled:f.dimmed,timed_out:f.yellow};function Qn({currentStep:o,maxSteps:e,elapsed:t,status:n}){let{stdout:r}=Xt(),i=r?.columns??80,a=Ks[n]??f.purple,l=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`;return(0,He.jsxs)(p,{flexDirection:"column",marginTop:1,children:[(0,He.jsx)(d,{color:f.muted,children:"\u2500".repeat(Math.min(i,60))}),(0,He.jsxs)(p,{children:[(0,He.jsx)(d,{children:" "}),(0,He.jsx)(d,{color:f.dimmed,children:"Steps "}),(0,He.jsx)(d,{bold:!0,children:o}),(0,He.jsxs)(d,{color:f.dimmed,children:["/",e]}),(0,He.jsx)(d,{children:" "}),(0,He.jsx)(d,{color:f.dimmed,children:"Elapsed "}),(0,He.jsx)(d,{bold:!0,children:l}),(0,He.jsx)(d,{children:" "}),(0,He.jsx)(d,{color:f.dimmed,children:"Status "}),(0,He.jsx)(d,{bold:!0,color:a,children:n})]})]})}var Gs={click:"\u25CF",type:"\u229E",scroll:"\u2195",navigate:"\u2192",analyze:"\u25CE",assert:"\u25C8","if-else":"\u2442",select:"\u25BC",press_key:"\u21B5",wait:"\u2026",tool_call:"\u2299"};function _i(o){return Gs[o]??"\u25CF"}var Tt=K(Z(),1);function ro({steps:o,flows:e,cmInitCounts:t,renderStep:n}){return(0,Tt.jsxs)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,Tt.jsxs)(d,{color:f.dimmed,children:["\u2501\u2501 Bifurcated into ",e?.length??o.length," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]}),o.map((r,i)=>(0,Tt.jsxs)(p,{flexDirection:"column",marginTop:i>0?1:0,children:[(0,Tt.jsxs)(d,{color:f.purple,children:["Flow ",i+1,": ",e?.[i]??r.objective]}),t&&t[i]!=null&&(0,Tt.jsxs)(d,{color:f.dimmed,children:[" \u25AA Generated task with ",t[i]," checkpoints"]}),r.children&&r.children.length>0?r.children.map(a=>n(a,`f${i}-${a.index}`)):r.status==="pending"&&(0,Tt.jsx)(d,{color:f.dimmed,children:" \u25CB Waiting..."})]},i))]})}var V=K(Z(),1);function st({step:o,indent:e=2}){let t=o.actionType?_i(o.actionType):null,n=o.status==="running",r=o.status==="passed",i=o.status==="failed",a=o.status==="pending"||o.status==="stopped",{stdout:l}=Xt(),c=l?.columns??80,s=Math.max(20,c-e-21),u=o.objective??"",m=u.length>s?u.slice(0,s-1)+"\u2026":u,b=(o.duration??0)*1e3,E=o.duration!=null?b<1e3?`${Math.round(b)}ms`:`${(b/1e3).toFixed(1)}s`:"";return(0,V.jsxs)(p,{flexDirection:"column",children:[(0,V.jsxs)(p,{marginLeft:e,children:[(0,V.jsx)(p,{width:4,children:(0,V.jsxs)(d,{color:f.muted,children:[String(o.index).padStart(2," ")," "]})}),(0,V.jsx)(p,{width:3,children:n?(0,V.jsx)(Jo,{}):r?(0,V.jsx)(d,{color:f.green,bold:!0,children:"\u2713"}):i?(0,V.jsx)(d,{color:f.red,bold:!0,children:"\u2717"}):(0,V.jsx)(d,{color:f.muted,children:"\u25CB"})}),(0,V.jsx)(p,{flexGrow:1,children:n?(0,V.jsx)(yi,{text:m,active:!0}):i?(0,V.jsx)(d,{color:f.red,children:m}):a?(0,V.jsx)(d,{color:f.dimmed,children:m}):(0,V.jsx)(d,{color:f.greenDim,children:m})}),(r||i)&&t?(0,V.jsx)(p,{width:3,marginLeft:1,children:(0,V.jsx)(d,{color:f.muted,children:t})}):(0,V.jsx)(p,{width:3,marginLeft:1}),(0,V.jsx)(p,{width:7,justifyContent:"flex-end",children:(0,V.jsx)(d,{color:f.dimmed,children:E})})]}),o.children&&o.children.length>0&&(0,V.jsx)(p,{flexDirection:"column",children:o.children.map((h,_)=>(0,V.jsx)(st,{step:h,indent:e+2},`child-${_}`))})]})}function Zn({steps:o,bifurcated:e,flows:t,cmInitCounts:n,maxSteps:r=50,staticSteps:i=!1,onStepCommit:a}){let l=(0,Pe.useRef)(new Set),c=(0,Pe.useRef)(!1),s=(0,Pe.useRef)(new Set),u=(0,Pe.useRef)(!1),m=(0,Pe.useRef)(new Set),b=(0,Pe.useRef)(0);(0,Pe.useEffect)(()=>{o.length===0&&b.current>0&&(l.current.clear(),c.current=!1,s.current.clear(),u.current=!1,m.current.clear()),b.current=o.length},[o.length]);let E=o.flatMap(D=>[D,...D.children??[]]),h=E.some(D=>D.status==="running"),_=E.some(D=>D.status==="failed"),I=E.length===0||E.every(D=>D.status==="pending"),k=E.filter(D=>D.status==="passed"||D.status==="failed").length,T;I?T="starting":h?T="running":_?T="failed":T="passed";let O=(0,Pe.useRef)(null),[C,L]=(0,Pe.useState)(0);(0,Pe.useEffect)(()=>{E.length===0||I?(O.current=null,L(0)):h&&O.current==null&&(O.current=Date.now())},[h,I,E.length]),(0,Pe.useEffect)(()=>{if(!h)return;let D=setInterval(()=>{O.current!=null&&L((Date.now()-O.current)/1e3)},500);return()=>clearInterval(D)},[h]);let ne=(0,Pe.useRef)(new Set),[ae,le]=(0,Pe.useState)([]),he=(0,Pe.useRef)(!1);(0,Pe.useEffect)(()=>{if(!i||e)return;let D=[];if(!e&&!he.current&&n&&n[0]!=null&&(he.current=!0,n[0]>0&&D.push({key:"cm_init_0",type:"cm_init",count:n[0]})),e){!ne.current.has(-1)&&o.length>0&&(ne.current.add(-1),D.push({key:"bif_header",type:"bifurcation_header",flowCount:t?.length??o.length}));for(let M=0;M<o.length;M++){let v=o[M],U=-(M+10);ne.current.has(U)||(ne.current.add(U),D.push({key:`flow_header_${M}`,type:"flow_header",flowIdx:M,label:t?.[M]??v.objective,cmCount:n?.[M]}));for(let J of v.children??[])(J.status==="passed"||J.status==="failed")&&!ne.current.has(J.index)&&(ne.current.add(J.index),D.push({key:`step_f${M}_${J.index}`,type:"step",step:{...J}}))}}else for(let M of o)(M.status==="passed"||M.status==="failed")&&!ne.current.has(M.index)&&(ne.current.add(M.index),D.push({key:`step_${M.index}`,type:"step",step:{...M,children:M.children?[...M.children]:void 0}}));D.length>0&&le(M=>[...M,...D])},[o,e,t,n,i]),(0,Pe.useEffect)(()=>{if(a)if(!e&&!u.current&&n&&n[0]!=null&&(u.current=!0,n[0]>0&&a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsxs)(d,{color:f.dimmed,children:["\u25A0 Generated task with ",n[0]," checkpoints"]})}))),e&&t&&!c.current&&(c.current=!0,a((0,V.jsx)(d,{color:"#b388ff",children:"\u2501\u2501 Bifurcated into "+t.length+" flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"}))),e){let D=o.flatMap((M,v)=>{let U=M.children??[];return!s.current.has(v)&&U.length>0&&(s.current.add(v),a((0,V.jsx)(d,{color:"#b388ff",children:" Flow "+(v+1)+": "+(t?.[v]??"")})),n?.[v]!=null&&n[v]>0&&!m.current.has(v)&&(m.current.add(v),a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsxs)(d,{color:f.dimmed,children:[" \u25AA Generated task with ",n[v]," checkpoints"]})})))),n?.[v]!=null&&n[v]>0&&s.current.has(v)&&!m.current.has(v)&&(m.current.add(v),a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsxs)(d,{color:f.dimmed,children:[" \u25AA Generated task with ",n[v]," checkpoints"]})}))),U});for(let M of D){let v=`${M.index}-${M.objective}`;l.current.has(v)||(M.status==="passed"||M.status==="failed"||M.status==="stopped")&&(l.current.add(v),a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsx)(st,{step:M})})))}}else for(let D of o){let M=`${D.index}-${D.objective}`,v=!!D.branchObjective;v&&!l.current.has(M)&&(l.current.add(M),a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsx)(st,{step:{...D,children:void 0}})})));for(let U of D.children??[]){let J=`child-${D.index}-${U.index}-${U.objective}`;l.current.has(J)||(U.status==="passed"||U.status==="failed"||U.status==="stopped")&&(l.current.add(J),a((0,V.jsx)(p,{marginLeft:4,children:(0,V.jsx)(st,{step:U})})))}!v&&!l.current.has(M)&&(D.status==="passed"||D.status==="failed"||D.status==="stopped")&&(l.current.add(M),a((0,V.jsx)(p,{marginLeft:2,children:(0,V.jsx)(st,{step:{...D,children:void 0}})})))}},[o,a,e,t,n]);let xe=[];if(a)if(e)for(let D of o){let v=(D.children??[]).filter(U=>{let J=`${U.index}-${U.objective}`;return!l.current.has(J)});v.length>0&&xe.push({...D,children:v})}else for(let D of o){let M=`${D.index}-${D.objective}`,v=l.current.has(M),U=(D.children??[]).filter(J=>{let G=`child-${D.index}-${J.index}-${J.objective}`;return!l.current.has(G)});v?U.length>0&&xe.push({...D,children:U}):xe.push({...D,children:U})}else if(i){if(!e)for(let D of o)ne.current.has(D.index)||xe.push(D)}if(!i){let D=a?xe:o;return(0,V.jsxs)(p,{flexDirection:"column",children:[e?a?D.length>0?(0,V.jsx)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:D.map((v,U)=>(0,V.jsx)(p,{flexDirection:"column",marginTop:U>0?1:0,children:v.children&&v.children.length>0?v.children.map(J=>(0,V.jsx)(st,{step:J},`f${U}-${J.index}`)):v.status==="pending"&&(0,V.jsx)(d,{color:f.dimmed,children:" \u25CB Waiting..."})},U))}):null:(0,V.jsx)(ro,{steps:o,flows:t,cmInitCounts:n,renderStep:(v,U)=>(0,V.jsx)(st,{step:v},U)}):(0,V.jsxs)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[!a&&n&&n[0]!=null&&(0,V.jsxs)(d,{color:f.dimmed,children:["\u25AA Generated task with ",n[0]," checkpoints"]}),D.map(v=>{let U=`${v.index}-${v.objective}`;return a&&l.current.has(U)?(0,V.jsx)(p,{flexDirection:"column",children:(v.children??[]).map(J=>(0,V.jsx)(p,{marginLeft:2,children:(0,V.jsx)(st,{step:J})},J.index))},`branch-children-${v.index}`):(0,V.jsx)(st,{step:v},v.index)})]}),h&&(0,V.jsx)(Qn,{currentStep:k,maxSteps:r,elapsed:C,status:T})]})}return e?(0,V.jsxs)(p,{flexDirection:"column",children:[(0,V.jsx)(ro,{steps:o,flows:t,cmInitCounts:n,renderStep:(D,M)=>(0,V.jsx)(st,{step:D},M)}),h&&(0,V.jsx)(Qn,{currentStep:k,maxSteps:r,elapsed:C,status:T})]}):(0,V.jsxs)(p,{flexDirection:"column",children:[(0,V.jsx)(Jt,{items:ae,children:D=>D.type==="cm_init"?(0,V.jsx)(p,{marginLeft:2,paddingLeft:1,children:(0,V.jsxs)(d,{color:f.dimmed,children:["\u25AA Generated task with ",D.count," checkpoints"]})},D.key):D.type==="bifurcation_header"?(0,V.jsx)(p,{marginLeft:2,paddingLeft:1,children:(0,V.jsxs)(d,{color:f.dimmed,children:["\u2501\u2501 Bifurcated into ",D.flowCount," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]})},D.key):D.type==="flow_header"?(0,V.jsxs)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,V.jsxs)(d,{color:f.purple,children:["Flow ",D.flowIdx+1,": ",D.label]}),D.cmCount!=null&&(0,V.jsxs)(d,{color:f.dimmed,children:[" \u25AA Generated task with ",D.cmCount," checkpoints"]})]},D.key):(0,V.jsx)(p,{marginLeft:2,paddingLeft:1,children:(0,V.jsx)(st,{step:D.step})},D.key)}),xe.length>0&&(0,V.jsx)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:xe.map(D=>(0,V.jsx)(st,{step:D},D.index))}),h&&(0,V.jsx)(Qn,{currentStep:k,maxSteps:r,elapsed:C,status:T})]})}var oo=K(Fe(),1);var er=K(Z(),1),Si=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function tr({label:o,hasBifurcation:e=!1}){let[t,n]=(0,oo.useState)(0),[r,i]=(0,oo.useState)(0);Rt(()=>{n(l=>(l+1)%Si.length)},80),Rt(()=>{i(l=>(l+1)%4)},400);let a=o??(e?"Planning approach":"Analyzing objective");return(0,er.jsxs)(p,{marginLeft:1,children:[(0,er.jsxs)(d,{color:f.primary,children:[Si[t]," "]}),(0,er.jsxs)(d,{color:f.dim,children:[a,".".repeat(r+1)]})]})}function nr(o){if(!o.isRunning)return null;let e=o.bifurcationInfo;if(e&&!e.isSingleFlow){let t=o.steps.findIndex(r=>r.status==="running");return(t===-1?o.cmInitCounts.length===0:t>=o.cmInitCounts.length)?{label:t>0?`Planning flow ${t+1}`:void 0,hasBifurcation:!0}:null}return o.cmInitCounts.length>0||o.steps.some(t=>t.children?.length)?null:{hasBifurcation:!!e}}var pt=K(Fe(),1);var We=K(Z(),1);function qs(o,e){let t=[],r=Math.max(e-4,30);t.push({type:"title",text:o.title});for(let i=0;i<o.sections.length;i++){let a=o.sections[i];i>0&&t.push({type:"divider",text:"\u2500".repeat(r)}),a.label&&t.push({type:"header",text:a.label});let l=a.entries.length>0?Math.max(...a.entries.map(c=>c.key.length)):0;for(let c of a.entries){let s="\xB7".repeat(Math.max(2,l-c.key.length+3)),u=`${c.key} ${s} ${c.value}`;t.push({type:"entry",text:u,color:c.color})}}return t.push({type:"footer",text:"esc back"}),t}function Ei({data:o,width:e=60}){let t=qs(o,e);return(0,We.jsx)(p,{flexDirection:"column",borderStyle:"round",borderColor:f.primary,paddingX:2,paddingY:1,children:t.map((n,r)=>{if(n.type==="title")return(0,We.jsx)(d,{color:f.primary,bold:!0,children:n.text},r);if(n.type==="header")return(0,We.jsx)(p,{marginTop:1,children:(0,We.jsx)(d,{color:f.dim,children:n.text})},r);if(n.type==="divider")return(0,We.jsx)(p,{marginTop:1,marginBottom:0,children:(0,We.jsx)(d,{color:f.ambient,children:n.text})},r);if(n.type==="footer")return(0,We.jsx)(p,{marginTop:1,children:(0,We.jsx)(d,{color:f.dim,children:n.text})},r);let i=n.text.match(/^(.+?) (·+) (.+)$/);return i?(0,We.jsxs)(d,{children:[(0,We.jsxs)(d,{color:f.secondary,children:[i[1]," "]}),(0,We.jsxs)(d,{color:f.ambient,children:[i[2]," "]}),(0,We.jsx)(d,{color:n.color??f.base,children:i[3]})]},r):(0,We.jsx)(d,{color:n.color??f.base,children:n.text},r)})})}var je=K(Z(),1);function io(o,e){let t=[];function n(r,i){for(let a of r)t.push({item:a,depth:i}),a.type==="submenu"&&a.children&&e.length>i&&e[i]===a.id&&n(a.children,i+1)}return n(o,0),t}function so({items:o,onRunSelected:e,initialExpandedPath:t,onDismiss:n,renderLoginWizard:r,renderProfilesView:i,renderChromeProfilePicker:a,renderProjectPicker:l,renderFolderPicker:c,renderWindowSizePicker:s,onActiveViewChange:u}){let[m,b]=(0,pt.useState)(()=>{let T=t??[],O=io(o,T),C=0;if(T.length>0){let L=O.findIndex(ne=>ne.item.id===T[0]);L>=0&&L+1<O.length&&(C=L+1)}return{expandedPath:T,selectedIndex:C,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),E=io(o,m.expandedPath),h=E[m.selectedIndex]?.item,_=(0,pt.useRef)(null),I=(0,pt.useCallback)(T=>{b(O=>({...O,feedback:T})),_.current&&clearTimeout(_.current),_.current=setTimeout(()=>{b(O=>({...O,feedback:null})),_.current=null},4e3)},[]);(0,pt.useEffect)(()=>()=>{_.current&&clearTimeout(_.current)},[]),(0,pt.useEffect)(()=>{u?.(m.activeView)},[m.activeView,u]);let k=(0,pt.useCallback)(()=>{b(T=>({...T,activeView:null,infoData:null}))},[]);return it((T,O)=>{if(m.activeView==="infoView"){O.escape&&k();return}if(!(m.activeView==="loginWizard"||m.activeView==="profilesView"||m.activeView==="chromeProfilePicker"||m.activeView==="projectPicker"||m.activeView==="folderPicker"||m.activeView==="windowSizePicker")){if(m.isEditing){if(O.escape){b(C=>({...C,isEditing:!1,inputValue:""}));return}if(O.return){let C=m.inputValue.trim();if(h?.onValue&&C){let L=h.currentValue;h.onValue(C),I(L?`${h.label}: ${L} \u2192 ${C}`:`${h.label}: ${C}`)}b(L=>({...L,isEditing:!1,inputValue:""}));return}if(O.backspace||O.delete){b(C=>({...C,inputValue:C.inputValue.slice(0,-1)}));return}T&&!O.ctrl&&!O.meta&&b(C=>({...C,inputValue:C.inputValue+T}));return}if(m.isSelecting&&h?.options){let C=h.options;if(O.escape){b(L=>({...L,isSelecting:!1}));return}if(O.upArrow){b(L=>({...L,inputValue:String(Math.max(0,Number(L.inputValue||"0")-1))}));return}if(O.downArrow){b(L=>({...L,inputValue:String(Math.min(C.length-1,Number(L.inputValue||"0")+1))}));return}if(O.return){let L=Number(m.inputValue||"0"),ne=C[L];if(ne&&h.onValue){let ae=h.currentValue;h.onValue(ne.value),I(ae?`${h.label}: ${ae} \u2192 ${ne.label}`:`${h.label}: ${ne.label}`)}b(ae=>({...ae,isSelecting:!1,inputValue:""}));return}return}if(O.upArrow){b(C=>({...C,selectedIndex:Math.max(0,C.selectedIndex-1)}));return}if(O.downArrow){b(C=>({...C,selectedIndex:Math.min(E.length-1,C.selectedIndex+1)}));return}if(O.escape){if(m.expandedPath.length===0){n?.();return}b(C=>{let L=C.expandedPath.slice(0,-1),ne=io(o,L),ae=C.expandedPath[C.expandedPath.length-1],le=ne.findIndex(he=>he.item.id===ae);return{...C,expandedPath:L,selectedIndex:le>=0?le:0}});return}if(O.return&&h){if(h.id==="run-start"){e();return}if(h.type==="submenu"){let C=E[m.selectedIndex]?.depth??0;b(L=>({...L,expandedPath:[...L.expandedPath.slice(0,C),h.id],selectedIndex:L.selectedIndex+1}));return}if(h.onInfo){let C=h.onInfo();b(L=>({...L,activeView:"infoView",infoData:C}));return}if(h.onLoginWizard){h.onLoginWizard(),b(C=>({...C,activeView:"loginWizard"}));return}if(h.onProfilesView){h.onProfilesView(),b(C=>({...C,activeView:"profilesView"}));return}if(h.onChromeProfilePicker){h.onChromeProfilePicker(),b(C=>({...C,activeView:"chromeProfilePicker"}));return}if(h.onProjectPicker){h.onProjectPicker(),b(C=>({...C,activeView:"projectPicker"}));return}if(h.onFolderPicker){h.onFolderPicker(),b(C=>({...C,activeView:"folderPicker"}));return}if(h.onWindowSizePicker){h.onWindowSizePicker(),b(C=>({...C,activeView:"windowSizePicker"}));return}if(h.type==="action"){h.onAction?.(),h.suppressFeedback||I(`${h.label} done`);return}if(h.type==="select"&&h.options){let C=h.options.findIndex(L=>L.value===h.currentValue);b(L=>({...L,isSelecting:!0,inputValue:String(Math.max(0,C))}));return}if(h.type==="text-input"){b(C=>({...C,isEditing:!0,inputValue:h.currentValue??""}));return}}}}),(0,je.jsx)(p,{flexDirection:"column",paddingX:1,children:m.activeView==="infoView"&&m.infoData?(0,je.jsx)(Ei,{data:m.infoData}):m.activeView==="loginWizard"&&r?r(k):m.activeView==="profilesView"&&i?i(k):m.activeView==="chromeProfilePicker"&&a?a(k):m.activeView==="projectPicker"&&l?l(k):m.activeView==="folderPicker"&&c?c(k):m.activeView==="windowSizePicker"&&s?s(k):(0,je.jsxs)(je.Fragment,{children:[E.map(({item:T,depth:O},C)=>{let L=C===m.selectedIndex,ne=" ".repeat(O),ae=L?"\u276F ":" ",le=T.type==="submenu"?m.expandedPath.includes(T.id)?"\u25BC ":"\u25B6 ":" ",he=T.currentValue!=null?` [${T.currentValue}]`:"";if(L&&m.isSelecting&&T.options){let xe=Number(m.inputValue||"0");return(0,je.jsxs)(p,{flexDirection:"column",children:[(0,je.jsxs)(d,{color:f.cyan,children:[ne,ae,le,T.label]}),T.options.map((D,M)=>(0,je.jsxs)(d,{color:M===xe?f.cyan:void 0,children:[ne," ",M===xe?"\u276F ":" ",D.label]},D.value))]},T.id)}return L&&m.isEditing?(0,je.jsxs)(d,{color:f.cyan,children:[ne,ae,le,T.label,": ",m.inputValue,(0,je.jsx)(d,{color:f.dimmed,children:"\u2588"})]},T.id):(0,je.jsxs)(d,{color:L?f.cyan:void 0,dimColor:!L&&O>0,children:[ne,ae,le,T.label,(0,je.jsx)(d,{dimColor:!0,children:he})]},T.id)}),m.feedback&&(0,je.jsx)(p,{marginTop:1,children:(0,je.jsxs)(d,{color:f.green,children:["\u2713 ",m.feedback]})}),(0,je.jsx)(Yt,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],escBackLabel:"back"})]})})}var wn=K(Fe(),1);var $e=K(Z(),1),ao=800,lo=3840,co=600,uo=2160;function Ci(o,e){if(!e)return"Enter a value";let t=Number(e);if(!Number.isInteger(t))return"Must be a whole number";if(o==="width"){if(t<ao)return`Min ${ao}`;if(t>lo)return`Max ${lo}`}else{if(t<co)return`Min ${co}`;if(t>uo)return`Max ${uo}`}return null}function fo({currentWidth:o,currentHeight:e,onSelect:t,onCancel:n}){let[r,i]=(0,wn.useState)("width"),[a,l]=(0,wn.useState)(String(o)),[c,s]=(0,wn.useState)(String(e)),[u,m]=(0,wn.useState)(null);it((E,h)=>{if(h.escape){n();return}if(h.tab||h.rightArrow||h.leftArrow){i(_=>_==="width"?"height":"width"),m(null);return}if(h.return){let _=Ci("width",a);if(_){i("width"),m(`Width: ${_}`);return}let I=Ci("height",c);if(I){i("height"),m(`Height: ${I}`);return}t(Number(a),Number(c));return}if(h.backspace||h.delete){r==="width"?l(_=>_.slice(0,-1)):s(_=>_.slice(0,-1)),m(null);return}E&&/^\d$/.test(E)&&(r==="width"?l(_=>_+E):s(_=>_+E),m(null))});let b=(E,h,_)=>{let I=r===_,k=I?f.primary:f.secondary;return(0,$e.jsxs)(p,{flexDirection:"column",children:[(0,$e.jsxs)(d,{color:f.dim,children:[" ",E]}),(0,$e.jsx)(p,{borderStyle:"round",borderColor:k,paddingX:1,width:10,children:(0,$e.jsxs)(d,{color:I?f.base:f.dim,children:[h||" ",I?(0,$e.jsx)(d,{color:f.dimmed,children:"\u2588"}):""]})}),(0,$e.jsxs)(d,{color:f.dim,dimColor:!0,children:[" ",_==="width"?`${ao}\u2013${lo}`:`${co}\u2013${uo}`]})]})};return(0,$e.jsxs)(p,{flexDirection:"column",paddingX:1,children:[(0,$e.jsx)(d,{color:f.primary,bold:!0,children:"Window Size"}),(0,$e.jsxs)(p,{marginTop:1,gap:1,children:[b("Width",a,"width"),(0,$e.jsx)(p,{alignItems:"center",marginTop:1,children:(0,$e.jsx)(d,{color:f.dim,children:"x"})}),b("Height",c,"height")]}),u&&(0,$e.jsx)(p,{marginTop:1,children:(0,$e.jsx)(d,{color:f.red,children:u})}),(0,$e.jsx)(Yt,{bindings:[{keys:"tab/\u2190\u2192",label:"switch field"},{keys:"\u21B5",label:"save"}],escBackLabel:"cancel"})]})}import{dirname as zs,join as Js}from"path";function yn(o,e,t){let n=o.total_runs??1,r=o.run_dir,i,a;if(n>1&&r){let l=zs(r);i=Array.from({length:n},(c,s)=>Js(l,String(e+s))),t&&t.length===n&&(a=t)}return{allRunDirs:i,flowObjectives:a}}function _n(o,e,t,n){return{index:t,objective:e,summary:o.summary,oneLiner:o.one_liner,status:o.status,resultCode:o.result_code,reasonCode:o.reason_code,perFlowMetadata:o.per_flow_metadata,context:o.context??{memory:{},variables:{},pointer:""},run_dir:o.run_dir,run_dirs:n.allRunDirs,flow_objectives:n.flowObjectives}}var Le=K(Fe(),1);async function rr(o){let e=o.credentials.expires_at,t=o.thresholdSeconds??300;if(e-Date.now()/1e3>=t)return null;let n=o.creds.loadClient(o.profile,o.env);if(!n)return null;let i=await new Wn(o.env).refreshToken(o.credentials.refresh_token,n.client_id),a=Math.floor(Date.now()/1e3)+i.expires_in;return o.creds.saveCredentials(o.profile,o.env,{access_token:i.access_token,refresh_token:i.refresh_token,expires_at:a,scope:i.scope}),{accessToken:i.access_token,refreshToken:i.refresh_token,expiresAt:a,scope:i.scope}}async function or(o,e,t){let n=o.loadCredentials(e,t),r=o.loadClient(e,t);if(n&&r){let a=new Wn(t);await Promise.allSettled([a.revokeToken(n.access_token,r.client_id,"access_token"),a.revokeToken(n.refresh_token,r.client_id,"refresh_token")])}o.deleteProfileFull(e,t);let i=o.listProfiles();return i.length>0&&(o.setActiveProfile(i[0].profile),o.setDefaultEnv(i[0].env)),{profile:e,env:t,switchedTo:i.length>0?i[0]:void 0}}function Ri(){let[o]=(0,Le.useState)(()=>new tt),[e,t]=(0,Le.useState)(()=>{let h=o.resolveAuth();if(!h)return!1;if(h.method==="basic")return!0;let{credentials:_}=o.getActiveCredentials();return _?_.expires_at>Date.now()/1e3:!1}),n=(0,Le.useRef)(null),r=(0,Le.useRef)(null),i=(0,Le.useCallback)(()=>{let h=o.resolveAuth();return h?{method:h.method,profile:h.profile,env:h.env}:null},[o]),a=(0,Le.useCallback)(async()=>{let{credentials:h,profile:_,env:I}=o.getActiveCredentials();if(!h||!_||!I)return null;let k=h.expires_at,T=Date.now()/1e3;if(k-T<300){if(r.current)return r.current;let O=(async()=>{try{let C=await rr({creds:o,profile:_,env:I,credentials:h});return C?(t(!0),C.accessToken):null}catch{return t(!1),null}finally{r.current=null}})();return r.current=O,O}return t(!0),h.access_token},[o]),l=(0,Le.useCallback)(()=>{let h=o.resolveAuth();return!h||h.method!=="basic"?null:{username:h.username,access_key:h.access_key}},[o]),c=(0,Le.useCallback)((h,_)=>{n.current?.revoke();let I=ce(h),k=l(),T=new en(I.controllerBaseUrl,a,k,_);return n.current=T,T},[l,a]),s=(0,Le.useCallback)(()=>n.current,[]),u=(0,Le.useCallback)(()=>{let h=l();if(h)return h;let _=n.current?.cached;return _?{username:_.username,access_key:_.access_key}:null},[l]),m=(0,Le.useCallback)(async()=>{let h=n.current;return h?h.resolve():null},[]),b=(0,Le.useCallback)(async(h="default")=>{let _=o.getDefaultEnv();await new Kn(h,_,o).login(),o.setActiveProfile(h);try{let k=new qe;Ue(o,k,h,_)}catch{}t(!0)},[o]),E=(0,Le.useCallback)(async()=>{let h=o.getActiveProfile();if(!h)return null;let _=o.getDefaultEnv(),I=await or(o,h,_);return t(!1),{profile:I.profile,env:I.env}},[o]);return{creds:o,tokenValid:e,setTokenValid:t,getToken:a,getBasicAuth:l,getAuthInfo:i,login:b,logout:E,initResolver:c,getResolver:s,getResolvedBasicAuth:u,resolveBasicAuth:m}}var xt=K(Fe(),1);import{spawn as ki,spawnSync as Xs}from"child_process";import{existsSync as mo}from"fs";import{createConnection as Ys}from"net";import{homedir as Sn,platform as Cn}from"os";import{join as En}from"path";var Qs=new Set(["1","true","yes"]),nn=class extends Error{constructor(e){super(e),this.name="ChromeNotFoundError"}};function sr(o){return o instanceof nn?o.message:`Chrome failed: ${o instanceof Error?o.message:String(o)}`}var ir={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",En(Sn(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",En(Sn(),"Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing"),"/Applications/Chromium.app/Contents/MacOS/Chromium"],linux:["/usr/bin/google-chrome","/usr/bin/google-chrome-stable","/usr/bin/google-chrome-for-testing","/usr/local/bin/google-chrome-for-testing",En(Sn(),"chrome-for-testing/chrome-linux64/chrome"),"/usr/bin/chromium","/usr/bin/chromium-browser","/snap/bin/chromium"],win32:["C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",En(Sn(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",En(Sn(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function Zs(){if(process.env.KANE_CLI_CHROME_PATH)return process.env.KANE_CLI_CHROME_PATH;let o=Cn(),e=ir[o]??ir.linux;for(let t of e)if(mo(t))return t;return o==="win32"?"chrome.exe":"google-chrome"}function ea(){if(process.env.KANE_CLI_CHROME_PATH)return mo(process.env.KANE_CLI_CHROME_PATH);let o=Cn();if((ir[o]??ir.linux).some(r=>mo(r)))return!0;let t=o==="win32"?"chrome.exe":"google-chrome",n=o==="win32"?"where":"which";try{return Xs(n,[t],{stdio:"ignore"}).status===0}catch{return!1}}function ta(){let o=Cn();return o==="darwin"?["Google Chrome is required but was not found at any standard path.","","Install via Homebrew (recommended):"," brew install --cask google-chrome","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
25
|
+
`):o==="linux"?["Google Chrome is required but was not found at /usr/bin/google-chrome.","(amd64 / x86_64 only \u2014 Google does not ship Chrome for Linux ARM.)","","Debian / Ubuntu (any version):"," wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb"," sudo apt install -y ./google-chrome-stable_current_amd64.deb","","Fedora / RHEL / AlmaLinux / Rocky:"," sudo dnf install -y https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm","","Then re-run your command. Set KANE_CLI_CHROME_PATH=/path/to/chrome","to point at a non-standard install."].join(`
|
|
26
|
+
`):o==="win32"?["Google Chrome is required but was not found in Program Files or AppData.","","Install via winget (Windows 10 1809+):"," winget install --id Google.Chrome -e --silent","","Or download:"," https://www.google.com/chrome/","","Then re-run your command. Set KANE_CLI_CHROME_PATH=C:\\path\\to\\chrome.exe","to point at a non-standard install."].join(`
|
|
43
27
|
`):["Google Chrome is required.","Install from https://www.google.com/chrome/","(Note: no official Chrome builds for BSD or Alpine/musl Linux.)"].join(`
|
|
44
|
-
`)}function
|
|
45
|
-
`);let a=1e5,l="";
|
|
46
|
-
`)}catch{}},sendCancel(
|
|
47
|
-
`)}catch{}},cancel(){
|
|
48
|
-
`)}catch{}}let a=null;
|
|
49
|
-
`))}
|
|
50
|
-
`)),
|
|
51
|
-
`).map(e=>e.replace(/^[-–•]\s*/,"").trim()).filter(e=>e.length>0)}function sn({status:s,summary:e,duration:t,steps:n,stepsPassed:r,stepsFailed:o,reason:a,creditsConsumed:l}){let i=s==="passed",c=i?v.green:v.red,d=i?"\u2713":"\u2717",m=s.toUpperCase(),g=r??(i?n:Math.max(0,n-1)),p=o??(i?0:1),_=p>0?`${n} steps (${g} passed, ${p} failed)`:`${n} steps`,b=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,E=xa(e);return(0,ze.jsx)(y,{flexDirection:"column",marginTop:1,children:(0,ze.jsxs)(y,{borderStyle:"round",borderColor:c,flexDirection:"column",paddingX:2,paddingY:1,width:ba+6,children:[(0,ze.jsxs)(y,{flexDirection:"column",children:[(0,ze.jsxs)(f,{bold:!0,color:c,children:[d," ",m]}),(0,ze.jsxs)(f,{color:v.dimmed,wrap:"wrap",children:[_," \xB7 ",b,typeof l=="number"&&l>0?` \xB7 ${parseFloat(l.toFixed(4))} credits`:""]})]}),E.length>0&&(0,ze.jsx)(y,{flexDirection:"column",marginTop:1,marginLeft:1,children:E.map((A,P)=>(0,ze.jsxs)(y,{marginBottom:P<E.length-1?1:0,children:[(0,ze.jsx)(f,{color:v.primary,children:"\u25CF "}),(0,ze.jsx)(y,{flexShrink:1,children:(0,ze.jsx)(f,{wrap:"wrap",children:A})})]},P))}),a&&!i&&(0,ze.jsx)(y,{marginTop:1,children:(0,ze.jsxs)(f,{color:v.red,wrap:"wrap",children:["Reason: ",a]})})]})})}var jt=U(Q(),1);function fo({flows:s,filterIndex:e}){let t=e!==void 0?s.filter(n=>n.index===e):s;return t.length===0?null:(0,jt.jsx)(y,{flexDirection:"column",children:t.map(n=>(0,jt.jsxs)(y,{flexDirection:"column",marginTop:1,children:[(0,jt.jsxs)(y,{marginLeft:1,children:[(0,jt.jsx)(f,{color:"#b388ff",bold:!0,children:"Flow "+n.index+": "}),(0,jt.jsx)(f,{color:"#b388ff",children:n.objective})]}),(0,jt.jsx)(sn,{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 wa=null;function Os(s){wa=s}import{readFileSync as ya,existsSync as Sa}from"fs";function an(s){if(!Sa(s))return null;try{return ya(s,"utf-8").trim()||null}catch{return null}}import{join as ut}from"path";var lr=U(Q(),1);function Ds({status:s,steps:e,duration:t,creditsConsumed:n,reason:r}){let o=s==="passed",a=o?v.green:v.red,l=o?"\u2713":"\u2717",i=o?"Passed":"Failed",c=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,d=typeof n=="number"&&n>0?` \xB7 ${n.toFixed(4)} credits`:"",m=!o&&r?` \xB7 ${r}`:"";return(0,lr.jsxs)(y,{children:[(0,lr.jsxs)(f,{bold:!0,color:a,children:[l," ",i]}),(0,lr.jsxs)(f,{color:v.dimmed,children:[" ","\xB7 ",e," steps \xB7 ",c,d,m]})]})}var Ls=U(Q(),1);function js(){return(0,Ls.jsx)(f,{color:v.dimmed,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}function $s(s,e,t){return`${s}/projects/${e}/test-cases/${t}`}function Kt(s,e,t,n){return`${$s(s,e,t)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function An(s,e,t){return`${$s(s,e,t)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{readFileSync as Bs,readdirSync as Vs,existsSync as Gt}from"fs";import{join as yt}from"path";function cr(s,e,t,n,r,o){try{let a=yt(s,"runs",String(e),"run-test");if(!Gt(a)){r("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:t,reason:"runsDir_not_found",path:a});return}let l=a;if(o){let b=yt(a,`child-${o}`);if(!Gt(b)){r("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:t,child_id:o,reason:"child_dir_not_found",path:b});return}let E=Vs(b).filter(A=>Gt(yt(b,A,"screenshots")));if(E.length===0){r("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:t,child_id:o,reason:"no_child_screenshots_dir"});return}l=yt(b,E[0])}else if(!Gt(yt(a,"screenshots"))){let b=Vs(a).filter(E=>Gt(yt(a,E,"screenshots")));if(b.length===0){r("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:t,reason:"no_screenshots_dir"});return}l=yt(a,b[0])}let i=yt(l,"screenshots",`step_${String(t).padStart(3,"0")}.png`);if(!Gt(i)){r("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:t,child_id:o,reason:"screenshot_not_found",path:i});return}let c=yt(a,"actions.ndjson");if(!Gt(c)){r("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:t,reason:"ndjson_not_found"});return}let d=Bs(c,"utf-8").trim().split(`
|
|
52
|
-
`),m=
|
|
53
|
-
`)}return t}function Ms(s){if(!Us(s))throw new Error(`Variables file not found: ${s}`);let e=Ns(s,"utf-8"),t=JSON.parse(e),n={};if(t&&typeof t=="object"){for(let[r,o]of Object.entries(t))if(o&&typeof o=="object"&&"value"in o){let a=o;n[r]={value:a.value,secret:a.secret??!1,syntax:a.syntax??`{{${r}}}`}}}return n}function Hs(s){let e;try{e=JSON.parse(s)}catch{throw new Error("Invalid --variables JSON")}let t={};if(e&&typeof e=="object"){for(let[n,r]of Object.entries(e))if(r&&typeof r=="object"&&"value"in r){let o=r;t[n]={value:o.value,secret:o.secret??!1,syntax:o.syntax??`{{${n}}}`}}}return t}function Ws(s,e,t){let n=Fs(s,t),r=Fs(e,t);return{...n,...r}}function Ks(s,e){let t={},n={},r=e;for(let[o,a]of Object.entries(s))if(a.secret){let l=`secrets.user.${o}`;t[l]={value:a.value,secret:!0,syntax:`{{secrets.user.${o}}}`,type:"secret"},n[o]=l,r=r.replaceAll(`{{${o}}}`,`{{secrets.user.${o}}}`)}else{let l=`global.${o}`;t[l]={value:a.value,secret:!1,syntax:`{{global.${o}}}`,type:"global"},n[o]=l,r=r.replaceAll(`{{${o}}}`,`{{global.${o}}}`)}return{variables:t,objective:r,keyMap:n}}var ur=class{constructor(e){this.baseUrl=e}async pushSecret(e){let t=Mo(e.username,e.accessKey),n=await fetch(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:t,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:e.secretKey,secretValue:e.secretValue,orgId:e.orgId,username:e.username,scope:"user",type:"user",accessKey:e.accessKey})});if(!n.ok)throw new Error(`Push secret failed: ${n.status} ${await n.text()}`)}static extractVariableKeys(e){let t=e.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),n=new Set;for(let r of t)n.add(r[1]);return[...n]}};var dr=class extends Ho{constructor(e,t,n){super(e,{username:t,accessKey:n})}async upsertVariable(e){let t=e.environmentId??0,n=await fetch(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:e.name,value:String(e.value),type:"variable",value_type:"string",is_persist:e.isPersist??!1,environment_id:t})});if(n.ok)return{id:(await n.json()).id??0};if(n.status!==409&&n.status!==422)return{id:0};if(!(await fetch(`${this.baseUrl}/v1/variables/name/${encodeURIComponent(e.name)}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(e.value),value_type:"string",type:"variable",environment_id:t})})).ok)return{id:0};let o=await fetch(`${this.baseUrl}/v1/variables/${encodeURIComponent(e.name)}?environment_id=${t}`,{method:"GET",headers:this.headers()});return o.ok?{id:(await o.json()).data?.id??0}:{id:0}}};function fr(s){let e=Ws(s.globalDir,s.localDir,s.onLoadError),t=s.file?Ms(s.file):{},n=s.inline?Hs(s.inline):{},r={...e,...t,...n},o=Object.keys(r).length>0,{variables:a,objective:l}=o?Ks(r,s.objective):{variables:{},objective:s.objective},i=Object.entries(r).filter(([,d])=>d.secret),c=Object.entries(r).filter(([,d])=>!d.secret);return{raw:r,auteur:a,auteurObjective:l,secretEntries:i,nonSecretEntries:c}}async function mr(s){if(s.localMode)return{};let e=ae(s.env);if(s.variables.secretEntries.length>0){let n=new ur(e.secretsBaseUrl);for(let[r,o]of s.variables.secretEntries)n.pushSecret({secretKey:r,secretValue:o.value,username:s.auth.username,accessKey:s.auth.access_key,orgId:s.orgId}).then(()=>s.log("info","SECRET_PUSH_OK","Secret pushed",{key:r})).catch(a=>s.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:r,error:String(a)}))}let t={};if(s.variables.nonSecretEntries.length>0){let n=new dr(e.tmsBaseUrl,s.auth.username,s.auth.access_key);for(let[r,o]of s.variables.nonSecretEntries)try{let a=await n.upsertVariable({name:r,value:o.value});t[r]=a.id,s.log("info","VAR_PUSH_OK","Variable pushed",{name:r,id:a.id})}catch(a){s.log("error","VAR_PUSH_FAILED","Variable push failed",{name:r,error:String(a)})}}return t}function pr(s){let e={objective:s.objective,model:s.model,width:s.windowSize.width,height:s.windowSize.height,session_id:s.sessionId,run_index:s.runIndex,stream:!0,max_steps:s.maxSteps??30,headless:s.headless??!1};return s.url&&(e.url=s.url),s.chrome.wsEndpoint?e.ws_endpoint=s.chrome.wsEndpoint:s.chrome.cdpEndpoint&&(e.cdp_endpoint=s.chrome.cdpEndpoint),s.auth.basicAuth?(e.username=s.auth.basicAuth.username,e.access_key=s.auth.basicAuth.access_key):s.auth.token&&(e.auth={type:"bearer",token:s.auth.token}),s.disableAskUser&&(e.disable_ask_user=!0),s.enableTaskSkills&&(e.enable_task_skills=!0),s.variables&&Object.keys(s.variables).length>0&&(e.variables=s.variables),s.globalContext&&(e.global_context=s.globalContext),s.localContext&&(e.local_context=s.localContext),s.sessionContext&&(e.session_context=s.sessionContext),e}function Tn(s){let e=ae(s.env),{session:t,auth:n}=s,r=n.basicAuth?{username:n.basicAuth.username,accessKey:n.basicAuth.access_key}:n.token,o=n.resolvedCreds?.username??n.basicAuth?.username??"",a=n.resolvedCreds?.access_key??n.basicAuth?.access_key??"",l=n.resolvedCreds?.org_id??0,i=n.resolvedCreds?.user_id??0,c=[];for(let _ of Object.keys(t.auteurVariables))_.startsWith("secrets.user.")&&c.push({key_name:_.replace("secrets.user.",""),scope:"user"});let m=t.getContext().prior_runs.map(_=>_.status),g=t.auteurVariables,p=Object.keys(g).length>0;return{controllerBaseUrl:e.controllerBaseUrl,tmsBaseUrl:e.tmsBaseUrl,auth:r,authResolver:n.resolver,sessionId:t.sessionId,sessionDir:t.sessionDir,testId:t.testId,commitId:t.sessionId,projectId:s.projectId,folderId:s.folderId,firstObjective:t.firstObjective??"KaneAI Test",firstUrl:t.firstUrl??"",runDirs:t.getRunDirs(),runObjectives:t.getRunObjectives(),runMetadata:t.getRunMetadata(),startedAt:t.startedAt,endedAt:new Date().toISOString(),totalSteps:s.totalSteps,totalDuration:s.totalDuration,runStatuses:m,orgId:l,userId:i,tmsUsername:o,tmsAccessKey:a,screenshotBaseUrl:t.screenshotBaseUrl,shareApiBaseUrl:e.shareApiBaseUrl,variables:p?g:void 0,variableIds:s.variableIds,secrets:c,codeExport:s.codeExport,onProgress:s.onProgress,log:s.log}}var Gs=["python"];function Aa(s){if(s!==void 0){if(!Gs.includes(s))throw new Error(`--code-language must be one of: ${Gs.join(", ")} (got "${s}")`);return s}}function kn(s,e){let t=Aa(s.codeLanguage);return{enabled:s.codeExport??e.enabled,language:t??e.language,skipValidation:s.skipCodeValidation??e.skip_validation}}async function gr(s){try{let t=await new lt(s.tmsBaseUrl,s.auth.username,s.auth.access_key).createAtmTest({objective:s.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:s.hasCustomProfile,testURL:s.url,project_id:s.projectId,folder_id:s.folderId,authoring_version:4});return s.log("info","ATM_CREATE_OK","Test created",{test_id:t}),t}catch(e){return s.log("error","ATM_CREATE_FAILED","Test creation failed",{error:e instanceof Error?e.message:String(e)}),null}}async function hr(s){await new lt(s.tmsBaseUrl,s.username,s.accessKey).submitFeedback({instruction_id:"",test_id:s.testId,feedback_type:s.feedbackType,mode:s.mode??"human",...s.details?{details:s.details}:{}}),s.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:s.feedbackType})}var j=U(Q(),1);function qs({localMode:s=!1,codeExport:e,codeLanguage:t,skipCodeValidation:n,updatePromise:r}={}){Zt();let o=(0,$.useRef)(new bt),[a,l]=(0,$.useState)(0),i=o.current,[c]=(0,$.useState)(()=>new ot),d=(0,$.useRef)(0),m=(0,$.useCallback)(()=>`msg-${++d.current}`,[]),[g,p]=(0,$.useState)(!1),[_,b]=(0,$.useState)(null),[E,A]=(0,$.useState)(!1),[P,C]=(0,$.useState)(0),[O,te]=(0,$.useState)(!1),[Z,ne]=(0,$.useState)(null),[_e,F]=(0,$.useState)(null),N=(0,$.useRef)(null),[u,x]=(0,$.useState)(null),[h,I]=(0,$.useState)(Bn()),[B,D]=(0,$.useState)(null),[J,re]=(0,$.useState)([]),[ee,Ie]=(0,$.useState)(!1),[me,Re]=(0,$.useState)(!1),$e=(0,$.useRef)(null),et=(0,$.useRef)(0),Et=(0,$.useRef)(""),yr=(0,$.useRef)(null),$t=(0,$.useRef)(null),Bt=(0,$.useRef)({}),M=(0,$.useRef)(null),ie=(0,$.useRef)(0),[oe,ge]=(0,$.useState)([]),ue=(0,$.useCallback)(S=>{let R=`s-${++ie.current}`;ge(w=>[...w,{id:R,content:S}])},[]),[Ue,ce]=(0,$.useState)("booting"),[Ae,de]=(0,$.useState)([]),[Oe,Me]=(0,$.useState)(!1),[dt,Xt]=(0,$.useState)(!1),[tt,Sr]=(0,$.useState)("chat"),[Vt,Ft]=(0,$.useState)(null),[be,dn]=(0,$.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),xi=Fn(),T=_s(),On=Rs(),wi=(0,$.useCallback)((S,R,w)=>{let k=$e.current;if(!k)return;let L=et.current+R;cr(i.sessionDir,L,S,k,(G,q,z,Y)=>i.log(G,q,z,Y),w)},[i]),yi=(0,$.useCallback)((S,R,w)=>{i.logStep(S,R,w)},[i]),H=sr(wi,yi),[W,nt]=(0,$.useState)(()=>c.load()),[,Si]=(0,$.useState)(0),Xe=(0,$.useCallback)(()=>Si(S=>S+1),[]),[K,Se]=(0,$.useState)(null),Yt=T.creds.getActiveProfile(),pe=T.creds.getDefaultEnv(),Ye=(0,$.useCallback)((S,R)=>{let w=S?T.creds.loadProfileConfig(S,R):null;c.save({project_id:w?.project_id??null,project_name:w?.project_name??null,folder_id:w?.folder_id??null,folder_name:w?.folder_name??null}),nt(c.load())},[T.creds,c]);(0,$.useEffect)(()=>{E||(i.start({model:W.model,environment:pe,profile:Yt}),A(!0))},[i,E,W.model,pe,Yt]);let Po=(0,$.useCallback)(async S=>{let R=ae(S),w=T.getBasicAuth(),k=w?{username:w.username,accessKey:w.access_key}:await T.getToken().then(G=>G??"");if(!k)return;let L=new Wo(R.controllerBaseUrl,k);try{let G=await L.getScreenshotSas();i.setScreenshotSas(G),$e.current=new ln(G,3,(q,z,Y,fe)=>i.log(q,z,Y,fe)),i.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched")}catch(G){i.log("warn","SCREENSHOT_SAS_FAILED","Screenshot SAS fetch failed",{error:G instanceof Error?G.message:String(G)})}},[T,i]),Ct=(0,$.useCallback)(async S=>{let R=S??T.creds.getDefaultEnv();D(null),$e.current=null;let k=await T.initResolver(R,(L,G,q,z)=>i.log(L,G,q,z)).resolve(!0).catch(()=>null);return D(k),k&&(i.log("info","AUTH_RESET_OK","Auth reset resolved",{username:k.username,org_id:k.org_id,env:R}),await Po(R)),k},[T,i,Po]),Oo=(0,$.useRef)(!1);(0,$.useEffect)(()=>{!g||Oo.current||!E||(Oo.current=!0,Ct().then(S=>{if(S){if(i.log("info","BOOT_RESOLVE_OK","Boot auth resolved",{username:S.username,org_id:S.org_id}),!i.hasRemoteLogger){let R=Ko({sessionId:i.sessionId,identity:{org_id:String(S.org_id??""),user_id:String(S.user_id??""),machine_id:Go()},environment:pe,getToken:async()=>T.getToken()});i.setRemoteLogger(R),R.start(),Ge("remote-logger",()=>R.shutdownSync()),Qn(R)}}else i.log("warn","BOOT_RESOLVE_FAILED","Boot auth failed \u2014 non-controller APIs may fail")}).catch(S=>{i.log("error","BOOT_RESOLVE_ERROR","Boot auth error",{error:S instanceof Error?S.message:String(S)})}))},[g,E,Ct,i]);let Nt=(0,$.useCallback)(async()=>{if(B)return i.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:B.username,org_id:B.org_id}),B;let S=await T.resolveBasicAuth();return S?(i.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:S.username,org_id:S.org_id,user_id:S.user_id}),D(S)):i.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),S},[T,B,i]),Do=(0,$.useCallback)(async()=>{let S=await Nt();if(!S)return i.log("warn","PROJECT_FAILED","No TMS credentials for project resolution"),null;let R=ae(pe),w=new lt(R.tmsBaseUrl,S.username,S.access_key),k=T.creds.getActiveProfile(),L=T.creds.getDefaultEnv(),G=k?T.creds.loadProfileConfig(k,L):null,q=G?.project_id??W.project_id;if(q)i.log("info","PROJECT_CACHED","Using cached project",{project_id:q});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:`${R.tmsBaseUrl}/v1/projects`});let Y=await w.listProjects((we,fn,Rt,ft)=>i.log(we,fn,Rt,ft));i.log("info","PROJECT_LIST_OK","Projects listed",{count:Y.length});let fe=Y.find(we=>we.name==="KaneAI Generated");if(fe)q=fe.project_id,i.log("info","PROJECT_SELECTED","Using KaneAI Generated project",{project_id:q});else if(Y.length>0){let we=Y[0];q=we.project_id,i.log("info","PROJECT_SELECTED","Using first project",{name:we.name,project_id:q})}q&&c.set("project_id",q)}catch(Y){return i.log("error","PROJECT_LIST_FAILED","Project listing failed",{error:String(Y)}),null}}if(!q)return i.log("warn","PROJECT_NONE","No projects found"),null;let z=G?.folder_id??W.folder_id;if(z)i.log("info","FOLDER_CACHED","Using cached folder",{folder_id:z});else try{i.log("info","FOLDER_FETCH","Fetching default folder",{project_id:q}),z=await w.getDefaultFolder(q),i.log("info","FOLDER_OK","Default folder resolved",{folder_id:z}),z&&c.set("folder_id",z)}catch(Y){return i.log("error","FOLDER_FAILED","Default folder fetch failed",{error:String(Y)}),null}return{projectId:q,folderId:z??""}},[W.project_id,W.folder_id,Nt,pe,c,i]),le=(0,$.useCallback)(S=>{let R=m(),w={...S,id:R};ue((0,j.jsx)(rs,{entry:w}))},[m,ue]),jo=(0,$.useCallback)(async(S,R)=>{let w=i.nextRunIndex();et.current=w,Et.current=S,i.logRunStart(w,S,R??""),i.setFirstRun(S,R??"");let k=T.getResolvedBasicAuth(),L=k,G=null;if(!L&&(G=await T.getToken(),!G)){le({type:"error",text:"Not authenticated. Run /login first."});return}let q={basicAuth:k??null,token:G,resolver:T.getResolver(),resolvedCreds:null};if(yr.current=q,w===0&&!s){i.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let Pe=await Do(),it=ae(pe),at=L?{username:L.username,access_key:L.access_key}:await Nt();if(at){let gt=await gr({tmsBaseUrl:it.tmsBaseUrl,auth:{username:at.username,access_key:at.access_key},objective:S,url:R??W.default_url??"",projectId:Pe?.projectId??W.project_id??"",folderId:Pe?.folderId??W.folder_id??"",hasCustomProfile:!!W.chrome_profile_path,log:($n,Pr,Or,Dr)=>i.log($n,Pr,Or,Dr)});gt&&(i.setTestId(gt),Pe?.projectId&&i.setProjectId(Pe.projectId))}}let z=null;if(be.useCft)le({type:"info",text:"CfT mode: Playwright will manage browser"});else if(be.wsEndpoint)le({type:"info",text:`WS endpoint: ${be.wsEndpoint.slice(0,60)}...`});else if(be.cdpEndpoint)le({type:"info",text:`CDP endpoint: ${be.cdpEndpoint}`});else{le({type:"info",text:"Starting Chrome..."});try{z=await On.ensureChrome(R)}catch(it){le({type:"error",text:er(it)});return}i.logChromeLaunch(z.port,z.cdpEndpoint),le({type:"info",text:`Chrome ready (port ${z.port})`});let Pe=or({headless:be.headless,cdpEndpoint:z.cdpEndpoint});Pe&&(M.current=Pe,Ge("marker-overlay",()=>Pe.kill()))}let Y=fr({objective:S,globalDir:ut(Ee,"variables"),localDir:ut(process.cwd(),".testmuai","variables")});i.setAuteurVariables(Y.auteur),$t.current=Y;let fe=L&&!s?await mr({variables:Y,auth:L,orgId:String((await Nt())?.org_id??""),env:pe,localMode:s,log:(Pe,it,at,gt)=>i.log(Pe,it,at,gt)}):{};Bt.current=fe;let we=an(ut(Ee,"global-memory.md")),fn=an(ut(process.cwd(),".testmuai","context.md")),Rt=z?{cdpEndpoint:z.cdpEndpoint,instance:z,tempDir:null}:be.wsEndpoint?{wsEndpoint:be.wsEndpoint,instance:null,tempDir:null}:be.cdpEndpoint?{cdpEndpoint:be.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null},ft=pr({objective:Y.auteurObjective,url:R,model:W.model,chrome:Rt,auth:q,sessionId:i.sessionId,runIndex:w,windowSize:W.window_size,maxSteps:be.maxSteps,headless:be.headless,variables:Object.keys(Y.auteur).length>0?Y.auteur:void 0,globalContext:we??void 0,localContext:fn??void 0,sessionContext:i.getContext()});R&&b(R),ne(null),H.startRun(ft,{environment:pe,mode:W.mode,log:(Pe,it,at,gt)=>i.log(Pe,it,at,gt)}),C(Pe=>Pe+1)},[T,On,c,W,i,pe,H,le,be,Do,Nt]),Er=(0,$.useRef)(null);(0,$.useEffect)(()=>{if(H.bifurcationInfo&&H.bifurcationInfo!==Er.current){Er.current=H.bifurcationInfo;let{flows:S,isSingleFlow:R}=H.bifurcationInfo;if(R&&S.length===1&&S[0])i.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:S[0]}),le({type:"info",text:`Objective: ${S[0]}`});else if(!R&&S.length>1){let w=[`Bifurcated into ${S.length} flows:`];S.forEach((k,L)=>w.push(` ${L+1}. ${k}`)),i.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:S.length}),le({type:"info",text:w.join(`
|
|
54
|
-
`)})}}},[H.bifurcationInfo,
|
|
28
|
+
`)}function na(o){let e=Cn(),t=[`--remote-debugging-port=${o.port}`,`--user-data-dir=${o.userDataDir}`,`--window-size=${o.width},${o.height}`,"--no-first-run","--no-default-browser-check","--disable-blink-features=AutomationControlled","--disable-features=DownloadBubble,DownloadBubbleV2","--safebrowsing-disable-download-protection","--disable-popup-blocking","--disable-notifications","--disable-infobars","--disable-translate","--disable-prompt-on-repost","--disable-background-networking","--disable-client-side-phishing-detection","--disable-default-apps","--disable-hang-monitor","--disable-sync","--metrics-recording-only","--safebrowsing-disable-auto-update","--disable-backgrounding-occluded-windows","--disable-background-timer-throttling","--test-type=webdriver","--allow-pre-commit-input","--enable-logging","--v=1"];return e==="linux"&&(t.push("--no-sandbox"),t.push("--disable-dev-shm-usage"),t.push("--password-store=basic")),e==="darwin"&&t.push("--use-mock-keychain"),o.headless&&t.push("--headless=new"),t}function ra(o){return new Promise(e=>{let t=Ys({port:o,host:"127.0.0.1"});t.setTimeout(1e3),t.on("connect",()=>{t.destroy(),e(!0)}),t.on("timeout",()=>{t.destroy(),e(!1)}),t.on("error",()=>{t.destroy(),e(!1)})})}async function oa(){for(let o=Wr;o<=Kr;o++)if(!await ra(o))return o;throw new Error(`All CDP ports ${Wr}-${Kr} are in use. Close other Chrome instances.`)}async function ia(o,e=15e3){let t=Date.now(),n=`http://127.0.0.1:${o}/json/version`;for(;Date.now()-t<e;){try{if((await fetch(n)).ok)return`http://127.0.0.1:${o}`}catch{}await new Promise(r=>setTimeout(r,200))}throw new Error(`Chrome CDP not ready after ${e}ms on port ${o}`)}async function ar(o){let e=process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD;if(!(e!=null&&Qs.has(e.toLowerCase()))&&!ea())throw ei()?.log("error","CHROME_NOT_FOUND","Startup gate: Chrome unavailable at standard system paths",{platform:process.platform,kane_cli_chrome_path:process.env.KANE_CLI_CHROME_PATH??null,skip_browser_download:process.env.KANE_CLI_SKIP_BROWSER_DOWNLOAD??null}),new nn(ta());let n=Cn(),r=await oa(),i=Zs(),a=na({port:r,...o});o.startUrl&&a.push(o.startUrl);let l=ki(i,a,{stdio:"ignore",detached:!0,windowsHide:!0});l.unref();let c=await new Promise((s,u)=>{l.on("error",m=>{u(new Error(`Failed to launch Chrome: ${m.message}. Is Chrome installed at ${i}?`))}),l.on("close",m=>{m!==null&&m!==0&&u(new Error(`Chrome exited during startup with code ${m}`))}),ia(r).then(s,u)});return{process:l,port:r,cdpEndpoint:c,kill(){try{if(l.pid)if(n==="win32")ki("taskkill",["/pid",String(l.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-l.pid,"SIGKILL")}catch{l.kill("SIGKILL")}else l.kill("SIGKILL")}catch{}}}}import{mkdtempSync as sa,rmSync as aa}from"fs";import{join as la}from"path";import{tmpdir as ca}from"os";function Ti(){let[o]=(0,xt.useState)(()=>new qe),e=(0,xt.useRef)(null),t=(0,xt.useRef)(null),n=(0,xt.useRef)(null),r=(0,xt.useCallback)(async a=>{if(e.current)return e.current;if(n.current)return n.current;let l=(async()=>{let c=o.load(),s;if(c.chrome_profile_path)s=c.chrome_profile_path.replace("~",process.env.HOME??"~");else{t.current&&(Je("tempDir","Previous temp dir removed before retry"),t.current=null);let m=sa(la(ca(),"kane-clean-"));t.current=m,s=m,ze("tempDir",()=>{try{aa(m,{recursive:!0,force:!0})}catch{}})}let u=await ar({userDataDir:s,width:c.window_size.width,height:c.window_size.height,startUrl:a??c.default_url??void 0});return e.current=u,ze("chrome",()=>{u.kill()}),u})();n.current=l;try{return await l}finally{n.current=null}},[o]),i=(0,xt.useCallback)(()=>{Je("chrome","Chrome killed"),Je("tempDir","Temp dir removed"),e.current=null,t.current=null},[]);return{ensureChrome:r,killChrome:i}}import{spawn as ha}from"child_process";import{spawn as ua,execSync as fa}from"child_process";import{existsSync as lr}from"fs";import{resolve as Ve,dirname as ma}from"path";import{fileURLToPath as pa}from"url";import{createInterface as da}from"readline";async function*Ai(o){let e=da({input:o,crlfDelay:1/0});for await(let t of e){let n=t.trim();if(n)try{let r=JSON.parse(n);r&&typeof r.type=="string"&&(yield r)}catch{}}}function Ii(o){return o==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS"]}}var vt=ma(pa(import.meta.url));function ga(){for(let o of["python3","python"])try{return fa(`${o} --version`,{stdio:"ignore"}),o}catch{}return null}function po(){let e=process.platform==="win32"?"v16-runner.exe":"v16-runner",t={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},n=`${process.platform}-${process.arch}`,r=t[n];if(r)for(let l of r){let c=[Ve(vt,"..","node_modules",l,"bin",e),Ve(vt,"..","..","node_modules",l,"bin",e),Ve(vt,"..","..","..","node_modules",l,"bin",e)];for(let s of c)if(lr(s))return{cmd:s,args:[]}}let i=[Ve(vt,"bin",e),Ve(vt,"..","bin",e),Ve(vt,"..","..","..","..","v16-runner","dist",e),Ve(vt,"..","..","..","v16-runner","dist",e),Ve(process.cwd(),"v16-runner","dist",e),Ve(process.cwd(),"..","v16-runner","dist",e)];for(let l of i)if(lr(l))return{cmd:l,args:[]};let a=[Ve(vt,"..","..","..","..","v16-runner"),Ve(vt,"..","..","..","v16-runner"),Ve(process.cwd(),"v16-runner"),Ve(process.cwd(),"..","v16-runner")];for(let l of a)if(lr(Ve(l,"main.py"))){for(let s of[Ve(l,".venv","bin","python"),Ve(l,"..","browser-agent",".venv","bin","python")])if(lr(s))return{cmd:s,args:["main.py"],cwd:l};let c=ga();if(c)return{cmd:c,args:["main.py"],cwd:l}}return null}function cr(o,e){let t=po();if(!t)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");let n={...process.env};e?.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8"),n.V16_SERVER_API_HOST=ce(e?.environment).v16ServerHost,o.username&&o.access_key&&(n.LT_USERNAME=o.username,n.LT_ACCESS_KEY=o.access_key);let r=Ii(e?.mode??"testing");Object.assign(n,r.set);for(let b of r.unset)delete n[b];let i=ua(t.cmd,t.args,{stdio:["pipe","pipe","pipe"],env:n,cwd:t.cwd});i.stdin.on("error",()=>{}),i.stdin.write(JSON.stringify(o)+`
|
|
29
|
+
`);let a=1e5,l="";i.stderr.on("data",b=>{l+=b.toString(),l.length>a&&(l=l.slice(-a))}),i.on("error",b=>{e?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:b.message})});let c=null,s=null,u=new Promise(b=>{i.on("close",(E,h)=>{c=E,s=h?String(h):null,e?.log?.("info","RUNNER_EXIT","Runner exited",{code:E,signal:s??"none"}),b({code:E,signal:s})})}),m=Ai(i.stdout);return{child:i,events:m,sendUserResponse(b){let E=JSON.stringify({type:"user_response",answer:b});try{i.stdin.write(E+`
|
|
30
|
+
`)}catch{}},sendCancel(b){let E=JSON.stringify({type:"cancel",reason:b});try{i.stdin.write(E+`
|
|
31
|
+
`)}catch{}},cancel(){i.kill("SIGTERM")},get stderr(){return l},get exitCode(){return c},get exitSignal(){return s},exited:u}}async function Pi(o,e,t=100){let n=`${o.replace(/\/+$/,"")}/json/version`,r=await fetch(n);if(!r.ok)throw new Error(`CDP /json/version returned ${r.status}`);let i=await r.json();if(!i.webSocketDebuggerUrl)throw new Error("CDP /json/version missing webSocketDebuggerUrl");let a=new Go(i.webSocketDebuggerUrl);await new Promise((O,C)=>{a.once("open",O),a.once("error",C)});let l=1,c=new Map;a.on("message",O=>{let C;try{C=JSON.parse(O.toString())}catch{return}if(C.id==null)return;let L=c.get(C.id);L&&(c.delete(C.id),C.error?L.reject(new Error(C.error.message)):L.resolve(C.result))});function s(O,C){let L=l++;return new Promise((ne,ae)=>{c.set(L,{resolve:he=>ne(he),reject:ae});let le={id:L,method:O};C&&(le.params=C),a.send(JSON.stringify(le))})}let m=(await s("Target.getTargets")).targetInfos.find(O=>O.type==="page");if(!m)throw a.close(),new Error("CDP: no page target found");let E=(await s("Browser.getWindowForTarget",{targetId:m.targetId})).windowId,h="",_=!1,I=null,k=!1;a.on("close",()=>{k=!0}),a.on("error",()=>{k=!0});async function T(){if(!_){if(k){_=!0;return}try{let C=(await s("Browser.getWindowBounds",{windowId:E})).bounds,L=`${C.left}:${C.top}:${C.width}:${C.height}`;L!==h&&(h=L,e({left:C.left,top:C.top,width:C.width,height:C.height}))}catch{}_||(I=setTimeout(T,t))}}return T(),{stop(){if(!_){_=!0,I&&clearTimeout(I);try{a.close()}catch{}}}}}var ba=new Set(["1","true","yes"]);function dr(o){if(o?.headless)return null;let e=process.env.KANE_CLI_DISABLE_MARKER;if(e!=null&&ba.has(e.toLowerCase()))return null;let t=po();if(!t)return null;let n=[...t.args,"overlay"];o?.text&&n.push(o.text);let r;try{r=ha(t.cmd,n,{cwd:t.cwd,stdio:["pipe","ignore","ignore"],detached:!1,windowsHide:!0})}catch{return null}function i(c){if(!(!r.stdin||r.stdin.destroyed))try{r.stdin.write(JSON.stringify(c)+`
|
|
32
|
+
`)}catch{}}o?.chromePid&&o.chromePid>0&&i({type:"chrome_pid",pid:o.chromePid});let a=null;o?.cdpEndpoint&&Pi(o.cdpEndpoint,c=>i({type:"bounds",...c})).then(c=>{a=c.stop}).catch(()=>{});let l=!1;return{setRunActive(c){l||i({type:"run_active",active:c})},setStepText(c){if(l)return;let s=c.trim();s&&i({type:"step_text",text:s})},setStepComplete(){l||i({type:"step_complete"})},kill(){if(!l){l=!0,a?.();try{r.stdin?.end()}catch{}try{r.kill("SIGTERM")}catch{}}}}}var Oe=K(Fe(),1);function go(o){let e=o.indexOf(": ");return e>0&&e<15?o.slice(e+2):o}function ho(o){return o.map(e=>{let t=e.children?ho(e.children):e.children;return e.status==="running"?{...e,status:"stopped",phase:void 0,children:t}:t!==e.children?{...e,children:t}:e})}function ur(o,e,t,n){let[r,i]=(0,Oe.useState)(!1),[a,l]=(0,Oe.useState)([]),[c,s]=(0,Oe.useState)(null),[u,m]=(0,Oe.useState)(null),[b,E]=(0,Oe.useState)(null),[h,_]=(0,Oe.useState)(null),[I,k]=(0,Oe.useState)([]),T=(0,Oe.useRef)(null),O=(0,Oe.useRef)(null),C=(0,Oe.useRef)(0),L=(0,Oe.useRef)(!1),ne=(0,Oe.useCallback)((he,xe)=>{T.current&&(T.current.cancel(),T.current=null),l([]),s(null),m(null),E(null),_(null),k([]),i(!0),O.current=null,C.current=0;let D;try{D=cr(he,xe)}catch(M){E(M instanceof Error?M.message:String(M)),i(!1);return}T.current=D,ze("runner",()=>D.cancel()),(async()=>{L.current=!1;for await(let v of D.events){if(L.current)break;switch(v.type){case"run_start":if(O.current&&!O.current.isSingleFlow){let U=C.current;C.current++,l(J=>J.map((G,Q)=>Q===U?{...G,status:"running"}:G.status==="running"&&!G.children?.some(Y=>Y.status==="running")?{...G,status:G.children?.some(Y=>Y.status==="failed")?"failed":"passed"}:G))}break;case"bifurcation":{let U=v.flows??[],J=v.count??U.length,G={flows:U,isSingleFlow:v.is_single_flow??J<=1};_(G),O.current=G,C.current=0,l(U.map((Q,Y)=>({index:Y+1,objective:Q??`Flow ${Y+1}`,status:"pending"})));break}case"step_start":{e?.("STEP_START",`Step ${v.index} started`,{index:v.index,objective:v.objective,child_id:v.child_id});let U=v.index,J=v.objective??`Step ${U}`,G=v.child_id,Q=O.current&&!O.current.isSingleFlow;if(G)l(Y=>{let j=Y.findIndex(ue=>ue.status==="running"||ue.children?.some(Ke=>Ke.status==="running"));if(j===-1)return Y;let me=[...Y],pe={...me[j]},Ne=[...pe.children??[]].map(ue=>ue.status==="running"?{...ue,status:"stopped",phase:void 0}:ue);return Ne.push({index:U,objective:J,status:"running"}),pe.children=Ne,me[j]=pe,me});else if(Q){let Y=Math.max(0,C.current-1);l(j=>{let me=[...j];if(Y>=me.length)return j;let pe={...me[Y]},Ne=[...pe.children??[]].map(ue=>ue.status==="running"?{...ue,status:"stopped",phase:void 0}:ue);return Ne.push({index:U,objective:J,status:"running"}),pe.children=Ne,pe.status="running",me[Y]=pe,me})}else l(Y=>{let j=ho(Y);return j.some(pe=>pe.index===U)?j.map(pe=>pe.index===U?{...pe,status:"running",objective:J}:pe):[...j,{index:U,objective:J,status:"running"}]});break}case"step_event":{e?.("STEP_EVENT",`Step ${v.index} ${v.event}`,{index:v.index,phase:v.event,action_type:v.action_type,detail:v.detail,child_id:v.child_id});let U=v.child_id,J=O.current&&!O.current.isSingleFlow;if(v.event==="cm_init"&&v.checkpoint_count!=null){k(G=>[...G,v.checkpoint_count]);break}if(v.event==="reasoning"&&v.detail&&v.detail!=="reasoning"&&t?.(v.detail),U)l(G=>G.map(Q=>{if(!Q.children)return Q;let Y=Q.children.map(j=>{if(j.index!==v.index)return j;let me={phase:v.event};return v.event==="reasoning"&&v.detail&&v.detail!=="reasoning"&&(me.objective=v.detail),v.action_type&&(me.actionType=v.action_type),{...j,...me}});return{...Q,children:Y}}));else if(J){let G=Math.max(0,C.current-1);l(Q=>{let Y=[...Q];if(G>=Y.length)return Q;let j={...Y[G]},me=[...j.children??[]];if(!me.some(Te=>Te.index===v.index))me.push({index:v.index,objective:`Step ${v.index}`,status:"running",phase:v.event,actionType:v.action_type});else for(let Te=0;Te<me.length;Te++){if(me[Te].index!==v.index)continue;let Ne={phase:v.event};v.event==="reasoning"&&v.detail&&v.detail!=="reasoning"&&(Ne.objective=v.detail),v.action_type&&(Ne.actionType=v.action_type),me[Te]={...me[Te],...Ne}}return j.children=me,Y[G]=j,Y})}else l(G=>G.some(Y=>Y.index===v.index)?G.map(Y=>{if(Y.index!==v.index)return Y;let j={phase:v.event};return v.event==="reasoning"&&v.detail&&v.detail!=="reasoning"&&(j.objective=v.detail),v.action_type&&(j.actionType=v.action_type),{...Y,...j}}):[...ho(G),{index:v.index,objective:`Step ${v.index}`,status:"running",phase:v.event,actionType:v.action_type}]);break}case"step_end":{e?.("STEP_END",`Step ${v.index} ${v.status}`,{index:v.index,status:v.status,duration:v.duration,summary:v.summary,child_id:v.child_id}),n?.();let U=v.child_id,J=O.current&&!O.current.isSingleFlow;if(U)l(G=>G.map(Q=>{if(!Q.children)return Q;let Y=Q.children.map(j=>j.index===v.index?{...j,status:v.status,duration:v.duration,phase:void 0,objective:j.objective.startsWith("Step ")?go(v.summary||j.objective):j.objective}:j);return{...Q,children:Y}}));else if(J){let G=Math.max(0,C.current-1);l(Q=>{let Y=[...Q];if(G>=Y.length)return Q;let j={...Y[G]},me=(j.children??[]).map(pe=>pe.index===v.index?{...pe,status:v.status,duration:v.duration,phase:void 0,objective:pe.objective.startsWith("Step ")?go(v.summary||pe.objective):pe.objective}:pe);return j.children=me,Y[G]=j,Y})}else l(G=>G.map(Q=>Q.index===v.index?{...Q,status:v.status,duration:v.duration,phase:void 0,objective:Q.objective.startsWith("Step ")?go(v.summary||Q.objective):Q.objective}:Q));{let Q=O.current&&!O.current.isSingleFlow?Math.max(0,C.current-1):0;o?.(v.index,Q,v.child_id)}break}case"child_agent_start":{let U=v.objective??"";l(J=>J.map(G=>G.status==="running"?{...G,objective:`${U} (branch)`,phase:`child: ${U.slice(0,50)}`,branchObjective:U}:G));break}case"child_agent_end":l(U=>U.map(J=>J.phase?.startsWith("child:")?{...J,phase:`child ${v.success?"done":"failed"}`}:J));break;case"ask_user":s(v.question??"");break;case"run_end":l(U=>U.map(J=>J.status==="running"?{...J,status:v.status,phase:void 0}:J)),m(v),i(!1),Je("runner","Run completed"),T.current=null;break;case"error":E(v.message??"Runner error"),l(U=>U.map(J=>J.status==="running"?{...J,status:"failed",phase:void 0}:J)),i(!1),Je("runner","Runner error"),T.current=null;break}}let M=T.current;if(M){let{code:v,signal:U}=await M.exited,J=M.stderr,G=[];v!==null&&v!==0&&G.push(`Runner exited with code ${v}`),U&&G.push(`Runner killed by signal ${U}`),J&&G.push(J),G.length>0&&E(G.join(`
|
|
33
|
+
`))}i(!1),Je("runner","Event stream ended"),T.current=null})().catch(M=>{let v=T.current,U=[`Runner event loop error: ${M}`];v&&(v.exitCode!==null&&v.exitCode!==0&&U.push(`Exit code: ${v.exitCode}`),v.exitSignal&&U.push(`Signal: ${v.exitSignal}`),v.stderr&&U.push(v.stderr)),E(U.join(`
|
|
34
|
+
`)),i(!1),Je("runner","Event loop error"),T.current=null})},[o,e,t,n]),ae=(0,Oe.useCallback)(he=>{T.current?.sendUserResponse(he),s(null)},[]),le=(0,Oe.useCallback)(()=>{let he=T.current;he&&(he.sendCancel("user"),i(!1),s(null),setTimeout(()=>{T.current===he&&(Je("runner","User cancelled run"),T.current=null)},5e3))},[]);return(0,Oe.useEffect)(()=>()=>{L.current=!0,Je("runner","Component unmounted"),T.current=null},[]),{isRunning:r,steps:a,askingUser:c,lastRunEnd:u,runError:b,bifurcationInfo:h,cmInitCounts:I,startRun:ne,sendAnswer:ae,cancelRun:le}}function Rn(o){let e=o.flatMap(i=>[i,...i.children??[]]),t=e.filter(i=>i.status==="passed").length,n=e.filter(i=>i.status==="failed").length,r=e.filter(i=>i.status==="passed"||i.status==="failed").length;return{passed:t,failed:n,total:r}}var fr=[{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:"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 Oi(o){let e=o.trim();if(!e.startsWith("/"))return null;let n=e.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let r=n[0],i={},a=1;for(;a<n.length;){let l=n[a];if(l.startsWith("--")){let c=l.slice(2),s=n[a+1];s&&!s.startsWith("--")?(i[c]=s.replace(/^"|"$/g,""),a+=2):(i[c]=void 0,a++)}else{let c=l.replace(/^"|"$/g,"");r==="run"?i.objective=c:r==="config"?i.action?i.value=c:i.action=c:r==="profiles"?i.action=c:r==="summary"&&(i.index=c),a++}}return{command:r,args:i,raw:e}}var ud=[{name:"Testing",commands:fr.filter(o=>["run","cancel"].includes(o.name))},{name:"Auth",commands:fr.filter(o=>["login","logout","whoami","balance","profiles"].includes(o.name))},{name:"Settings",commands:fr.filter(o=>["config"].includes(o.name))},{name:"Session",commands:fr.filter(o=>["new","summary","help","clear","exit"].includes(o.name))}];var mr=[{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:"summary",description:"View run summaries",args:"[index]"},{name:"cancel",description:"Abort current run"},{name:"exit",description:"Quit kane-cli"}];var Xe=K(Z(),1),xa=64;function va(o){return o.split(`
|
|
35
|
+
`).map(e=>e.replace(/^[-–•]\s*/,"").trim()).filter(e=>e.length>0)}function rn({status:o,summary:e,duration:t,steps:n,stepsPassed:r,stepsFailed:i,reason:a,creditsConsumed:l}){let c=o==="passed",s=c?f.green:f.red,u=c?"\u2713":"\u2717",m=o.toUpperCase(),b=r??(c?n:Math.max(0,n-1)),E=i??(c?0:1),h=E>0?`${n} steps (${b} passed, ${E} failed)`:`${n} steps`,_=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,I=va(e);return(0,Xe.jsx)(p,{flexDirection:"column",marginTop:1,children:(0,Xe.jsxs)(p,{borderStyle:"round",borderColor:s,flexDirection:"column",paddingX:2,paddingY:1,width:xa+6,children:[(0,Xe.jsxs)(p,{flexDirection:"column",children:[(0,Xe.jsxs)(d,{bold:!0,color:s,children:[u," ",m]}),(0,Xe.jsxs)(d,{color:f.dimmed,wrap:"wrap",children:[h," \xB7 ",_,typeof l=="number"&&l>0?` \xB7 ${parseFloat(l.toFixed(4))} credits`:""]})]}),I.length>0&&(0,Xe.jsx)(p,{flexDirection:"column",marginTop:1,marginLeft:1,children:I.map((k,T)=>(0,Xe.jsxs)(p,{marginBottom:T<I.length-1?1:0,children:[(0,Xe.jsx)(d,{color:f.primary,children:"\u25CF "}),(0,Xe.jsx)(p,{flexShrink:1,children:(0,Xe.jsx)(d,{wrap:"wrap",children:k})})]},T))}),a&&!c&&(0,Xe.jsx)(p,{marginTop:1,children:(0,Xe.jsxs)(d,{color:f.red,wrap:"wrap",children:["Reason: ",a]})})]})})}var At=K(Z(),1);function bo({flows:o,filterIndex:e}){let t=e!==void 0?o.filter(n=>n.index===e):o;return t.length===0?null:(0,At.jsx)(p,{flexDirection:"column",children:t.map(n=>(0,At.jsxs)(p,{flexDirection:"column",marginTop:1,children:[(0,At.jsxs)(p,{marginLeft:1,children:[(0,At.jsx)(d,{color:"#b388ff",bold:!0,children:"Flow "+n.index+": "}),(0,At.jsx)(d,{color:"#b388ff",children:n.objective})]}),(0,At.jsx)(rn,{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 It=K(Z(),1),wa={ok:"\u2713",error:"\u2717",cancelled:"\u2298"},Di={ok:f.statusPass,error:f.statusFail,cancelled:f.dim};function Bi({status:o,command:e,message:t,details:n}){let r=e.startsWith("/")?e.slice(1):e;return(0,It.jsxs)(p,{flexDirection:"column",marginLeft:2,marginTop:1,children:[(0,It.jsx)(p,{marginLeft:1,children:(0,It.jsxs)(d,{color:Di[o],bold:!0,children:[wa[o]," ",r]})}),(0,It.jsxs)(p,{borderStyle:"round",borderColor:Di[o],paddingX:2,flexDirection:"column",width:70,children:[(0,It.jsx)(d,{children:t}),n&&(0,It.jsx)(d,{color:f.dim,children:n})]})]})}var In=K(Fe(),1);import{join as Tn}from"path";var kn=K(Z(),1);function ji({tabs:o,activeIndex:e}){return(0,kn.jsx)(p,{children:o.map((t,n)=>(0,kn.jsx)(p,{marginRight:1,children:n===e?(0,kn.jsx)(d,{color:f.primary,bold:!0,children:`[ ${t} ]`}):(0,kn.jsx)(d,{color:f.dim,children:` ${t} `})},t))})}var B=K(Z(),1),An=["Commands","Shortcuts","Setup","About"],pr=18,ya="https://www.testmuai.com/support/docs/kane-cli-introduction",_a="https://github.com/LambdaTest/kane-cli/issues";function $i({onClose:o,version:e,environment:t,sessionId:n,runUrl:r}){let[i,a]=(0,In.useState)(0),[l,c]=(0,In.useState)(0);(0,In.useEffect)(()=>{c(0)},[i]);let s=An[i],u=s==="Commands"?Sa():s==="Shortcuts"?Ea():s==="Setup"?Ca():Ra({version:e,environment:t,sessionId:n,runUrl:r}),m=u.length,b=l>0,E=l+pr<m,h=u.slice(l,l+pr);it((I,k)=>{if(k.escape){o();return}if(k.rightArrow||k.tab){a(T=>(T+1)%An.length);return}if(k.leftArrow){a(T=>(T-1+An.length)%An.length);return}if(k.upArrow){c(T=>Math.max(0,T-1));return}if(k.downArrow){c(T=>Math.min(Math.max(0,m-pr),T+1));return}});let _=[{keys:"\u2190\u2192/tab",label:"switch tabs"}];return m>pr&&_.push({keys:"\u2191\u2193",label:"scroll"}),(0,B.jsxs)(p,{flexDirection:"column",borderStyle:"round",borderColor:f.primary,paddingX:2,paddingY:1,children:[(0,B.jsx)(ji,{tabs:[...An],activeIndex:i,onChange:a}),b&&(0,B.jsx)(p,{marginTop:1,children:(0,B.jsx)(d,{color:f.dim,children:"\u25B2 more above"})}),(0,B.jsx)(p,{marginTop:b?0:1,flexDirection:"column",children:h}),E&&(0,B.jsx)(p,{children:(0,B.jsx)(d,{color:f.dim,children:"\u25BC more below"})}),(0,B.jsx)(Yt,{bindings:_,escBackLabel:"back to chat"})]})}function Sa(){return[(0,B.jsx)(d,{color:f.dimmed,children:"Type a natural-language objective and press \u21B5 to run, e.g."},"intro"),(0,B.jsx)(p,{marginLeft:2,children:(0,B.jsx)(d,{color:f.cyan,children:'"search amazon for laptop"'})},"ex"),(0,B.jsx)(p,{marginBottom:1},"sp"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"Slash commands"},"cmd-h"),...mr.map(o=>(0,B.jsxs)(p,{marginLeft:2,children:[(0,B.jsx)(p,{width:14,children:(0,B.jsxs)(d,{color:f.cyan,children:["/",o.name]})}),o.args&&(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:o.args})}),(0,B.jsx)(d,{color:f.dimmed,children:o.description})]},o.name)),(0,B.jsx)(p,{marginBottom:1},"sp2"),(0,B.jsx)(p,{marginLeft:2,children:(0,B.jsx)(d,{color:f.dim,children:"/auth submenu: login \xB7 logout \xB7 whoami \xB7 profiles \xB7 balance"})},"auth-sub"),(0,B.jsx)(p,{marginLeft:2,children:(0,B.jsx)(d,{color:f.dim,children:"/config submenu: show \xB7 set-mode \xB7 set-window \xB7 chrome-profile \xB7 project \xB7 folder"})},"config-sub")]}function gr(o,e){return[(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:o},`h-${o}`),...e.map(([t,n],r)=>(0,B.jsxs)(p,{marginLeft:2,children:[(0,B.jsx)(p,{width:26,children:(0,B.jsx)(d,{color:f.cyan,children:t})}),(0,B.jsx)(d,{color:f.dimmed,children:n})]},`r-${o}-${r}`)),(0,B.jsx)(p,{marginBottom:1},`s-${o}`)]}function Ea(){return[...gr("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"]]),...gr("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"]]),...gr("Lists & menus",[["\u2191 \u2193","Navigate"],["type any char","Filter"],["\u21B5","Select"],["Tab","Create-new (in pickers)"],["Esc","Clear filter, then back"]]),...gr("Global",[["Ctrl+C","Cancel run \xB7 twice exits"]]),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"Platform caveats"},"cv-h"),(0,B.jsx)(d,{color:f.dim,children:'\u2022 Mac Terminal.app: enable "Use Option as Meta key" (Profile \u2192 Keyboard)'},"cv-1"),(0,B.jsx)(d,{color:f.dim,children:"\u2022 Mac iTerm2: works by default (Esc+ mode)"},"cv-2"),(0,B.jsx)(d,{color:f.dim,children:"\u2022 Mac Mission Control may intercept Ctrl+arrow \u2014 use Option+arrow instead"},"cv-3"),(0,B.jsx)(d,{color:f.dim,children:"\u2022 Bare Forward Delete acts as Backspace (Ink can't disambiguate)"},"cv-4"),(0,B.jsx)(d,{color:f.dim,children:"\u2022 Shift+arrow is parsed but unbound (selection model is future)"},"cv-5"),(0,B.jsx)(d,{color:f.dim,children:"\u2022 Thousands of terminals exist \u2014 if a shortcut fails, run `cat` to see bytes"},"cv-6")]}function Ca(){return[(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"1. Login"},"s1-h"),(0,B.jsx)(d,{color:f.dim,children:" /auth \u2192 login. OAuth opens browser; basic uses LambdaTest username + access key."},"s1-b"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"2. Project & folder"},"s2-h"),(0,B.jsx)(d,{color:f.dim,children:" /config project / /config folder. Esc auto-picks KaneAI Generated / Untitled."},"s2-b"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"3. Mode"},"s3-h"),(0,B.jsx)(d,{color:f.dim,children:" testing (saves to TMS) | action (local report). /config set-mode"},"s3-b"),(0,B.jsx)(p,{marginBottom:1},"spacer-1"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"Variables (later wins)"},"v-h"),(0,B.jsxs)(d,{color:f.dim,children:[" ",`${Tn(Me,"variables")}/*.json`," (global)"]},"v-1"),(0,B.jsxs)(d,{color:f.dim,children:[" ","{cwd}/.testmuai/variables/*.json"," (local) \xB7 --variables-file \xB7 --variables ","'{...}'"]},"v-2"),(0,B.jsx)(d,{color:f.dim,children:' Format: { "key": { "value": "...", "secret": false } } \xB7 ref via {{key}}'},"v-3"),(0,B.jsx)(p,{marginBottom:1},"spacer-2"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"Context files"},"c-h"),(0,B.jsxs)(d,{color:f.dim,children:[" Global: ",Tn(Me,"global-memory.md")]},"c-1"),(0,B.jsxs)(d,{color:f.dim,children:[" Local: ","{cwd}/.testmuai/context.md"," \xB7 CLI: --global-context, --local-context"]},"c-2"),(0,B.jsx)(p,{marginBottom:1},"spacer-3"),(0,B.jsx)(d,{color:f.dimmed,bold:!0,children:"Paths"},"p-h"),(0,B.jsxs)(d,{color:f.dim,children:[" Config: ",Tn(Me,"tui-config.json")," \xB7 Auth: ",Tn(Me,"config.json")]},"p-1"),(0,B.jsxs)(d,{color:f.dim,children:[" Sessions: ",Tn(Me,"sessions"),"/"]},"p-2")]}function Ra({version:o,environment:e,sessionId:t,runUrl:n}){return[(0,B.jsxs)(p,{children:[(0,B.jsx)(d,{color:f.primary,bold:!0,children:"kane-cli "}),(0,B.jsxs)(d,{color:f.muted,children:["v",o]})]},"title"),(0,B.jsx)(p,{marginBottom:1},"sp"),(0,B.jsxs)(p,{children:[(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:"Environment"})}),(0,B.jsx)(d,{children:e})]},"env"),(0,B.jsxs)(p,{children:[(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:"Session"})}),(0,B.jsx)(d,{children:t})]},"sess"),(0,B.jsxs)(p,{children:[(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:"Default URL"})}),(0,B.jsx)(d,{color:f.cyan,children:n})]},"url"),(0,B.jsx)(p,{marginBottom:1},"sp2"),(0,B.jsxs)(p,{children:[(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:"Docs"})}),(0,B.jsx)(d,{color:f.cyan,underline:!0,children:ya})]},"docs"),(0,B.jsxs)(p,{children:[(0,B.jsx)(p,{width:14,children:(0,B.jsx)(d,{color:f.dimmed,children:"Bugs"})}),(0,B.jsx)(d,{color:f.cyan,underline:!0,children:_a})]},"bugs")]}var ka=null;function Li(o){ka=o}import{readFileSync as Ta,existsSync as Aa}from"fs";function on(o){if(!Aa(o))return null;try{return Ta(o,"utf-8").trim()||null}catch{return null}}import{join as Cr}from"path";var hr=K(Z(),1);function Vi({status:o,steps:e,duration:t,creditsConsumed:n,reason:r}){let i=o==="passed",a=i?f.green:f.red,l=i?"\u2713":"\u2717",c=i?"Passed":"Failed",s=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,u=typeof n=="number"&&n>0?` \xB7 ${n.toFixed(4)} credits`:"",m=!i&&r?` \xB7 ${r}`:"";return(0,hr.jsxs)(p,{children:[(0,hr.jsxs)(d,{bold:!0,color:a,children:[l," ",c]}),(0,hr.jsxs)(d,{color:f.dimmed,children:[" ","\xB7 ",e," steps \xB7 ",s,u,m]})]})}var Fi=K(Z(),1);function Ni(){return(0,Fi.jsx)(d,{color:f.dimmed,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}function Mi(o,e,t){return`${o}/projects/${e}/test-cases/${t}`}function Vt(o,e,t,n){return`${Mi(o,e,t)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function Pn(o,e,t){return`${Mi(o,e,t)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{readFileSync as Ui,readdirSync as Hi,existsSync as Nt}from"fs";import{join as wt}from"path";function br(o,e,t,n,r,i){try{let a=wt(o,"runs",String(e),"run-test");if(!Nt(a)){r("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:t,reason:"runsDir_not_found",path:a});return}let l=a;if(i){let _=wt(a,`child-${i}`);if(!Nt(_)){r("warn","SCREENSHOT_SKIP","Child dir not found",{step_index:t,child_id:i,reason:"child_dir_not_found",path:_});return}let I=Hi(_).filter(k=>Nt(wt(_,k,"screenshots")));if(I.length===0){r("warn","SCREENSHOT_SKIP","No screenshots dir under child",{step_index:t,child_id:i,reason:"no_child_screenshots_dir"});return}l=wt(_,I[0])}else if(!Nt(wt(a,"screenshots"))){let _=Hi(a).filter(I=>Nt(wt(a,I,"screenshots")));if(_.length===0){r("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:t,reason:"no_screenshots_dir"});return}l=wt(a,_[0])}let c=wt(l,"screenshots",`step_${String(t).padStart(3,"0")}.png`);if(!Nt(c)){r("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:t,child_id:i,reason:"screenshot_not_found",path:c});return}let s=wt(a,"actions.ndjson");if(!Nt(s)){r("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:t,reason:"ndjson_not_found"});return}let u=Ui(s,"utf-8").trim().split(`
|
|
36
|
+
`),m=u[u.length-1];if(!m){r("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:t,reason:"ndjson_empty"});return}let E=JSON.parse(m).action_id;if(!E){r("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:t,reason:"no_action_id"});return}let h=Ui(c);n.enqueue(E,h),r("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:t,child_id:i,action_id:E,size:h.length})}catch(a){r("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:t,error:a instanceof Error?a.message:String(a)})}}import Ia from"sharp";var sn=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;log;constructor(e,t=3,n){this.sas=e,this.maxWorkers=t,this.log=n}updateSas(e){this.sas=e}enqueue(e,t){this.queue.push({operationId:e,buffer:t}),this.pump()}async drain(e=3e4){if(!(this.queue.length===0&&this.activeCount===0))return new Promise(t=>{this.drainResolvers.push(t),setTimeout(()=>{t()},e)})}pump(){for(;this.activeCount<this.maxWorkers&&this.queue.length>0;){let e=this.queue.shift();this.activeCount++,this.processJob(e).finally(()=>{if(this.activeCount--,this.pump(),this.queue.length===0&&this.activeCount===0){for(let t of this.drainResolvers)t();this.drainResolvers=[]}})}}async processJob(e){let t,n="image/webp";try{let l=await Ia(e.buffer).webp({quality:80}).toBuffer();t=new Uint8Array(l)}catch(l){t=new Uint8Array(e.buffer),n="image/png",this.log?.("warn","SCREENSHOT_CONVERT_FAILED","WebP conversion failed, using PNG",{operation_id:e.operationId,error:l instanceof Error?l.message:String(l)})}let r=n==="image/webp"?"webp":"png",i=`test_screenshots/untagged_screenshot/${e.operationId}.${r}`,a=`${this.sas.base_url}/${this.sas.container}/${i}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)try{let c=await fetch(a,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:t});if(c.ok)return;if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed after retries",{operation_id:e.operationId,status:c.status,attempts:this.maxRetries+1})}catch{if(l<this.maxRetries){await this.backoff(l);continue}this.log?.("warn","SCREENSHOT_UPLOAD_FAILED","Screenshot upload failed (network error)",{operation_id:e.operationId,error:"network",attempts:this.maxRetries+1})}}backoff(e){let t=e===0?1e3:3e3;return new Promise(n=>setTimeout(n,t))}isNearExpiry(){if(!this.sas.expiry)return!1;let e=new Date(this.sas.expiry).getTime();return Date.now()>e-5*6e4}};import{readdirSync as Pa,readFileSync as Ki,existsSync as Gi}from"fs";import{join as Oa}from"path";function Wi(o,e){if(!Gi(o))return{};let t={},n;try{n=Pa(o).filter(r=>r.endsWith(".json")).sort()}catch{return{}}for(let r of n)try{let i=Ki(Oa(o,r),"utf-8"),a=JSON.parse(i);if(a&&typeof a=="object"){for(let[l,c]of Object.entries(a))if(c&&typeof c=="object"&&"value"in c){let s=c;t[l]={value:s.value,secret:s.secret??!1,syntax:s.syntax??`{{${l}}}`}}}}catch{e?e("warn","VARIABLE_PARSE_FAILED","Skipping invalid variables file",{file:r}):process.stderr.write(`[variables] Warning: skipping invalid variables file: ${r}
|
|
37
|
+
`)}return t}function qi(o){if(!Gi(o))throw new Error(`Variables file not found: ${o}`);let e=Ki(o,"utf-8"),t=JSON.parse(e),n={};if(t&&typeof t=="object"){for(let[r,i]of Object.entries(t))if(i&&typeof i=="object"&&"value"in i){let a=i;n[r]={value:a.value,secret:a.secret??!1,syntax:a.syntax??`{{${r}}}`}}}return n}function zi(o){let e;try{e=JSON.parse(o)}catch{throw new Error("Invalid --variables JSON")}let t={};if(e&&typeof e=="object"){for(let[n,r]of Object.entries(e))if(r&&typeof r=="object"&&"value"in r){let i=r;t[n]={value:i.value,secret:i.secret??!1,syntax:i.syntax??`{{${n}}}`}}}return t}function Ji(o,e,t){let n=Wi(o,t),r=Wi(e,t);return{...n,...r}}function Xi(o,e){let t={},n={},r=e;for(let[i,a]of Object.entries(o))if(a.secret){let l=`secrets.user.${i}`;t[l]={value:a.value,secret:!0,syntax:`{{secrets.user.${i}}}`,type:"secret"},n[i]=l,r=r.replaceAll(`{{${i}}}`,`{{secrets.user.${i}}}`)}else{let l=`global.${i}`;t[l]={value:a.value,secret:!1,syntax:`{{global.${i}}}`,type:"global"},n[i]=l,r=r.replaceAll(`{{${i}}}`,`{{global.${i}}}`)}return{variables:t,objective:r,keyMap:n}}var xr=class{constructor(e){this.baseUrl=e}async pushSecret(e){let t=Xo(e.username,e.accessKey),n=await fetch(`${this.baseUrl}/logistics/v1.0/secrets/create`,{method:"PUT",headers:{Authorization:t,"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({secretKey:e.secretKey,secretValue:e.secretValue,orgId:e.orgId,username:e.username,scope:"user",type:"user",accessKey:e.accessKey})});if(!n.ok)throw new Error(`Push secret failed: ${n.status} ${await n.text()}`)}static extractVariableKeys(e){let t=e.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),n=new Set;for(let r of t)n.add(r[1]);return[...n]}};var vr=class extends Yo{constructor(e,t,n){super(e,{username:t,accessKey:n})}async upsertVariable(e){let t=e.environmentId??0,n=await fetch(`${this.baseUrl}/v1/variables`,{method:"POST",headers:this.headers(),body:JSON.stringify({name:e.name,value:String(e.value),type:"variable",value_type:"string",is_persist:e.isPersist??!1,environment_id:t})});if(n.ok)return{id:(await n.json()).id??0};if(n.status!==409&&n.status!==422)return{id:0};if(!(await fetch(`${this.baseUrl}/v1/variables/name/${encodeURIComponent(e.name)}`,{method:"PUT",headers:this.headers(),body:JSON.stringify({value:String(e.value),value_type:"string",type:"variable",environment_id:t})})).ok)return{id:0};let i=await fetch(`${this.baseUrl}/v1/variables/${encodeURIComponent(e.name)}?environment_id=${t}`,{method:"GET",headers:this.headers()});return i.ok?{id:(await i.json()).data?.id??0}:{id:0}}};function wr(o){let e=Ji(o.globalDir,o.localDir,o.onLoadError),t=o.file?qi(o.file):{},n=o.inline?zi(o.inline):{},r={...e,...t,...n},i=Object.keys(r).length>0,{variables:a,objective:l}=i?Xi(r,o.objective):{variables:{},objective:o.objective},c=Object.entries(r).filter(([,u])=>u.secret),s=Object.entries(r).filter(([,u])=>!u.secret);return{raw:r,auteur:a,auteurObjective:l,secretEntries:c,nonSecretEntries:s}}async function yr(o){if(o.localMode)return{};let e=ce(o.env);if(o.variables.secretEntries.length>0){let n=new xr(e.secretsBaseUrl);for(let[r,i]of o.variables.secretEntries)n.pushSecret({secretKey:r,secretValue:i.value,username:o.auth.username,accessKey:o.auth.access_key,orgId:o.orgId}).then(()=>o.log("info","SECRET_PUSH_OK","Secret pushed",{key:r})).catch(a=>o.log("error","SECRET_PUSH_FAILED","Secret push failed",{key:r,error:String(a)}))}let t={};if(o.variables.nonSecretEntries.length>0){let n=new vr(e.tmsBaseUrl,o.auth.username,o.auth.access_key);for(let[r,i]of o.variables.nonSecretEntries)try{let a=await n.upsertVariable({name:r,value:i.value});t[r]=a.id,o.log("info","VAR_PUSH_OK","Variable pushed",{name:r,id:a.id})}catch(a){o.log("error","VAR_PUSH_FAILED","Variable push failed",{name:r,error:String(a)})}}return t}function _r(o){let e={objective:o.objective,model:o.model,width:o.windowSize.width,height:o.windowSize.height,session_id:o.sessionId,run_index:o.runIndex,stream:!0,max_steps:o.maxSteps??30,headless:o.headless??!1};return o.url&&(e.url=o.url),o.chrome.wsEndpoint?e.ws_endpoint=o.chrome.wsEndpoint:o.chrome.cdpEndpoint&&(e.cdp_endpoint=o.chrome.cdpEndpoint),o.auth.basicAuth?(e.username=o.auth.basicAuth.username,e.access_key=o.auth.basicAuth.access_key):o.auth.token&&(e.auth={type:"bearer",token:o.auth.token}),o.disableAskUser&&(e.disable_ask_user=!0),o.enableTaskSkills&&(e.enable_task_skills=!0),o.variables&&Object.keys(o.variables).length>0&&(e.variables=o.variables),o.globalContext&&(e.global_context=o.globalContext),o.localContext&&(e.local_context=o.localContext),o.sessionContext&&(e.session_context=o.sessionContext),e}function On(o){let e=ce(o.env),{session:t,auth:n}=o,r=n.basicAuth?{username:n.basicAuth.username,accessKey:n.basicAuth.access_key}:n.token,i=n.resolvedCreds?.username??n.basicAuth?.username??"",a=n.resolvedCreds?.access_key??n.basicAuth?.access_key??"",l=n.resolvedCreds?.org_id??0,c=n.resolvedCreds?.user_id??0,s=[];for(let h of Object.keys(t.auteurVariables))h.startsWith("secrets.user.")&&s.push({key_name:h.replace("secrets.user.",""),scope:"user"});let m=t.getContext().prior_runs.map(h=>h.status),b=t.auteurVariables,E=Object.keys(b).length>0;return{controllerBaseUrl:e.controllerBaseUrl,tmsBaseUrl:e.tmsBaseUrl,auth:r,authResolver:n.resolver,sessionId:t.sessionId,sessionDir:t.sessionDir,testId:t.testId,commitId:t.sessionId,projectId:o.projectId,folderId:o.folderId,firstObjective:t.firstObjective??"KaneAI Test",firstUrl:t.firstUrl??"",runDirs:t.getRunDirs(),runObjectives:t.getRunObjectives(),runMetadata:t.getRunMetadata(),startedAt:t.startedAt,endedAt:new Date().toISOString(),totalSteps:o.totalSteps,totalDuration:o.totalDuration,runStatuses:m,orgId:l,userId:c,tmsUsername:i,tmsAccessKey:a,screenshotBaseUrl:t.screenshotBaseUrl,shareApiBaseUrl:e.shareApiBaseUrl,variables:E?b:void 0,variableIds:o.variableIds,secrets:s,codeExport:o.codeExport,onProgress:o.onProgress,log:o.log}}var Yi=["python","javascript"];function Da(o){if(o!==void 0){if(!Yi.includes(o))throw new Error(`--code-language must be one of: ${Yi.join(", ")} (got "${o}")`);return o}}function Dn(o,e){let t=Da(o.codeLanguage);return{enabled:o.codeExport??e.enabled,language:t??e.language,skipValidation:o.skipCodeValidation??e.skip_validation}}async function Sr(o){try{let t=await new kt(o.tmsBaseUrl,o.auth.username,o.auth.access_key).createAtmTest({objective:o.objective.slice(0,100),creation_mode:"KANECLI",playground_disabled:o.hasCustomProfile,testURL:o.url,project_id:o.projectId,folder_id:o.folderId,authoring_version:4});return o.log("info","ATM_CREATE_OK","Test created",{test_id:t}),t}catch(e){return o.log("error","ATM_CREATE_FAILED","Test creation failed",{error:e instanceof Error?e.message:String(e)}),null}}async function Er(o){await new kt(o.tmsBaseUrl,o.username,o.accessKey).submitFeedback({instruction_id:"",test_id:o.testId,feedback_type:o.feedbackType,mode:o.mode??"human",...o.details?{details:o.details}:{}}),o.log("info","FEEDBACK_SUBMITTED","Feedback submitted",{type:o.feedbackType})}var R=K(Z(),1);function Qi({localMode:o=!1,codeExport:e,codeLanguage:t,skipCodeValidation:n,updatePromise:r,migrationResult:i}={}){Mn();let a=(0,P.useRef)(new bn),[l,c]=(0,P.useState)(0),s=a.current,[u]=(0,P.useState)(()=>new qe),m=(0,P.useRef)(0),b=(0,P.useCallback)(()=>`msg-${++m.current}`,[]),[E,h]=(0,P.useState)(!1),[_,I]=(0,P.useState)(null),[k,T]=(0,P.useState)(!1),[O,C]=(0,P.useState)(0),[L,ne]=(0,P.useState)(!1),[ae,le]=(0,P.useState)(null),[he,xe]=(0,P.useState)(null),D=(0,P.useRef)(null),[M,v]=(0,P.useState)(null),[U,J]=(0,P.useState)(qn()),[G,Q]=(0,P.useState)(null),[Y,j]=(0,P.useState)([]),[me,pe]=(0,P.useState)(!1),[Te,Ne]=(0,P.useState)(!1),ue=(0,P.useRef)(null),Ke=(0,P.useRef)(0),_t=(0,P.useRef)(""),$n=(0,P.useRef)(null),Ht=(0,P.useRef)(null),cn=(0,P.useRef)({}),St=(0,P.useRef)(null),dn=(0,P.useRef)(0),[F,ie]=(0,P.useState)([]),X=(0,P.useCallback)(x=>{let S=`s-${++dn.current}`;ie(g=>[...g,{id:S,content:x}])},[]),[ge,Se]=(0,P.useState)("booting"),[lt,Ee]=(0,P.useState)([]),[Ae,de]=(0,P.useState)(!1),[De,Ze]=(0,P.useState)(!1),[rt,Wt]=(0,P.useState)("chat"),[Be,Kt]=(0,P.useState)(null),[Gt,Ln]=(0,P.useState)(null),[qt,Lo]=(0,P.useState)(!1),[Ce,un]=(0,P.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),Ts=qo(),w=Ri(),Vn=Ti(),As=(0,P.useCallback)((x,S,g)=>{let y=ue.current;if(!y)return;let A=Ke.current+S;br(s.sessionDir,A,x,y,(N,q,z,ee)=>s.log(N,q,z,ee),g)},[s]),Is=(0,P.useCallback)((x,S,g)=>{s.logStep(x,S,g)},[s]),Ps=(0,P.useCallback)(x=>St.current?.setStepText(x),[]),Os=(0,P.useCallback)(()=>St.current?.setStepComplete(),[]),H=ur(As,Is,Ps,Os),[W,Ge]=(0,P.useState)(()=>u.load()),[,Ds]=(0,P.useState)(0),et=(0,P.useCallback)(()=>Ds(x=>x+1),[]),[$,Re]=(0,P.useState)(null),zt=w.creds.getActiveProfile(),ve=w.creds.getDefaultEnv(),dt=(0,P.useCallback)((x,S)=>{let g=x?w.creds.loadProfileConfig(x,S):null;u.save({project_id:g?.project_id??null,project_name:g?.project_name??null,folder_id:g?.folder_id??null,folder_name:g?.folder_name??null}),Ge(u.load())},[w.creds,u]),Or=(0,P.useCallback)(async(x,S)=>{let g=w.getResolver();if(!g)return null;let y=g.cached??await g.resolve();if(!y)return null;let A=ce(S),N=new kt(A.tmsBaseUrl,y.username,y.access_key);try{let z=(await N.listProjects()).find(se=>se.name==="KaneAI Generated");if(z)return{id:z.project_id,name:z.name};let ee=await N.createProject("KaneAI Generated");return{id:ee.id,name:ee.name}}catch{return null}},[w]),Dr=(0,P.useCallback)(async(x,S)=>{let g=w.getResolver();if(!g)return null;let y=g.cached??await g.resolve();if(!y)return null;let A=ce(x),N=new kt(A.tmsBaseUrl,y.username,y.access_key);try{let z=(await N.listFolders(S)).find(se=>se.name==="Untitled");if(z)return{id:z.id,name:z.name};let ee=await N.createFolder(S,"Untitled");return{id:ee.id,name:ee.name}}catch{return null}},[w]);(0,P.useEffect)(()=>{k||(s.start({model:W.model,environment:ve,profile:zt}),T(!0))},[s,k,W.model,ve,zt]);let Vo=(0,P.useCallback)(async x=>{let S=ce(x),g=w.getBasicAuth(),y=g?{username:g.username,accessKey:g.access_key}:await w.getToken().then(N=>N??"");if(!y)return;let A=new Zo(S.controllerBaseUrl,y);try{let N=await A.getScreenshotSas();s.setScreenshotSas(N),ue.current=new sn(N,3,(q,z,ee,se)=>s.log(q,z,ee,se)),s.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched")}catch(N){s.log("warn","SCREENSHOT_SAS_FAILED","Screenshot SAS fetch failed",{error:N instanceof Error?N.message:String(N)})}},[w,s]),Et=(0,P.useCallback)(async x=>{let S=x??w.creds.getDefaultEnv();Q(null),ue.current=null;let y=await w.initResolver(S,(A,N,q,z)=>s.log(A,N,q,z)).resolve(!0).catch(()=>null);return Q(y),y&&(s.log("info","AUTH_RESET_OK","Auth reset resolved",{username:y.username,org_id:y.org_id,env:S}),await Vo(S)),y},[w,s,Vo]),No=(0,P.useRef)(!1);(0,P.useEffect)(()=>{!E||No.current||!k||(No.current=!0,Et().then(x=>{if(x){if(s.log("info","BOOT_RESOLVE_OK","Boot auth resolved",{username:x.username,org_id:x.org_id}),!s.hasRemoteLogger){let S=oi({sessionId:s.sessionId,identity:{org_id:String(x.org_id??""),user_id:String(x.user_id??""),machine_id:ii(),email:x.email??null,email_domain:x.email_domain??"unknown",user_type:x.user_type??"unknown",env:ve},getToken:async()=>w.getToken()});s.setRemoteLogger(S),S.start(),ze("remote-logger",()=>S.shutdownSync()),Gn(S)}}else s.log("warn","BOOT_RESOLVE_FAILED","Boot auth failed \u2014 non-controller APIs may fail")}).catch(x=>{s.log("error","BOOT_RESOLVE_ERROR","Boot auth error",{error:x instanceof Error?x.message:String(x)})}))},[E,k,Et,s]);let Ot=(0,P.useCallback)(async()=>{if(G)return s.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:G.username,org_id:G.org_id}),G;let x=await w.resolveBasicAuth();return x?(s.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:x.username,org_id:x.org_id,user_id:x.user_id}),Q(x)):s.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),x},[w,G,s]),Fo=(0,P.useCallback)(async()=>{let x=await Ot();if(!x)return s.log("warn","PROJECT_FAILED","No TMS credentials for project resolution"),null;let S=ce(ve),g=new kt(S.tmsBaseUrl,x.username,x.access_key),y=w.creds.getActiveProfile(),A=w.creds.getDefaultEnv(),N=y?w.creds.loadProfileConfig(y,A):null,q=N?.project_id??W.project_id;if(q)s.log("info","PROJECT_CACHED","Using cached project",{project_id:q});else{s.log("info","PROJECT_FETCH","No project_id in config, fetching from TMS");try{s.log("info","PROJECT_LIST","Listing projects from TMS",{url:`${S.tmsBaseUrl}/v1/projects`});let ee=await g.listProjects((fe,ut,Ct,ft)=>s.log(fe,ut,Ct,ft));s.log("info","PROJECT_LIST_OK","Projects listed",{count:ee.length});let se=ee.find(fe=>fe.name==="KaneAI Generated");if(se)q=se.project_id,s.log("info","PROJECT_SELECTED","Using KaneAI Generated project",{project_id:q});else if(ee.length>0){let fe=ee[0];q=fe.project_id,s.log("info","PROJECT_SELECTED","Using first project",{name:fe.name,project_id:q})}q&&ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{projectId:q})}catch(ee){return s.log("error","PROJECT_LIST_FAILED","Project listing failed",{error:String(ee)}),null}}if(!q)return s.log("warn","PROJECT_NONE","No projects found"),null;let z=N?.folder_id??W.folder_id;if(z)s.log("info","FOLDER_CACHED","Using cached folder",{folder_id:z});else try{s.log("info","FOLDER_FETCH","Fetching default folder",{project_id:q}),z=await g.getDefaultFolder(q),s.log("info","FOLDER_OK","Default folder resolved",{folder_id:z}),z&&ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{folderId:z})}catch(ee){return s.log("error","FOLDER_FAILED","Default folder fetch failed",{error:String(ee)}),null}return{projectId:q,folderId:z??""}},[W.project_id,W.folder_id,Ot,ve,u,s,w.creds]),we=(0,P.useCallback)(x=>{let S=b(),g={...x,id:S};X((0,R.jsx)(xi,{entry:g}))},[b,X]),re=(0,P.useCallback)((x,S,g,y)=>{X((0,R.jsx)(Bi,{status:x,command:S,message:g,details:y}))},[X]),Mo=(0,P.useCallback)(async(x,S)=>{let g=s.nextRunIndex();Ke.current=g,_t.current=x,s.logRunStart(g,x,S??""),s.setFirstRun(x,S??"");let y=w.getResolvedBasicAuth(),A=y,N=null;if(!A&&(N=await w.getToken(),!N)){we({type:"error",text:"Not authenticated. Run /login first."});return}let q={basicAuth:y??null,token:N,resolver:w.getResolver(),resolvedCreds:null};$n.current=q;let z=w.creds.getActiveProfile()??"default",ee=w.creds.getDefaultEnv();Hn(w.creds,u,z,ee,(Ie,ot,ct,mt)=>s.log(Ie,ot,ct,mt));let se=u.load();if(Ge(se),g===0&&!o){s.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let Ie=await Fo(),ot=ce(ve),ct=A?{username:A.username,access_key:A.access_key}:await Ot();if(ct){let mt=await Sr({tmsBaseUrl:ot.tmsBaseUrl,auth:{username:ct.username,access_key:ct.access_key},objective:x,url:S??W.default_url??"",projectId:Ie?.projectId??se.project_id??"",folderId:Ie?.folderId??se.folder_id??"",hasCustomProfile:!!W.chrome_profile_path,log:(Ur,Bt,Hr,Vs)=>s.log(Ur,Bt,Hr,Vs)});mt&&(s.setTestId(mt),Ie?.projectId&&s.setProjectId(Ie.projectId))}}let fe=null;if(Ce.useCft)we({type:"info",text:"CfT mode: Playwright will manage browser"});else if(Ce.wsEndpoint)we({type:"info",text:`WS endpoint: ${Ce.wsEndpoint.slice(0,60)}...`});else if(Ce.cdpEndpoint)we({type:"info",text:`CDP endpoint: ${Ce.cdpEndpoint}`});else{we({type:"info",text:"Starting Chrome..."});try{fe=await Vn.ensureChrome(S)}catch(ot){we({type:"error",text:sr(ot)});return}s.logChromeLaunch(fe.port,fe.cdpEndpoint),we({type:"info",text:`Chrome ready (port ${fe.port})`});let Ie=dr({headless:Ce.headless,cdpEndpoint:fe.cdpEndpoint,chromePid:fe.process.pid});Ie&&(St.current=Ie,ze("marker-overlay",()=>Ie.kill()))}let ut=wr({objective:x,globalDir:Cr(Me,"variables"),localDir:Cr(process.cwd(),".testmuai","variables")});s.setAuteurVariables(ut.auteur),Ht.current=ut;let Ct=A&&!o?await yr({variables:ut,auth:A,orgId:String((await Ot())?.org_id??""),env:ve,localMode:o,log:(Ie,ot,ct,mt)=>s.log(Ie,ot,ct,mt)}):{};cn.current=Ct;let ft=on(Cr(Me,"global-memory.md")),fn=on(Cr(process.cwd(),".testmuai","context.md")),mn=fe?{cdpEndpoint:fe.cdpEndpoint,instance:fe,tempDir:null}:Ce.wsEndpoint?{wsEndpoint:Ce.wsEndpoint,instance:null,tempDir:null}:Ce.cdpEndpoint?{cdpEndpoint:Ce.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null},pn=_r({objective:ut.auteurObjective,url:S,model:W.model,chrome:mn,auth:q,sessionId:s.sessionId,runIndex:g,windowSize:W.window_size,maxSteps:Ce.maxSteps,headless:Ce.headless,variables:Object.keys(ut.auteur).length>0?ut.auteur:void 0,globalContext:ft??void 0,localContext:fn??void 0,sessionContext:s.getContext()});S&&I(S),le(null),H.startRun(pn,{environment:ve,mode:W.mode,log:(Ie,ot,ct,mt)=>s.log(Ie,ot,ct,mt)}),C(Ie=>Ie+1)},[w,Vn,u,W,s,ve,H,we,Ce,Fo,Ot]),Br=(0,P.useRef)(null);(0,P.useEffect)(()=>{if(H.bifurcationInfo&&H.bifurcationInfo!==Br.current){Br.current=H.bifurcationInfo;let{flows:x,isSingleFlow:S}=H.bifurcationInfo;if(S&&x.length===1&&x[0])s.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:x[0]}),we({type:"info",text:`Objective: ${x[0]}`});else if(!S&&x.length>1){let g=[`Bifurcated into ${x.length} flows:`];x.forEach((y,A)=>g.push(` ${A+1}. ${y}`)),s.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:x.length}),we({type:"info",text:g.join(`
|
|
38
|
+
`)})}}},[H.bifurcationInfo,s,we]);let jr=P.default.useRef(null),$r=P.default.useRef(0),Lr=P.default.useRef(0);(0,P.useEffect)(()=>{if(H.lastRunEnd&&H.lastRunEnd!==jr.current){jr.current=H.lastRunEnd;let{status:x,duration:S,summary:g,reason:y,context:A}=H.lastRunEnd,{passed:N,failed:q,total:z}=Rn(H.steps);$r.current+=z,Lr.current+=S??0,le({status:x,duration:S??0,summary:g??"",stepsPassed:N,stepsFailed:q,stepsTotal:z,reason:y,finalState:H.lastRunEnd?.final_state,creditsConsumed:H.lastRunEnd?.credits_consumed}),s.logRunEnd(Ke.current,x,S,g);let ee=H.bifurcationInfo,se=ee&&!ee.isSingleFlow?ee.flows:null,fe=yn(H.lastRunEnd,Ke.current,se),ut=_n(H.lastRunEnd,_t.current,Ke.current,fe);s.addRunResult(ut,H.lastRunEnd?.total_runs);let Ct=H.lastRunEnd?.per_flow_metadata;if(ee&&!ee.isSingleFlow&&Ct&&Ct.length>1)for(let ft=0;ft<Ct.length;ft++){let fn=Ct[ft],mn=H.steps[ft],pn=mn?.children??[],Ie=pn.filter(Bt=>Bt.status==="passed").length,ot=pn.filter(Bt=>Bt.status==="failed").length,ct=pn.reduce((Bt,Hr)=>Bt+(Hr.duration??0),0),mt=mn?.status==="failed"?"failed":"passed",Ur=ee.flows[ft]??mn?.objective??_t.current;s.addFlow({runIndex:Ke.current,flowId:ee.flows[ft],objective:Ur,status:mt,summary:fn.summary??"",duration:ct,steps:Ie+ot,stepsPassed:Ie,stepsFailed:ot,reason:fn.error_message??void 0,creditsConsumed:fn.credits_consumed??void 0})}else s.addFlow({runIndex:Ke.current,objective:_t.current,status:x,summary:g??"",duration:S??0,steps:z,stepsPassed:N,stepsFailed:q,reason:y,creditsConsumed:H.lastRunEnd?.credits_consumed})}},[H.lastRunEnd,s,we]);let Vr=(0,P.useRef)(null);(0,P.useEffect)(()=>{H.askingUser&&(Vr.current=H.askingUser)},[H.askingUser]);let Nr=(0,P.useRef)(null);(0,P.useEffect)(()=>{if(ae&&!H.isRunning&&H.lastRunEnd){if(Nr.current===H.lastRunEnd)return;Nr.current=H.lastRunEnd,X((0,R.jsxs)(p,{flexDirection:"column",children:[(0,R.jsx)(Vi,{status:ae.status,steps:ae.stepsTotal,duration:ae.duration,creditsConsumed:ae.creditsConsumed,reason:ae.reason}),(0,R.jsx)(Ni,{})]})),le(null)}},[ae,H.isRunning,H.lastRunEnd,X]),(0,P.useEffect)(()=>{St.current?.setRunActive(H.isRunning)},[H.isRunning]),(0,P.useEffect)(()=>{if(H.runError&&!H.isRunning){let x=H.runError.trim();s.log("error","RUNNER_ERROR","Runner error occurred",{error:x}),s.escalateRun(s.nextRunIndex()-1);let g=x.split(`
|
|
55
39
|
`).slice(-8).join(`
|
|
56
|
-
`);
|
|
57
|
-
${w}`})}},[H.runError,H.isRunning,le,i]);let jn=(0,$.useCallback)(async()=>{i.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),I(Bn()),x({status:"uploading"});let S=T.getResolvedBasicAuth(),R=null;if(!S&&(R=await T.getToken(),!R))return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let w=B??await Nt();if(!w)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:W.project_id,session_dir:i.sessionDir,run_dirs:i.getRunDirs()});let k={basicAuth:S??null,token:R,resolver:T.getResolver(),resolvedCreds:w};$e.current&&(i.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await $e.current.drain(),i.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let L=Tn({session:i,env:pe,auth:k,variables:$t.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:Bt.current,projectId:W.project_id,folderId:W.folder_id,totalSteps:Rr.current,totalDuration:Ar.current,codeExport:kn({codeExport:e,codeLanguage:t,skipCodeValidation:n},W.code_export),onProgress:(z,Y,fe)=>{i.log("info","EXIT_PROGRESS","Upload progress",{step:z,status:Y,detail:fe}),I(we=>zo(we,z,Y,fe))},log:(z,Y,fe,we)=>i.log(z,Y,fe,we)}),q=await new qo(L).execute();if(q.success){i.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:q.testId,testcase_id:q.testcaseId??null,share_id:q.shareId??null}),i.setUploadStatus("uploaded"),q.testId&&i.setTestId(q.testId),q.testcaseId&&i.setTestcaseId(q.testcaseId);let z=ae(pe),Y=W.project_id,fe=q.testcaseId&&q.shareId&&Y?Kt(z.testManagerUiUrl,Y,q.testcaseId,q.shareId):void 0,we=q.testcaseId&&Y?An(z.testManagerUiUrl,Y,q.testcaseId):void 0;x({status:"success",testUrl:fe,testCaseLink:we,codeExportDir:q.codeExportDir}),Os({shareableLink:fe,testCaseLink:we,codeExportDir:q.codeExportDir})}else i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:q.error}),i.setUploadStatus("failed",q.error),x({status:"failed",error:q.error});return q},[T,pe,i,W,B,Nt]),Lo=(0,$.useCallback)(async()=>{if(!(i.nextRunIndex()>0)){le({type:"info",text:"No runs in current session."});return}if(H.isRunning){le({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return}i.log("info","SESSION_RESET_START","Starting session reset via /new"),Ie(!0);let R=i.getFlows();R.length>0&&ue((0,j.jsx)(fo,{flows:R}));let w=null;if(!s)try{w=await jn()??null}catch(L){i.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(L)}),le({type:"error",text:"Upload failed \u2014 session data saved locally."})}if(w?.success&&w.testcaseId){let L=ae(pe),G=W.project_id;ue((0,j.jsx)(Fr,{shareableLink:w.shareId&&G?Kt(L.testManagerUiUrl,G,w.testcaseId,w.shareId):void 0,testCaseLink:G?An(L.testManagerUiUrl,G,w.testcaseId):void 0,codeExportDir:w.codeExportDir,autoExit:!1}))}i.testId&&re(L=>[...L,{testId:i.testId,runCount:P}]),On.killChrome(),await i.finish("complete");let k=new bt;k.start({model:W.model,environment:pe,profile:Yt??null}),o.current=k,l(L=>L+1),i.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:k.sessionId}),C(0),Rr.current=0,Ar.current=0,et.current=0,Et.current="",$t.current=null,Bt.current={},$e.current=null,Ln.current=0,Ir.current=0,Dn.current=null,Tr.current=null,Cr.current=null,Er.current=null,ne(null),b(null),x(null),I(Bn()),Ie(!1),ue((0,j.jsxs)(y,{flexDirection:"column",marginY:1,children:[(0,j.jsx)(f,{color:v.dimmed,children:"\u2500".repeat(44)}),(0,j.jsx)(f,{color:v.green,bold:!0,children:"New session started"})]}))},[i,H,le,ue,s,jn,On,P,W,pe,Yt,a]),$o=(0,$.useCallback)(async()=>{await i.finish("complete"),X(0,"Session complete")},[i]),Ei=(0,$.useCallback)(async S=>{Re(!1);let R=i.testId??(J.length>0?J[J.length-1].testId:null);if(S&&R){i.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:S});try{let w=ae(pe),k=T.getResolvedBasicAuth();k&&await hr({tmsBaseUrl:w.tmsBaseUrl,username:k.username,accessKey:k.access_key,testId:R,feedbackType:S,log:(L,G,q,z)=>i.log(L,G,q,z)})}catch(w){i.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(w)})}}else i.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");$o()},[pe,T,i,$o,J]),Ut=(0,$.useCallback)(async()=>{if(O)return;if(i.log("info","EXIT_START","TUI exit initiated"),i.nextRunIndex()>0&&!s){i.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),te(!0);try{await jn()}catch(w){i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(w)})}i.testId&&re(w=>[...w,{testId:i.testId,runCount:P}]),await i.finish("complete")}if(!(i.testId??(J.length>0?J[J.length-1].testId:null))||s){await i.finish("complete"),X(0,"No test ID \u2014 quick exit");return}te(!0),Re(!0)},[O,i,s,jn,P,J]);(0,$.useEffect)(()=>{if(!O)return;let S=300*1e3,R=setTimeout(async()=>{i.setUploadStatus("failed","Upload timed out after 5m"),await i.finish("complete"),X(0,"Upload timed out after 5m")},S);return()=>clearTimeout(R)},[O,i]);let Ln=$.default.useRef(0),kr=$.default.useRef(null),Ir=$.default.useRef(0);je((S,R)=>{if(R.ctrl&&S==="c"){if(O){Ir.current+=1,Ir.current>=2&&(i.setUploadStatus("pending","Force exit by user"),i.finish("complete"),X(0,"Force exit by user"));return}if(H.isRunning){H.cancelRun(),le({type:"info",text:"Run cancelled."}),Ln.current++,kr.current&&clearTimeout(kr.current),kr.current=setTimeout(()=>{Ln.current=0},2e3),Ln.current>=2&&Ut();return}Ut()}});let Bo=$.default.useMemo(()=>{let S=T.creds.getActiveProfile()??"none",R=T.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:be.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:w=>{dn(k=>({...k,headless:w==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(be.maxSteps),onValue:w=>{let k=parseInt(w,10);k>0&&dn(L=>({...L,maxSteps:k}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:be.timeout?String(be.timeout):"",placeholder:"0 = no timeout",onValue:w=>{let k=parseInt(w,10);dn(L=>({...L,timeout:isNaN(k)?0:k}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:be.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:w=>{dn(k=>({...k,cdpEndpoint:w}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:be.wsEndpoint,placeholder:"wss://...",onValue:w=>{dn(k=>({...k,wsEndpoint:w}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{T.logout().then(w=>{Xe();let k=T.creds.getActiveProfile(),L=T.creds.getDefaultEnv();Ye(k,L),Ct().catch(()=>{}),le(w?{type:"info",text:`Logged out: ${w.profile} [${w.env}]`}:{type:"info",text:"No active profile"})}).catch(()=>{le({type:"error",text:"Logout failed"})})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let w=T.creds.getActiveProfile()??"none",k=T.creds.getDefaultEnv(),L=T.creds.loadBasicAuth(w,k),G=L?"basic":T.creds.loadCredentials(w,k)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:w},{key:"Environment",value:k}]},{label:"Authentication",entries:[{key:"Method",value:G},...L?[{key:"Username",value:L.username}]:[]]},{label:"Token",entries:[{key:"Status",value:T.tokenValid?"valid":"not logged in",color:T.tokenValid?v.statusPass:v.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let w=T.creds.getActiveProfile()??"default",k=T.creds.getDefaultEnv(),L=ae(k);try{let G=T.getBasicAuth(),q=G?null:await T.getToken();if(!G&&!q){F({text:"Not authenticated. Run /login first.",color:v.red});return}let{ControllerClient:z}=await import("./controller-client-7BIK5FYL.js"),fe=await(G?new z(L.controllerBaseUrl,{username:G.username,accessKey:G.access_key}):new z(L.controllerBaseUrl,q)).getCreditBalance();F({text:`Credits \u2014 available: ${fe.available_credits}, total: ${fe.total_credits} (${w} / ${k})`,color:v.green})}catch(G){F({text:`Balance check failed: ${G instanceof Error?G.message:String(G)}`,color:v.red})}N.current&&clearTimeout(N.current),N.current=setTimeout(()=>{F(null),N.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:W.mode}]},{label:"Browser",entries:[{key:"Window",value:`${W.window_size.width}x${W.window_size.height}`},{key:"Chrome Profile",value:W.chrome_profile_path?W.chrome_profile_path.split("/").pop()??W.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:W.project_name?`${W.project_name} (${W.project_id})`:W.project_id??"(none)"},{key:"Folder",value:W.folder_name?`${W.folder_name} (${W.folder_id})`:W.folder_id??"(none)"},{key:"Default URL",value:mt}]},{label:"Code Export",entries:[{key:"Enabled",value:W.code_export.enabled?"yes":"no"},{key:"Skip Validation",value:W.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",...W.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:v.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${W.window_size.width}x${W.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:W.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:w=>{(w==="action"||w==="testing")&&(c.set("mode",w),nt(c.load()))}},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:W.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:W.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:w=>{c.set("code_export",{...W.code_export,enabled:w==="on"}),nt(c.load())}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:W.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:w=>{c.set("code_export",{...W.code_export,skip_validation:w==="on"}),nt(c.load())}}]}]},{id:"help",label:"Help",type:"submenu",children:[{id:"help-paths",label:"File Paths",type:"action",onInfo:()=>({title:"File Paths",sections:[{label:"Variables",entries:[{key:"Global dir",value:`${ut(Ee,"variables")}/*.json`},{key:"Local dir",value:"{cwd}/.testmuai/variables/*.json"},{key:"Format",value:'{ "key": { "value": "...", "secret": false } }'},{key:"Usage",value:"{{key}} in objectives"}]},{label:"Context Files",entries:[{key:"Global",value:ut(Ee,"global-memory.md")},{key:"Local",value:"{cwd}/.testmuai/context.md"}]},{label:"Config",entries:[{key:"TUI config",value:ut(Ee,"tui-config.json")},{key:"Auth",value:ut(Ee,"config.json")},{key:"Sessions",value:`${ut(Ee,"sessions")}/`}]}]})},{id:"help-variables",label:"Variables",type:"action",onInfo:()=>({title:"Variables",sections:[{label:"Loading Order (later wins)",entries:[{key:"1. Global",value:`${ut(Ee,"variables")}/*.json`},{key:"2. Local",value:"{cwd}/.testmuai/variables/*.json"},{key:"3. CLI",value:"--variables-file <path>"},{key:"4. Inline",value:`--variables '{"key": {"value": "..."}}"`}]},{label:"Format",entries:[{key:"Normal",value:'{ "username": { "value": "alice", "secret": false } }'},{key:"Secret",value:'{ "api_key": { "value": "sk-...", "secret": true } }'}]},{label:"Usage",entries:[{key:"Syntax",value:"{{key}} in objectives to reference variables"}]}]})},{id:"help-context",label:"Context Files",type:"action",onInfo:()=>({title:"Context Files",sections:[{entries:[{key:"Description",value:"Additional instructions for the agent"}]},{label:"Paths",entries:[{key:"Global",value:ut(Ee,"global-memory.md")},{key:"Local",value:"{cwd}/.testmuai/context.md"}]},{label:"CLI Overrides",entries:[{key:"Global",value:"--global-context <file>"},{key:"Local",value:"--local-context <file>"}]}]})}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{Ut()}}]},[T,c,W,le,Ut,be,Xe]),Ci=(0,$.useCallback)(S=>{if(H.askingUser){ue((0,j.jsxs)(y,{children:[(0,j.jsx)(f,{color:"#888888",children:"\u2192 "}),(0,j.jsx)(f,{color:"#888888",children:"You answered: "}),(0,j.jsx)(f,{children:S})]})),H.sendAnswer(S);return}if(i.logCommand(S),H.isRunning){le({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let R=Is(S);if(R)switch(R.command){case"login":case"logout":case"whoami":case"profiles":case"balance":case"auth":Ft("auth");return;case"config":Ft("config");return;case"help":Ft("help");return;case"update":{(async()=>{let{getUpdateCommand:w}=await import("./version-check-AGBPWJQA.js");le({type:"info",text:`To update kane-cli, run: ${w()}`})})();return}case"summary":{let w=i.getFlows();if(w.length===0){le({type:"info",text:"No runs yet in this session."});return}let k=R.args.index?parseInt(R.args.index,10):void 0;if(k!==void 0&&!i.getFlow(k)){le({type:"error",text:`No flow at index ${k}. ${w.length} flow${w.length===1?"":"s"} available. Use /summary to see all.`});return}ue((0,j.jsx)(fo,{flows:w,filterIndex:k}));return}case"new":Lo();return;case"cancel":H.cancelRun(),le({type:"info",text:"Run cancelled."});return;case"clear":return;case"exit":Ut();return;default:le({type:"error",text:`Unknown command: /${R.command}`});return}if(S.trim().toLowerCase()==="exit"){Ut();return}ue((0,j.jsxs)(y,{children:[(0,j.jsx)(f,{color:"#b388ff",children:"\u276F "}),(0,j.jsx)(f,{children:S})]})),jo(S,mt)},[H,le,ue,i,jo,Ut,Lo]),Vo=T.getAuthInfo(),Ri=Vo?Vo.method==="basic"?"basic auth":"oauth":"not logged in";return(0,j.jsxs)(y,{flexDirection:"column",children:[oe.length>0&&(0,j.jsx)(Qt,{items:oe,children:S=>(0,j.jsx)(y,{paddingX:1,children:S.content},S.id)}),!g&&!dt&&(0,j.jsx)(ns,{onComplete:()=>{let S=T.creds.getActiveProfile(),R=T.creds.getDefaultEnv(),w=S?T.creds.loadCredentials(S,R):null,k=S?T.creds.loadBasicAuth(S,R):null,L=!!(w||k),G=k?.username??S??null;ue((0,j.jsx)(Un,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:en,authenticated:L,user:G})),Xt(!0);let q=(z,Y,fe,we)=>{i.log(z,Y,fe,we)};ir(T.creds,q).then(z=>{if(z.status==="authenticated"){let{profile:Y,env:fe,tmsCreds:we}=z.result;T.creds.setActiveProfile(Y),T.creds.setDefaultEnv(fe),Xe(),D(we),ce("ready"),p(!0)}else z.status==="needs_pick"?(de(z.profiles),ce("pick")):ce("login")}).catch(z=>{i.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(z)}),ce("login")}),r&&r.then(async z=>{if(z){let{getUpdateCommand:Y}=await import("./version-check-AGBPWJQA.js");le({type:"info",text:`Update available: ${z.current} \u2192 ${z.latest} \u2014 run \`${Y()}\` to update`})}}).catch(()=>{})}}),!g&&Ue==="booting"&&dt&&(0,j.jsx)(y,{paddingX:1,children:(0,j.jsx)(f,{color:"yellow",children:"Checking authentication..."})}),!g&&Ue==="pick"&&(0,j.jsx)(Ta,{profiles:Ae,onCancel:()=>ce("login"),onSelect:async(S,R)=>{T.creds.setActiveProfile(S),T.creds.setDefaultEnv(R),Xe(),Me(!0);let w=(k,L,G,q)=>{i.log(k,L,G,q)};try{let k=await on(T.creds,S,R,w);Me(!1),k.status==="authenticated"?(Ye(S,R),ce("ready"),p(!0)):ce("login")}catch{Me(!1),ce("login")}},validating:Oe}),!g&&Ue==="login"&&!K&&(0,j.jsx)(tn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:T.creds.listProfiles(),onBasicLogin:(S,R,w,k)=>{T.creds.saveBasicAuth(S,R,{username:w,access_key:k}),T.creds.setActiveProfile(S),T.creds.setDefaultEnv(R),T.setTokenValid(!0),Xe()},onOAuthLogin:async(S,R)=>{T.creds.setDefaultEnv(R),await T.login(S),Xe()},onComplete:(S,R)=>{Ct(R).then(()=>{Xe(),Se({phase:"project",profile:S,env:R})}).catch(()=>{Se({phase:"project",profile:S,env:R})})},onCancel:()=>{X(0,"Login cancelled at startup")}}),!g&&Ue==="login"&&K?.phase==="project"&&(0,j.jsx)(kt,{resolver:T.getResolver(),currentProjectId:null,env:K.env,onSelect:(S,R)=>{T.creds.saveProfileConfig(K.profile,K.env,{project_id:S,project_name:R}),Se({...K,phase:"folder"})},onCancel:()=>{Ye(K.profile,K.env),Se(null),ce("ready"),p(!0)}}),!g&&Ue==="login"&&K?.phase==="folder"&&(0,j.jsx)(It,{resolver:T.getResolver(),projectId:T.creds.loadProfileConfig(K.profile,K.env)?.project_id??"",currentFolderId:null,env:K.env,onSelect:(S,R)=>{T.creds.saveProfileConfig(K.profile,K.env,{folder_id:S,folder_name:R}),Ye(K.profile,K.env),Se(null),ce("ready"),p(!0)},onCancel:async()=>{let S=T.creds.loadProfileConfig(K.profile,K.env);if(S?.project_id)try{let w=T.getResolver()?.cached;if(w){let k=ae(K.env),G=await new lt(k.tmsBaseUrl,w.username,w.access_key).getDefaultFolder(S.project_id);G&&T.creds.saveProfileConfig(K.profile,K.env,{folder_id:G,folder_name:"Default"})}}catch{}Ye(K.profile,K.env),Se(null),ce("ready"),p(!0)}}),g&&tt==="menu"&&!O&&(0,j.jsx)(y,{marginBottom:1,children:(0,j.jsxs)(y,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,j.jsx)(f,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,j.jsx)(f,{color:v.dimmed,children:" \u2502 "}),(0,j.jsx)(f,{color:"#ff9500",children:W.model}),(0,j.jsx)(f,{color:v.dimmed,children:" \u2502 "}),(0,j.jsx)(f,{color:v.dimmed,children:Ri}),(0,j.jsx)(f,{color:v.dimmed,children:" \u2502 "}),(0,j.jsxs)(f,{color:v.dimmed,children:[Yt??"no profile","/",pe]})]})}),g&&!O&&(0,j.jsxs)(y,{flexDirection:"column",flexGrow:1,children:[tt==="menu"&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(Yr,{items:Bo,onRunSelected:()=>Sr("chat"),renderLoginWizard:S=>{let R=K?.phase??"wizard";if(R==="project")return(0,j.jsx)(kt,{resolver:T.getResolver(),currentProjectId:null,env:K.env,onSelect:(w,k)=>{T.creds.saveProfileConfig(K.profile,K.env,{project_id:w,project_name:k}),Se(L=>L?{...L,phase:"folder"}:null)},onCancel:()=>{Ye(K.profile,K.env),Se(null),S()}});if(R==="folder"){let w=T.creds.loadProfileConfig(K.profile,K.env);return(0,j.jsx)(It,{resolver:T.getResolver(),projectId:w?.project_id??"",currentFolderId:null,env:K.env,onSelect:(k,L)=>{T.creds.saveProfileConfig(K.profile,K.env,{folder_id:k,folder_name:L}),Ye(K.profile,K.env),Se(null),S()},onCancel:async()=>{let k=T.creds.loadProfileConfig(K.profile,K.env);if(k?.project_id)try{let G=T.getResolver()?.cached;if(G){let q=ae(K.env),Y=await new lt(q.tmsBaseUrl,G.username,G.access_key).getDefaultFolder(k.project_id);Y&&T.creds.saveProfileConfig(K.profile,K.env,{folder_id:Y,folder_name:"Default"})}}catch{}Ye(K.profile,K.env),Se(null),S()}})}return(0,j.jsx)(tn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:T.creds.listProfiles(),onBasicLogin:(w,k,L,G)=>{T.creds.saveBasicAuth(w,k,{username:L,access_key:G}),T.creds.setActiveProfile(w),T.creds.setDefaultEnv(k),T.setTokenValid(!0),Xe()},onOAuthLogin:async(w,k)=>{T.creds.setDefaultEnv(k),await T.login(w),Xe()},onComplete:(w,k)=>{Ct(k).then(()=>{Se({phase:"project",profile:w,env:k})}).catch(()=>{Se({phase:"project",profile:w,env:k})})},onCancel:()=>{Se(null),S()}})},renderProfilesView:S=>(0,j.jsx)($r,{creds:T.creds,onSwitch:(R,w)=>{T.creds.setActiveProfile(R),T.creds.setDefaultEnv(w),Ye(R,w),Xe(),Ct(w).catch(()=>{}),le({type:"info",text:`Switched to ${R} [${w}]`})},onCancel:S}),renderChromeProfilePicker:S=>(0,j.jsx)(Br,{currentPath:W.chrome_profile_path,onSelect:R=>{c.set("chrome_profile_path",R),nt(c.load())},onCancel:S}),renderProjectPicker:S=>(0,j.jsx)(kt,{resolver:T.getResolver(),currentProjectId:W.project_id,env:pe,onSelect:(R,w)=>{c.save({project_id:R,project_name:w});let k=T.creds.getActiveProfile(),L=T.creds.getDefaultEnv();k&&T.creds.saveProfileConfig(k,L,{project_id:R,project_name:w}),nt(c.load()),S()},onCancel:S}),renderFolderPicker:S=>(0,j.jsx)(It,{resolver:T.getResolver(),projectId:W.project_id??"",currentFolderId:W.folder_id,env:pe,onSelect:(R,w)=>{c.save({folder_id:R,folder_name:w});let k=T.creds.getActiveProfile(),L=T.creds.getDefaultEnv();k&&T.creds.saveProfileConfig(k,L,{folder_id:R,folder_name:w}),nt(c.load()),S()},onCancel:S}),renderWindowSizePicker:S=>(0,j.jsx)(no,{currentWidth:W.window_size.width,currentHeight:W.window_size.height,onSelect:(R,w)=>{c.set("window_size",{width:R,height:w}),nt(c.load()),S()},onCancel:S})}),_e&&(0,j.jsx)(y,{paddingX:1,marginTop:1,children:(0,j.jsx)(f,{color:_e.color,children:_e.text})})]}),tt==="chat"&&(0,j.jsxs)(j.Fragment,{children:[(()=>{let S=zn({isRunning:H.isRunning,bifurcationInfo:H.bifurcationInfo,steps:H.steps,cmInitCounts:H.cmInitCounts});return S?(0,j.jsx)(qn,{label:S.label,hasBifurcation:S.hasBifurcation}):null})(),H.isRunning&&H.steps.length>0&&(0,j.jsx)(Kn,{steps:H.steps,bifurcated:!!H.bifurcationInfo&&!H.bifurcationInfo.isSingleFlow,flows:H.bifurcationInfo?.flows,cmInitCounts:H.cmInitCounts,onStepCommit:ue},`run-${et.current}`),Vt&&!H.isRunning&&(()=>{let S=Bo.find(R=>R.id===Vt);return S?.children?(0,j.jsx)(Yr,{items:S.children,onRunSelected:()=>Ft(null),onDismiss:()=>Ft(null),renderLoginWizard:R=>{let w=K?.phase??"wizard";if(w==="project")return(0,j.jsx)(kt,{resolver:T.getResolver(),currentProjectId:null,env:K.env,onSelect:(k,L)=>{T.creds.saveProfileConfig(K.profile,K.env,{project_id:k,project_name:L}),Se(G=>G?{...G,phase:"folder"}:null)},onCancel:()=>{Ye(K.profile,K.env),Se(null),R()}});if(w==="folder"){let k=T.creds.loadProfileConfig(K.profile,K.env);return(0,j.jsx)(It,{resolver:T.getResolver(),projectId:k?.project_id??"",currentFolderId:null,env:K.env,onSelect:(L,G)=>{T.creds.saveProfileConfig(K.profile,K.env,{folder_id:L,folder_name:G}),Ye(K.profile,K.env),Se(null),R()},onCancel:async()=>{let L=T.creds.loadProfileConfig(K.profile,K.env);if(L?.project_id)try{let q=T.getResolver()?.cached;if(q){let z=ae(K.env),fe=await new lt(z.tmsBaseUrl,q.username,q.access_key).getDefaultFolder(L.project_id);fe&&T.creds.saveProfileConfig(K.profile,K.env,{folder_id:fe,folder_name:"Default"})}}catch{}Ye(K.profile,K.env),Se(null),R()}})}return(0,j.jsx)(tn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:T.creds.listProfiles(),onBasicLogin:(k,L,G,q)=>{T.creds.saveBasicAuth(k,L,{username:G,access_key:q}),T.creds.setActiveProfile(k),T.creds.setDefaultEnv(L),T.setTokenValid(!0),Xe()},onOAuthLogin:async(k,L)=>{T.creds.setDefaultEnv(L),await T.login(k),Xe()},onComplete:(k,L)=>{Ct(L).then(()=>{Se({phase:"project",profile:k,env:L})}).catch(()=>{Se({phase:"project",profile:k,env:L})})},onCancel:()=>{Se(null),R()}})},renderProfilesView:R=>(0,j.jsx)($r,{creds:T.creds,onSwitch:(w,k)=>{T.creds.setActiveProfile(w),T.creds.setDefaultEnv(k),Ye(w,k),Xe(),Ct(k).catch(()=>{}),le({type:"info",text:`Switched to ${w} [${k}]`}),R()},onCancel:R}),renderChromeProfilePicker:R=>(0,j.jsx)(Br,{currentPath:W.chrome_profile_path,onSelect:w=>{c.save({chrome_profile_path:w}),nt(c.load()),R()},onCancel:R}),renderProjectPicker:R=>(0,j.jsx)(kt,{resolver:T.getResolver(),currentProjectId:W.project_id,env:pe,onSelect:(w,k)=>{c.save({project_id:w,project_name:k});let L=T.creds.getActiveProfile();L&&T.creds.saveProfileConfig(L,pe,{project_id:w,project_name:k}),nt(c.load()),R()},onCancel:R}),renderFolderPicker:R=>(0,j.jsx)(It,{resolver:T.getResolver(),projectId:W.project_id??"",currentFolderId:W.folder_id,env:pe,onSelect:(w,k)=>{c.save({folder_id:w,folder_name:k});let L=T.creds.getActiveProfile();L&&T.creds.saveProfileConfig(L,pe,{folder_id:w,folder_name:k}),nt(c.load()),R()},onCancel:R}),renderWindowSizePicker:R=>(0,j.jsx)(no,{currentWidth:W.window_size.width,currentHeight:W.window_size.height,onSelect:(w,k)=>{c.set("window_size",{width:w,height:k}),nt(c.load()),R()},onCancel:R})},Vt):null})(),Vt&&_e&&(0,j.jsx)(y,{paddingX:1,marginTop:1,children:(0,j.jsx)(f,{color:_e.color,children:_e.text})}),!Vt&&(0,j.jsx)(Mn,{onSubmit:Ci,onEscape:void 0,history:xi,commands:Ps,placeholder:H.askingUser?"Type your answer...":H.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)"})]})]}),g&&O&&u&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(Vr,{steps:h,status:u.status,testUrl:u.testUrl,error:u.error}),u.status==="success"&&(0,j.jsx)(Fr,{shareableLink:u.testUrl,testCaseLink:u.testCaseLink,codeExportDir:u.codeExportDir,autoExit:!1})]}),me&&(0,j.jsx)(Jo,{onSubmit:Ei}),ee&&u&&(0,j.jsx)(Vr,{steps:h,status:u.status,error:u.error}),g&&!O&&(0,j.jsx)(Qo,{profile:Yt,environment:pe,model:W.model,tokenValid:T.tokenValid,sessionId:i.sessionId,runCount:P,viewMode:tt})]})}function Ta({profiles:s,onSelect:e,onCancel:t,validating:n}){let[r,o]=(0,$.useState)(0);return je((a,l)=>{if(!n){if(l.escape){t();return}if(l.upArrow&&r>0&&o(i=>i-1),l.downArrow&&r<s.length-1&&o(i=>i+1),l.return){let i=s[r];e(i.profile,i.env)}}}),(0,j.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,j.jsx)(f,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,j.jsx)(y,{marginTop:1,flexDirection:"column",children:s.map((a,l)=>(0,j.jsxs)(f,{children:[l===r?"\u276F ":" ",(0,j.jsx)(f,{color:l===r?"#ff9500":"white",bold:l===r,children:a.profile}),(0,j.jsxs)(f,{color:"gray",children:[" [",a.env,"]"]})]},`${a.profile}-${a.env}`))}),n&&(0,j.jsx)(y,{marginTop:1,children:(0,j.jsx)(f,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,j.jsx)(y,{marginTop:1,children:(0,j.jsx)(f,{color:"gray",children:"Esc = new login"})})]})}var ye=U(De(),1);var ve=U(Q(),1);function zs({resultRef:s}){let{exit:e}=Zt(),t=(0,ye.useRef)(new He),n=(0,ye.useRef)(new ot),r=(0,ye.useRef)(new bt),o=t.current,a=n.current,l=r.current,i=Fn(),[c,d]=(0,ye.useState)("gate"),[m,g]=(0,ye.useState)(null),[p,_]=(0,ye.useState)(null),[b,E]=(0,ye.useState)(null),[A,P]=(0,ye.useState)(null),C=(0,ye.useCallback)((F,N,u,x)=>l.log(F,N,u,x),[l]),O=(0,ye.useCallback)((F,N)=>{let u=F?o.loadProfileConfig(F,N):null;a.save({project_id:u?.project_id??null,project_name:u?.project_name??null,folder_id:u?.folder_id??null,folder_name:u?.folder_name??null})},[o,a]);je((F,N)=>{N.ctrl&&F==="c"&&X(0,"Ctrl+C exit")});let te=(0,ye.useRef)(!1);ye.default.useEffect(()=>{te.current||(te.current=!0,ir(o,C).then(F=>{g(F),F.status==="authenticated"?(O(F.result.profile,F.result.env),d("input")):F.status==="needs_pick"?d("pick"):(_(F.profile??null),E(F.env??null),d("login"))}).catch(F=>{P(`Auth check failed: ${F instanceof Error?F.message:String(F)}`)}))},[o,C]);let Z=(0,ye.useCallback)(F=>{s.current={objective:F},e()},[s,e]),ne=(0,ye.useCallback)(async(F,N)=>{o.setActiveProfile(F),o.setDefaultEnv(N),(await on(o,F,N,C)).status==="authenticated"?(O(F,N),d("input")):(_(F),E(N),d("login"))},[o,C,O]),_e=(0,ye.useCallback)(()=>{let F=o.getActiveProfile(),N=o.getDefaultEnv();if(!F)return null;let u=ae(N),x=o.loadBasicAuth(F,N);return new pt(u.controllerBaseUrl,async()=>o.loadCredentials(F,N)?.access_token??null,x,C)},[o,C]);if(c==="gate")return(0,ve.jsx)(y,{paddingX:1,children:(0,ve.jsx)(f,{color:"yellow",children:"Checking authentication..."})});if(A)return(0,ve.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,ve.jsx)(f,{color:"red",children:A}),(0,ve.jsx)(f,{color:"gray",children:"Press Ctrl+C to exit."})]});if(c==="pick"&&m?.status==="needs_pick")return(0,ve.jsx)(ka,{profiles:m.profiles,onSelect:ne});if(c==="login"||c==="login-project"||c==="login-folder"){if(c==="login-project")return(0,ve.jsx)(kt,{resolver:_e(),currentProjectId:null,env:b??"prod",onSelect:(F,N)=>{let u=p??o.getActiveProfile()??"default",x=b??o.getDefaultEnv();o.saveProfileConfig(u,x,{project_id:F,project_name:N}),d("login-folder")},onCancel:()=>{let F=p??o.getActiveProfile()??"default",N=b??o.getDefaultEnv();O(F,N),d("input")}});if(c==="login-folder"){let F=p??o.getActiveProfile()??"default",N=b??o.getDefaultEnv(),u=o.loadProfileConfig(F,N);return(0,ve.jsx)(It,{resolver:_e(),projectId:u?.project_id??"",currentFolderId:null,env:N,onSelect:(x,h)=>{o.saveProfileConfig(F,N,{folder_id:x,folder_name:h}),O(F,N),d("input")},onCancel:async()=>{if(u?.project_id)try{let x=ae(N),h=o.loadBasicAuth(F,N);if(h){let B=await new lt(x.tmsBaseUrl,h.username,h.access_key).getDefaultFolder(u.project_id);B&&o.saveProfileConfig(F,N,{folder_id:B,folder_name:"Default"})}}catch{}O(F,N),d("input")}})}return(0,ve.jsx)(tn,{devMode:process.env.KANE_DEV_MODE==="1",profiles:o.listProfiles(),onBasicLogin:(F,N,u,x)=>{o.saveBasicAuth(F,N,{username:u,access_key:x}),o.setActiveProfile(F),o.setDefaultEnv(N)},onOAuthLogin:async(F,N)=>{let{LoginFlow:u}=await import("./login-flow-5WUX5JKU.js");o.setDefaultEnv(N),o.setActiveProfile(F),await new u(F,N,o).login()},onComplete:(F,N)=>{_(F),E(N),o.setActiveProfile(F),o.setDefaultEnv(N),d("login-project")},onCancel:()=>{X(0,"Login cancelled")}})}return c==="input"?(0,ve.jsx)(Mn,{onSubmit:Z,onEscape:()=>X(0,"User pressed Escape"),history:i,placeholder:"Type an objective..."}):(0,ve.jsx)(ve.Fragment,{})}function ka({profiles:s,onSelect:e}){let[t,n]=(0,ye.useState)(0),[r,o]=(0,ye.useState)(!1);return je((a,l)=>{if(!r){if(l.escape){X(0,"Profile picker cancelled");return}if(l.upArrow&&t>0&&n(i=>i-1),l.downArrow&&t<s.length-1&&n(i=>i+1),l.return){o(!0);let i=s[t];e(i.profile,i.env).catch(()=>o(!1))}}}),(0,ve.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,ve.jsx)(f,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,ve.jsx)(y,{marginTop:1,flexDirection:"column",children:s.map((a,l)=>(0,ve.jsxs)(f,{children:[l===t?"\u276F ":" ",(0,ve.jsx)(f,{color:l===t?"#ff9500":"white",bold:l===t,children:a.profile}),(0,ve.jsxs)(f,{color:"gray",children:[" [",a.env,"]"]})]},`${a.profile}-${a.env}`))}),r&&(0,ve.jsx)(y,{marginTop:1,children:(0,ve.jsx)(f,{color:"yellow",children:"Validating credentials..."})})]})}var ai=U(ii(),1),{program:Mf,createCommand:Hf,createArgument:Wf,createOption:Kf,CommanderError:Gf,InvalidArgumentError:qf,InvalidOptionArgumentError:zf,Command:li,Argument:Jf,Option:cn,Help:Xf}=ai.default;import{join as zt}from"path";var pi=U(De(),1);var Qe=U(De(),1);var Lt=U(Q(),1);function ci({steps:s,bifurcationInfo:e,perFlowMetadata:t}){return!e||e.isSingleFlow||!t||t.length<=1?null:(0,Lt.jsx)(y,{flexDirection:"column",children:t.map((n,r)=>{let o=s[r],a=o?.children??[],l=a.filter(p=>p.status==="passed").length,i=a.filter(p=>p.status==="failed").length,c=l+i,d=a.reduce((p,_)=>p+(_.duration??0),0),m=o?.status==="failed"?"failed":"passed",g=e.flows[r]??o?.objective??`Flow ${r+1}`;return(0,Lt.jsxs)(y,{flexDirection:"column",marginTop:r>0?1:0,children:[(0,Lt.jsxs)(y,{marginLeft:1,children:[(0,Lt.jsx)(f,{color:"#b388ff",bold:!0,children:"Flow "+(r+1)+": "}),(0,Lt.jsx)(f,{color:"#b388ff",children:g})]}),(0,Lt.jsx)(sn,{status:m,summary:n?.summary??"",duration:d,steps:c,stepsPassed:l,stepsFailed:i,reason:n?.error_message??void 0,creditsConsumed:n?.credits_consumed??void 0})]},`flow-summary-${r}`)})})}var Je=U(Q(),1);function ui({message:s,code:e,remediation:t,docsUrl:n}){return(0,Je.jsx)(Yo,{title:"Error",variant:"error",children:(0,Je.jsxs)(y,{flexDirection:"column",paddingY:1,children:[(0,Je.jsxs)(f,{color:v.red,bold:!0,children:[" \u2717 ",s]}),e&&(0,Je.jsxs)(y,{marginTop:0,marginLeft:5,children:[(0,Je.jsx)(f,{color:v.muted,children:"Code: "}),(0,Je.jsx)(f,{color:v.dimmed,children:e})]}),t&&(0,Je.jsxs)(y,{flexDirection:"column",marginTop:1,marginLeft:5,children:[(0,Je.jsx)(f,{color:v.green,bold:!0,children:"Fix:"}),(0,Je.jsxs)(f,{color:v.cyan,children:["$ ",t]})]}),n&&(0,Je.jsxs)(y,{marginTop:1,marginLeft:5,children:[(0,Je.jsx)(f,{color:v.muted,children:"Docs: "}),(0,Je.jsx)(f,{color:v.cyan,underline:!0,children:n})]})]})})}var Ce=U(Q(),1);function di({config:s,spawnOpts:e,cancelRef:t,banner:n,onComplete:r,onStepEnd:o}){let{exit:a}=Zt(),l=sr(o),i=(0,Qe.useRef)(!1),c=(0,Qe.useRef)(!1),[d,m]=(0,Qe.useState)("");(0,Qe.useEffect)(()=>{i.current||(i.current=!0,l.startRun(s,e))},[s,e,l]),(0,Qe.useEffect)(()=>{t&&(t.current=()=>l.cancelRun())},[t,l]);let g=(0,Qe.useRef)(0);je((b,E)=>{E.ctrl&&b==="c"&&(l.isRunning?(g.current++,g.current>=2?a():l.cancelRun()):a())}),je((b,E)=>{l.askingUser&&(E.return?(l.sendAnswer(d),m("")):E.backspace||E.delete?m(A=>A.slice(0,-1)):b&&!E.ctrl&&!E.meta&&m(A=>A+b))},{isActive:!!l.askingUser}),(0,Qe.useEffect)(()=>{if(!l.isRunning&&l.lastRunEnd&&!c.current){c.current=!0;let{passed:b,failed:E,total:A}=Rn(l.steps),P=l.bifurcationInfo;r({lastRunEnd:l.lastRunEnd,stepsPassed:b,stepsFailed:E,stepsTotal:A,hadError:!1,bifurcationFlows:P&&!P.isSingleFlow?P.flows:null}),a()}},[l.isRunning,l.lastRunEnd,l.steps,r,a]),(0,Qe.useEffect)(()=>{l.runError&&!l.isRunning&&!c.current&&(c.current=!0,r({lastRunEnd:null,stepsPassed:0,stepsFailed:0,stepsTotal:0,hadError:!0,bifurcationFlows:null}),a())},[l.runError,l.isRunning,r,a]);let p=l.lastRunEnd?(()=>{let{passed:b,failed:E,total:A}=Rn(l.steps);return{status:l.lastRunEnd.status,duration:l.lastRunEnd.duration??0,summary:l.lastRunEnd.summary??"",stepsPassed:b,stepsFailed:E,stepsTotal:A,reason:l.lastRunEnd.reason,finalState:l.lastRunEnd.final_state,creditsConsumed:l.lastRunEnd.credits_consumed}})():null,_=(0,Qe.useMemo)(()=>n?[{key:"banner",...n}]:[],[n]);return(0,Ce.jsxs)(y,{flexDirection:"column",children:[(0,Ce.jsx)(Qt,{items:_,children:b=>(0,Ce.jsxs)(y,{flexDirection:"column",marginBottom:1,children:[(0,Ce.jsxs)(y,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,Ce.jsx)(f,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,Ce.jsx)(f,{color:v.dimmed,children:" \u2502 "}),(0,Ce.jsx)(f,{color:v.cyan,children:b.model}),(0,Ce.jsx)(f,{color:v.dimmed,children:" \u2502 "}),(0,Ce.jsx)(f,{color:v.dimmed,children:b.auth})]}),b.status?.map((E,A)=>(0,Ce.jsx)(f,{color:v.dimmed,children:E},A))]},b.key)}),(()=>{let b=zn({isRunning:l.isRunning,bifurcationInfo:l.bifurcationInfo,steps:l.steps,cmInitCounts:l.cmInitCounts});return b?(0,Ce.jsx)(qn,{label:b.label,hasBifurcation:b.hasBifurcation}):null})(),l.steps.length>0&&(0,Ce.jsx)(Kn,{steps:l.steps,bifurcated:!!l.bifurcationInfo&&!l.bifurcationInfo.isSingleFlow,flows:l.bifurcationInfo?.flows,cmInitCounts:l.cmInitCounts,staticSteps:!0}),l.askingUser&&(0,Ce.jsxs)(y,{flexDirection:"column",marginTop:1,children:[(0,Ce.jsxs)(f,{color:v.yellow,children:['Agent is asking: "',l.askingUser,'"']}),(0,Ce.jsxs)(f,{children:["> ",d,"\u2588"]})]}),l.runError&&(0,Ce.jsx)(ui,{message:l.runError,code:"RUNNER_ERROR"}),p&&l.lastRunEnd&&(0,Ce.jsx)(ci,{steps:l.steps,bifurcationInfo:l.bifurcationInfo,perFlowMetadata:l.lastRunEnd.per_flow_metadata??[]}),p&&(0,Ce.jsx)(sn,{status:p.status==="passed"?"passed":"failed",summary:p.summary??"",duration:p.duration,steps:p.stepsTotal,stepsPassed:p.stepsPassed,stepsFailed:p.stepsFailed,reason:p.reason,creditsConsumed:p.creditsConsumed})]})}import{createInterface as Ka}from"readline";function un(s){process.stdout.write(JSON.stringify(s)+`
|
|
58
|
-
`)}async function fi(s,e,t){let n=rr(s,e);Vn().then(m=>{m&&un({type:"update_available",current:m.current,latest:m.latest,severity:m.severity})}).catch(()=>{});let r=Ka({input:process.stdin});r.on("line",m=>{try{let g=JSON.parse(m);g.type==="user_response"?n.sendUserResponse(g.answer??""):g.type==="cancel"&&n.sendCancel(g.reason??"")}catch{}});let o=null,a=!1,l=0,i=null,c=0,d=!1;for await(let m of n.events)switch(m.type){case"run_start":d&&c++;break;case"step_start":{let g=m;t?.onStepLog?.("STEP_START",`Step ${g.index} started`,{index:g.index,objective:g.objective,child_id:g.child_id});let p={step:g.index+1,status:"running",remark:g.objective??`Step ${g.index+1}`};g.child_id&&(p.child_id=g.child_id),un(p);break}case"step_event":t?.onStepLog?.("STEP_EVENT",`Step ${m.index} ${m.event}`,{index:m.index,phase:m.event,action_type:m.action_type,detail:m.detail,child_id:m.child_id});break;case"step_end":{let g=m;t?.onStepLog?.("STEP_END",`Step ${g.index} ${g.status}`,{index:g.index,status:g.status,duration:g.duration,summary:g.summary,child_id:g.child_id}),l++;let p={step:g.index+1,status:g.status==="passed"?"done":"failed",remark:g.summary??""};g.child_id&&(p.child_id=g.child_id),un(p);let _=d?Math.max(0,c-1):0;t?.onStepEnd?.(g.index,_);break}case"bifurcation":{let g=m,p=g.flows??[],_=g.count??p.length;(g.is_single_flow??_<=1)||(i=p,d=!0,c=0),un({type:"bifurcation",flows:p,count:_});break}case"ask_user":{let g=m;un({type:"ask_user",question:g.question,step_index:g.step_index,...g.options?{options:g.options}:{}});break}case"run_end":{o=m;break}case"error":{a=!0,un({type:"error",message:m.message});break}default:break}return r.close(),await n.exited,{lastRunEnd:o,stepsTotal:l,hadError:a,bifurcationFlows:i}}var qt=class extends Error{constructor(t,n){super(t);this.code=n;this.name="AuthError"}};async function br(s){let{creds:e,env:t,usernameFlag:n,accessKeyFlag:r,log:o}=s,a=null,l=null;if(n&&r)a={username:n,access_key:r},o("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:n});else{let p=e.resolveAuth();p?.method==="basic"&&(a={username:p.username,access_key:p.access_key},o("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:p.username}))}if(!a){let{credentials:p,profile:_}=e.getActiveCredentials();if(!p)throw new qt("Not authenticated \u2014 no credentials found","not_authenticated");if(l=p.access_token,p.expires_at-Date.now()/1e3<300)try{let E=await Xn({creds:e,profile:_,env:t,credentials:p});E&&(l=E.accessToken,o("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(E){let A=E instanceof Error?E.message:String(E);throw o("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:A}),new qt(`Token refresh failed: ${A}`,"refresh_failed")}}let i=ae(t),c=async()=>l,d=a?{username:a.username,access_key:a.access_key}:null,m=new pt(i.controllerBaseUrl,c,d,o),g=await m.resolve();return g&&!a&&(a={username:g.username,access_key:g.access_key},o("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:g.username})),{basicAuth:a,token:l,resolver:m,resolvedCreds:g}}import{mkdtempSync as Ga,rmSync as qa}from"fs";import{join as za}from"path";import{tmpdir as Ja}from"os";async function mi(s){if(s.cft)return{instance:null,tempDir:null};if(s.wsEndpoint)return{wsEndpoint:s.wsEndpoint,instance:null,tempDir:null};if(s.cdpEndpoint){let r=await fetch(`${s.cdpEndpoint}/json/version`);if(!r.ok)throw new Error(`CDP endpoint not reachable: ${s.cdpEndpoint} (${r.status})`);return{cdpEndpoint:s.cdpEndpoint,instance:null,tempDir:null}}let e,t=null;if(s.config.chrome_profile_path)e=s.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{t=Ga(za(Ja(),"kane-clean-")),e=t;let r=t;Ge("tempDir",()=>{try{qa(r,{recursive:!0,force:!0})}catch{}})}let n=await tr({userDataDir:e,width:s.config.window_size.width,height:s.config.window_size.height,startUrl:s.startUrl,headless:s.headless});return{cdpEndpoint:n.cdpEndpoint,instance:n,tempDir:t}}function Pn(s){let e=new li;if(e.name("kane-cli").version(en),s[0]==="--help"||s[0]==="-h"||s[0]==="help"){(async()=>{let{HelpView:n}=await import("./HelpView-DOYUDPWZ.js"),{render:r}=await import("./build-JIKYOZUH.js"),o=await import("./react-QWOAB3TB.js"),{waitUntilExit:a}=r(o.default.createElement(n));await a(),X(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 cn("--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 cn("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").action(async n=>{let r=new He,o=new ot,a=n.env,l=n.profile;if(!process.stdin.isTTY||n.oauth||n.username){if(r.setDefaultEnv(a),n.oauth?(await new hn(l,a,r).login(),console.log(`Logged in as ${l} [${a}] via OAuth`)):n.username&&n.accessKey?(r.saveBasicAuth(l,a,{username:n.username,access_key:n.accessKey}),console.log(`Logged in as ${l} [${a}] via basic auth`)):(console.error("Provide --oauth, or --username and --access-key"),X(1,"Missing --oauth or credentials for login")),r.setActiveProfile(l),o.set("model",n.model),n.chromeProfile&&o.set("chrome_profile_path",n.chromeProfile),n.projectId)o.set("project_id",n.projectId),console.log(`Project set to ${n.projectId}`);else try{let A=await br({creds:r,env:a,log:()=>{}});if(A.resolvedCreds){let{TmsClient:P}=await import("./tms-client-VH42IFUF.js"),te=(await new P(ae(a).tmsBaseUrl,A.resolvedCreds.username,A.resolvedCreds.access_key).listProjects()).find(Z=>Z.name.toLowerCase().includes("kaneai"));te&&(o.set("project_id",te.project_id),console.log(`Auto-selected project: ${te.name} (${te.project_id})`))}}catch(E){console.warn(`Could not auto-select project: ${E instanceof Error?E.message:E}`)}n.folderId&&(o.set("folder_id",n.folderId),console.log(`Folder set to ${n.folderId}`)),console.log("Setup complete.");return}let{LoginWizard:i}=await import("./LoginWizard-NJ22OXIH.js"),{ProjectPicker:c}=await import("./ProjectPicker-43LFS6S6.js"),{FolderPicker:d}=await import("./FolderPicker-DN4OV6BI.js"),{render:m}=await import("./build-JIKYOZUH.js"),g=await import("./react-QWOAB3TB.js"),p=!1;if(await new Promise(E=>{let{unmount:A}=m(g.default.createElement(i,{devMode:process.env.KANE_DEV_MODE==="1",profiles:r.listProfiles(),onBasicLogin:(P,C,O,te)=>{r.saveBasicAuth(P,C,{username:O,access_key:te}),r.setActiveProfile(P),r.setDefaultEnv(C),a=C,l=P},onOAuthLogin:async(P,C)=>{r.setDefaultEnv(C),await new hn(P,C,r).login(),a=C,l=P},onComplete:()=>{A(),E()},onCancel:()=>{p=!0,A(),E()}}))}),p)return;let _;try{_=(await br({creds:r,env:a,log:()=>{}})).resolver}catch{console.log("Could not resolve credentials for project setup. Run: kane-cli login");return}if(!_.cached){console.log("Could not resolve credentials for project setup. Run: kane-cli login");return}let b=null;await new Promise(E=>{let{unmount:A}=m(g.default.createElement(c,{resolver:_,currentProjectId:o.load().project_id,env:a,onSelect:(P,C)=>{o.set("project_id",P),o.set("project_name",C),b=P,console.log(`Project set to ${C} (${P})`),A(),E()},onCancel:()=>{A(),E()}}))}),b&&(await new Promise(E=>{let{unmount:A}=m(g.default.createElement(d,{resolver:_,projectId:b,currentFolderId:o.load().folder_id,env:a,onSelect:(P,C)=>{o.set("folder_id",P),o.set("folder_name",C),console.log(`Folder set to ${C} (${P})`),A(),E()},onCancel:()=>{A(),E()}}))}),X(0,"Login setup complete"))}),e.command("logout").action(async()=>{let n=new He,r=n.getActiveProfile();if(!r){console.log("No active profile to logout");return}let o=n.getDefaultEnv(),a=await Yn(n,r,o);a.switchedTo?console.log(`Logged out ${a.profile} [${a.env}]. Switched to ${a.switchedTo.profile} [${a.switchedTo.env}]`):console.log(`Logged out ${a.profile} [${a.env}]. No profiles remaining.`)}),e.command("whoami").option("--profile <name>","Profile name").action(async n=>{let r=new He,o=n.profile??r.getActiveProfile()??"default",a=r.getDefaultEnv(),l=r.loadCredentials(o,a),i=r.loadBasicAuth(o,a),c="none",d,m,g;if(i)c="basic",d=i.username;else if(l){c="oauth";let A=l.expires_at,P=Date.now()/1e3;m=A>P?"valid":"expired",g=new Date(A*1e3).toISOString().slice(0,10)}else m="missing";let{WhoamiView:p}=await import("./WhoamiView-AP6NXPTL.js"),{render:_}=await import("./build-JIKYOZUH.js"),b=await import("./react-QWOAB3TB.js"),{waitUntilExit:E}=_(b.default.createElement(p,{profile:o,env:a,authenticated:c!=="none",authMethod:c,username:d,tokenStatus:m,expiresAt:g}));await E()}),e.command("config <action> [value]").action(async(n,r)=>{let o=new ot,a=new He;if(n==="show"){let l=o.load(),i=a.getActiveProfile()??"default",c=a.getDefaultEnv(),d=a.loadBasicAuth(i,c),m=a.loadCredentials(i,c),g=d?`basic (${d.username})`:m?"oauth":"not configured",{ConfigView:p}=await import("./ConfigView-XCWDFTNS.js"),{render:_}=await import("./build-JIKYOZUH.js"),b=await import("./react-QWOAB3TB.js"),{waitUntilExit:E}=_(b.default.createElement(p,{model:l.model,mode:l.mode,authLabel:g,profile:i,env:c,defaultUrl:mt,projectId:l.project_id,projectName:l.project_name,folderId:l.folder_id,windowSize:`${l.window_size.width}x${l.window_size.height}`,chromeProfile:l.chrome_profile_path}));await E()}else if(n==="set-window"&&r){let l=r.split("x").map(Number),[i,c]=l;!i||!c||!Number.isInteger(i)||!Number.isInteger(c)?console.error("Invalid format. Use: kane-cli config set-window WIDTHxHEIGHT"):i<800||i>3840?console.error(`Width must be between 800 and 3840 (got ${i})`):c<600||c>2160?console.error(`Height must be between 600 and 2160 (got ${c})`):(o.set("window_size",{width:i,height:c}),console.log(`Window size set to ${i}x${c}`))}else if(n==="set-mode"){if(r!=="action"&&r!=="testing"){console.error("Mode must be 'action' or 'testing'."),X(1,"Invalid mode");return}o.set("mode",r),console.log(`Mode set to ${r}`)}else if(n==="chrome-profile"){if(r||!process.stdin.isTTY){r||(console.error("Usage: kane-cli config chrome-profile <path>"),X(1,"Missing chrome-profile path")),o.set("chrome_profile_path",r),console.log(`Chrome profile set to ${r}`);return}let{ChromeProfilePicker:l}=await import("./ChromeProfilePicker-VPCR7EPX.js"),{render:i}=await import("./build-JIKYOZUH.js"),c=await import("./react-QWOAB3TB.js");await new Promise(d=>{let{unmount:m}=i(c.default.createElement(l,{currentPath:o.load().chrome_profile_path,onSelect:g=>{o.set("chrome_profile_path",g),console.log(`Chrome profile set to ${g}`),m(),d()},onCancel:()=>{m(),d()}}))})}else if(n==="project"){if(r||!process.stdin.isTTY){r||(console.error("Usage: kane-cli config project <project-id>"),X(1,"Missing project ID")),o.set("project_id",r),console.log(`Project set to ${r}`);return}let l=a.getDefaultEnv(),i=ae(l),c=a.loadBasicAuth(a.getActiveProfile()??"default",l);if(!c){console.log("Login first to browse projects");return}let{ProjectPicker:d}=await import("./ProjectPicker-43LFS6S6.js"),{AuthResolver:m}=await import("./resolver-QLDOAIXU.js"),{render:g}=await import("./build-JIKYOZUH.js"),p=await import("./react-QWOAB3TB.js"),_=new m(i.controllerBaseUrl,async()=>null,c);await _.resolve(),await new Promise(b=>{let{unmount:E}=g(p.default.createElement(d,{resolver:_,currentProjectId:o.load().project_id,env:l,onSelect:(A,P)=>{o.set("project_id",A),o.set("project_name",P),console.log(`Project set to ${P} (${A})`),E(),b()},onCancel:()=>{E(),b()}}))})}else if(n==="folder"){if(r||!process.stdin.isTTY){if(r||(console.error("Usage: kane-cli config folder <folder-id>"),X(1,"Missing folder ID")),!o.load().project_id){console.log("Select a project first: kane-cli config project <id>");return}o.set("folder_id",r),console.log(`Folder set to ${r}`);return}let l=o.load();if(!l.project_id){console.log("Select a project first: kane-cli config project");return}let i=a.getDefaultEnv(),c=ae(i),d=a.loadBasicAuth(a.getActiveProfile()??"default",i);if(!d){console.log("Login first to browse folders");return}let{FolderPicker:m}=await import("./FolderPicker-DN4OV6BI.js"),{AuthResolver:g}=await import("./resolver-QLDOAIXU.js"),{render:p}=await import("./build-JIKYOZUH.js"),_=await import("./react-QWOAB3TB.js"),b=new g(c.controllerBaseUrl,async()=>null,d);await b.resolve(),await new Promise(E=>{let{unmount:A}=p(_.default.createElement(m,{resolver:b,projectId:l.project_id,currentFolderId:l.folder_id,env:i,onSelect:(P,C)=>{o.set("folder_id",P),o.set("folder_name",C),console.log(`Folder set to ${C} (${P})`),A(),E()},onCancel:()=>{A(),E()}}))})}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: ${zt(Ee,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new cn("--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 cn("--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 cn("--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 (only python supported for now)").option("--skip-code-validation","Skip post-codegen worker-side validation").option("--no-skip-code-validation","Force post-codegen worker-side validation").addHelpText("after",`
|
|
40
|
+
`);we({type:"error",text:`Runner error:
|
|
41
|
+
${g}`})}},[H.runError,H.isRunning,we,s]);let Nn=(0,P.useCallback)(async()=>{s.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),J(qn()),v({status:"uploading"});let x=w.getResolvedBasicAuth(),S=null;if(!x&&(S=await w.getToken(),!S))return s.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let g=G??await Ot();if(!g)return s.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no TMS credentials"),s.setUploadStatus("failed","Could not get TMS credentials"),null;s.log("info","EXIT_UPLOAD_CONFIG","Exit upload configuration",{test_id:s.testId,commit_id:s.sessionId,project_id:W.project_id,session_dir:s.sessionDir,run_dirs:s.getRunDirs()});let y={basicAuth:x??null,token:S,resolver:w.getResolver(),resolvedCreds:g};ue.current&&(s.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await ue.current.drain(),s.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let A=On({session:s,env:ve,auth:y,variables:Ht.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:cn.current,projectId:W.project_id,folderId:W.folder_id,totalSteps:$r.current,totalDuration:Lr.current,codeExport:Dn({codeExport:e,codeLanguage:t,skipCodeValidation:n},W.code_export),onProgress:(z,ee,se)=>{s.log("info","EXIT_PROGRESS","Upload progress",{step:z,status:ee,detail:se}),J(fe=>ai(fe,z,ee,se))},log:(z,ee,se,fe)=>s.log(z,ee,se,fe)}),q=await new si(A).execute();if(q.success){s.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:q.testId,testcase_id:q.testcaseId??null,share_id:q.shareId??null}),s.setUploadStatus("uploaded"),q.testId&&s.setTestId(q.testId),q.testcaseId&&s.setTestcaseId(q.testcaseId);let z=ce(ve),ee=W.project_id,se=q.testcaseId&&q.shareId&&ee?Vt(z.testManagerUiUrl,ee,q.testcaseId,q.shareId):void 0,fe=q.testcaseId&&ee?Pn(z.testManagerUiUrl,ee,q.testcaseId):void 0;v({status:"success",testUrl:se,testCaseLink:fe,codeExportDir:q.codeExportDir}),Li({shareableLink:se,testCaseLink:fe,codeExportDir:q.codeExportDir})}else s.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:q.error}),s.setUploadStatus("failed",q.error),v({status:"failed",error:q.error});return q},[w,ve,s,W,G,Ot]),Uo=(0,P.useCallback)(async()=>{if(!(s.nextRunIndex()>0)){we({type:"info",text:"No runs in current session."});return}if(H.isRunning){we({type:"error",text:"Cannot reset while a run is in progress. Cancel the run first."});return}s.log("info","SESSION_RESET_START","Starting session reset via /new"),pe(!0);let S=s.getFlows();S.length>0&&X((0,R.jsx)(bo,{flows:S}));let g=null;if(!o)try{g=await Nn()??null}catch(A){s.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(A)}),we({type:"error",text:"Upload failed \u2014 session data saved locally."})}if(g?.success&&g.testcaseId){let A=ce(ve),N=W.project_id;X((0,R.jsx)(Xr,{shareableLink:g.shareId&&N?Vt(A.testManagerUiUrl,N,g.testcaseId,g.shareId):void 0,testCaseLink:N?Pn(A.testManagerUiUrl,N,g.testcaseId):void 0,codeExportDir:g.codeExportDir,autoExit:!1}))}s.testId&&j(A=>[...A,{testId:s.testId,runCount:O}]),Vn.killChrome(),await s.finish("complete");let y=new bn;y.start({model:W.model,environment:ve,profile:zt??null}),a.current=y,c(A=>A+1),s.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:y.sessionId}),C(0),$r.current=0,Lr.current=0,Ke.current=0,_t.current="",Ht.current=null,cn.current={},ue.current=null,Fn.current=0,Mr.current=0,Vr.current=null,Nr.current=null,jr.current=null,Br.current=null,le(null),I(null),v(null),J(qn()),pe(!1),X((0,R.jsxs)(p,{flexDirection:"column",marginY:1,children:[(0,R.jsx)(d,{color:f.dimmed,children:"\u2500".repeat(44)}),(0,R.jsx)(d,{color:f.green,bold:!0,children:"New session started"})]}))},[s,H,we,X,o,Nn,Vn,O,W,ve,zt,l]),Ho=(0,P.useCallback)(async()=>{await s.finish("complete"),te(0,"Session complete")},[s]),Bs=(0,P.useCallback)(async x=>{Ne(!1);let S=s.testId??(Y.length>0?Y[Y.length-1].testId:null);if(x&&S){s.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:x});try{let g=ce(ve),y=w.getResolvedBasicAuth();y&&await Er({tmsBaseUrl:g.tmsBaseUrl,username:y.username,accessKey:y.access_key,testId:S,feedbackType:x,log:(A,N,q,z)=>s.log(A,N,q,z)})}catch(g){s.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(g)})}}else s.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");Ho()},[ve,w,s,Ho,Y]),Dt=(0,P.useCallback)(async()=>{if(L)return;if(s.log("info","EXIT_START","TUI exit initiated"),s.nextRunIndex()>0&&!o){s.log("info","EXIT_WITH_ACTIVE_SESSION","Exit with active session \u2014 uploading first"),ne(!0);try{await Nn()}catch(g){s.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(g)})}s.testId&&j(g=>[...g,{testId:s.testId,runCount:O}]),await s.finish("complete")}if(!(s.testId??(Y.length>0?Y[Y.length-1].testId:null))||o){await s.finish("complete"),te(0,"No test ID \u2014 quick exit");return}ne(!0),Ne(!0)},[L,s,o,Nn,O,Y]);(0,P.useEffect)(()=>{if(!L)return;let x=300*1e3,S=setTimeout(async()=>{s.setUploadStatus("failed","Upload timed out after 5m"),await s.finish("complete"),te(0,"Upload timed out after 5m")},x);return()=>clearTimeout(S)},[L,s]);let Fn=P.default.useRef(0),Fr=P.default.useRef(null),Mr=P.default.useRef(0);it((x,S)=>{if(S.ctrl&&x==="c"){if(L){Mr.current+=1,Mr.current>=2&&(s.setUploadStatus("pending","Force exit by user"),s.finish("complete"),te(0,"Force exit by user"));return}if(H.isRunning){H.cancelRun(),we({type:"info",text:"Run cancelled."}),Fn.current++,Fr.current&&clearTimeout(Fr.current),Fr.current=setTimeout(()=>{Fn.current=0},2e3),Fn.current>=2&&Dt();return}Dt()}});let Wo=P.default.useMemo(()=>{let x=w.creds.getActiveProfile()??"none",S=w.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:Ce.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:g=>{un(y=>({...y,headless:g==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Ce.maxSteps),onValue:g=>{let y=parseInt(g,10);y>0&&un(A=>({...A,maxSteps:y}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Ce.timeout?String(Ce.timeout):"",placeholder:"0 = no timeout",onValue:g=>{let y=parseInt(g,10);un(A=>({...A,timeout:isNaN(y)?0:y}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:Ce.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:g=>{un(y=>({...y,cdpEndpoint:g}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:Ce.wsEndpoint,placeholder:"wss://...",onValue:g=>{un(y=>({...y,wsEndpoint:g}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{w.logout().then(g=>{et();let y=w.creds.getActiveProfile(),A=w.creds.getDefaultEnv();dt(y,A),Et().catch(()=>{}),g?re("ok","/logout",`Logged out: ${g.profile} [${g.env}]`):re("ok","/logout","No active profile")}).catch(()=>{re("error","/logout","Logout failed")})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let g=w.creds.getActiveProfile()??"none",y=w.creds.getDefaultEnv(),A=w.creds.loadBasicAuth(g,y),N=A?"basic":w.creds.loadCredentials(g,y)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:g},{key:"Environment",value:y}]},{label:"Authentication",entries:[{key:"Method",value:N},...A?[{key:"Username",value:A.username}]:[]]},{label:"Token",entries:[{key:"Status",value:w.tokenValid?"valid":"not logged in",color:w.tokenValid?f.statusPass:f.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let g=w.creds.getActiveProfile()??"default",y=w.creds.getDefaultEnv(),A=ce(y);try{let N=w.getBasicAuth(),q=N?null:await w.getToken();if(!N&&!q){xe({text:"Not authenticated. Run /login first.",color:f.red});return}let{ControllerClient:z}=await import("./controller-client-7BIK5FYL.js"),se=await(N?new z(A.controllerBaseUrl,{username:N.username,accessKey:N.access_key}):new z(A.controllerBaseUrl,q)).getCreditBalance();xe({text:`Credits \u2014 available: ${se.available_credits}, total: ${se.total_credits} (${g} / ${y})`,color:f.green})}catch(N){xe({text:`Balance check failed: ${N instanceof Error?N.message:String(N)}`,color:f.red})}D.current&&clearTimeout(D.current),D.current=setTimeout(()=>{xe(null),D.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:W.mode}]},{label:"Browser",entries:[{key:"Window",value:`${W.window_size.width}x${W.window_size.height}`},{key:"Chrome Profile",value:W.chrome_profile_path?W.chrome_profile_path.split("/").pop()??W.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:W.project_name?`${W.project_name} (${W.project_id})`:W.project_id??"(none)"},{key:"Folder",value:W.folder_name?`${W.folder_name} (${W.folder_id})`:W.folder_id??"(none)"},{key:"Default URL",value:ht}]},{label:"Code Export",entries:[{key:"Enabled",value:W.code_export.enabled?"yes":"no"},{key:"Language",value:W.code_export.language},{key:"Skip Validation",value:W.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",...W.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:f.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${W.window_size.width}x${W.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:W.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:g=>{(g==="action"||g==="testing")&&(u.set("mode",g),Ge(u.load()),re("ok","/config set-mode",g))}},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:W.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:W.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:g=>{u.set("code_export",{...W.code_export,enabled:g==="on"}),Ge(u.load()),re("ok","/config code-export enabled",g)}},{id:"config-code-export-language",label:"Language",type:"select",currentValue:W.code_export.language,options:[{label:"python",value:"python"},{label:"javascript",value:"javascript"}],onValue:g=>{g!=="python"&&g!=="javascript"||(u.set("code_export",{...W.code_export,language:g}),Ge(u.load()),re("ok","/config code-export language",g))}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:W.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:g=>{u.set("code_export",{...W.code_export,skip_validation:g==="on"}),Ge(u.load()),re("ok","/config code-export skip-validation",g)}}]}]},{id:"exit",label:"Exit",type:"action",onAction:()=>{Dt()}}]},[w,u,W,we,Dt,Ce,et,re]),js=(0,P.useCallback)(x=>{if(H.askingUser){let g=H.askingUser;X((0,R.jsxs)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,R.jsx)(p,{marginLeft:1,children:(0,R.jsx)(d,{color:f.primary,bold:!0,children:"Agent Question"})}),(0,R.jsxs)(p,{borderStyle:"round",borderColor:f.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:[(0,R.jsxs)(p,{children:[(0,R.jsx)(p,{width:3,children:(0,R.jsx)(d,{color:f.primary,bold:!0,children:"?"})}),(0,R.jsx)(p,{flexShrink:1,children:(0,R.jsx)(d,{wrap:"wrap",children:g})})]}),(0,R.jsxs)(p,{marginTop:1,children:[(0,R.jsx)(p,{width:3,children:(0,R.jsx)(d,{color:f.dim,bold:!0,children:"\u2192"})}),(0,R.jsx)(p,{flexShrink:1,children:(0,R.jsx)(d,{color:f.accent,wrap:"wrap",children:x})})]})]})]})),Vr.current=null,H.sendAnswer(x);return}if(s.logCommand(x),H.isRunning){we({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let S=Oi(x);if(S)switch(S.command){case"login":case"logout":case"whoami":case"profiles":case"balance":case"auth":Kt("auth");return;case"config":Kt("config");return;case"help":Lo(!0);return;case"update":{(async()=>{let{getUpdateCommand:g}=await import("./version-check-FOMPCS47.js");re("ok","/update",`To update kane-cli, run: ${g()}`)})();return}case"summary":{let g=s.getFlows();if(g.length===0){re("ok","/summary","No runs yet in this session.");return}let y=S.args.index?parseInt(S.args.index,10):void 0;if(y!==void 0&&!s.getFlow(y)){re("error","/summary",`No flow at index ${y}`,`${g.length} flow${g.length===1?"":"s"} available. Use /summary to see all.`);return}X((0,R.jsx)(bo,{flows:g,filterIndex:y})),re("ok","/summary",y!==void 0?`Flow ${y}`:`${g.length} flow${g.length===1?"":"s"}`);return}case"new":Uo(),re("ok","/new","Session reset");return;case"cancel":H.cancelRun(),re("ok","/cancel","Run cancelled");return;case"clear":re("ok","/clear","Chat cleared");return;case"exit":Dt();return;default:re("error",`/${S.command}`,"Unknown command");return}if(x.trim().toLowerCase()==="exit"){Dt();return}X((0,R.jsxs)(p,{children:[(0,R.jsx)(d,{color:"#b388ff",children:"\u276F "}),(0,R.jsx)(d,{children:x})]})),Mo(x,ht)},[H,we,re,X,s,Mo,Dt,Uo]),Ko=w.getAuthInfo(),$s=Ko?Ko.method==="basic"?"basic auth":"oauth":"not logged in",Ls=(()=>{if(qt)return["help"];if($)return $.phase==="wizard"?["auth","login"]:$.phase==="project"?["auth","login","project"]:$.phase==="folder"?["auth","login","folder"]:["auth","login"];let x={infoView:"info",loginWizard:"login",profilesView:"profiles",chromeProfilePicker:"chrome-profile",projectPicker:"project",folderPicker:"folder",windowSizePicker:"set-window"};return Be==="auth"?Gt?["auth",x[Gt]]:["auth"]:Be==="config"?Gt?["config",x[Gt]]:["config"]:Be==="help"?["help"]:H.askingUser?["agent question"]:[]})();return(0,R.jsxs)(p,{flexDirection:"column",children:[F.length>0&&(0,R.jsx)(Jt,{items:F,children:x=>(0,R.jsx)(p,{paddingX:1,children:x.content},x.id)}),!E&&!De&&(0,R.jsx)(bi,{onComplete:()=>{let x=w.creds.getActiveProfile(),S=w.creds.getDefaultEnv(),g=x?w.creds.loadCredentials(x,S):null,y=x?w.creds.loadBasicAuth(x,S):null,A=!!(g||y),N=y?.username??x??null;X((0,R.jsx)(Xn,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:gt,authenticated:A,user:N})),Ze(!0);let q=(z,ee,se,fe)=>{s.log(z,ee,se,fe)};if(ri(w.creds,q).then(z=>{if(z.status==="authenticated"){let{profile:ee,env:se,tmsCreds:fe}=z.result;w.creds.setActiveProfile(ee),w.creds.setDefaultEnv(se),et(),Q(fe),Se("ready"),h(!0)}else z.status==="needs_pick"?(Ee(z.profiles),Se("pick")):Se("login")}).catch(z=>{s.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(z)}),Se("login")}),r&&r.then(async z=>{if(z){let{getUpdateCommand:ee}=await import("./version-check-FOMPCS47.js");re("ok","update available",`${z.current} \u2192 ${z.latest}`,`Run: ${ee()}`)}}).catch(()=>{}),i&&i.changes.length>0){let z=`kane-cli updated to ${i.toVersion}. Default settings changed:`,ee=[...i.changes.map(se=>`\u2022 ${se.description} (${se.field}: ${JSON.stringify(se.from)} \u2192 ${JSON.stringify(se.to)})`),"","Use /config to review or revert any of these."].join(`
|
|
42
|
+
`);re("ok","defaults updated",z,ee)}}}),!E&&ge==="booting"&&De&&(0,R.jsx)(p,{paddingX:1,children:(0,R.jsx)(d,{color:"yellow",children:"Checking authentication..."})}),!E&&ge==="pick"&&(0,R.jsx)(Ba,{profiles:lt,onCancel:()=>Se("login"),onSelect:async(x,S)=>{w.creds.setActiveProfile(x),w.creds.setDefaultEnv(S),et(),de(!0);let g=(y,A,N,q)=>{s.log(y,A,N,q)};try{let y=await ni(w.creds,x,S,g);de(!1),y.status==="authenticated"?(dt(x,S),Se("ready"),h(!0)):Se("login")}catch{de(!1),Se("login")}},validating:Ae}),!E&&ge==="login"&&!$&&(0,R.jsx)(Un,{devMode:process.env.KANE_DEV_MODE==="1",profiles:w.creds.listProfiles(),onBasicLogin:async(x,S,g,y)=>{let{validateBasicAuth:A}=await import("./validate-basic-RV5TSUKJ.js");await A(S,g,y),w.creds.saveBasicAuth(x,S,{username:g,access_key:y}),w.creds.setActiveProfile(x),w.creds.setDefaultEnv(S),Ue(w.creds,u,x,S),w.setTokenValid(!0),et()},onOAuthLogin:async(x,S)=>{w.creds.setDefaultEnv(S),await w.login(x),Ue(w.creds,u,x,S),et()},onComplete:(x,S)=>{Et(S).then(()=>{et(),Re({phase:"project",profile:x,env:S})}).catch(()=>{Re({phase:"project",profile:x,env:S})})},onCancel:()=>{te(0,"Login cancelled at startup")}}),!E&&ge==="login"&&$?.phase==="project"&&(0,R.jsx)(Qt,{resolver:w.getResolver(),currentProjectId:null,env:$.env,onSelect:(x,S)=>{w.creds.saveProfileConfig($.profile,$.env,{project_id:x,project_name:S}),re("ok","/config project",S,`id: ${x}`),Re({...$,phase:"folder"})},onCancel:async()=>{let x=await Or($.profile,$.env);x&&(ye(w.creds,u,$.profile,$.env,{projectId:x.id,projectName:x.name}),re("ok","/config project",x.name,`id: ${x.id}`),Re({...$,phase:"folder"}))}}),!E&&ge==="login"&&$?.phase==="folder"&&(0,R.jsx)(Zt,{resolver:w.getResolver(),projectId:w.creds.loadProfileConfig($.profile,$.env)?.project_id??"",currentFolderId:null,env:$.env,onSelect:(x,S)=>{w.creds.saveProfileConfig($.profile,$.env,{folder_id:x,folder_name:S}),re("ok","/config folder",S,`id: ${x}`),dt($.profile,$.env),Re(null),Se("ready"),h(!0)},onCancel:async()=>{let x=w.creds.loadProfileConfig($.profile,$.env);if(!x?.project_id)return;let S=await Dr($.env,x.project_id);S&&(ye(w.creds,u,$.profile,$.env,{folderId:S.id,folderName:S.name}),re("ok","/config folder",S.name,`id: ${S.id}`),dt($.profile,$.env),Re(null),Se("ready"),h(!0))}}),E&&rt==="menu"&&!L&&(0,R.jsx)(p,{marginBottom:1,children:(0,R.jsxs)(p,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,R.jsx)(d,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,R.jsx)(d,{color:f.dimmed,children:" \u2502 "}),(0,R.jsx)(d,{color:"#ff9500",children:W.model}),(0,R.jsx)(d,{color:f.dimmed,children:" \u2502 "}),(0,R.jsx)(d,{color:f.dimmed,children:$s}),(0,R.jsx)(d,{color:f.dimmed,children:" \u2502 "}),(0,R.jsxs)(d,{color:f.dimmed,children:[zt??"no profile","/",ve]})]})}),E&&!L&&(0,R.jsxs)(p,{flexDirection:"column",flexGrow:1,children:[rt==="menu"&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(so,{items:Wo,onRunSelected:()=>Wt("chat"),onActiveViewChange:Ln,renderLoginWizard:x=>{let S=$?.phase??"wizard";if(S==="project")return(0,R.jsx)(Qt,{resolver:w.getResolver(),currentProjectId:null,env:$.env,onSelect:(g,y)=>{w.creds.saveProfileConfig($.profile,$.env,{project_id:g,project_name:y}),re("ok","/config project",y,`id: ${g}`),Re(A=>A?{...A,phase:"folder"}:null)},onCancel:async()=>{if(!$)return;let g=await Or($.profile,$.env);g&&(ye(w.creds,u,$.profile,$.env,{projectId:g.id,projectName:g.name}),re("ok","/config project",g.name,`id: ${g.id}`),Re(y=>y?{...y,phase:"folder"}:null))}});if(S==="folder"){let g=w.creds.loadProfileConfig($.profile,$.env);return(0,R.jsx)(Zt,{resolver:w.getResolver(),projectId:g?.project_id??"",currentFolderId:null,env:$.env,onSelect:(y,A)=>{w.creds.saveProfileConfig($.profile,$.env,{folder_id:y,folder_name:A}),re("ok","/config folder",A,`id: ${y}`),dt($.profile,$.env),Re(null),x()},onCancel:async()=>{if(!$)return;let y=w.creds.loadProfileConfig($.profile,$.env);if(!y?.project_id)return;let A=await Dr($.env,y.project_id);A&&(ye(w.creds,u,$.profile,$.env,{folderId:A.id,folderName:A.name}),re("ok","/config folder",A.name,`id: ${A.id}`),dt($.profile,$.env),Re(null),x())}})}return(0,R.jsx)(Un,{devMode:process.env.KANE_DEV_MODE==="1",profiles:w.creds.listProfiles(),onBasicLogin:async(g,y,A,N)=>{let{validateBasicAuth:q}=await import("./validate-basic-RV5TSUKJ.js");await q(y,A,N),w.creds.saveBasicAuth(g,y,{username:A,access_key:N}),w.creds.setActiveProfile(g),w.creds.setDefaultEnv(y),Ue(w.creds,u,g,y),w.setTokenValid(!0),et()},onOAuthLogin:async(g,y)=>{w.creds.setDefaultEnv(y),await w.login(g),Ue(w.creds,u,g,y),et()},onComplete:(g,y)=>{Et(y).then(()=>{Re({phase:"project",profile:g,env:y})}).catch(()=>{Re({phase:"project",profile:g,env:y})})},onCancel:()=>{Re(null),x()}})},renderProfilesView:x=>(0,R.jsx)(Gr,{creds:w.creds,onSwitch:(S,g)=>{let y=w.creds.getActiveProfile()??"(none)";w.creds.setActiveProfile(S),w.creds.setDefaultEnv(g),Ue(w.creds,u,S,g),dt(S,g),et(),Et(g).catch(()=>{}),re("ok","/profiles switch",`${y} \u2192 ${S} [${g}]`)},onCancel:x}),renderChromeProfilePicker:x=>(0,R.jsx)(qr,{currentPath:W.chrome_profile_path,onSelect:S=>{u.set("chrome_profile_path",S),Ge(u.load()),re("ok","/config chrome-profile",S),x()},onCancel:x}),renderProjectPicker:x=>(0,R.jsx)(Qt,{resolver:w.getResolver(),currentProjectId:W.project_id,env:ve,onSelect:(S,g)=>{ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{projectId:S,projectName:g}),re("ok","/config project",g,`id: ${S}`),Ge(u.load()),x()},onCancel:x}),renderFolderPicker:x=>(0,R.jsx)(Zt,{resolver:w.getResolver(),projectId:W.project_id??"",currentFolderId:W.folder_id,env:ve,onSelect:(S,g)=>{ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{folderId:S,folderName:g}),re("ok","/config folder",g,`id: ${S}`),Ge(u.load()),x()},onCancel:x}),renderWindowSizePicker:x=>(0,R.jsx)(fo,{currentWidth:W.window_size.width,currentHeight:W.window_size.height,onSelect:(S,g)=>{u.set("window_size",{width:S,height:g}),Ge(u.load()),re("ok","/config set-window",`${S} \xD7 ${g}`),x()},onCancel:x})}),he&&(0,R.jsx)(p,{paddingX:1,marginTop:1,children:(0,R.jsx)(d,{color:he.color,children:he.text})})]}),rt==="chat"&&(0,R.jsxs)(R.Fragment,{children:[(()=>{let x=nr({isRunning:H.isRunning,bifurcationInfo:H.bifurcationInfo,steps:H.steps,cmInitCounts:H.cmInitCounts});return x?(0,R.jsx)(tr,{label:x.label,hasBifurcation:x.hasBifurcation}):null})(),H.isRunning&&H.steps.length>0&&(0,R.jsx)(Zn,{steps:H.steps,bifurcated:!!H.bifurcationInfo&&!H.bifurcationInfo.isSingleFlow,flows:H.bifurcationInfo?.flows,cmInitCounts:H.cmInitCounts,onStepCommit:X},`run-${Ke.current}`),qt&&(0,R.jsx)($i,{onClose:()=>Lo(!1),version:gt,environment:w.creds.getDefaultEnv(),sessionId:s.sessionId,runUrl:W.default_url??ht}),Be&&!H.isRunning&&(()=>{let x=Wo.find(S=>S.id===Be);return x?.children?(0,R.jsx)(so,{items:x.children,onRunSelected:()=>Kt(null),onDismiss:()=>Kt(null),onActiveViewChange:Ln,renderLoginWizard:S=>{let g=$?.phase??"wizard";if(g==="project")return(0,R.jsx)(Qt,{resolver:w.getResolver(),currentProjectId:null,env:$.env,onSelect:(y,A)=>{w.creds.saveProfileConfig($.profile,$.env,{project_id:y,project_name:A}),re("ok","/config project",A,`id: ${y}`),Re(N=>N?{...N,phase:"folder"}:null)},onCancel:async()=>{if(!$)return;let y=await Or($.profile,$.env);y&&(ye(w.creds,u,$.profile,$.env,{projectId:y.id,projectName:y.name}),re("ok","/config project",y.name,`id: ${y.id}`),Re(A=>A?{...A,phase:"folder"}:null))}});if(g==="folder"){let y=w.creds.loadProfileConfig($.profile,$.env);return(0,R.jsx)(Zt,{resolver:w.getResolver(),projectId:y?.project_id??"",currentFolderId:null,env:$.env,onSelect:(A,N)=>{w.creds.saveProfileConfig($.profile,$.env,{folder_id:A,folder_name:N}),re("ok","/config folder",N,`id: ${A}`),dt($.profile,$.env),Re(null),S()},onCancel:async()=>{if(!$)return;let A=w.creds.loadProfileConfig($.profile,$.env);if(!A?.project_id)return;let N=await Dr($.env,A.project_id);N&&(ye(w.creds,u,$.profile,$.env,{folderId:N.id,folderName:N.name}),re("ok","/config folder",N.name,`id: ${N.id}`),dt($.profile,$.env),Re(null),S())}})}return(0,R.jsx)(Un,{devMode:process.env.KANE_DEV_MODE==="1",profiles:w.creds.listProfiles(),onBasicLogin:async(y,A,N,q)=>{let{validateBasicAuth:z}=await import("./validate-basic-RV5TSUKJ.js");await z(A,N,q),w.creds.saveBasicAuth(y,A,{username:N,access_key:q}),w.creds.setActiveProfile(y),w.creds.setDefaultEnv(A),Ue(w.creds,u,y,A),w.setTokenValid(!0),et()},onOAuthLogin:async(y,A)=>{w.creds.setDefaultEnv(A),await w.login(y),Ue(w.creds,u,y,A),et()},onComplete:(y,A)=>{Et(A).then(()=>{Re({phase:"project",profile:y,env:A})}).catch(()=>{Re({phase:"project",profile:y,env:A})})},onCancel:()=>{Re(null),S()}})},renderProfilesView:S=>(0,R.jsx)(Gr,{creds:w.creds,onSwitch:(g,y)=>{let A=w.creds.getActiveProfile()??"(none)";w.creds.setActiveProfile(g),w.creds.setDefaultEnv(y),Ue(w.creds,u,g,y),dt(g,y),et(),Et(y).catch(()=>{}),re("ok","/profiles switch",`${A} \u2192 ${g} [${y}]`),S()},onCancel:S}),renderChromeProfilePicker:S=>(0,R.jsx)(qr,{currentPath:W.chrome_profile_path,onSelect:g=>{u.save({chrome_profile_path:g}),Ge(u.load()),re("ok","/config chrome-profile",g),S()},onCancel:S}),renderProjectPicker:S=>(0,R.jsx)(Qt,{resolver:w.getResolver(),currentProjectId:W.project_id,env:ve,onSelect:(g,y)=>{ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{projectId:g,projectName:y}),Ge(u.load()),re("ok","/config project",y,`id: ${g}`),S()},onCancel:S}),renderFolderPicker:S=>(0,R.jsx)(Zt,{resolver:w.getResolver(),projectId:W.project_id??"",currentFolderId:W.folder_id,env:ve,onSelect:(g,y)=>{ye(w.creds,u,w.creds.getActiveProfile()??"default",w.creds.getDefaultEnv(),{folderId:g,folderName:y}),Ge(u.load()),re("ok","/config folder",y,`id: ${g}`),S()},onCancel:S}),renderWindowSizePicker:S=>(0,R.jsx)(fo,{currentWidth:W.window_size.width,currentHeight:W.window_size.height,onSelect:(g,y)=>{u.set("window_size",{width:g,height:y}),Ge(u.load()),re("ok","/config set-window",`${g} \xD7 ${y}`),S()},onCancel:S})},Be):null})(),Be&&he&&(0,R.jsx)(p,{paddingX:1,marginTop:1,children:(0,R.jsx)(d,{color:he.color,children:he.text})}),!Be&&!qt&&H.askingUser&&(0,R.jsxs)(p,{flexDirection:"column",marginLeft:2,paddingLeft:1,marginTop:1,children:[(0,R.jsx)(p,{marginLeft:1,children:(0,R.jsx)(d,{color:f.primary,bold:!0,children:"Agent Question"})}),(0,R.jsx)(p,{borderStyle:"round",borderColor:f.primary,flexDirection:"column",paddingX:2,paddingY:1,width:70,children:(0,R.jsxs)(p,{children:[(0,R.jsx)(p,{width:3,children:(0,R.jsx)(d,{color:f.primary,bold:!0,children:"?"})}),(0,R.jsx)(p,{flexShrink:1,children:(0,R.jsx)(d,{wrap:"wrap",children:H.askingUser})})]})})]}),!Be&&!qt&&(0,R.jsx)(zo,{onSubmit:js,onEscape:void 0,history:Ts,commands:mr,placeholder:H.askingUser?"Type your answer...":H.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)"})]})]}),E&&L&&M&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(Jr,{steps:U,status:M.status,testUrl:M.testUrl,error:M.error}),M.status==="success"&&(0,R.jsx)(Xr,{shareableLink:M.testUrl,testCaseLink:M.testCaseLink,codeExportDir:M.codeExportDir,autoExit:!1})]}),Te&&(0,R.jsx)(li,{onSubmit:Bs}),me&&M&&(0,R.jsx)(Jr,{steps:U,status:M.status,error:M.error}),E&&!L&&(0,R.jsx)(pi,{profile:zt,environment:ve,model:W.model,tokenValid:w.tokenValid,sessionId:s.sessionId,runCount:O,viewMode:rt,breadcrumb:Ls})]})}function Ba({profiles:o,onSelect:e,onCancel:t,validating:n}){let[r,i]=(0,P.useState)(0);return it((a,l)=>{if(!n){if(l.escape){t();return}if(l.upArrow&&r>0&&i(c=>c-1),l.downArrow&&r<o.length-1&&i(c=>c+1),l.return){let c=o[r];e(c.profile,c.env)}}}),(0,R.jsxs)(p,{flexDirection:"column",paddingX:1,children:[(0,R.jsx)(d,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,R.jsx)(p,{marginTop:1,flexDirection:"column",children:o.map((a,l)=>(0,R.jsxs)(d,{children:[l===r?"\u276F ":" ",(0,R.jsx)(d,{color:l===r?"#ff9500":"white",bold:l===r,children:a.profile}),(0,R.jsxs)(d,{color:"gray",children:[" [",a.env,"]"]})]},`${a.profile}-${a.env}`))}),n&&(0,R.jsx)(p,{marginTop:1,children:(0,R.jsx)(d,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,R.jsx)(p,{marginTop:1,children:(0,R.jsx)(d,{color:"gray",children:"Esc = new login"})})]})}var us=K(ds(),1),{program:Tf,createCommand:Af,createArgument:If,createOption:Pf,CommanderError:Of,InvalidArgumentError:Df,InvalidOptionArgumentError:Bf,Command:fs,Argument:jf,Option:an,Help:$f}=us.default;import{join as Mt}from"path";var xs=K(Fe(),1);var nt=K(Fe(),1);var Pt=K(Z(),1);function ms({steps:o,bifurcationInfo:e,perFlowMetadata:t}){return!e||e.isSingleFlow||!t||t.length<=1?null:(0,Pt.jsx)(p,{flexDirection:"column",children:t.map((n,r)=>{let i=o[r],a=i?.children??[],l=a.filter(E=>E.status==="passed").length,c=a.filter(E=>E.status==="failed").length,s=l+c,u=a.reduce((E,h)=>E+(h.duration??0),0),m=i?.status==="failed"?"failed":"passed",b=e.flows[r]??i?.objective??`Flow ${r+1}`;return(0,Pt.jsxs)(p,{flexDirection:"column",marginTop:r>0?1:0,children:[(0,Pt.jsxs)(p,{marginLeft:1,children:[(0,Pt.jsx)(d,{color:"#b388ff",bold:!0,children:"Flow "+(r+1)+": "}),(0,Pt.jsx)(d,{color:"#b388ff",children:b})]}),(0,Pt.jsx)(rn,{status:m,summary:n?.summary??"",duration:u,steps:s,stepsPassed:l,stepsFailed:c,reason:n?.error_message??void 0,creditsConsumed:n?.credits_consumed??void 0})]},`flow-summary-${r}`)})})}var Ye=K(Z(),1);function ps({message:o,code:e,remediation:t,docsUrl:n}){return(0,Ye.jsx)(ui,{title:"Error",variant:"error",children:(0,Ye.jsxs)(p,{flexDirection:"column",paddingY:1,children:[(0,Ye.jsxs)(d,{color:f.red,bold:!0,children:[" \u2717 ",o]}),e&&(0,Ye.jsxs)(p,{marginTop:0,marginLeft:5,children:[(0,Ye.jsx)(d,{color:f.muted,children:"Code: "}),(0,Ye.jsx)(d,{color:f.dimmed,children:e})]}),t&&(0,Ye.jsxs)(p,{flexDirection:"column",marginTop:1,marginLeft:5,children:[(0,Ye.jsx)(d,{color:f.green,bold:!0,children:"Fix:"}),(0,Ye.jsxs)(d,{color:f.cyan,children:["$ ",t]})]}),n&&(0,Ye.jsxs)(p,{marginTop:1,marginLeft:5,children:[(0,Ye.jsx)(d,{color:f.muted,children:"Docs: "}),(0,Ye.jsx)(d,{color:f.cyan,underline:!0,children:n})]})]})})}var ke=K(Z(),1);function gs({config:o,spawnOpts:e,cancelRef:t,banner:n,onComplete:r,onStepEnd:i,onReasoning:a,onStepComplete:l}){let{exit:c}=Mn(),s=ur(i,void 0,a,l),u=(0,nt.useRef)(!1),m=(0,nt.useRef)(!1),[b,E]=(0,nt.useState)("");(0,nt.useEffect)(()=>{u.current||(u.current=!0,s.startRun(o,e))},[o,e,s]),(0,nt.useEffect)(()=>{t&&(t.current=()=>s.cancelRun())},[t,s]);let h=(0,nt.useRef)(0);it((k,T)=>{T.ctrl&&k==="c"&&(s.isRunning?(h.current++,h.current>=2?c():s.cancelRun()):c())}),it((k,T)=>{s.askingUser&&(T.return?(s.sendAnswer(b),E("")):T.backspace||T.delete?E(O=>O.slice(0,-1)):k&&!T.ctrl&&!T.meta&&E(O=>O+k))},{isActive:!!s.askingUser}),(0,nt.useEffect)(()=>{if(!s.isRunning&&s.lastRunEnd&&!m.current){m.current=!0;let{passed:k,failed:T,total:O}=Rn(s.steps),C=s.bifurcationInfo;r({lastRunEnd:s.lastRunEnd,stepsPassed:k,stepsFailed:T,stepsTotal:O,hadError:!1,bifurcationFlows:C&&!C.isSingleFlow?C.flows:null}),c()}},[s.isRunning,s.lastRunEnd,s.steps,r,c]),(0,nt.useEffect)(()=>{s.runError&&!s.isRunning&&!m.current&&(m.current=!0,r({lastRunEnd:null,stepsPassed:0,stepsFailed:0,stepsTotal:0,hadError:!0,bifurcationFlows:null}),c())},[s.runError,s.isRunning,r,c]);let _=s.lastRunEnd?(()=>{let{passed:k,failed:T,total:O}=Rn(s.steps);return{status:s.lastRunEnd.status,duration:s.lastRunEnd.duration??0,summary:s.lastRunEnd.summary??"",stepsPassed:k,stepsFailed:T,stepsTotal:O,reason:s.lastRunEnd.reason,finalState:s.lastRunEnd.final_state,creditsConsumed:s.lastRunEnd.credits_consumed}})():null,I=(0,nt.useMemo)(()=>n?[{key:"banner",...n}]:[],[n]);return(0,ke.jsxs)(p,{flexDirection:"column",children:[(0,ke.jsx)(Jt,{items:I,children:k=>(0,ke.jsxs)(p,{flexDirection:"column",marginBottom:1,children:[(0,ke.jsxs)(p,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,ke.jsx)(d,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,ke.jsx)(d,{color:f.dimmed,children:" \u2502 "}),(0,ke.jsx)(d,{color:f.cyan,children:k.model}),(0,ke.jsx)(d,{color:f.dimmed,children:" \u2502 "}),(0,ke.jsx)(d,{color:f.dimmed,children:k.auth})]}),k.status?.map((T,O)=>(0,ke.jsx)(d,{color:f.dimmed,children:T},O))]},k.key)}),(()=>{let k=nr({isRunning:s.isRunning,bifurcationInfo:s.bifurcationInfo,steps:s.steps,cmInitCounts:s.cmInitCounts});return k?(0,ke.jsx)(tr,{label:k.label,hasBifurcation:k.hasBifurcation}):null})(),s.steps.length>0&&(0,ke.jsx)(Zn,{steps:s.steps,bifurcated:!!s.bifurcationInfo&&!s.bifurcationInfo.isSingleFlow,flows:s.bifurcationInfo?.flows,cmInitCounts:s.cmInitCounts,staticSteps:!0}),s.askingUser&&(0,ke.jsxs)(p,{flexDirection:"column",marginTop:1,children:[(0,ke.jsxs)(d,{color:f.yellow,children:['Agent is asking: "',s.askingUser,'"']}),(0,ke.jsxs)(d,{children:["> ",b,"\u2588"]})]}),s.runError&&(0,ke.jsx)(ps,{message:s.runError,code:"RUNNER_ERROR"}),_&&s.lastRunEnd&&(0,ke.jsx)(ms,{steps:s.steps,bifurcationInfo:s.bifurcationInfo,perFlowMetadata:s.lastRunEnd.per_flow_metadata??[]}),_&&(0,ke.jsx)(rn,{status:_.status==="passed"?"passed":"failed",summary:_.summary??"",duration:_.duration,steps:_.stepsTotal,stepsPassed:_.stepsPassed,stepsFailed:_.stepsFailed,reason:_.reason,creditsConsumed:_.creditsConsumed})]})}import{createInterface as Xa}from"readline";function ln(o){process.stdout.write(JSON.stringify(o)+`
|
|
43
|
+
`)}async function hs(o,e,t){let n=cr(o,e);zn().then(m=>{m&&ln({type:"update_available",current:m.current,latest:m.latest,severity:m.severity})}).catch(()=>{});let r=Xa({input:process.stdin});r.on("line",m=>{try{let b=JSON.parse(m);b.type==="user_response"?n.sendUserResponse(b.answer??""):b.type==="cancel"&&n.sendCancel(b.reason??"")}catch{}});let i=null,a=!1,l=0,c=null,s=0,u=!1;for await(let m of n.events)switch(m.type){case"run_start":u&&s++;break;case"step_start":{let b=m;t?.onStepLog?.("STEP_START",`Step ${b.index} started`,{index:b.index,objective:b.objective,child_id:b.child_id});let E={step:b.index+1,status:"running",remark:b.objective??`Step ${b.index+1}`};b.child_id&&(E.child_id=b.child_id),ln(E);break}case"step_event":m.event==="reasoning"&&m.detail&&m.detail!=="reasoning"&&t?.onReasoning?.(m.detail),t?.onStepLog?.("STEP_EVENT",`Step ${m.index} ${m.event}`,{index:m.index,phase:m.event,action_type:m.action_type,detail:m.detail,child_id:m.child_id});break;case"step_end":{let b=m;t?.onStepLog?.("STEP_END",`Step ${b.index} ${b.status}`,{index:b.index,status:b.status,duration:b.duration,summary:b.summary,child_id:b.child_id}),t?.onStepComplete?.(),l++;let E={step:b.index+1,status:b.status==="passed"?"done":"failed",remark:b.summary??""};b.child_id&&(E.child_id=b.child_id),ln(E);let h=u?Math.max(0,s-1):0;t?.onStepEnd?.(b.index,h);break}case"bifurcation":{let b=m,E=b.flows??[],h=b.count??E.length;(b.is_single_flow??h<=1)||(c=E,u=!0,s=0),ln({type:"bifurcation",flows:E,count:h});break}case"ask_user":{let b=m;ln({type:"ask_user",question:b.question,step_index:b.step_index,...b.options?{options:b.options}:{}});break}case"run_end":{i=m;break}case"error":{a=!0,ln({type:"error",message:m.message});break}default:break}return r.close(),await n.exited,{lastRunEnd:i,stepsTotal:l,hadError:a,bifurcationFlows:c}}var Ft=class extends Error{constructor(t,n){super(t);this.code=n;this.name="AuthError"}};async function Do(o){let{creds:e,env:t,usernameFlag:n,accessKeyFlag:r,log:i}=o,a=null,l=null;if(n&&r)a={username:n,access_key:r},i("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:n});else{let E=e.resolveAuth();E?.method==="basic"&&(a={username:E.username,access_key:E.access_key},i("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:E.username}))}if(!a){let{credentials:E,profile:h}=e.getActiveCredentials();if(!E)throw new Ft("Not authenticated \u2014 no credentials found","not_authenticated");if(l=E.access_token,E.expires_at-Date.now()/1e3<300)try{let I=await rr({creds:e,profile:h,env:t,credentials:E});I&&(l=I.accessToken,i("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(I){let k=I instanceof Error?I.message:String(I);throw i("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:k}),new Ft(`Token refresh failed: ${k}`,"refresh_failed")}}let c=ce(t),s=async()=>l,u=a?{username:a.username,access_key:a.access_key}:null,m=new en(c.controllerBaseUrl,s,u,i),b=await m.resolve();return b&&!a&&(a={username:b.username,access_key:b.access_key},i("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:b.username})),{basicAuth:a,token:l,resolver:m,resolvedCreds:b}}import{mkdtempSync as Ya,rmSync as Qa}from"fs";import{join as Za}from"path";import{tmpdir as el}from"os";async function bs(o){if(o.cft)return{instance:null,tempDir:null};if(o.wsEndpoint)return{wsEndpoint:o.wsEndpoint,instance:null,tempDir:null};if(o.cdpEndpoint){let r=await fetch(`${o.cdpEndpoint}/json/version`);if(!r.ok)throw new Error(`CDP endpoint not reachable: ${o.cdpEndpoint} (${r.status})`);return{cdpEndpoint:o.cdpEndpoint,instance:null,tempDir:null}}let e,t=null;if(o.config.chrome_profile_path)e=o.config.chrome_profile_path.replace("~",process.env.HOME??"~");else{t=Ya(Za(el(),"kane-clean-")),e=t;let r=t;ze("tempDir",()=>{try{Qa(r,{recursive:!0,force:!0})}catch{}})}let n=await ar({userDataDir:e,width:o.config.window_size.width,height:o.config.window_size.height,startUrl:o.startUrl,headless:o.headless});return{cdpEndpoint:n.cdpEndpoint,instance:n,tempDir:t}}function jn(o){let e=new fs;if(e.name("kane-cli").version(gt),o[0]==="--help"||o[0]==="-h"||o[0]==="help"){(async()=>{let{HelpView:n}=await import("./HelpView-SIIWVMWF.js"),{render:r}=await import("./build-JIKYOZUH.js"),i=await import("./react-QWOAB3TB.js"),{waitUntilExit:a}=r(i.default.createElement(n));await a(),te(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 an("--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 an("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").action(async n=>{let r=new tt,i=new qe,a=n.env,l=n.profile;if(!process.stdin.isTTY||n.oauth||n.username){if(r.setDefaultEnv(a),n.oauth)await new Kn(l,a,r).login(),console.log(`Logged in as ${l} [${a}] via OAuth`);else if(n.username&&n.accessKey){try{let{validateBasicAuth:I}=await import("./validate-basic-RV5TSUKJ.js");await I(a,n.username,n.accessKey)}catch{console.error("Credentials not valid. Please use valid credentials."),te(1,"Invalid basic-auth credentials");return}r.saveBasicAuth(l,a,{username:n.username,access_key:n.accessKey}),console.log(`Logged in as ${l} [${a}] via basic auth`)}else console.error("Provide --oauth, or --username and --access-key"),te(1,"Missing --oauth or credentials for login");r.setActiveProfile(l),i.set("model",n.model),n.chromeProfile&&i.set("chrome_profile_path",n.chromeProfile);let _=null;if(n.username&&n.accessKey)_={username:n.username,access_key:n.accessKey};else try{let k=await Do({creds:r,env:a,log:()=>{}});k.resolvedCreds&&(_={username:k.resolvedCreds.username,access_key:k.resolvedCreds.access_key})}catch{}if(n.projectId)ye(r,i,l,a,{projectId:n.projectId}),console.log(`Project set to ${n.projectId}`);else if(_)try{let{TmsClient:I}=await import("./tms-client-CTH4NVFM.js"),k=new I(ce(a).tmsBaseUrl,_.username,_.access_key),O=(await k.listProjects()).find(ne=>ne.name==="KaneAI Generated"),C,L;if(O)C=O.project_id,L=O.name;else{let ne=await k.createProject("KaneAI Generated");C=ne.id,L=ne.name}ye(r,i,l,a,{projectId:C,projectName:L}),console.log(`Auto-selected project: ${L} (${C})`)}catch(I){console.warn(`Could not auto-select project: ${I instanceof Error?I.message:I}`)}if(n.folderId)ye(r,i,l,a,{folderId:n.folderId}),console.log(`Folder set to ${n.folderId}`);else if(_){let I=r.loadProfileConfig(l,a);if(I?.project_id)try{let{TmsClient:k}=await import("./tms-client-CTH4NVFM.js"),T=new k(ce(a).tmsBaseUrl,_.username,_.access_key),C=(await T.listFolders(I.project_id)).find(ae=>ae.name==="Untitled"),L,ne;if(C)L=C.id,ne=C.name;else{let ae=await T.createFolder(I.project_id,"Untitled");L=ae.id,ne=ae.name}ye(r,i,l,a,{folderId:L,folderName:ne}),console.log(`Auto-selected folder: ${ne} (${L})`)}catch(k){console.warn(`Could not auto-select folder: ${k instanceof Error?k.message:k}`)}}Ue(r,i,l,a),console.log("Setup complete."),te(0,"Setup complete")}let{SingleShotApp:c}=await import("./SingleShotApp-UD4M2CZC.js"),{render:s}=await import("./build-JIKYOZUH.js"),u=await import("./react-QWOAB3TB.js"),m={current:null},b={current:!1},{waitUntilExit:E,unmount:h}=s(u.default.createElement(c,{resultRef:m,mode:"login",loginCompleteRef:b}),{exitOnCtrlC:!1});xn(()=>h()),await E();try{process.stdin.setRawMode?.(!1)}catch{}process.stdout.write("\x1B[?25h"),b.current&&console.log("Login setup complete."),process.exit(0)}),e.command("logout").action(async()=>{let n=new tt,r=n.getActiveProfile();if(!r){console.log("No active profile to logout");return}let i=n.getDefaultEnv(),a=await or(n,r,i),l=new qe;a.switchedTo?(Ue(n,l,a.switchedTo.profile,a.switchedTo.env),console.log(`Logged out ${a.profile} [${a.env}]. Switched to ${a.switchedTo.profile} [${a.switchedTo.env}]`)):(l.save({project_id:null,project_name:null,folder_id:null,folder_name:null}),console.log(`Logged out ${a.profile} [${a.env}]. No profiles remaining.`))}),e.command("whoami").option("--profile <name>","Profile name").action(async n=>{let r=new tt,i=n.profile??r.getActiveProfile()??"default",a=r.getDefaultEnv(),l=r.loadCredentials(i,a),c=r.loadBasicAuth(i,a),s="none",u,m,b;if(c)s="basic",u=c.username;else if(l){s="oauth";let k=l.expires_at,T=Date.now()/1e3;m=k>T?"valid":"expired",b=new Date(k*1e3).toISOString().slice(0,10)}else m="missing";let{WhoamiView:E}=await import("./WhoamiView-ZKNSYOLI.js"),{render:h}=await import("./build-JIKYOZUH.js"),_=await import("./react-QWOAB3TB.js"),{waitUntilExit:I}=h(_.default.createElement(E,{profile:i,env:a,authenticated:s!=="none",authMethod:s,username:u,tokenStatus:m,expiresAt:b}));await I()}),e.command("config <action> [value]").action(async(n,r)=>{let i=new qe,a=new tt;if(n==="show"){let l=i.load(),c=a.getActiveProfile()??"default",s=a.getDefaultEnv(),u=a.loadBasicAuth(c,s),m=a.loadCredentials(c,s),b=u?`basic (${u.username})`:m?"oauth":"not configured",{ConfigView:E}=await import("./ConfigView-5L75H3A6.js"),{render:h}=await import("./build-JIKYOZUH.js"),_=await import("./react-QWOAB3TB.js"),{waitUntilExit:I}=h(_.default.createElement(E,{model:l.model,mode:l.mode,authLabel:b,profile:c,env:s,defaultUrl:ht,projectId:l.project_id,projectName:l.project_name,folderId:l.folder_id,windowSize:`${l.window_size.width}x${l.window_size.height}`,chromeProfile:l.chrome_profile_path}));await I()}else if(n==="set-window"&&r){let l=r.split("x").map(Number),[c,s]=l;!c||!s||!Number.isInteger(c)||!Number.isInteger(s)?console.error("Invalid format. Use: kane-cli config set-window WIDTHxHEIGHT"):c<800||c>3840?console.error(`Width must be between 800 and 3840 (got ${c})`):s<600||s>2160?console.error(`Height must be between 600 and 2160 (got ${s})`):(i.set("window_size",{width:c,height:s}),console.log(`Window size set to ${c}x${s}`))}else if(n==="set-mode"){if(r!=="action"&&r!=="testing"){console.error("Mode must be 'action' or 'testing'."),te(1,"Invalid mode");return}i.set("mode",r),console.log(`Mode set to ${r}`)}else if(n==="chrome-profile"){if(r||!process.stdin.isTTY){r||(console.error("Usage: kane-cli config chrome-profile <path>"),te(1,"Missing chrome-profile path")),i.set("chrome_profile_path",r),console.log(`Chrome profile set to ${r}`);return}let{ChromeProfilePicker:l}=await import("./ChromeProfilePicker-YIDCOJVA.js"),{render:c}=await import("./build-JIKYOZUH.js"),s=await import("./react-QWOAB3TB.js");await new Promise(u=>{let{unmount:m}=c(s.default.createElement(l,{currentPath:i.load().chrome_profile_path,onSelect:b=>{i.set("chrome_profile_path",b),console.log(`Chrome profile set to ${b}`),m(),u()},onCancel:()=>{m(),u()}}))})}else if(n==="project"){if(r||!process.stdin.isTTY){r||(console.error("Usage: kane-cli config project <project-id>"),te(1,"Missing project ID"));let _=a.getActiveProfile()??"default",I=a.getDefaultEnv();ye(a,i,_,I,{projectId:r}),console.log(`Project set to ${r}`);return}let l=a.getDefaultEnv(),c=ce(l),s=a.loadBasicAuth(a.getActiveProfile()??"default",l);if(!s){console.log("Login first to browse projects");return}let{ProjectPicker:u}=await import("./ProjectPicker-57G2ILEN.js"),{AuthResolver:m}=await import("./resolver-QLDOAIXU.js"),{render:b}=await import("./build-JIKYOZUH.js"),E=await import("./react-QWOAB3TB.js"),h=new m(c.controllerBaseUrl,async()=>null,s);await h.resolve(),await new Promise(_=>{let{unmount:I}=b(E.default.createElement(u,{resolver:h,currentProjectId:i.load().project_id,env:l,onSelect:(k,T)=>{let O=a.getActiveProfile()??"default",C=a.getDefaultEnv();ye(a,i,O,C,{projectId:k,projectName:T}),console.log(`Project set to ${T} (${k})`),I(),_()},onCancel:()=>{I(),_()}}))})}else if(n==="folder"){if(r||!process.stdin.isTTY){if(r||(console.error("Usage: kane-cli config folder <folder-id>"),te(1,"Missing folder ID")),!i.load().project_id){console.log("Select a project first: kane-cli config project <id>");return}let k=a.getActiveProfile()??"default",T=a.getDefaultEnv();ye(a,i,k,T,{folderId:r}),console.log(`Folder set to ${r}`);return}let l=i.load();if(!l.project_id){console.log("Select a project first: kane-cli config project");return}let c=a.getDefaultEnv(),s=ce(c),u=a.loadBasicAuth(a.getActiveProfile()??"default",c);if(!u){console.log("Login first to browse folders");return}let{FolderPicker:m}=await import("./FolderPicker-LEE4Y5JF.js"),{AuthResolver:b}=await import("./resolver-QLDOAIXU.js"),{render:E}=await import("./build-JIKYOZUH.js"),h=await import("./react-QWOAB3TB.js"),_=new b(s.controllerBaseUrl,async()=>null,u);await _.resolve(),await new Promise(I=>{let{unmount:k}=E(h.default.createElement(m,{resolver:_,projectId:l.project_id,currentFolderId:l.folder_id,env:c,onSelect:(T,O)=>{let C=a.getActiveProfile()??"default",L=a.getDefaultEnv();ye(a,i,C,L,{folderId:T,folderName:O}),console.log(`Folder set to ${O} (${T})`),k(),I()},onCancel:()=>{k(),I()}}))})}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: ${Mt(Me,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new an("--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 an("--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 an("--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("--skip-code-validation","Skip post-codegen worker-side validation").option("--no-skip-code-validation","Force post-codegen worker-side validation").addHelpText("after",`
|
|
59
44
|
Variables:
|
|
60
45
|
Variables are loaded in order (later wins):
|
|
61
|
-
1. Global: ${
|
|
46
|
+
1. Global: ${Mt(Me,"variables")}/*.json
|
|
62
47
|
2. Local: {cwd}/.testmuai/variables/*.json
|
|
63
48
|
3. File: --variables-file <path>
|
|
64
49
|
4. Inline: --variables '{"key": {"value": "...", "secret": false}}'
|
|
@@ -73,16 +58,20 @@ Variables:
|
|
|
73
58
|
|
|
74
59
|
Context Files:
|
|
75
60
|
Context files provide additional instructions to the agent.
|
|
76
|
-
Global: ${
|
|
61
|
+
Global: ${Mt(Me,"global-memory.md")}
|
|
77
62
|
Local: {cwd}/.testmuai/context.md
|
|
78
63
|
|
|
79
64
|
Override with --global-context / --local-context flags.
|
|
80
|
-
`).action(async(n,r)=>{try{let
|
|
81
|
-
`)};
|
|
82
|
-
Timeout: ${r.timeout}s exceeded \u2014 cancelling...`),
|
|
83
|
-
|
|
65
|
+
`).action(async(n,r)=>{try{let i=new tt,a=new qe,l=a.load(),c;if(r.mode===void 0)c=l.mode==="action"?"action":"testing";else if(r.mode==="action"||r.mode==="testing")c=r.mode;else{console.error("Invalid --mode. Must be 'action' or 'testing'."),te(2,"Invalid --mode");return}if(!(r.username&&r.accessKey)){let F=i.getActiveProfile(),ie=i.getDefaultEnv();F&&(i.loadBasicAuth(F,ie)||i.loadCredentials(F,ie))||(console.error("Not authenticated. Run: kane-cli login --oauth, or kane-cli login --username <user> --access-key <key>"),te(1,"Not authenticated"))}let s=`${i.getActiveProfile()??"no profile"}/${i.getDefaultEnv()}`,u=[],m=r.env??i.getDefaultEnv(),b=null,E=[],h=(F,ie,X,ge)=>{b?b(F,ie,X,ge):E.push([F,ie,X,ge])},_;try{_=await Do({creds:i,env:m,usernameFlag:r.username,accessKeyFlag:r.accessKey,log:h})}catch(F){throw F instanceof Ft&&(console.error(F.code==="not_authenticated"?"Not authenticated. Run: kane-cli login":"Token refresh failed. Run: kane-cli login"),te(2,F.code==="not_authenticated"?"Not authenticated":"Token refresh failed")),F}let I=!!_.basicAuth,k=_.basicAuth?.username,T=_.basicAuth?.access_key,O=_.token,C=_.resolver,L=_.resolvedCreds;_.basicAuth&&u.push(`Auth: ${_.basicAuth.username}`);let ne=i.getActiveProfile()??"default",ae=i.getDefaultEnv();Hn(i,a,ne,ae);let le=a.load();if(!r.local){let F={projectId:le.project_id,projectName:le.project_name,folderId:le.folder_id,folderName:le.folder_name};Qo(F)||(console.error("Project and folder must be configured. Run `kane-cli` (no args) for interactive setup, or `kane-cli config project <id>` then `kane-cli config folder <id>`."),te(2,"Project/folder not configured"))}let he=ht,xe=wr({objective:n,globalDir:Mt(Me,"variables"),localDir:Mt(process.cwd(),".testmuai","variables"),file:r.variablesFile,inline:r.variables,onLoadError:F=>console.error(F)}),D;if(r.sessionContext)try{D=JSON.parse(r.sessionContext)}catch{console.error("Invalid --session-context JSON"),te(2,"Invalid --session-context JSON")}let M=r.globalContext??Mt(Me,"global-memory.md"),v=r.localContext??Mt(process.cwd(),".testmuai","context.md"),U=on(M),J=on(v),G;try{G=await bs({config:l,startUrl:he??void 0,headless:r.headless,cft:r.cft,wsEndpoint:r.wsEndpoint,cdpEndpoint:r.cdpEndpoint})}catch(F){console.error(sr(F));let ie=F instanceof nn?"Chrome not found at standard paths":`Chrome failed: ${F instanceof Error?F.message:F}`;te(2,ie)}G.instance&&ze("chrome",()=>{G.instance.kill()});let Q=null,Y=G.cdpEndpoint??r.cdpEndpoint;Y&&!r.cft&&!r.wsEndpoint&&(Q=dr({headless:r.headless,cdpEndpoint:Y,chromePid:G.instance?.process.pid}),Q&&ze("marker-overlay",()=>Q.kill())),r.cft?u.push("CfT mode: Playwright will manage its own browser"):r.wsEndpoint?u.push(`Playwright WS endpoint (${r.wsEndpoint.slice(0,60)}...)`):r.cdpEndpoint?u.push(`CDP connected (${r.cdpEndpoint})`):G.cdpEndpoint&&u.push(`Chrome ready (${G.cdpEndpoint})`);let j=new bn;j.start({model:r.model??l.model,environment:m,profile:i.getActiveProfile()}),b=(F,ie,X,ge)=>j.log(F,ie,X,ge);for(let F of E)j.log(...F);if(E.length=0,_.resolvedCreds){let{createRemoteLogger:F}=await import("./logging-JWPN5HMJ.js"),{getMachineId:ie}=await import("./machine-id-DZN4MYOO.js"),X=F({sessionId:j.sessionId,identity:{org_id:String(_.resolvedCreds.org_id??""),user_id:String(_.resolvedCreds.user_id??""),machine_id:ie(),email:_.resolvedCreds.email??null,email_domain:_.resolvedCreds.email_domain??"unknown",user_type:_.resolvedCreds.user_type??"unknown",env:m},getToken:async()=>_.token});j.setRemoteLogger(X),X.start(),ze("remote-logger",()=>X.shutdownSync()),Gn(X)}let me=_.basicAuth&&!r.local?await yr({variables:xe,auth:_.basicAuth,orgId:String(_.resolvedCreds?.org_id??""),env:m,localMode:!!r.local,log:(F,ie,X,ge)=>j.log(F,ie,X,ge)}):{};if(j.setAuteurVariables(xe.auteur),j.setFirstRun(n,ht),!r.local&&_.basicAuth&&le.project_id){let F=ce(m),ie=await Sr({tmsBaseUrl:F.tmsBaseUrl,auth:_.basicAuth,objective:n,url:ht,projectId:le.project_id,folderId:le.folder_id??"",hasCustomProfile:!!l.chrome_profile_path,log:(X,ge,Se,lt)=>j.log(X,ge,Se,lt)});ie&&j.setTestId(ie)}let pe=_r({objective:xe.auteurObjective,url:he??void 0,model:r.model??l.model,chrome:G,auth:_,sessionId:j.sessionId,runIndex:0,windowSize:l.window_size,maxSteps:parseInt(r.maxSteps,10),headless:r.headless,disableAskUser:!process.stdin.isTTY,enableTaskSkills:r.taskSkills,variables:Object.keys(xe.auteur).length>0?xe.auteur:void 0,globalContext:U??void 0,localContext:J??void 0,sessionContext:D}),Te=null;if(!r.local)try{let{ControllerClient:F}=await import("./controller-client-7BIK5FYL.js"),ie;if(I&&k&&T)ie={username:k,accessKey:T};else if(O)ie=O;else throw new Error("No auth available");let ge=await new F(ce(m).controllerBaseUrl,ie).getScreenshotSas();j.setScreenshotSas(ge),Te=new sn(ge,3,(Se,lt,Ee,Ae)=>j.log(Se,lt,Ee,Ae)),j.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched",{base_url:ge.base_url,container:ge.container,expiry:ge.expiry})}catch(F){j.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS token fetch failed",{error:F instanceof Error?F.message:String(F)})}let Ne=Te?(F,ie,X)=>{br(j.sessionDir,ie,F,Te,(ge,Se,lt,Ee)=>j.log(ge,Se,lt,Ee),X)}:void 0;if(!process.stdin.isTTY&&!r.agent&&(r.agent=!0),r.agent){let F=de=>{process.stdout.write(JSON.stringify(de)+`
|
|
66
|
+
`)};Q?.setRunActive(!0);let ie;try{ie=await hs(pe,{environment:m,mode:c,log:(de,De,Ze,rt)=>j.log(de,De,Ze,rt)},{onStepEnd:Ne,onStepLog:(de,De,Ze)=>j.logStep(de,De,Ze),onReasoning:de=>Q?.setStepText(de),onStepComplete:()=>Q?.setStepComplete()})}finally{Q?.setRunActive(!1)}let{lastRunEnd:X,stepsTotal:ge,hadError:Se,bifurcationFlows:lt}=ie;if(Se&&j.escalateRun(0),X){let de=yn(X,0,lt);j.addRunResult(_n(X,n,0,de),X.total_runs)}Je("chrome","Agent run completed");let Ee;if(j.log("info","DIRECT_UPLOAD_START","Starting direct upload (agent mode)",{agent_mode:!0,last_run_end:!!X,local:!!r.local}),X&&!r.local)try{let de=ce(m),De=le.project_id;if(_.basicAuth){let{UploadPipeline:Ze}=await import("./pipeline-6DGALO2W.js");Te&&await Te.drain();let rt=On({session:j,env:m,auth:_,variables:xe,variableIds:me,projectId:De,folderId:le.folder_id,totalSteps:ge,totalDuration:X.duration??0,codeExport:Dn({codeExport:r.codeExport,codeLanguage:r.codeLanguage,skipCodeValidation:r.skipCodeValidation},l.code_export),onProgress:()=>{},log:(Kt,Gt,Ln,qt)=>j.log(Kt,Gt,Ln,qt)}),Be=await new Ze(rt).execute();Be.success&&(Be.testcaseId&&j.setTestcaseId(Be.testcaseId),Be.testcaseId&&Be.shareId&&De&&(Ee=Vt(de.testManagerUiUrl,De,Be.testcaseId,Be.shareId)))}}catch(de){j.log("error","DIRECT_UPLOAD_ERROR","Upload failed in agent mode",{error:de instanceof Error?de.message:String(de)})}if(X){let de={...X};Ee&&(de.test_url=Ee),F(de)}await j.finish("complete"),X||te(Se?2:1,"Agent run ended with no result");let Ae=X.reason??"";(Ae.includes("Cancel")||Ae.includes("Timeout"))&&te(3,`Agent run: ${Ae}`),X.status==="passed"&&te(0,"Agent run passed"),te(1,"Agent run failed")}let ue=null,Ke=0,_t=!1,$n=null,Ht={current:null},{waitUntilExit:cn}=hn(xs.default.createElement(gs,{config:pe,spawnOpts:{environment:m,mode:c,log:(F,ie,X,ge)=>j.log(F,ie,X,ge)},cancelRef:Ht,banner:{model:r.model??l.model,auth:s,status:u},onComplete:F=>{ue=F.lastRunEnd,Ke=F.stepsTotal,_t=F.hadError,$n=F.bifurcationFlows},onStepEnd:Ne,onReasoning:F=>Q?.setStepText(F),onStepComplete:()=>Q?.setStepComplete()}),{stdout:process.stderr,exitOnCtrlC:!1}),St;if(r.timeout){let F=parseInt(r.timeout,10)*1e3;St=setTimeout(()=>{console.error(`
|
|
67
|
+
Timeout: ${r.timeout}s exceeded \u2014 cancelling...`),Ht.current?.()},F)}Q?.setRunActive(!0);try{await cn()}finally{Q?.setRunActive(!1)}if(St&&clearTimeout(St),ue){let F=yn(ue,0,$n);j.addRunResult(_n(ue,n,0,F),ue.total_runs)}if(Je("chrome","Ink run completed"),j.log("info","DIRECT_UPLOAD_START","Starting direct upload (ink mode)",{ink_mode:!0,last_event:!!ue,local:!!r.local}),ue&&!r.local)try{let F=ce(m),ie=le.project_id;if(_.basicAuth){let{UploadPipeline:X}=await import("./pipeline-6DGALO2W.js");Te&&(j.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot upload queue before pipeline"),await Te.drain(),j.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot upload queue drained"));let ge=On({session:j,env:m,auth:_,variables:xe,variableIds:me,projectId:le.project_id,folderId:le.folder_id,totalSteps:Ke,totalDuration:ue.duration??0,codeExport:Dn({codeExport:r.codeExport,codeLanguage:r.codeLanguage,skipCodeValidation:r.skipCodeValidation},l.code_export),onProgress:()=>{},log:(Ae,de,De,Ze)=>j.log(Ae,de,De,Ze)}),Se=new X(ge),{renderUploadProgress:lt}=await import("./CliUploadProgress-YJW7DHBT.js"),Ee=await lt(Se,Ae=>{if(Ae.testcaseId&&Ae.shareId&&ie)return Vt(F.testManagerUiUrl,ie,Ae.testcaseId,Ae.shareId)});if(Ee.success){Ee.testcaseId&&j.setTestcaseId(Ee.testcaseId);let Ae=Ee.testcaseId&&Ee.shareId&&ie?Vt(F.testManagerUiUrl,ie,Ee.testcaseId,Ee.shareId):void 0,de=Ee.testcaseId&&ie?Pn(F.testManagerUiUrl,ie,Ee.testcaseId):void 0;if(Ae||de||Ee.codeExportDir){let{LinksBox:De}=await import("./LinksBox-M72NCTRJ.js"),{render:Ze}=await import("./build-JIKYOZUH.js"),rt=await import("./react-QWOAB3TB.js"),{waitUntilExit:Wt}=Ze(rt.default.createElement(De,{shareableLink:Ae,testCaseLink:de,codeExportDir:Ee.codeExportDir}),{stdout:process.stderr});await Wt()}}if(j.testId){let{renderFeedbackPrompt:Ae}=await import("./CliFeedbackPrompt-T5LVDBVG.js"),de=await Ae();if(de)try{await Er({tmsBaseUrl:F.tmsBaseUrl,username:_.basicAuth.username,accessKey:_.basicAuth.access_key,testId:j.testId,feedbackType:de,log:(De,Ze,rt,Wt)=>j.log(De,Ze,rt,Wt)})}catch(De){j.log("warn","FEEDBACK_FAILED","Feedback submission failed",{error:String(De)})}}}}catch(F){j.log("error","DIRECT_UPLOAD_FAILED","Direct upload failed (ink mode)",{error:F instanceof Error?F.stack??F.message:String(F)}),console.error(`Upload failed: ${F}`)}await j.finish("complete"),ue||te(_t?2:1,"Run ended with no result");let dn=ue.reason??"";(dn.includes("Cancel")||dn.includes("Timeout"))&&te(3,`Run: ${dn}`),ue.status==="passed"&&te(0,"Run passed"),te(1,"Run failed")}catch(i){te(2,`CLI error: ${i instanceof Error?i.message:String(i)}`)}}),e.command("profiles [action] [name]").option("--env <name>","Environment for switch/delete").action(async(n,r,i)=>{let a=new tt;if(n==="list"||!n&&!process.stdin.isTTY){let u=a.listProfiles();if(u.length===0){console.log("No profiles configured. Run: kane-cli login");return}let m=a.getActiveProfile(),b=a.getDefaultEnv();for(let E of u){let h=E.profile===m&&E.env===b?" (active)":"";console.log(`${E.profile} [${E.env}]${h}`)}return}if(n==="switch"&&r){let u=i?.env??a.getDefaultEnv();a.setActiveProfile(r),a.setDefaultEnv(u),Ue(a,new qe,r,u),console.log(`Switched to ${r} [${u}]`);return}if(n==="delete"&&r){let u=i?.env??a.getDefaultEnv();a.deleteProfileFull(r,u),console.log(`Deleted profile ${r} [${u}]`);return}process.stdin.isTTY||(console.error("Usage: kane-cli profiles list|switch|delete <name> [--env <env>]"),te(1,"Invalid profiles usage"));let{ProfilesView:l}=await import("./ProfilesView-6MW5P6M4.js"),{render:c}=await import("./build-JIKYOZUH.js"),s=await import("./react-QWOAB3TB.js");await new Promise(u=>{let{unmount:m}=c(s.default.createElement(l,{creds:a,onSwitch:(b,E)=>{a.setActiveProfile(b),a.setDefaultEnv(E),console.log(`Switched to ${b} [${E}]`)},onCancel:()=>{m(),u()}}))})}),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"'),te(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"),te(1,"--details exceeds 500 character limit"));let r=new tt,i=n.env??r.getDefaultEnv(),a=ce(i),l=!1,c=n.username,s=n.accessKey,u;if(n.username&&n.accessKey)l=!0;else{let k=r.resolveAuth();k?.method==="basic"&&(l=!0,c=k.username,s=k.access_key)}if(!l){let{credentials:k}=r.getActiveCredentials();k||(console.error("Not authenticated. Run: kane-cli login"),te(2,"Not authenticated for feedback")),u=k.access_token}let m=async()=>u??null,b=l&&c&&s?{username:c,access_key:s}:null,h=await new en(a.controllerBaseUrl,m,b).resolve(),_=h?.username??c,I=h?.access_key??s;(!_||!I)&&(console.error(JSON.stringify({error:"Could not resolve TMS credentials"})),te(1,"Could not resolve TMS credentials for feedback"));try{let{TmsClient:k}=await import("./tms-client-CTH4NVFM.js"),O=await new k(a.tmsBaseUrl,_,I).submitFeedback({instruction_id:"",test_id:n.testId,feedback_type:n.feedbackType,details:n.details,mode:"agent"});console.log(JSON.stringify(O)),te(0,"Feedback submitted")}catch(k){console.error(JSON.stringify({error:k instanceof Error?k.message:String(k)})),te(1,`Feedback failed: ${k instanceof Error?k.message:String(k)}`)}}),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 r=new tt,i=n.profile??r.getActiveProfile()??"default",a=n.env??r.getDefaultEnv(),l=ce(a),c=r.loadBasicAuth(i,a),s=null;if(n.username&&n.accessKey)s={username:n.username,accessKey:n.accessKey};else if(c)s={username:c.username,accessKey:c.access_key};else{let u=r.loadCredentials(i,a);u||(console.error(`No credentials for profile "${i}" [${a}]. Run "kane-cli login" first.`),te(2,`No credentials for profile "${i}" [${a}]`)),s=u.access_token}try{let{ControllerClient:u}=await import("./controller-client-7BIK5FYL.js"),b=await new u(l.controllerBaseUrl,s).getCreditBalance();console.log(`Available credits: ${b.available_credits}`),console.log(`Total credits: ${b.total_credits}`),te(0,"Balance retrieved")}catch(u){console.error(`Error: ${u instanceof Error?u.message:String(u)}`),te(1,`Balance check failed: ${u instanceof Error?u.message:String(u)}`)}}),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:r,formatChangelog:i}=await import("./changelog-TWE6QJ5S.js"),a=await r({all:n.all});console.log(i(a))}),e.parse(["node","kane-cli",...o])}function vs(o){let e,t,n,r=[];for(let i=0;i<o.length;i++){let a=o[i];if(a==="--code-export")e=!0;else if(a==="--skip-code-validation")n=!0;else if(a==="--no-skip-code-validation")n=!1;else if(a==="--code-language"){let l=o[i+1];l!==void 0&&(t=l,i++)}else a.startsWith("--code-language=")?t=a.slice(16):r.push(a)}return{codeExport:e,codeLanguage:t,skipCodeValidation:n,filteredArgs:r}}function Tr(o,e){let t=o.split(".").map(r=>Number(r)||0),n=e.split(".").map(r=>Number(r)||0);for(let r=0;r<3;r++){let i=t[r]??0,a=n[r]??0;if(i<a)return-1;if(i>a)return 1}return 0}var tl=[{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:o=>{let e=[];return o.code_export.enabled===!1&&e.push({field:"code_export.enabled",from:!1,to:!0,description:"Code export is now enabled by default."}),o.mode==="action"&&e.push({field:"mode",from:"action",to:"testing",description:"Default run mode is now 'testing'."}),{cfg:{...o,code_export:{...o.code_export,enabled:!0},mode:"testing"},changes:e}}}];function ws(o,e=gt,t=tl){let n=o.exists(),r=o.load();if(!n)return o.set("last_seen_version",e),{changes:[],fromVersion:e,toVersion:e,appliedVersions:[]};let i=r.last_seen_version||"0.0.0";if(Tr(i,e)>=0)return{changes:[],fromVersion:i,toVersion:i,appliedVersions:[]};let a=t.filter(m=>Tr(i,m.version)<0&&Tr(m.version,e)<=0).sort((m,b)=>Tr(m.version,b.version)),l=r,c=[],s=[];for(let m of a){let{cfg:b,changes:E}=m.apply(l);l=b,c.push(...E),s.push(m.version)}let u={...l,last_seen_version:e};return o.writeRaw(u),{changes:c,fromVersion:i,toVersion:e,appliedVersions:s}}function ys(o){return o.changes.length===0?"":[`kane-cli updated to ${o.toVersion}. Default settings changed:`,...o.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(`
|
|
68
|
+
`)}ti();var Rs=zn().catch(()=>null),Ar=null,ks=()=>Ar||(Ar=ws(new qe),Ar),Ir=Qe.argv.slice(2),nl=Ir.includes("--dev"),_s=Ir.includes("--local"),rl=Ir.includes("--tui");nl&&(Qe.env.KANE_DEV_MODE="1");var ol=Ir.filter(o=>!["--dev","--local","--tui"].includes(o)),Pr=vs(ol),Ut=Pr.filteredArgs,Ss=Pr.codeExport,Bo=Pr.codeLanguage,jo=Pr.skipCodeValidation,Es=()=>{Rs.then(o=>{o&&Qe.stderr.write(`
|
|
69
|
+
Update available: ${o.current} \u2192 ${o.latest} \u2014 run \`${ci()}\` to update
|
|
84
70
|
|
|
85
|
-
`)})},
|
|
86
|
-
|
|
71
|
+
`)})},Cs=()=>{let o=ys(ks());o&&Qe.stderr.write(`
|
|
72
|
+
${o}
|
|
73
|
+
|
|
74
|
+
`)},il=new Set(["--help","-h","--version","-V"]),sl=Ut[0]==="help"||Ut.some(o=>il.has(o));if(sl)jn(Ut);else if(rl){Qe.stdin.isTTY||(Qe.stderr.write(`Error: --tui mode requires an interactive terminal (TTY).
|
|
75
|
+
`),Qe.exit(1)),Es();let{waitUntilExit:o,unmount:e}=hn($o.default.createElement(Qi,{localMode:_s,codeExport:Ss,codeLanguage:Bo,skipCodeValidation:jo,updatePromise:Rs,migrationResult:ks()}),{exitOnCtrlC:!1});xn(()=>e()),zr(()=>{try{Qe.stdin.setRawMode?.(!1)}catch{}Qe.stdout.write("\x1B[?25h")}),o().then(()=>{te(0,"TUI session ended")})}else if(Ut.length>0){let o=new Set(["login","logout","whoami","config","run","profiles","feedback","balance","help","update","changelog","setup"]),e=Ut[0],t=o.has(e),n=e.startsWith("-");Es(),Cs(),t||n?jn(Ut):jn(["run",...Ut])}else{Qe.stdin.isTTY||(Qe.stderr.write(`Error: kane-cli requires an interactive terminal (TTY) when run without arguments.
|
|
87
76
|
Usage: kane-cli "objective" for non-interactive mode.
|
|
88
|
-
`),
|
|
77
|
+
`),Qe.exit(1));let o={current:null},{waitUntilExit:e,unmount:t}=hn($o.default.createElement(di,{resultRef:o}),{exitOnCtrlC:!1});xn(()=>t()),zr(()=>{try{Qe.stdin.setRawMode?.(!1)}catch{}Qe.stdout.write("\x1B[?25h")}),e().then(()=>{let n=o.current;if(!n){te(0,"Single-shot session ended (no objective)");return}Cs();let r=["run",n.objective];_s&&r.push("--local"),Ss&&r.push("--code-export"),Bo&&r.push("--code-language",Bo),jo===!0&&r.push("--skip-code-validation"),jo===!1&&r.push("--no-skip-code-validation"),jn(r)})}
|