@testmuai/kane-cli 0.2.5 → 0.2.7
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-J34PIRKT.js → ChromeProfilePicker-TSTGICKC.js} +1 -1
- package/dist/{CliFeedbackPrompt-6BF5FIGV.js → CliFeedbackPrompt-D2GV3CIR.js} +1 -1
- package/dist/{CliUploadProgress-OLN4CLU7.js → CliUploadProgress-3LN7ZAQQ.js} +1 -1
- package/dist/ConfigView-HFR7OLBN.js +2 -0
- package/dist/FolderPicker-JMDO2YEV.js +2 -0
- package/dist/HelpView-GAECHNPW.js +2 -0
- package/dist/{LinksBox-P7HGFKVG.js → LinksBox-VNX4GTYY.js} +1 -1
- package/dist/{LoginWizard-LQKZ3AYY.js → LoginWizard-POE64KP6.js} +1 -1
- package/dist/{ProfilesView-RXVSD4YZ.js → ProfilesView-AJFBUG46.js} +1 -1
- package/dist/ProjectPicker-FTUZCSBL.js +2 -0
- package/dist/{WhoamiView-GVVXM665.js → WhoamiView-FSFBRPAS.js} +1 -1
- package/dist/{changelog-WS4VVR5W.js → changelog-WJATJ25O.js} +1 -1
- package/dist/chunk-22Q72KEE.js +2 -0
- package/dist/chunk-32JVIWDK.js +2 -0
- package/dist/chunk-5TNGPFD4.js +2 -0
- package/dist/chunk-665WKKCX.js +2 -0
- package/dist/{chunk-5DRGVR7L.js → chunk-DCUGTUXD.js} +1 -1
- package/dist/chunk-DXKKUGFG.js +2 -0
- package/dist/{chunk-V77DQ5LB.js → chunk-FGRL7YK2.js} +1 -1
- package/dist/chunk-HFQ7T5KT.js +2 -0
- package/dist/{chunk-UJP3DMYF.js → chunk-HPYGNTYE.js} +1 -1
- package/dist/chunk-IEPLQSZE.js +106 -0
- package/dist/chunk-IFWLAQ3L.js +2 -0
- package/dist/{chunk-6JF2T7BO.js → chunk-JWPOUEON.js} +10 -8
- package/dist/chunk-KBTVURNO.js +2 -0
- package/dist/chunk-L5Y2GUO6.js +2 -0
- package/dist/chunk-LAVCECRF.js +2 -0
- package/dist/chunk-N5O3NTGW.js +2 -0
- package/dist/{chunk-37E6GGJP.js → chunk-ND4JFVHY.js} +1 -1
- package/dist/chunk-PWGEMRBD.js +2 -0
- package/dist/chunk-QDWB44VO.js +2 -0
- package/dist/chunk-QXBLFS66.js +2 -0
- package/dist/chunk-RZYQ7T3Y.js +2 -0
- package/dist/controller-client-7BIK5FYL.js +2 -0
- package/dist/index.js +57 -47
- package/dist/logging-X4C7SASV.js +2 -0
- package/dist/login-flow-47Y4Y2UB.js +2 -0
- package/dist/machine-id-DZN4MYOO.js +2 -0
- package/dist/pipeline-W3MWTZHK.js +2 -0
- package/dist/resolver-QLDOAIXU.js +2 -0
- package/dist/tms-client-VH42IFUF.js +2 -0
- package/dist/{updater-KDWM6PUM.js → updater-L2ORCIIP.js} +1 -1
- package/dist/{version-check-YRWT2JIC.js → version-check-IF4G6QYT.js} +1 -1
- package/package.json +5 -4
- package/dist/ConfigView-P4W6OHZK.js +0 -2
- package/dist/FolderPicker-CJAJHSMM.js +0 -2
- package/dist/HelpView-AZGTX7MR.js +0 -2
- package/dist/ProjectPicker-GFSQKLDY.js +0 -2
- package/dist/chunk-4XWNQQSQ.js +0 -2
- package/dist/chunk-722N7IS6.js +0 -2
- package/dist/chunk-C5U522LO.js +0 -2
- package/dist/chunk-CVDB2PVG.js +0 -2
- package/dist/chunk-F5NOXQWP.js +0 -2
- package/dist/chunk-F6J3XGBQ.js +0 -2
- package/dist/chunk-FH54KGU4.js +0 -2
- package/dist/chunk-GPQFSC4B.js +0 -2
- package/dist/chunk-I7KNK4LR.js +0 -2
- package/dist/chunk-I7YWZ3D2.js +0 -2
- package/dist/chunk-W22K4TDJ.js +0 -2
- package/dist/chunk-YNF4MUQP.js +0 -2
- package/dist/controller-client-VI55T5AT.js +0 -2
- package/dist/exitCleanup-J3GVD6U2.js +0 -2
- package/dist/pipeline-ZLHWF3V7.js +0 -2
- package/dist/resolver-XLRER3KZ.js +0 -2
- package/dist/tms-client-QWVBCUUT.js +0 -2
package/dist/index.js
CHANGED
|
@@ -1,51 +1,59 @@
|
|
|
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,r
|
|
3
|
+
import{a as Lr}from"./chunk-HPYGNTYE.js";import{c as Vn}from"./chunk-FGRL7YK2.js";import{a as Go}from"./chunk-DCUGTUXD.js";import{a as Ct,b as Lo,c as Ln,d as Ho,e as $r}from"./chunk-QDWB44VO.js";import{a as Wo}from"./chunk-LAVCECRF.js";import{b as Rt}from"./chunk-665WKKCX.js";import{b as At}from"./chunk-5TNGPFD4.js";import"./chunk-RZYQ7T3Y.js";import{a as Ne,b as Jt,c as mn}from"./chunk-IEPLQSZE.js";import{a as ae}from"./chunk-N5O3NTGW.js";import{a as ut}from"./chunk-PWGEMRBD.js";import{b as Uo}from"./chunk-32JVIWDK.js";import{a as No}from"./chunk-IFWLAQ3L.js";import{a as Mo}from"./chunk-JWPOUEON.js";import{a as Fo}from"./chunk-L5Y2GUO6.js";import{b as zt}from"./chunk-KBTVURNO.js";import{b as Dr}from"./chunk-ND4JFVHY.js";import{c as jr}from"./chunk-QXBLFS66.js";import{a as Q}from"./chunk-HCBYKLMW.js";import{a as pt,c as Ee,d as $o,h as ct,i as Pr,j as Or,t as h}from"./chunk-22Q72KEE.js";import{a as y,b as f,c as fn,d as Kt,i as $e,j as qt,k as Et}from"./chunk-Q7JVDEOV.js";import{a as je}from"./chunk-6YGTRKDT.js";import{a as ot}from"./chunk-HFQ7T5KT.js";import{a as Vo,b as Bo}from"./chunk-DXKKUGFG.js";import{a as dn,c as Lt,e as N}from"./chunk-UR6MHSHU.js";var Rn=Lt(co=>{"use strict";var pr=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}},lo=class extends pr{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};co.CommanderError=pr;co.InvalidArgumentError=lo});var gr=Lt(fo=>{"use strict";var{InvalidArgumentError:ba}=Rn(),uo=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 ba(`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 wa(s){let e=s.name()+(s.variadic===!0?"...":"");return s.required?"<"+e+">":"["+e+"]"}fo.Argument=uo;fo.humanReadableArgName=wa});var po=Lt(Ns=>{"use strict";var{humanReadableArgName:ya}=gr(),mo=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,o)=>r.name().localeCompare(o.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),o=n.long&&e._findOption(n.long);!r&&!o?t.push(n):n.long&&!o?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(o=>!o.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=>ya(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,o=2,a=2;function l(x,E){if(E){let k=`${x.padEnd(n+a)}${E}`;return t.wrap(k,r-o,n+a)}return x}function i(x){return x.join(`
|
|
4
|
+
`).replace(/^/gm," ".repeat(o))}let c=[`Usage: ${t.commandUsage(e)}`,""],d=t.commandDescription(e);d.length>0&&(c=c.concat([t.wrap(d,r,0),""]));let m=t.visibleArguments(e).map(x=>l(t.argumentTerm(x),t.argumentDescription(x)));m.length>0&&(c=c.concat(["Arguments:",i(m),""]));let g=t.visibleOptions(e).map(x=>l(t.optionTerm(x),t.optionDescription(x)));if(g.length>0&&(c=c.concat(["Options:",i(g),""])),this.showGlobalOptions){let x=t.visibleGlobalOptions(e).map(E=>l(t.optionTerm(E),t.optionDescription(E)));x.length>0&&(c=c.concat(["Global Options:",i(x),""]))}let p=t.visibleCommands(e).map(x=>l(t.subcommandTerm(x),t.subcommandDescription(x)));return p.length>0&&(c=c.concat(["Commands:",i(p),""])),c.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 o=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",a=new RegExp(`[\\n][${o}]+`);if(e.match(a))return e;let l=t-n;if(l<r)return e;let i=e.slice(0,n),c=e.slice(n).replace(`\r
|
|
6
6
|
`,`
|
|
7
|
-
`),
|
|
8
|
-
|.{1,${
|
|
9
|
-
`?"":(
|
|
10
|
-
`)}};
|
|
11
|
-
(Did you mean one of ${
|
|
12
|
-
(Did you mean ${
|
|
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 '${
|
|
15
|
-
- already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=
|
|
7
|
+
`),d=" ".repeat(n),g="\\s\u200B",p=new RegExp(`
|
|
8
|
+
|.{1,${l-1}}([${g}]|$)|[^${g}]+?([${g}]|$)`,"g"),x=c.match(p)||[];return i+x.map((E,k)=>E===`
|
|
9
|
+
`?"":(k>0?d:"")+E.trimEnd()).join(`
|
|
10
|
+
`)}};Ns.Help=mo});var _o=Lt(vo=>{"use strict";var{InvalidArgumentError:Sa}=Rn(),go=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=Ca(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 Sa(`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 Ea(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},ho=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,o=r!==void 0?r:!1;return t.negate===(o===e)}};function Ea(s){return s.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Ca(s){let e,t,n=s.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}}vo.Option=go;vo.DualOptions=ho});var Hs=Lt(Ms=>{"use strict";function Ra(s,e){if(Math.abs(s.length-e.length)>3)return Math.max(s.length,e.length);let t=[];for(let n=0;n<=s.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<=s.length;r++){let o=1;s[r-1]===e[n-1]?o=0:o=1,t[r][n]=Math.min(t[r-1][n]+1,t[r][n-1]+1,t[r-1][n-1]+o),r>1&&n>1&&s[r-1]===e[n-2]&&s[r-2]===e[n-1]&&(t[r][n]=Math.min(t[r][n],t[r-2][n-2]+1))}return t[s.length][e.length]}function Aa(s,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=s.startsWith("--");t&&(s=s.slice(2),e=e.map(a=>a.slice(2)));let n=[],r=3,o=.4;return e.forEach(a=>{if(a.length<=1)return;let l=Ra(s,a),i=Math.max(s.length,a.length);(i-l)/i>o&&(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
|
+
(Did you mean one of ${n.join(", ")}?)`:n.length===1?`
|
|
12
|
+
(Did you mean ${n[0]}?)`:""}Ms.suggestSimilar=Aa});var zs=Lt(qs=>{"use strict";var ka=dn("events").EventEmitter,xo=dn("child_process"),wt=dn("path"),bo=dn("fs"),_e=dn("process"),{Argument:Ta,humanReadableArgName:Ia}=gr(),{CommanderError:wo}=Rn(),{Help:Pa}=po(),{Option:Ws,DualOptions:Oa}=_o(),{suggestSimilar:Gs}=Hs(),yo=class s extends ka{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,o=n;typeof r=="object"&&r!==null&&(o=r,r=null),o=o||{};let[,a,l]=e.match(/([^ ]+) *(.*)/),i=this.createCommand(a);return r&&(i.description(r),i._executableHandler=!0),o.isDefault&&(this._defaultCommandName=i._name),i._hidden=!!(o.noHelp||o.hidden),i._executableFile=o.executableFile||null,l&&i.arguments(l),this._registerCommand(i),i.parent=this,i.copyInheritedSettings(this),r?this:i}createCommand(e){return new s(e)}createHelp(){return Object.assign(new Pa,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 Ta(e,t)}argument(e,t,n,r){let o=this.createArgument(e,t);return typeof n=="function"?o.default(r).argParser(n):o.default(n),this.addArgument(o),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(/([^ ]+) *(.*)/),o=t??"display help for command",a=this.createCommand(n);return a.helpOption(!1),r&&a.arguments(r),o&&a.description(o),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 wo(e,t,n)),_e.exit(e)}action(e){let t=n=>{let r=this.registeredArguments.length,o=n.slice(0,r);return this._storeOptionsAsProperties?o[r]=this:o[r]=this.opts(),o.push(this),e.apply(this,o)};return this._actionHandler=t,this}createOption(e,t){return new Ws(e,t)}_callParseArg(e,t,n,r){try{return e.parseArg(t,n)}catch(o){if(o.code==="commander.invalidArgument"){let a=`${r} ${o.message}`;this.error(a,{exitCode:o.exitCode,code:o.code})}throw o}}_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("|"),o=t(e).join("|");throw new Error(`cannot add command '${o}' 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 o=e.long.replace(/^--no-/,"--");this._findOption(o)||this.setOptionValueWithSource(n,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(n,e.defaultValue,"default");let r=(o,a,l)=>{o==null&&e.presetArg!==void 0&&(o=e.presetArg);let i=this.getOptionValue(n);o!==null&&e.parseArg?o=this._callParseArg(e,o,i,a):o!==null&&e.variadic&&(o=e._concatValue(o,i)),o==null&&(e.negate?o=!1:e.isBoolean()||e.optional?o=!0:o=""),this.setOptionValueWithSource(n,o,l)};return this.on("option:"+t,o=>{let a=`error: option '${e.flags}' argument '${o}' is invalid.`;r(o,a,"cli")}),e.envVar&&this.on("optionEnv:"+t,o=>{let a=`error: option '${e.flags}' value '${o}' from env '${e.envVar}' is invalid.`;r(o,a,"env")}),this}_optionEx(e,t,n,r,o){if(typeof t=="object"&&t instanceof Ws)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(o).argParser(r);else if(r instanceof RegExp){let l=r;r=(i,c)=>{let d=l.exec(i);return d?d[0]:c},a.default(o).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 o(d,m){let g=wt.resolve(d,m);if(bo.existsSync(g))return g;if(r.includes(wt.extname(m)))return;let p=r.find(x=>bo.existsSync(`${g}${x}`));if(p)return`${g}${p}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let a=e._executableFile||`${this._name}-${e._name}`,l=this._executableDir||"";if(this._scriptPath){let d;try{d=bo.realpathSync(this._scriptPath)}catch{d=this._scriptPath}l=wt.resolve(wt.dirname(d),l)}if(l){let d=o(l,a);if(!d&&!e._executableFile&&this._scriptPath){let m=wt.basename(this._scriptPath,wt.extname(this._scriptPath));m!==this._name&&(d=o(l,`${m}-${e._name}`))}a=d||a}n=r.includes(wt.extname(a));let i;_e.platform!=="win32"?n?(t.unshift(a),t=Ks(_e.execArgv).concat(t),i=xo.spawn(_e.argv[0],t,{stdio:"inherit"})):i=xo.spawn(a,t,{stdio:"inherit"}):(t.unshift(a),t=Ks(_e.execArgv).concat(t),i=xo.spawn(_e.execPath,t,{stdio:"inherit"})),i.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(m=>{_e.on(m,()=>{i.killed===!1&&i.exitCode===null&&i.kill(m)})});let c=this._exitCallback;i.on("close",d=>{d=d??1,c?c(new wo(d,"commander.executeSubCommandAsync","(close)")):_e.exit(d)}),i.on("error",d=>{if(d.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",g=`'${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
|
-
- ${
|
|
18
|
+
- ${m}`;throw new Error(g)}else if(d.code==="EACCES")throw new Error(`'${a}' not executable`);if(!c)_e.exit(1);else{let m=new wo(1,"commander.executeSubCommandAsync","(error)");m.nestedError=d,c(m)}}),this.runningCommand=i}_dispatchSubcommand(e,t,n){let r=this._findCommand(e);r||this.help({error:!0});let o;return o=this._chainOrCallSubCommandHook(o,r,"preSubcommand"),o=this._chainOrCall(o,()=>{if(r._executableHandler)this._executeSubCommand(r,t.concat(n));else return r._parseCommand(t,n)}),o}_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,o)=>{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,o,l)}return a};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,r)=>{let o=n.defaultValue;n.variadic?r<this.args.length?(o=this.args.slice(r),n.parseArg&&(o=o.reduce((a,l)=>e(n,l,a),n.defaultValue))):o===void 0&&(o=[]):r<this.args.length&&(o=this.args[r],n.parseArg&&(o=e(n,o,n.defaultValue))),t[r]=o}),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(o=>o._lifeCycleHooks[t]!==void 0).forEach(o=>{o._lifeCycleHooks[t].forEach(a=>{r.push({hookedCommand:o,callback:a})})}),t==="postAction"&&r.reverse(),r.forEach(o=>{n=this._chainOrCall(n,()=>o.callback(o.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let r=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(o=>{r=this._chainOrCall(r,()=>o(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])},o=`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(o,e,t)})),a=this._chainOrCallHooks(a,"postAction"),a}if(this.parent&&this.parent.listenerCount(o))r(),this._processArguments(),this.parent.emit(o,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(o=>n.conflictsWith.includes(o.attributeName()));r&&this._conflictingOption(n,r)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],r=t,o=e.slice();function a(i){return i.length>1&&i[0]==="-"}let l=null;for(;o.length;){let i=o.shift();if(i==="--"){r===n&&r.push(i),r.push(...o);break}if(l&&!a(i)){this.emit(`option:${l.name()}`,i);continue}if(l=null,a(i)){let c=this._findOption(i);if(c){if(c.required){let d=o.shift();d===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,d)}else if(c.optional){let d=null;o.length>0&&!a(o[0])&&(d=o.shift()),this.emit(`option:${c.name()}`,d)}else this.emit(`option:${c.name()}`);l=c.variadic?c:null;continue}}if(i.length>2&&i[0]==="-"&&i[1]!=="-"){let c=this._findOption(`-${i[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,i.slice(2)):(this.emit(`option:${c.name()}`),o.unshift(`-${i.slice(2)}`));continue}}if(/^--[^=]+=/.test(i)){let c=i.indexOf("="),d=this._findOption(i.slice(0,c));if(d&&(d.required||d.optional)){this.emit(`option:${d.name()}`,i.slice(c+1));continue}}if(a(i)&&(r=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(i)){t.push(i),o.length>0&&n.push(...o);break}else if(this._getHelpCommand()&&i===this._getHelpCommand().name()){t.push(i),o.length>0&&t.push(...o);break}else if(this._defaultCommandName){n.push(i),o.length>0&&n.push(...o);break}}if(this._passThroughOptions){r.push(i),o.length>0&&r.push(...o);break}r.push(i)}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
|
|
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
|
|
23
|
-
Expecting one of '${
|
|
24
|
-
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(
|
|
25
|
-
`)}catch{}}};function as(i){let e=(0,is.useRef)(null);return e.current||(e.current=new er(i)),e.current}var Wt=Z(He(),1);var fn=[[[" "],[" "],[" "],[" "],["\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 te=Z(le(),1),Rn="#af87d7",tr="#875faf",ls="#5b3a7a",Mo="#ff9500",Fo="#ea580c",cs="#888888",nr="#666666",No="#555555",Ht=[[Rn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Rn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Rn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Rn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[tr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[tr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[tr,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588"]],rr=Ht.map(([,i])=>[...i]);function us({visibleRows:i=Ht.length}){let e=Math.min(i,Ht.length);return(0,te.jsxs)(x,{flexDirection:"column",children:[Ht.slice(0,e).map(([t,r],n)=>{let s=rr[n];return(0,te.jsx)(u,{children:s.map((a,o)=>{if(a==="\u2588")return(0,te.jsx)(u,{color:t,children:"\u2588"},o);let l=o>0&&s[o-1]==="\u2588",d=n>0&&o>0&&rr[n-1][o-1]==="\u2588";return l||d?(0,te.jsx)(u,{color:ls,children:"\u2592"},o):(0,te.jsx)(u,{children:" "},o)})},n)}),e>=Ht.length&&(0,te.jsxs)(u,{children:[" ",rr[Ht.length-1].map((t,r)=>t==="\u2588"?(0,te.jsx)(u,{color:ls,children:"\u2580"},r):(0,te.jsx)(u,{children:" "},r))]})]})}function Ho({visibleRows:i=fn.length}){let e=Math.min(i,fn.length);return(0,te.jsx)(x,{flexDirection:"column",children:fn.slice(0,e).map((t,r)=>(0,te.jsx)(u,{children:t.map((n,s)=>{let a=n[0],o=n[1],l=n[2];return o?(0,te.jsx)(u,{color:o,backgroundColor:l,children:a},s):(0,te.jsx)(u,{children:a},s)})},r))})}function An({size:i="compact",helmetVisibleRows:e=fn.length,textVisibleRows:t=Ht.length,showMeta:r=!1,user:n=null,authenticated:s=!1,version:a=""}){return i==="compact"?(0,te.jsx)(us,{}):(0,te.jsxs)(x,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,te.jsx)(u,{color:Mo,italic:!0,children:" Welcome to"}),(0,te.jsx)(u,{children:" "}),(0,te.jsxs)(x,{gap:2,children:[(0,te.jsx)(Ho,{visibleRows:e}),(0,te.jsxs)(x,{flexDirection:"column",children:[(0,te.jsx)(us,{visibleRows:t}),(0,te.jsx)(x,{justifyContent:"flex-end",width:73,children:(0,te.jsx)(u,{color:Fo,italic:!0,children:"Command-line interface"})})]})]}),r&&(0,te.jsxs)(te.Fragment,{children:[(0,te.jsx)(u,{children:" "}),(0,te.jsxs)(u,{children:[(0,te.jsx)(u,{color:nr,children:" Browser automation powered by AI. "}),(0,te.jsx)(u,{color:No,children:`v${a}`})]}),(0,te.jsx)(u,{children:" "}),(0,te.jsx)(u,{children:(0,te.jsx)(u,{color:nr,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,te.jsx)(u,{children:(0,te.jsx)(u,{color:nr,children:" data \u2014 right from your terminal."})}),(0,te.jsx)(u,{children:" "}),(0,te.jsxs)(u,{children:[(0,te.jsx)(u,{color:cs,children:" \u25CF "}),(0,te.jsx)(u,{color:cs,children:s?"Logged in as ":"Not logged in"}),s&&n&&(0,te.jsx)(u,{bold:!0,children:n})]})]})]})}import{readFileSync as mn,writeFileSync as ds,mkdirSync as fs,readdirSync as sr,unlinkSync as dt,existsSync as or,chmodSync as ms}from"fs";import{join as Le,dirname as Wo}from"path";var Re=class{baseDir;profilesDir;configFile;constructor(e=ye){this.baseDir=e,this.profilesDir=Le(e,"profiles"),this.configFile=Le(e,"config.json")}readConfig(){try{return JSON.parse(mn(this.configFile,"utf-8"))}catch{return{}}}writeConfig(e){fs(this.baseDir,{recursive:!0,mode:448}),ds(this.configFile,JSON.stringify(e,null,2)+`
|
|
26
|
-
`)
|
|
27
|
-
`),ms(e,384)}saveCredentials(e,t,r){this.writeSecure(this.credentialsPath(e,t),r)}loadCredentials(e,t){try{return JSON.parse(mn(this.credentialsPath(e,t),"utf-8"))}catch{return null}}saveClient(e,t,r){this.writeSecure(this.clientPath(e,t),r)}loadClient(e,t){try{return JSON.parse(mn(this.clientPath(e,t),"utf-8"))}catch{return null}}getActiveCredentials(){let e=this.getActiveProfile();if(!e)return{credentials:null,profile:null,env:null};let t=this.getDefaultEnv();return{credentials:this.loadCredentials(e,t),profile:e,env:t}}saveBasicAuth(e,t,r){this.writeSecure(this.basicAuthPath(e,t),r)}loadBasicAuth(e,t){try{return JSON.parse(mn(this.basicAuthPath(e,t),"utf-8"))}catch{return null}}deleteBasicAuth(e,t){try{dt(this.basicAuthPath(e,t))}catch{}}resolveAuth(){let e=this.getActiveProfile();if(!e)return null;let t=this.getDefaultEnv(),r=this.loadBasicAuth(e,t);return r?{method:"basic",...r,profile:e,env:t}:this.loadCredentials(e,t)?{method:"oauth",profile:e,env:t}:null}listProfiles(){let e=[];try{for(let t of sr(this.profilesDir)){let r=Le(this.profilesDir,t);try{for(let n of sr(r)){let s=Le(r,n),a=or(Le(s,"credentials")),o=or(Le(s,"client.json")),l=or(Le(s,"basic-auth"));(a||o||l)&&e.push({profile:t,env:n})}}catch{}}}catch{}return e}deleteProfile(e,t){try{dt(this.credentialsPath(e,t))}catch{}if(this.getActiveProfile()===e){let r=this.readConfig();delete r.active_profile,this.writeConfig(r)}}deleteProfileFull(e,t){if(t){try{dt(this.credentialsPath(e,t))}catch{}try{dt(this.clientPath(e,t))}catch{}try{dt(this.basicAuthPath(e,t))}catch{}try{dt(this.profileConfigPath(e,t))}catch{}}else try{let r=Le(this.profilesDir,e);for(let n of sr(r)){try{dt(Le(r,n,"credentials"))}catch{}try{dt(Le(r,n,"client.json"))}catch{}try{dt(Le(r,n,"basic-auth"))}catch{}try{dt(Le(r,n,"profile-config.json"))}catch{}}}catch{}}};var lr=Z(le(),1),ir=8,ar=7;function ps({onComplete:i}){let[e,t]=(0,Wt.useState)(0),[r,n]=(0,Wt.useState)(0),[s,a]=(0,Wt.useState)(!1),[o]=(0,Wt.useState)(()=>{let l=new Re,d=l.getActiveProfile(),c=l.getDefaultEnv(),h=d?l.loadCredentials(d,c):null,g=d?l.loadBasicAuth(d,c):null;return{authenticated:!!(h||g),user:g?.username??d??null}});return ln(()=>{t(l=>Math.min(ir,l+1))},e<ir?60:null),ln(()=>{n(l=>Math.min(ar,l+1))},r<ar?80:null),(0,Wt.useEffect)(()=>{e>=ir&&r>=ar&&!s&&(a(!0),i?.())},[e,r,s,i]),(0,lr.jsx)(x,{flexDirection:"column",children:(0,lr.jsx)(An,{size:"full",helmetVisibleRows:e,textVisibleRows:r,showMeta:s,user:o.user,authenticated:o.authenticated,version:Pt})})}var xt=Z(le(),1);function hs({entry:i}){return i.type==="input"?(0,xt.jsxs)(x,{children:[(0,xt.jsx)(u,{color:m.purple,children:"\u276F "}),(0,xt.jsx)(u,{children:i.text})]}):i.type==="error"?(0,xt.jsx)(x,{marginLeft:2,children:(0,xt.jsx)(u,{color:m.red,children:i.text})}):(0,xt.jsx)(x,{marginLeft:2,children:(0,xt.jsx)(u,{color:i.type==="info"?m.dimmed:void 0,children:i.text})})}var $t=Z(He(),1);var cr=Z(He(),1);var at=Z(le(),1);function gs({history:i,onSelect:e,onClose:t}){let[r,n]=(0,cr.useState)(""),[s,a]=(0,cr.useState)(0),o=r?i.search(r).slice(0,8):[];return et((l,d)=>{if(d.escape){t();return}if(d.return){o.length>0&&o[s]?e(o[s]):t();return}if(d.upArrow){a(c=>Math.max(0,c-1));return}if(d.downArrow){a(c=>Math.min(o.length-1,c+1));return}if(d.backspace||d.delete){n(c=>c.slice(0,-1)),a(0);return}l&&!d.ctrl&&!d.meta&&(n(c=>c+l),a(0))}),(0,at.jsxs)(x,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,at.jsx)(u,{color:m.muted,bold:!0,children:"reverse search"}),(0,at.jsxs)(x,{gap:1,children:[(0,at.jsx)(u,{color:m.dimmed,children:"search:"}),(0,at.jsx)(u,{children:r}),(0,at.jsx)(u,{color:m.purple,children:"\u2588"})]}),o.length>0&&(0,at.jsx)(u,{children:" "}),o.map((l,d)=>(0,at.jsx)(x,{marginLeft:2,children:(0,at.jsxs)(u,{color:d===s?m.purple:m.dimmed,bold:d===s,children:[d===s?"\u25B8 ":" ",l]})},`${d}-${l}`))]})}var We=Z(le(),1);function vs({onSubmit:i,onEscape:e,history:t,placeholder:r="Type an objective or /command..."}){let[n,s]=(0,$t.useState)([]),[a,o]=(0,$t.useState)(0),[l,d]=(0,$t.useState)("none"),[c,h]=(0,$t.useState)(-1),g=(0,$t.useRef)(""),[S,p]=(0,$t.useState)(!0),{stdout:_}=Tt(),v=_?.columns??80,w=n.join(""),F=(()=>{if(l!=="none"||n.length===0||w.startsWith("/"))return"";let B=t.getAll();for(let $=B.length-1;$>=0;$--)if(B[$].startsWith(w)&&B[$]!==w)return B[$].slice(w.length);return""})();et((B,$)=>{if(S&&B&&p(!1),$.return){w.trim()&&(t.push(w.trim()),i(w.trim()),s([]),o(0),d("none"),h(-1),g.current="",p(!0));return}if($.escape){l!=="none"?d("none"):n.length>0?(s([]),o(0),h(-1),g.current=""):e?.();return}if($.tab){if(F){let E=w+F;s([...E]),o(E.length);return}return}if($.ctrl&&B==="r"){d("search");return}if($.ctrl&&B==="a"){o(0);return}if($.ctrl&&B==="e"){o(n.length);return}if($.ctrl&&B==="w"){if(a===0)return;let E=a-1;for(;E>0&&n[E]===" ";)E--;for(;E>0&&n[E-1]!==" ";)E--;let q=[...n.slice(0,E),...n.slice(a)];s(q),o(E);return}if($.ctrl&&B==="u"){s([]),o(0),h(-1),d("none");return}if($.meta&&B==="b"){let E=a-1;for(;E>0&&n[E]===" ";)E--;for(;E>0&&n[E-1]!==" ";)E--;o(Math.max(0,E));return}if($.meta&&B==="f"){let E=a;for(;E<n.length&&n[E]!==" ";)E++;for(;E<n.length&&n[E]===" ";)E++;o(E);return}if($.leftArrow){o(E=>Math.max(0,E-1));return}if($.rightArrow){if(a>=n.length&&F){let E=w+F;s([...E]),o(E.length)}else o(E=>Math.min(n.length,E+1));return}if($.upArrow){if(l==="none"){let E=t.getAll();if(E.length===0)return;if(c===-1){g.current=w,h(E.length-1);let q=E[E.length-1];s([...q]),o(q.length)}else if(c>0){let q=c-1;h(q);let f=E[q];s([...f]),o(f.length)}}return}if($.downArrow){if(l==="none"){let E=t.getAll();if(c===-1)return;if(c<E.length-1){let q=c+1;h(q);let f=E[q];s([...f]),o(f.length)}else{h(-1);let q=g.current;s([...q]),o(q.length)}}return}if($.backspace||$.delete){if(a>0){let E=[...n.slice(0,a-1),...n.slice(a)];s(E),o(a-1),h(-1)}return}if(B&&!$.ctrl&&!$.meta){let E=[...n.slice(0,a),...B,...n.slice(a)];s(E),o(a+B.length),h(-1)}},{isActive:l!=="search"});let K=B=>{s([...B]),o(B.length),d("none")},X=()=>{d("none")},W=(()=>{if(S&&n.length===0)return null;let B=a>=n.length,$=n.slice(0,a).join(""),E=B?" ":n[a],q=B?"":n.slice(a+1).join(""),f="\u276F "+$+E+q+F,R=2,y=R+$.length,C=y+1,O=C+q.length,V=f.length,N=Math.max(1,Math.ceil(V/v)),ee=[];for(let Y=0;Y<N;Y++)ee.push({start:Y*v,end:Math.min((Y+1)*v,V)});return{full:f,p:R,b:y,c:C,a:O,lines:ee}})();return(0,We.jsxs)(x,{flexDirection:"column",children:[l==="search"&&(0,We.jsx)(gs,{history:t,onSelect:K,onClose:X}),(0,We.jsx)(u,{color:m.muted,children:"\u2500".repeat(v)}),W===null?(0,We.jsxs)(x,{children:[(0,We.jsx)(u,{color:m.purple,children:"\u276F "}),(0,We.jsx)(u,{color:m.dimmed,children:r})]}):(0,We.jsx)(x,{flexDirection:"column",children:W.lines.map(({start:B,end:$},E)=>{let{full:q,p:f,b:R,c:y,a:C}=W,O=[];return $>0&&B<f&&O.push((0,We.jsx)(u,{color:m.purple,children:q.slice(Math.max(B,0),Math.min(f,$))},"p")),$>f&&B<R&&O.push((0,We.jsx)(u,{children:q.slice(Math.max(f,B),Math.min(R,$))},"b")),$>R&&B<y&&O.push((0,We.jsx)(u,{color:m.purple,inverse:!0,children:q.slice(Math.max(R,B),Math.min(y,$))},"c")),$>y&&B<C&&O.push((0,We.jsx)(u,{children:q.slice(Math.max(y,B),Math.min(C,$))},"a")),$>C&&O.push((0,We.jsx)(u,{color:m.dimmed,children:q.slice(Math.max(C,B),$)},"g")),(0,We.jsx)(x,{children:O},E)})})]})}var De=Z(He(),1);var _s=Z(He(),1);var Tn=Z(le(),1),Ko="#ffc580",qo="#ffd9a8",xs="#ffffff";function bs({text:i,active:e=!0}){let[t,r]=(0,_s.useState)(0),n=4;if(ln(()=>{r(a=>(a+1)%(i.length+n*2))},e?80:null),!e)return(0,Tn.jsx)(u,{color:xs,children:i});let s=i.split("").map((a,o)=>{let l=t-n,d=Math.abs(o-l-n/2),c;return d<=n/2?c=Ko:d<=n?c=qo:c=xs,(0,Tn.jsx)(u,{color:c,children:a},o)});return(0,Tn.jsx)(u,{children:s})}var Ke=Z(le(),1),Jo={starting:m.cyan,running:m.purple,passed:m.green,failed:m.red,cancelled:m.dimmed,timed_out:m.yellow};function Pn({currentStep:i,maxSteps:e,elapsed:t,status:r}){let{stdout:n}=Tt(),s=n?.columns??80,a=Jo[r]??m.purple,o=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`;return(0,Ke.jsxs)(x,{flexDirection:"column",marginTop:1,children:[(0,Ke.jsx)(u,{color:m.muted,children:"\u2500".repeat(Math.min(s,60))}),(0,Ke.jsxs)(x,{children:[(0,Ke.jsx)(u,{children:" "}),(0,Ke.jsx)(u,{color:m.dimmed,children:"Steps "}),(0,Ke.jsx)(u,{bold:!0,children:i}),(0,Ke.jsxs)(u,{color:m.dimmed,children:["/",e]}),(0,Ke.jsx)(u,{children:" "}),(0,Ke.jsx)(u,{color:m.dimmed,children:"Elapsed "}),(0,Ke.jsx)(u,{bold:!0,children:o}),(0,Ke.jsx)(u,{children:" "}),(0,Ke.jsx)(u,{color:m.dimmed,children:"Status "}),(0,Ke.jsx)(u,{bold:!0,color:a,children:r})]})]})}var zo={click:"\u25CF",type:"\u229E",scroll:"\u2195",navigate:"\u2192",analyze:"\u25CE",assert:"\u25C8","if-else":"\u2442",select:"\u25BC",press_key:"\u21B5",wait:"\u2026",tool_call:"\u26A1"};function ws(i){return zo[i]??"\u25CF"}var j=Z(le(),1);function It({step:i,indent:e=2}){let t=i.actionType?ws(i.actionType):null,r=i.status==="running",n=i.status==="passed",s=i.status==="failed",a=i.status==="pending"||i.status==="stopped",{stdout:o}=Tt(),l=o?.columns??80,d=Math.max(20,l-e-21),c=i.objective??"",h=c.length>d?c.slice(0,d-1)+"\u2026":c,g=(i.duration??0)*1e3,S=i.duration!=null?g<1e3?`${Math.round(g)}ms`:`${(g/1e3).toFixed(1)}s`:"";return(0,j.jsxs)(x,{flexDirection:"column",children:[(0,j.jsxs)(x,{marginLeft:e,children:[(0,j.jsx)(x,{width:4,children:(0,j.jsxs)(u,{color:m.muted,children:[String(i.index).padStart(2," ")," "]})}),(0,j.jsx)(x,{width:3,children:r?(0,j.jsx)(Gr,{}):n?(0,j.jsx)(u,{color:m.green,bold:!0,children:"\u2713"}):s?(0,j.jsx)(u,{color:m.red,bold:!0,children:"\u2717"}):(0,j.jsx)(u,{color:m.muted,children:"\u25CB"})}),(0,j.jsx)(x,{flexGrow:1,children:r?(0,j.jsx)(bs,{text:h,active:!0}):s?(0,j.jsx)(u,{color:m.red,children:h}):a?(0,j.jsx)(u,{color:m.dimmed,children:h}):(0,j.jsx)(u,{color:m.greenDim,children:h})}),(n||s)&&t?(0,j.jsx)(x,{width:3,marginLeft:1,children:(0,j.jsx)(u,{color:m.muted,children:t})}):(0,j.jsx)(x,{width:3,marginLeft:1}),(0,j.jsx)(x,{width:7,justifyContent:"flex-end",children:(0,j.jsx)(u,{color:m.dimmed,children:S})})]}),i.children&&i.children.length>0&&(0,j.jsx)(x,{flexDirection:"column",children:i.children.map((p,_)=>(0,j.jsx)(It,{step:p,indent:e+2},`child-${_}`))})]})}function On({steps:i,bifurcated:e,flows:t,cmInitCounts:r,maxSteps:n=50,staticSteps:s=!1,onStepCommit:a}){let o=(0,De.useRef)(new Set),l=(0,De.useRef)(!1),d=(0,De.useRef)(new Set),c=(0,De.useRef)(!1),h=(0,De.useRef)(0);(0,De.useEffect)(()=>{i.length===0&&h.current>0&&(o.current.clear(),l.current=!1,d.current.clear(),c.current=!1),h.current=i.length},[i.length]);let g=i.flatMap(f=>[f,...f.children??[]]),S=g.some(f=>f.status==="running"),p=g.some(f=>f.status==="failed"),_=g.length===0||g.every(f=>f.status==="pending"),v=g.filter(f=>f.status==="passed"||f.status==="failed").length,w;_?w="starting":S?w="running":p?w="failed":w="passed";let F=(0,De.useRef)(null),[K,X]=(0,De.useState)(0);(0,De.useEffect)(()=>{g.length===0||_?(F.current=null,X(0)):S&&F.current==null&&(F.current=Date.now())},[S,_,g.length]),(0,De.useEffect)(()=>{if(!S)return;let f=setInterval(()=>{F.current!=null&&X((Date.now()-F.current)/1e3)},500);return()=>clearInterval(f)},[S]);let W=(0,De.useRef)(new Set),[B,$]=(0,De.useState)([]),E=(0,De.useRef)(!1);(0,De.useEffect)(()=>{if(!s||e)return;let f=[];if(!e&&!E.current&&r&&r[0]!=null&&(E.current=!0,f.push({key:"cm_init_0",type:"cm_init",count:r[0]})),e){!W.current.has(-1)&&i.length>0&&(W.current.add(-1),f.push({key:"bif_header",type:"bifurcation_header",flowCount:t?.length??i.length}));for(let R=0;R<i.length;R++){let y=i[R],C=-(R+10);W.current.has(C)||(W.current.add(C),f.push({key:`flow_header_${R}`,type:"flow_header",flowIdx:R,label:t?.[R]??y.objective,cmCount:r?.[R]}));for(let O of y.children??[])(O.status==="passed"||O.status==="failed")&&!W.current.has(O.index)&&(W.current.add(O.index),f.push({key:`step_f${R}_${O.index}`,type:"step",step:{...O}}))}}else for(let R of i)(R.status==="passed"||R.status==="failed")&&!W.current.has(R.index)&&(W.current.add(R.index),f.push({key:`step_${R.index}`,type:"step",step:{...R,children:R.children?[...R.children]:void 0}}));f.length>0&&$(R=>[...R,...f])},[i,e,t,r,s]),(0,De.useEffect)(()=>{if(!a)return;!e&&!c.current&&r&&r[0]!=null&&(c.current=!0,a((0,j.jsx)(x,{marginLeft:2,children:(0,j.jsxs)(u,{color:m.dimmed,children:["\u25A0 Generated task with ",r[0]," checkpoints"]})}))),e&&t&&!l.current&&(l.current=!0,a((0,j.jsx)(u,{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"})));let f=e?i.flatMap((R,y)=>{let C=R.children??[];return!d.current.has(y)&&C.length>0&&(d.current.add(y),a((0,j.jsx)(u,{color:"#b388ff",children:" Flow "+(y+1)+": "+(t?.[y]??"")}))),C}):i.flatMap(R=>[R,...R.children??[]]);for(let R of f){let y=`${R.index}-${R.objective}`;o.current.has(y)||(R.status==="passed"||R.status==="failed"||R.status==="stopped")&&(o.current.add(y),a((0,j.jsx)(x,{marginLeft:2,children:(0,j.jsx)(It,{step:R})})))}},[i,a,e,t,r]);let q=[];if(a)if(e)for(let f of i){let y=(f.children??[]).filter(C=>{let O=`${C.index}-${C.objective}`;return!o.current.has(O)});y.length>0&&q.push({...f,children:y})}else for(let f of i){let R=`${f.index}-${f.objective}`;o.current.has(R)||q.push(f)}else if(s){if(!e)for(let f of i)W.current.has(f.index)||q.push(f)}if(!s){let f=a?q:i;return(0,j.jsxs)(x,{flexDirection:"column",children:[e?a?f.length>0?(0,j.jsx)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:f.map((y,C)=>(0,j.jsx)(x,{flexDirection:"column",marginTop:C>0?1:0,children:y.children&&y.children.length>0?y.children.map(O=>(0,j.jsx)(It,{step:O},`f${C}-${O.index}`)):y.status==="pending"&&(0,j.jsx)(u,{color:m.dimmed,children:" \u25CB Waiting..."})},C))}):null:(0,j.jsxs)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,j.jsxs)(u,{color:m.dimmed,children:["\u2501\u2501 Bifurcated into ",t?.length??i.length," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]}),i.map((y,C)=>(0,j.jsxs)(x,{flexDirection:"column",marginTop:C>0?1:0,children:[(0,j.jsxs)(u,{color:m.purple,children:["Flow ",C+1,": ",t?.[C]??y.objective]}),r&&r[C]!=null&&(0,j.jsxs)(u,{color:m.dimmed,children:[" \u25AA Generated task with ",r[C]," checkpoints"]}),y.children&&y.children.length>0?y.children.map(O=>(0,j.jsx)(It,{step:O},`f${C}-${O.index}`)):y.status==="pending"&&(0,j.jsx)(u,{color:m.dimmed,children:" \u25CB Waiting..."})]},C))]}):(0,j.jsxs)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[!a&&r&&r[0]!=null&&(0,j.jsxs)(u,{color:m.dimmed,children:["\u25AA Generated task with ",r[0]," checkpoints"]}),f.map(y=>(0,j.jsx)(It,{step:y},y.index))]}),S&&(0,j.jsx)(Pn,{currentStep:v,maxSteps:n,elapsed:K,status:w})]})}return e?(0,j.jsxs)(x,{flexDirection:"column",children:[(0,j.jsxs)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,j.jsxs)(u,{color:m.dimmed,children:["\u2501\u2501 Bifurcated into ",t?.length??i.length," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]}),i.map((f,R)=>(0,j.jsxs)(x,{flexDirection:"column",marginTop:R>0?1:0,children:[(0,j.jsxs)(u,{color:m.purple,children:["Flow ",R+1,": ",t?.[R]??f.objective]}),r&&r[R]!=null&&(0,j.jsxs)(u,{color:m.dimmed,children:[" \u25AA Generated task with ",r[R]," checkpoints"]}),f.children&&f.children.length>0?f.children.map(y=>(0,j.jsx)(It,{step:y},`f${R}-${y.index}`)):f.status==="pending"&&(0,j.jsx)(u,{color:m.dimmed,children:" \u25CB Waiting..."})]},R))]}),S&&(0,j.jsx)(Pn,{currentStep:v,maxSteps:n,elapsed:K,status:w})]}):(0,j.jsxs)(x,{flexDirection:"column",children:[(0,j.jsx)(Gt,{items:B,children:f=>f.type==="cm_init"?(0,j.jsx)(x,{marginLeft:2,paddingLeft:1,children:(0,j.jsxs)(u,{color:m.dimmed,children:["\u25AA Generated task with ",f.count," checkpoints"]})},f.key):f.type==="bifurcation_header"?(0,j.jsx)(x,{marginLeft:2,paddingLeft:1,children:(0,j.jsxs)(u,{color:m.dimmed,children:["\u2501\u2501 Bifurcated into ",f.flowCount," flows \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"]})},f.key):f.type==="flow_header"?(0,j.jsxs)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,j.jsxs)(u,{color:m.purple,children:["Flow ",f.flowIdx+1,": ",f.label]}),f.cmCount!=null&&(0,j.jsxs)(u,{color:m.dimmed,children:[" \u25AA Generated task with ",f.cmCount," checkpoints"]})]},f.key):(0,j.jsx)(x,{marginLeft:2,paddingLeft:1,children:(0,j.jsx)(It,{step:f.step})},f.key)}),q.length>0&&(0,j.jsx)(x,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:q.map(f=>(0,j.jsx)(It,{step:f},f.index))}),S&&(0,j.jsx)(Pn,{currentStep:v,maxSteps:n,elapsed:K,status:w})]})}var Ae=Z(He(),1);import{readFileSync as Go,writeFileSync as ys,mkdirSync as Ss}from"fs";import{dirname as Cs}from"path";var Es={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:null,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"action",setup_complete:!1},tt=class{constructor(e=Wr){this.path=e}load(){try{let e=Go(this.path,"utf-8"),t=JSON.parse(e);return{...Es,...t}}catch{return{...Es}}}set(e,t){let r=this.load();r[e]=t,Ss(Cs(this.path),{recursive:!0}),ys(this.path,JSON.stringify(r,null,2)+`
|
|
28
|
-
`)}
|
|
29
|
-
`)}
|
|
30
|
-
tell application "System Events" to get value of property list item "CFBundleName" of property list file (app_path & ":Contents:Info.plist")`)}import{promisify as fi}from"util";import{execFile as mi}from"child_process";var pi=fi(mi),$n={MSEdgeHTM:{name:"Edge",id:"com.microsoft.edge"},MSEdgeBHTML:{name:"Edge Beta",id:"com.microsoft.edge.beta"},MSEdgeDHTML:{name:"Edge Dev",id:"com.microsoft.edge.dev"},AppXq0fevzme2pys62n3e0fbqa7peapykr8v:{name:"Edge",id:"com.microsoft.edge.old"},ChromeHTML:{name:"Chrome",id:"com.google.chrome"},ChromeBHTML:{name:"Chrome Beta",id:"com.google.chrome.beta"},ChromeDHTML:{name:"Chrome Dev",id:"com.google.chrome.dev"},ChromiumHTM:{name:"Chromium",id:"org.chromium.Chromium"},BraveHTML:{name:"Brave",id:"com.brave.Browser"},BraveBHTML:{name:"Brave Beta",id:"com.brave.Browser.beta"},BraveDHTML:{name:"Brave Dev",id:"com.brave.Browser.dev"},BraveSSHTM:{name:"Brave Nightly",id:"com.brave.Browser.nightly"},FirefoxURL:{name:"Firefox",id:"org.mozilla.firefox"},OperaStable:{name:"Opera",id:"com.operasoftware.Opera"},VivaldiHTM:{name:"Vivaldi",id:"com.vivaldi.Vivaldi"},"IE.HTTP":{name:"Internet Explorer",id:"com.microsoft.ie"}},ac=new Map(Object.entries($n)),vr=class extends Error{};async function xr(i=pi){let{stdout:e}=await i("reg",["QUERY"," HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice","/v","ProgId"]),t=/ProgId\s*REG_SZ\s*(?<id>\S+)/.exec(e);if(!t)throw new vr(`Cannot find Windows browser in stdout: ${JSON.stringify(e)}`);let{id:r}=t.groups,n=r.lastIndexOf("."),s=r.lastIndexOf("-"),a=n===-1?void 0:r.slice(0,n),o=s===-1?void 0:r.slice(0,s);return $n[r]??$n[a]??$n[o]??{name:r,id:r}}var vi=hi(gi),xi=i=>i.toLowerCase().replaceAll(/(?:^|\s|-)\S/g,e=>e.toUpperCase());async function br(){if(_r.platform==="darwin"){let i=await hr();return{name:await gr(i),id:i}}if(_r.platform==="linux"){let{stdout:i}=await vi("xdg-mime",["query","default","x-scheme-handler/http"]),e=i.trim();return{name:xi(e.replace(/.desktop$/,"").replace("-"," ")),id:e}}if(_r.platform==="win32")return xr();throw new Error("Only macOS, Linux, and Windows are supported")}var Si=bi(Ls.execFile),wr=Vs.dirname(_i(import.meta.url)),$s=Vs.join(wr,"xdg-open"),{platform:Xt,arch:Is}=js;async function Ci(){let i=await pr(),e=String.raw`(Get-ItemProperty -Path "HKCU:\Software\Microsoft\Windows\Shell\Associations\UrlAssociations\http\UserChoice").ProgId`,t=Us.from(e,"utf16le").toString("base64"),{stdout:r}=await Si(i,["-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand",t],{encoding:"utf8"}),n=r.trim(),s={ChromeHTML:"com.google.chrome",BraveHTML:"com.brave.Browser",MSEdgeHTM:"com.microsoft.edge",FirefoxURL:"org.mozilla.firefox"};return s[n]?{id:s[n]}:{}}var Ds=async(i,e)=>{let t;for(let r of i)try{return await e(r)}catch(n){t=n}throw t},In=async i=>{if(i={wait:!1,background:!1,newInstance:!1,allowNonzeroExitCode:!1,...i},Array.isArray(i.app))return Ds(i.app,o=>In({...i,app:o}));let{name:e,arguments:t=[]}=i.app??{};if(t=[...t],Array.isArray(e))return Ds(e,o=>In({...i,app:{name:o,arguments:t}}));if(e==="browser"||e==="browserPrivate"){let o={"com.google.chrome":"chrome","google-chrome.desktop":"chrome","com.brave.Browser":"brave","org.mozilla.firefox":"firefox","firefox.desktop":"firefox","com.microsoft.msedge":"edge","com.microsoft.edge":"edge","com.microsoft.edgemac":"edge","microsoft-edge.desktop":"edge"},l={chrome:"--incognito",brave:"--incognito",firefox:"--private-window",edge:"--inPrivate"},d=Dt?await Ci():await br();if(d.id in o){let c=o[d.id];return e==="browserPrivate"&&t.push(l[c]),In({...i,app:{name:qt[c],arguments:t}})}throw new Error(`${d.name} is not supported as a default browser`)}let r,n=[],s={};if(Xt==="darwin")r="open",i.wait&&n.push("--wait-apps"),i.background&&n.push("--background"),i.newInstance&&n.push("--new"),e&&n.push("-a",e);else if(Xt==="win32"||Dt&&!Kt()&&!e){r=await pr(),n.push("-NoProfile","-NonInteractive","-ExecutionPolicy","Bypass","-EncodedCommand"),Dt||(s.windowsVerbatimArguments=!0);let o=["Start"];i.wait&&o.push("-Wait"),e?(o.push(`"\`"${e}\`""`),i.target&&t.push(i.target)):i.target&&o.push(`"${i.target}"`),t.length>0&&(t=t.map(l=>`"\`"${l}\`""`),o.push("-ArgumentList",t.join(","))),i.target=Us.from(o.join(" "),"utf16le").toString("base64")}else{if(e)r=e;else{let o=!wr||wr==="/",l=!1;try{await wi.access($s,yi.X_OK),l=!0}catch{}r=js.versions.electron??(Xt==="android"||o||!l)?"xdg-open":$s}t.length>0&&n.push(...t),i.wait||(s.stdio="ignore",s.detached=!0)}Xt==="darwin"&&t.length>0&&n.push("--args",...t),i.target&&n.push(i.target);let a=Ls.spawn(r,n,s);return i.wait?new Promise((o,l)=>{a.once("error",l),a.once("close",d=>{if(!i.allowNonzeroExitCode&&d>0){l(new Error(`Exited with code ${d}`));return}o(a)})}):(a.unref(),a)},Ei=(i,e)=>{if(typeof i!="string")throw new TypeError("Expected a `target`");return In({...e,target:i})};function Bs(i){if(typeof i=="string"||Array.isArray(i))return i;let{[Is]:e}=i;if(!e)throw new Error(`${Is} is not supported`);return e}function Dn({[Xt]:i},{wsl:e}){if(e&&Dt)return Bs(e);if(!i)throw new Error(`${Xt} is not supported`);return Bs(i)}var qt={};Bt(qt,"chrome",()=>Dn({darwin:"google chrome",win32:"chrome",linux:["google-chrome","google-chrome-stable","chromium"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe",x64:["/mnt/c/Program Files/Google/Chrome/Application/chrome.exe","/mnt/c/Program Files (x86)/Google/Chrome/Application/chrome.exe"]}}));Bt(qt,"brave",()=>Dn({darwin:"brave browser",win32:"brave",linux:["brave-browser","brave"]},{wsl:{ia32:"/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe",x64:["/mnt/c/Program Files/BraveSoftware/Brave-Browser/Application/brave.exe","/mnt/c/Program Files (x86)/BraveSoftware/Brave-Browser/Application/brave.exe"]}}));Bt(qt,"firefox",()=>Dn({darwin:"firefox",win32:String.raw`C:\Program Files\Mozilla Firefox\firefox.exe`,linux:"firefox"},{wsl:"/mnt/c/Program Files/Mozilla Firefox/firefox.exe"}));Bt(qt,"edge",()=>Dn({darwin:"microsoft edge",win32:"msedge",linux:["microsoft-edge","microsoft-edge-dev"]},{wsl:"/mnt/c/Program Files (x86)/Microsoft/Edge/Application/msedge.exe"}));Bt(qt,"browser",()=>"browser");Bt(qt,"browserPrivate",()=>"browserPrivate");var Ms=Ei;import{createHash as ki,randomBytes as Ri}from"crypto";var ze=class{authBaseUrl;consentUrl;constructor(e="prod"){let t=ae(e);this.authBaseUrl=t.authBaseUrl,this.consentUrl=t.consentUrl}static generatePkce(){let e=Ri(96).toString("base64url").slice(0,128),t=ki("sha256").update(e).digest("base64url");return[e,t]}buildAuthorizationUrl(e,t,r,n){let s=new URLSearchParams({response_type:"code",client_id:e,redirect_uri:n,scope:zr,code_challenge:t,code_challenge_method:"S256",state:r});return`${this.consentUrl}/oauth2?${s.toString()}`}async registerClient(e){let t=await fetch(`${this.authBaseUrl}/oauth2/register`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({client_name:Jr,redirect_uris:[e],grant_types:["authorization_code"],response_types:["code"],client_type:"public",application_type:"native"})});if(!t.ok)throw new Error(`DCR failed: ${t.status} ${await t.text()}`);return t.json()}async exchangeCode(e,t,r,n){let s=await fetch(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"authorization_code",code:e,redirect_uri:n,client_id:t,code_verifier:r})});if(!s.ok)throw new Error(`Token exchange failed: ${s.status}`);return s.json()}async refreshToken(e,t){let r=await fetch(`${this.authBaseUrl}/oauth2/token`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:e,client_id:t})});if(!r.ok)throw new Error(`Token refresh failed: ${r.status}`);return r.json()}async revokeToken(e,t,r="access_token"){await fetch(`${this.authBaseUrl}/oauth2/revoke`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:e,token_type_hint:r,client_id:t})})}};var _t=class{profile;environment;creds;oauth;constructor(e="default",t="prod",r){this.profile=e,this.environment=t,this.creds=r??new Re,this.oauth=new ze(t)}async login(){let{server:e,port:t}=await this.startCallbackServer(),r=qr(t);try{let n=this.creds.loadClient(this.profile,this.environment);n||(n=await this.oauth.registerClient(r),this.creds.saveClient(this.profile,this.environment,n));let s=n.client_id,[a,o]=ze.generatePkce(),l=Ti(32).toString("hex"),d=this.oauth.buildAuthorizationUrl(s,o,l,r),c=await this.waitForCallback(e,t,d,l);if(!c)throw new Error("Login cancelled or timed out");let h=await this.oauth.exchangeCode(c,s,a,r),g={access_token:h.access_token,refresh_token:h.refresh_token,expires_at:Math.floor(Date.now()/1e3)+h.expires_in,scope:h.scope??"*"};return this.creds.saveCredentials(this.profile,this.environment,g),this.creds.setActiveProfile(this.profile),g}catch(n){throw e.close(),n}}startCallbackServer(){return new Promise((e,t)=>{let r=zn,n=()=>{let s=Ai();s.on("error",a=>{a.code==="EADDRINUSE"&&r<Gn?(r++,n()):t(new Error(`Failed to start callback server: ${a.message}. Ports ${zn}-${Gn} are all in use.`))}),s.listen(r,Jn,()=>{e({server:s,port:r})})};n()})}waitForCallback(e,t,r,n){return new Promise(s=>{let a=!1,o=setTimeout(()=>l(null),12e4),l=d=>{a||(a=!0,clearTimeout(o),e.close(),s(d))};e.on("request",(d,c)=>{let h=new Pi(d.url??"/",`http://${Jn}:${t}`);if(h.pathname!==Kr){c.writeHead(404),c.end();return}let g=h.searchParams.get("state"),S=h.searchParams.get("code");if(h.searchParams.get("error")){c.writeHead(200,{"Content-Type":"text/html"}),c.end("<html><body><h1>Login Failed</h1><p>You can close this tab.</p></body></html>"),l(null);return}if(g!==n){c.writeHead(400,{"Content-Type":"text/html"}),c.end("<html><body><h1>Invalid State</h1></body></html>"),l(null);return}c.writeHead(200,{"Content-Type":"text/html"}),c.end("<html><body><h1>Login Successful!</h1><p>You can close this tab and return to the terminal.</p></body></html>"),l(S)}),Ms(r).catch(()=>{})})}};var D=Z(le(),1),Fs="https://kaneai-playground.lambdatest.io";function Ns({onComplete:i}){let[e]=(0,Ae.useState)(()=>new tt),[t]=(0,Ae.useState)(()=>new Re),[r,n]=(0,Ae.useState)(process.env.KANE_DEV_MODE==="1"?"env":"auth"),[s,a]=(0,Ae.useState)(0),[o,l]=(0,Ae.useState)(""),[d,c]=(0,Ae.useState)("username"),[h,g]=(0,Ae.useState)(""),[S,p]=(0,Ae.useState)(null),[_,v]=(0,Ae.useState)(!1),[w,F]=(0,Ae.useState)([]),[K,X]=(0,Ae.useState)([]),[W,B]=(0,Ae.useState)(null),$=(0,Ae.useCallback)(y=>{a(0),l(""),p(null),n(y)},[]),E=(0,Ae.useCallback)(()=>{e.set("default_url",Fs),e.set("setup_complete",!0),$("modes")},[e,$]),q=(0,Ae.useCallback)(async()=>{let{credentials:y,profile:C,env:O}=t.getActiveCredentials();if(!y||!C||!O)return null;let V=y.expires_at,N=Date.now()/1e3;if(V-N<300){let ee=t.loadClient(C,O);if(!ee)return null;let ce=await new ze(O).refreshToken(y.refresh_token,ee.client_id),oe={access_token:ce.access_token,refresh_token:ce.refresh_token,expires_at:Math.floor(N)+ce.expires_in,scope:ce.scope};return t.saveCredentials(C,O,oe),oe.access_token}return y.access_token},[t]),f=(0,Ae.useCallback)(async()=>{n("loading-projects");try{let y=t.resolveAuth();if(!y)throw new Error("No auth configured");let C=t.getDefaultEnv(),O=ae(C),V,N;if(y.method==="basic")V=y.username,N=y.access_key;else{let oe=await q();if(!oe)throw new Error("Could not get OAuth token");let de=await new cn(O.controllerBaseUrl,oe).getTmsCredentials();V=de.username,N=de.access_key}let ce=(await new Ot(O.tmsBaseUrl,V,N).listProjects()).map(oe=>({id:oe.project_id,label:`${oe.name} (${oe.project_id})`,isActive:oe.name.toLowerCase().includes("kaneai")}));if(ce.length===0){p("No projects found."),E();return}F(ce),n("project")}catch(y){p(`Could not fetch projects: ${y instanceof Error?y.message:y}`),E()}},[t,q,$,E]),R=(0,Ae.useCallback)(async y=>{n("loading-folders");try{let C=t.resolveAuth();if(!C)throw new Error("No auth configured");let O=t.getDefaultEnv(),V=ae(O),N,ee;if(C.method==="basic")N=C.username,ee=C.access_key;else{let de=await q();if(!de)throw new Error("Could not get OAuth token");let sn=await new cn(V.controllerBaseUrl,de).getTmsCredentials();N=sn.username,ee=sn.access_key}let Y=new Ot(V.tmsBaseUrl,N,ee),ce=await Y.listFolders(y),oe=await Y.getDefaultFolder(y).catch(()=>null);B(oe);let Oe=ce.map(de=>({id:de.id,label:`${de.name} (${de.id}) \xB7 ${de.test_cases_count} tests`,isActive:de.id===oe}));if(Oe.length===0){oe&&e.set("folder_id",oe),E();return}X(Oe),n("folder")}catch{E()}},[t,q,e,E]);return et((y,C)=>{if(!_&&!(r==="loading-projects"||r==="loading-folders")){if(r==="modes"){C.return&&(n("done"),setTimeout(i,300));return}if(r==="env"||r==="auth"){if(C.upArrow)a(V=>Math.max(0,V-1));else if(C.downArrow)a(V=>Math.min(1,V+1));else if(C.return){if(r==="env"){let V=s===0?"prod":"stage";t.setDefaultEnv(V),$("auth")}else if(r==="auth")if(s===0){v(!0);let V=t.getDefaultEnv(),N="default";t.setActiveProfile(N),new _t(N,V,t).login().then(()=>{v(!1),f()}).catch(Y=>{v(!1),p(`Login failed: ${Y.message}`)})}else $("auth-basic"),c("username")}return}if(r==="auth-basic"){if(C.return)if(d==="username"){if(!o.trim()){p("Username is required");return}g(o.trim()),l(""),c("access_key"),p(null)}else{if(!o.trim()){p("Access key is required");return}let O="default",V=t.getDefaultEnv();t.setActiveProfile(O),t.saveBasicAuth(O,V,{username:h,access_key:o.trim()}),f()}else C.backspace||C.delete?l(O=>O.slice(0,-1)):y&&!C.ctrl&&!C.meta&&l(O=>O+y);return}}},{isActive:r!=="project"&&r!=="folder"}),(0,D.jsx)(x,{flexDirection:"column",padding:1,children:(0,D.jsx)(Cn,{title:"Kane CLI \u2014 First-time Setup",variant:r==="done"?"success":"default",children:(0,D.jsxs)(x,{flexDirection:"column",paddingY:1,children:[r==="env"&&(0,D.jsxs)(x,{flexDirection:"column",marginBottom:1,children:[(0,D.jsxs)(x,{children:[(0,D.jsx)(u,{color:m.purple,children:"?"}),(0,D.jsx)(u,{bold:!0,children:" Select environment"})]}),(0,D.jsxs)(x,{marginLeft:2,flexDirection:"column",children:[(0,D.jsxs)(u,{color:s===0?m.purple:m.dimmed,children:[s===0?"\u25CF ":"\u25CB ","prod"]}),(0,D.jsxs)(u,{color:s===1?m.purple:m.dimmed,children:[s===1?"\u25CF ":"\u25CB ","stage"]})]})]}),r==="auth"&&(0,D.jsxs)(x,{flexDirection:"column",marginBottom:1,children:[(0,D.jsxs)(x,{children:[(0,D.jsx)(u,{color:m.purple,children:"?"}),(0,D.jsx)(u,{bold:!0,children:" Which authentication method?"})]}),(0,D.jsxs)(x,{marginLeft:2,flexDirection:"column",children:[(0,D.jsxs)(u,{color:s===0?m.purple:m.dimmed,children:[s===0?"\u25CF ":"\u25CB ","OAuth (browser login)"]}),(0,D.jsxs)(u,{color:s===1?m.purple:m.dimmed,children:[s===1?"\u25CF ":"\u25CB ","Basic (username + access key)"]})]}),_&&(0,D.jsx)(x,{marginTop:1,marginLeft:2,children:(0,D.jsx)(u,{color:m.cyan,children:"\u280B Opening browser for login\u2026"})})]}),r==="auth-basic"&&(0,D.jsxs)(x,{flexDirection:"column",children:[(0,D.jsxs)(x,{marginBottom:d==="access_key"?0:1,children:[(0,D.jsx)(u,{color:d==="access_key"?m.statusPass:m.primary,children:d==="access_key"?"\u2713":"?"}),(0,D.jsx)(u,{bold:!0,children:" Username: "}),d==="username"?(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(u,{color:m.base,children:o}),(0,D.jsx)(u,{color:m.primary,inverse:!0,children:" "})]}):(0,D.jsx)(u,{color:m.statusPass,children:h})]}),d==="access_key"&&(0,D.jsxs)(x,{marginBottom:1,children:[(0,D.jsx)(u,{color:m.primary,children:"?"}),(0,D.jsx)(u,{bold:!0,children:" Access Key: "}),(0,D.jsx)(u,{color:m.dim,children:"\u2022".repeat(o.length)}),(0,D.jsx)(u,{color:m.primary,inverse:!0,children:" "})]})]}),r==="loading-projects"&&(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.cyan,children:"\u280B Fetching projects\u2026"})}),r==="project"&&(0,D.jsx)(Xn,{title:"Select project",items:w,itemNoun:"projects",onSelect:y=>{e.set("project_id",y.id),R(y.id)},onCancel:()=>{E()}}),r==="loading-folders"&&(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.cyan,children:"\u280B Fetching folders\u2026"})}),r==="folder"&&(0,D.jsx)(Xn,{title:"Select folder",items:K,itemNoun:"folders",onSelect:y=>{e.set("folder_id",y.id),E()},onCancel:()=>{W&&e.set("folder_id",W),E()}}),r==="modes"&&(0,D.jsxs)(x,{flexDirection:"column",children:[(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.statusPass,bold:!0,children:"\u2713 Setup complete!"})}),(0,D.jsx)(x,{marginTop:1,children:(0,D.jsx)(En,{label:"Profile",value:t.getActiveProfile()??"default"})}),(0,D.jsx)(En,{label:"Environment",value:t.getDefaultEnv()}),(0,D.jsx)(En,{label:"Default URL",value:Fs}),(0,D.jsx)(x,{marginTop:1,flexDirection:"column",children:(0,D.jsx)(u,{bold:!0,color:m.primary,children:"Available modes:"})}),(0,D.jsxs)(x,{marginLeft:2,flexDirection:"column",marginTop:1,children:[(0,D.jsxs)(x,{children:[(0,D.jsx)(u,{bold:!0,color:m.base,children:"TUI "}),(0,D.jsx)(u,{color:m.dim,children:"Interactive menu + chat UI"})]}),(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.dim,children:" kane-cli"})}),(0,D.jsxs)(x,{marginTop:1,children:[(0,D.jsx)(u,{bold:!0,color:m.base,children:"CLI "}),(0,D.jsx)(u,{color:m.dim,children:"Headless single-run, JSON output"})]}),(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.dim,children:' kane-cli run "objective" --url <url>'})}),(0,D.jsxs)(x,{marginTop:1,children:[(0,D.jsx)(u,{bold:!0,color:m.base,children:"Agent "}),(0,D.jsx)(u,{color:m.dim,children:"Programmatic setup + run via CLI flags"})]}),(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.dim,children:" kane-cli login --username <u> --access-key <k>"})})]}),(0,D.jsxs)(x,{marginTop:1,children:[(0,D.jsx)(u,{color:m.dim,children:"Press "}),(0,D.jsx)(u,{bold:!0,color:m.primary,children:"Enter"}),(0,D.jsx)(u,{color:m.dim,children:" to launch TUI"})]})]}),r==="done"&&(0,D.jsx)(x,{children:(0,D.jsx)(u,{color:m.statusPass,bold:!0,children:"Launching\u2026"})}),S&&(0,D.jsx)(x,{marginTop:1,children:(0,D.jsx)(u,{color:m.red,children:S})})]})})})}var bt=Z(He(),1);var qe=Z(le(),1);function Oi(i,e){let t=[],n=Math.max(e-4,30);t.push({type:"title",text:i.title});for(let s=0;s<i.sections.length;s++){let a=i.sections[s];s>0&&t.push({type:"divider",text:"\u2500".repeat(n)}),a.label&&t.push({type:"header",text:a.label});let o=a.entries.length>0?Math.max(...a.entries.map(l=>l.key.length)):0;for(let l of a.entries){let d="\xB7".repeat(Math.max(2,o-l.key.length+3)),c=`${l.key} ${d} ${l.value}`;t.push({type:"entry",text:c,color:l.color})}}return t.push({type:"footer",text:"esc back"}),t}function Hs({data:i,width:e=60}){let t=Oi(i,e);return(0,qe.jsx)(x,{flexDirection:"column",borderStyle:"round",borderColor:m.primary,paddingX:2,paddingY:1,children:t.map((r,n)=>{if(r.type==="title")return(0,qe.jsx)(u,{color:m.primary,bold:!0,children:r.text},n);if(r.type==="header")return(0,qe.jsx)(x,{marginTop:1,children:(0,qe.jsx)(u,{color:m.dim,children:r.text})},n);if(r.type==="divider")return(0,qe.jsx)(x,{marginTop:1,marginBottom:0,children:(0,qe.jsx)(u,{color:m.ambient,children:r.text})},n);if(r.type==="footer")return(0,qe.jsx)(x,{marginTop:1,children:(0,qe.jsx)(u,{color:m.dim,children:r.text})},n);let s=r.text.match(/^(.+?) (·+) (.+)$/);return s?(0,qe.jsxs)(u,{children:[(0,qe.jsxs)(u,{color:m.secondary,children:[s[1]," "]}),(0,qe.jsxs)(u,{color:m.ambient,children:[s[2]," "]}),(0,qe.jsx)(u,{color:r.color??m.base,children:s[3]})]},n):(0,qe.jsx)(u,{color:r.color??m.base,children:r.text},n)})})}var Me=Z(le(),1);function Ws(i,e){let t=[];function r(n,s){for(let a of n)t.push({item:a,depth:s}),a.type==="submenu"&&a.children&&e.length>s&&e[s]===a.id&&r(a.children,s+1)}return r(i,0),t}function Ks({items:i,onRunSelected:e,renderLoginWizard:t,renderProfilesView:r,renderChromeProfilePicker:n,renderProjectPicker:s,renderFolderPicker:a}){let[o,l]=(0,bt.useState)({expandedPath:[],selectedIndex:0,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}),d=Ws(i,o.expandedPath),c=d[o.selectedIndex]?.item,h=(0,bt.useRef)(null),g=(0,bt.useCallback)(p=>{l(_=>({..._,feedback:p})),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{l(_=>({..._,feedback:null})),h.current=null},4e3)},[]);(0,bt.useEffect)(()=>()=>{h.current&&clearTimeout(h.current)},[]);let S=(0,bt.useCallback)(()=>{l(p=>({...p,activeView:null,infoData:null}))},[]);return et((p,_)=>{if(o.activeView==="infoView"){_.escape&&S();return}if(!(o.activeView==="loginWizard"||o.activeView==="profilesView"||o.activeView==="chromeProfilePicker"||o.activeView==="projectPicker"||o.activeView==="folderPicker")){if(o.isEditing){if(_.escape){l(v=>({...v,isEditing:!1,inputValue:""}));return}if(_.return){let v=o.inputValue.trim();if(c?.onValue&&v){let w=c.currentValue;c.onValue(v),g(w?`${c.label}: ${w} \u2192 ${v}`:`${c.label}: ${v}`)}l(w=>({...w,isEditing:!1,inputValue:""}));return}if(_.backspace||_.delete){l(v=>({...v,inputValue:v.inputValue.slice(0,-1)}));return}p&&!_.ctrl&&!_.meta&&l(v=>({...v,inputValue:v.inputValue+p}));return}if(o.isSelecting&&c?.options){let v=c.options;if(_.escape){l(w=>({...w,isSelecting:!1}));return}if(_.upArrow){l(w=>({...w,inputValue:String(Math.max(0,Number(w.inputValue||"0")-1))}));return}if(_.downArrow){l(w=>({...w,inputValue:String(Math.min(v.length-1,Number(w.inputValue||"0")+1))}));return}if(_.return){let w=Number(o.inputValue||"0"),F=v[w];if(F&&c.onValue){let K=c.currentValue;c.onValue(F.value),g(K?`${c.label}: ${K} \u2192 ${F.label}`:`${c.label}: ${F.label}`)}l(K=>({...K,isSelecting:!1,inputValue:""}));return}return}if(_.upArrow){l(v=>({...v,selectedIndex:Math.max(0,v.selectedIndex-1)}));return}if(_.downArrow){l(v=>({...v,selectedIndex:Math.min(d.length-1,v.selectedIndex+1)}));return}if(_.escape){l(v=>{if(v.expandedPath.length===0)return v;let w=v.expandedPath.slice(0,-1),F=Ws(i,w),K=v.expandedPath[v.expandedPath.length-1],X=F.findIndex(W=>W.item.id===K);return{...v,expandedPath:w,selectedIndex:X>=0?X:0}});return}if(_.return&&c){if(c.id==="run-start"){e();return}if(c.type==="submenu"){let v=d[o.selectedIndex]?.depth??0;l(w=>({...w,expandedPath:[...w.expandedPath.slice(0,v),c.id],selectedIndex:w.selectedIndex+1}));return}if(c.onInfo){let v=c.onInfo();l(w=>({...w,activeView:"infoView",infoData:v}));return}if(c.onLoginWizard){c.onLoginWizard(),l(v=>({...v,activeView:"loginWizard"}));return}if(c.onProfilesView){c.onProfilesView(),l(v=>({...v,activeView:"profilesView"}));return}if(c.onChromeProfilePicker){c.onChromeProfilePicker(),l(v=>({...v,activeView:"chromeProfilePicker"}));return}if(c.onProjectPicker){c.onProjectPicker(),l(v=>({...v,activeView:"projectPicker"}));return}if(c.onFolderPicker){c.onFolderPicker(),l(v=>({...v,activeView:"folderPicker"}));return}if(c.type==="action"){c.onAction?.(),g(`${c.label} done`);return}if(c.type==="select"&&c.options){let v=c.options.findIndex(w=>w.value===c.currentValue);l(w=>({...w,isSelecting:!0,inputValue:String(Math.max(0,v))}));return}if(c.type==="text-input"){l(v=>({...v,isEditing:!0,inputValue:c.currentValue??""}));return}}}}),(0,Me.jsx)(x,{flexDirection:"column",paddingX:1,children:o.activeView==="infoView"&&o.infoData?(0,Me.jsx)(Hs,{data:o.infoData}):o.activeView==="loginWizard"&&t?t(S):o.activeView==="profilesView"&&r?r(S):o.activeView==="chromeProfilePicker"&&n?n(S):o.activeView==="projectPicker"&&s?s(S):o.activeView==="folderPicker"&&a?a(S):(0,Me.jsxs)(Me.Fragment,{children:[d.map(({item:p,depth:_},v)=>{let w=v===o.selectedIndex,F=" ".repeat(_),K=w?"\u276F ":" ",X=p.type==="submenu"?o.expandedPath.includes(p.id)?"\u25BC ":"\u25B6 ":" ",W=p.currentValue!=null?` [${p.currentValue}]`:"";if(w&&o.isSelecting&&p.options){let B=Number(o.inputValue||"0");return(0,Me.jsxs)(x,{flexDirection:"column",children:[(0,Me.jsxs)(u,{color:m.cyan,children:[F,K,X,p.label]}),p.options.map(($,E)=>(0,Me.jsxs)(u,{color:E===B?m.cyan:void 0,children:[F," ",E===B?"\u276F ":" ",$.label]},$.value))]},p.id)}return w&&o.isEditing?(0,Me.jsxs)(u,{color:m.cyan,children:[F,K,X,p.label,": ",o.inputValue,(0,Me.jsx)(u,{color:m.dimmed,children:"\u2588"})]},p.id):(0,Me.jsxs)(u,{color:w?m.cyan:void 0,dimColor:!w&&_>0,children:[F,K,X,p.label,(0,Me.jsx)(u,{dimColor:!0,children:W})]},p.id)}),o.feedback&&(0,Me.jsx)(x,{marginTop:1,children:(0,Me.jsxs)(u,{color:m.green,children:["\u2713 ",o.feedback]})})]})})}import{randomUUID as $i}from"crypto";import{mkdirSync as Ii,writeFileSync as qs,appendFileSync as Di,existsSync as Js}from"fs";import{join as pn}from"path";var Bi=pn(ye,"sessions"),Yt=class{sessionId;sessionDir;runs=[];_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="";constructor(){this.sessionId=$i(),this.sessionDir=pn(Bi,this.sessionId)}start(e){if(this._started)return;this._started=!0,this._model=e.model,this._environment=e.environment,this._profile=e.profile,this._startedAt=new Date().toISOString(),Ii(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"};qs(pn(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
|
|
31
|
-
`)
|
|
32
|
-
`)}
|
|
33
|
-
`)}
|
|
34
|
-
`)
|
|
35
|
-
`)}
|
|
36
|
-
`)
|
|
37
|
-
`))
|
|
38
|
-
|
|
39
|
-
`).map(e=>e.replace(/^[-–•]\s*/,"").trim()).filter(e=>e.length>0)}function Er({status:i,summary:e,duration:t,steps:r,stepsPassed:n,stepsFailed:s,reason:a,creditsConsumed:o}){let l=i==="passed",d=l?m.green:m.red,c=l?"\u2713":"\u2717",h=i.toUpperCase(),g=n??(l?r:Math.max(0,r-1)),S=s??(l?0:1),p=S>0?`${r} steps (${g} passed, ${S} failed)`:`${r} steps`,_=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,v=ia(e);return(0,Ge.jsx)(x,{flexDirection:"column",marginTop:1,children:(0,Ge.jsxs)(x,{borderStyle:"round",borderColor:d,flexDirection:"column",paddingX:2,paddingY:1,width:oa+6,children:[(0,Ge.jsxs)(x,{children:[(0,Ge.jsxs)(u,{bold:!0,color:d,children:[c," ",h]}),(0,Ge.jsxs)(u,{color:m.dimmed,children:[" ","\xB7 ",p," \xB7 ",_,typeof o=="number"&&o>0?` \xB7 ${o.toFixed(4)} credits`:""]})]}),v.length>0&&(0,Ge.jsx)(x,{flexDirection:"column",marginTop:1,marginLeft:1,children:v.map((w,F)=>(0,Ge.jsxs)(x,{marginBottom:F<v.length-1?1:0,children:[(0,Ge.jsx)(u,{color:m.primary,children:"\u25CF "}),(0,Ge.jsx)(x,{flexShrink:1,children:(0,Ge.jsx)(u,{wrap:"wrap",children:w})})]},F))}),a&&!l&&(0,Ge.jsx)(x,{marginTop:1,children:(0,Ge.jsxs)(u,{color:m.red,wrap:"wrap",children:["Reason: ",a]})})]})})}var Xe=Z(le(),1);function oo({message:i,code:e,remediation:t,docsUrl:r}){return(0,Xe.jsx)(Cn,{title:"Error",variant:"error",children:(0,Xe.jsxs)(x,{flexDirection:"column",paddingY:1,children:[(0,Xe.jsxs)(u,{color:m.red,bold:!0,children:[" \u2717 ",i]}),e&&(0,Xe.jsxs)(x,{marginTop:0,marginLeft:5,children:[(0,Xe.jsx)(u,{color:m.muted,children:"Code: "}),(0,Xe.jsx)(u,{color:m.dimmed,children:e})]}),t&&(0,Xe.jsxs)(x,{flexDirection:"column",marginTop:1,marginLeft:5,children:[(0,Xe.jsx)(u,{color:m.green,bold:!0,children:"Fix:"}),(0,Xe.jsxs)(u,{color:m.cyan,children:["$ ",t]})]}),r&&(0,Xe.jsxs)(x,{marginTop:1,marginLeft:5,children:[(0,Xe.jsx)(u,{color:m.muted,children:"Docs: "}),(0,Xe.jsx)(u,{color:m.cyan,underline:!0,children:r})]})]})})}var Pe=Z(le(),1);function io({data:i,color:e}){let t=i.status==="passed"?"passed":"failed";return(0,Pe.jsx)(Er,{status:t,summary:i.summary??"",duration:i.duration,steps:i.stepsTotal,stepsPassed:i.stepsPassed,stepsFailed:i.stepsFailed,reason:i.reason,creditsConsumed:i.creditsConsumed})}function ao({config:i,spawnOpts:e,cancelRef:t,banner:r,onComplete:n,onStepEnd:s}){let{exit:a}=Sn(),o=Vn(s),l=(0,nt.useRef)(!1),d=(0,nt.useRef)(!1),[c,h]=(0,nt.useState)("");(0,nt.useEffect)(()=>{l.current||(l.current=!0,o.startRun(i,e))},[i,e,o]),(0,nt.useEffect)(()=>{t&&(t.current=()=>o.cancelRun())},[t,o]);let g=(0,nt.useRef)(0);et((_,v)=>{v.ctrl&&_==="c"&&(o.isRunning?(g.current++,g.current>=2?a():o.cancelRun()):a())}),et((_,v)=>{o.askingUser&&(v.return?(o.sendAnswer(c),h("")):v.backspace||v.delete?h(w=>w.slice(0,-1)):_&&!v.ctrl&&!v.meta&&h(w=>w+_))},{isActive:!!o.askingUser}),(0,nt.useEffect)(()=>{if(!o.isRunning&&o.lastRunEnd&&!d.current){d.current=!0;let _=o.steps.flatMap(X=>{let W=X.children??[];return[X,...W]}),v=_.filter(X=>X.status==="passed").length,w=_.filter(X=>X.status==="failed").length,F=_.filter(X=>X.status==="passed"||X.status==="failed").length,K=o.bifurcationInfo;n({lastRunEnd:o.lastRunEnd,stepsPassed:v,stepsFailed:w,stepsTotal:F,hadError:!1,bifurcationFlows:K&&!K.isSingleFlow?K.flows:null}),a()}},[o.isRunning,o.lastRunEnd,o.steps,n,a]),(0,nt.useEffect)(()=>{o.runError&&!o.isRunning&&!d.current&&(d.current=!0,n({lastRunEnd:null,stepsPassed:0,stepsFailed:0,stepsTotal:0,hadError:!0,bifurcationFlows:null}),a())},[o.runError,o.isRunning,n,a]);let S=o.lastRunEnd?(()=>{let _=o.steps.flatMap(K=>[K,...K.children??[]]),v=_.filter(K=>K.status==="passed").length,w=_.filter(K=>K.status==="failed").length,F=_.filter(K=>K.status==="passed"||K.status==="failed").length;return{status:o.lastRunEnd.status,duration:o.lastRunEnd.duration??0,summary:o.lastRunEnd.summary??"",stepsPassed:v,stepsFailed:w,stepsTotal:F,reason:o.lastRunEnd.reason,finalState:o.lastRunEnd.final_state,creditsConsumed:o.lastRunEnd.credits_consumed}})():null,p=(0,nt.useMemo)(()=>r?[{key:"banner",...r}]:[],[r]);return(0,Pe.jsxs)(x,{flexDirection:"column",children:[(0,Pe.jsx)(Gt,{items:p,children:_=>(0,Pe.jsxs)(x,{flexDirection:"column",marginBottom:1,children:[(0,Pe.jsxs)(x,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,Pe.jsx)(u,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,Pe.jsx)(u,{color:m.dimmed,children:" \u2502 "}),(0,Pe.jsx)(u,{color:m.cyan,children:_.model}),(0,Pe.jsx)(u,{color:m.dimmed,children:" \u2502 "}),(0,Pe.jsx)(u,{color:m.dimmed,children:_.auth})]}),_.status?.map((v,w)=>(0,Pe.jsx)(u,{color:m.dimmed,children:v},w))]},_.key)}),o.steps.length>0&&(0,Pe.jsx)(On,{steps:o.steps,bifurcated:!!o.bifurcationInfo&&!o.bifurcationInfo.isSingleFlow,flows:o.bifurcationInfo?.flows,cmInitCounts:o.cmInitCounts,staticSteps:!0}),o.askingUser&&(0,Pe.jsxs)(x,{flexDirection:"column",marginTop:1,children:[(0,Pe.jsxs)(u,{color:m.yellow,children:['Agent is asking: "',o.askingUser,'"']}),(0,Pe.jsxs)(u,{children:["> ",c,"\u2588"]})]}),o.runError&&(0,Pe.jsx)(oo,{message:o.runError,code:"RUNNER_ERROR"}),S&&(0,Pe.jsx)(Er,{status:S.status==="passed"?"passed":"failed",summary:S.summary??"",duration:S.duration,steps:S.stepsTotal,stepsPassed:S.stepsPassed,stepsFailed:S.stepsFailed,reason:S.reason,creditsConsumed:S.creditsConsumed})]})}var Zt=class{constructor(e){this.baseUrl=e}async pushSecret(e){let t=`Basic ${Buffer.from(`${e.username}:${e.accessKey}`).toString("base64")}`,r=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(!r.ok)throw new Error(`Push secret failed: ${r.status} ${await r.text()}`)}static extractVariableKeys(e){let t=e.matchAll(/\{\{([a-zA-Z_][a-zA-Z0-9_]*)\}\}/g),r=new Set;for(let n of t)r.add(n[1]);return[...r]}};var en=class{constructor(e,t,r){this.baseUrl=e;this.authHeader=`Basic ${Buffer.from(`${t}:${r}`).toString("base64")}`}authHeader;headers(){return{Authorization:this.authHeader,"Content-Type":"application/json",Accept:"application/json"}}async upsertVariable(e){let t=e.environmentId??0,r=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(r.ok)return{id:(await r.json()).id??0};if(r.status!==409&&r.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 s=await fetch(`${this.baseUrl}/v1/variables/${encodeURIComponent(e.name)}?environment_id=${t}`,{method:"GET",headers:this.headers()});return s.ok?{id:(await s.json()).data?.id??0}:{id:0}}};import aa from"sharp";var tn=class{maxWorkers;maxRetries=2;queue=[];activeCount=0;drainResolvers=[];sas;constructor(e,t=3){this.sas=e,this.maxWorkers=t}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,r="image/webp";try{let o=await aa(e.buffer).webp({quality:80}).toBuffer();t=new Uint8Array(o)}catch{t=new Uint8Array(e.buffer),r="image/png"}let n=r==="image/webp"?"webp":"png",s=`test_screenshots/untagged_screenshot/${e.operationId}.${n}`,a=`${this.sas.base_url}/${this.sas.container}/${s}?${this.sas.sas_token}`;for(let o=0;o<=this.maxRetries;o++)try{if((await fetch(a,{method:"PUT",headers:{"Content-Type":r,"x-ms-blob-type":"BlockBlob"},body:t})).ok)return;if(o<this.maxRetries){await this.backoff(o);continue}}catch{if(o<this.maxRetries){await this.backoff(o);continue}}}backoff(e){let t=e===0?1e3:3e3;return new Promise(r=>setTimeout(r,t))}isNearExpiry(){if(!this.sas.expiry)return!1;let e=new Date(this.sas.expiry).getTime();return Date.now()>e-5*6e4}};var J=Z(le(),1);function co({localMode:i=!1,codeExport:e=!1,updatePromise:t}={}){let{exit:r}=Sn(),[n]=(0,M.useState)(()=>new Yt),[s]=(0,M.useState)(()=>new tt),a=(0,M.useRef)(0),o=(0,M.useCallback)(()=>`msg-${++a.current}`,[]),[l,d]=(0,M.useState)(!1),[c,h]=(0,M.useState)(null),[g,S]=(0,M.useState)(!1),[p,_]=(0,M.useState)(null),[v,w]=(0,M.useState)(!1),[F,K]=(0,M.useState)(0),[X,W]=(0,M.useState)(!1),[B,$]=(0,M.useState)(null),[E,q]=(0,M.useState)(null),[f,R]=(0,M.useState)(Zn()),[y,C]=(0,M.useState)(null),[O,V]=(0,M.useState)(!1),N=(0,M.useRef)(null),ee=(0,M.useRef)(0),Y=(0,M.useRef)(""),ce=(0,M.useRef)(0),[oe,Oe]=(0,M.useState)([]),de=(0,M.useCallback)(b=>{let P=`s-${++ce.current}`;Oe(A=>[...A,{id:P,content:b}])},[]),[Jt,sn]=(0,M.useState)(()=>new tt().load().setup_complete),[Ut,St]=(0,M.useState)("menu"),[me,rt]=(0,M.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),G=as(),I=zs(),je=Ys(),bn=(0,M.useCallback)((b,P)=>{let A=N.current;if(!A)return;let T=ee.current+P,L=Be(n.sessionDir,"runs",String(T),"run-test");try{if(!vn(L)){n.log(`SCREENSHOT_UPLOAD skip step=${b} reason=runsDir_not_found path=${L}`);return}let H=L;if(vn(Be(L,"screenshots")))H=L;else{let we=la(L).filter(gt=>vn(Be(L,gt,"screenshots")));if(we.length===0){n.log(`SCREENSHOT_UPLOAD skip step=${b} reason=no_screenshots_dir`);return}H=Be(L,we[0])}let re=Be(H,"screenshots",`step_${String(b).padStart(3,"0")}.png`);if(!vn(re)){n.log(`SCREENSHOT_UPLOAD skip step=${b} reason=screenshot_not_found path=${re}`);return}let Ee=lo(re),_e=Be(H,"actions.ndjson");if(!vn(_e)){n.log(`SCREENSHOT_UPLOAD skip step=${b} reason=ndjson_not_found`);return}let ke=lo(_e,"utf-8").trim().split(`
|
|
40
|
-
|
|
41
|
-
`)
|
|
21
|
+
`),this.outputHelp({error:!0}));let n=t||{},r=n.exitCode||1,o=n.code||"commander.error";this._exit(r,o,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 Oa(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(),i=this.getOptionValue(l),c=this.options.find(m=>m.negate&&l===m.attributeName()),d=this.options.find(m=>!m.negate&&l===m.attributeName());return c&&(c.presetArg===void 0&&i===!1||c.presetArg!==void 0&&i===c.presetArg)?c:d||a},r=a=>{let l=n(a),i=l.attributeName();return this.getOptionValueSource(i)==="env"?`environment variable '${l.envVar}'`:`option '${l.flags}'`},o=`error: ${r(e)} cannot be used with ${r(t)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let r=[],o=this;do{let a=o.createHelp().visibleOptions(o).filter(l=>l.long).map(l=>l.long);r=r.concat(a),o=o.parent}while(o&&!o._enablePositionalOptions);t=Gs(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",o=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${n} but got ${e.length}.`;this.error(o,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let r=[];this.createHelp().visibleCommands(this).forEach(o=>{r.push(o.name()),o.alias()&&r.push(o.alias())}),t=Gs(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=>Ia(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=wt.basename(e,wt.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(o=>o.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(o=>o.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,o=>{let a;typeof t=="function"?a=t({error:o.error,command:o.command}):a=t,a&&o.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 Ks(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})}qs.Command=yo});var Qs=Lt(tt=>{"use strict";var{Argument:Js}=gr(),{Command:So}=zs(),{CommanderError:Da,InvalidArgumentError:Xs}=Rn(),{Help:ja}=po(),{Option:Ys}=_o();tt.program=new So;tt.createCommand=s=>new So(s);tt.createOption=(s,e)=>new Ys(s,e);tt.createArgument=(s,e)=>new Js(s,e);tt.Command=So;tt.Option=Ys;tt.Argument=Js;tt.Help=ja;tt.CommanderError=Da;tt.InvalidArgumentError=Xs;tt.InvalidOptionArgumentError=Xs});var Ro=N(je(),1);import Ye from"process";var $=N(je(),1);var ge=N(Q(),1);function Ko({profile:s,environment:e,model:t,tokenValid:n,sessionId:r,runCount:o,viewMode:a}){let{stdout:l}=Et(),i=l?.columns??80,c=e==="stage";return(0,ge.jsxs)(y,{flexDirection:"column",children:[(0,ge.jsx)(f,{color:h.muted,children:"\u2500".repeat(i)}),(0,ge.jsx)(y,{paddingX:1,children:(0,ge.jsxs)(y,{gap:1,children:[(0,ge.jsx)(f,{color:h.dimmed,children:"Model:"}),(0,ge.jsx)(f,{color:h.dimmed,children:t}),(0,ge.jsx)(f,{color:h.muted,children:"|"}),(0,ge.jsx)(f,{color:h.dimmed,children:"Session:"}),(0,ge.jsx)(f,{color:h.dimmed,children:r.slice(-6)}),(0,ge.jsx)(f,{color:h.muted,children:"|"}),(0,ge.jsx)(f,{color:n?h.green:h.red,children:"\u25CF"}),(0,ge.jsx)(f,{color:h.dimmed,children:n?"authenticated":"not logged in"})]})}),(0,ge.jsx)(y,{paddingX:1,children:(0,ge.jsxs)(y,{gap:1,children:[(0,ge.jsx)(f,{color:h.dimmed,children:s??"no profile"}),(0,ge.jsx)(f,{color:h.muted,children:"|"}),c?(0,ge.jsx)(f,{color:h.yellow,bold:!0,children:"\u26A0 stage"}):(0,ge.jsx)(f,{color:h.green,children:e}),(0,ge.jsx)(f,{color:h.muted,children:"|"}),(0,ge.jsxs)(f,{color:h.dimmed,children:["runs: ",o]})]})}),(0,ge.jsx)(y,{paddingX:1,children:(0,ge.jsx)(f,{dimColor:!0,children:a==="chat"?"ctrl+c cancel/exit":"\u2191\u2193 navigate \u21B5 select esc back"})})]})}var qo=N(je(),1);import{readFileSync as wi,writeFileSync as yi,mkdirSync as Si}from"fs";import{dirname as Ei,join as Ci}from"path";var Ri=Ci(Ee,"command-history.json"),Ai=200,Vr=class{entries;filePath;max;constructor(e=Ri,t=Ai){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=wi(this.filePath,"utf-8"),t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}_save(){try{Si(Ei(this.filePath),{recursive:!0}),yi(this.filePath,JSON.stringify(this.entries)+`
|
|
25
|
+
`)}catch{}}};function Bn(s){let e=(0,qo.useRef)(null);return e.current||(e.current=new Vr(s)),e.current}var Bt=N(je(),1);var pn=[[[" "],[" "],[" "],[" "],["\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 ie=N(Q(),1),Fn="#af87d7",Br="#875faf",zo="#5b3a7a",ki="#ff9500",Ti="#ea580c";var Fr="#666666",Ii="#555555",Vt=[[Fn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Fn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Fn,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Fn,"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Br,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Br,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588"],[Br,"\u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588 \u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\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=Vt.map(([,s])=>[...s]);function Jo({visibleRows:s=Vt.length}){let e=Math.min(s,Vt.length);return(0,ie.jsxs)(y,{flexDirection:"column",children:[Vt.slice(0,e).map(([t,n],r)=>{let o=Ur[r];return(0,ie.jsx)(f,{children:o.map((a,l)=>{if(a==="\u2588")return(0,ie.jsx)(f,{color:t,children:"\u2588"},l);let i=l>0&&o[l-1]==="\u2588",c=r>0&&l>0&&Ur[r-1][l-1]==="\u2588";return i||c?(0,ie.jsx)(f,{color:zo,children:"\u2592"},l):(0,ie.jsx)(f,{children:" "},l)})},r)}),e>=Vt.length&&(0,ie.jsxs)(f,{children:[" ",Ur[Vt.length-1].map((t,n)=>t==="\u2588"?(0,ie.jsx)(f,{color:zo,children:"\u2580"},n):(0,ie.jsx)(f,{children:" "},n))]})]})}function Pi({visibleRows:s=pn.length}){let e=Math.min(s,pn.length);return(0,ie.jsx)(y,{flexDirection:"column",children:pn.slice(0,e).map((t,n)=>(0,ie.jsx)(f,{children:t.map((r,o)=>{let a=r[0],l=r[1],i=r[2];return l?(0,ie.jsx)(f,{color:l,backgroundColor:i,children:a},o):(0,ie.jsx)(f,{children:a},o)})},n))})}function Un({size:s="compact",helmetVisibleRows:e=pn.length,textVisibleRows:t=Vt.length,showMeta:n=!1,user:r=null,authenticated:o=!1,version:a=""}){return s==="compact"?(0,ie.jsx)(Jo,{}):(0,ie.jsxs)(y,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,ie.jsx)(f,{color:ki,italic:!0,children:" Welcome to"}),(0,ie.jsx)(f,{children:" "}),(0,ie.jsxs)(y,{gap:2,children:[(0,ie.jsx)(Pi,{visibleRows:e}),(0,ie.jsxs)(y,{flexDirection:"column",children:[(0,ie.jsx)(Jo,{visibleRows:t}),(0,ie.jsx)(y,{justifyContent:"flex-end",width:73,children:(0,ie.jsx)(f,{color:Ti,italic:!0,children:"Command-line interface"})})]})]}),n&&(0,ie.jsxs)(ie.Fragment,{children:[(0,ie.jsx)(f,{children:" "}),(0,ie.jsxs)(f,{children:[(0,ie.jsx)(f,{color:Fr,children:" Browser automation powered by AI. "}),(0,ie.jsx)(f,{color:Ii,children:`v${a}`})]}),(0,ie.jsx)(f,{children:" "}),(0,ie.jsx)(f,{children:(0,ie.jsx)(f,{color:Fr,children:" KaneCLI can navigate websites, fill forms, test web UI, and extract"})}),(0,ie.jsx)(f,{children:(0,ie.jsx)(f,{color:Fr,children:" data \u2014 right from your terminal."})}),(0,ie.jsx)(f,{children:" "})]})]})}var Hr=N(Q(),1),Nr=8,Mr=7;function Xo({onComplete:s}){let[e,t]=(0,Bt.useState)(0),[n,r]=(0,Bt.useState)(0),[o,a]=(0,Bt.useState)(!1),[l]=(0,Bt.useState)(()=>{let i=new Ne,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 Ct(()=>{t(i=>Math.min(Nr,i+1))},e<Nr?60:null),Ct(()=>{r(i=>Math.min(Mr,i+1))},n<Mr?80:null),(0,Bt.useEffect)(()=>{e>=Nr&&n>=Mr&&!o&&(a(!0),s?.())},[e,n,o,s]),(0,Hr.jsx)(y,{flexDirection:"column",children:(0,Hr.jsx)(Un,{size:"full",helmetVisibleRows:e,textVisibleRows:n,showMeta:o,user:l.user,authenticated:l.authenticated,version:pt})})}var gt=N(Q(),1);function Yo({entry:s}){return s.type==="input"?(0,gt.jsxs)(y,{children:[(0,gt.jsx)(f,{color:h.purple,children:"\u276F "}),(0,gt.jsx)(f,{children:s.text})]}):s.type==="error"?(0,gt.jsx)(y,{marginLeft:2,children:(0,gt.jsx)(f,{color:h.red,children:s.text})}):(0,gt.jsx)(y,{marginLeft:2,children:(0,gt.jsx)(f,{color:s.type==="info"?h.dimmed:void 0,children:s.text})})}var ht=N(je(),1);var Wr=N(je(),1);var st=N(Q(),1);function Qo({history:s,onSelect:e,onClose:t}){let[n,r]=(0,Wr.useState)(""),[o,a]=(0,Wr.useState)(0),l=n?s.search(n).slice(0,8):[];return $e((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,st.jsxs)(y,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,st.jsx)(f,{color:h.muted,bold:!0,children:"reverse search"}),(0,st.jsxs)(y,{gap:1,children:[(0,st.jsx)(f,{color:h.dimmed,children:"search:"}),(0,st.jsx)(f,{children:n}),(0,st.jsx)(f,{color:h.purple,children:"\u2588"})]}),l.length>0&&(0,st.jsx)(f,{children:" "}),l.map((i,c)=>(0,st.jsx)(y,{marginLeft:2,children:(0,st.jsxs)(f,{color:c===o?h.purple:h.dimmed,bold:c===o,children:[c===o?"\u25B8 ":" ",i]})},`${c}-${i}`))]})}var kt=N(Q(),1);function Zo({commands:s,selectedIndex:e}){return s.length===0?null:(0,kt.jsx)(y,{flexDirection:"column",marginBottom:0,children:s.map((t,n)=>{let r=n===e;return(0,kt.jsxs)(y,{children:[(0,kt.jsx)(f,{color:r?h.primary:h.dimmed,children:r?"\u276F ":" "}),(0,kt.jsxs)(f,{color:r?h.primary:void 0,bold:r,children:["/",t.name]}),t.args&&(0,kt.jsxs)(f,{color:h.dimmed,children:[" ",t.args]}),(0,kt.jsxs)(f,{color:h.dimmed,children:[" ",t.description]})]},t.name)})})}var Ve=N(Q(),1);function Nn({onSubmit:s,onEscape:e,history:t,placeholder:n="Type an objective or /command...",commands:r}){let[o,a]=(0,ht.useState)([]),[l,i]=(0,ht.useState)(0),[c,d]=(0,ht.useState)("none"),[m,g]=(0,ht.useState)(-1),p=(0,ht.useRef)(""),[x,E]=(0,ht.useState)(!0),{stdout:k}=Et(),T=k?.columns??80,[O,I]=(0,ht.useState)(0),j=o.join(""),se=(()=>{if(c!=="none"||o.length===0)return"";if(j.startsWith("/")&&r&&j.length>=2){let b=j.slice(1).toLowerCase(),_=r.find(S=>S.name.startsWith(b)&&S.name!==b);return _?`/${_.name}`.slice(j.length):""}if(j.startsWith("/"))return"";let u=t.getAll();for(let b=u.length-1;b>=0;b--)if(u[b].startsWith(j)&&u[b]!==j)return u[b].slice(j.length);return""})(),te=(()=>{if(!r||!j.startsWith("/"))return[];let u=j.length>=2?j.slice(1).toLowerCase():"";return u&&r.some(b=>b.name===u)?[]:r.filter(b=>!u||b.name.startsWith(u))})(),le=te.length>0&&j.startsWith("/");$e((u,b)=>{if(x&&u&&E(!1),b.return){if(le&&te[O]){let _=`/${te[O].name}`;a([..._]),i(_.length),I(0);return}j.trim()&&(t.push(j.trim()),s(j.trim()),a([]),i(0),d("none"),g(-1),p.current="",E(!0),I(0));return}if(b.escape){c!=="none"?d("none"):o.length>0?(a([]),i(0),g(-1),p.current=""):e?.();return}if(b.tab){if(se){let _=j+se;a([..._]),i(_.length);return}return}if(b.ctrl&&u==="r"){d("search");return}if(b.ctrl&&u==="a"){i(0);return}if(b.ctrl&&u==="e"){i(o.length);return}if(b.ctrl&&u==="w"){if(l===0)return;let _=l-1;for(;_>0&&o[_]===" ";)_--;for(;_>0&&o[_-1]!==" ";)_--;let S=[...o.slice(0,_),...o.slice(l)];a(S),i(_);return}if(b.ctrl&&u==="u"){a([]),i(0),g(-1),d("none");return}if(b.meta&&u==="b"){let _=l-1;for(;_>0&&o[_]===" ";)_--;for(;_>0&&o[_-1]!==" ";)_--;i(Math.max(0,_));return}if(b.meta&&u==="f"){let _=l;for(;_<o.length&&o[_]!==" ";)_++;for(;_<o.length&&o[_]===" ";)_++;i(_);return}if(b.leftArrow){i(_=>Math.max(0,_-1));return}if(b.rightArrow){if(l>=o.length&&se){let _=j+se;a([..._]),i(_.length)}else i(_=>Math.min(o.length,_+1));return}if(b.upArrow){if(le){I(_=>Math.max(0,_-1));return}if(c==="none"){let _=t.getAll();if(_.length===0)return;if(m===-1){p.current=j,g(_.length-1);let S=_[_.length-1];a([...S]),i(S.length)}else if(m>0){let S=m-1;g(S);let L=_[S];a([...L]),i(L.length)}}return}if(b.downArrow){if(le){I(_=>Math.min(te.length-1,_+1));return}if(c==="none"){let _=t.getAll();if(m===-1)return;if(m<_.length-1){let S=m+1;g(S);let L=_[S];a([...L]),i(L.length)}else{g(-1);let S=p.current;a([...S]),i(S.length)}}return}if(b.backspace||b.delete){if(l>0){let _=[...o.slice(0,l-1),...o.slice(l)];a(_),i(l-1),g(-1),I(0)}return}if(u&&!b.ctrl&&!b.meta){let _=[...o.slice(0,l),...u,...o.slice(l)];a(_),i(l+u.length),g(-1),I(0)}},{isActive:c!=="search"});let fe=u=>{a([...u]),i(u.length),d("none")},U=()=>{d("none")},B=(()=>{if(x&&o.length===0)return null;let u=l>=o.length,b=o.slice(0,l).join(""),_=u?" ":o[l],S=u?"":o.slice(l+1).join(""),L="\u276F "+b+_+S+se,z=2,J=z+b.length,oe=J+1,X=oe+S.length,we=L.length,he=Math.max(1,Math.ceil(we/T)),Re=[];for(let nt=0;nt<he;nt++)Re.push({start:nt*T,end:Math.min((nt+1)*T,we)});return{full:L,p:z,b:J,c:oe,a:X,lines:Re}})();return(0,Ve.jsxs)(y,{flexDirection:"column",children:[c==="search"&&(0,Ve.jsx)(Qo,{history:t,onSelect:fe,onClose:U}),le&&(0,Ve.jsx)(Zo,{commands:te,selectedIndex:O}),(0,Ve.jsx)(f,{color:h.muted,children:"\u2500".repeat(T)}),B===null?(0,Ve.jsxs)(y,{children:[(0,Ve.jsx)(f,{color:h.purple,children:"\u276F "}),(0,Ve.jsx)(f,{color:h.dimmed,children:n})]}):(0,Ve.jsx)(y,{flexDirection:"column",children:B.lines.map(({start:u,end:b},_)=>{let{full:S,p:L,b:z,c:J,a:oe}=B,X=[];return b>0&&u<L&&X.push((0,Ve.jsx)(f,{color:h.purple,children:S.slice(Math.max(u,0),Math.min(L,b))},"p")),b>L&&u<z&&X.push((0,Ve.jsx)(f,{children:S.slice(Math.max(L,u),Math.min(z,b))},"b")),b>z&&u<J&&X.push((0,Ve.jsx)(f,{color:h.purple,inverse:!0,children:S.slice(Math.max(z,u),Math.min(J,b))},"c")),b>J&&u<oe&&X.push((0,Ve.jsx)(f,{children:S.slice(Math.max(J,u),Math.min(oe,b))},"a")),b>oe&&X.push((0,Ve.jsx)(f,{color:h.dimmed,children:S.slice(Math.max(oe,u),b)},"g")),(0,Ve.jsx)(y,{children:X},_)})})]})}var Ie=N(je(),1);var ts=N(je(),1);var Mn=N(Q(),1),Oi="#ffc580",Di="#ffd9a8",es="#ffffff";function ns({text:s,active:e=!0}){let[t,n]=(0,ts.useState)(0),r=4;if(Ct(()=>{n(a=>(a+1)%(s.length+r*2))},e?80:null),!e)return(0,Mn.jsx)(f,{color:es,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=Oi:c<=r?d=Di:d=es,(0,Mn.jsx)(f,{color:d,children:a},l)});return(0,Mn.jsx)(f,{children:o})}var Me=N(Q(),1),ji={starting:h.cyan,running:h.purple,passed:h.green,failed:h.red,cancelled:h.dimmed,timed_out:h.yellow};function Hn({currentStep:s,maxSteps:e,elapsed:t,status:n}){let{stdout:r}=Et(),o=r?.columns??80,a=ji[n]??h.purple,l=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`;return(0,Me.jsxs)(y,{flexDirection:"column",marginTop:1,children:[(0,Me.jsx)(f,{color:h.muted,children:"\u2500".repeat(Math.min(o,60))}),(0,Me.jsxs)(y,{children:[(0,Me.jsx)(f,{children:" "}),(0,Me.jsx)(f,{color:h.dimmed,children:"Steps "}),(0,Me.jsx)(f,{bold:!0,children:s}),(0,Me.jsxs)(f,{color:h.dimmed,children:["/",e]}),(0,Me.jsx)(f,{children:" "}),(0,Me.jsx)(f,{color:h.dimmed,children:"Elapsed "}),(0,Me.jsx)(f,{bold:!0,children:l}),(0,Me.jsx)(f,{children:" "}),(0,Me.jsx)(f,{color:h.dimmed,children:"Status "}),(0,Me.jsx)(f,{bold:!0,color:a,children:n})]})]})}var $i={click:"\u25CF",type:"\u229E",scroll:"\u2195",navigate:"\u2192",analyze:"\u25CE",assert:"\u25C8","if-else":"\u2442",select:"\u25BC",press_key:"\u21B5",wait:"\u2026",tool_call:"\u26A1"};function rs(s){return $i[s]??"\u25CF"}var Tt=N(Q(),1);function Gr({steps:s,flows:e,cmInitCounts:t,renderStep:n}){return(0,Tt.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,Tt.jsxs)(f,{color:h.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,Tt.jsxs)(y,{flexDirection:"column",marginTop:o>0?1:0,children:[(0,Tt.jsxs)(f,{color:h.purple,children:["Flow ",o+1,": ",e?.[o]??r.objective]}),t&&t[o]!=null&&(0,Tt.jsxs)(f,{color:h.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,Tt.jsx)(f,{color:h.dimmed,children:" \u25CB Waiting..."})]},o))]})}var K=N(Q(),1);function It({step:s,indent:e=2}){let t=s.actionType?rs(s.actionType):null,n=s.status==="running",r=s.status==="passed",o=s.status==="failed",a=s.status==="pending"||s.status==="stopped",{stdout:l}=Et(),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,K.jsxs)(y,{flexDirection:"column",children:[(0,K.jsxs)(y,{marginLeft:e,children:[(0,K.jsx)(y,{width:4,children:(0,K.jsxs)(f,{color:h.muted,children:[String(s.index).padStart(2," ")," "]})}),(0,K.jsx)(y,{width:3,children:n?(0,K.jsx)(Lo,{}):r?(0,K.jsx)(f,{color:h.green,bold:!0,children:"\u2713"}):o?(0,K.jsx)(f,{color:h.red,bold:!0,children:"\u2717"}):(0,K.jsx)(f,{color:h.muted,children:"\u25CB"})}),(0,K.jsx)(y,{flexGrow:1,children:n?(0,K.jsx)(ns,{text:m,active:!0}):o?(0,K.jsx)(f,{color:h.red,children:m}):a?(0,K.jsx)(f,{color:h.dimmed,children:m}):(0,K.jsx)(f,{color:h.greenDim,children:m})}),(r||o)&&t?(0,K.jsx)(y,{width:3,marginLeft:1,children:(0,K.jsx)(f,{color:h.muted,children:t})}):(0,K.jsx)(y,{width:3,marginLeft:1}),(0,K.jsx)(y,{width:7,justifyContent:"flex-end",children:(0,K.jsx)(f,{color:h.dimmed,children:p})})]}),s.children&&s.children.length>0&&(0,K.jsx)(y,{flexDirection:"column",children:s.children.map((x,E)=>(0,K.jsx)(It,{step:x,indent:e+2},`child-${E}`))})]})}function Wn({steps:s,bifurcated:e,flows:t,cmInitCounts:n,maxSteps:r=50,staticSteps:o=!1,onStepCommit:a}){let l=(0,Ie.useRef)(new Set),i=(0,Ie.useRef)(!1),c=(0,Ie.useRef)(new Set),d=(0,Ie.useRef)(!1),m=(0,Ie.useRef)(new Set),g=(0,Ie.useRef)(0);(0,Ie.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??[]]),x=p.some(u=>u.status==="running"),E=p.some(u=>u.status==="failed"),k=p.length===0||p.every(u=>u.status==="pending"),T=p.filter(u=>u.status==="passed"||u.status==="failed").length,O;k?O="starting":x?O="running":E?O="failed":O="passed";let I=(0,Ie.useRef)(null),[j,se]=(0,Ie.useState)(0);(0,Ie.useEffect)(()=>{p.length===0||k?(I.current=null,se(0)):x&&I.current==null&&(I.current=Date.now())},[x,k,p.length]),(0,Ie.useEffect)(()=>{if(!x)return;let u=setInterval(()=>{I.current!=null&&se((Date.now()-I.current)/1e3)},500);return()=>clearInterval(u)},[x]);let te=(0,Ie.useRef)(new Set),[le,fe]=(0,Ie.useState)([]),U=(0,Ie.useRef)(!1);(0,Ie.useEffect)(()=>{if(!o||e)return;let u=[];if(!e&&!U.current&&n&&n[0]!=null&&(U.current=!0,n[0]>0&&u.push({key:"cm_init_0",type:"cm_init",count:n[0]})),e){!te.current.has(-1)&&s.length>0&&(te.current.add(-1),u.push({key:"bif_header",type:"bifurcation_header",flowCount:t?.length??s.length}));for(let b=0;b<s.length;b++){let _=s[b],S=-(b+10);te.current.has(S)||(te.current.add(S),u.push({key:`flow_header_${b}`,type:"flow_header",flowIdx:b,label:t?.[b]??_.objective,cmCount:n?.[b]}));for(let L of _.children??[])(L.status==="passed"||L.status==="failed")&&!te.current.has(L.index)&&(te.current.add(L.index),u.push({key:`step_f${b}_${L.index}`,type:"step",step:{...L}}))}}else for(let b of s)(b.status==="passed"||b.status==="failed")&&!te.current.has(b.index)&&(te.current.add(b.index),u.push({key:`step_${b.index}`,type:"step",step:{...b,children:b.children?[...b.children]:void 0}}));u.length>0&&fe(b=>[...b,...u])},[s,e,t,n,o]),(0,Ie.useEffect)(()=>{if(!a)return;!e&&!d.current&&n&&n[0]!=null&&(d.current=!0,n[0]>0&&a((0,K.jsx)(y,{marginLeft:2,children:(0,K.jsxs)(f,{color:h.dimmed,children:["\u25A0 Generated task with ",n[0]," checkpoints"]})}))),e&&t&&!i.current&&(i.current=!0,a((0,K.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"})));let u=e?s.flatMap((b,_)=>{let S=b.children??[];return!c.current.has(_)&&S.length>0&&(c.current.add(_),a((0,K.jsx)(f,{color:"#b388ff",children:" Flow "+(_+1)+": "+(t?.[_]??"")})),n?.[_]!=null&&n[_]>0&&!m.current.has(_)&&(m.current.add(_),a((0,K.jsx)(y,{marginLeft:2,children:(0,K.jsxs)(f,{color:h.dimmed,children:[" \u25AA Generated task with ",n[_]," checkpoints"]})})))),n?.[_]!=null&&n[_]>0&&c.current.has(_)&&!m.current.has(_)&&(m.current.add(_),a((0,K.jsx)(y,{marginLeft:2,children:(0,K.jsxs)(f,{color:h.dimmed,children:[" \u25AA Generated task with ",n[_]," checkpoints"]})}))),S}):s.flatMap(b=>[b,...b.children??[]]);for(let b of u){let _=`${b.index}-${b.objective}`;l.current.has(_)||(b.status==="passed"||b.status==="failed"||b.status==="stopped")&&(l.current.add(_),a((0,K.jsx)(y,{marginLeft:2,children:(0,K.jsx)(It,{step:b})})))}},[s,a,e,t,n]);let B=[];if(a)if(e)for(let u of s){let _=(u.children??[]).filter(S=>{let L=`${S.index}-${S.objective}`;return!l.current.has(L)});_.length>0&&B.push({...u,children:_})}else for(let u of s){let b=`${u.index}-${u.objective}`;l.current.has(b)||B.push(u)}else if(o){if(!e)for(let u of s)te.current.has(u.index)||B.push(u)}if(!o){let u=a?B:s;return(0,K.jsxs)(y,{flexDirection:"column",children:[e?a?u.length>0?(0,K.jsx)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:u.map((_,S)=>(0,K.jsx)(y,{flexDirection:"column",marginTop:S>0?1:0,children:_.children&&_.children.length>0?_.children.map(L=>(0,K.jsx)(It,{step:L},`f${S}-${L.index}`)):_.status==="pending"&&(0,K.jsx)(f,{color:h.dimmed,children:" \u25CB Waiting..."})},S))}):null:(0,K.jsx)(Gr,{steps:s,flows:t,cmInitCounts:n,renderStep:(_,S)=>(0,K.jsx)(It,{step:_},S)}):(0,K.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[!a&&n&&n[0]!=null&&(0,K.jsxs)(f,{color:h.dimmed,children:["\u25AA Generated task with ",n[0]," checkpoints"]}),u.map(_=>(0,K.jsx)(It,{step:_},_.index))]}),x&&(0,K.jsx)(Hn,{currentStep:T,maxSteps:r,elapsed:j,status:O})]})}return e?(0,K.jsxs)(y,{flexDirection:"column",children:[(0,K.jsx)(Gr,{steps:s,flows:t,cmInitCounts:n,renderStep:(u,b)=>(0,K.jsx)(It,{step:u},b)}),x&&(0,K.jsx)(Hn,{currentStep:T,maxSteps:r,elapsed:j,status:O})]}):(0,K.jsxs)(y,{flexDirection:"column",children:[(0,K.jsx)(Kt,{items:le,children:u=>u.type==="cm_init"?(0,K.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,K.jsxs)(f,{color:h.dimmed,children:["\u25AA Generated task with ",u.count," checkpoints"]})},u.key):u.type==="bifurcation_header"?(0,K.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,K.jsxs)(f,{color:h.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,K.jsxs)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:[(0,K.jsxs)(f,{color:h.purple,children:["Flow ",u.flowIdx+1,": ",u.label]}),u.cmCount!=null&&(0,K.jsxs)(f,{color:h.dimmed,children:[" \u25AA Generated task with ",u.cmCount," checkpoints"]})]},u.key):(0,K.jsx)(y,{marginLeft:2,paddingLeft:1,children:(0,K.jsx)(It,{step:u.step})},u.key)}),B.length>0&&(0,K.jsx)(y,{flexDirection:"column",marginLeft:2,paddingLeft:1,children:B.map(u=>(0,K.jsx)(It,{step:u},u.index))}),x&&(0,K.jsx)(Hn,{currentStep:T,maxSteps:r,elapsed:j,status:O})]})}var Kr=N(je(),1);var Gn=N(Q(),1),os=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Kn({label:s,hasBifurcation:e=!1}){let[t,n]=(0,Kr.useState)(0),[r,o]=(0,Kr.useState)(0);Ct(()=>{n(l=>(l+1)%os.length)},80),Ct(()=>{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:h.primary,children:[os[t]," "]}),(0,Gn.jsxs)(f,{color:h.dim,children:[a,".".repeat(r+1)]})]})}function qn(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 vt=N(je(),1);var He=N(Q(),1);function Li(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 ss({data:s,width:e=60}){let t=Li(s,e);return(0,He.jsx)(y,{flexDirection:"column",borderStyle:"round",borderColor:h.primary,paddingX:2,paddingY:1,children:t.map((n,r)=>{if(n.type==="title")return(0,He.jsx)(f,{color:h.primary,bold:!0,children:n.text},r);if(n.type==="header")return(0,He.jsx)(y,{marginTop:1,children:(0,He.jsx)(f,{color:h.dim,children:n.text})},r);if(n.type==="divider")return(0,He.jsx)(y,{marginTop:1,marginBottom:0,children:(0,He.jsx)(f,{color:h.ambient,children:n.text})},r);if(n.type==="footer")return(0,He.jsx)(y,{marginTop:1,children:(0,He.jsx)(f,{color:h.dim,children:n.text})},r);let o=n.text.match(/^(.+?) (·+) (.+)$/);return o?(0,He.jsxs)(f,{children:[(0,He.jsxs)(f,{color:h.secondary,children:[o[1]," "]}),(0,He.jsxs)(f,{color:h.ambient,children:[o[2]," "]}),(0,He.jsx)(f,{color:n.color??h.base,children:o[3]})]},r):(0,He.jsx)(f,{color:n.color??h.base,children:n.text},r)})})}var Be=N(Q(),1);function qr(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 zr({items:s,onRunSelected:e,initialExpandedPath:t,onDismiss:n,renderLoginWizard:r,renderProfilesView:o,renderChromeProfilePicker:a,renderProjectPicker:l,renderFolderPicker:i,renderWindowSizePicker:c}){let[d,m]=(0,vt.useState)(()=>{let T=t??[],O=qr(s,T),I=0;if(T.length>0){let j=O.findIndex(se=>se.item.id===T[0]);j>=0&&j+1<O.length&&(I=j+1)}return{expandedPath:T,selectedIndex:I,inputValue:"",isEditing:!1,isSelecting:!1,feedback:null,activeView:null,infoData:null}}),g=qr(s,d.expandedPath),p=g[d.selectedIndex]?.item,x=(0,vt.useRef)(null),E=(0,vt.useCallback)(T=>{m(O=>({...O,feedback:T})),x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{m(O=>({...O,feedback:null})),x.current=null},4e3)},[]);(0,vt.useEffect)(()=>()=>{x.current&&clearTimeout(x.current)},[]);let k=(0,vt.useCallback)(()=>{m(T=>({...T,activeView:null,infoData:null}))},[]);return $e((T,O)=>{if(d.activeView==="infoView"){O.escape&&k();return}if(!(d.activeView==="loginWizard"||d.activeView==="profilesView"||d.activeView==="chromeProfilePicker"||d.activeView==="projectPicker"||d.activeView==="folderPicker"||d.activeView==="windowSizePicker")){if(d.isEditing){if(O.escape){m(I=>({...I,isEditing:!1,inputValue:""}));return}if(O.return){let I=d.inputValue.trim();if(p?.onValue&&I){let j=p.currentValue;p.onValue(I),E(j?`${p.label}: ${j} \u2192 ${I}`:`${p.label}: ${I}`)}m(j=>({...j,isEditing:!1,inputValue:""}));return}if(O.backspace||O.delete){m(I=>({...I,inputValue:I.inputValue.slice(0,-1)}));return}T&&!O.ctrl&&!O.meta&&m(I=>({...I,inputValue:I.inputValue+T}));return}if(d.isSelecting&&p?.options){let I=p.options;if(O.escape){m(j=>({...j,isSelecting:!1}));return}if(O.upArrow){m(j=>({...j,inputValue:String(Math.max(0,Number(j.inputValue||"0")-1))}));return}if(O.downArrow){m(j=>({...j,inputValue:String(Math.min(I.length-1,Number(j.inputValue||"0")+1))}));return}if(O.return){let j=Number(d.inputValue||"0"),se=I[j];if(se&&p.onValue){let te=p.currentValue;p.onValue(se.value),E(te?`${p.label}: ${te} \u2192 ${se.label}`:`${p.label}: ${se.label}`)}m(te=>({...te,isSelecting:!1,inputValue:""}));return}return}if(O.upArrow){m(I=>({...I,selectedIndex:Math.max(0,I.selectedIndex-1)}));return}if(O.downArrow){m(I=>({...I,selectedIndex:Math.min(g.length-1,I.selectedIndex+1)}));return}if(O.escape){if(d.expandedPath.length===0){n?.();return}m(I=>{let j=I.expandedPath.slice(0,-1),se=qr(s,j),te=I.expandedPath[I.expandedPath.length-1],le=se.findIndex(fe=>fe.item.id===te);return{...I,expandedPath:j,selectedIndex:le>=0?le:0}});return}if(O.return&&p){if(p.id==="run-start"){e();return}if(p.type==="submenu"){let I=g[d.selectedIndex]?.depth??0;m(j=>({...j,expandedPath:[...j.expandedPath.slice(0,I),p.id],selectedIndex:j.selectedIndex+1}));return}if(p.onInfo){let I=p.onInfo();m(j=>({...j,activeView:"infoView",infoData:I}));return}if(p.onLoginWizard){p.onLoginWizard(),m(I=>({...I,activeView:"loginWizard"}));return}if(p.onProfilesView){p.onProfilesView(),m(I=>({...I,activeView:"profilesView"}));return}if(p.onChromeProfilePicker){p.onChromeProfilePicker(),m(I=>({...I,activeView:"chromeProfilePicker"}));return}if(p.onProjectPicker){p.onProjectPicker(),m(I=>({...I,activeView:"projectPicker"}));return}if(p.onFolderPicker){p.onFolderPicker(),m(I=>({...I,activeView:"folderPicker"}));return}if(p.onWindowSizePicker){p.onWindowSizePicker(),m(I=>({...I,activeView:"windowSizePicker"}));return}if(p.type==="action"){p.onAction?.(),p.suppressFeedback||E(`${p.label} done`);return}if(p.type==="select"&&p.options){let I=p.options.findIndex(j=>j.value===p.currentValue);m(j=>({...j,isSelecting:!0,inputValue:String(Math.max(0,I))}));return}if(p.type==="text-input"){m(I=>({...I,isEditing:!0,inputValue:p.currentValue??""}));return}}}}),(0,Be.jsx)(y,{flexDirection:"column",paddingX:1,children:d.activeView==="infoView"&&d.infoData?(0,Be.jsx)(ss,{data:d.infoData}):d.activeView==="loginWizard"&&r?r(k):d.activeView==="profilesView"&&o?o(k):d.activeView==="chromeProfilePicker"&&a?a(k):d.activeView==="projectPicker"&&l?l(k):d.activeView==="folderPicker"&&i?i(k):d.activeView==="windowSizePicker"&&c?c(k):(0,Be.jsxs)(Be.Fragment,{children:[g.map(({item:T,depth:O},I)=>{let j=I===d.selectedIndex,se=" ".repeat(O),te=j?"\u276F ":" ",le=T.type==="submenu"?d.expandedPath.includes(T.id)?"\u25BC ":"\u25B6 ":" ",fe=T.currentValue!=null?` [${T.currentValue}]`:"";if(j&&d.isSelecting&&T.options){let U=Number(d.inputValue||"0");return(0,Be.jsxs)(y,{flexDirection:"column",children:[(0,Be.jsxs)(f,{color:h.cyan,children:[se,te,le,T.label]}),T.options.map((B,u)=>(0,Be.jsxs)(f,{color:u===U?h.cyan:void 0,children:[se," ",u===U?"\u276F ":" ",B.label]},B.value))]},T.id)}return j&&d.isEditing?(0,Be.jsxs)(f,{color:h.cyan,children:[se,te,le,T.label,": ",d.inputValue,(0,Be.jsx)(f,{color:h.dimmed,children:"\u2588"})]},T.id):(0,Be.jsxs)(f,{color:j?h.cyan:void 0,dimColor:!j&&O>0,children:[se,te,le,T.label,(0,Be.jsx)(f,{dimColor:!0,children:fe})]},T.id)}),d.feedback&&(0,Be.jsx)(y,{marginTop:1,children:(0,Be.jsxs)(f,{color:h.green,children:["\u2713 ",d.feedback]})})]})})}var gn=N(je(),1);var Le=N(Q(),1),Jr=800,Xr=3840,Yr=600,Qr=2160;function is(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<Jr)return`Min ${Jr}`;if(t>Xr)return`Max ${Xr}`}else{if(t<Yr)return`Min ${Yr}`;if(t>Qr)return`Max ${Qr}`}return null}function Zr({currentWidth:s,currentHeight:e,onSelect:t,onCancel:n}){let[r,o]=(0,gn.useState)("width"),[a,l]=(0,gn.useState)(String(s)),[i,c]=(0,gn.useState)(String(e)),[d,m]=(0,gn.useState)(null);$e((p,x)=>{if(x.escape){n();return}if(x.tab||x.rightArrow||x.leftArrow){o(E=>E==="width"?"height":"width"),m(null);return}if(x.return){let E=is("width",a);if(E){o("width"),m(`Width: ${E}`);return}let k=is("height",i);if(k){o("height"),m(`Height: ${k}`);return}t(Number(a),Number(i));return}if(x.backspace||x.delete){r==="width"?l(E=>E.slice(0,-1)):c(E=>E.slice(0,-1)),m(null);return}p&&/^\d$/.test(p)&&(r==="width"?l(E=>E+p):c(E=>E+p),m(null))});let g=(p,x,E)=>{let k=r===E,T=k?h.primary:h.secondary;return(0,Le.jsxs)(y,{flexDirection:"column",children:[(0,Le.jsxs)(f,{color:h.dim,children:[" ",p]}),(0,Le.jsx)(y,{borderStyle:"round",borderColor:T,paddingX:1,width:10,children:(0,Le.jsxs)(f,{color:k?h.base:h.dim,children:[x||" ",k?(0,Le.jsx)(f,{color:h.dimmed,children:"\u2588"}):""]})}),(0,Le.jsxs)(f,{color:h.dim,dimColor:!0,children:[" ",E==="width"?`${Jr}\u2013${Xr}`:`${Yr}\u2013${Qr}`]})]})};return(0,Le.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,Le.jsx)(f,{color:h.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:h.dim,children:"x"})}),g("Height",i,"height")]}),d&&(0,Le.jsx)(y,{marginTop:1,children:(0,Le.jsx)(f,{color:h.red,children:d})}),(0,Le.jsx)(y,{marginTop:1,children:(0,Le.jsx)(f,{color:h.dim,children:"Tab/arrows to switch Enter to save Esc to cancel"})})]})}import{randomUUID as Vi}from"crypto";import{mkdirSync as Bi,writeFileSync as as,appendFileSync as Fi,existsSync as ls}from"fs";import{join as hn}from"path";var Ui=hn(Ee,"sessions"),_t=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=Vi(),this.sessionDir=hn(Ui,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{Bi(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"};as(hn(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
|
|
26
|
+
`)}catch{}this._log(`SESSION START session_id=${this.sessionId}`),this._log(`CONFIG model=${e.model} env=${e.environment} profile=${e.profile}`),this._earlyLogBuffer.push({level:"info",event:"SESSION_START",message:"Session started",context:{session_id:this.sessionId}},{level:"info",event:"CONFIG",message:"Session config",context:{model:e.model,environment:e.environment,profile:e.profile}})}}setRemoteLogger(e){this._remoteLogger=e;for(let t of this._earlyLogBuffer)e.log(t.level,t.event,t.message,t.context);this._earlyLogBuffer=[]}get hasRemoteLogger(){return this._remoteLogger!==null}setAuteurVariables(e){Object.assign(this._auteurVariables,e)}get auteurVariables(){return this._auteurVariables}setScreenshotSas(e){this._screenshotSas=e}get screenshotSas(){return this._screenshotSas}get screenshotBaseUrl(){return this._screenshotSas?`${this._screenshotSas.base_url}/${this._screenshotSas.container}`:""}get startedAt(){return this._startedAt||new Date().toISOString()}log(e,t,n,r){if(t===void 0){this._log(e);let l=e.indexOf(" "),i=l>0?e.slice(0,l):e,c=l>0?e.slice(l+1):"",d=/fail|error/i.test(e)?"error":"info";this._remoteLogger?.log(d,i,c||e);return}let o=e,a=n;this._log(`${t} ${a}`),this._remoteLogger?.log(o,t,a,r)}logStep(e,t,n){this._log(`${e} ${t}`);let r=this._nextIndex>0?this._nextIndex-1:0;this._remoteLogger?.logStep(r,e,t,n)}logCommand(e){this._log(`COMMAND ${e}`)}logRunStart(e,t,n){this._log(`RUN ${e} START objective="${t.slice(0,100)}" url=${n}`),this._remoteLogger?.setRunIndex(e),this._remoteLogger?.log("info","RUN_START",`Run ${e} started`,{run_index:e,objective:t,url:n})}logRunEnd(e,t,n,r){let o=(n??0).toFixed(1),a=(r??"").slice(0,100);this._log(`RUN ${e} END status=${t} duration=${o}s summary="${a}"`),this._remoteLogger?.log("info","RUN_END",`Run ${e} ended`,{run_index:e,status:t,duration:n??0,summary:r??""}),t!=="failed"&&t!=="error"&&this._remoteLogger?.discardSteps(e)}escalateRun(e){this._remoteLogger?.escalate(e)}logChromeLaunch(e,t){this._log(`CHROME LAUNCH port=${e} endpoint=${t}`),this._remoteLogger?.log("info","CHROME_LAUNCH","Chrome launched",{port:e,cdp_endpoint:t})}async finish(e="complete"){this._log(`SESSION END status=${e} total_runs=${this.runs.length}`),this._remoteLogger?.log("info","SESSION_END","Session ended",{status:e,total_runs:this.runs.length}),await this._remoteLogger?.shutdown();let t={session_id:this.sessionId,started_at:this._startedAt,ended_at:new Date().toISOString(),model:this._model,environment:this._environment,profile:this._profile,status:e,total_runs:this.runs.length,test_id:this._testId,testcase_id:this._testcaseId,commit_id:this.sessionId,project_id:this._projectId,upload_status:this._uploadStatus,upload_attempts:this._uploadAttempts,last_upload_attempt:this._uploadAttempts>0?new Date().toISOString():null,upload_error:this._uploadError,runs:this.runs.map(n=>({index:n.index,objective:n.objective,status:n.status,summary:n.summary,run_dir:n.run_dir}))};ls(this.sessionDir)&&as(hn(this.sessionDir,"session.json"),JSON.stringify(t,null,2)+`
|
|
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||!ls(this.sessionDir)))try{let t=new Date().toISOString().slice(0,19).replace("T"," "),n=hn(this.sessionDir,"tui.log");Fi(n,`[${t}] ${e}
|
|
28
|
+
`)}catch{}}};import{dirname as Ni,join as Mi}from"path";function vn(s,e,t){let n=s.total_runs??1,r=s.run_dir,o,a;if(n>1&&r){let l=Ni(r);o=Array.from({length:n},(i,c)=>Mi(l,String(e+c))),t&&t.length===n&&(a=t)}return{allRunDirs:o,flowObjectives:a}}function _n(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 Hi,writeFileSync as cs,mkdirSync as us}from"fs";import{dirname as ds}from"path";var zn={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:ct,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}},Ze=class{constructor(e=$o){this.path=e}load(){try{let e=Hi(this.path,"utf-8"),t=JSON.parse(e);return{...zn,...t,code_export:{...zn.code_export,...t.code_export??{}}}}catch{return{...zn,code_export:{...zn.code_export}}}}set(e,t){try{let n=this.load();n[e]=t,us(ds(this.path),{recursive:!0}),cs(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};us(ds(this.path),{recursive:!0}),cs(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=N(je(),1);async function Jn(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 Jt(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 Xn(s,e,t){let n=s.loadCredentials(e,t),r=s.loadClient(e,t);if(n&&r){let a=new Jt(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 fs(){let[s]=(0,Fe.useState)(()=>new Ne),[e,t]=(0,Fe.useState)(()=>{let x=s.resolveAuth();if(!x)return!1;if(x.method==="basic")return!0;let{credentials:E}=s.getActiveCredentials();return E?E.expires_at>Date.now()/1e3:!1}),n=(0,Fe.useRef)(null),r=(0,Fe.useRef)(null),o=(0,Fe.useCallback)(()=>{let x=s.resolveAuth();return x?{method:x.method,profile:x.profile,env:x.env}:null},[s]),a=(0,Fe.useCallback)(async()=>{let{credentials:x,profile:E,env:k}=s.getActiveCredentials();if(!x||!E||!k)return null;let T=x.expires_at,O=Date.now()/1e3;if(T-O<300){if(r.current)return r.current;let I=(async()=>{try{let j=await Jn({creds:s,profile:E,env:k,credentials:x});return j?(t(!0),j.accessToken):null}catch{return t(!1),null}finally{r.current=null}})();return r.current=I,I}return t(!0),x.access_token},[s]),l=(0,Fe.useCallback)(()=>{let x=s.resolveAuth();return!x||x.method!=="basic"?null:{username:x.username,access_key:x.access_key}},[s]),i=(0,Fe.useCallback)((x,E)=>{n.current?.revoke();let k=ae(x),T=l(),O=new ut(k.controllerBaseUrl,a,T,E);return n.current=O,O},[l,a]),c=(0,Fe.useCallback)(()=>n.current,[]),d=(0,Fe.useCallback)(()=>{let x=l();if(x)return x;let E=n.current?.cached;return E?{username:E.username,access_key:E.access_key}:null},[l]),m=(0,Fe.useCallback)(async()=>{let x=n.current;return x?x.resolve():null},[]),g=(0,Fe.useCallback)(async(x="default")=>{let E=s.getDefaultEnv();await new mn(x,E,s).login(),s.setActiveProfile(x),t(!0)},[s]),p=(0,Fe.useCallback)(async()=>{let x=s.getActiveProfile();if(!x)return null;let E=s.getDefaultEnv(),k=await Xn(s,x,E);return t(!1),{profile:k.profile,env:k.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=N(je(),1);import{spawn as ms}from"child_process";import{existsSync as Wi}from"fs";import{createConnection as Gi}from"net";import{homedir as xn,platform as eo}from"os";import{join as bn}from"path";var ps={darwin:["/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",bn(xn(),"Applications/Google Chrome.app/Contents/MacOS/Google Chrome"),"/Applications/Google Chrome for Testing.app/Contents/MacOS/Google Chrome for Testing",bn(xn(),"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",bn(xn(),"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",bn(xn(),"AppData\\Local\\Google\\Chrome\\Application\\chrome.exe"),"C:\\chrome-for-testing\\chrome-win64\\chrome.exe",bn(xn(),"AppData\\Local\\chrome-for-testing\\chrome-win64\\chrome.exe")]};function Ki(){let s=eo(),e=ps[s]??ps.linux;for(let t of e)if(Wi(t))return t;return s==="win32"?"chrome.exe":"google-chrome"}function qi(s){let e=eo(),t=[`--remote-debugging-port=${s.port}`,`--user-data-dir=${s.userDataDir}`,`--window-size=${s.width},${s.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"),s.headless&&t.push("--headless=new"),t}function zi(s){return new Promise(e=>{let t=Gi({port:s,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 Ji(){for(let s=Pr;s<=Or;s++)if(!await zi(s))return s;throw new Error(`All CDP ports ${Pr}-${Or} are in use. Close other Chrome instances.`)}async function Xi(s,e=15e3){let t=Date.now(),n=`http://127.0.0.1:${s}/json/version`;for(;Date.now()-t<e;){try{if((await fetch(n)).ok)return`http://127.0.0.1:${s}`}catch{}await new Promise(r=>setTimeout(r,200))}throw new Error(`Chrome CDP not ready after ${e}ms on port ${s}`)}async function Yn(s){let e=eo(),t=await Ji(),n=Ki(),r=qi({port:t,...s});s.startUrl&&r.push(s.startUrl);let o=ms(n,r,{stdio:"ignore",detached:!0,windowsHide:!0});o.unref();let a=await new Promise((l,i)=>{o.on("error",c=>{i(new Error(`Failed to launch Chrome: ${c.message}. Is Chrome installed at ${n}?`))}),o.on("close",c=>{c!==null&&c!==0&&i(new Error(`Chrome exited during startup with code ${c}`))}),Xi(t).then(l,i)});return{process:o,port:t,cdpEndpoint:a,kill(){try{if(o.pid)if(e==="win32")ms("taskkill",["/pid",String(o.pid),"/T","/F"],{stdio:"ignore"});else try{process.kill(-o.pid,"SIGKILL")}catch{o.kill("SIGKILL")}else o.kill("SIGKILL")}catch{}}}}var _s=()=>!!process.env.KANE_DEV_MODE,Pt=[],gs=!1,hs=null,to=null,no=null,Qn=null;function Zn(s){Qn=s}function it(s,e){Pt=Pt.filter(t=>t.name!==s),Pt.push({name:s,fn:e})}function et(s,e){let t=Pt.find(r=>r.name===s);if(!t)return;Pt=Pt.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&&_s()&&process.stderr.write(`[exit-manager] cleanup(${s}): ${e}
|
|
34
|
+
`)}function Y(s,e,t=!1){if(gs){process.exit(hs??s);return}if(gs=!0,hs=s,t&&Qn)try{Qn.log("error","CRASH",e),Qn.shutdownSync()}catch{}let n=[...Pt].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(Pt=[],_s()&&(process.stderr.write(`[exit-manager] shutdown(${s}): ${e}
|
|
36
|
+
`),r.length>0&&process.stderr.write(`[exit-manager] cleaned up: ${r.join(", ")}
|
|
37
|
+
`)),t&&no){try{no()}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(to&&!t){to();return}process.exit(s)}function ro(s){to=s}function oo(s){no=s}var vs=!1;function xs(){vs||(vs=!0,process.on("SIGINT",()=>{Y(130,"Received SIGINT",!0)}),process.on("SIGTERM",()=>{Y(143,"Received SIGTERM",!0)}),process.on("uncaughtException",s=>{Y(1,`Uncaught exception: ${s.message}`,!0)}),process.on("unhandledRejection",s=>{Y(1,`Unhandled rejection: ${String(s)}`,!0)}))}import{mkdtempSync as Yi,rmSync as Qi}from"fs";import{join as Zi}from"path";import{tmpdir as ea}from"os";function bs(){let[s]=(0,xt.useState)(()=>new Ze),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 i=s.load(),c;if(i.chrome_profile_path)c=i.chrome_profile_path.replace("~",process.env.HOME??"~");else{let g=Yi(Zi(ea(),"kane-clean-"));t.current=g,c=g}let d=await Yn({userDataDir:c,width:i.window_size.width,height:i.window_size.height,startUrl:a??i.default_url??void 0});e.current=d;let m=t.current;return it("chrome",()=>{if(d.kill(),m)try{Qi(m,{recursive:!0,force:!0})}catch{}}),d})();n.current=l;try{return await l}finally{n.current=null}},[s]),o=(0,xt.useCallback)(()=>{et("chrome","Chrome killed"),e.current=null,t.current=null},[]);return{ensureChrome:r,killChrome:o}}var Pe=N(je(),1);import{spawn as na,execSync as ra}from"child_process";import{existsSync as er}from"fs";import{resolve as Ue,dirname as oa}from"path";import{fileURLToPath as sa}from"url";import{createInterface as ta}from"readline";async function*ws(s){let e=ta({input:s,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 ys(s){return s==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS"]}}var bt=oa(sa(import.meta.url));function ia(){for(let s of["python3","python"])try{return ra(`${s} --version`,{stdio:"ignore"}),s}catch{}return null}function aa(){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 i=[Ue(bt,"..","node_modules",l,"bin",e),Ue(bt,"..","..","node_modules",l,"bin",e),Ue(bt,"..","..","..","node_modules",l,"bin",e)];for(let c of i)if(er(c))return{cmd:c,args:[]}}let o=[Ue(bt,"bin",e),Ue(bt,"..","bin",e),Ue(bt,"..","..","..","..","v16-runner","dist",e),Ue(bt,"..","..","..","v16-runner","dist",e),Ue(process.cwd(),"v16-runner","dist",e),Ue(process.cwd(),"..","v16-runner","dist",e)];for(let l of o)if(er(l))return{cmd:l,args:[]};let a=[Ue(bt,"..","..","..","..","v16-runner"),Ue(bt,"..","..","..","v16-runner"),Ue(process.cwd(),"v16-runner"),Ue(process.cwd(),"..","v16-runner")];for(let l of a)if(er(Ue(l,"main.py"))){for(let c of[Ue(l,".venv","bin","python"),Ue(l,"..","browser-agent",".venv","bin","python")])if(er(c))return{cmd:c,args:["main.py"],cwd:l};let i=ia();if(i)return{cmd:i,args:["main.py"],cwd:l}}return null}function tr(s,e){let t=aa();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=ae(e?.environment).v16ServerHost,s.username&&s.access_key&&(n.LT_USERNAME=s.username,n.LT_ACCESS_KEY=s.access_key);let r=ys(e?.mode??"testing");Object.assign(n,r.set);for(let g of r.unset)delete n[g];let o=na(t.cmd,t.args,{stdio:["pipe","pipe","pipe"],env:n,cwd:t.cwd});o.stdin.on("error",()=>{}),o.stdin.write(JSON.stringify(s)+`
|
|
41
|
+
`);let a=1e5,l="";o.stderr.on("data",g=>{l+=g.toString(),l.length>a&&(l=l.slice(-a))}),o.on("error",g=>{e?.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:g.message})});let i=null,c=null,d=new Promise(g=>{o.on("close",(p,x)=>{i=p,c=x?String(x):null,e?.log?.("info","RUNNER_EXIT","Runner exited",{code:p,signal:c??"none"}),g({code:p,signal:c})})}),m=ws(o.stdout);return{child:o,events:m,sendUserResponse(g){let p=JSON.stringify({type:"user_response",answer:g});try{o.stdin.write(p+`
|
|
42
|
+
`)}catch{}},sendCancel(g){let p=JSON.stringify({type:"cancel",reason:g});try{o.stdin.write(p+`
|
|
43
|
+
`)}catch{}},cancel(){o.kill("SIGTERM")},get stderr(){return l},get exitCode(){return i},get exitSignal(){return c},exited:d}}function so(s){let e=s.indexOf(": ");return e>0&&e<15?s.slice(e+2):s}function io(s){return s.map(e=>{let t=e.children?io(e.children):e.children;return e.status==="running"?{...e,status:"stopped",phase:void 0,children:t}:t!==e.children?{...e,children:t}:e})}function nr(s,e){let[t,n]=(0,Pe.useState)(!1),[r,o]=(0,Pe.useState)([]),[a,l]=(0,Pe.useState)(null),[i,c]=(0,Pe.useState)(null),[d,m]=(0,Pe.useState)(null),[g,p]=(0,Pe.useState)(null),[x,E]=(0,Pe.useState)([]),k=(0,Pe.useRef)(null),T=(0,Pe.useRef)(null),O=(0,Pe.useRef)(0),I=(0,Pe.useRef)(!1),j=(0,Pe.useCallback)((le,fe)=>{k.current&&(k.current.cancel(),k.current=null),o([]),l(null),c(null),m(null),p(null),E([]),n(!0),T.current=null,O.current=0;let U;try{U=tr(le,fe)}catch(B){m(B instanceof Error?B.message:String(B)),n(!1);return}k.current=U,it("runner",()=>U.cancel()),(async()=>{I.current=!1;for await(let u of U.events){if(I.current)break;switch(u.type){case"run_start":if(T.current&&!T.current.isSingleFlow){let b=O.current;O.current++,o(_=>_.map((S,L)=>L===b?{...S,status:"running"}:S.status==="running"&&!S.children?.some(z=>z.status==="running")?{...S,status:S.children?.some(z=>z.status==="failed")?"failed":"passed"}:S))}break;case"bifurcation":{let b=u.flows??[],_=u.count??b.length,S={flows:b,isSingleFlow:u.is_single_flow??_<=1};p(S),T.current=S,O.current=0,o(b.map((L,z)=>({index:z+1,objective:L??`Flow ${z+1}`,status:"pending"})));break}case"step_start":{e?.("STEP_START",`Step ${u.index} started`,{index:u.index,objective:u.objective,child_id:u.child_id});let b=u.index,_=u.objective??`Step ${b}`,S=u.child_id,L=T.current&&!T.current.isSingleFlow;if(S)o(z=>{let J=z.findIndex(Re=>Re.status==="running"||Re.children?.some(nt=>nt.status==="running"));if(J===-1)return z;let oe=[...z],X={...oe[J]},he=[...X.children??[]].map(Re=>Re.status==="running"?{...Re,status:"stopped",phase:void 0}:Re);return he.push({index:b,objective:_,status:"running"}),X.children=he,oe[J]=X,oe});else if(L){let z=Math.max(0,O.current-1);o(J=>{let oe=[...J];if(z>=oe.length)return J;let X={...oe[z]},he=[...X.children??[]].map(Re=>Re.status==="running"?{...Re,status:"stopped",phase:void 0}:Re);return he.push({index:b,objective:_,status:"running"}),X.children=he,X.status="running",oe[z]=X,oe})}else o(z=>{let J=io(z);return J.some(X=>X.index===b)?J.map(X=>X.index===b?{...X,status:"running",objective:_}:X):[...J,{index:b,objective:_,status:"running"}]});break}case"step_event":{e?.("STEP_EVENT",`Step ${u.index} ${u.event}`,{index:u.index,phase:u.event,action_type:u.action_type,detail:u.detail,child_id:u.child_id});let b=u.child_id,_=T.current&&!T.current.isSingleFlow;if(u.event==="cm_init"&&u.checkpoint_count!=null){E(S=>[...S,u.checkpoint_count]);break}if(b)o(S=>S.map(L=>{if(!L.children)return L;let z=L.children.map(J=>{if(J.index!==u.index)return J;let oe={phase:u.event};return u.event==="reasoning"&&u.detail&&u.detail!=="reasoning"&&(oe.objective=u.detail),u.action_type&&(oe.actionType=u.action_type),{...J,...oe}});return{...L,children:z}}));else if(_){let S=Math.max(0,O.current-1);o(L=>{let z=[...L];if(S>=z.length)return L;let J={...z[S]},oe=[...J.children??[]];if(!oe.some(we=>we.index===u.index))oe.push({index:u.index,objective:`Step ${u.index}`,status:"running",phase:u.event,actionType:u.action_type});else for(let we=0;we<oe.length;we++){if(oe[we].index!==u.index)continue;let he={phase:u.event};u.event==="reasoning"&&u.detail&&u.detail!=="reasoning"&&(he.objective=u.detail),u.action_type&&(he.actionType=u.action_type),oe[we]={...oe[we],...he}}return J.children=oe,z[S]=J,z})}else o(S=>S.some(z=>z.index===u.index)?S.map(z=>{if(z.index!==u.index)return z;let J={phase:u.event};return u.event==="reasoning"&&u.detail&&u.detail!=="reasoning"&&(J.objective=u.detail),u.action_type&&(J.actionType=u.action_type),{...z,...J}}):[...io(S),{index:u.index,objective:`Step ${u.index}`,status:"running",phase:u.event,actionType:u.action_type}]);break}case"step_end":{e?.("STEP_END",`Step ${u.index} ${u.status}`,{index:u.index,status:u.status,duration:u.duration,summary:u.summary,child_id:u.child_id});let b=u.child_id,_=T.current&&!T.current.isSingleFlow;if(b)o(S=>S.map(L=>{if(!L.children)return L;let z=L.children.map(J=>J.index===u.index?{...J,status:u.status,duration:u.duration,phase:void 0,objective:J.objective.startsWith("Step ")?so(u.summary||J.objective):J.objective}:J);return{...L,children:z}}));else if(_){let S=Math.max(0,O.current-1);o(L=>{let z=[...L];if(S>=z.length)return L;let J={...z[S]},oe=(J.children??[]).map(X=>X.index===u.index?{...X,status:u.status,duration:u.duration,phase:void 0,objective:X.objective.startsWith("Step ")?so(u.summary||X.objective):X.objective}:X);return J.children=oe,z[S]=J,z})}else o(S=>S.map(L=>L.index===u.index?{...L,status:u.status,duration:u.duration,phase:void 0,objective:L.objective.startsWith("Step ")?so(u.summary||L.objective):L.objective}:L));if(!u.child_id){let L=T.current&&!T.current.isSingleFlow?Math.max(0,O.current-1):0;s?.(u.index,L)}break}case"child_agent_start":{let b=u.objective??"";o(_=>_.map(S=>S.status==="running"?{...S,objective:b,phase:`child: ${b.slice(0,50)}`}:S));break}case"child_agent_end":o(b=>b.map(_=>_.phase?.startsWith("child:")?{..._,phase:`child ${u.success?"done":"failed"}`}:_));break;case"ask_user":l(u.question??"");break;case"run_end":o(b=>b.map(_=>_.status==="running"?{..._,status:u.status,phase:void 0}:_)),c(u),n(!1),et("runner","Run completed"),k.current=null;break;case"error":m(u.message??"Runner error"),o(b=>b.map(_=>_.status==="running"?{..._,status:"failed",phase:void 0}:_)),n(!1),et("runner","Runner error"),k.current=null;break}}let B=k.current;if(B){let{code:u,signal:b}=await B.exited,_=B.stderr,S=[];u!==null&&u!==0&&S.push(`Runner exited with code ${u}`),b&&S.push(`Runner killed by signal ${b}`),_&&S.push(_),S.length>0&&m(S.join(`
|
|
44
|
+
`))}n(!1),et("runner","Event stream ended"),k.current=null})().catch(B=>{let u=k.current,b=[`Runner event loop error: ${B}`];u&&(u.exitCode!==null&&u.exitCode!==0&&b.push(`Exit code: ${u.exitCode}`),u.exitSignal&&b.push(`Signal: ${u.exitSignal}`),u.stderr&&b.push(u.stderr)),m(b.join(`
|
|
45
|
+
`)),n(!1),et("runner","Event loop error"),k.current=null})},[s,e]),se=(0,Pe.useCallback)(le=>{k.current?.sendUserResponse(le),l(null)},[]),te=(0,Pe.useCallback)(()=>{let le=k.current;le&&(le.sendCancel("user"),n(!1),l(null),setTimeout(()=>{k.current===le&&(et("runner","User cancelled run"),k.current=null)},5e3))},[]);return(0,Pe.useEffect)(()=>()=>{I.current=!0,et("runner","Component unmounted"),k.current=null},[]),{isRunning:t,steps:r,askingUser:a,lastRunEnd:i,runError:d,bifurcationInfo:g,cmInitCounts:x,startRun:j,sendAnswer:se,cancelRun:te}}function wn(s){let e=s.flatMap(o=>[o,...o.children??[]]),t=e.filter(o=>o.status==="passed").length,n=e.filter(o=>o.status==="failed").length,r=e.filter(o=>o.status==="passed"||o.status==="failed").length;return{passed:t,failed:n,total:r}}async function Xt(s,e,t,n){let r=s.loadBasicAuth(e,t),o=s.loadCredentials(e,t);if(!r&&!o)return n("info","STARTUP_GATE_NO_CREDS","Profile has no credentials",{profile:e,env:t}),{status:"needs_login",profile:e,env:t};let a=ae(t),l=async()=>s.loadCredentials(e,t)?.access_token??null,i=new ut(a.controllerBaseUrl,l,r,n);n("info","STARTUP_GATE_VALIDATE","Validating credentials with controller",{profile:e,env:t,method:r?"basic":"oauth"});let c=await i.resolve(!0);if(c)return n("info","STARTUP_GATE_VALID","Credentials validated",{profile:e,env:t,username:c.username,org_id:c.org_id}),{status:"authenticated",result:{profile:e,env:t,credentials:o,basicAuth:r,tmsCreds:c,resolver:i}};if(!r&&o){let d=o.refresh_token,g=s.loadClient(e,t)?.client_id;if(d&&g){n("info","STARTUP_GATE_REFRESH","Attempting token refresh",{profile:e,env:t});try{let x=await new Jt(t).refreshToken(d,g);if(x.access_token){s.saveCredentials(e,t,{...o,...x,expires_at:Date.now()/1e3+(x.expires_in??3600)});let k=await i.resolve(!0);if(k)return n("info","STARTUP_GATE_REFRESH_OK","Token refreshed and validated",{profile:e,env:t,username:k.username}),{status:"authenticated",result:{profile:e,env:t,credentials:{...o,...x},basicAuth:null,tmsCreds:k,resolver:i}}}n("warn","STARTUP_GATE_REFRESH_INVALID","Refreshed token still invalid",{profile:e,env:t})}catch(p){n("warn","STARTUP_GATE_REFRESH_FAILED","Token refresh failed",{profile:e,env:t,error:p instanceof Error?p.message:String(p)})}}else n("info","STARTUP_GATE_NO_REFRESH","No refresh_token or client_id \u2014 login required",{profile:e,env:t})}return n("info","STARTUP_GATE_INVALID","Credentials invalid \u2014 login required",{profile:e,env:t}),{status:"needs_login",profile:e,env:t}}async function rr(s,e){let t=s.listProfiles();if(e("info","STARTUP_GATE_START","Auth startup gate",{profile_count:t.length}),t.length===0)return e("info","STARTUP_GATE_NONE","No profiles found \u2014 login required"),{status:"needs_login"};if(t.length>1){let o=s.getActiveProfile(),a=s.getDefaultEnv();if(o&&t.some(i=>i.profile===o&&i.env===a)){e("info","STARTUP_GATE_TRY_ACTIVE","Multiple profiles \u2014 trying active first",{activeProfile:o,activeEnv:a});let i=await Xt(s,o,a,e);if(i.status==="authenticated")return i;e("info","STARTUP_GATE_ACTIVE_FAILED","Active profile invalid \u2014 showing picker",{activeProfile:o,activeEnv:a})}return e("info","STARTUP_GATE_MULTI","Multiple profiles \u2014 picker required",{profiles:t.map(l=>`${l.profile}/${l.env}`)}),{status:"needs_pick",profiles:t}}let{profile:n,env:r}=t[0];return s.setActiveProfile(n),s.setDefaultEnv(r),Xt(s,n,r,e)}var or=[{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 Ss(s){let e=s.trim();if(!e.startsWith("/"))return null;let n=e.slice(1).match(/(?:[^\s"]+|"[^"]*")+/g)??[];if(n.length===0)return null;let r=n[0],o={},a=1;for(;a<n.length;){let l=n[a];if(l.startsWith("--")){let i=l.slice(2),c=n[a+1];c&&!c.startsWith("--")?(o[i]=c.replace(/^"|"$/g,""),a+=2):(o[i]=void 0,a++)}else{let i=l.replace(/^"|"$/g,"");r==="run"?o.objective=i:r==="config"?o.action?o.value=i:o.action=i:r==="profiles"?o.action=i:r==="summary"&&(o.index=i),a++}}return{command:r,args:o,raw:e}}var uu=[{name:"Testing",commands:or.filter(s=>["run","cancel"].includes(s.name))},{name:"Auth",commands:or.filter(s=>["login","logout","whoami","balance","profiles"].includes(s.name))},{name:"Settings",commands:or.filter(s=>["config"].includes(s.name))},{name:"Session",commands:or.filter(s=>["new","summary","help","clear","exit"].includes(s.name))}];var Es=[{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:"update",description:"Update kane-cli"},{name:"cancel",description:"Abort current run"},{name:"exit",description:"Quit kane-cli"}];var Ge=N(Q(),1),la=64;function ca(s){return s.split(`
|
|
46
|
+
`).map(e=>e.replace(/^[-–•]\s*/,"").trim()).filter(e=>e.length>0)}function Yt({status:s,summary:e,duration:t,steps:n,stepsPassed:r,stepsFailed:o,reason:a,creditsConsumed:l}){let i=s==="passed",c=i?h.green:h.red,d=i?"\u2713":"\u2717",m=s.toUpperCase(),g=r??(i?n:Math.max(0,n-1)),p=o??(i?0:1),x=p>0?`${n} steps (${g} passed, ${p} failed)`:`${n} steps`,E=t<60?`${t.toFixed(1)}s`:`${Math.floor(t/60)}m ${Math.round(t%60)}s`,k=ca(e);return(0,Ge.jsx)(y,{flexDirection:"column",marginTop:1,children:(0,Ge.jsxs)(y,{borderStyle:"round",borderColor:c,flexDirection:"column",paddingX:2,paddingY:1,width:la+6,children:[(0,Ge.jsxs)(y,{children:[(0,Ge.jsxs)(f,{bold:!0,color:c,children:[d," ",m]}),(0,Ge.jsxs)(f,{color:h.dimmed,children:[" ","\xB7 ",x," \xB7 ",E,typeof l=="number"&&l>0?` \xB7 ${parseFloat(l.toFixed(4))} credits`:""]})]}),k.length>0&&(0,Ge.jsx)(y,{flexDirection:"column",marginTop:1,marginLeft:1,children:k.map((T,O)=>(0,Ge.jsxs)(y,{marginBottom:O<k.length-1?1:0,children:[(0,Ge.jsx)(f,{color:h.primary,children:"\u25CF "}),(0,Ge.jsx)(y,{flexShrink:1,children:(0,Ge.jsx)(f,{wrap:"wrap",children:T})})]},O))}),a&&!i&&(0,Ge.jsx)(y,{marginTop:1,children:(0,Ge.jsxs)(f,{color:h.red,wrap:"wrap",children:["Reason: ",a]})})]})})}var Ot=N(Q(),1);function ao({flows:s,filterIndex:e}){let t=e!==void 0?s.filter(n=>n.index===e):s;return t.length===0?null:(0,Ot.jsx)(y,{flexDirection:"column",children:t.map(n=>(0,Ot.jsxs)(y,{flexDirection:"column",marginTop:1,children:[(0,Ot.jsxs)(y,{marginLeft:1,children:[(0,Ot.jsx)(f,{color:"#b388ff",bold:!0,children:"Flow "+n.index+": "}),(0,Ot.jsx)(f,{color:"#b388ff",children:n.objective})]}),(0,Ot.jsx)(Yt,{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 ua=null;function Cs(s){ua=s}import{readFileSync as da,existsSync as fa}from"fs";function Qt(s){if(!fa(s))return null;try{return da(s,"utf-8").trim()||null}catch{return null}}import{join as at}from"path";var sr=N(Q(),1);function Rs({status:s,steps:e,duration:t,creditsConsumed:n,reason:r}){let o=s==="passed",a=o?h.green:h.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,sr.jsxs)(y,{children:[(0,sr.jsxs)(f,{bold:!0,color:a,children:[l," ",i]}),(0,sr.jsxs)(f,{color:h.dimmed,children:[" ","\xB7 ",e," steps \xB7 ",c,d,m]})]})}var ks=N(Q(),1);function As(){return(0,ks.jsx)(f,{color:h.dimmed,children:"Continue below \xB7 /new fresh session \xB7 /summary view details \xB7 Ctrl+C exit"})}function Ts(s,e,t){return`${s}/projects/${e}/test-cases/${t}`}function Ft(s,e,t,n){return`${Ts(s,e,t)}/dashboard/share/${n}?type=summary&agentView=true&fqdn=summary-page`}function yn(s,e,t){return`${Ts(s,e,t)}/dashboard?type=summary&agentView=true&fqdn=summary-page`}import{readFileSync as Is,readdirSync as ma,existsSync as Sn}from"fs";import{join as Zt}from"path";function ir(s,e,t,n,r){try{let o=Zt(s,"runs",String(e),"run-test");if(!Sn(o)){r("warn","SCREENSHOT_SKIP","Runs dir not found",{step_index:t,reason:"runsDir_not_found",path:o});return}let a=o;if(Sn(Zt(o,"screenshots")))a=o;else{let x=ma(o).filter(E=>Sn(Zt(o,E,"screenshots")));if(x.length===0){r("warn","SCREENSHOT_SKIP","No screenshots dir found",{step_index:t,reason:"no_screenshots_dir"});return}a=Zt(o,x[0])}let l=Zt(a,"screenshots",`step_${String(t).padStart(3,"0")}.png`);if(!Sn(l)){r("warn","SCREENSHOT_SKIP","Screenshot not found",{step_index:t,reason:"screenshot_not_found",path:l});return}let i=Zt(a,"actions.ndjson");if(!Sn(i)){r("warn","SCREENSHOT_SKIP","NDJSON not found",{step_index:t,reason:"ndjson_not_found"});return}let c=Is(i,"utf-8").trim().split(`
|
|
47
|
+
`),d=c[c.length-1];if(!d){r("warn","SCREENSHOT_SKIP","NDJSON empty",{step_index:t,reason:"ndjson_empty"});return}let g=JSON.parse(d).action_id;if(!g){r("warn","SCREENSHOT_SKIP","No action_id in NDJSON",{step_index:t,reason:"no_action_id"});return}let p=Is(l);n.enqueue(g,p),r("info","SCREENSHOT_ENQUEUED","Screenshot enqueued",{step_index:t,action_id:g,size:p.length})}catch(o){r("error","SCREENSHOT_DISPATCH_ERROR","Screenshot dispatch error",{step_index:t,error:o instanceof Error?o.message:String(o)})}}import pa from"sharp";var en=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 pa(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",o=`test_screenshots/untagged_screenshot/${e.operationId}.${r}`,a=`${this.sas.base_url}/${this.sas.container}/${o}?${this.sas.sas_token}`;for(let l=0;l<=this.maxRetries;l++)try{let i=await fetch(a,{method:"PUT",headers:{"Content-Type":n,"x-ms-blob-type":"BlockBlob"},body:t});if(i.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:i.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 ga,readFileSync as Os,existsSync as Ds}from"fs";import{join as ha}from"path";function Ps(s,e){if(!Ds(s))return{};let t={},n;try{n=ga(s).filter(r=>r.endsWith(".json")).sort()}catch{return{}}for(let r of n)try{let o=Os(ha(s,r),"utf-8"),a=JSON.parse(o);if(a&&typeof a=="object"){for(let[l,i]of Object.entries(a))if(i&&typeof i=="object"&&"value"in i){let c=i;t[l]={value:c.value,secret:c.secret??!1,syntax:c.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}
|
|
48
|
+
`)}return t}function js(s){if(!Ds(s))throw new Error(`Variables file not found: ${s}`);let e=Os(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 $s(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 Ls(s,e,t){let n=Ps(s,t),r=Ps(e,t);return{...n,...r}}function Vs(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 ar=class{constructor(e){this.baseUrl=e}async pushSecret(e){let t=Vo(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 lr=class extends Bo{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 cr(s){let e=Ls(s.globalDir,s.localDir,s.onLoadError),t=s.file?js(s.file):{},n=s.inline?$s(s.inline):{},r={...e,...t,...n},o=Object.keys(r).length>0,{variables:a,objective:l}=o?Vs(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 ur(s){if(s.localMode)return{};let e=ae(s.env);if(s.variables.secretEntries.length>0){let n=new ar(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 lr(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 dr(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 En(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 x of Object.keys(t.auteurVariables))x.startsWith("secrets.user.")&&c.push({key_name:x.replace("secrets.user.",""),scope:"user"});let m=t.getContext().prior_runs.map(x=>x.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 Bs=["python"];function va(s){if(s!==void 0){if(!Bs.includes(s))throw new Error(`--code-language must be one of: ${Bs.join(", ")} (got "${s}")`);return s}}function Cn(s,e){let t=va(s.codeLanguage);return{enabled:s.codeExport??e.enabled,language:t??e.language,skipValidation:s.skipCodeValidation??e.skip_validation}}async function fr(s){try{let t=await new ot(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 mr(s){await new ot(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 P=N(Q(),1);function Fs({localMode:s=!1,codeExport:e,codeLanguage:t,skipCodeValidation:n,updatePromise:r}={}){qt();let o=(0,$.useRef)(new _t),[a,l]=(0,$.useState)(0),i=o.current,[c]=(0,$.useState)(()=>new Ze),d=(0,$.useRef)(0),m=(0,$.useCallback)(()=>`msg-${++d.current}`,[]),[g,p]=(0,$.useState)(!1),[x,E]=(0,$.useState)(null),[k,T]=(0,$.useState)(!1),[O,I]=(0,$.useState)(null),[j,se]=(0,$.useState)(!1),[te,le]=(0,$.useState)(0),[fe,U]=(0,$.useState)(!1),[B,u]=(0,$.useState)(null),[b,_]=(0,$.useState)(null),S=(0,$.useRef)(null),[L,z]=(0,$.useState)(null),[J,oe]=(0,$.useState)(Ln()),[X,we]=(0,$.useState)(null),[he,Re]=(0,$.useState)([]),[nt,kn]=(0,$.useState)(!1),[rn,Ht]=(0,$.useState)(!1),F=(0,$.useRef)(null),ne=(0,$.useRef)(0),re=(0,$.useRef)(""),pe=(0,$.useRef)(null),We=(0,$.useRef)(null),qe=(0,$.useRef)({}),Ae=(0,$.useRef)(0),[ye,ue]=(0,$.useState)([]),ce=(0,$.useCallback)(w=>{let R=`s-${++Ae.current}`;ue(v=>[...v,{id:R,content:w}])},[]),[De,ke]=(0,$.useState)("booting"),[Wt,dt]=(0,$.useState)([]),[xr,on]=(0,$.useState)(!1),[Tn,br]=(0,$.useState)(!1),[In,fi]=(0,$.useState)("chat"),[sn,an]=(0,$.useState)(null),[Te,ln]=(0,$.useState)({headless:!1,maxSteps:50,timeout:0,cdpEndpoint:"",wsEndpoint:"",useCft:!1}),mi=Bn(),A=fs(),Pn=bs(),pi=(0,$.useCallback)((w,R)=>{let v=F.current;if(!v)return;let C=ne.current+R;ir(i.sessionDir,C,w,v,(D,V,G,q)=>i.log(D,V,G,q))},[i]),gi=(0,$.useCallback)((w,R,v)=>{i.logStep(w,R,v)},[i]),M=nr(pi,gi),[H,Qe]=(0,$.useState)(()=>c.load()),[,hi]=(0,$.useState)(0),ze=(0,$.useCallback)(()=>hi(w=>w+1),[]),[W,Se]=(0,$.useState)(null),Gt=A.creds.getActiveProfile(),me=A.creds.getDefaultEnv(),Je=(0,$.useCallback)((w,R)=>{let v=w?A.creds.loadProfileConfig(w,R):null;c.save({project_id:v?.project_id??null,project_name:v?.project_name??null,folder_id:v?.folder_id??null,folder_name:v?.folder_name??null}),Qe(c.load())},[A.creds,c]);(0,$.useEffect)(()=>{j||(i.start({model:H.model,environment:me,profile:Gt}),se(!0))},[i,j,H.model,me,Gt]);let Ao=(0,$.useCallback)(async w=>{let R=ae(w),v=A.getBasicAuth(),C=v?{username:v.username,accessKey:v.access_key}:await A.getToken().then(V=>V??"");if(!C)return;let D=new Fo(R.controllerBaseUrl,C);try{let V=await D.getScreenshotSas();i.setScreenshotSas(V),F.current=new en(V,3,(G,q,ee,de)=>i.log(G,q,ee,de)),i.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched")}catch(V){i.log("warn","SCREENSHOT_SAS_FAILED","Screenshot SAS fetch failed",{error:V instanceof Error?V.message:String(V)})}},[A,i]),yt=(0,$.useCallback)(async w=>{let R=w??A.creds.getDefaultEnv();we(null),F.current=null;let C=await A.initResolver(R,(D,V,G,q)=>i.log(D,V,G,q)).resolve(!0).catch(()=>null);return we(C),C&&(i.log("info","AUTH_RESET_OK","Auth reset resolved",{username:C.username,org_id:C.org_id,env:R}),await Ao(R)),C},[A,i,Ao]),ko=(0,$.useRef)(!1);(0,$.useEffect)(()=>{!g||ko.current||!j||(ko.current=!0,yt().then(w=>{if(w){if(i.log("info","BOOT_RESOLVE_OK","Boot auth resolved",{username:w.username,org_id:w.org_id}),!i.hasRemoteLogger){let R=Uo({sessionId:i.sessionId,identity:{org_id:String(w.org_id??""),user_id:String(w.user_id??""),machine_id:No()},environment:me,getToken:async()=>A.getToken()});i.setRemoteLogger(R),R.start(),it("remote-logger",()=>R.shutdownSync()),Zn(R)}}else i.log("warn","BOOT_RESOLVE_FAILED","Boot auth failed \u2014 non-controller APIs may fail")}).catch(w=>{i.log("error","BOOT_RESOLVE_ERROR","Boot auth error",{error:w instanceof Error?w.message:String(w)})}))},[g,j,yt,i]);let jt=(0,$.useCallback)(async()=>{if(X)return i.log("info","TMS_CREDS_CACHED","Using cached TMS credentials",{username:X.username,org_id:X.org_id}),X;let w=await A.resolveBasicAuth();return w?(i.log("info","TMS_CREDS_OK","TMS credentials resolved",{username:w.username,org_id:w.org_id,user_id:w.user_id}),we(w)):i.log("warn","TMS_CREDS_FAILED","No TMS credentials resolved"),w},[A,X,i]),To=(0,$.useCallback)(async()=>{let w=await jt();if(!w)return i.log("warn","PROJECT_FAILED","No TMS credentials for project resolution"),null;let R=ae(me),v=new ot(R.tmsBaseUrl,w.username,w.access_key),C=A.creds.getActiveProfile(),D=A.creds.getDefaultEnv(),V=C?A.creds.loadProfileConfig(C,D):null,G=V?.project_id??H.project_id;if(G)i.log("info","PROJECT_CACHED","Using cached project",{project_id:G});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 ee=await v.listProjects((xe,cn,St,lt)=>i.log(xe,cn,St,lt));i.log("info","PROJECT_LIST_OK","Projects listed",{count:ee.length});let de=ee.find(xe=>xe.name==="KaneAI Generated");if(de)G=de.project_id,i.log("info","PROJECT_SELECTED","Using KaneAI Generated project",{project_id:G});else if(ee.length>0){let xe=ee[0];G=xe.project_id,i.log("info","PROJECT_SELECTED","Using first project",{name:xe.name,project_id:G})}G&&c.set("project_id",G)}catch(ee){return i.log("error","PROJECT_LIST_FAILED","Project listing failed",{error:String(ee)}),null}}if(!G)return i.log("warn","PROJECT_NONE","No projects found"),null;let q=V?.folder_id??H.folder_id;if(q)i.log("info","FOLDER_CACHED","Using cached folder",{folder_id:q});else try{i.log("info","FOLDER_FETCH","Fetching default folder",{project_id:G}),q=await v.getDefaultFolder(G),i.log("info","FOLDER_OK","Default folder resolved",{folder_id:q}),q&&c.set("folder_id",q)}catch(ee){return i.log("error","FOLDER_FAILED","Default folder fetch failed",{error:String(ee)}),null}return{projectId:G,folderId:q??""}},[H.project_id,H.folder_id,jt,me,c,i]),Z=(0,$.useCallback)(w=>{let R=m(),v={...w,id:R};ce((0,P.jsx)(Yo,{entry:v}))},[m,ce]),Io=(0,$.useCallback)(async(w,R)=>{let v=i.nextRunIndex();ne.current=v,re.current=w,i.logRunStart(v,w,R??""),i.setFirstRun(w,R??"");let C=A.getResolvedBasicAuth(),D=C,V=null;if(!D&&(V=await A.getToken(),!V)){Z({type:"error",text:"Not authenticated. Run /login first."});return}let G={basicAuth:C??null,token:V,resolver:A.getResolver(),resolvedCreds:null};if(pe.current=G,v===0&&!s){i.log("info","ATM_CREATE_START","Creating test via ATM endpoint",{run_index:0});let Oe=await To(),ft=ae(me),rt=D?{username:D.username,access_key:D.access_key}:await jt();if(rt){let mt=await fr({tmsBaseUrl:ft.tmsBaseUrl,auth:{username:rt.username,access_key:rt.access_key},objective:w,url:R??H.default_url??"",projectId:Oe?.projectId??H.project_id??"",folderId:Oe?.folderId??H.folder_id??"",hasCustomProfile:!!H.chrome_profile_path,log:($n,kr,Tr,Ir)=>i.log($n,kr,Tr,Ir)});mt&&(i.setTestId(mt),Oe?.projectId&&i.setProjectId(Oe.projectId))}}let q=null;if(Te.useCft)Z({type:"info",text:"CfT mode: Playwright will manage browser"});else if(Te.wsEndpoint)Z({type:"info",text:`WS endpoint: ${Te.wsEndpoint.slice(0,60)}...`});else if(Te.cdpEndpoint)Z({type:"info",text:`CDP endpoint: ${Te.cdpEndpoint}`});else{Z({type:"info",text:"Starting Chrome..."});try{q=await Pn.ensureChrome(R)}catch(Oe){Z({type:"error",text:`Chrome failed: ${Oe instanceof Error?Oe.message:String(Oe)}`});return}i.logChromeLaunch(q.port,q.cdpEndpoint),Z({type:"info",text:`Chrome ready (port ${q.port})`})}let ee=cr({objective:w,globalDir:at(Ee,"variables"),localDir:at(process.cwd(),".testmuai","variables")});i.setAuteurVariables(ee.auteur),We.current=ee;let de=D&&!s?await ur({variables:ee,auth:D,orgId:String((await jt())?.org_id??""),env:me,localMode:s,log:(Oe,ft,rt,mt)=>i.log(Oe,ft,rt,mt)}):{};qe.current=de;let xe=Qt(at(Ee,"global-memory.md")),cn=Qt(at(process.cwd(),".testmuai","context.md")),St=q?{cdpEndpoint:q.cdpEndpoint,instance:q,tempDir:null}:Te.wsEndpoint?{wsEndpoint:Te.wsEndpoint,instance:null,tempDir:null}:Te.cdpEndpoint?{cdpEndpoint:Te.cdpEndpoint,instance:null,tempDir:null}:{instance:null,tempDir:null},lt=dr({objective:ee.auteurObjective,url:R,model:H.model,chrome:St,auth:G,sessionId:i.sessionId,runIndex:v,windowSize:H.window_size,maxSteps:Te.maxSteps,headless:Te.headless,variables:Object.keys(ee.auteur).length>0?ee.auteur:void 0,globalContext:xe??void 0,localContext:cn??void 0,sessionContext:i.getContext()});R&&I(R),u(null),M.startRun(lt,{environment:me,mode:H.mode,log:(Oe,ft,rt,mt)=>i.log(Oe,ft,rt,mt)}),le(Oe=>Oe+1)},[A,Pn,c,H,i,me,M,Z,Te,To,jt]),wr=(0,$.useRef)(null);(0,$.useEffect)(()=>{if(M.bifurcationInfo&&M.bifurcationInfo!==wr.current){wr.current=M.bifurcationInfo;let{flows:w,isSingleFlow:R}=M.bifurcationInfo;if(R&&w.length===1&&w[0])i.log("info","OBJECTIVE_REWRITTEN","Objective rewritten",{objective:w[0]}),Z({type:"info",text:`Objective: ${w[0]}`});else if(!R&&w.length>1){let v=[`Bifurcated into ${w.length} flows:`];w.forEach((C,D)=>v.push(` ${D+1}. ${C}`)),i.log("info","BIFURCATION","Objective bifurcated into flows",{flow_count:w.length}),Z({type:"info",text:v.join(`
|
|
49
|
+
`)})}}},[M.bifurcationInfo,i,Z]);let yr=$.default.useRef(null),Sr=$.default.useRef(0),Er=$.default.useRef(0);(0,$.useEffect)(()=>{if(M.lastRunEnd&&M.lastRunEnd!==yr.current){yr.current=M.lastRunEnd;let{status:w,duration:R,summary:v,reason:C,context:D}=M.lastRunEnd,{passed:V,failed:G,total:q}=wn(M.steps);Sr.current+=q,Er.current+=R??0,u({status:w,duration:R??0,summary:v??"",stepsPassed:V,stepsFailed:G,stepsTotal:q,reason:C,finalState:M.lastRunEnd?.final_state,creditsConsumed:M.lastRunEnd?.credits_consumed}),i.logRunEnd(ne.current,w,R,v);let ee=M.bifurcationInfo,de=ee&&!ee.isSingleFlow?ee.flows:null,xe=vn(M.lastRunEnd,ne.current,de),cn=_n(M.lastRunEnd,re.current,ne.current,xe);i.addRunResult(cn,M.lastRunEnd?.total_runs);let St=M.lastRunEnd?.per_flow_metadata;if(ee&&!ee.isSingleFlow&&St&&St.length>1)for(let lt=0;lt<St.length;lt++){let Oe=St[lt],ft=M.steps[lt],rt=ft?.children??[],mt=rt.filter(un=>un.status==="passed").length,$n=rt.filter(un=>un.status==="failed").length,kr=rt.reduce((un,bi)=>un+(bi.duration??0),0),Tr=ft?.status==="failed"?"failed":"passed",Ir=ee.flows[lt]??ft?.objective??re.current;i.addFlow({runIndex:ne.current,flowId:ee.flows[lt],objective:Ir,status:Tr,summary:Oe.summary??"",duration:kr,steps:mt+$n,stepsPassed:mt,stepsFailed:$n,reason:Oe.error_message??void 0,creditsConsumed:Oe.credits_consumed??void 0})}else i.addFlow({runIndex:ne.current,objective:re.current,status:w,summary:v??"",duration:R??0,steps:q,stepsPassed:V,stepsFailed:G,reason:C,creditsConsumed:M.lastRunEnd?.credits_consumed})}},[M.lastRunEnd,i,Z]);let On=(0,$.useRef)(null);(0,$.useEffect)(()=>{M.askingUser&&M.askingUser!==On.current&&(On.current=M.askingUser,ce((0,P.jsxs)(y,{children:[(0,P.jsx)(f,{color:"#ff9500",children:"? "}),(0,P.jsx)(f,{color:"#ff9500",children:"Agent asks: "}),(0,P.jsx)(f,{children:M.askingUser})]}))),M.askingUser||(On.current=null)},[M.askingUser,ce]);let Cr=(0,$.useRef)(null);(0,$.useEffect)(()=>{if(B&&!M.isRunning&&M.lastRunEnd){if(Cr.current===M.lastRunEnd)return;Cr.current=M.lastRunEnd,ce((0,P.jsxs)(y,{flexDirection:"column",children:[(0,P.jsx)(Rs,{status:B.status,steps:B.stepsTotal,duration:B.duration,creditsConsumed:B.creditsConsumed,reason:B.reason}),(0,P.jsx)(As,{})]})),u(null)}},[B,M.isRunning,M.lastRunEnd,ce]),(0,$.useEffect)(()=>{if(M.runError&&!M.isRunning){let w=M.runError.trim();i.log("error","RUNNER_ERROR","Runner error occurred",{error:w}),i.escalateRun(i.nextRunIndex()-1);let v=w.split(`
|
|
42
50
|
`).slice(-8).join(`
|
|
43
|
-
`);
|
|
44
|
-
${A}`})}},[U.runError,U.isRunning,ne,n]);let mt=(0,M.useCallback)(async()=>{n.log("EXIT_UPLOAD starting exit upload pipeline"),R(Zn()),q({status:"uploading"});let b=ae(k),P=I.getResolvedBasicAuth(),A;if(P)n.log("EXIT_UPLOAD using resolved basic auth for controller"),A={username:P.username,accessKey:P.access_key};else{let $e=await I.getToken();if(!$e)return n.log("EXIT_UPLOAD aborted: no auth available"),null;A=$e}let T=y??await pe();if(!T)return n.log("EXIT_UPLOAD aborted: no TMS credentials"),n.setUploadStatus("failed","Could not get TMS credentials"),null;n.log(`EXIT_UPLOAD config: testId=${n.testId} commitId=${n.sessionId} projectId=${z.project_id} sessionDir=${n.sessionDir} runDirs=${JSON.stringify(n.getRunDirs())}`);let L=P?.username??T.username,H=P?.access_key??T.access_key,re=n.getContext().prior_runs,Ee=n.getRunObjectives(),_e=[];for(let[$e]of Object.entries(n.auteurVariables))if($e.startsWith("secrets.user.")){let Ze=$e.replace("secrets.user.","");_e.push({key_name:Ze,scope:"user"})}N.current&&(n.log("SCREENSHOT_UPLOAD draining queue before pipeline"),await N.current.drain(),n.log("SCREENSHOT_UPLOAD queue drained"));let fe=await new es({controllerBaseUrl:b.controllerBaseUrl,tmsBaseUrl:b.tmsBaseUrl,auth:A,authResolver:I.getResolver()??void 0,sessionId:n.sessionId,sessionDir:n.sessionDir,testId:n.testId,commitId:n.sessionId,projectId:z.project_id,folderId:z.folder_id,firstObjective:n.firstObjective??"KaneAI Test",firstUrl:n.firstUrl??"",runDirs:n.getRunDirs(),runObjectives:Ee,startedAt:n.startedAt,endedAt:new Date().toISOString(),totalSteps:xe.current,totalDuration:he.current,runStatuses:re.map($e=>$e.status),orgId:T.org_id,userId:T.user_id,tmsUsername:L,tmsAccessKey:H,screenshotBaseUrl:n.screenshotBaseUrl,shareApiBaseUrl:b.shareApiBaseUrl,testManagerUiUrl:b.testManagerUiUrl,variables:Object.keys(n.auteurVariables).length>0?n.auteurVariables:void 0,variableIds:{},secrets:_e,codeExport:e,onProgress:($e,Ze,we)=>{n.log(`EXIT_PROGRESS step=${$e} status=${Ze}${we?` detail=${we}`:""}`),R(gt=>ts(gt,$e,Ze,we))},log:$e=>n.log($e)}).execute();return fe.success?(n.log(`EXIT_UPLOAD success: testId=${fe.testId} testcaseId=${fe.testcaseId??"none"} shareId=${fe.shareId??"none"}`),n.setUploadStatus("uploaded"),fe.testId&&n.setTestId(fe.testId),fe.testcaseId&&n.setTestcaseId(fe.testcaseId)):(n.log(`EXIT_UPLOAD failed: ${fe.error}`),n.setUploadStatus("failed",fe.error)),fe},[I,k,n,z,y,pe]),Rt=(0,M.useCallback)(()=>{n.finish("complete"),dn(),je.killChrome(),setTimeout(()=>r(),1500)},[n,je,r]),it=(0,M.useCallback)(async b=>{if(V(!1),b&&n.testId){n.log(`EXIT feedback=${b}, submitting...`);try{let P=ae(k),A=I.getResolvedBasicAuth();A&&(await new Ot(P.tmsBaseUrl,A.username,A.access_key).submitFeedback({instruction_id:"",test_id:n.testId,feedback_type:b,mode:"human"}),n.log("EXIT feedback submitted"))}catch(P){n.log(`EXIT feedback failed: ${P}`)}}else n.log("EXIT feedback skipped");Rt()},[k,I,n,Rt]),pt=(0,M.useCallback)(()=>{if(X)return;let b=n.nextRunIndex()>0;if(n.log(`EXIT hasRuns=${b} localMode=${i}`),!b||i){n.log(`EXIT quick exit \u2014 ${b?"local mode":"no runs"}`),n.finish("complete"),dn(),je.killChrome(),r();return}n.log("EXIT starting upload pipeline..."),W(!0),mt().then(P=>{let A=ae(k),T=z.project_id;if(P?.testcaseId&&T){let L=`${A.testManagerUiUrl}/projects/${T}/test-cases/${P.testcaseId}`,H=P.shareId?`${L}/dashboard/share/${P.shareId}`:void 0,re=`${L}/dashboard?type=summary&agentView=true&fqdn=summary-page`;q({status:"success",testUrl:H,testCaseLink:re,codeExportDir:P.codeExportDir}),Zs({shareableLink:H,testCaseLink:re,codeExportDir:P.codeExportDir})}else q({status:P?.success?"success":"failed",error:P?.error});V(!0)}).catch(P=>{n.log(`EXIT_UPLOAD exception: ${P}`),n.setUploadStatus("failed",String(P)),q({status:"failed",error:String(P)}),V(!0)})},[X,n,je,r,i,mt,k,z]);(0,M.useEffect)(()=>{if(!X)return;let b=300*1e3,P=setTimeout(()=>{n.setUploadStatus("failed","Upload timed out after 5m"),n.finish("complete"),dn(),je.killChrome(),process.exit(0)},b);return()=>clearTimeout(P)},[X,n,je]);let Ve=M.default.useRef(0),ge=M.default.useRef(null),Qe=M.default.useRef(0);et((b,P)=>{if(P.ctrl&&b==="c"){if(X){Qe.current+=1,Qe.current>=2&&(n.setUploadStatus("pending","Force exit by user"),n.finish("complete"),dn(),je.killChrome(),process.exit(0));return}if(U.isRunning){U.cancelRun(),ne({type:"info",text:"Run cancelled."}),Ve.current++,ge.current&&clearTimeout(ge.current),ge.current=setTimeout(()=>{Ve.current=0},2e3),Ve.current>=2&&pt();return}if(Ut==="chat"){St("menu");return}pt()}});let ht=M.default.useMemo(()=>{let b=I.creds.getActiveProfile()??"none",P=I.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:me.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:A=>{rt(T=>({...T,headless:A==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(me.maxSteps),onValue:A=>{let T=parseInt(A,10);T>0&&rt(L=>({...L,maxSteps:T}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:me.timeout?String(me.timeout):"",placeholder:"0 = no timeout",onValue:A=>{let T=parseInt(A,10);rt(L=>({...L,timeout:isNaN(T)?0:T}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:me.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:A=>{rt(T=>({...T,cdpEndpoint:A}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:me.wsEndpoint,placeholder:"wss://...",onValue:A=>{rt(T=>({...T,wsEndpoint:A}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{I.logout().then(A=>{Et();let T=I.creds.getActiveProfile(),L=I.creds.getDefaultEnv();ie(T,L),se().catch(()=>{}),ne(A?{type:"info",text:`Logged out: ${A.profile} [${A.env}]`}:{type:"info",text:"No active profile"})}).catch(()=>{ne({type:"error",text:"Logout failed"})})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let A=I.creds.getActiveProfile()??"none",T=I.creds.getDefaultEnv(),L=I.creds.loadBasicAuth(A,T),H=L?"basic":I.creds.loadCredentials(A,T)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:A},{key:"Environment",value:T}]},{label:"Authentication",entries:[{key:"Method",value:H},...L?[{key:"Username",value:L.username}]:[]]},{label:"Token",entries:[{key:"Status",value:I.tokenValid?"valid":"not logged in",color:I.tokenValid?m.statusPass:m.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",onAction:()=>{(async()=>{let A=I.creds.getActiveProfile()??"default",T=I.creds.getDefaultEnv(),L=ae(T);try{let H=I.getBasicAuth(),re=H?null:await I.getToken();if(!H&&!re){ne({type:"error",text:"Not authenticated. Run /login first."});return}let{ControllerClient:Ee}=await import("./controller-client-VI55T5AT.js"),ke=await(H?new Ee(L.controllerBaseUrl,{username:H.username,accessKey:H.access_key}):new Ee(L.controllerBaseUrl,re)).getCreditBalance();ne({type:"info",text:`Credits \u2014 available: ${ke.available_credits}, total: ${ke.total_credits} (${A} / ${T})`})}catch(H){ne({type:"error",text:`Balance check failed: ${H instanceof Error?H.message:String(H)}`})}})()}},{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"}]},{label:"Browser",entries:[{key:"Window",value:`${z.window_size.width}x${z.window_size.height}`},{key:"Chrome Profile",value:z.chrome_profile_path?z.chrome_profile_path.split("/").pop()??z.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:z.project_name?`${z.project_name} (${z.project_id})`:z.project_id??"(none)"},{key:"Folder",value:z.folder_name?`${z.folder_name} (${z.folder_id})`:z.folder_id??"(none)"},{key:"Default URL",value:z.default_url??"(none)"}]}]})},{id:"config-chrome",label:"Chrome Profile",type:"action",onChromeProfilePicker:()=>{}},{id:"config-project",label:"Project",type:"action",onProjectPicker:()=>{}},{id:"config-folder",label:"Folder",type:"action",...z.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:m.dim}]}]})}},{id:"config-url",label:"Default URL",type:"text-input",currentValue:z.default_url??"",onValue:A=>{s.set("default_url",A)}},{id:"config-window",label:"Window Size",type:"text-input",currentValue:`${z.window_size.width}x${z.window_size.height}`,placeholder:"WIDTHxHEIGHT",onValue:A=>{let T=A.split("x").map(Number);T[0]&&T[1]&&s.set("window_size",{width:T[0],height:T[1]})}}]},{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:`${Be(ye,"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:Be(ye,"global-memory.md")},{key:"Local",value:"{cwd}/.testmuai/context.md"}]},{label:"Config",entries:[{key:"TUI config",value:Be(ye,"tui-config.json")},{key:"Auth",value:Be(ye,"config.json")},{key:"Sessions",value:`${Be(ye,"sessions")}/`}]}]})},{id:"help-variables",label:"Variables",type:"action",onInfo:()=>({title:"Variables",sections:[{label:"Loading Order (later wins)",entries:[{key:"1. Global",value:`${Be(ye,"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:Be(ye,"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:"update",label:c?`Update (${c.current} \u2192 ${c.latest})`:"Update",type:"action",onAction:()=>{g||(S(!0),ne({type:"info",text:"Checking for updates..."}),(async()=>{let{checkForUpdate:A}=await import("./version-check-YRWT2JIC.js"),T=await A();if(!T){ne({type:"info",text:`Already on latest version (${Pt})`}),S(!1);return}ne({type:"info",text:`Update available: ${T.current} \u2192 ${T.latest}. Installing...`});let{runSelfUpdate:L}=await import("./updater-KDWM6PUM.js"),H=await L();H.success?ne({type:"info",text:`\u2713 Updated to ${H.toVersion}. Restart kane-cli to use the new version.`}):ne({type:"error",text:`Update failed: ${H.error}`}),S(!1)})())}},{id:"exit",label:"Exit",type:"action",onAction:()=>{pt()}}]},[I,s,z,ne,pt,me,Et,c,g]),on=(0,M.useCallback)(b=>{if(U.askingUser){de((0,J.jsxs)(x,{children:[(0,J.jsx)(u,{color:"#888888",children:"\u2192 "}),(0,J.jsx)(u,{color:"#888888",children:"You answered: "}),(0,J.jsx)(u,{children:b})]})),U.sendAnswer(b);return}if(n.logCommand(b),U.isRunning){ne({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}de((0,J.jsxs)(x,{children:[(0,J.jsx)(u,{color:"#b388ff",children:"\u276F "}),(0,J.jsx)(u,{children:b})]}));let P=p??z.default_url;ue(b,P||void 0)},[U,ne,de,n,p,z,ue]),ct="KaneAI CLI",ut=I.getAuthInfo(),Wn=ut?ut.method==="basic"?"basic auth":"oauth":"not logged in";return Jt?(0,J.jsxs)(x,{flexDirection:"column",children:[oe.length>0&&(0,J.jsx)(Gt,{items:oe,children:b=>(0,J.jsx)(x,{paddingX:1,children:b.content},b.id)}),!l&&(0,J.jsx)(ps,{onComplete:()=>{let b=I.creds.getActiveProfile(),P=I.creds.getDefaultEnv(),A=b?I.creds.loadCredentials(b,P):null,T=b?I.creds.loadBasicAuth(b,P):null,L=!!(A||T),H=T?.username??b??null;de((0,J.jsx)(An,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:Pt,authenticated:L,user:H})),d(!0),t&&t.then(re=>{re&&(h(re),ne({type:"info",text:`Update available: ${re.current} \u2192 ${re.latest} \u2014 select Update from menu or run \`kane-cli update\``}))}).catch(()=>{})}}),l&&Ut==="menu"&&!X&&(0,J.jsx)(x,{marginBottom:1,children:(0,J.jsxs)(x,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,J.jsx)(u,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,J.jsx)(u,{color:m.dimmed,children:" \u2502 "}),(0,J.jsx)(u,{color:"#ff9500",children:z.model}),(0,J.jsx)(u,{color:m.dimmed,children:" \u2502 "}),(0,J.jsx)(u,{color:m.dimmed,children:Wn}),(0,J.jsx)(u,{color:m.dimmed,children:" \u2502 "}),(0,J.jsxs)(u,{color:m.dimmed,children:[Vt??"no profile","/",k]})]})}),l&&!X&&(0,J.jsxs)(x,{flexDirection:"column",flexGrow:1,children:[Ut==="menu"&&(0,J.jsx)(J.Fragment,{children:(0,J.jsx)(Ks,{items:ht,onRunSelected:()=>St("chat"),renderLoginWizard:b=>{let P=be?.phase??"wizard";if(P==="project")return(0,J.jsx)(Yn,{resolver:I.getResolver(),currentProjectId:null,env:be.env,onSelect:(A,T)=>{I.creds.saveProfileConfig(be.profile,be.env,{project_id:A,project_name:T}),ot(L=>L?{...L,phase:"folder"}:null)},onCancel:()=>{ie(be.profile,be.env),ot(null),b()}});if(P==="folder"){let A=I.creds.loadProfileConfig(be.profile,be.env);return(0,J.jsx)(Qn,{resolver:I.getResolver(),projectId:A?.project_id??"",currentFolderId:null,env:be.env,onSelect:(T,L)=>{I.creds.saveProfileConfig(be.profile,be.env,{folder_id:T,folder_name:L}),ie(be.profile,be.env),ot(null),b()},onCancel:async()=>{let T=I.creds.loadProfileConfig(be.profile,be.env);if(T?.project_id)try{let H=I.getResolver()?.cached;if(H){let re=ae(be.env),_e=await new Ot(re.tmsBaseUrl,H.username,H.access_key).getDefaultFolder(T.project_id);_e&&I.creds.saveProfileConfig(be.profile,be.env,{folder_id:_e,folder_name:"Default"})}}catch{}ie(be.profile,be.env),ot(null),b()}})}return(0,J.jsx)(Xr,{devMode:process.env.KANE_DEV_MODE==="1",profiles:I.creds.listProfiles(),onBasicLogin:(A,T,L,H)=>{I.creds.saveBasicAuth(A,T,{username:L,access_key:H}),I.creds.setActiveProfile(A),I.creds.setDefaultEnv(T),I.setTokenValid(!0),Et()},onOAuthLogin:async(A,T)=>{I.creds.setDefaultEnv(T),await I.login(A),Et()},onComplete:(A,T)=>{se(T).then(()=>{ot({phase:"project",profile:A,env:T})}).catch(()=>{ot({phase:"project",profile:A,env:T})})},onCancel:()=>{ot(null),b()}})},renderProfilesView:b=>(0,J.jsx)(Yr,{creds:I.creds,onSwitch:(P,A)=>{I.creds.setActiveProfile(P),I.creds.setDefaultEnv(A),ie(P,A),Et(),se(A).catch(()=>{}),ne({type:"info",text:`Switched to ${P} [${A}]`})},onCancel:b}),renderChromeProfilePicker:b=>(0,J.jsx)(Qr,{currentPath:z.chrome_profile_path,onSelect:P=>{s.set("chrome_profile_path",P),Ct(s.load())},onCancel:b}),renderProjectPicker:b=>(0,J.jsx)(Yn,{resolver:I.getResolver(),currentProjectId:z.project_id,env:k,onSelect:(P,A)=>{s.save({project_id:P,project_name:A});let T=I.creds.getActiveProfile(),L=I.creds.getDefaultEnv();T&&I.creds.saveProfileConfig(T,L,{project_id:P,project_name:A}),Ct(s.load()),b()},onCancel:b}),renderFolderPicker:b=>(0,J.jsx)(Qn,{resolver:I.getResolver(),projectId:z.project_id??"",currentFolderId:z.folder_id,env:k,onSelect:(P,A)=>{s.save({folder_id:P,folder_name:A});let T=I.creds.getActiveProfile(),L=I.creds.getDefaultEnv();T&&I.creds.saveProfileConfig(T,L,{folder_id:P,folder_name:A}),Ct(s.load()),b()},onCancel:b})})}),Ut==="chat"&&(0,J.jsxs)(J.Fragment,{children:[U.isRunning&&U.steps.length>0&&(0,J.jsx)(On,{steps:U.steps,bifurcated:!!U.bifurcationInfo&&!U.bifurcationInfo.isSingleFlow,flows:U.bifurcationInfo?.flows,cmInitCounts:U.cmInitCounts,onStepCommit:de},`run-${ee.current}`),(0,J.jsx)(vs,{onSubmit:on,onEscape:()=>{!U.isRunning&&!U.askingUser&&St("menu")},history:G,placeholder:U.askingUser?"Type your answer...":U.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (esc = menu)"})]})]}),l&&X&&E&&(0,J.jsxs)(J.Fragment,{children:[(0,J.jsx)(ns,{steps:f,status:E.status,testUrl:E.testUrl,error:E.error}),E.status==="success"&&(0,J.jsx)(rs,{shareableLink:E.testUrl,testCaseLink:E.testCaseLink,codeExportDir:E.codeExportDir,autoExit:!1})]}),O&&(0,J.jsx)(ss,{onSubmit:it}),l&&!X&&(0,J.jsx)(os,{profile:Vt,environment:k,model:z.model,tokenValid:I.tokenValid,sessionId:n.sessionId,runCount:F,viewMode:Ut})]}):(0,J.jsx)(Ns,{onComplete:()=>{Ct(s.load()),sn(!0)}})}var So=Z(yo(),1),{program:cf,createCommand:uf,createArgument:df,createOption:ff,CommanderError:mf,InvalidArgumentError:pf,InvalidOptionArgumentError:hf,Command:Co,Argument:gf,Option:nn,Help:vf}=So.default;import{join as Ye}from"path";import{readFileSync as ko,readdirSync as ka,existsSync as _n}from"fs";var Ro=Z(He(),1);import{createInterface as Ea}from"readline";function rn(i){process.stdout.write(JSON.stringify(i)+`
|
|
45
|
-
`)}async function Eo(i,e,t){let r=Un(i,e);kn().then(h=>{h&&rn({type:"update_available",current:h.current,latest:h.latest,severity:h.severity})}).catch(()=>{});let n=Ea({input:process.stdin});n.on("line",h=>{try{let g=JSON.parse(h);g.type==="user_response"?r.sendUserResponse(g.answer??""):g.type==="cancel"&&r.sendCancel(g.reason??"")}catch{}});let s=null,a=!1,o=0,l=null,d=0,c=!1;for await(let h of r.events)switch(h.type){case"run_start":c&&d++;break;case"step_start":{let g=h,S={step:g.index+1,status:"running",remark:g.objective??`Step ${g.index+1}`};g.child_id&&(S.child_id=g.child_id),rn(S);break}case"step_end":{let g=h;o++;let S={step:g.index+1,status:g.status==="passed"?"done":"failed",remark:g.summary??""};g.child_id&&(S.child_id=g.child_id),rn(S);let p=c?Math.max(0,d-1):0;t?.onStepEnd?.(g.index,p);break}case"bifurcation":{let g=h,S=g.flows??[],p=g.count??S.length;(g.is_single_flow??p<=1)||(l=S,c=!0,d=0),rn({type:"bifurcation",flows:S,count:p});break}case"ask_user":{let g=h;rn({type:"ask_user",question:g.question,step_index:g.step_index,...g.options?{options:g.options}:{}});break}case"run_end":{s=h;break}case"error":{a=!0,rn({type:"error",message:h.message});break}default:break}return n.close(),await r.exited,{lastRunEnd:s,stepsTotal:o,hadError:a,bifurcationFlows:l}}function Ao(i){let e=new Co;if(e.name("kane-cli").version(Pt),i[0]==="--help"||i[0]==="-h"||i[0]==="help"){(async()=>{let{HelpView:r}=await import("./HelpView-AZGTX7MR.js"),{render:n}=await import("./build-MFETN2BY.js"),s=await import("./react-QWOAB3TB.js"),{waitUntilExit:a}=n(s.default.createElement(r));await a(),process.exit(0)})();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 nn("--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 nn("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").option("--default-url <url>","Default URL").action(async r=>{let n=new Re,s=new tt,a=r.env,o=r.profile;if(!process.stdin.isTTY||r.oauth||r.username){if(n.setDefaultEnv(a),r.oauth?(await new _t(o,a,n).login(),console.log(`Logged in as ${o} [${a}] via OAuth`)):r.username&&r.accessKey?(n.saveBasicAuth(o,a,{username:r.username,access_key:r.accessKey}),console.log(`Logged in as ${o} [${a}] via basic auth`)):(console.error("Provide --oauth, or --username and --access-key"),process.exit(1)),n.setActiveProfile(o),s.set("model",r.model),r.chromeProfile&&s.set("chrome_profile_path",r.chromeProfile),r.defaultUrl&&s.set("default_url",r.defaultUrl),r.projectId)s.set("project_id",r.projectId),console.log(`Project set to ${r.projectId}`);else try{let W=n.resolveAuth();if(W){let B=ae(a),$,E;if(W.method==="basic")$=W.username,E=W.access_key;else{let C=n.getActiveCredentials(),O=n.loadClient(C.profile,C.env),N=await new ze(a).refreshToken(C.credentials.refresh_token,O.client_id),{ControllerClient:ee}=await import("./controller-client-VI55T5AT.js"),ce=await new ee(B.controllerBaseUrl,N.access_token).getTmsCredentials();$=ce.username,E=ce.access_key}let{TmsClient:q}=await import("./tms-client-QWVBCUUT.js"),y=(await new q(ae(a).tmsBaseUrl,$,E).listProjects()).find(C=>C.name.toLowerCase().includes("kaneai"));y&&(s.set("project_id",y.project_id),console.log(`Auto-selected project: ${y.name} (${y.project_id})`))}}catch(W){console.warn(`Could not auto-select project: ${W instanceof Error?W.message:W}`)}r.folderId&&(s.set("folder_id",r.folderId),console.log(`Folder set to ${r.folderId}`)),s.set("setup_complete",!0),console.log("Setup complete.");return}let{LoginWizard:l}=await import("./LoginWizard-LQKZ3AYY.js"),{ProjectPicker:d}=await import("./ProjectPicker-GFSQKLDY.js"),{FolderPicker:c}=await import("./FolderPicker-CJAJHSMM.js"),{AuthResolver:h}=await import("./resolver-XLRER3KZ.js"),{render:g}=await import("./build-MFETN2BY.js"),S=await import("./react-QWOAB3TB.js"),p=!1;if(await new Promise(W=>{let{unmount:B}=g(S.default.createElement(l,{devMode:process.env.KANE_DEV_MODE==="1",profiles:n.listProfiles(),onBasicLogin:($,E,q,f)=>{n.saveBasicAuth($,E,{username:q,access_key:f}),n.setActiveProfile($),n.setDefaultEnv(E),a=E,o=$},onOAuthLogin:async($,E)=>{n.setDefaultEnv(E),await new _t($,E,n).login(),a=E,o=$},onComplete:()=>{B(),W()},onCancel:()=>{p=!0,B(),W()}}))}),p)return;let _=ae(a),v=n.loadBasicAuth(o,a),w=v?null:n.loadCredentials(o,a),F=async()=>w?.access_token??null,K=new h(_.controllerBaseUrl,F,v);if(await K.resolve(),!K.cached){console.log("Could not resolve credentials for project setup.");return}let X=null;await new Promise(W=>{let{unmount:B}=g(S.default.createElement(d,{resolver:K,currentProjectId:s.load().project_id,env:a,onSelect:($,E)=>{s.set("project_id",$),s.set("project_name",E),X=$,console.log(`Project set to ${E} (${$})`),B(),W()},onCancel:()=>{B(),W()}}))}),X&&(await new Promise(W=>{let{unmount:B}=g(S.default.createElement(c,{resolver:K,projectId:X,currentFolderId:s.load().folder_id,env:a,onSelect:($,E)=>{s.set("folder_id",$),s.set("folder_name",E),console.log(`Folder set to ${E} (${$})`),B(),W()},onCancel:()=>{B(),W()}}))}),s.set("setup_complete",!0),process.exit(0))}),e.command("logout").action(async()=>{let r=new Re,n=r.getActiveProfile();if(!n){console.log("No active profile to logout");return}let s=r.getDefaultEnv(),a=r.loadCredentials(n,s),o=r.loadClient(n,s);if(a&&o){let d=new ze(s);try{await d.revokeToken(a.access_token,o.client_id,"access_token")}catch{}try{await d.revokeToken(a.refresh_token,o.client_id,"refresh_token")}catch{}}r.deleteProfileFull(n,s);let l=r.listProfiles();l.length>0?(r.setActiveProfile(l[0].profile),r.setDefaultEnv(l[0].env),console.log(`Logged out ${n} [${s}]. Switched to ${l[0].profile} [${l[0].env}]`)):console.log(`Logged out ${n} [${s}]. No profiles remaining.`)}),e.command("whoami").option("--profile <name>","Profile name").action(async r=>{let n=new Re,s=r.profile??n.getActiveProfile()??"default",a=n.getDefaultEnv(),o=n.loadCredentials(s,a),l=n.loadBasicAuth(s,a),d="none",c,h,g;if(l)d="basic",c=l.username;else if(o){d="oauth";let w=o.expires_at,F=Date.now()/1e3;h=w>F?"valid":"expired",g=new Date(w*1e3).toISOString().slice(0,10)}else h="missing";let{WhoamiView:S}=await import("./WhoamiView-GVVXM665.js"),{render:p}=await import("./build-MFETN2BY.js"),_=await import("./react-QWOAB3TB.js"),{waitUntilExit:v}=p(_.default.createElement(S,{profile:s,env:a,authenticated:d!=="none",authMethod:d,username:c,tokenStatus:h,expiresAt:g}));await v()}),e.command("config <action> [value]").action(async(r,n)=>{let s=new tt,a=new Re;if(r==="show"){let o=s.load(),l=a.getActiveProfile()??"default",d=a.getDefaultEnv(),c=a.loadBasicAuth(l,d),h=a.loadCredentials(l,d),g=c?`basic (${c.username})`:h?"oauth":"not configured",{ConfigView:S}=await import("./ConfigView-P4W6OHZK.js"),{render:p}=await import("./build-MFETN2BY.js"),_=await import("./react-QWOAB3TB.js"),{waitUntilExit:v}=p(_.default.createElement(S,{model:o.model,authLabel:g,profile:l,env:d,defaultUrl:o.default_url,projectId:o.project_id,projectName:o.project_name,folderId:o.folder_id,windowSize:`${o.window_size.width}x${o.window_size.height}`,chromeProfile:o.chrome_profile_path,setupComplete:o.setup_complete}));await v()}else if(r==="set-url"&&n)s.set("default_url",n),console.log(`Default URL set to ${n}`);else if(r==="set-window"&&n){let o=n.split("x").map(Number);o[0]&&o[1]&&(s.set("window_size",{width:o[0],height:o[1]}),console.log(`Window size set to ${o[0]}x${o[1]}`))}else if(r==="chrome-profile"){if(n||!process.stdin.isTTY){n||(console.error("Usage: kane-cli config chrome-profile <path>"),process.exit(1)),s.set("chrome_profile_path",n),console.log(`Chrome profile set to ${n}`);return}let{ChromeProfilePicker:o}=await import("./ChromeProfilePicker-J34PIRKT.js"),{render:l}=await import("./build-MFETN2BY.js"),d=await import("./react-QWOAB3TB.js");await new Promise(c=>{let{unmount:h}=l(d.default.createElement(o,{currentPath:s.load().chrome_profile_path,onSelect:g=>{s.set("chrome_profile_path",g),console.log(`Chrome profile set to ${g}`),h(),c()},onCancel:()=>{h(),c()}}))})}else if(r==="project"){if(n||!process.stdin.isTTY){n||(console.error("Usage: kane-cli config project <project-id>"),process.exit(1)),s.set("project_id",n),console.log(`Project set to ${n}`);return}let o=a.getDefaultEnv(),l=ae(o),d=a.loadBasicAuth(a.getActiveProfile()??"default",o);if(!d){console.log("Login first to browse projects");return}let{ProjectPicker:c}=await import("./ProjectPicker-GFSQKLDY.js"),{AuthResolver:h}=await import("./resolver-XLRER3KZ.js"),{render:g}=await import("./build-MFETN2BY.js"),S=await import("./react-QWOAB3TB.js"),p=new h(l.controllerBaseUrl,async()=>null,d);await p.resolve(),await new Promise(_=>{let{unmount:v}=g(S.default.createElement(c,{resolver:p,currentProjectId:s.load().project_id,env:o,onSelect:(w,F)=>{s.set("project_id",w),s.set("project_name",F),console.log(`Project set to ${F} (${w})`),v(),_()},onCancel:()=>{v(),_()}}))})}else if(r==="folder"){if(n||!process.stdin.isTTY){if(n||(console.error("Usage: kane-cli config folder <folder-id>"),process.exit(1)),!s.load().project_id){console.log("Select a project first: kane-cli config project <id>");return}s.set("folder_id",n),console.log(`Folder set to ${n}`);return}let o=s.load();if(!o.project_id){console.log("Select a project first: kane-cli config project");return}let l=a.getDefaultEnv(),d=ae(l),c=a.loadBasicAuth(a.getActiveProfile()??"default",l);if(!c){console.log("Login first to browse folders");return}let{FolderPicker:h}=await import("./FolderPicker-CJAJHSMM.js"),{AuthResolver:g}=await import("./resolver-XLRER3KZ.js"),{render:S}=await import("./build-MFETN2BY.js"),p=await import("./react-QWOAB3TB.js"),_=new g(d.controllerBaseUrl,async()=>null,c);await _.resolve(),await new Promise(v=>{let{unmount:w}=S(p.default.createElement(h,{resolver:_,projectId:o.project_id,currentFolderId:o.folder_id,env:l,onSelect:(F,K)=>{s.set("folder_id",F),s.set("folder_name",K),console.log(`Folder set to ${K} (${F})`),w(),v()},onCancel:()=>{w(),v()}}))})}else console.log("Usage: kane-cli config show|set-url|set-window|chrome-profile|project|folder")}),e.command("run").argument("<objective>","Test objective (use {{var}} to reference variables)").option("--url <url>","Target URL").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: ${Ye(ye,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new nn("--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 nn("--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("--agent","Agent mode: plain NDJSON output, no colors/UI").option("--task-skills","Enable domain-specific task skills (experimental)").addOption(new nn("--local","Skip TMS integration (no uploads, no variables/secrets push)").hideHelp()).option("--code-export","Generate code export after upload").addHelpText("after",`
|
|
51
|
+
`);Z({type:"error",text:`Runner error:
|
|
52
|
+
${v}`})}},[M.runError,M.isRunning,Z,i]);let Dn=(0,$.useCallback)(async()=>{i.log("info","EXIT_UPLOAD_START","Starting exit upload pipeline"),oe(Ln()),z({status:"uploading"});let w=A.getResolvedBasicAuth(),R=null;if(!w&&(R=await A.getToken(),!R))return i.log("warn","EXIT_UPLOAD_ABORTED","Exit upload aborted \u2014 no auth available"),null;let v=X??await jt();if(!v)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:H.project_id,session_dir:i.sessionDir,run_dirs:i.getRunDirs()});let C={basicAuth:w??null,token:R,resolver:A.getResolver(),resolvedCreds:v};F.current&&(i.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot queue before pipeline"),await F.current.drain(),i.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot queue drained"));let D=En({session:i,env:me,auth:C,variables:We.current??{raw:{},auteur:{},auteurObjective:"",secretEntries:[],nonSecretEntries:[]},variableIds:qe.current,projectId:H.project_id,folderId:H.folder_id,totalSteps:Sr.current,totalDuration:Er.current,codeExport:Cn({codeExport:e,codeLanguage:t,skipCodeValidation:n},H.code_export),onProgress:(q,ee,de)=>{i.log("info","EXIT_PROGRESS","Upload progress",{step:q,status:ee,detail:de}),oe(xe=>Ho(xe,q,ee,de))},log:(q,ee,de,xe)=>i.log(q,ee,de,xe)}),G=await new Mo(D).execute();if(G.success){i.log("info","EXIT_UPLOAD_OK","Exit upload succeeded",{test_id:G.testId,testcase_id:G.testcaseId??null,share_id:G.shareId??null}),i.setUploadStatus("uploaded"),G.testId&&i.setTestId(G.testId),G.testcaseId&&i.setTestcaseId(G.testcaseId);let q=ae(me),ee=H.project_id,de=G.testcaseId&&G.shareId&&ee?Ft(q.testManagerUiUrl,ee,G.testcaseId,G.shareId):void 0,xe=G.testcaseId&&ee?yn(q.testManagerUiUrl,ee,G.testcaseId):void 0;z({status:"success",testUrl:de,testCaseLink:xe,codeExportDir:G.codeExportDir}),Cs({shareableLink:de,testCaseLink:xe,codeExportDir:G.codeExportDir})}else i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:G.error}),i.setUploadStatus("failed",G.error),z({status:"failed",error:G.error});return G},[A,me,i,H,X,jt]),Po=(0,$.useCallback)(async()=>{if(!(i.nextRunIndex()>0)){Z({type:"info",text:"No runs in current session."});return}if(M.isRunning){Z({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"),kn(!0);let R=i.getFlows();R.length>0&&ce((0,P.jsx)(ao,{flows:R}));let v=null;if(!s)try{v=await Dn()??null}catch(D){i.log("error","SESSION_RESET_UPLOAD_FAILED","Upload failed during /new",{error:String(D)}),Z({type:"error",text:"Upload failed \u2014 session data saved locally."})}if(v?.success&&v.testcaseId){let D=ae(me),V=H.project_id;ce((0,P.jsx)(Lr,{shareableLink:v.shareId&&V?Ft(D.testManagerUiUrl,V,v.testcaseId,v.shareId):void 0,testCaseLink:V?yn(D.testManagerUiUrl,V,v.testcaseId):void 0,codeExportDir:v.codeExportDir,autoExit:!1}))}i.testId&&Re(D=>[...D,{testId:i.testId,runCount:te}]),Pn.killChrome(),await i.finish("complete");let C=new _t;C.start({model:H.model,environment:me,profile:Gt??null}),o.current=C,l(D=>D+1),i.log("info","SESSION_RESET_COMPLETE","Session reset complete",{new_session_id:C.sessionId}),le(0),Sr.current=0,Er.current=0,ne.current=0,re.current="",We.current=null,qe.current={},F.current=null,jn.current=0,Ar.current=0,On.current=null,Cr.current=null,yr.current=null,wr.current=null,u(null),I(null),z(null),oe(Ln()),kn(!1),ce((0,P.jsxs)(y,{flexDirection:"column",marginY:1,children:[(0,P.jsx)(f,{color:h.dimmed,children:"\u2500".repeat(44)}),(0,P.jsx)(f,{color:h.green,bold:!0,children:"New session started"})]}))},[i,M,Z,ce,s,Dn,Pn,te,H,me,Gt,a]),Oo=(0,$.useCallback)(async()=>{await i.finish("complete"),Y(0,"Session complete")},[i]),vi=(0,$.useCallback)(async w=>{Ht(!1);let R=i.testId??(he.length>0?he[he.length-1].testId:null);if(w&&R){i.log("info","EXIT_FEEDBACK_SUBMIT","Submitting session feedback",{choice:w});try{let v=ae(me),C=A.getResolvedBasicAuth();C&&await mr({tmsBaseUrl:v.tmsBaseUrl,username:C.username,accessKey:C.access_key,testId:R,feedbackType:w,log:(D,V,G,q)=>i.log(D,V,G,q)})}catch(v){i.log("error","EXIT_FEEDBACK_FAILED","Feedback submission failed",{error:String(v)})}}else i.log("info","EXIT_FEEDBACK_SKIPPED","Feedback skipped");Oo()},[me,A,i,Oo,he]),$t=(0,$.useCallback)(async()=>{if(fe)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"),U(!0);try{await Dn()}catch(v){i.log("error","EXIT_UPLOAD_FAILED","Exit upload failed",{error:String(v)})}i.testId&&Re(v=>[...v,{testId:i.testId,runCount:te}]),await i.finish("complete")}if(!(i.testId??(he.length>0?he[he.length-1].testId:null))||s){await i.finish("complete"),Y(0,"No test ID \u2014 quick exit");return}U(!0),Ht(!0)},[fe,i,s,Dn,te,he]);(0,$.useEffect)(()=>{if(!fe)return;let w=300*1e3,R=setTimeout(async()=>{i.setUploadStatus("failed","Upload timed out after 5m"),await i.finish("complete"),Y(0,"Upload timed out after 5m")},w);return()=>clearTimeout(R)},[fe,i]);let jn=$.default.useRef(0),Rr=$.default.useRef(null),Ar=$.default.useRef(0);$e((w,R)=>{if(R.ctrl&&w==="c"){if(fe){Ar.current+=1,Ar.current>=2&&(i.setUploadStatus("pending","Force exit by user"),i.finish("complete"),Y(0,"Force exit by user"));return}if(M.isRunning){M.cancelRun(),Z({type:"info",text:"Run cancelled."}),jn.current++,Rr.current&&clearTimeout(Rr.current),Rr.current=setTimeout(()=>{jn.current=0},2e3),jn.current>=2&&$t();return}$t()}});let Do=$.default.useMemo(()=>{let w=A.creds.getActiveProfile()??"none",R=A.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:Te.headless?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{ln(C=>({...C,headless:v==="on"}))}},{id:"run-max-steps",label:"Max Steps",type:"text-input",currentValue:String(Te.maxSteps),onValue:v=>{let C=parseInt(v,10);C>0&&ln(D=>({...D,maxSteps:C}))}},{id:"run-timeout",label:"Timeout (sec)",type:"text-input",currentValue:Te.timeout?String(Te.timeout):"",placeholder:"0 = no timeout",onValue:v=>{let C=parseInt(v,10);ln(D=>({...D,timeout:isNaN(C)?0:C}))}},{id:"run-cdp",label:"CDP Endpoint",type:"text-input",currentValue:Te.cdpEndpoint,placeholder:"http://127.0.0.1:9222",onValue:v=>{ln(C=>({...C,cdpEndpoint:v}))}},{id:"run-ws",label:"WS Endpoint",type:"text-input",currentValue:Te.wsEndpoint,placeholder:"wss://...",onValue:v=>{ln(C=>({...C,wsEndpoint:v}))}}]}]},{id:"auth",label:"Auth",type:"submenu",children:[{id:"login",label:"Login",type:"action",onLoginWizard:()=>{}},{id:"logout",label:"Logout",type:"action",onAction:()=>{A.logout().then(v=>{ze();let C=A.creds.getActiveProfile(),D=A.creds.getDefaultEnv();Je(C,D),yt().catch(()=>{}),Z(v?{type:"info",text:`Logged out: ${v.profile} [${v.env}]`}:{type:"info",text:"No active profile"})}).catch(()=>{Z({type:"error",text:"Logout failed"})})}},{id:"whoami",label:"Who Am I",type:"action",onInfo:()=>{let v=A.creds.getActiveProfile()??"none",C=A.creds.getDefaultEnv(),D=A.creds.loadBasicAuth(v,C),V=D?"basic":A.creds.loadCredentials(v,C)?"oauth":"not configured";return{title:"Who Am I",sections:[{label:"Identity",entries:[{key:"Profile",value:v},{key:"Environment",value:C}]},{label:"Authentication",entries:[{key:"Method",value:V},...D?[{key:"Username",value:D.username}]:[]]},{label:"Token",entries:[{key:"Status",value:A.tokenValid?"valid":"not logged in",color:A.tokenValid?h.statusPass:h.statusFail}]}]}}},{id:"balance",label:"Credit Balance",type:"action",suppressFeedback:!0,onAction:()=>{(async()=>{let v=A.creds.getActiveProfile()??"default",C=A.creds.getDefaultEnv(),D=ae(C);try{let V=A.getBasicAuth(),G=V?null:await A.getToken();if(!V&&!G){_({text:"Not authenticated. Run /login first.",color:h.red});return}let{ControllerClient:q}=await import("./controller-client-7BIK5FYL.js"),de=await(V?new q(D.controllerBaseUrl,{username:V.username,accessKey:V.access_key}):new q(D.controllerBaseUrl,G)).getCreditBalance();_({text:`Credits \u2014 available: ${de.available_credits}, total: ${de.total_credits} (${v} / ${C})`,color:h.green})}catch(V){_({text:`Balance check failed: ${V instanceof Error?V.message:String(V)}`,color:h.red})}S.current&&clearTimeout(S.current),S.current=setTimeout(()=>{_(null),S.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:H.mode}]},{label:"Browser",entries:[{key:"Window",value:`${H.window_size.width}x${H.window_size.height}`},{key:"Chrome Profile",value:H.chrome_profile_path?H.chrome_profile_path.split("/").pop()??H.chrome_profile_path:"(temporary)"}]},{label:"Project",entries:[{key:"Project",value:H.project_name?`${H.project_name} (${H.project_id})`:H.project_id??"(none)"},{key:"Folder",value:H.folder_name?`${H.folder_name} (${H.folder_id})`:H.folder_id??"(none)"},{key:"Default URL",value:ct}]},{label:"Code Export",entries:[{key:"Enabled",value:H.code_export.enabled?"yes":"no"},{key:"Skip Validation",value:H.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",...H.project_id?{onFolderPicker:()=>{}}:{onInfo:()=>({title:"Folder",sections:[{entries:[{key:"Status",value:"Select a project first",color:h.dim}]}]})}},{id:"config-window",label:"Window Size",type:"action",currentValue:`${H.window_size.width}x${H.window_size.height}`,onWindowSizePicker:()=>{}},{id:"config-mode",label:"Mode",type:"select",currentValue:H.mode,options:[{label:"testing",value:"testing"},{label:"action",value:"action"}],onValue:v=>{(v==="action"||v==="testing")&&(c.set("mode",v),Qe(c.load()))}},{id:"config-code-export",label:"Code Export",type:"submenu",currentValue:H.code_export.enabled?"enabled":"disabled",children:[{id:"config-code-export-enabled",label:"Enabled",type:"select",currentValue:H.code_export.enabled?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{c.set("code_export",{...H.code_export,enabled:v==="on"}),Qe(c.load())}},{id:"config-code-export-skip-validation",label:"Skip Validation",type:"select",currentValue:H.code_export.skip_validation?"on":"off",options:[{label:"off",value:"off"},{label:"on",value:"on"}],onValue:v=>{c.set("code_export",{...H.code_export,skip_validation:v==="on"}),Qe(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:`${at(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:at(Ee,"global-memory.md")},{key:"Local",value:"{cwd}/.testmuai/context.md"}]},{label:"Config",entries:[{key:"TUI config",value:at(Ee,"tui-config.json")},{key:"Auth",value:at(Ee,"config.json")},{key:"Sessions",value:`${at(Ee,"sessions")}/`}]}]})},{id:"help-variables",label:"Variables",type:"action",onInfo:()=>({title:"Variables",sections:[{label:"Loading Order (later wins)",entries:[{key:"1. Global",value:`${at(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:at(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:"update",label:x?`Update (${x.current} \u2192 ${x.latest})`:"Update",type:"action",onAction:()=>{k||(T(!0),Z({type:"info",text:"Checking for updates..."}),(async()=>{let{checkForUpdate:v}=await import("./version-check-IF4G6QYT.js"),C=await v();if(!C){Z({type:"info",text:`Already on latest version (${pt})`}),T(!1);return}Z({type:"info",text:`Update available: ${C.current} \u2192 ${C.latest}. Installing...`});let{runSelfUpdate:D}=await import("./updater-L2ORCIIP.js"),V=await D();V.success?Z({type:"info",text:`\u2713 Updated to ${V.toVersion}. Restart kane-cli to use the new version.`}):Z({type:"error",text:`Update failed: ${V.error}`}),T(!1)})())}},{id:"exit",label:"Exit",type:"action",onAction:()=>{$t()}}]},[A,c,H,Z,$t,Te,ze,x,k]),_i=(0,$.useCallback)(w=>{if(M.askingUser){ce((0,P.jsxs)(y,{children:[(0,P.jsx)(f,{color:"#888888",children:"\u2192 "}),(0,P.jsx)(f,{color:"#888888",children:"You answered: "}),(0,P.jsx)(f,{children:w})]})),M.sendAnswer(w);return}if(i.logCommand(w),M.isRunning){Z({type:"error",text:"Run in progress. Ctrl+C to cancel."});return}let R=Ss(w);if(R)switch(R.command){case"login":case"logout":case"whoami":case"profiles":case"balance":case"auth":an("auth");return;case"config":an("config");return;case"help":an("help");return;case"update":{if(M.isRunning){Z({type:"error",text:"Cannot update while a run is in progress."});return}Z({type:"info",text:"Checking for updates..."}),(async()=>{try{let{checkForUpdate:v}=await import("./version-check-IF4G6QYT.js"),C=await v();if(!C){Z({type:"info",text:`Already on latest version (${pt})`});return}Z({type:"info",text:`Update available: ${C.current} \u2192 ${C.latest}. Installing...`});let{runSelfUpdate:D}=await import("./updater-L2ORCIIP.js"),V=await D();V.success?Z({type:"info",text:`Updated to ${V.toVersion}. Restart kane-cli to use the new version.`}):Z({type:"error",text:`Update failed: ${V.error}`})}catch(v){Z({type:"error",text:`Update failed: ${v instanceof Error?v.message:String(v)}`})}})();return}case"summary":{let v=i.getFlows();if(v.length===0){Z({type:"info",text:"No runs yet in this session."});return}let C=R.args.index?parseInt(R.args.index,10):void 0;if(C!==void 0&&!i.getFlow(C)){Z({type:"error",text:`No flow at index ${C}. ${v.length} flow${v.length===1?"":"s"} available. Use /summary to see all.`});return}ce((0,P.jsx)(ao,{flows:v,filterIndex:C}));return}case"new":Po();return;case"cancel":M.cancelRun(),Z({type:"info",text:"Run cancelled."});return;case"clear":return;case"exit":$t();return;default:Z({type:"error",text:`Unknown command: /${R.command}`});return}if(w.trim().toLowerCase()==="exit"){$t();return}ce((0,P.jsxs)(y,{children:[(0,P.jsx)(f,{color:"#b388ff",children:"\u276F "}),(0,P.jsx)(f,{children:w})]})),Io(w,ct)},[M,Z,ce,i,Io,$t,Po]),jo=A.getAuthInfo(),xi=jo?jo.method==="basic"?"basic auth":"oauth":"not logged in";return(0,P.jsxs)(y,{flexDirection:"column",children:[ye.length>0&&(0,P.jsx)(Kt,{items:ye,children:w=>(0,P.jsx)(y,{paddingX:1,children:w.content},w.id)}),!g&&!Tn&&(0,P.jsx)(Xo,{onComplete:()=>{let w=A.creds.getActiveProfile(),R=A.creds.getDefaultEnv(),v=w?A.creds.loadCredentials(w,R):null,C=w?A.creds.loadBasicAuth(w,R):null,D=!!(v||C),V=C?.username??w??null;ce((0,P.jsx)(Un,{size:"full",helmetVisibleRows:8,textVisibleRows:7,showMeta:!0,version:pt,authenticated:D,user:V})),br(!0);let G=(q,ee,de,xe)=>{i.log(q,ee,de,xe)};rr(A.creds,G).then(q=>{if(q.status==="authenticated"){let{profile:ee,env:de,tmsCreds:xe}=q.result;A.creds.setActiveProfile(ee),A.creds.setDefaultEnv(de),ze(),we(xe),ke("ready"),p(!0)}else q.status==="needs_pick"?(dt(q.profiles),ke("pick")):ke("login")}).catch(q=>{i.log("error","STARTUP_GATE_ERROR","Auth gate failed",{error:String(q)}),ke("login")}),r&&r.then(q=>{q&&(E(q),Z({type:"info",text:`Update available: ${q.current} \u2192 ${q.latest} \u2014 select Update from menu or run \`kane-cli update\``}))}).catch(()=>{})}}),!g&&De==="booting"&&Tn&&(0,P.jsx)(y,{paddingX:1,children:(0,P.jsx)(f,{color:"yellow",children:"Checking authentication..."})}),!g&&De==="pick"&&(0,P.jsx)(_a,{profiles:Wt,onCancel:()=>ke("login"),onSelect:async(w,R)=>{A.creds.setActiveProfile(w),A.creds.setDefaultEnv(R),ze(),on(!0);let v=(C,D,V,G)=>{i.log(C,D,V,G)};try{let C=await Xt(A.creds,w,R,v);on(!1),C.status==="authenticated"?(Je(w,R),ke("ready"),p(!0)):ke("login")}catch{on(!1),ke("login")}},validating:xr}),!g&&De==="login"&&!W&&(0,P.jsx)(zt,{devMode:process.env.KANE_DEV_MODE==="1",profiles:A.creds.listProfiles(),onBasicLogin:(w,R,v,C)=>{A.creds.saveBasicAuth(w,R,{username:v,access_key:C}),A.creds.setActiveProfile(w),A.creds.setDefaultEnv(R),A.setTokenValid(!0),ze()},onOAuthLogin:async(w,R)=>{A.creds.setDefaultEnv(R),await A.login(w),ze()},onComplete:(w,R)=>{yt(R).then(()=>{ze(),Se({phase:"project",profile:w,env:R})}).catch(()=>{Se({phase:"project",profile:w,env:R})})},onCancel:()=>{Y(0,"Login cancelled at startup")}}),!g&&De==="login"&&W?.phase==="project"&&(0,P.jsx)(Rt,{resolver:A.getResolver(),currentProjectId:null,env:W.env,onSelect:(w,R)=>{A.creds.saveProfileConfig(W.profile,W.env,{project_id:w,project_name:R}),Se({...W,phase:"folder"})},onCancel:()=>{Je(W.profile,W.env),Se(null),ke("ready"),p(!0)}}),!g&&De==="login"&&W?.phase==="folder"&&(0,P.jsx)(At,{resolver:A.getResolver(),projectId:A.creds.loadProfileConfig(W.profile,W.env)?.project_id??"",currentFolderId:null,env:W.env,onSelect:(w,R)=>{A.creds.saveProfileConfig(W.profile,W.env,{folder_id:w,folder_name:R}),Je(W.profile,W.env),Se(null),ke("ready"),p(!0)},onCancel:async()=>{let w=A.creds.loadProfileConfig(W.profile,W.env);if(w?.project_id)try{let v=A.getResolver()?.cached;if(v){let C=ae(W.env),V=await new ot(C.tmsBaseUrl,v.username,v.access_key).getDefaultFolder(w.project_id);V&&A.creds.saveProfileConfig(W.profile,W.env,{folder_id:V,folder_name:"Default"})}}catch{}Je(W.profile,W.env),Se(null),ke("ready"),p(!0)}}),g&&In==="menu"&&!fe&&(0,P.jsx)(y,{marginBottom:1,children:(0,P.jsxs)(y,{borderStyle:"round",borderColor:"#dc4e08",paddingX:2,children:[(0,P.jsx)(f,{color:"#ff9500",bold:!0,children:"KaneAI CLI"}),(0,P.jsx)(f,{color:h.dimmed,children:" \u2502 "}),(0,P.jsx)(f,{color:"#ff9500",children:H.model}),(0,P.jsx)(f,{color:h.dimmed,children:" \u2502 "}),(0,P.jsx)(f,{color:h.dimmed,children:xi}),(0,P.jsx)(f,{color:h.dimmed,children:" \u2502 "}),(0,P.jsxs)(f,{color:h.dimmed,children:[Gt??"no profile","/",me]})]})}),g&&!fe&&(0,P.jsxs)(y,{flexDirection:"column",flexGrow:1,children:[In==="menu"&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)(zr,{items:Do,onRunSelected:()=>fi("chat"),renderLoginWizard:w=>{let R=W?.phase??"wizard";if(R==="project")return(0,P.jsx)(Rt,{resolver:A.getResolver(),currentProjectId:null,env:W.env,onSelect:(v,C)=>{A.creds.saveProfileConfig(W.profile,W.env,{project_id:v,project_name:C}),Se(D=>D?{...D,phase:"folder"}:null)},onCancel:()=>{Je(W.profile,W.env),Se(null),w()}});if(R==="folder"){let v=A.creds.loadProfileConfig(W.profile,W.env);return(0,P.jsx)(At,{resolver:A.getResolver(),projectId:v?.project_id??"",currentFolderId:null,env:W.env,onSelect:(C,D)=>{A.creds.saveProfileConfig(W.profile,W.env,{folder_id:C,folder_name:D}),Je(W.profile,W.env),Se(null),w()},onCancel:async()=>{let C=A.creds.loadProfileConfig(W.profile,W.env);if(C?.project_id)try{let V=A.getResolver()?.cached;if(V){let G=ae(W.env),ee=await new ot(G.tmsBaseUrl,V.username,V.access_key).getDefaultFolder(C.project_id);ee&&A.creds.saveProfileConfig(W.profile,W.env,{folder_id:ee,folder_name:"Default"})}}catch{}Je(W.profile,W.env),Se(null),w()}})}return(0,P.jsx)(zt,{devMode:process.env.KANE_DEV_MODE==="1",profiles:A.creds.listProfiles(),onBasicLogin:(v,C,D,V)=>{A.creds.saveBasicAuth(v,C,{username:D,access_key:V}),A.creds.setActiveProfile(v),A.creds.setDefaultEnv(C),A.setTokenValid(!0),ze()},onOAuthLogin:async(v,C)=>{A.creds.setDefaultEnv(C),await A.login(v),ze()},onComplete:(v,C)=>{yt(C).then(()=>{Se({phase:"project",profile:v,env:C})}).catch(()=>{Se({phase:"project",profile:v,env:C})})},onCancel:()=>{Se(null),w()}})},renderProfilesView:w=>(0,P.jsx)(Dr,{creds:A.creds,onSwitch:(R,v)=>{A.creds.setActiveProfile(R),A.creds.setDefaultEnv(v),Je(R,v),ze(),yt(v).catch(()=>{}),Z({type:"info",text:`Switched to ${R} [${v}]`})},onCancel:w}),renderChromeProfilePicker:w=>(0,P.jsx)(jr,{currentPath:H.chrome_profile_path,onSelect:R=>{c.set("chrome_profile_path",R),Qe(c.load())},onCancel:w}),renderProjectPicker:w=>(0,P.jsx)(Rt,{resolver:A.getResolver(),currentProjectId:H.project_id,env:me,onSelect:(R,v)=>{c.save({project_id:R,project_name:v});let C=A.creds.getActiveProfile(),D=A.creds.getDefaultEnv();C&&A.creds.saveProfileConfig(C,D,{project_id:R,project_name:v}),Qe(c.load()),w()},onCancel:w}),renderFolderPicker:w=>(0,P.jsx)(At,{resolver:A.getResolver(),projectId:H.project_id??"",currentFolderId:H.folder_id,env:me,onSelect:(R,v)=>{c.save({folder_id:R,folder_name:v});let C=A.creds.getActiveProfile(),D=A.creds.getDefaultEnv();C&&A.creds.saveProfileConfig(C,D,{folder_id:R,folder_name:v}),Qe(c.load()),w()},onCancel:w}),renderWindowSizePicker:w=>(0,P.jsx)(Zr,{currentWidth:H.window_size.width,currentHeight:H.window_size.height,onSelect:(R,v)=>{c.set("window_size",{width:R,height:v}),Qe(c.load()),w()},onCancel:w})}),b&&(0,P.jsx)(y,{paddingX:1,marginTop:1,children:(0,P.jsx)(f,{color:b.color,children:b.text})})]}),In==="chat"&&(0,P.jsxs)(P.Fragment,{children:[(()=>{let w=qn({isRunning:M.isRunning,bifurcationInfo:M.bifurcationInfo,steps:M.steps,cmInitCounts:M.cmInitCounts});return w?(0,P.jsx)(Kn,{label:w.label,hasBifurcation:w.hasBifurcation}):null})(),M.isRunning&&M.steps.length>0&&(0,P.jsx)(Wn,{steps:M.steps,bifurcated:!!M.bifurcationInfo&&!M.bifurcationInfo.isSingleFlow,flows:M.bifurcationInfo?.flows,cmInitCounts:M.cmInitCounts,onStepCommit:ce},`run-${ne.current}`),sn&&!M.isRunning&&(()=>{let w=Do.find(R=>R.id===sn);return w?.children?(0,P.jsx)(zr,{items:w.children,onRunSelected:()=>an(null),onDismiss:()=>an(null),renderLoginWizard:R=>{let v=W?.phase??"wizard";if(v==="project")return(0,P.jsx)(Rt,{resolver:A.getResolver(),currentProjectId:null,env:W.env,onSelect:(C,D)=>{A.creds.saveProfileConfig(W.profile,W.env,{project_id:C,project_name:D}),Se(V=>V?{...V,phase:"folder"}:null)},onCancel:()=>{Je(W.profile,W.env),Se(null),R()}});if(v==="folder"){let C=A.creds.loadProfileConfig(W.profile,W.env);return(0,P.jsx)(At,{resolver:A.getResolver(),projectId:C?.project_id??"",currentFolderId:null,env:W.env,onSelect:(D,V)=>{A.creds.saveProfileConfig(W.profile,W.env,{folder_id:D,folder_name:V}),Je(W.profile,W.env),Se(null),R()},onCancel:async()=>{let D=A.creds.loadProfileConfig(W.profile,W.env);if(D?.project_id)try{let G=A.getResolver()?.cached;if(G){let q=ae(W.env),de=await new ot(q.tmsBaseUrl,G.username,G.access_key).getDefaultFolder(D.project_id);de&&A.creds.saveProfileConfig(W.profile,W.env,{folder_id:de,folder_name:"Default"})}}catch{}Je(W.profile,W.env),Se(null),R()}})}return(0,P.jsx)(zt,{devMode:process.env.KANE_DEV_MODE==="1",profiles:A.creds.listProfiles(),onBasicLogin:(C,D,V,G)=>{A.creds.saveBasicAuth(C,D,{username:V,access_key:G}),A.creds.setActiveProfile(C),A.creds.setDefaultEnv(D),A.setTokenValid(!0),ze()},onOAuthLogin:async(C,D)=>{A.creds.setDefaultEnv(D),await A.login(C),ze()},onComplete:(C,D)=>{yt(D).then(()=>{Se({phase:"project",profile:C,env:D})}).catch(()=>{Se({phase:"project",profile:C,env:D})})},onCancel:()=>{Se(null),R()}})},renderProfilesView:R=>(0,P.jsx)(Dr,{creds:A.creds,onSwitch:(v,C)=>{A.creds.setActiveProfile(v),A.creds.setDefaultEnv(C),Je(v,C),ze(),yt(C).catch(()=>{}),Z({type:"info",text:`Switched to ${v} [${C}]`}),R()},onCancel:R}),renderChromeProfilePicker:R=>(0,P.jsx)(jr,{currentPath:H.chrome_profile_path,onSelect:v=>{c.save({chrome_profile_path:v}),Qe(c.load()),R()},onCancel:R}),renderProjectPicker:R=>(0,P.jsx)(Rt,{resolver:A.getResolver(),currentProjectId:H.project_id,env:me,onSelect:(v,C)=>{c.save({project_id:v,project_name:C});let D=A.creds.getActiveProfile();D&&A.creds.saveProfileConfig(D,me,{project_id:v,project_name:C}),Qe(c.load()),R()},onCancel:R}),renderFolderPicker:R=>(0,P.jsx)(At,{resolver:A.getResolver(),projectId:H.project_id??"",currentFolderId:H.folder_id,env:me,onSelect:(v,C)=>{c.save({folder_id:v,folder_name:C});let D=A.creds.getActiveProfile();D&&A.creds.saveProfileConfig(D,me,{folder_id:v,folder_name:C}),Qe(c.load()),R()},onCancel:R}),renderWindowSizePicker:R=>(0,P.jsx)(Zr,{currentWidth:H.window_size.width,currentHeight:H.window_size.height,onSelect:(v,C)=>{c.set("window_size",{width:v,height:C}),Qe(c.load()),R()},onCancel:R})},sn):null})(),sn&&b&&(0,P.jsx)(y,{paddingX:1,marginTop:1,children:(0,P.jsx)(f,{color:b.color,children:b.text})}),!sn&&(0,P.jsx)(Nn,{onSubmit:_i,onEscape:void 0,history:mi,commands:Es,placeholder:M.askingUser?"Type your answer...":M.isRunning?"Run in progress... Ctrl+C to cancel":"Type an objective... (/ = commands)"})]})]}),g&&fe&&L&&(0,P.jsxs)(P.Fragment,{children:[(0,P.jsx)($r,{steps:J,status:L.status,testUrl:L.testUrl,error:L.error}),L.status==="success"&&(0,P.jsx)(Lr,{shareableLink:L.testUrl,testCaseLink:L.testCaseLink,codeExportDir:L.codeExportDir,autoExit:!1})]}),rn&&(0,P.jsx)(Wo,{onSubmit:vi}),nt&&L&&(0,P.jsx)($r,{steps:J,status:L.status,error:L.error}),g&&!fe&&(0,P.jsx)(Ko,{profile:Gt,environment:me,model:H.model,tokenValid:A.tokenValid,sessionId:i.sessionId,runCount:te,viewMode:In})]})}function _a({profiles:s,onSelect:e,onCancel:t,validating:n}){let[r,o]=(0,$.useState)(0);return $e((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,P.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,P.jsx)(f,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,P.jsx)(y,{marginTop:1,flexDirection:"column",children:s.map((a,l)=>(0,P.jsxs)(f,{children:[l===r?"\u276F ":" ",(0,P.jsx)(f,{color:l===r?"#ff9500":"white",bold:l===r,children:a.profile}),(0,P.jsxs)(f,{color:"gray",children:[" [",a.env,"]"]})]},`${a.profile}-${a.env}`))}),n&&(0,P.jsx)(y,{marginTop:1,children:(0,P.jsx)(f,{color:"yellow",children:"Validating credentials..."})}),!n&&(0,P.jsx)(y,{marginTop:1,children:(0,P.jsx)(f,{color:"gray",children:"Esc = new login"})})]})}var be=N(je(),1);var ve=N(Q(),1);function Us({resultRef:s}){let{exit:e}=qt(),t=(0,be.useRef)(new Ne),n=(0,be.useRef)(new Ze),r=(0,be.useRef)(new _t),o=t.current,a=n.current,l=r.current,i=Bn(),[c,d]=(0,be.useState)("gate"),[m,g]=(0,be.useState)(null),[p,x]=(0,be.useState)(null),[E,k]=(0,be.useState)(null),[T,O]=(0,be.useState)(null),I=(0,be.useCallback)((U,B,u,b)=>l.log(U,B,u,b),[l]),j=(0,be.useCallback)((U,B)=>{let u=U?o.loadProfileConfig(U,B):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]);$e((U,B)=>{B.ctrl&&U==="c"&&Y(0,"Ctrl+C exit")});let se=(0,be.useRef)(!1);be.default.useEffect(()=>{se.current||(se.current=!0,rr(o,I).then(U=>{g(U),U.status==="authenticated"?(j(U.result.profile,U.result.env),d("input")):U.status==="needs_pick"?d("pick"):(x(U.profile??null),k(U.env??null),d("login"))}).catch(U=>{O(`Auth check failed: ${U instanceof Error?U.message:String(U)}`)}))},[o,I]);let te=(0,be.useCallback)(U=>{s.current={objective:U},e()},[s,e]),le=(0,be.useCallback)(async(U,B)=>{o.setActiveProfile(U),o.setDefaultEnv(B),(await Xt(o,U,B,I)).status==="authenticated"?(j(U,B),d("input")):(x(U),k(B),d("login"))},[o,I,j]),fe=(0,be.useCallback)(()=>{let U=o.getActiveProfile(),B=o.getDefaultEnv();if(!U)return null;let u=ae(B),b=o.loadBasicAuth(U,B);return new ut(u.controllerBaseUrl,async()=>o.loadCredentials(U,B)?.access_token??null,b,I)},[o,I]);if(c==="gate")return(0,ve.jsx)(y,{paddingX:1,children:(0,ve.jsx)(f,{color:"yellow",children:"Checking authentication..."})});if(T)return(0,ve.jsxs)(y,{flexDirection:"column",paddingX:1,children:[(0,ve.jsx)(f,{color:"red",children:T}),(0,ve.jsx)(f,{color:"gray",children:"Press Ctrl+C to exit."})]});if(c==="pick"&&m?.status==="needs_pick")return(0,ve.jsx)(xa,{profiles:m.profiles,onSelect:le});if(c==="login"||c==="login-project"||c==="login-folder"){if(c==="login-project")return(0,ve.jsx)(Rt,{resolver:fe(),currentProjectId:null,env:E??"prod",onSelect:(U,B)=>{let u=p??o.getActiveProfile()??"default",b=E??o.getDefaultEnv();o.saveProfileConfig(u,b,{project_id:U,project_name:B}),d("login-folder")},onCancel:()=>{let U=p??o.getActiveProfile()??"default",B=E??o.getDefaultEnv();j(U,B),d("input")}});if(c==="login-folder"){let U=p??o.getActiveProfile()??"default",B=E??o.getDefaultEnv(),u=o.loadProfileConfig(U,B);return(0,ve.jsx)(At,{resolver:fe(),projectId:u?.project_id??"",currentFolderId:null,env:B,onSelect:(b,_)=>{o.saveProfileConfig(U,B,{folder_id:b,folder_name:_}),j(U,B),d("input")},onCancel:async()=>{if(u?.project_id)try{let b=ae(B),_=o.loadBasicAuth(U,B);if(_){let L=await new ot(b.tmsBaseUrl,_.username,_.access_key).getDefaultFolder(u.project_id);L&&o.saveProfileConfig(U,B,{folder_id:L,folder_name:"Default"})}}catch{}j(U,B),d("input")}})}return(0,ve.jsx)(zt,{devMode:process.env.KANE_DEV_MODE==="1",profiles:o.listProfiles(),onBasicLogin:(U,B,u,b)=>{o.saveBasicAuth(U,B,{username:u,access_key:b}),o.setActiveProfile(U),o.setDefaultEnv(B)},onOAuthLogin:async(U,B)=>{let{LoginFlow:u}=await import("./login-flow-47Y4Y2UB.js");o.setDefaultEnv(B),o.setActiveProfile(U),await new u(U,B,o).login()},onComplete:(U,B)=>{x(U),k(B),o.setActiveProfile(U),o.setDefaultEnv(B),d("login-project")},onCancel:()=>{Y(0,"Login cancelled")}})}return c==="input"?(0,ve.jsx)(Nn,{onSubmit:te,onEscape:()=>Y(0,"User pressed Escape"),history:i,placeholder:"Type an objective..."}):(0,ve.jsx)(ve.Fragment,{})}function xa({profiles:s,onSelect:e}){let[t,n]=(0,be.useState)(0),[r,o]=(0,be.useState)(!1);return $e((a,l)=>{if(!r){if(l.escape){Y(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 Zs=N(Qs(),1),{program:Sf,createCommand:Ef,createArgument:Cf,createOption:Rf,CommanderError:Af,InvalidArgumentError:kf,InvalidOptionArgumentError:Tf,Command:ei,Argument:If,Option:tn,Help:Pf}=Zs.default;import{join as Nt}from"path";var ii=N(je(),1);var Xe=N(je(),1);var Dt=N(Q(),1);function ti({steps:s,bifurcationInfo:e,perFlowMetadata:t}){return!e||e.isSingleFlow||!t||t.length<=1?null:(0,Dt.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,x)=>p+(x.duration??0),0),m=o?.status==="failed"?"failed":"passed",g=e.flows[r]??o?.objective??`Flow ${r+1}`;return(0,Dt.jsxs)(y,{flexDirection:"column",marginTop:r>0?1:0,children:[(0,Dt.jsxs)(y,{marginLeft:1,children:[(0,Dt.jsx)(f,{color:"#b388ff",bold:!0,children:"Flow "+(r+1)+": "}),(0,Dt.jsx)(f,{color:"#b388ff",children:g})]}),(0,Dt.jsx)(Yt,{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 Ke=N(Q(),1);function ni({message:s,code:e,remediation:t,docsUrl:n}){return(0,Ke.jsx)(Go,{title:"Error",variant:"error",children:(0,Ke.jsxs)(y,{flexDirection:"column",paddingY:1,children:[(0,Ke.jsxs)(f,{color:h.red,bold:!0,children:[" \u2717 ",s]}),e&&(0,Ke.jsxs)(y,{marginTop:0,marginLeft:5,children:[(0,Ke.jsx)(f,{color:h.muted,children:"Code: "}),(0,Ke.jsx)(f,{color:h.dimmed,children:e})]}),t&&(0,Ke.jsxs)(y,{flexDirection:"column",marginTop:1,marginLeft:5,children:[(0,Ke.jsx)(f,{color:h.green,bold:!0,children:"Fix:"}),(0,Ke.jsxs)(f,{color:h.cyan,children:["$ ",t]})]}),n&&(0,Ke.jsxs)(y,{marginTop:1,marginLeft:5,children:[(0,Ke.jsx)(f,{color:h.muted,children:"Docs: "}),(0,Ke.jsx)(f,{color:h.cyan,underline:!0,children:n})]})]})})}var Ce=N(Q(),1);function ri({config:s,spawnOpts:e,cancelRef:t,banner:n,onComplete:r,onStepEnd:o}){let{exit:a}=qt(),l=nr(o),i=(0,Xe.useRef)(!1),c=(0,Xe.useRef)(!1),[d,m]=(0,Xe.useState)("");(0,Xe.useEffect)(()=>{i.current||(i.current=!0,l.startRun(s,e))},[s,e,l]),(0,Xe.useEffect)(()=>{t&&(t.current=()=>l.cancelRun())},[t,l]);let g=(0,Xe.useRef)(0);$e((E,k)=>{k.ctrl&&E==="c"&&(l.isRunning?(g.current++,g.current>=2?a():l.cancelRun()):a())}),$e((E,k)=>{l.askingUser&&(k.return?(l.sendAnswer(d),m("")):k.backspace||k.delete?m(T=>T.slice(0,-1)):E&&!k.ctrl&&!k.meta&&m(T=>T+E))},{isActive:!!l.askingUser}),(0,Xe.useEffect)(()=>{if(!l.isRunning&&l.lastRunEnd&&!c.current){c.current=!0;let{passed:E,failed:k,total:T}=wn(l.steps),O=l.bifurcationInfo;r({lastRunEnd:l.lastRunEnd,stepsPassed:E,stepsFailed:k,stepsTotal:T,hadError:!1,bifurcationFlows:O&&!O.isSingleFlow?O.flows:null}),a()}},[l.isRunning,l.lastRunEnd,l.steps,r,a]),(0,Xe.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:E,failed:k,total:T}=wn(l.steps);return{status:l.lastRunEnd.status,duration:l.lastRunEnd.duration??0,summary:l.lastRunEnd.summary??"",stepsPassed:E,stepsFailed:k,stepsTotal:T,reason:l.lastRunEnd.reason,finalState:l.lastRunEnd.final_state,creditsConsumed:l.lastRunEnd.credits_consumed}})():null,x=(0,Xe.useMemo)(()=>n?[{key:"banner",...n}]:[],[n]);return(0,Ce.jsxs)(y,{flexDirection:"column",children:[(0,Ce.jsx)(Kt,{items:x,children:E=>(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:h.dimmed,children:" \u2502 "}),(0,Ce.jsx)(f,{color:h.cyan,children:E.model}),(0,Ce.jsx)(f,{color:h.dimmed,children:" \u2502 "}),(0,Ce.jsx)(f,{color:h.dimmed,children:E.auth})]}),E.status?.map((k,T)=>(0,Ce.jsx)(f,{color:h.dimmed,children:k},T))]},E.key)}),(()=>{let E=qn({isRunning:l.isRunning,bifurcationInfo:l.bifurcationInfo,steps:l.steps,cmInitCounts:l.cmInitCounts});return E?(0,Ce.jsx)(Kn,{label:E.label,hasBifurcation:E.hasBifurcation}):null})(),l.steps.length>0&&(0,Ce.jsx)(Wn,{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:h.yellow,children:['Agent is asking: "',l.askingUser,'"']}),(0,Ce.jsxs)(f,{children:["> ",d,"\u2588"]})]}),l.runError&&(0,Ce.jsx)(ni,{message:l.runError,code:"RUNNER_ERROR"}),p&&l.lastRunEnd&&(0,Ce.jsx)(ti,{steps:l.steps,bifurcationInfo:l.bifurcationInfo,perFlowMetadata:l.lastRunEnd.per_flow_metadata??[]}),p&&(0,Ce.jsx)(Yt,{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 $a}from"readline";function nn(s){process.stdout.write(JSON.stringify(s)+`
|
|
53
|
+
`)}async function oi(s,e,t){let n=tr(s,e);Vn().then(m=>{m&&nn({type:"update_available",current:m.current,latest:m.latest,severity:m.severity})}).catch(()=>{});let r=$a({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),nn(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),nn(p);let x=d?Math.max(0,c-1):0;t?.onStepEnd?.(g.index,x);break}case"bifurcation":{let g=m,p=g.flows??[],x=g.count??p.length;(g.is_single_flow??x<=1)||(i=p,d=!0,c=0),nn({type:"bifurcation",flows:p,count:x});break}case"ask_user":{let g=m;nn({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,nn({type:"error",message:m.message});break}default:break}return r.close(),await n.exited,{lastRunEnd:o,stepsTotal:l,hadError:a,bifurcationFlows:i}}var Ut=class extends Error{constructor(t,n){super(t);this.code=n;this.name="AuthError"}};async function hr(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:x}=e.getActiveCredentials();if(!p)throw new Ut("Not authenticated \u2014 no credentials found","not_authenticated");if(l=p.access_token,p.expires_at-Date.now()/1e3<300)try{let k=await Jn({creds:e,profile:x,env:t,credentials:p});k&&(l=k.accessToken,o("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(k){let T=k instanceof Error?k.message:String(k);throw o("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:T}),new Ut(`Token refresh failed: ${T}`,"refresh_failed")}}let i=ae(t),c=async()=>l,d=a?{username:a.username,access_key:a.access_key}:null,m=new ut(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 La,rmSync as Va}from"fs";import{join as Ba}from"path";import{tmpdir as Fa}from"os";async function si(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=La(Ba(Fa(),"kane-clean-")),e=t;let r=t;it("tempDir",()=>{try{Va(r,{recursive:!0,force:!0})}catch{}})}let n=await Yn({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 An(s){let e=new ei;if(e.name("kane-cli").version(pt),s[0]==="--help"||s[0]==="-h"||s[0]==="help"){(async()=>{let{HelpView:n}=await import("./HelpView-GAECHNPW.js"),{render:r}=await import("./build-MFETN2BY.js"),o=await import("./react-QWOAB3TB.js"),{waitUntilExit:a}=r(o.default.createElement(n));await a(),Y(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 tn("--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 tn("--model <name>","Model").default("v16-alpha").hideHelp()).option("--chrome-profile <path>","Chrome profile path").action(async n=>{let r=new Ne,o=new Ze,a=n.env,l=n.profile;if(!process.stdin.isTTY||n.oauth||n.username){if(r.setDefaultEnv(a),n.oauth?(await new mn(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"),Y(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 T=await hr({creds:r,env:a,log:()=>{}});if(T.resolvedCreds){let{TmsClient:O}=await import("./tms-client-VH42IFUF.js"),se=(await new O(ae(a).tmsBaseUrl,T.resolvedCreds.username,T.resolvedCreds.access_key).listProjects()).find(te=>te.name.toLowerCase().includes("kaneai"));se&&(o.set("project_id",se.project_id),console.log(`Auto-selected project: ${se.name} (${se.project_id})`))}}catch(k){console.warn(`Could not auto-select project: ${k instanceof Error?k.message:k}`)}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-POE64KP6.js"),{ProjectPicker:c}=await import("./ProjectPicker-FTUZCSBL.js"),{FolderPicker:d}=await import("./FolderPicker-JMDO2YEV.js"),{render:m}=await import("./build-MFETN2BY.js"),g=await import("./react-QWOAB3TB.js"),p=!1;if(await new Promise(k=>{let{unmount:T}=m(g.default.createElement(i,{devMode:process.env.KANE_DEV_MODE==="1",profiles:r.listProfiles(),onBasicLogin:(O,I,j,se)=>{r.saveBasicAuth(O,I,{username:j,access_key:se}),r.setActiveProfile(O),r.setDefaultEnv(I),a=I,l=O},onOAuthLogin:async(O,I)=>{r.setDefaultEnv(I),await new mn(O,I,r).login(),a=I,l=O},onComplete:()=>{T(),k()},onCancel:()=>{p=!0,T(),k()}}))}),p)return;let x;try{x=(await hr({creds:r,env:a,log:()=>{}})).resolver}catch{console.log("Could not resolve credentials for project setup. Run: kane-cli login");return}if(!x.cached){console.log("Could not resolve credentials for project setup. Run: kane-cli login");return}let E=null;await new Promise(k=>{let{unmount:T}=m(g.default.createElement(c,{resolver:x,currentProjectId:o.load().project_id,env:a,onSelect:(O,I)=>{o.set("project_id",O),o.set("project_name",I),E=O,console.log(`Project set to ${I} (${O})`),T(),k()},onCancel:()=>{T(),k()}}))}),E&&(await new Promise(k=>{let{unmount:T}=m(g.default.createElement(d,{resolver:x,projectId:E,currentFolderId:o.load().folder_id,env:a,onSelect:(O,I)=>{o.set("folder_id",O),o.set("folder_name",I),console.log(`Folder set to ${I} (${O})`),T(),k()},onCancel:()=>{T(),k()}}))}),Y(0,"Login setup complete"))}),e.command("logout").action(async()=>{let n=new Ne,r=n.getActiveProfile();if(!r){console.log("No active profile to logout");return}let o=n.getDefaultEnv(),a=await Xn(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 Ne,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 T=l.expires_at,O=Date.now()/1e3;m=T>O?"valid":"expired",g=new Date(T*1e3).toISOString().slice(0,10)}else m="missing";let{WhoamiView:p}=await import("./WhoamiView-FSFBRPAS.js"),{render:x}=await import("./build-MFETN2BY.js"),E=await import("./react-QWOAB3TB.js"),{waitUntilExit:k}=x(E.default.createElement(p,{profile:o,env:a,authenticated:c!=="none",authMethod:c,username:d,tokenStatus:m,expiresAt:g}));await k()}),e.command("config <action> [value]").action(async(n,r)=>{let o=new Ze,a=new Ne;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-HFR7OLBN.js"),{render:x}=await import("./build-MFETN2BY.js"),E=await import("./react-QWOAB3TB.js"),{waitUntilExit:k}=x(E.default.createElement(p,{model:l.model,mode:l.mode,authLabel:g,profile:i,env:c,defaultUrl:ct,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 k()}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'."),Y(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>"),Y(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-TSTGICKC.js"),{render:i}=await import("./build-MFETN2BY.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>"),Y(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-FTUZCSBL.js"),{AuthResolver:m}=await import("./resolver-QLDOAIXU.js"),{render:g}=await import("./build-MFETN2BY.js"),p=await import("./react-QWOAB3TB.js"),x=new m(i.controllerBaseUrl,async()=>null,c);await x.resolve(),await new Promise(E=>{let{unmount:k}=g(p.default.createElement(d,{resolver:x,currentProjectId:o.load().project_id,env:l,onSelect:(T,O)=>{o.set("project_id",T),o.set("project_name",O),console.log(`Project set to ${O} (${T})`),k(),E()},onCancel:()=>{k(),E()}}))})}else if(n==="folder"){if(r||!process.stdin.isTTY){if(r||(console.error("Usage: kane-cli config folder <folder-id>"),Y(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-JMDO2YEV.js"),{AuthResolver:g}=await import("./resolver-QLDOAIXU.js"),{render:p}=await import("./build-MFETN2BY.js"),x=await import("./react-QWOAB3TB.js"),E=new g(c.controllerBaseUrl,async()=>null,d);await E.resolve(),await new Promise(k=>{let{unmount:T}=p(x.default.createElement(m,{resolver:E,projectId:l.project_id,currentFolderId:l.folder_id,env:i,onSelect:(O,I)=>{o.set("folder_id",O),o.set("folder_name",I),console.log(`Folder set to ${I} (${O})`),T(),k()},onCancel:()=>{T(),k()}}))})}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: ${Nt(Ee,"global-memory.md")})`).option("--local-context <file>","Override local context markdown (default: .testmuai/context.md in cwd)").addOption(new tn("--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 tn("--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 tn("--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",`
|
|
46
54
|
Variables:
|
|
47
55
|
Variables are loaded in order (later wins):
|
|
48
|
-
1. Global: ${
|
|
56
|
+
1. Global: ${Nt(Ee,"variables")}/*.json
|
|
49
57
|
2. Local: {cwd}/.testmuai/variables/*.json
|
|
50
58
|
3. File: --variables-file <path>
|
|
51
59
|
4. Inline: --variables '{"key": {"value": "...", "secret": false}}'
|
|
@@ -60,17 +68,19 @@ Variables:
|
|
|
60
68
|
|
|
61
69
|
Context Files:
|
|
62
70
|
Context files provide additional instructions to the agent.
|
|
63
|
-
Global: ${
|
|
71
|
+
Global: ${Nt(Ee,"global-memory.md")}
|
|
64
72
|
Local: {cwd}/.testmuai/context.md
|
|
65
73
|
|
|
66
74
|
Override with --global-context / --local-context flags.
|
|
67
|
-
`).action(async(r
|
|
68
|
-
`),
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
`),console.log("Updating @testmuai/kane-cli...");let a=await n(o=>{process.stdout.write(o)});a.success?(console.log(`
|
|
75
|
+
`).action(async(n,r)=>{try{let o=new Ne,l=new Ze().load(),i;if(r.mode===void 0)i=l.mode==="action"?"action":"testing";else if(r.mode==="action"||r.mode==="testing")i=r.mode;else{console.error("Invalid --mode. Must be 'action' or 'testing'."),Y(2,"Invalid --mode");return}if(!(r.username&&r.accessKey)){let F=o.getActiveProfile(),ne=o.getDefaultEnv();F&&(o.loadBasicAuth(F,ne)||o.loadCredentials(F,ne))||(console.error("Not authenticated. Run: kane-cli login --oauth, or kane-cli login --username <user> --access-key <key>"),Y(1,"Not authenticated"))}let c=`${o.getActiveProfile()??"no profile"}/${o.getDefaultEnv()}`,d=[],m=r.env??o.getDefaultEnv(),g=null,p=[],x=(F,ne,re,pe)=>{g?g(F,ne,re,pe):p.push([F,ne,re,pe])},E;try{E=await hr({creds:o,env:m,usernameFlag:r.username,accessKeyFlag:r.accessKey,log:x})}catch(F){throw F instanceof Ut&&(console.error(F.code==="not_authenticated"?"Not authenticated. Run: kane-cli login":"Token refresh failed. Run: kane-cli login"),Y(2,F.code==="not_authenticated"?"Not authenticated":"Token refresh failed")),F}let k=!!E.basicAuth,T=E.basicAuth?.username,O=E.basicAuth?.access_key,I=E.token,j=E.resolver,se=E.resolvedCreds;E.basicAuth&&d.push(`Auth: ${E.basicAuth.username}`);let te=ct,le=cr({objective:n,globalDir:Nt(Ee,"variables"),localDir:Nt(process.cwd(),".testmuai","variables"),file:r.variablesFile,inline:r.variables,onLoadError:F=>console.error(F)}),fe;if(r.sessionContext)try{fe=JSON.parse(r.sessionContext)}catch{console.error("Invalid --session-context JSON"),Y(2,"Invalid --session-context JSON")}let U=r.globalContext??Nt(Ee,"global-memory.md"),B=r.localContext??Nt(process.cwd(),".testmuai","context.md"),u=Qt(U),b=Qt(B),_;try{_=await si({config:l,startUrl:te??void 0,headless:r.headless,cft:r.cft,wsEndpoint:r.wsEndpoint,cdpEndpoint:r.cdpEndpoint})}catch(F){console.error(`Chrome failed: ${F instanceof Error?F.message:F}`),Y(2,`Chrome failed: ${F instanceof Error?F.message:F}`)}_.instance&&it("chrome",()=>{_.instance.kill()}),r.cft?d.push("CfT mode: Playwright will manage its own browser"):r.wsEndpoint?d.push(`Playwright WS endpoint (${r.wsEndpoint.slice(0,60)}...)`):r.cdpEndpoint?d.push(`CDP connected (${r.cdpEndpoint})`):_.cdpEndpoint&&d.push(`Chrome ready (${_.cdpEndpoint})`);let S=new _t;S.start({model:r.model??l.model,environment:m,profile:o.getActiveProfile()}),g=(F,ne,re,pe)=>S.log(F,ne,re,pe);for(let F of p)S.log(...F);if(p.length=0,E.resolvedCreds){let{createRemoteLogger:F}=await import("./logging-X4C7SASV.js"),{getMachineId:ne}=await import("./machine-id-DZN4MYOO.js"),re=F({sessionId:S.sessionId,identity:{org_id:String(E.resolvedCreds.org_id??""),user_id:String(E.resolvedCreds.user_id??""),machine_id:ne()},environment:m,getToken:async()=>E.token});S.setRemoteLogger(re),re.start(),it("remote-logger",()=>re.shutdownSync()),Zn(re)}let L=E.basicAuth&&!r.local?await ur({variables:le,auth:E.basicAuth,orgId:String(E.resolvedCreds?.org_id??""),env:m,localMode:!!r.local,log:(F,ne,re,pe)=>S.log(F,ne,re,pe)}):{};if(S.setAuteurVariables(le.auteur),S.setFirstRun(n,ct),!r.local&&E.basicAuth&&l.project_id){let F=ae(m),ne=await fr({tmsBaseUrl:F.tmsBaseUrl,auth:E.basicAuth,objective:n,url:ct,projectId:l.project_id,folderId:l.folder_id??"",hasCustomProfile:!!l.chrome_profile_path,log:(re,pe,We,qe)=>S.log(re,pe,We,qe)});ne&&S.setTestId(ne)}let z=dr({objective:le.auteurObjective,url:te??void 0,model:r.model??l.model,chrome:_,auth:E,sessionId:S.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(le.auteur).length>0?le.auteur:void 0,globalContext:u??void 0,localContext:b??void 0,sessionContext:fe}),J=null;if(!r.local)try{let{ControllerClient:F}=await import("./controller-client-7BIK5FYL.js"),ne;if(k&&T&&O)ne={username:T,accessKey:O};else if(I)ne=I;else throw new Error("No auth available");let pe=await new F(ae(m).controllerBaseUrl,ne).getScreenshotSas();S.setScreenshotSas(pe),J=new en(pe,3,(We,qe,Ae,ye)=>S.log(We,qe,Ae,ye)),S.log("info","SCREENSHOT_SAS_OK","Screenshot SAS token fetched",{base_url:pe.base_url,container:pe.container,expiry:pe.expiry})}catch(F){S.log("warn","SCREENSHOT_SAS_FAIL","Screenshot SAS token fetch failed",{error:F instanceof Error?F.message:String(F)})}let oe=J?(F,ne)=>{ir(S.sessionDir,ne,F,J,(re,pe,We,qe)=>S.log(re,pe,We,qe))}:void 0;if(!process.stdin.isTTY&&!r.agent&&(r.agent=!0),r.agent){let F=ue=>{process.stdout.write(JSON.stringify(ue)+`
|
|
76
|
+
`)},ne=await oi(z,{environment:m,mode:i,log:(ue,ce,De,ke)=>S.log(ue,ce,De,ke)},{onStepEnd:oe,onStepLog:(ue,ce,De)=>S.logStep(ue,ce,De)}),{lastRunEnd:re,stepsTotal:pe,hadError:We,bifurcationFlows:qe}=ne;if(We&&S.escalateRun(0),re){let ue=vn(re,0,qe);S.addRunResult(_n(re,n,0,ue),re.total_runs)}et("chrome","Agent run completed");let Ae;if(S.log("info","DIRECT_UPLOAD_START","Starting direct upload (agent mode)",{agent_mode:!0,last_run_end:!!re,local:!!r.local}),re&&!r.local)try{let ue=ae(m),ce=l.project_id;if(E.basicAuth){let{UploadPipeline:De}=await import("./pipeline-W3MWTZHK.js");J&&await J.drain();let ke=En({session:S,env:m,auth:E,variables:le,variableIds:L,projectId:ce,folderId:l.folder_id,totalSteps:pe,totalDuration:re.duration??0,codeExport:Cn({codeExport:r.codeExport,codeLanguage:r.codeLanguage,skipCodeValidation:r.skipCodeValidation},l.code_export),onProgress:()=>{},log:(xr,on,Tn,br)=>S.log(xr,on,Tn,br)}),dt=await new De(ke).execute();dt.success&&(dt.testcaseId&&S.setTestcaseId(dt.testcaseId),dt.testcaseId&&dt.shareId&&ce&&(Ae=Ft(ue.testManagerUiUrl,ce,dt.testcaseId,dt.shareId)))}}catch(ue){S.log("error","DIRECT_UPLOAD_ERROR","Upload failed in agent mode",{error:ue instanceof Error?ue.message:String(ue)})}if(re){let ue={...re};Ae&&(ue.test_url=Ae),F(ue)}await S.finish("complete"),re||Y(We?2:1,"Agent run ended with no result");let ye=re.reason??"";(ye.includes("Cancel")||ye.includes("Timeout"))&&Y(3,`Agent run: ${ye}`),re.status==="passed"&&Y(0,"Agent run passed"),Y(1,"Agent run failed")}let X=null,we=0,he=!1,Re=null,nt={current:null},{waitUntilExit:kn}=fn(ii.default.createElement(ri,{config:z,spawnOpts:{environment:m,mode:i,log:(F,ne,re,pe)=>S.log(F,ne,re,pe)},cancelRef:nt,banner:{model:r.model??l.model,auth:c,status:d},onComplete:F=>{X=F.lastRunEnd,we=F.stepsTotal,he=F.hadError,Re=F.bifurcationFlows},onStepEnd:oe}),{stdout:process.stderr,exitOnCtrlC:!1}),rn;if(r.timeout){let F=parseInt(r.timeout,10)*1e3;rn=setTimeout(()=>{console.error(`
|
|
77
|
+
Timeout: ${r.timeout}s exceeded \u2014 cancelling...`),nt.current?.()},F)}if(await kn(),rn&&clearTimeout(rn),X){let F=vn(X,0,Re);S.addRunResult(_n(X,n,0,F),X.total_runs)}if(et("chrome","Ink run completed"),S.log("info","DIRECT_UPLOAD_START","Starting direct upload (ink mode)",{ink_mode:!0,last_event:!!X,local:!!r.local}),X&&!r.local)try{let F=ae(m),ne=l.project_id;if(E.basicAuth){let{UploadPipeline:re}=await import("./pipeline-W3MWTZHK.js");J&&(S.log("info","SCREENSHOT_UPLOAD_DRAIN","Draining screenshot upload queue before pipeline"),await J.drain(),S.log("info","SCREENSHOT_UPLOAD_DRAINED","Screenshot upload queue drained"));let pe=En({session:S,env:m,auth:E,variables:le,variableIds:L,projectId:l.project_id,folderId:l.folder_id,totalSteps:we,totalDuration:X.duration??0,codeExport:Cn({codeExport:r.codeExport,codeLanguage:r.codeLanguage,skipCodeValidation:r.skipCodeValidation},l.code_export),onProgress:()=>{},log:(ye,ue,ce,De)=>S.log(ye,ue,ce,De)}),We=new re(pe),{renderUploadProgress:qe}=await import("./CliUploadProgress-3LN7ZAQQ.js"),Ae=await qe(We,ye=>{if(ye.testcaseId&&ye.shareId&&ne)return Ft(F.testManagerUiUrl,ne,ye.testcaseId,ye.shareId)});if(Ae.success){Ae.testcaseId&&S.setTestcaseId(Ae.testcaseId);let ye=Ae.testcaseId&&Ae.shareId&&ne?Ft(F.testManagerUiUrl,ne,Ae.testcaseId,Ae.shareId):void 0,ue=Ae.testcaseId&&ne?yn(F.testManagerUiUrl,ne,Ae.testcaseId):void 0;if(ye||ue||Ae.codeExportDir){let{LinksBox:ce}=await import("./LinksBox-VNX4GTYY.js"),{render:De}=await import("./build-MFETN2BY.js"),ke=await import("./react-QWOAB3TB.js"),{waitUntilExit:Wt}=De(ke.default.createElement(ce,{shareableLink:ye,testCaseLink:ue,codeExportDir:Ae.codeExportDir}),{stdout:process.stderr});await Wt()}}if(S.testId){let{renderFeedbackPrompt:ye}=await import("./CliFeedbackPrompt-D2GV3CIR.js"),ue=await ye();if(ue)try{await mr({tmsBaseUrl:F.tmsBaseUrl,username:E.basicAuth.username,accessKey:E.basicAuth.access_key,testId:S.testId,feedbackType:ue,log:(ce,De,ke,Wt)=>S.log(ce,De,ke,Wt)})}catch(ce){S.log("warn","FEEDBACK_FAILED","Feedback submission failed",{error:String(ce)})}}}}catch(F){S.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 S.finish("complete"),X||Y(he?2:1,"Run ended with no result");let Ht=X.reason??"";(Ht.includes("Cancel")||Ht.includes("Timeout"))&&Y(3,`Run: ${Ht}`),X.status==="passed"&&Y(0,"Run passed"),Y(1,"Run failed")}catch(o){Y(2,`CLI error: ${o instanceof Error?o.message:String(o)}`)}}),e.command("profiles [action] [name]").option("--env <name>","Environment for switch/delete").action(async(n,r,o)=>{let a=new Ne;if(n==="list"||!n&&!process.stdin.isTTY){let d=a.listProfiles();if(d.length===0){console.log("No profiles configured. Run: kane-cli login");return}let m=a.getActiveProfile(),g=a.getDefaultEnv();for(let p of d){let x=p.profile===m&&p.env===g?" (active)":"";console.log(`${p.profile} [${p.env}]${x}`)}return}if(n==="switch"&&r){let d=o?.env??a.getDefaultEnv();a.setActiveProfile(r),a.setDefaultEnv(d),console.log(`Switched to ${r} [${d}]`);return}if(n==="delete"&&r){let d=o?.env??a.getDefaultEnv();a.deleteProfileFull(r,d),console.log(`Deleted profile ${r} [${d}]`);return}process.stdin.isTTY||(console.error("Usage: kane-cli profiles list|switch|delete <name> [--env <env>]"),Y(1,"Invalid profiles usage"));let{ProfilesView:l}=await import("./ProfilesView-AJFBUG46.js"),{render:i}=await import("./build-MFETN2BY.js"),c=await import("./react-QWOAB3TB.js");await new Promise(d=>{let{unmount:m}=i(c.default.createElement(l,{creds:a,onSwitch:(g,p)=>{a.setActiveProfile(g),a.setDefaultEnv(p),console.log(`Switched to ${g} [${p}]`)},onCancel:()=>{m(),d()}}))})}),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"'),Y(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"),Y(1,"--details exceeds 500 character limit"));let r=new Ne,o=n.env??r.getDefaultEnv(),a=ae(o),l=!1,i=n.username,c=n.accessKey,d;if(n.username&&n.accessKey)l=!0;else{let T=r.resolveAuth();T?.method==="basic"&&(l=!0,i=T.username,c=T.access_key)}if(!l){let{credentials:T}=r.getActiveCredentials();T||(console.error("Not authenticated. Run: kane-cli login"),Y(2,"Not authenticated for feedback")),d=T.access_token}let m=async()=>d??null,g=l&&i&&c?{username:i,access_key:c}:null,x=await new ut(a.controllerBaseUrl,m,g).resolve(),E=x?.username??i,k=x?.access_key??c;(!E||!k)&&(console.error(JSON.stringify({error:"Could not resolve TMS credentials"})),Y(1,"Could not resolve TMS credentials for feedback"));try{let{TmsClient:T}=await import("./tms-client-VH42IFUF.js"),I=await new T(a.tmsBaseUrl,E,k).submitFeedback({instruction_id:"",test_id:n.testId,feedback_type:n.feedbackType,details:n.details,mode:"agent"});console.log(JSON.stringify(I)),Y(0,"Feedback submitted")}catch(T){console.error(JSON.stringify({error:T instanceof Error?T.message:String(T)})),Y(1,`Feedback failed: ${T instanceof Error?T.message:String(T)}`)}}),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 Ne,o=n.profile??r.getActiveProfile()??"default",a=n.env??r.getDefaultEnv(),l=ae(a),i=r.loadBasicAuth(o,a),c=null;if(n.username&&n.accessKey)c={username:n.username,accessKey:n.accessKey};else if(i)c={username:i.username,accessKey:i.access_key};else{let d=r.loadCredentials(o,a);d||(console.error(`No credentials for profile "${o}" [${a}]. Run "kane-cli login" first.`),Y(2,`No credentials for profile "${o}" [${a}]`)),c=d.access_token}try{let{ControllerClient:d}=await import("./controller-client-7BIK5FYL.js"),g=await new d(l.controllerBaseUrl,c).getCreditBalance();console.log(`Available credits: ${g.available_credits}`),console.log(`Total credits: ${g.total_credits}`),Y(0,"Balance retrieved")}catch(d){console.error(`Error: ${d instanceof Error?d.message:String(d)}`),Y(1,`Balance check failed: ${d instanceof Error?d.message:String(d)}`)}}),e.command("help").action(()=>{e.help()}),e.command("update").description("Update kane-cli to the latest version").action(async()=>{let{checkForUpdate:n}=await import("./version-check-IF4G6QYT.js"),{runSelfUpdate:r}=await import("./updater-L2ORCIIP.js");console.log("Checking for updates...");let o=await n();if(!o){console.log(`Already on latest version (${pt})`);return}console.log(`Update available: ${o.current} \u2192 ${o.latest}
|
|
78
|
+
`),console.log("Updating @testmuai/kane-cli...");let a=await r(l=>{process.stdout.write(l)});a.success?(console.log(`
|
|
72
79
|
\u2713 Updated to ${a.toVersion}`),console.log("\nRun `kane-cli changelog` to see what's new.")):console.error(`
|
|
73
|
-
\u2717 Update failed: ${a.error}`)}),e.command("changelog").description("Show recent release notes").option("--all","Show all releases instead of latest 5").action(async
|
|
74
|
-
Update available: ${
|
|
80
|
+
\u2717 Update failed: ${a.error}`)}),e.command("changelog").description("Show recent release notes").option("--all","Show all releases instead of latest 5").action(async n=>{let{fetchChangelog:r,formatChangelog:o}=await import("./changelog-WJATJ25O.js"),a=await r({all:n.all});console.log(o(a))}),e.parse(["node","kane-cli",...s])}function ai(s){let e,t,n,r=[];for(let o=0;o<s.length;o++){let a=s[o];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=s[o+1];l!==void 0&&(t=l,o++)}else a.startsWith("--code-language=")?t=a.slice(16):r.push(a)}return{codeExport:e,codeLanguage:t,skipCodeValidation:n,filteredArgs:r}}xs();var di=Vn().catch(()=>null),vr=Ye.argv.slice(2),Ua=vr.includes("--dev"),li=vr.includes("--local"),Na=vr.includes("--tui");Ua&&(Ye.env.KANE_DEV_MODE="1");var Ma=vr.filter(s=>!["--dev","--local","--tui"].includes(s)),_r=ai(Ma),Mt=_r.filteredArgs,ci=_r.codeExport,Eo=_r.codeLanguage,Co=_r.skipCodeValidation,ui=()=>{di.then(s=>{s&&Ye.stderr.write(`
|
|
81
|
+
Update available: ${s.current} \u2192 ${s.latest} \u2014 run \`kane-cli update\`
|
|
75
82
|
|
|
76
|
-
`)})
|
|
83
|
+
`)})},Ha=Mt[0]==="--help"||Mt[0]==="-h";if(Ha)An(Mt);else if(Na){Ye.stdin.isTTY||(Ye.stderr.write(`Error: --tui mode requires an interactive terminal (TTY).
|
|
84
|
+
`),Ye.exit(1)),ui();let{waitUntilExit:s,unmount:e}=fn(Ro.default.createElement(Fs,{localMode:li,codeExport:ci,codeLanguage:Eo,skipCodeValidation:Co,updatePromise:di}),{exitOnCtrlC:!1});ro(()=>e()),oo(()=>{try{Ye.stdin.setRawMode?.(!1)}catch{}Ye.stdout.write("\x1B[?25h")}),s().then(()=>{Y(0,"TUI session ended")})}else if(Mt.length>0){let s=new Set(["login","logout","whoami","config","run","profiles","feedback","balance","help","update","changelog","setup"]),e=Mt[0],t=s.has(e),n=e.startsWith("-");ui(),t||n?An(Mt):An(["run",...Mt])}else{Ye.stdin.isTTY||(Ye.stderr.write(`Error: kane-cli requires an interactive terminal (TTY) when run without arguments.
|
|
85
|
+
Usage: kane-cli "objective" for non-interactive mode.
|
|
86
|
+
`),Ye.exit(1));let s={current:null},{waitUntilExit:e,unmount:t}=fn(Ro.default.createElement(Us,{resultRef:s}),{exitOnCtrlC:!1});ro(()=>t()),oo(()=>{try{Ye.stdin.setRawMode?.(!1)}catch{}Ye.stdout.write("\x1B[?25h")}),e().then(()=>{let n=s.current;if(!n){Y(0,"Single-shot session ended (no objective)");return}let r=["run",n.objective];li&&r.push("--local"),ci&&r.push("--code-export"),Eo&&r.push("--code-language",Eo),Co===!0&&r.push("--skip-code-validation"),Co===!1&&r.push("--no-skip-code-validation"),An(r)})}
|