agenqa 1.1.8 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/cli.cjs +28 -28
  2. package/package.json +1 -1
package/dist/cli.cjs CHANGED
@@ -1,29 +1,29 @@
1
1
  #!/usr/bin/env node
2
- var Nr=Object.create;var nt=Object.defineProperty;var Lr=Object.getOwnPropertyDescriptor;var Rr=Object.getOwnPropertyNames;var Tr=Object.getPrototypeOf,Vr=Object.prototype.hasOwnProperty;var Ur=(n,e)=>()=>(n&&(e=n(n=0)),e);var re=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports),Hr=(n,e)=>{for(var t in e)nt(n,t,{get:e[t],enumerable:!0})},qr=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Rr(e))!Vr.call(n,s)&&s!==t&&nt(n,s,{get:()=>e[s],enumerable:!(r=Lr(e,s))||r.enumerable});return n};var H=(n,e,t)=>(t=n!=null?Nr(Tr(n)):{},qr(e||!n||!n.__esModule?nt(t,"default",{value:n,enumerable:!0}):t,n));var be=re(it=>{var Ie=class extends Error{constructor(e,t,r){super(r),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},st=class extends Ie{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};it.CommanderError=Ie;it.InvalidArgumentError=st});var Ne=re(at=>{var{InvalidArgumentError:Br}=be(),ot=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,r)=>{if(!this.argChoices.includes(t))throw new Br(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,r):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Mr(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}at.Argument=ot;at.humanReadableArgName=Mr});var lt=re(Tt=>{var{humanReadableArgName:Wr}=Ne(),ct=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),r=e._getHelpCommand();return r&&!r._hidden&&t.push(r),this.sortSubcommands&&t.sort((s,i)=>s.name().localeCompare(i.name())),t}compareOptions(e,t){let r=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return r(e).localeCompare(r(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),r=e._getHelpOption();if(r&&!r.hidden){let s=r.short&&e._findOption(r.short),i=r.long&&e._findOption(r.long);!s&&!i?t.push(r):r.long&&!i?t.push(e.createOption(r.long,r.description)):r.short&&!s&&t.push(e.createOption(r.short,r.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let r=e.parent;r;r=r.parent){let s=r.options.filter(i=>!i.hidden);t.push(...s)}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(r=>Wr(r)).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((r,s)=>Math.max(r,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((r,s)=>Math.max(r,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((r,s)=>Math.max(r,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((r,s)=>Math.max(r,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let r="";for(let s=e.parent;s;s=s.parent)r=s.name()+" "+r;return r+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(r=>JSON.stringify(r)).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(r=>JSON.stringify(r)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let r=`(${t.join(", ")})`;return e.description?`${e.description} ${r}`:r}return e.description}formatHelp(e,t){let r=t.padWidth(e,t),s=t.helpWidth||80,i=2,o=2;function a(m,g){if(g){let w=`${m.padEnd(r+o)}${g}`;return t.wrap(w,s-i,r+o)}return m}function c(m){return m.join(`
3
- `).replace(/^/gm," ".repeat(i))}let l=[`Usage: ${t.commandUsage(e)}`,""],u=t.commandDescription(e);u.length>0&&(l=l.concat([t.wrap(u,s,0),""]));let h=t.visibleArguments(e).map(m=>a(t.argumentTerm(m),t.argumentDescription(m)));h.length>0&&(l=l.concat(["Arguments:",c(h),""]));let d=t.visibleOptions(e).map(m=>a(t.optionTerm(m),t.optionDescription(m)));if(d.length>0&&(l=l.concat(["Options:",c(d),""])),this.showGlobalOptions){let m=t.visibleGlobalOptions(e).map(g=>a(t.optionTerm(g),t.optionDescription(g)));m.length>0&&(l=l.concat(["Global Options:",c(m),""]))}let f=t.visibleCommands(e).map(m=>a(t.subcommandTerm(m),t.subcommandDescription(m)));return f.length>0&&(l=l.concat(["Commands:",c(f),""])),l.join(`
4
- `)}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,s=40){let i=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${i}]+`);if(e.match(o))return e;let a=t-r;if(a<s)return e;let c=e.slice(0,r),l=e.slice(r).replace(`\r
2
+ var on=Object.create;var At=Object.defineProperty;var an=Object.getOwnPropertyDescriptor;var cn=Object.getOwnPropertyNames;var ln=Object.getPrototypeOf,un=Object.prototype.hasOwnProperty;var dn=(r,e)=>()=>(r&&(e=r(r=0)),e);var le=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),hn=(r,e)=>{for(var t in e)At(r,t,{get:e[t],enumerable:!0})},fn=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of cn(e))!un.call(r,s)&&s!==t&&At(r,s,{get:()=>e[s],enumerable:!(n=an(e,s))||n.enumerable});return r};var R=(r,e,t)=>(t=r!=null?on(ln(r)):{},fn(e||!r||!r.__esModule?At(t,"default",{value:r,enumerable:!0}):t,r));var Te=le(vt=>{var Ze=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}},Et=class extends Ze{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};vt.CommanderError=Ze;vt.InvalidArgumentError=Et});var et=le($t=>{var{InvalidArgumentError:pn}=Te(),xt=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 pn(`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 mn(r){let e=r.name()+(r.variadic===!0?"...":"");return r.required?"<"+e+">":"["+e+"]"}$t.Argument=xt;$t.humanReadableArgName=mn});var jt=le(or=>{var{humanReadableArgName:gn}=et(),Ot=class{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands(e){let t=e.commands.filter(s=>!s._hidden),n=e._getHelpCommand();return n&&!n._hidden&&t.push(n),this.sortSubcommands&&t.sort((s,o)=>s.name().localeCompare(o.name())),t}compareOptions(e,t){let n=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return n(e).localeCompare(n(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),n=e._getHelpOption();if(n&&!n.hidden){let s=n.short&&e._findOption(n.short),o=n.long&&e._findOption(n.long);!s&&!o?t.push(n):n.long&&!o?t.push(e.createOption(n.long,n.description)):n.short&&!s&&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 s=n.options.filter(o=>!o.hidden);t.push(...s)}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=>gn(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,s)=>Math.max(n,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((n,s)=>Math.max(n,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((n,s)=>Math.max(n,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let n="";for(let s=e.parent;s;s=s.parent)n=s.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),s=t.helpWidth||80,o=2,i=2;function a(g,p){if(p){let y=`${g.padEnd(n+i)}${p}`;return t.wrap(y,s-o,n+i)}return g}function l(g){return g.join(`
3
+ `).replace(/^/gm," ".repeat(o))}let c=[`Usage: ${t.commandUsage(e)}`,""],u=t.commandDescription(e);u.length>0&&(c=c.concat([t.wrap(u,s,0),""]));let d=t.visibleArguments(e).map(g=>a(t.argumentTerm(g),t.argumentDescription(g)));d.length>0&&(c=c.concat(["Arguments:",l(d),""]));let f=t.visibleOptions(e).map(g=>a(t.optionTerm(g),t.optionDescription(g)));if(f.length>0&&(c=c.concat(["Options:",l(f),""])),this.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(p=>a(t.optionTerm(p),t.optionDescription(p)));g.length>0&&(c=c.concat(["Global Options:",l(g),""]))}let h=t.visibleCommands(e).map(g=>a(t.subcommandTerm(g),t.subcommandDescription(g)));return h.length>0&&(c=c.concat(["Commands:",l(h),""])),c.join(`
4
+ `)}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,s=40){let o=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",i=new RegExp(`[\\n][${o}]+`);if(e.match(i))return e;let a=t-n;if(a<s)return e;let l=e.slice(0,n),c=e.slice(n).replace(`\r
5
5
  `,`
6
- `),u=" ".repeat(r),d="\\s\u200B",f=new RegExp(`
7
- |.{1,${a-1}}([${d}]|$)|[^${d}]+?([${d}]|$)`,"g"),m=l.match(f)||[];return c+m.map((g,w)=>g===`
8
- `?"":(w>0?u:"")+g.trimEnd()).join(`
9
- `)}};Tt.Help=ct});var ft=re(ht=>{var{InvalidArgumentError:Gr}=be(),ut=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 r=Kr(e);this.short=r.shortFlag,this.long=r.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,r)=>{if(!this.argChoices.includes(t))throw new Gr(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,r):t},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return Jr(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},dt=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,r)=>{this.positiveOptions.has(r)&&this.dualOptions.add(r)})}valueFromOption(e,t){let r=t.attributeName();if(!this.dualOptions.has(r))return!0;let s=this.negativeOptions.get(r).presetArg,i=s!==void 0?s:!1;return t.negate===(i===e)}};function Jr(n){return n.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function Kr(n){let e,t,r=n.split(/[ |,]+/);return r.length>1&&!/^[[<]/.test(r[1])&&(e=r.shift()),t=r.shift(),!e&&/^-[^-]$/.test(t)&&(e=t,t=void 0),{shortFlag:e,longFlag:t}}ht.Option=ut;ht.DualOptions=dt});var Ut=re(Vt=>{function zr(n,e){if(Math.abs(n.length-e.length)>3)return Math.max(n.length,e.length);let t=[];for(let r=0;r<=n.length;r++)t[r]=[r];for(let r=0;r<=e.length;r++)t[0][r]=r;for(let r=1;r<=e.length;r++)for(let s=1;s<=n.length;s++){let i=1;n[s-1]===e[r-1]?i=0:i=1,t[s][r]=Math.min(t[s-1][r]+1,t[s][r-1]+1,t[s-1][r-1]+i),s>1&&r>1&&n[s-1]===e[r-2]&&n[s-2]===e[r-1]&&(t[s][r]=Math.min(t[s][r],t[s-2][r-2]+1))}return t[n.length][e.length]}function Yr(n,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=n.startsWith("--");t&&(n=n.slice(2),e=e.map(o=>o.slice(2)));let r=[],s=3,i=.4;return e.forEach(o=>{if(o.length<=1)return;let a=zr(n,o),c=Math.max(n.length,o.length);(c-a)/c>i&&(a<s?(s=a,r=[o]):a===s&&r.push(o))}),r.sort((o,a)=>o.localeCompare(a)),t&&(r=r.map(o=>`--${o}`)),r.length>1?`
10
- (Did you mean one of ${r.join(", ")}?)`:r.length===1?`
11
- (Did you mean ${r[0]}?)`:""}Vt.suggestSimilar=Yr});var Wt=re(Mt=>{var Qr=require("node:events").EventEmitter,pt=require("node:child_process"),ne=require("node:path"),mt=require("node:fs"),P=require("node:process"),{Argument:Xr,humanReadableArgName:Zr}=Ne(),{CommanderError:gt}=be(),{Help:en}=lt(),{Option:Ht,DualOptions:tn}=ft(),{suggestSimilar:qt}=Ut(),yt=class n extends Qr{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=>P.stdout.write(t),writeErr:t=>P.stderr.write(t),getOutHelpWidth:()=>P.stdout.isTTY?P.stdout.columns:void 0,getErrHelpWidth:()=>P.stderr.isTTY?P.stderr.columns:void 0,outputError:(t,r)=>r(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,r){let s=t,i=r;typeof s=="object"&&s!==null&&(i=s,s=null),i=i||{};let[,o,a]=e.match(/([^ ]+) *(.*)/),c=this.createCommand(o);return s&&(c.description(s),c._executableHandler=!0),i.isDefault&&(this._defaultCommandName=c._name),c._hidden=!!(i.noHelp||i.hidden),c._executableFile=i.executableFile||null,a&&c.arguments(a),this._registerCommand(c),c.parent=this,c.copyInheritedSettings(this),s?this:c}createCommand(e){return new n(e)}createHelp(){return Object.assign(new en,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
12
- - 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 Xr(e,t)}argument(e,t,r,s){let i=this.createArgument(e,t);return typeof r=="function"?i.default(s).argParser(r):i.default(r),this.addArgument(i),this}arguments(e){return e.trim().split(/ +/).forEach(t=>{this.argument(t)}),this}addArgument(e){let t=this.registeredArguments.slice(-1)[0];if(t&&t.variadic)throw new Error(`only the last argument can be variadic '${t.name()}'`);if(e.required&&e.defaultValue!==void 0&&e.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${e.name()}'`);return this.registeredArguments.push(e),this}helpCommand(e,t){if(typeof e=="boolean")return this._addImplicitHelpCommand=e,this;e=e??"help [command]";let[,r,s]=e.match(/([^ ]+) *(.*)/),i=t??"display help for command",o=this.createCommand(r);return o.helpOption(!1),s&&o.arguments(s),i&&o.description(i),this._addImplicitHelpCommand=!0,this._helpCommand=o,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 r=["preSubcommand","preAction","postAction"];if(!r.includes(e))throw new Error(`Unexpected value for event passed to hook : '${e}'.
13
- Expecting one of '${r.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,r){this._exitCallback&&this._exitCallback(new gt(e,t,r)),P.exit(e)}action(e){let t=r=>{let s=this.registeredArguments.length,i=r.slice(0,s);return this._storeOptionsAsProperties?i[s]=this:i[s]=this.opts(),i.push(this),e.apply(this,i)};return this._actionHandler=t,this}createOption(e,t){return new Ht(e,t)}_callParseArg(e,t,r,s){try{return e.parseArg(t,r)}catch(i){if(i.code==="commander.invalidArgument"){let o=`${s} ${i.message}`;this.error(o,{exitCode:i.exitCode,code:i.code})}throw i}}_registerOption(e){let t=e.short&&this._findOption(e.short)||e.long&&this._findOption(e.long);if(t){let r=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 '${r}'
14
- - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),r=t(e).find(s=>this._findCommand(s));if(r){let s=t(this._findCommand(r)).join("|"),i=t(e).join("|");throw new Error(`cannot add command '${i}' as already have command '${s}'`)}this.commands.push(e)}addOption(e){this._registerOption(e);let t=e.name(),r=e.attributeName();if(e.negate){let i=e.long.replace(/^--no-/,"--");this._findOption(i)||this.setOptionValueWithSource(r,e.defaultValue===void 0?!0:e.defaultValue,"default")}else e.defaultValue!==void 0&&this.setOptionValueWithSource(r,e.defaultValue,"default");let s=(i,o,a)=>{i==null&&e.presetArg!==void 0&&(i=e.presetArg);let c=this.getOptionValue(r);i!==null&&e.parseArg?i=this._callParseArg(e,i,c,o):i!==null&&e.variadic&&(i=e._concatValue(i,c)),i==null&&(e.negate?i=!1:e.isBoolean()||e.optional?i=!0:i=""),this.setOptionValueWithSource(r,i,a)};return this.on("option:"+t,i=>{let o=`error: option '${e.flags}' argument '${i}' is invalid.`;s(i,o,"cli")}),e.envVar&&this.on("optionEnv:"+t,i=>{let o=`error: option '${e.flags}' value '${i}' from env '${e.envVar}' is invalid.`;s(i,o,"env")}),this}_optionEx(e,t,r,s,i){if(typeof t=="object"&&t instanceof Ht)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(t,r);if(o.makeOptionMandatory(!!e.mandatory),typeof s=="function")o.default(i).argParser(s);else if(s instanceof RegExp){let a=s;s=(c,l)=>{let u=a.exec(c);return u?u[0]:l},o.default(i).argParser(s)}else o.default(s);return this.addOption(o)}option(e,t,r,s){return this._optionEx({},e,t,r,s)}requiredOption(e,t,r,s){return this._optionEx({mandatory:!0},e,t,r,s)}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,r){return this._storeOptionsAsProperties?this[e]=t:this._optionValues[e]=t,this._optionValueSources[e]=r,this}getOptionValueSource(e){return this._optionValueSources[e]}getOptionValueSourceWithGlobals(e){let t;return this._getCommandAndAncestors().forEach(r=>{r.getOptionValueSource(e)!==void 0&&(t=r.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){P.versions?.electron&&(t.from="electron");let s=P.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=P.argv),this.rawArgs=e.slice();let r;switch(t.from){case void 0:case"node":this._scriptPath=e[1],r=e.slice(2);break;case"electron":P.defaultApp?(this._scriptPath=e[1],r=e.slice(2)):r=e.slice(1);break;case"user":r=e.slice(0);break;case"eval":r=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",r}parse(e,t){let r=this._prepareUserArgs(e,t);return this._parseCommand([],r),this}async parseAsync(e,t){let r=this._prepareUserArgs(e,t);return await this._parseCommand([],r),this}_executeSubCommand(e,t){t=t.slice();let r=!1,s=[".js",".ts",".tsx",".mjs",".cjs"];function i(u,h){let d=ne.resolve(u,h);if(mt.existsSync(d))return d;if(s.includes(ne.extname(h)))return;let f=s.find(m=>mt.existsSync(`${d}${m}`));if(f)return`${d}${f}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let u;try{u=mt.realpathSync(this._scriptPath)}catch{u=this._scriptPath}a=ne.resolve(ne.dirname(u),a)}if(a){let u=i(a,o);if(!u&&!e._executableFile&&this._scriptPath){let h=ne.basename(this._scriptPath,ne.extname(this._scriptPath));h!==this._name&&(u=i(a,`${h}-${e._name}`))}o=u||o}r=s.includes(ne.extname(o));let c;P.platform!=="win32"?r?(t.unshift(o),t=Bt(P.execArgv).concat(t),c=pt.spawn(P.argv[0],t,{stdio:"inherit"})):c=pt.spawn(o,t,{stdio:"inherit"}):(t.unshift(o),t=Bt(P.execArgv).concat(t),c=pt.spawn(P.execPath,t,{stdio:"inherit"})),c.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(h=>{P.on(h,()=>{c.killed===!1&&c.exitCode===null&&c.kill(h)})});let l=this._exitCallback;c.on("close",u=>{u=u??1,l?l(new gt(u,"commander.executeSubCommandAsync","(close)")):P.exit(u)}),c.on("error",u=>{if(u.code==="ENOENT"){let h=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",d=`'${o}' does not exist
6
+ `),u=" ".repeat(n),f="\\s\u200B",h=new RegExp(`
7
+ |.{1,${a-1}}([${f}]|$)|[^${f}]+?([${f}]|$)`,"g"),g=c.match(h)||[];return l+g.map((p,y)=>p===`
8
+ `?"":(y>0?u:"")+p.trimEnd()).join(`
9
+ `)}};or.Help=Ot});var Ut=le(Ft=>{var{InvalidArgumentError:yn}=Te(),Pt=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=_n(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 yn(`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 wn(this.name().replace(/^no-/,""))}is(e){return this.short===e||this.long===e}isBoolean(){return!this.required&&!this.optional&&!this.negate}},kt=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 s=this.negativeOptions.get(n).presetArg,o=s!==void 0?s:!1;return t.negate===(o===e)}};function wn(r){return r.split("-").reduce((e,t)=>e+t[0].toUpperCase()+t.slice(1))}function _n(r){let e,t,n=r.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}}Ft.Option=Pt;Ft.DualOptions=kt});var ar=le(ir=>{function Sn(r,e){if(Math.abs(r.length-e.length)>3)return Math.max(r.length,e.length);let t=[];for(let n=0;n<=r.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 s=1;s<=r.length;s++){let o=1;r[s-1]===e[n-1]?o=0:o=1,t[s][n]=Math.min(t[s-1][n]+1,t[s][n-1]+1,t[s-1][n-1]+o),s>1&&n>1&&r[s-1]===e[n-2]&&r[s-2]===e[n-1]&&(t[s][n]=Math.min(t[s][n],t[s-2][n-2]+1))}return t[r.length][e.length]}function bn(r,e){if(!e||e.length===0)return"";e=Array.from(new Set(e));let t=r.startsWith("--");t&&(r=r.slice(2),e=e.map(i=>i.slice(2)));let n=[],s=3,o=.4;return e.forEach(i=>{if(i.length<=1)return;let a=Sn(r,i),l=Math.max(r.length,i.length);(l-a)/l>o&&(a<s?(s=a,n=[i]):a===s&&n.push(i))}),n.sort((i,a)=>i.localeCompare(a)),t&&(n=n.map(i=>`--${i}`)),n.length>1?`
10
+ (Did you mean one of ${n.join(", ")}?)`:n.length===1?`
11
+ (Did you mean ${n[0]}?)`:""}ir.suggestSimilar=bn});var hr=le(dr=>{var Cn=require("node:events").EventEmitter,Dt=require("node:child_process"),ue=require("node:path"),Lt=require("node:fs"),O=require("node:process"),{Argument:An,humanReadableArgName:En}=et(),{CommanderError:Nt}=Te(),{Help:vn}=jt(),{Option:cr,DualOptions:xn}=Ut(),{suggestSimilar:lr}=ar(),Rt=class r extends Cn{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=>O.stdout.write(t),writeErr:t=>O.stderr.write(t),getOutHelpWidth:()=>O.stdout.isTTY?O.stdout.columns:void 0,getErrHelpWidth:()=>O.stderr.isTTY?O.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 s=t,o=n;typeof s=="object"&&s!==null&&(o=s,s=null),o=o||{};let[,i,a]=e.match(/([^ ]+) *(.*)/),l=this.createCommand(i);return s&&(l.description(s),l._executableHandler=!0),o.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(o.noHelp||o.hidden),l._executableFile=o.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),s?this:l}createCommand(e){return new r(e)}createHelp(){return Object.assign(new vn,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
12
+ - 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 An(e,t)}argument(e,t,n,s){let o=this.createArgument(e,t);return typeof n=="function"?o.default(s).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,s]=e.match(/([^ ]+) *(.*)/),o=t??"display help for command",i=this.createCommand(n);return i.helpOption(!1),s&&i.arguments(s),o&&i.description(o),this._addImplicitHelpCommand=!0,this._helpCommand=i,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}'.
13
+ 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 Nt(e,t,n)),O.exit(e)}action(e){let t=n=>{let s=this.registeredArguments.length,o=n.slice(0,s);return this._storeOptionsAsProperties?o[s]=this:o[s]=this.opts(),o.push(this),e.apply(this,o)};return this._actionHandler=t,this}createOption(e,t){return new cr(e,t)}_callParseArg(e,t,n,s){try{return e.parseArg(t,n)}catch(o){if(o.code==="commander.invalidArgument"){let i=`${s} ${o.message}`;this.error(i,{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}'
14
+ - already used by option '${t.flags}'`)}this.options.push(e)}_registerCommand(e){let t=s=>[s.name()].concat(s.aliases()),n=t(e).find(s=>this._findCommand(s));if(n){let s=t(this._findCommand(n)).join("|"),o=t(e).join("|");throw new Error(`cannot add command '${o}' as already have command '${s}'`)}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 s=(o,i,a)=>{o==null&&e.presetArg!==void 0&&(o=e.presetArg);let l=this.getOptionValue(n);o!==null&&e.parseArg?o=this._callParseArg(e,o,l,i):o!==null&&e.variadic&&(o=e._concatValue(o,l)),o==null&&(e.negate?o=!1:e.isBoolean()||e.optional?o=!0:o=""),this.setOptionValueWithSource(n,o,a)};return this.on("option:"+t,o=>{let i=`error: option '${e.flags}' argument '${o}' is invalid.`;s(o,i,"cli")}),e.envVar&&this.on("optionEnv:"+t,o=>{let i=`error: option '${e.flags}' value '${o}' from env '${e.envVar}' is invalid.`;s(o,i,"env")}),this}_optionEx(e,t,n,s,o){if(typeof t=="object"&&t instanceof cr)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let i=this.createOption(t,n);if(i.makeOptionMandatory(!!e.mandatory),typeof s=="function")i.default(o).argParser(s);else if(s instanceof RegExp){let a=s;s=(l,c)=>{let u=a.exec(l);return u?u[0]:c},i.default(o).argParser(s)}else i.default(s);return this.addOption(i)}option(e,t,n,s){return this._optionEx({},e,t,n,s)}requiredOption(e,t,n,s){return this._optionEx({mandatory:!0},e,t,n,s)}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){O.versions?.electron&&(t.from="electron");let s=O.execArgv??[];(s.includes("-e")||s.includes("--eval")||s.includes("-p")||s.includes("--print"))&&(t.from="eval")}e===void 0&&(e=O.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":O.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,s=[".js",".ts",".tsx",".mjs",".cjs"];function o(u,d){let f=ue.resolve(u,d);if(Lt.existsSync(f))return f;if(s.includes(ue.extname(d)))return;let h=s.find(g=>Lt.existsSync(`${f}${g}`));if(h)return`${f}${h}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let i=e._executableFile||`${this._name}-${e._name}`,a=this._executableDir||"";if(this._scriptPath){let u;try{u=Lt.realpathSync(this._scriptPath)}catch{u=this._scriptPath}a=ue.resolve(ue.dirname(u),a)}if(a){let u=o(a,i);if(!u&&!e._executableFile&&this._scriptPath){let d=ue.basename(this._scriptPath,ue.extname(this._scriptPath));d!==this._name&&(u=o(a,`${d}-${e._name}`))}i=u||i}n=s.includes(ue.extname(i));let l;O.platform!=="win32"?n?(t.unshift(i),t=ur(O.execArgv).concat(t),l=Dt.spawn(O.argv[0],t,{stdio:"inherit"})):l=Dt.spawn(i,t,{stdio:"inherit"}):(t.unshift(i),t=ur(O.execArgv).concat(t),l=Dt.spawn(O.execPath,t,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(d=>{O.on(d,()=>{l.killed===!1&&l.exitCode===null&&l.kill(d)})});let c=this._exitCallback;l.on("close",u=>{u=u??1,c?c(new Nt(u,"commander.executeSubCommandAsync","(close)")):O.exit(u)}),l.on("error",u=>{if(u.code==="ENOENT"){let d=a?`searched for local subcommand relative to directory '${a}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",f=`'${i}' does not exist
15
15
  - if '${e._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
16
16
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
17
- - ${h}`;throw new Error(d)}else if(u.code==="EACCES")throw new Error(`'${o}' not executable`);if(!l)P.exit(1);else{let h=new gt(1,"commander.executeSubCommandAsync","(error)");h.nestedError=u,l(h)}}),this.runningCommand=c}_dispatchSubcommand(e,t,r){let s=this._findCommand(e);s||this.help({error:!0});let i;return i=this._chainOrCallSubCommandHook(i,s,"preSubcommand"),i=this._chainOrCall(i,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(r));else return s._parseCommand(t,r)}),i}_dispatchHelpCommand(e){e||this.help();let t=this._findCommand(e);return t&&!t._executableHandler&&t.help(),this._dispatchSubcommand(e,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((e,t)=>{e.required&&this.args[t]==null&&this.missingArgument(e.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let e=(r,s,i)=>{let o=s;if(s!==null&&r.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${r.name()}'.`;o=this._callParseArg(r,s,i,a)}return o};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((r,s)=>{let i=r.defaultValue;r.variadic?s<this.args.length?(i=this.args.slice(s),r.parseArg&&(i=i.reduce((o,a)=>e(r,a,o),r.defaultValue))):i===void 0&&(i=[]):s<this.args.length&&(i=this.args[s],r.parseArg&&(i=e(r,i,r.defaultValue))),t[s]=i}),this.processedArgs=t}_chainOrCall(e,t){return e&&e.then&&typeof e.then=="function"?e.then(()=>t()):t()}_chainOrCallHooks(e,t){let r=e,s=[];return this._getCommandAndAncestors().reverse().filter(i=>i._lifeCycleHooks[t]!==void 0).forEach(i=>{i._lifeCycleHooks[t].forEach(o=>{s.push({hookedCommand:i,callback:o})})}),t==="postAction"&&s.reverse(),s.forEach(i=>{r=this._chainOrCall(r,()=>i.callback(i.hookedCommand,this))}),r}_chainOrCallSubCommandHook(e,t,r){let s=e;return this._lifeCycleHooks[r]!==void 0&&this._lifeCycleHooks[r].forEach(i=>{s=this._chainOrCall(s,()=>i(this,t))}),s}_parseCommand(e,t){let r=this.parseOptions(t);if(this._parseOptionsEnv(),this._parseOptionsImplied(),e=e.concat(r.operands),t=r.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(r.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let s=()=>{r.unknown.length>0&&this.unknownOption(r.unknown[0])},i=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(i,e,t)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(i))s(),this._processArguments(),this.parent.emit(i,e,t);else if(e.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",e,t);this.listenerCount("command:*")?this.emit("command:*",e,t):this.commands.length?this.unknownCommand():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),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(r=>{let s=r.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(r=>r.conflictsWith.length>0).forEach(r=>{let s=e.find(i=>r.conflictsWith.includes(i.attributeName()));s&&this._conflictingOption(r,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],r=[],s=t,i=e.slice();function o(c){return c.length>1&&c[0]==="-"}let a=null;for(;i.length;){let c=i.shift();if(c==="--"){s===r&&s.push(c),s.push(...i);break}if(a&&!o(c)){this.emit(`option:${a.name()}`,c);continue}if(a=null,o(c)){let l=this._findOption(c);if(l){if(l.required){let u=i.shift();u===void 0&&this.optionMissingArgument(l),this.emit(`option:${l.name()}`,u)}else if(l.optional){let u=null;i.length>0&&!o(i[0])&&(u=i.shift()),this.emit(`option:${l.name()}`,u)}else this.emit(`option:${l.name()}`);a=l.variadic?l:null;continue}}if(c.length>2&&c[0]==="-"&&c[1]!=="-"){let l=this._findOption(`-${c[1]}`);if(l){l.required||l.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${l.name()}`,c.slice(2)):(this.emit(`option:${l.name()}`),i.unshift(`-${c.slice(2)}`));continue}}if(/^--[^=]+=/.test(c)){let l=c.indexOf("="),u=this._findOption(c.slice(0,l));if(u&&(u.required||u.optional)){this.emit(`option:${u.name()}`,c.slice(l+1));continue}}if(o(c)&&(s=r),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&r.length===0){if(this._findCommand(c)){t.push(c),i.length>0&&r.push(...i);break}else if(this._getHelpCommand()&&c===this._getHelpCommand().name()){t.push(c),i.length>0&&t.push(...i);break}else if(this._defaultCommandName){r.push(c),i.length>0&&r.push(...i);break}}if(this._passThroughOptions){s.push(c),i.length>0&&s.push(...i);break}s.push(c)}return{operands:t,unknown:r}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let r=0;r<t;r++){let s=this.options[r].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
17
+ - ${d}`;throw new Error(f)}else if(u.code==="EACCES")throw new Error(`'${i}' not executable`);if(!c)O.exit(1);else{let d=new Nt(1,"commander.executeSubCommandAsync","(error)");d.nestedError=u,c(d)}}),this.runningCommand=l}_dispatchSubcommand(e,t,n){let s=this._findCommand(e);s||this.help({error:!0});let o;return o=this._chainOrCallSubCommandHook(o,s,"preSubcommand"),o=this._chainOrCall(o,()=>{if(s._executableHandler)this._executeSubCommand(s,t.concat(n));else return s._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,s,o)=>{let i=s;if(s!==null&&n.parseArg){let a=`error: command-argument value '${s}' is invalid for argument '${n.name()}'.`;i=this._callParseArg(n,s,o,a)}return i};this._checkNumberOfArguments();let t=[];this.registeredArguments.forEach((n,s)=>{let o=n.defaultValue;n.variadic?s<this.args.length?(o=this.args.slice(s),n.parseArg&&(o=o.reduce((i,a)=>e(n,a,i),n.defaultValue))):o===void 0&&(o=[]):s<this.args.length&&(o=this.args[s],n.parseArg&&(o=e(n,o,n.defaultValue))),t[s]=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,s=[];return this._getCommandAndAncestors().reverse().filter(o=>o._lifeCycleHooks[t]!==void 0).forEach(o=>{o._lifeCycleHooks[t].forEach(i=>{s.push({hookedCommand:o,callback:i})})}),t==="postAction"&&s.reverse(),s.forEach(o=>{n=this._chainOrCall(n,()=>o.callback(o.hookedCommand,this))}),n}_chainOrCallSubCommandHook(e,t,n){let s=e;return this._lifeCycleHooks[n]!==void 0&&this._lifeCycleHooks[n].forEach(o=>{s=this._chainOrCall(s,()=>o(this,t))}),s}_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 s=()=>{n.unknown.length>0&&this.unknownOption(n.unknown[0])},o=`command:${this.name()}`;if(this._actionHandler){s(),this._processArguments();let i;return i=this._chainOrCallHooks(i,"preAction"),i=this._chainOrCall(i,()=>this._actionHandler(this.processedArgs)),this.parent&&(i=this._chainOrCall(i,()=>{this.parent.emit(o,e,t)})),i=this._chainOrCallHooks(i,"postAction"),i}if(this.parent&&this.parent.listenerCount(o))s(),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():(s(),this._processArguments())}else this.commands.length?(s(),this.help({error:!0})):(s(),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 s=n.attributeName();return this.getOptionValue(s)===void 0?!1:this.getOptionValueSource(s)!=="default"});e.filter(n=>n.conflictsWith.length>0).forEach(n=>{let s=e.find(o=>n.conflictsWith.includes(o.attributeName()));s&&this._conflictingOption(n,s)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(e=>{e._checkForConflictingLocalOptions()})}parseOptions(e){let t=[],n=[],s=t,o=e.slice();function i(l){return l.length>1&&l[0]==="-"}let a=null;for(;o.length;){let l=o.shift();if(l==="--"){s===n&&s.push(l),s.push(...o);break}if(a&&!i(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,i(l)){let c=this._findOption(l);if(c){if(c.required){let u=o.shift();u===void 0&&this.optionMissingArgument(c),this.emit(`option:${c.name()}`,u)}else if(c.optional){let u=null;o.length>0&&!i(o[0])&&(u=o.shift()),this.emit(`option:${c.name()}`,u)}else this.emit(`option:${c.name()}`);a=c.variadic?c:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let c=this._findOption(`-${l[1]}`);if(c){c.required||c.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${c.name()}`,l.slice(2)):(this.emit(`option:${c.name()}`),o.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let c=l.indexOf("="),u=this._findOption(l.slice(0,c));if(u&&(u.required||u.optional)){this.emit(`option:${u.name()}`,l.slice(c+1));continue}}if(i(l)&&(s=n),(this._enablePositionalOptions||this._passThroughOptions)&&t.length===0&&n.length===0){if(this._findCommand(l)){t.push(l),o.length>0&&n.push(...o);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){t.push(l),o.length>0&&t.push(...o);break}else if(this._defaultCommandName){n.push(l),o.length>0&&n.push(...o);break}}if(this._passThroughOptions){s.push(l),o.length>0&&s.push(...o);break}s.push(l)}return{operands:t,unknown:n}}opts(){if(this._storeOptionsAsProperties){let e={},t=this.options.length;for(let n=0;n<t;n++){let s=this.options[n].attributeName();e[s]=s===this._versionOptionName?this._version:this[s]}return e}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((e,t)=>Object.assign(e,t.opts()),{})}error(e,t){this._outputConfiguration.outputError(`${e}
18
18
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
19
19
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
20
- `),this.outputHelp({error:!0}));let r=t||{},s=r.exitCode||1,i=r.code||"commander.error";this._exit(s,i,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in P.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()}`,P.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new tn(this.options),t=r=>this.getOptionValue(r)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(r));this.options.filter(r=>r.implied!==void 0&&t(r.attributeName())&&e.valueFromOption(this.getOptionValue(r.attributeName()),r)).forEach(r=>{Object.keys(r.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,r.implied[s],"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 r=o=>{let a=o.attributeName(),c=this.getOptionValue(a),l=this.options.find(h=>h.negate&&a===h.attributeName()),u=this.options.find(h=>!h.negate&&a===h.attributeName());return l&&(l.presetArg===void 0&&c===!1||l.presetArg!==void 0&&c===l.presetArg)?l:u||o},s=o=>{let a=r(o),c=a.attributeName();return this.getOptionValueSource(c)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},i=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(i,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],i=this;do{let o=i.createHelp().visibleOptions(i).filter(a=>a.long).map(a=>a.long);s=s.concat(o),i=i.parent}while(i&&!i._enablePositionalOptions);t=qt(e,s)}let r=`error: unknown option '${e}'${t}`;this.error(r,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,r=t===1?"":"s",i=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${r} but got ${e.length}.`;this.error(i,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(i=>{s.push(i.name()),i.alias()&&s.push(i.alias())}),t=qt(e,s)}let r=`error: unknown command '${e}'${t}`;this.error(r,{code:"commander.unknownCommand"})}version(e,t,r){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",r=r||"output the version number";let s=this.createOption(t,r);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
- `),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 r=this.parent?._findCommand(e);if(r){let s=[r.name()].concat(r.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}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(r=>Zr(r));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=ne.basename(e,ne.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},r;return t.error?r=s=>this._outputConfiguration.writeErr(s):r=s=>this._outputConfiguration.writeOut(s),t.write=e.write||r,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let r=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(i=>i.emit("beforeAllHelp",r)),this.emit("beforeHelp",r);let s=this.helpInformation(r);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");r.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",r),this._getCommandAndAncestors().forEach(i=>i.emit("afterAllHelp",r))}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=P.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let r=["beforeAll","before","after","afterAll"];if(!r.includes(e))throw new Error(`Unexpected value for position to addHelpText.
22
- Expecting one of '${r.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let o;typeof t=="function"?o=t({error:i.error,command:i.command}):o=t,o&&i.write(`${o}
23
- `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Bt(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,r="127.0.0.1",s="9229",i;return(i=e.match(/^(--inspect(-brk)?)$/))!==null?t=i[1]:(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=i[1],/^\d+$/.test(i[3])?s=i[3]:r=i[3]):(i=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=i[1],r=i[3],s=i[4]),t&&s!=="0"?`${t}=${r}:${parseInt(s)+1}`:e})}Mt.Command=yt});var zt=re(M=>{var{Argument:Gt}=Ne(),{Command:wt}=Wt(),{CommanderError:rn,InvalidArgumentError:Jt}=be(),{Help:nn}=lt(),{Option:Kt}=ft();M.program=new wt;M.createCommand=n=>new wt(n);M.createOption=(n,e)=>new Kt(n,e);M.createArgument=(n,e)=>new Gt(n,e);M.Command=wt;M.Option=Kt;M.Argument=Gt;M.Help=nn;M.CommanderError=rn;M.InvalidArgumentError=Jt;M.InvalidOptionArgumentError=Jt});var Xt=re((As,sn)=>{sn.exports={name:"dotenv",version:"16.6.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var nr=re(($s,se)=>{var _t=require("fs"),Le=require("path"),on=require("os"),an=require("crypto"),cn=Xt(),St=cn.version,ln=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function un(n){let e={},t=n.toString();t=t.replace(/\r\n?/mg,`
24
- `);let r;for(;(r=ln.exec(t))!=null;){let s=r[1],i=r[2]||"";i=i.trim();let o=i[0];i=i.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(i=i.replace(/\\n/g,`
25
- `),i=i.replace(/\\r/g,"\r")),e[s]=i}return e}function dn(n){n=n||{};let e=rr(n);n.path=e;let t=I.configDotenv(n);if(!t.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw o.code="MISSING_DATA",o}let r=tr(n).split(","),s=r.length,i;for(let o=0;o<s;o++)try{let a=r[o].trim(),c=fn(t,a);i=I.decrypt(c.ciphertext,c.key);break}catch(a){if(o+1>=s)throw a}return I.parse(i)}function hn(n){console.log(`[dotenv@${St}][WARN] ${n}`)}function Ce(n){console.log(`[dotenv@${St}][DEBUG] ${n}`)}function er(n){console.log(`[dotenv@${St}] ${n}`)}function tr(n){return n&&n.DOTENV_KEY&&n.DOTENV_KEY.length>0?n.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function fn(n,e){let t;try{t=new URL(e)}catch(a){if(a.code==="ERR_INVALID_URL"){let c=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw c.code="INVALID_DOTENV_KEY",c}throw a}let r=t.password;if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let s=t.searchParams.get("environment");if(!s){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let i=`DOTENV_VAULT_${s.toUpperCase()}`,o=n.parsed[i];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${i} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:r}}function rr(n){let e=null;if(n&&n.path&&n.path.length>0)if(Array.isArray(n.path))for(let t of n.path)_t.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=n.path.endsWith(".vault")?n.path:`${n.path}.vault`;else e=Le.resolve(process.cwd(),".env.vault");return _t.existsSync(e)?e:null}function Zt(n){return n[0]==="~"?Le.join(on.homedir(),n.slice(1)):n}function pn(n){let e=!!(n&&n.debug),t=n&&"quiet"in n?n.quiet:!0;(e||!t)&&er("Loading env from encrypted .env.vault");let r=I._parseVault(n),s=process.env;return n&&n.processEnv!=null&&(s=n.processEnv),I.populate(s,r,n),{parsed:r}}function mn(n){let e=Le.resolve(process.cwd(),".env"),t="utf8",r=!!(n&&n.debug),s=n&&"quiet"in n?n.quiet:!0;n&&n.encoding?t=n.encoding:r&&Ce("No encoding is specified. UTF-8 is used by default");let i=[e];if(n&&n.path)if(!Array.isArray(n.path))i=[Zt(n.path)];else{i=[];for(let l of n.path)i.push(Zt(l))}let o,a={};for(let l of i)try{let u=I.parse(_t.readFileSync(l,{encoding:t}));I.populate(a,u,n)}catch(u){r&&Ce(`Failed to load ${l} ${u.message}`),o=u}let c=process.env;if(n&&n.processEnv!=null&&(c=n.processEnv),I.populate(c,a,n),r||!s){let l=Object.keys(a).length,u=[];for(let h of i)try{let d=Le.relative(process.cwd(),h);u.push(d)}catch(d){r&&Ce(`Failed to load ${h} ${d.message}`),o=d}er(`injecting env (${l}) from ${u.join(",")}`)}return o?{parsed:a,error:o}:{parsed:a}}function gn(n){if(tr(n).length===0)return I.configDotenv(n);let e=rr(n);return e?I._configVault(n):(hn(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),I.configDotenv(n))}function yn(n,e){let t=Buffer.from(e.slice(-64),"hex"),r=Buffer.from(n,"base64"),s=r.subarray(0,12),i=r.subarray(-16);r=r.subarray(12,-16);try{let o=an.createDecipheriv("aes-256-gcm",t,s);return o.setAuthTag(i),`${o.update(r)}${o.final()}`}catch(o){let a=o instanceof RangeError,c=o.message==="Invalid key length",l=o.message==="Unsupported state or unable to authenticate data";if(a||c){let u=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw u.code="INVALID_DOTENV_KEY",u}else if(l){let u=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw u.code="DECRYPTION_FAILED",u}else throw o}}function wn(n,e,t={}){let r=!!(t&&t.debug),s=!!(t&&t.override);if(typeof e!="object"){let i=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw i.code="OBJECT_REQUIRED",i}for(let i of Object.keys(e))Object.prototype.hasOwnProperty.call(n,i)?(s===!0&&(n[i]=e[i]),r&&Ce(s===!0?`"${i}" is already defined and WAS overwritten`:`"${i}" is already defined and was NOT overwritten`)):n[i]=e[i]}var I={configDotenv:mn,_configVault:pn,_parseVault:dn,config:gn,decrypt:yn,parse:un,populate:wn};se.exports.configDotenv=I.configDotenv;se.exports._configVault=I._configVault;se.exports._parseVault=I._parseVault;se.exports.config=I.config;se.exports.decrypt=I.decrypt;se.exports.parse=I.parse;se.exports.populate=I.populate;se.exports=I});var or={};Hr(or,{baseDir:()=>Re,configPath:()=>bt,ensureDir:()=>we,fileExists:()=>_e,getProjectDir:()=>oe,loadConfig:()=>ie,readJson:()=>R,removeProjectCache:()=>Te,removeProjectData:()=>Ct,saveConfig:()=>xe,writeJson:()=>X});async function we(n){await ue.default.mkdir(n,{recursive:!0})}async function R(n,e){try{let t=await ue.default.readFile(n,"utf8");return JSON.parse(t)}catch(t){if(t&&t.code==="ENOENT")return e;throw t}}async function X(n,e){let t=de.default.dirname(n);await we(t);let r=JSON.stringify(e,null,2);await ue.default.writeFile(n,r,"utf8")}async function ie(){return await we(Re),await R(bt,{projects:{}})}async function xe(n){await X(bt,n)}function oe(n){return de.default.join(Re,"projects",n)}async function Ct(n){let e=oe(n);await ue.default.rm(e,{recursive:!0,force:!0})}async function Te(n){let e=oe(n),t=de.default.join(e,"cache.json"),r=de.default.join(e,"cache-signatures.json");await ue.default.rm(t,{force:!0}),await ue.default.rm(r,{force:!0})}async function _e(n){try{return await ue.default.access(n),!0}catch{return!1}}var ue,ir,de,Re,bt,Se=Ur(()=>{ue=H(require("node:fs/promises"),1),ir=H(require("node:os"),1),de=H(require("node:path"),1),Re=process.env.AGENQA_CLI_HOME?de.default.resolve(process.env.AGENQA_CLI_HOME):de.default.join(ir.default.homedir(),".agenqa-cli"),bt=de.default.join(Re,"config.json")});var Dr=H(require("node:path"),1);var Yt=H(zt(),1),{program:ms,createCommand:gs,createArgument:ys,createOption:ws,CommanderError:_s,InvalidArgumentError:Ss,InvalidOptionArgumentError:bs,Command:Qt,Argument:Cs,Option:Es,Help:xs}=Yt.default;var si=H(nr(),1);var sr=H(require("node:readline/promises"),1),Ee=require("node:process");async function ye(n,{required:e=!1}={}){let t=sr.default.createInterface({input:Ee.stdin,output:Ee.stdout});try{for(;;){let r=(await t.question(`${n} `)).trim().toLowerCase();if(!r&&!e)return null;if(["y","yes"].includes(r))return!0;if(["n","no"].includes(r))return!1;Ee.stdout.write(`Please answer yes or no.
26
- `)}}finally{t.close()}}Se();var vt=H(require("node:fs/promises"),1),ur=require("node:fs"),K=H(require("node:path"),1),dr=H(require("node:crypto"),1);var _n="https://www.agenqa.com/api",Sn=/\/api(\/|$)/;function Et(n){if(!n)return"";let e=n.replace(/\/+$/,"");return e?Sn.test(e)?e:/^https?:\/\/[^/]+$/.test(e)?`${e}/api`:e:""}function ve(n,e){let t=n.projects?.[e],r=process.env.AGENQA_API_BASE_URL||_n||"";return Et(t?.baseUrl||n.baseUrl||r||"")}function Ve(n,e){let t={"X-Cloud-Key-Token":n.keyToken};return e&&(t["X-Cloud-Project-Id"]=e),t}function xt(n,e){let t=new Error(`Request failed with status code ${n.status}`);return t.status=n.status,t.body=e,t.contentType=n.headers.get("content-type")||"",t}async function Ae(n,e={}){let t=await fetch(n,{...e,headers:{Accept:"application/json",...e.headers||{}}});if(!t.ok){let r=await t.text();throw xt(t,r)}return await t.json()}async function ar(n,e={}){let t=await fetch(n,e);if(!t.ok){let i=await t.text();throw xt(t,i)}let r=Buffer.from(await t.arrayBuffer()),s=Object.fromEntries(t.headers.entries());return{buffer:r,headers:s}}async function Ue(n,{formData:e,headers:t={},signal:r}={}){let s={Accept:"application/json",...t},i=await fetch(n,{method:"POST",headers:s,body:e,signal:r});if(!i.ok){let a=await i.text();throw xt(i,a)}return await i.json()}function cr(n){return n&&(n.status===401||n.status===403)}Se();async function bn(n){let e=dr.default.createHash("sha256");return new Promise((t,r)=>{let s=(0,ur.createReadStream)(n);s.on("data",i=>e.update(i)),s.on("error",r),s.on("end",()=>t(e.digest("hex")))})}function lr(n){return!n||typeof n!="object"?null:n.id||n.cloudId||n.cloud_id||null}async function He(n,e,t={}){let r=n.projects?.[e];if(!r)throw new Error(`Project ${e} is not imported. Run "agenqa import" first.`);let s=ve(n,e);if(!s)throw new Error("API base URL is not configured. Set AGENQA_API_BASE_URL.");let i=Ve(r,e),o=oe(e);await we(o);let a=await Ae(`${s}/cloud/cli/projects/${e}`,{headers:i}),c={id:a.project?.id,name:a.project?.name,version:a.project?.version,ownerId:a.project?.owner_id,readOnly:a.project?.read_only||!1,synced_at:new Date().toISOString()},l=a.project?.structure_json||{},u=!!l?.disableCacheGlobally;await X(K.default.join(o,"project.json"),c),await X(K.default.join(o,"structure.json"),l);let h=await Cn({baseUrl:s,projectId:e,headers:i,projectDir:o,serverFiles:hr(a.project?.structure_json)}),d=a.project?.cache_version||null,f={downloaded:0,skipped:0,total:0,version:d,updated:!1},m=t?.cacheOverride??null,g=u||m===!1?!1:typeof r.cacheCloudEnabled=="boolean"?r.cacheCloudEnabled:!!r.cacheEnabled,w=u||m===!1?!1:typeof r.cacheLocalEnabled=="boolean"?r.cacheLocalEnabled:!!r.cacheEnabled;if(g&&w){let y=K.default.join(o,"cache.json"),F=(await R(y,{entries:[],version:null})).version||null;!d&&F?(await X(y,{version:null,entries:[]}),f={downloaded:0,skipped:0,total:0,version:null,updated:!0}):!!d&&d!==F?f=await En({baseUrl:s,projectId:e,headers:i,projectDir:o,cacheVersionHint:d}):f={downloaded:0,skipped:0,total:0,version:F,updated:!1}}return{project:c,files:h,cache:f,cacheDisabledGlobally:u}}function hr(n){let e=new Map,t=(r,s=null)=>{if(Array.isArray(r))for(let i of r)!i?.id||e.has(i.id)||e.set(i.id,{...i,mime_type:i.mime_type??i.type,size_bytes:i.size_bytes??i.size,test_case_id:s||i?.test_case_id||i?.testCaseId||null})};return Array.isArray(n?.documents)&&n.documents.forEach(r=>t(r?.files||[],lr(r))),Array.isArray(n?.testFolders)&&n.testFolders.forEach(r=>{Array.isArray(r?.documents)&&r.documents.forEach(s=>t(s?.files,lr(s)))}),Array.from(e.values())}async function Cn({baseUrl:n,projectId:e,headers:t,projectDir:r,serverFiles:s}){let i=K.default.join(r,"files");await we(i);let o=K.default.join(r,"files.json"),c=(await R(o,{files:{}})).files||{},l=Array.isArray(s)?s:[];if(!l.length){let g=await Ae(`${n}/cloud/cli/projects/${e}`,{headers:t});l=hr(g.project?.structure_json)}let u={files:{}},h=new Set,d=0,f=0,m=0;for(let g of l){h.add(g.id);let w=g?.test_case_id||g?.testCaseId||g?.test_id||g?.testId||null;if(!w)throw new Error(`Missing test case ID for file ${g?.name||g?.id||"unknown"}`);let y=typeof g.name=="string"&&g.name.trim().length>0?g.name:null;if(!y)throw new Error(`Missing file name for file ${g?.id||"unknown"}`);let b=String(w),F=K.default.join("files",b,y),p=K.default.join(r,"files",b);await we(p),u.files[g.id]={name:g.name,mime_type:g.mime_type,size_bytes:g.size_bytes,content_hash:g.content_hash,created_at:g.created_at,test_case_id:w||null,path:F};let C=K.default.join(r,F),E=await _e(C),D=E?await bn(C):null;if(!E||!D||g.content_hash!==D)try{let T=await Ae(`${n}/cloud/cli/projects/${e}/files/${g.id}/presign-download`,{headers:t});if(!T?.download_url){console.warn(`Warning: missing download URL for file ${g.name||g.id}. Skipping.`),f++;continue}let j=await ar(T.download_url,{headers:T.headers||{}});await vt.default.writeFile(C,j.buffer),d++}catch(T){if(T?.status===404){console.warn(`Warning: cloud file not found (${g.name||g.id}). Skipping.`),f++;continue}throw T}else f++}for(let[g]of Object.entries(c))if(!h.has(g)){let w=c[g]||{};if(!w.path){console.warn(`Warning: missing stored path for file ${g}, skipping removal.`);continue}let y=K.default.join(r,w.path);await _e(y)&&await vt.default.unlink(y),m++}return await X(o,u),{downloaded:d,skipped:f,removed:m,total:l.length}}async function En({baseUrl:n,projectId:e,headers:t,projectDir:r,cacheVersionHint:s=null}){let i=K.default.join(r,"cache.json"),a=(await R(i,{entries:[]})).version||null,c=await Ae(`${n}/cloud/cli/projects/${e}/cache`,{headers:t}),l=Array.isArray(c.entries)?c.entries:[],u=s||xn(l);if(u&&a&&u===a)return{downloaded:0,skipped:l.length,total:l.length,version:u,updated:!1};let h={version:u,entries:[]},d=0,f=0;for(let m of l)!m?.key||typeof m.value>"u"||(h.entries.push({key:m.key,value:m.value,meta:m.meta||{},createdAt:Date.now(),expiresAt:null}),d++);return await X(i,h),{downloaded:d,skipped:f,total:l.length,version:u,updated:!0}}function xn(n){if(!Array.isArray(n)||n.length===0)return null;let e=null;for(let t of n){let r=t?.updated_at;if(!r)continue;let s=Date.parse(r);Number.isNaN(s)||(!e||s>e)&&(e=s)}return e?new Date(e).toISOString():null}var et=H(require("node:path"),1);var vn={info:"INFO",success:"SUCCESS",warning:"WARN",error:"ERROR"},qe=class{constructor(e={}){this.logs=[],this.silent=!!e.silent}addLog(e,t,r,s=null,i=null){let o={testId:e,level:t,message:r,details:s,extra:i,timestamp:new Date().toISOString()};if(this.logs.push(o),!this.silent||t==="error"){let a=vn[t]||t?.toUpperCase?.()||"LOG",c=e?`[${a}] [${e}]`:`[${a}]`;console.log(`${c} ${r}`),s&&console.log(s)}}convertScreenshotToDataUrl(){return null}getLogs(){return this.logs}};var At=H(require("node:vm"),1),Be=H(require("node:path"),1),gr=require("node:child_process"),yr=require("node:fs"),Oe=require("node:url"),jt=require("playwright"),wr=require("playwright/test"),x=null,fr=!1,$e=new Map,_r=new Set,Me="EXECUTION_STOPPED",Sr=["--yes","playwright","install","--with-deps","chromium"],br=process.platform==="win32"?"npx.cmd":"npx";function $t(){try{let n=jt.chromium.executablePath?.();return typeof n=="string"?n:null}catch{return null}}function pr(){let n=$t();return!!(n&&(0,yr.existsSync)(n))}function An(){let n=(0,gr.spawnSync)(br,Sr,{stdio:"inherit"});if(n.error)throw n.error;if(typeof n.status=="number"&&n.status!==0)throw new Error(`Playwright install failed with exit code ${n.status}.`)}function $n(){if(!pr()){if(fr){let n=$t()||"unknown";throw new Error(`Chromium is still missing after an install attempt. Expected at: ${n}`)}fr=!0;try{An()}catch(n){let e=`${br} ${Sr.join(" ")}`,t=n?.message||String(n);throw new Error(`Failed to install Playwright Chromium via "${e}". ${t}`)}if(!pr()){let n=$t()||"unknown";throw new Error(`Playwright install finished, but Chromium is still missing at: ${n}`)}}}function On(n,e,t,r){if(!x)return!0;switch(e){case"never":return!1;case"testFolder":return x.projectId!==r||x.testFolderId!==t;case"test":default:return x.sessionTestId!==n}}async function ce(){if(x){try{x.browser&&await x.browser.close()}catch{}x=null}}async function We(){if(!x||!x.context)return null;try{let n=await x.context.storageState(),e={cookies:n.cookies||[],localStorage:{},sessionStorage:{}};return n.origins&&n.origins.forEach(t=>{t.localStorage&&t.localStorage.length>0&&(e.localStorage[t.origin]={},t.localStorage.forEach(r=>{e.localStorage[t.origin][r.name]=r.value})),t.sessionStorage&&t.sessionStorage.length>0&&(e.sessionStorage[t.origin]={},t.sessionStorage.forEach(r=>{e.sessionStorage[t.origin][r.name]=r.value}))}),e}catch{return null}}async function Cr(n,e){try{let t={cookies:[],origins:[]},r=null;try{r=await We()}catch{if(x?.browserState)try{r=JSON.parse(JSON.stringify(x.browserState))}catch{r=x.browserState}else r=null}let s=null;if(n)try{s=JSON.parse(JSON.stringify(n))}catch{s=null}let i=[];r?.cookies?.length&&i.push(...r.cookies),s?.cookies?.length&&s.cookies.forEach(a=>{if(a?.name&&a?.value&&a?.domain){let c=i.findIndex(l=>l.name===a.name&&l.domain===a.domain&&(l.path||"/")===(a.path||"/"));c>=0&&i.splice(c,1),i.push(a)}}),t.cookies=i.filter(a=>a?.name&&a?.value&&a?.domain).map(a=>{let c=a.domain.includes(":")?a.domain.split(":")[0]:a.domain,l={name:a.name,value:String(a.value),domain:c,path:a.path||"/"};if(a.expires){let u=new Date(a.expires);Number.isNaN(u.getTime())||(l.expires=Math.floor(u.getTime()/1e3))}else typeof a.expires=="number"&&(l.expires=a.expires);return typeof a.httpOnly=="boolean"&&(l.httpOnly=a.httpOnly),typeof a.secure=="boolean"&&(l.secure=a.secure),a.sameSite&&(l.sameSite=a.sameSite),l});let o={};if(r?.localStorage)for(let[a,c]of Object.entries(r.localStorage))o[a]||(o[a]={localStorage:{},sessionStorage:{}}),Object.assign(o[a].localStorage,c);if(r?.sessionStorage)for(let[a,c]of Object.entries(r.sessionStorage))o[a]||(o[a]={localStorage:{},sessionStorage:{}}),Object.assign(o[a].sessionStorage,c);if(s?.localStorage)for(let[a,c]of Object.entries(s.localStorage)){let l=a==="default"?e?new Oe.URL(e).origin:null:a;l&&(o[l]||(o[l]={localStorage:{},sessionStorage:{}}),Object.assign(o[l].localStorage,c))}if(s?.sessionStorage)for(let[a,c]of Object.entries(s.sessionStorage)){let l=a==="default"?e?new Oe.URL(e).origin:null:a;l&&(o[l]||(o[l]={localStorage:{},sessionStorage:{}}),Object.assign(o[l].sessionStorage,c))}for(let[a,c]of Object.entries(o)){let l={origin:a};l.localStorage=Object.entries(c.localStorage||{}).map(([u,h])=>({name:u,value:String(h)})),l.sessionStorage=Object.entries(c.sessionStorage||{}).map(([u,h])=>({name:u,value:String(h)})),(l.localStorage.length>0||l.sessionStorage.length>0)&&t.origins.push(l)}return t.cookies.length>0||t.origins.length>0?t:null}catch{return null}}async function jn(n,e,t){if(!n||!e)return;let r=t||n.url||null;if(!r){let s=Object.keys(e.localStorage||{})[0]||Object.keys(e.sessionStorage||{})[0]||null;if(s)r=s;else if(e.cookies?.length){let i=e.cookies[0];if(i.domain){let o=i.secure?"https":"http",a=i.domain.startsWith(".")?i.domain.substring(1):i.domain;r=`${o}://${a}`}}}try{let s=await Cr(e,r);if(!s){n.browserState=JSON.parse(JSON.stringify(e));return}if(s.cookies?.length&&n.context){let i=s.cookies.map(o=>({name:o.name,value:String(o.value),domain:o.domain,path:o.path||"/",expires:typeof o.expires=="number"?o.expires:void 0,httpOnly:typeof o.httpOnly=="boolean"?o.httpOnly:void 0,secure:typeof o.secure=="boolean"?o.secure:void 0,sameSite:o.sameSite||void 0}));try{await n.context.addCookies(i)}catch{}}if(s.origins?.length&&n.page)try{await n.page.addInitScript(({origins:i})=>{try{let o=window.location.origin,a=i.find(c=>c.origin===o);if(!a)return;Array.isArray(a.localStorage)&&a.localStorage.forEach(({name:c,value:l})=>{try{window.localStorage.setItem(c,l)}catch{}}),Array.isArray(a.sessionStorage)&&a.sessionStorage.forEach(({name:c,value:l})=>{try{window.sessionStorage.setItem(c,l)}catch{}})}catch{}},{origins:s.origins})}catch{}try{let i=await We();n.browserState=i||JSON.parse(JSON.stringify(e))}catch{n.browserState=e}}catch{n.browserState=e}}async function Pn(n,e,t){if(!n||!e)return;let r=(()=>{try{return t?new Oe.URL(t).origin:new Oe.URL(n.url()).origin}catch{return null}})(),s=(a={})=>{let c=[];for(let[l,u]of Object.entries(a)){let h=l==="default"&&r?r:l;if(!(!h||r&&h!==r))for(let[d,f]of Object.entries(u||{}))c.push({key:d,value:String(f)})}return c},i=s(e.localStorage),o=s(e.sessionStorage);try{await n.evaluate(({localEntries:a,sessionEntries:c})=>{try{Array.isArray(a)&&a.forEach(({key:l,value:u})=>{try{window.localStorage.setItem(l,u)}catch{}}),Array.isArray(c)&&c.forEach(({key:l,value:u})=>{try{window.sessionStorage.setItem(l,u)}catch{}})}catch{}},{localEntries:i,sessionEntries:o})}catch{}if(Array.isArray(e.cookies)&&e.cookies.length>0)try{await n.evaluate(a=>{try{a.forEach(c=>{if(c&&c.name&&c.value){let l=[`${c.name}=${c.value}`];c.path&&l.push(`path=${c.path}`),c.domain&&!c.domain.startsWith(".")&&l.push(`domain=${c.domain}`),c.secure&&l.push("Secure"),c.sameSite&&l.push(`SameSite=${c.sameSite}`),document.cookie=l.join("; ")}})}catch{}},e.cookies)}catch{}}function kn(n){let e=new Set;for(let t of n)typeof t=="string"?e.add(Be.default.resolve(t)):t&&typeof t=="object"&&t.path&&e.add(Be.default.resolve(t.path));return function(r){if(!r||typeof r!="string")return!1;let s=Be.default.resolve(r);return e.has(s)}}function Fn(n,e){let t=kn(e);return new Proxy(n,{get(r,s){let i=r[s];return s==="constructor"?i:s==="locator"&&typeof i=="function"?function(...o){let a=i.apply(r,o),c=a.setInputFiles;return c&&(a.setInputFiles=function(l){if(Array.isArray(l)){let u=l.map(h=>{if(!t(h))throw new Error(`Access denied: File not in allowed test files: ${h}`);return h});return c.call(this,u)}if(typeof l=="string"){if(!t(l))throw new Error(`Access denied: File not in allowed test files: ${l}`);return c.call(this,l)}return c.call(this,l)}),a}:typeof i=="function"?i.bind(r):i}})}function Dn(n){n&&_r.add(n)}function q(n){return!!n&&_r.has(n)}function ae(n){let e=new Error("Test execution stopped by user");return e.code=Me,e.testId=n,e}function Er(n){if(!n)return null;let e=null,t=100;return{promise:new Promise((i,o)=>{let a=()=>{q(n)&&(e&&clearInterval(e),ce().catch(()=>{}),o(ae(n)))};a(),e=setInterval(a,t)}),cancel:()=>{e&&(clearInterval(e),e=null)}}}async function In(n){Dn(n);let e=$e.get(n),t=!1;if(e){if(e.vmContext)try{e.vmContext=null}catch{}e.abortController&&e.abortController.abort(),await ce(),t=!0}if(x&&(!n||x.sessionTestId===n))try{await ce(),t=!0}catch{}return $e.delete(n),t||q(n)}function mr(n){return typeof n=="string"&&n.length>0&&n!=="about:blank"&&!n.startsWith("data:")}async function Nn(n){let e=()=>mr(n.url());if(e())return n.url();try{await n.waitForLoadState("domcontentloaded",{timeout:1e4})}catch{}if(e())return n.url();try{await n.waitForURL(t=>mr(t),{timeout:1e4})}catch{}if(e())return n.url();try{await n.waitForLoadState("load",{timeout:5e3})}catch{}return n.url()}function Ln(n){if(!n||!n.message)return!1;let e=n.message.toLowerCase(),t=(n.name||"").toLowerCase(),r=(n.constructor?.name||"").toLowerCase();return e.includes("strict mode violation")?!1:e.includes("expect(")||e.includes("expected")&&e.includes("received")||e.includes("assertion")||t==="assertionerror"||r==="assertionerror"||t==="expectationerror"||r==="expectationerror"||t==="testerror"||r==="testerror"||e.includes("tobevisible")||e.includes("tobehidden")||e.includes("tobeenabled")||e.includes("tobedisabled")||e.includes("tobechecked")||e.includes("tobeattached")||e.includes("tobedetached")||e.includes("tobeempty")||e.includes("tobefocused")||e.includes("tohavetext")||e.includes("tohavevalue")||e.includes("tohaveattribute")||e.includes("tohaveclass")||e.includes("tohavecount")||e.includes("tohaveurl")||e.includes("tohavetitle")||e.includes("tocontain")||e.includes("toequal")||e.includes("tomatch")||e.includes("tobetruthy")||e.includes("tobefalsy")||e.includes("tobenan")||e.includes("tobenull")||e.includes("tobeundefined")||e.includes("timed out")&&(e.includes("waiting for expect(")||e.includes("ms waiting for expect(")||e.includes("call log:")&&e.includes("expect("))||e.includes("unexpected value")||e.includes("assertion failed")||e.includes("expectation failed")||e.includes("test failed")||e.includes("element not found")&&e.includes("expected")||e.includes("selector")&&e.includes("not found")&&e.includes("expected")}function Ot(n,e=null){let t=n||"the requested page",r=new Error(`It is impossible to reach ${t}. Please verify your internet connection or confirm the site allows automated browsing.`);return e&&(r.cause=e),r}async function xr(n,e,t=null){if(q(t))throw ae(t);try{await n.goto(e,{waitUntil:"networkidle",timeout:3e4})}catch(r){if(q(t))throw ae(t);try{let s=await n.evaluate(()=>document.readyState);if(s==="complete"||s==="interactive")return}catch{throw Ot(e,r)}throw Ot(e,r)}if(q(t))throw ae(t)}async function Ge(n,e,t=null,r=3,s="test",i=null,o=null){if(q(n))throw ae(n);let a=On(n,s,i,o);if(!x||a){await ce(),$n();let c=null;for(let l=1;l<=r;l++){if(q(n))throw ae(n);try{let u=await jt.chromium.launch(),h={viewport:{width:1920,height:1080},ignoreHTTPSErrors:!0};if(t){let m=await Cr(t,e);m&&(h.storageState=m)}let d=await u.newContext(h);if(t?.sessionStorage&&Object.keys(t.sessionStorage).length>0){let m=`
20
+ `),this.outputHelp({error:!0}));let n=t||{},s=n.exitCode||1,o=n.code||"commander.error";this._exit(s,o,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in O.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()}`,O.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new xn(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(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,n.implied[s],"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=i=>{let a=i.attributeName(),l=this.getOptionValue(a),c=this.options.find(d=>d.negate&&a===d.attributeName()),u=this.options.find(d=>!d.negate&&a===d.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:u||i},s=i=>{let a=n(i),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},o=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(o,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],o=this;do{let i=o.createHelp().visibleOptions(o).filter(a=>a.long).map(a=>a.long);s=s.concat(i),o=o.parent}while(o&&!o._enablePositionalOptions);t=lr(e,s)}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 s=[];this.createHelp().visibleCommands(this).forEach(o=>{s.push(o.name()),o.alias()&&s.push(o.alias())}),t=lr(e,s)}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 s=this.createOption(t,n);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
21
+ `),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 s=[n.name()].concat(n.aliases()).join("|");throw new Error(`cannot add alias '${e}' to command '${this.name()}' as already have command '${s}'`)}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=>En(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=ue.basename(e,ue.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=s=>this._outputConfiguration.writeErr(s):n=s=>this._outputConfiguration.writeOut(s),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 s=this.helpInformation(n);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");n.write(s),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=O.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.
22
+ Expecting one of '${n.join("', '")}'`);let s=`${e}Help`;return this.on(s,o=>{let i;typeof t=="function"?i=t({error:o.error,command:o.command}):i=t,i&&o.write(`${i}
23
+ `)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function ur(r){return r.map(e=>{if(!e.startsWith("--inspect"))return e;let t,n="127.0.0.1",s="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])?s=o[3]:n=o[3]):(o=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=o[1],n=o[3],s=o[4]),t&&s!=="0"?`${t}=${n}:${parseInt(s)+1}`:e})}dr.Command=Rt});var gr=le(J=>{var{Argument:fr}=et(),{Command:It}=hr(),{CommanderError:$n,InvalidArgumentError:pr}=Te(),{Help:On}=jt(),{Option:mr}=Ut();J.program=new It;J.createCommand=r=>new It(r);J.createOption=(r,e)=>new mr(r,e);J.createArgument=(r,e)=>new fr(r,e);J.Command=It;J.Option=mr;J.Argument=fr;J.Help=On;J.CommanderError=$n;J.InvalidArgumentError=pr;J.InvalidOptionArgumentError=pr});var _r=le((no,jn)=>{jn.exports={name:"dotenv",version:"16.6.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var Er=le((so,de)=>{var Tt=require("fs"),tt=require("path"),Pn=require("os"),kn=require("crypto"),Fn=_r(),Vt=Fn.version,Un=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function Dn(r){let e={},t=r.toString();t=t.replace(/\r\n?/mg,`
24
+ `);let n;for(;(n=Un.exec(t))!=null;){let s=n[1],o=n[2]||"";o=o.trim();let i=o[0];o=o.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),i==='"'&&(o=o.replace(/\\n/g,`
25
+ `),o=o.replace(/\\r/g,"\r")),e[s]=o}return e}function Ln(r){r=r||{};let e=Ar(r);r.path=e;let t=P.configDotenv(r);if(!t.parsed){let i=new Error(`MISSING_DATA: Cannot parse ${e} for an unknown reason`);throw i.code="MISSING_DATA",i}let n=Cr(r).split(","),s=n.length,o;for(let i=0;i<s;i++)try{let a=n[i].trim(),l=Rn(t,a);o=P.decrypt(l.ciphertext,l.key);break}catch(a){if(i+1>=s)throw a}return P.parse(o)}function Nn(r){console.log(`[dotenv@${Vt}][WARN] ${r}`)}function Ve(r){console.log(`[dotenv@${Vt}][DEBUG] ${r}`)}function br(r){console.log(`[dotenv@${Vt}] ${r}`)}function Cr(r){return r&&r.DOTENV_KEY&&r.DOTENV_KEY.length>0?r.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function Rn(r,e){let t;try{t=new URL(e)}catch(a){if(a.code==="ERR_INVALID_URL"){let l=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw l.code="INVALID_DOTENV_KEY",l}throw a}let n=t.password;if(!n){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let s=t.searchParams.get("environment");if(!s){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let o=`DOTENV_VAULT_${s.toUpperCase()}`,i=r.parsed[o];if(!i){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${o} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:i,key:n}}function Ar(r){let e=null;if(r&&r.path&&r.path.length>0)if(Array.isArray(r.path))for(let t of r.path)Tt.existsSync(t)&&(e=t.endsWith(".vault")?t:`${t}.vault`);else e=r.path.endsWith(".vault")?r.path:`${r.path}.vault`;else e=tt.resolve(process.cwd(),".env.vault");return Tt.existsSync(e)?e:null}function Sr(r){return r[0]==="~"?tt.join(Pn.homedir(),r.slice(1)):r}function In(r){let e=!!(r&&r.debug),t=r&&"quiet"in r?r.quiet:!0;(e||!t)&&br("Loading env from encrypted .env.vault");let n=P._parseVault(r),s=process.env;return r&&r.processEnv!=null&&(s=r.processEnv),P.populate(s,n,r),{parsed:n}}function Tn(r){let e=tt.resolve(process.cwd(),".env"),t="utf8",n=!!(r&&r.debug),s=r&&"quiet"in r?r.quiet:!0;r&&r.encoding?t=r.encoding:n&&Ve("No encoding is specified. UTF-8 is used by default");let o=[e];if(r&&r.path)if(!Array.isArray(r.path))o=[Sr(r.path)];else{o=[];for(let c of r.path)o.push(Sr(c))}let i,a={};for(let c of o)try{let u=P.parse(Tt.readFileSync(c,{encoding:t}));P.populate(a,u,r)}catch(u){n&&Ve(`Failed to load ${c} ${u.message}`),i=u}let l=process.env;if(r&&r.processEnv!=null&&(l=r.processEnv),P.populate(l,a,r),n||!s){let c=Object.keys(a).length,u=[];for(let d of o)try{let f=tt.relative(process.cwd(),d);u.push(f)}catch(f){n&&Ve(`Failed to load ${d} ${f.message}`),i=f}br(`injecting env (${c}) from ${u.join(",")}`)}return i?{parsed:a,error:i}:{parsed:a}}function Vn(r){if(Cr(r).length===0)return P.configDotenv(r);let e=Ar(r);return e?P._configVault(r):(Nn(`You set DOTENV_KEY but you are missing a .env.vault file at ${e}. Did you forget to build it?`),P.configDotenv(r))}function Hn(r,e){let t=Buffer.from(e.slice(-64),"hex"),n=Buffer.from(r,"base64"),s=n.subarray(0,12),o=n.subarray(-16);n=n.subarray(12,-16);try{let i=kn.createDecipheriv("aes-256-gcm",t,s);return i.setAuthTag(o),`${i.update(n)}${i.final()}`}catch(i){let a=i instanceof RangeError,l=i.message==="Invalid key length",c=i.message==="Unsupported state or unable to authenticate data";if(a||l){let u=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw u.code="INVALID_DOTENV_KEY",u}else if(c){let u=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw u.code="DECRYPTION_FAILED",u}else throw i}}function qn(r,e,t={}){let n=!!(t&&t.debug),s=!!(t&&t.override);if(typeof e!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(e))Object.prototype.hasOwnProperty.call(r,o)?(s===!0&&(r[o]=e[o]),n&&Ve(s===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):r[o]=e[o]}var P={configDotenv:Tn,_configVault:In,_parseVault:Ln,config:Vn,decrypt:Hn,parse:Dn,populate:qn};de.exports.configDotenv=P.configDotenv;de.exports._configVault=P._configVault;de.exports._parseVault=P._parseVault;de.exports.config=P.config;de.exports.decrypt=P.decrypt;de.exports.parse=P.parse;de.exports.populate=P.populate;de.exports=P});var $r={};hn($r,{baseDir:()=>rt,configPath:()=>Ht,ensureDir:()=>ve,fileExists:()=>Fe,getProjectDir:()=>fe,loadConfig:()=>he,readJson:()=>I,removeProjectCache:()=>nt,removeProjectData:()=>qt,saveConfig:()=>qe,writeJson:()=>ie});async function ve(r){await we.default.mkdir(r,{recursive:!0})}async function I(r,e){try{let t=await we.default.readFile(r,"utf8");return JSON.parse(t)}catch(t){if(t&&t.code==="ENOENT")return e;throw t}}async function ie(r,e){let t=_e.default.dirname(r);await ve(t);let n=JSON.stringify(e,null,2);await we.default.writeFile(r,n,"utf8")}async function he(){return await ve(rt),await I(Ht,{projects:{}})}async function qe(r){await ie(Ht,r)}function fe(r){return _e.default.join(rt,"projects",r)}async function qt(r){let e=fe(r);await we.default.rm(e,{recursive:!0,force:!0})}async function nt(r){let e=fe(r),t=_e.default.join(e,"cache.json"),n=_e.default.join(e,"cache-signatures.json");await we.default.rm(t,{force:!0}),await we.default.rm(n,{force:!0})}async function Fe(r){try{return await we.default.access(r),!0}catch{return!1}}var we,xr,_e,rt,Ht,Ue=dn(()=>{we=R(require("node:fs/promises"),1),xr=R(require("node:os"),1),_e=R(require("node:path"),1),rt=process.env.AGENQA_CLI_HOME?_e.default.resolve(process.env.AGENQA_CLI_HOME):_e.default.join(xr.default.homedir(),".agenqa-cli"),Ht=_e.default.join(rt,"config.json")});var nn=R(require("node:path"),1);var yr=R(gr(),1),{program:Gs,createCommand:Ks,createArgument:Js,createOption:zs,CommanderError:Ys,InvalidArgumentError:Qs,InvalidOptionArgumentError:Xs,Command:wr,Argument:Zs,Option:eo,Help:to}=yr.default;var No=R(Er(),1);var vr=R(require("node:readline/promises"),1),He=require("node:process");async function Ee(r,{required:e=!1}={}){let t=vr.default.createInterface({input:He.stdin,output:He.stdout});try{for(;;){let n=(await t.question(`${r} `)).trim().toLowerCase();if(!n&&!e)return null;if(["y","yes"].includes(n))return!0;if(["n","no"].includes(n))return!1;He.stdout.write(`Please answer yes or no.
26
+ `)}}finally{t.close()}}Ue();var Wt=R(require("node:fs/promises"),1),kr=require("node:fs"),Z=R(require("node:path"),1),Fr=R(require("node:crypto"),1);var Mn="https://www.agenqa.com/api",Bn=/\/api(\/|$)/;function Mt(r){if(!r)return"";let e=r.replace(/\/+$/,"");return e?Bn.test(e)?e:/^https?:\/\/[^/]+$/.test(e)?`${e}/api`:e:""}function Me(r,e){let t=r.projects?.[e],n=process.env.AGENQA_API_BASE_URL||Mn||"";return Mt(t?.baseUrl||r.baseUrl||n||"")}function st(r,e){let t={"X-Cloud-Key-Token":r.keyToken};return e&&(t["X-Cloud-Project-Id"]=e),t}function Bt(r,e){let t=`Request failed with status code ${r.status}`,n=r.headers.get("content-type")||"";if(e&&n.includes("application/json"))try{let o=JSON.parse(e),i=typeof o?.message=="string"&&o.message.trim()?o.message.trim():typeof o?.error=="string"&&o.error.trim()?o.error.trim():"";i&&(t=i)}catch{}let s=new Error(t);return s.status=r.status,s.body=e,s.contentType=n,s}async function Be(r,e={}){let t=await fetch(r,{...e,headers:{Accept:"application/json",...e.headers||{}}});if(!t.ok){let n=await t.text();throw Bt(t,n)}return await t.json()}async function Or(r,e={}){let t=await fetch(r,e);if(!t.ok){let o=await t.text();throw Bt(t,o)}let n=Buffer.from(await t.arrayBuffer()),s=Object.fromEntries(t.headers.entries());return{buffer:n,headers:s}}async function ot(r,{formData:e,headers:t={},signal:n}={}){let s={Accept:"application/json",...t},o=await fetch(r,{method:"POST",headers:s,body:e,signal:n});if(!o.ok){let a=await o.text();throw Bt(o,a)}return await o.json()}function jr(r){return r&&(r.status===401||r.status===403)}Ue();async function Wn(r){let e=Fr.default.createHash("sha256");return new Promise((t,n)=>{let s=(0,kr.createReadStream)(r);s.on("data",o=>e.update(o)),s.on("error",n),s.on("end",()=>t(e.digest("hex")))})}function Pr(r){return!r||typeof r!="object"?null:r.id||r.cloudId||r.cloud_id||null}async function it(r,e,t={}){let n=r.projects?.[e];if(!n)throw new Error(`Project ${e} is not imported. Run "agenqa import" first.`);let s=Me(r,e);if(!s)throw new Error("API base URL is not configured. Set AGENQA_API_BASE_URL.");let o=st(n,e),i=fe(e);await ve(i);let a=await Be(`${s}/cloud/cli/projects/${e}`,{headers:o}),l={id:a.project?.id,name:a.project?.name,version:a.project?.version,ownerId:a.project?.owner_id,readOnly:a.project?.read_only||!1,synced_at:new Date().toISOString()},c=a.project?.structure_json||{},u=!!c?.disableCacheGlobally;await ie(Z.default.join(i,"project.json"),l),await ie(Z.default.join(i,"structure.json"),c);let d=await Gn({baseUrl:s,projectId:e,headers:o,projectDir:i,serverFiles:Ur(a.project?.structure_json)}),f=a.project?.cache_version||null,h={downloaded:0,skipped:0,total:0,version:f,updated:!1},g=t?.cacheOverride??null,p=u||g===!1?!1:typeof n.cacheCloudEnabled=="boolean"?n.cacheCloudEnabled:!!n.cacheEnabled,y=u||g===!1?!1:typeof n.cacheLocalEnabled=="boolean"?n.cacheLocalEnabled:!!n.cacheEnabled;if(p&&y){let S=Z.default.join(i,"cache.json"),w=(await I(S,{entries:[],version:null})).version||null;!f&&w?(await ie(S,{version:null,entries:[]}),h={downloaded:0,skipped:0,total:0,version:null,updated:!0}):!!f&&f!==w?h=await Kn({baseUrl:s,projectId:e,headers:o,projectDir:i,cacheVersionHint:f}):h={downloaded:0,skipped:0,total:0,version:w,updated:!1}}return{project:l,files:d,cache:h,cacheDisabledGlobally:u}}function Ur(r){let e=new Map,t=(n,s=null)=>{if(Array.isArray(n))for(let o of n)!o?.id||e.has(o.id)||e.set(o.id,{...o,mime_type:o.mime_type??o.type,size_bytes:o.size_bytes??o.size,test_case_id:s||o?.test_case_id||o?.testCaseId||null})};return Array.isArray(r?.documents)&&r.documents.forEach(n=>t(n?.files||[],Pr(n))),Array.isArray(r?.testFolders)&&r.testFolders.forEach(n=>{Array.isArray(n?.documents)&&n.documents.forEach(s=>t(s?.files,Pr(s)))}),Array.from(e.values())}async function Gn({baseUrl:r,projectId:e,headers:t,projectDir:n,serverFiles:s}){let o=Z.default.join(n,"files");await ve(o);let i=Z.default.join(n,"files.json"),l=(await I(i,{files:{}})).files||{},c=Array.isArray(s)?s:[];if(!c.length){let p=await Be(`${r}/cloud/cli/projects/${e}`,{headers:t});c=Ur(p.project?.structure_json)}let u={files:{}},d=new Set,f=0,h=0,g=0;for(let p of c){d.add(p.id);let y=p?.test_case_id||p?.testCaseId||p?.test_id||p?.testId||null;if(!y)throw new Error(`Missing test case ID for file ${p?.name||p?.id||"unknown"}`);let S=typeof p.name=="string"&&p.name.trim().length>0?p.name:null;if(!S)throw new Error(`Missing file name for file ${p?.id||"unknown"}`);let b=String(y),w=Z.default.join("files",b,S),m=Z.default.join(n,"files",b);await ve(m),u.files[p.id]={name:p.name,mime_type:p.mime_type,size_bytes:p.size_bytes,content_hash:p.content_hash,created_at:p.created_at,test_case_id:y||null,path:w};let v=Z.default.join(n,w),A=await Fe(v),j=A?await Wn(v):null;if(!A||!j||p.content_hash!==j)try{let x=await Be(`${r}/cloud/cli/projects/${e}/files/${p.id}/presign-download`,{headers:t});if(!x?.download_url){console.warn(`Warning: missing download URL for file ${p.name||p.id}. Skipping.`),h++;continue}let W=await Or(x.download_url,{headers:x.headers||{}});await Wt.default.writeFile(v,W.buffer),f++}catch(x){if(x?.status===404){console.warn(`Warning: cloud file not found (${p.name||p.id}). Skipping.`),h++;continue}throw x}else h++}for(let[p]of Object.entries(l))if(!d.has(p)){let y=l[p]||{};if(!y.path){console.warn(`Warning: missing stored path for file ${p}, skipping removal.`);continue}let S=Z.default.join(n,y.path);await Fe(S)&&await Wt.default.unlink(S),g++}return await ie(i,u),{downloaded:f,skipped:h,removed:g,total:c.length}}async function Kn({baseUrl:r,projectId:e,headers:t,projectDir:n,cacheVersionHint:s=null}){let o=Z.default.join(n,"cache.json"),a=(await I(o,{entries:[]})).version||null,l=await Be(`${r}/cloud/cli/projects/${e}/cache`,{headers:t}),c=Array.isArray(l.entries)?l.entries:[],u=s||Jn(c);if(u&&a&&u===a)return{downloaded:0,skipped:c.length,total:c.length,version:u,updated:!1};let d={version:u,entries:[]},f=0,h=0;for(let g of c)!g?.key||typeof g.value>"u"||(d.entries.push({key:g.key,value:g.value,meta:g.meta||{},createdAt:Date.now(),expiresAt:null}),f++);return await ie(o,d),{downloaded:f,skipped:h,total:c.length,version:u,updated:!0}}function Jn(r){if(!Array.isArray(r)||r.length===0)return null;let e=null;for(let t of r){let n=t?.updated_at;if(!n)continue;let s=Date.parse(n);Number.isNaN(s)||(!e||s>e)&&(e=s)}return e?new Date(e).toISOString():null}var St=R(require("node:path"),1),_t=R(require("node:os"),1);var zn={info:"INFO",success:"SUCCESS",warning:"WARN",error:"ERROR"},at=class{constructor(e={}){this.logs=[],this.silent=!!e.silent}addLog(e,t,n,s=null,o=null){let i={testId:e,level:t,message:n,details:s,extra:o,timestamp:new Date().toISOString()};if(this.logs.push(i),!this.silent||t==="error"){let a=zn[t]||t?.toUpperCase?.()||"LOG",l=e?`[${a}] [${e}]`:`[${a}]`;console.log(`${l} ${n}`),s&&console.log(s)}}convertScreenshotToDataUrl(){return null}getLogs(){return this.logs}};var Gt=R(require("node:vm"),1),ct=R(require("node:path"),1),Vr=require("node:child_process"),Hr=require("node:fs"),Le=require("node:url"),zt=require("playwright"),qr=require("playwright/test"),Se=new Map,De=null,Dr=!1,Ge=new Map,Mr=new Set,lt="EXECUTION_STOPPED",Br=["--yes","playwright","install","--with-deps","chromium"],Wr=process.platform==="win32"?"npx.cmd":"npx";function be(r=null){if(r)return Se.get(r)||null;if(De&&Se.has(De))return Se.get(De);let e=Se.values().next();return e.done?null:e.value}function Yn(r,e){!r||!e||(Se.set(r,e),De=r)}function Lr(r){if(r&&(Se.delete(r),De===r)){let e=Se.keys().next();De=e.done?null:e.value}}function Nr(r){if(typeof r!="string"||r.length===0)return"";try{return decodeURIComponent(r)}catch{return r}}function Yt(r){let e=typeof r=="string"?r.trim():"";if(!e)return{navigationUrl:e,httpCredentials:null};try{let t=new Le.URL(e);if(!(t.username.length>0||t.password.length>0))return{navigationUrl:e,httpCredentials:null};let s={username:Nr(t.username),password:Nr(t.password)};return t.username="",t.password="",{navigationUrl:t.toString(),httpCredentials:s}}catch{return{navigationUrl:e,httpCredentials:null}}}function Qn(r,e){return!r&&!e?!0:!r||!e?!1:r.username===e.username&&r.password===e.password}function We(r){return Yt(r).navigationUrl||r}function Xn(r){if(!r||typeof r!="object")return null;let e=typeof r.username=="string"?r.username:"",t=typeof r.password=="string"?r.password:"";return e?{username:e,password:t}:null}function Kt(){try{let r=zt.chromium.executablePath?.();return typeof r=="string"?r:null}catch{return null}}function Rr(){let r=Kt();return!!(r&&(0,Hr.existsSync)(r))}function Zn(){let r=(0,Vr.spawnSync)(Wr,Br,{stdio:"inherit"});if(r.error)throw r.error;if(typeof r.status=="number"&&r.status!==0)throw new Error(`Playwright install failed with exit code ${r.status}.`)}function es(){if(!Rr()){if(Dr){let r=Kt()||"unknown";throw new Error(`Chromium is still missing after an install attempt. Expected at: ${r}`)}Dr=!0;try{Zn()}catch(r){let e=`${Wr} ${Br.join(" ")}`,t=r?.message||String(r);throw new Error(`Failed to install Playwright Chromium via "${e}". ${t}`)}if(!Rr()){let r=Kt()||"unknown";throw new Error(`Playwright install finished, but Chromium is still missing at: ${r}`)}}}function ts(r,e,t,n,s){if(!r)return!0;switch(t){case"never":return!1;case"testFolder":return r.projectId!==s||r.testFolderId!==n;case"test":default:return r.sessionTestId!==e}}async function Ir(r){if(r)try{r.browser&&await r.browser.close()}catch{}}async function me(r=null){if(r){let t=be(r);if(!t)return;await Ir(t),Lr(r);return}let e=Array.from(Se.keys());for(let t of e){let n=be(t);await Ir(n),Lr(t)}}async function ut(r=null){let e=be(r);if(!e||!e.context)return null;try{let t=await e.context.storageState(),n={cookies:t.cookies||[],localStorage:{},sessionStorage:{}};return t.origins&&t.origins.forEach(s=>{s.localStorage&&s.localStorage.length>0&&(n.localStorage[s.origin]={},s.localStorage.forEach(o=>{n.localStorage[s.origin][o.name]=o.value})),s.sessionStorage&&s.sessionStorage.length>0&&(n.sessionStorage[s.origin]={},s.sessionStorage.forEach(o=>{n.sessionStorage[s.origin][o.name]=o.value}))}),n}catch{return null}}async function Gr(r,e,t=null){try{let n={cookies:[],origins:[]},s=t||be(),o=null;try{o=await ut(s?.sessionTestId||null)}catch{if(s?.browserState)try{o=JSON.parse(JSON.stringify(s.browserState))}catch{o=s.browserState}else o=null}let i=null;if(r)try{i=JSON.parse(JSON.stringify(r))}catch{i=null}let a=[];o?.cookies?.length&&a.push(...o.cookies),i?.cookies?.length&&i.cookies.forEach(c=>{if(c?.name&&c?.value&&c?.domain){let u=a.findIndex(d=>d.name===c.name&&d.domain===c.domain&&(d.path||"/")===(c.path||"/"));u>=0&&a.splice(u,1),a.push(c)}}),n.cookies=a.filter(c=>c?.name&&c?.value&&c?.domain).map(c=>{let u=c.domain.includes(":")?c.domain.split(":")[0]:c.domain,d={name:c.name,value:String(c.value),domain:u,path:c.path||"/"};if(c.expires){let f=new Date(c.expires);Number.isNaN(f.getTime())||(d.expires=Math.floor(f.getTime()/1e3))}else typeof c.expires=="number"&&(d.expires=c.expires);return typeof c.httpOnly=="boolean"&&(d.httpOnly=c.httpOnly),typeof c.secure=="boolean"&&(d.secure=c.secure),c.sameSite&&(d.sameSite=c.sameSite),d});let l={};if(o?.localStorage)for(let[c,u]of Object.entries(o.localStorage))l[c]||(l[c]={localStorage:{},sessionStorage:{}}),Object.assign(l[c].localStorage,u);if(o?.sessionStorage)for(let[c,u]of Object.entries(o.sessionStorage))l[c]||(l[c]={localStorage:{},sessionStorage:{}}),Object.assign(l[c].sessionStorage,u);if(i?.localStorage)for(let[c,u]of Object.entries(i.localStorage)){let d=c==="default"?e?new Le.URL(e).origin:null:c;d&&(l[d]||(l[d]={localStorage:{},sessionStorage:{}}),Object.assign(l[d].localStorage,u))}if(i?.sessionStorage)for(let[c,u]of Object.entries(i.sessionStorage)){let d=c==="default"?e?new Le.URL(e).origin:null:c;d&&(l[d]||(l[d]={localStorage:{},sessionStorage:{}}),Object.assign(l[d].sessionStorage,u))}for(let[c,u]of Object.entries(l)){let d={origin:c};d.localStorage=Object.entries(u.localStorage||{}).map(([f,h])=>({name:f,value:String(h)})),d.sessionStorage=Object.entries(u.sessionStorage||{}).map(([f,h])=>({name:f,value:String(h)})),(d.localStorage.length>0||d.sessionStorage.length>0)&&n.origins.push(d)}return n.cookies.length>0||n.origins.length>0?n:null}catch{return null}}async function rs(r,e,t){if(!r||!e)return;let n=t||r.url||null;if(!n){let s=Object.keys(e.localStorage||{})[0]||Object.keys(e.sessionStorage||{})[0]||null;if(s)n=s;else if(e.cookies?.length){let o=e.cookies[0];if(o.domain){let i=o.secure?"https":"http",a=o.domain.startsWith(".")?o.domain.substring(1):o.domain;n=`${i}://${a}`}}}try{let s=await Gr(e,n,r);if(!s){r.browserState=JSON.parse(JSON.stringify(e));return}if(s.cookies?.length&&r.context){let o=s.cookies.map(i=>({name:i.name,value:String(i.value),domain:i.domain,path:i.path||"/",expires:typeof i.expires=="number"?i.expires:void 0,httpOnly:typeof i.httpOnly=="boolean"?i.httpOnly:void 0,secure:typeof i.secure=="boolean"?i.secure:void 0,sameSite:i.sameSite||void 0}));try{await r.context.addCookies(o)}catch{}}if(s.origins?.length&&r.page)try{await r.page.addInitScript(({origins:o})=>{try{let i=window.location.origin,a=o.find(l=>l.origin===i);if(!a)return;Array.isArray(a.localStorage)&&a.localStorage.forEach(({name:l,value:c})=>{try{window.localStorage.setItem(l,c)}catch{}}),Array.isArray(a.sessionStorage)&&a.sessionStorage.forEach(({name:l,value:c})=>{try{window.sessionStorage.setItem(l,c)}catch{}})}catch{}},{origins:s.origins})}catch{}try{let o=await ut();r.browserState=o||JSON.parse(JSON.stringify(e))}catch{r.browserState=e}}catch{r.browserState=e}}async function ns(r,e,t){if(!r||!e)return;let n=(()=>{try{return t?new Le.URL(t).origin:new Le.URL(r.url()).origin}catch{return null}})(),s=(a={})=>{let l=[];for(let[c,u]of Object.entries(a)){let d=c==="default"&&n?n:c;if(!(!d||n&&d!==n))for(let[f,h]of Object.entries(u||{}))l.push({key:f,value:String(h)})}return l},o=s(e.localStorage),i=s(e.sessionStorage);try{await r.evaluate(({localEntries:a,sessionEntries:l})=>{try{Array.isArray(a)&&a.forEach(({key:c,value:u})=>{try{window.localStorage.setItem(c,u)}catch{}}),Array.isArray(l)&&l.forEach(({key:c,value:u})=>{try{window.sessionStorage.setItem(c,u)}catch{}})}catch{}},{localEntries:o,sessionEntries:i})}catch{}if(Array.isArray(e.cookies)&&e.cookies.length>0)try{await r.evaluate(a=>{try{a.forEach(l=>{if(l&&l.name&&l.value){let c=[`${l.name}=${l.value}`];l.path&&c.push(`path=${l.path}`),l.domain&&!l.domain.startsWith(".")&&c.push(`domain=${l.domain}`),l.secure&&c.push("Secure"),l.sameSite&&c.push(`SameSite=${l.sameSite}`),document.cookie=c.join("; ")}})}catch{}},e.cookies)}catch{}}function ss(r){let e=new Set;for(let t of r)typeof t=="string"?e.add(ct.default.resolve(t)):t&&typeof t=="object"&&t.path&&e.add(ct.default.resolve(t.path));return function(n){if(!n||typeof n!="string")return!1;let s=ct.default.resolve(n);return e.has(s)}}function os(r,e){let t=ss(e);return new Proxy(r,{get(n,s){let o=n[s];return s==="constructor"?o:s==="locator"&&typeof o=="function"?function(...i){let a=o.apply(n,i),l=a.setInputFiles;return l&&(a.setInputFiles=function(c){if(Array.isArray(c)){let u=c.map(d=>{if(!t(d))throw new Error(`Access denied: File not in allowed test files: ${d}`);return d});return l.call(this,u)}if(typeof c=="string"){if(!t(c))throw new Error(`Access denied: File not in allowed test files: ${c}`);return l.call(this,c)}return l.call(this,c)}),a}:typeof o=="function"?o.bind(n):o}})}function is(r){r&&Mr.add(r)}function H(r){return!!r&&Mr.has(r)}function pe(r){let e=new Error("Test execution stopped by user");return e.code=lt,e.testId=r,e}function Kr(r){if(!r)return null;let e=null,t=100;return{promise:new Promise((o,i)=>{let a=()=>{H(r)&&(e&&clearInterval(e),me(r).catch(()=>{}),i(pe(r)))};a(),e=setInterval(a,t)}),cancel:()=>{e&&(clearInterval(e),e=null)}}}async function as(r){is(r);let e=Ge.get(r),t=!1;if(e){if(e.vmContext)try{e.vmContext=null}catch{}e.abortController&&e.abortController.abort(),await me(r),t=!0}let n=be(r||null);if(n&&(!r||n.sessionTestId===r))try{await me(r||n.sessionTestId),t=!0}catch{}return Ge.delete(r),t||H(r)}function Tr(r){return typeof r=="string"&&r.length>0&&r!=="about:blank"&&!r.startsWith("data:")}async function cs(r){let e=()=>Tr(r.url());if(e())return r.url();try{await r.waitForLoadState("domcontentloaded",{timeout:1e4})}catch{}if(e())return r.url();try{await r.waitForURL(t=>Tr(t),{timeout:1e4})}catch{}if(e())return r.url();try{await r.waitForLoadState("load",{timeout:5e3})}catch{}return r.url()}function ls(r){if(!r||!r.message)return!1;let e=r.message.toLowerCase(),t=(r.name||"").toLowerCase(),n=(r.constructor?.name||"").toLowerCase();return e.includes("strict mode violation")?!1:e.includes("expect(")||e.includes("expected")&&e.includes("received")||e.includes("assertion")||t==="assertionerror"||n==="assertionerror"||t==="expectationerror"||n==="expectationerror"||t==="testerror"||n==="testerror"||e.includes("tobevisible")||e.includes("tobehidden")||e.includes("tobeenabled")||e.includes("tobedisabled")||e.includes("tobechecked")||e.includes("tobeattached")||e.includes("tobedetached")||e.includes("tobeempty")||e.includes("tobefocused")||e.includes("tohavetext")||e.includes("tohavevalue")||e.includes("tohaveattribute")||e.includes("tohaveclass")||e.includes("tohavecount")||e.includes("tohaveurl")||e.includes("tohavetitle")||e.includes("tocontain")||e.includes("toequal")||e.includes("tomatch")||e.includes("tobetruthy")||e.includes("tobefalsy")||e.includes("tobenan")||e.includes("tobenull")||e.includes("tobeundefined")||e.includes("timed out")&&(e.includes("waiting for expect(")||e.includes("ms waiting for expect(")||e.includes("call log:")&&e.includes("expect("))||e.includes("unexpected value")||e.includes("assertion failed")||e.includes("expectation failed")||e.includes("test failed")||e.includes("element not found")&&e.includes("expected")||e.includes("selector")&&e.includes("not found")&&e.includes("expected")}function Jt(r,e=null){let t=We(r)||"the requested page",n=new Error(`It is impossible to reach ${t}. Please verify your internet connection or confirm the site allows automated browsing.`);return e&&(n.cause=e),n}async function Jr(r,e,t=null){let{navigationUrl:n}=Yt(e),s=n||e;if(H(t))throw pe(t);try{await r.goto(s,{waitUntil:"networkidle",timeout:3e4})}catch(o){if(H(t))throw pe(t);try{let i=await r.evaluate(()=>document.readyState);if(i==="complete"||i==="interactive")return}catch{throw Jt(s,o)}throw Jt(s,o)}if(H(t))throw pe(t)}async function dt(r,e,t=null,n=3,s="test",o=null,i=null,a=null){if(H(r))throw pe(r);let{navigationUrl:l}=Yt(e),c=Xn(a),u=be(r),d=ts(u,r,s,o,i)||!Qn(u?.httpCredentials||null,c);if(!u||d){await me(r),es();let f=null;for(let h=1;h<=n;h++){if(H(r))throw pe(r);try{let g=await zt.chromium.launch(),p={viewport:{width:1920,height:1080},ignoreHTTPSErrors:!0};if(c&&(p.httpCredentials=c),t){let w=await Gr(t,l,u);w&&(p.storageState=w)}let y=await g.newContext(p);if(t?.sessionStorage&&Object.keys(t.sessionStorage).length>0){let w=`
27
27
  (function() {
28
28
  const currentOrigin = window.location.origin;
29
29
  const sessionStorageData = ${JSON.stringify(t.sessionStorage)};
@@ -33,11 +33,11 @@ Expecting one of '${r.join("', '")}'`);let s=`${e}Help`;return this.on(s,i=>{let
33
33
  });
34
34
  }
35
35
  })();
36
- `;await d.addInitScript(m)}let f=await d.newPage();if(e)try{let m=Er(n);try{let g=f.goto(e);m?await Promise.race([g,m.promise]):await g}finally{m?.cancel()}}catch(m){throw Ot(e,m)}x={sessionTestId:n,testFolderId:i,projectId:o,resetStateOption:s,browser:u,context:d,page:f,url:e,browserState:t};try{let m=await We();m&&(x.browserState=m)}catch{}break}catch(u){if(c=u,await ce(),q(n))throw ae(n);if(l===r)throw new Error(`Failed to initialize browser session after ${r} attempts: ${c.message}`);let h=Math.min(1e3*Math.pow(2,l-1),5e3);await new Promise(d=>setTimeout(d,h))}}}if(t&&x&&!a&&await jn(x,t,e||x.url||null),x&&e&&(x.url=e),q(n))throw ae(n);return x}async function Rn(n,e,t,r=null,s=3e5,i=!1,o=[],a="test",c=null,l=null,u=!1){let h=new AbortController,d=null;$e.set(n,{vmContext:null,abortController:h});try{let f=await Ge(n,e,r,3,a,c,l),{page:m}=f;await Nn(m);let w={page:Fn(m,o),expect:wr.expect,files:o};d=At.default.createContext(w),$e.set(n,{vmContext:d,abortController:h});try{let y=await At.default.runInContext(`(async () => { ${t} })();`,d,{timeout:s}),b=null;if(i&&x?.page)try{b=await x.page.screenshot({type:"jpeg",fullPage:!0})}catch{}return{success:!0,message:"Test executed successfully",result:y,finalScreenshot:b}}catch(y){let b=q(n),F=Ln(y),p=b||F,C=!!u&&F&&!b,E=null;return b?(await ce(),{success:!1,error:y.message,errorType:"stopped",stack:y.stack,isExpectFailure:!1,shouldStopTest:!0,tracePath:E,cancelled:!0}):p?(C||await ce(),{success:!1,error:y.message,errorType:"assertion",stack:y.stack,isExpectFailure:!0,shouldStopTest:!0,tracePath:E}):{success:!1,error:y.message,errorType:"execution",stack:y.stack,isExpectFailure:!1,shouldStopTest:!1}}}catch(f){let m=q(n)||f.code===Me;return await ce(),{success:!1,error:f.message,errorType:m?"stopped":"browser",stack:f.stack,isExpectFailure:!1,shouldStopTest:!0,tracePath:null,cancelled:m}}finally{$e.delete(n)}}async function vr(n,e=null,t=null,r="test",s=null,i=null){if(q(n))return{success:!1,cancelled:!0,error:"Test execution stopped by user"};try{let o;if(e){o=await Ge(n,e,t,3,r,s,i);let{page:u}=o;await xr(u,e,n)}else{if(!x||x.sessionTestId!==n)return{success:!1,error:"No active session found for this test. Provide a URL to create a new session."};o=x}let{page:a}=o,c=await a.content(),l=await a.screenshot({type:"jpeg",fullPage:!0});return{success:!0,html:c,screenshot:l}}catch(o){return o.code===Me?{success:!1,cancelled:!0,error:o.message}:{success:!1,error:o.message}}}async function Ar(n,e,t=null,r="test",s=null,i=null){if(q(n))return{success:!1,cancelled:!0,error:"Test execution stopped by user",url:e};try{let o=await Ge(n,e,t,3,r,s,i),{page:a}=o,c=Er(n);try{let l=xr(a,e,n);c?await Promise.race([l,c.promise]):await l}finally{c?.cancel()}if(t){if(q(n))throw ae(n);await Pn(a,t,e)}return{success:!0,message:`Successfully navigated to ${e}`,url:a.url()}}catch(o){return o.code===Me?{success:!1,cancelled:!0,error:o.message,url:e}:{success:!1,error:o.message,url:e}}}async function Tn(n,e,t=null,r="test",s=null,i=null){return Ar(n,e,t,r,s,i)}async function Vn(n){return await vr(n)}function Un(){return x}async function Hn(n,e,t=null,r=3,s="test",i=null,o=null){return await Ge(n,e,t,r,s,i,o)}var B={cleanupSession:ce,forceStopTestExecution:In,executePlaywrightCode:Rn,getPageState:vr,navigateToUrl:Ar,navigateToUrlWithState:Tn,getCurrentState:Vn,captureCurrentBrowserState:We,getCurrentSession:Un,getOrCreateContinuousRecordingSession:Hn};function qn(n,e,t,r,s){if(!n)return!0;switch(t){case"never":return!1;case"testFolder":return s!==r;case"test":default:return n!==e}}var Pt=class{constructor(){this.currentPlaywrightSession=null,this.lastTestFolderId=null,this.currentExecutionGroupId=null,this.executionGroupStartTime=null}startExecutionGroup(){let e=Date.now();return this.currentExecutionGroupId=`group-${e}-${Math.random().toString(36).substring(2,9)}`,this.executionGroupStartTime=e,this.currentExecutionGroupId}generateSessionId(e,t,r){let s=e.projectId||"unknown-project",i=e.testFolderId||"unknown-folder",o=e.id||e.testId||"unknown-test";if(t==="never")return`session-project-${s}-${r}`;if(t==="testFolder")return`session-folder-${i}-${r}`;let a=Date.now().toString()+Math.random().toString(36).substring(2,9);return`session-test-${o}-${a}`}shouldResetSession(e,t){return!this.currentPlaywrightSession||this.currentPlaywrightSession===e.sessionId?!1:qn(this.currentPlaywrightSession,e.sessionId,t,e.testFolderId,this.lastTestFolderId)}updateSessionTracking(e,t){this.currentPlaywrightSession=e,this.lastTestFolderId=t}resetSessionTracking(){this.currentPlaywrightSession=null}async cleanupSession(){try{return await B.cleanupSession(),this.resetSessionTracking(),{success:!0}}catch(e){return{success:!1,error:e.message}}}},Z=new Pt;var ee=new Map,Ke=!1,kt=null,$r=null,Je=null,Bn=null,Mn=500;function Wn(n){return Array.isArray(n)?n:[]}function Gn(n,e){return e&&e.expiresAt&&e.expiresAt<=Date.now()?(ee.delete(n),!0):!1}function Or(n={},e=!1,t={}){if(Ke=!!e,kt=t.cachePath||null,$r=t.cacheVersion||null,ee=new Map,!Ke)return;Wn(n).forEach(s=>{!s?.key||typeof s.value>"u"||s.expiresAt&&s.expiresAt<=Date.now()||ee.set(s.key,{key:s.key,value:s.value,meta:s.meta||{},createdAt:s.createdAt||Date.now(),expiresAt:s.expiresAt||null})})}async function ze(n){if(!Ke||!n)return null;let e=ee.get(n);return!e||Gn(n,e)?null:e.value}function Ye(n,e,t={},r={}){if(!Ke||!n)return;let s=typeof r.ttl=="number"?r.ttl:Bn,i=typeof s=="number"&&s>0?Date.now()+s:null;ee.set(n,{key:n,value:e,meta:t,createdAt:Date.now(),expiresAt:i}),Ft()}function Qe(n=null,e=null){let t=0;for(let[r,s]of ee.entries()){let i=s?.meta||{},o=n?i.projectId===n:!1,a=e?i.testId===e:!1;(o||a)&&(ee.delete(r),t++)}return t>0&&Ft(),t}function jr(n){if(!n)return 0;let e=0;for(let[t,r]of ee.entries())(r?.meta||{}).sessionId===n&&(ee.delete(t),e++);return e>0&&Ft(),e}function Ft(){kt&&(Je&&clearTimeout(Je),Je=setTimeout(()=>{Je=null;let n=Array.from(ee.values()),e={version:$r,entries:n};Promise.resolve().then(()=>(Se(),or)).then(({writeJson:t})=>t(kt,e)).catch(()=>{})},Mn))}var Xe=class{constructor(e,t){this.logger=e,this.apiConfig=t,this.retryErrorContext=null}async executeTestSteps(e,t,r,s={}){let i=s?.enableCache!==!1,o={cacheEnabled:i,usedCache:!1},a=1,c="",l=!1,u=t.html,h=t.screenshot,d=0,f=3,m=0,g=[5,30,60],w=[5e3,15e3],y=0;for(;!l||d>0;){let F=(new Date-e.startedAt)/1e3;if(F>e.testTimeout){let p=new Error(`Test execution timeout: exceeded ${e.testTimeout} seconds (${F.toFixed(1)}s elapsed)`);if(this.isRetryableError(p.message)&&d<f){d++,this.logger.addLog(e.id,"warning",`Test timeout (attempt ${d}/${f}): ${p.message}`),this.retryErrorContext=`Test timeout (attempt ${d}): ${p.message}`;let C=await this._capturePageState(e.sessionId,e.id);C&&(u=C.html,h=C.screenshot);continue}throw p.shouldRetryWithoutCache=o.usedCache,p.cacheUsed=o.usedCache,p}if(a>e.maxSteps){let p=new Error(`Test reached maximum steps limit (${e.maxSteps}) without completing.`);throw p.isLogged=!0,p.shouldRetryWithoutCache=o.usedCache,p.cacheUsed=o.usedCache,this.logger.addLog(e.id,"error",p.message),p}try{let p=await this._executeStep(e,a,u,h,c,r,o);if(m=0,p.forceFailure){let C=p.forceFailureReason||p.description;if(p.fromCache&&y<w.length){let D=w[y];y++,this.logger.addLog(e.id,"warning",`Cache retry ${y}/2 after failure - waiting ${Math.round(D/1e3)}s before retrying step ${a} from cache`),await this._sleep(D);let A=await this._capturePageState(e.sessionId,e.id);A&&(u=A.html,h=A.screenshot),d=0;continue}this._logStepDetails(e.id,a,p.description,h,p.userExperienceRate,p.userExperienceAdvices,p.fromCache),this.logger.addLog(e.id,"error",`Step ${a} - Test failed: ${C}`);let E=new Error(`Test failed due to unresolvable issue at step ${a}: ${C}`);throw E.isLogged=!0,E.shouldRetryWithoutCache=o.usedCache,E.cacheUsed=o.usedCache,E}if(l=p.isFinalStep,p.playwrightCode){let C=!!p.fromCache&&y<w.length,E=await this._executePlaywrightCode(e,a,p,r,C),D=E.cancelled?"cancelled":E.success?"success":"failed";if(E.cancelled)return{success:!1,reason:"stopped",finalScreenshot:E.finalScreenshot||h};if(E.success){l&&E.finalScreenshot&&(h=E.finalScreenshot),!p.fromCache&&p.cacheKey&&p.cacheMeta&&Ye(p.cacheKey,{playwrightCode:p.playwrightCode,description:p.description,isFinalStep:p.isFinalStep,forceFailure:p.forceFailure,forceFailureReason:p.forceFailureReason,userExperienceRate:p.userExperienceRate,userExperienceAdvices:p.userExperienceAdvices},p.cacheMeta);let A=null;l||(A=await this._capturePageState(e.sessionId,e.id),A&&(u=A.html,h=A.screenshot)),this._logStepDetails(e.id,a,p.description,h,p.userExperienceRate,p.userExperienceAdvices,p.fromCache),this.logger.addLog(e.id,"success",`Step ${a} executed successfully`),c+=`Step ${a}: ${p.description}
37
- `,l?d=0:(a++,d=0,y=0)}else{let{shouldRetry:A,error:T}=await this._handleExecutionFailure(e,a,E,d,f,c,p.description,i,o);if(A){d++;let j=await this._capturePageState(e.sessionId,e.id);j&&(u=j.html,h=j.screenshot);continue}if(p.fromCache&&y<w.length){let j=w[y];y++,this.logger.addLog(e.id,"warning",`Cache retry ${y}/2 after failure - waiting ${Math.round(j/1e3)}s before retrying step ${a} from cache`),await this._sleep(j);let N=await this._capturePageState(e.sessionId,e.id);N&&(u=N.html,h=N.screenshot),d=0;continue}throw T}}else if(this._logStepDetails(e.id,a,p.description,h,p.userExperienceRate,p.userExperienceAdvices,p.fromCache),c+=`Step ${a}: ${p.description}
38
- `,l||(a++,y=0),d=0,!l)continue}catch(p){if(this._isNetworkError(p)){if(m<g.length){let C=g[m],E=m+1;m++;let D=p.message||"Unknown network error";this.logger.addLog(e.id,"warning",`Network error during step ${a} (attempt ${E})`,`Retrying in ${C}s: ${D}`),await this._sleep(C*1e3);continue}this.logger.addLog(e.id,"error",`Network error persisted after ${g.length} retries`,p.message||"Unknown network error")}throw p.isLogged||(this.logger.addLog(e.id,"error","Test execution error",p.message),p.isLogged=!0),p.shouldRetryWithoutCache=o.usedCache,p.cacheUsed=o.usedCache,p}}return{success:!0,stepNumber:a-1,finalScreenshot:h}}async _executeStep(e,t,r,s,i,o,a){let c=i;this.retryErrorContext&&(c+=(c?`
39
- `:"")+this.retryErrorContext,this.retryErrorContext=null);let l=a?.cacheEnabled?await this._buildStepCacheKey(e,t,r,s,c,o):null;if(l){let f=await ze(l);if(f)return a.usedCache=!0,{playwrightCode:f.playwrightCode,description:f.description,isFinalStep:f.isFinalStep,forceFailure:f.forceFailure,forceFailureReason:f.forceFailureReason,userExperienceRate:f.userExperienceRate,userExperienceAdvices:f.userExperienceAdvices,fromCache:!0,cacheKey:l,cacheMeta:{projectId:e.projectId,testId:e.testId||e.sourceTestId||e.id,sessionId:e.sessionId,timing:"step",level:"test",actionId:null,testFolderId:e.testFolderId||null}}}let u=new FormData;u.append("test_name",e.testName||"Untitled Test"),u.append("test_description",e.testDescription||""),u.append("html_code",r||"");let h=new Blob([s],{type:"image/jpeg"});u.append("screenshot",h,"screenshot.jpeg"),c&&u.append("previous_steps",c),Array.isArray(e.files)&&e.files.length>0&&e.files.forEach((f,m)=>{u.append(`files[${m}][name]`,f.name||""),u.append(`files[${m}][description]`,f.description||"")});let d=await Ue(this.apiConfig.runTestUrl,{formData:u,headers:this.apiConfig.headers});return{playwrightCode:d.playwright_code,description:d.description,isFinalStep:d.is_final_step,forceFailure:d.force_failure,forceFailureReason:d.force_failure_reason,userExperienceRate:d.user_experience_rate,userExperienceAdvices:d.user_experience_advices,fromCache:!1,cacheKey:l,cacheMeta:{projectId:e.projectId,testId:e.testId||e.sourceTestId||e.id,sessionId:e.sessionId,timing:"step",level:"test",actionId:null,testFolderId:e.testFolderId||null}}}async _executePlaywrightCode(e,t,r,s,i=!1){try{let o=await this._prepareTestFiles(e);return await B.executePlaywrightCode(e.sessionId,e.url,r.playwrightCode,null,e.actionTimeout*1e3,r.isFinalStep,o,s,e.testFolderId,e.projectId,i)}catch(o){throw o.isLogged||(this.logger.addLog(e.id,"error",`Step ${t} execution error`,o.message),o.isLogged=!0),o}}async _prepareTestFiles(e){let t=[];if(Array.isArray(e.files))for(let r=0;r<e.files.length;r++){let s=e.files[r];s?.path&&s?.name?t[r]={name:s.name,description:s.description||"",path:s.path}:t[r]=null}return t}async _handleExecutionFailure(e,t,r,s,i,o,a,c,l){let u=`Step ${t} failed`,h=r.error;if(r.isExpectFailure){u=typeof a=="string"&&a.trim().length>0?`Step ${t} failed - ${a.trim()}`:`Step ${t} assertion failed`,this.logger.addLog(e.id,"error",u,h);let g=new Error(`${u}: ${h}`);return g.isLogged=!0,g.shouldRetryWithoutCache=l?.usedCache||!1,g.cacheUsed=l?.usedCache||!1,{shouldRetry:!1,error:g}}if(this.isRetryableError(r.error)&&s<i)return this.logger.addLog(e.id,"warning",`Step ${t} failed (attempt ${s+1}/${i}): ${r.error}`,h),this.retryErrorContext=`Step ${t} (attempt ${s+1}): Failed with error: ${r.error}`,{shouldRetry:!0};r.errorType==="execution"?u=`Step ${t} code execution failed`:r.errorType==="browser"&&(u=`Step ${t} browser error`),this.logger.addLog(e.id,"error",u,h);let f=new Error(`${u}: ${h}`);return f.isLogged=!0,f.shouldRetryWithoutCache=l?.usedCache||!1,f.cacheUsed=l?.usedCache||!1,{shouldRetry:!1,error:f}}_logStepDetails(e,t,r,s,i,o,a=!1){let c=r||"No description provided",l=a?" (cache)":"",u={};typeof i<"u"&&(u.user_experience_rate=i),typeof o<"u"&&(u.user_experience_advices=o),a&&(u.from_cache=!0),this.logger.addLog(e,"info",`Step ${t}${l}: ${c}`,null,u)}async _buildStepCacheKey(e,t,r,s,i,o){let a="v1",c=e.testId||e.sourceTestId||e.id||"unknown-test",l=e.projectId||"unknown-project",u=await this._hashString(i||""),h=this._buildFilesSignature(e.files),d=e.testFolderId||"",f=JSON.stringify({cacheVersion:a,projectId:l,sourceTestId:c,url:e.url||"",resetStateOption:o||"",maxSteps:e.maxSteps,actionTimeout:e.actionTimeout,environment:e.environment||"",role:e.role||"",previousStepsHash:u,filesSignature:h,testFolderId:d,stepNumber:t}),m=await this._hashString(f);return`step:${a}:${l}:${c}:${t}:${m}`}_buildFilesSignature(e){if(!Array.isArray(e)||e.length===0)return"no-files";let t=e.map(r=>({name:r?.name||"",description:r?.description||"",id:r?.id||""}));return this._simpleHash(JSON.stringify(t))}async _hashString(e){if(typeof e!="string")return"no-string";try{if(typeof crypto<"u"&&crypto.subtle?.digest){let r=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(s)).map(i=>i.toString(16).padStart(2,"0")).join("")}}catch{}return this._simpleHash(e)}_simpleHash(e){let t=0,r=String(e);for(let s=0;s<r.length;s++)t=(t<<5)-t+r.charCodeAt(s),t|=0;return Math.abs(t).toString(16)}async _capturePageState(e,t){try{let r=await B.getCurrentState(e);if(r&&r.success)return{html:r.html,screenshot:r.screenshot}}catch(r){this.logger.addLog(t,"warning","Failed to capture page state",r.message)}return null}_sleep(e){return new Promise(t=>setTimeout(t,e))}_isNetworkError(e){if(!e||e.code==="ERR_CANCELED")return!1;if(e.isAxiosError&&!e.response)return!0;let t=typeof e.message=="string"?e.message.toLowerCase():"",r=typeof e.code=="string"?e.code.toLowerCase():"",s=["network error","net::err_","failed to fetch","getaddrinfo","socket hang up","econnreset","econnrefused","timed out","etimedout","ehostunreach","enotfound","network is unreachable"];return!!(s.some(i=>t.includes(i))||r&&s.some(i=>r.includes(i)))}isRetryableError(e){if(!e||typeof e!="string")return!1;let t=e.toLowerCase();return t.includes("strict mode violation")?!0:!(t.includes("assertion failed")||t.includes("expect(")&&!t.includes("timed out")||t.includes("expected")&&t.includes("received")&&!t.includes("timed out")||t.includes("assertionerror")||t.includes("expectation failed"))}};var Ze=class{constructor(e,t,r=()=>!1,s=()=>{}){this.logger=e,this.apiConfig=t,this.retryErrorContext=null,this.isStopRequested=r,this.executedProjectBeforeActions=new Map,this.recordActionCode=typeof s=="function"?s:()=>{}}async executeActions(e,t,r,s,i="test",o=null,a=null,c={}){let l=c?.enableCache!==!1,u=r.filter(g=>s==="before"&&!g.executeAfter||s==="after"&&g.executeAfter);if(this.isStopRequested())return this.logger.addLog(t,"warning",`${s} actions cancelled by user request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:!1};if(u.length===0)return this.logger.addLog(t,"info",`No ${s} actions to execute`),{success:!0,message:`No ${s} actions to execute`,usedCache:!1};this.logger.addLog(t,"info",`Executing ${u.length} ${s} action(s) in inheritance order (Project->Test Folder->Test)`);let h=0,d=0,f=!1;for(let g=0;g<u.length;g++){if(this.isStopRequested())return this.logger.addLog(t,"warning",`Cancelled remaining ${s} actions after user stop request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:f};let w=u[g];if(this._shouldSkipProjectBeforeAction(e,w,s,i)){this.logger.addLog(t,"info",`Skipping project-level ${s} action "${w.name}" for persistent session`);continue}try{let y=this._resolveActionUrl(w);this.logger.addLog(t,"info",`[${g+1}/${u.length}] Executing ${s} action: "${w.name}" (${w.level} level) - URL: ${y}`);let b=this._resolveActionStorage(w),F=(b?.cookies?.length||0)>0||Object.keys(b?.localStorage||{}).length>0||Object.keys(b?.sessionStorage||{}).length>0,p=null;if(F?p=await this._navigateWithBrowserState(e,w,y,t,i,o,a):p=await B.navigateToUrl(e,y,null,i,o,a),p?.cancelled)return this.logger.addLog(t,"warning",`${s} action "${w.name}" cancelled during navigation`),{success:!1,cancelled:!0,usedCache:f};if(p&&p.success===!1){let D=this._formatDetails(p.error,"Navigation failed");this.logger.addLog(t,"warning",`\u2717 ${s} action "${w.name}" navigation failed`,D),d++;continue}if(this.isStopRequested())return this.logger.addLog(t,"warning",`Cancelled ${s} action "${w.name}" due to user stop request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:f};let C=typeof w.description=="string"?w.description.trim():"";if(!C){this._recordProjectBeforeActionSuccess(e,w,s,i);let A=!!w.storageOnly?`\u2713 ${s} action "${w.name}" storage configuration applied (no AI instructions)`:`\u2713 ${s} action "${w.name}" navigation completed (no description to execute)`;this.logger.addLog(t,"success",A),h++;continue}let E=await this._executeActionWithAI(e,{...w,description:C},y,t,s,i,o,a,g+1,{enableCache:l,testId:c?.testId,projectId:c?.projectId});if(E?.cacheUsed&&(f=!0),!E||E.cancelled)return{success:!1,cancelled:!0,usedCache:f};E.success?(h++,this._recordProjectBeforeActionSuccess(e,w,s,i)):d++}catch(y){let b=this._formatDetails(y);this.logger.addLog(t,"warning",`\u2717 ${s} action "${w.name}" failed with unexpected error`,b),d++}}let m=d===0;return{success:m,message:m?`${s} actions completed`:`${s} actions failed`,usedCache:f}}async _navigateWithBrowserState(e,t,r,s,i,o,a){let c=this._resolveActionStorage(t);this.logger.addLog(s,"info",`Action "${t.name}" includes browser state: ${t.cookies?.length||0} cookies, ${Object.keys(t.localStorage||{}).length} localStorage items, ${Object.keys(t.sessionStorage||{}).length} sessionStorage items`);let l=JSON.parse(JSON.stringify(c));return await B.navigateToUrlWithState(e,r,l,i,o,a)}async _executeActionWithAI(e,t,r,s,i,o,a,c,l=1,u={}){let h=u?.enableCache!==!1,d=!1,f=u?.testId||s,m=u?.projectId||c;if(this.isStopRequested())return this.logger.addLog(s,"warning",`${i} action "${t.name}" cancelled before execution`),{success:!1,cancelled:!0};let g=typeof t.actionTimeout=="number"?t.actionTimeout*1e3:6e4,w=typeof t.maxSteps=="number"?t.maxSteps:10,y=await B.getCurrentState(e);if(!y||!y.success){let j=this._formatDetails(y?.error);return this.logger.addLog(s,"warning",`\u2717 ${i} action "${t.name}" failed to capture page state: ${j}`,j),{success:!1}}let b=1,F="",p=!1,C=0,E=3,D=[5e3,15e3],A=0;for(;(!p||C>0)&&b<=w;){if(this.isStopRequested())return this.logger.addLog(s,"warning",`${i} action "${t.name}" cancelled by user`),{success:!1,cancelled:!0};try{let j=(t.description||"").trim(),N=F;this.retryErrorContext&&(N+=(N?`
40
- `:"")+this.retryErrorContext,this.retryErrorContext=null);let le=h?await this._buildActionCacheKey({action:t,timing:i,stepNumber:b,pageStateResult:y,previousStepsContext:N,resetStateOption:o,projectId:m,testId:f,sessionId:e,actionTimeoutMs:g,maxSteps:w,testFolderId:a}):null,Y,V,W,fe,pe,S,$,O=!1;if(le){let k=await ze(le);k&&(d=!0,O=!0,{playwrightCode:Y,description:V,isFinalStep:W,forceFailure:fe,forceFailureReason:pe,userExperienceRate:S,userExperienceAdvices:$}=k)}if(!O){let k=new FormData;k.append("test_name",`${i} action: ${t.name}`),k.append("test_description",j),k.append("html_code",y.html);let v=new Blob([y.screenshot],{type:"image/jpeg"});k.append("screenshot",v,"screenshot.jpeg"),N&&k.append("previous_steps",N),{playwright_code:Y,description:V,is_final_step:W,forceFailure:fe,forceFailureReason:pe,user_experience_rate:S,user_experience_advices:$}=await Ue(this.apiConfig.runTestUrl,{formData:k,headers:this.apiConfig.headers})}if(fe){let k=pe||V;if(O&&A<D.length&&!this.isStopRequested()){let v=D[A];A++,this.logger.addLog(s,"warning",`Cache retry ${A}/2 after failure - waiting ${Math.round(v/1e3)}s before retrying ${i} action "${t.name}" step ${b} from cache`),await new Promise(G=>setTimeout(G,v));let Q=await this._capturePageState(e,s);Q&&(y=Q),C=0;continue}return this._logActionDetails(s,t.name,V,y.screenshot,S,$,O),this.logger.addLog(s,"warning",`\u2717 ${i} action "${t.name}" failed: ${k}`,k),{success:!1,cacheUsed:d}}if(p=!!W,Y){if(this.isStopRequested())return this.logger.addLog(s,"warning",`${i} action "${t.name}" cancelled before executing Playwright code`),{success:!1,cancelled:!0,cacheUsed:d};let k=O&&A<D.length&&!this.isStopRequested(),v=await B.executePlaywrightCode(e,r,Y,null,g,p,[],o,a,c,k),Q=v.cancelled?"cancelled":v.success?"success":"failed";if(this.recordActionCode({executionId:s,timing:i,actionName:t.name,actionLevel:t.level,actionOrder:l,stepNumber:b,attempt:C+1,description:V,code:Y,status:Q}),v.cancelled)return{success:!1,cancelled:!0};if(v.success){let U=await this._capturePageState(e,s);if(U&&(y=U),!O&&le&&Ye(le,{playwrightCode:Y,description:V,isFinalStep:W,forceFailure:fe,forceFailureReason:pe,userExperienceRate:S,userExperienceAdvices:$},{projectId:m,testId:f,sessionId:e,timing:i,level:t.level,actionId:t.id||null,testFolderId:a||null}),O&&(d=!0),this._logActionDetails(s,t.name,V,y.screenshot,S,$,O),F+=`Step ${b}: ${V}
41
- `,!p){b++,C=0,A=0;continue}return this.logger.addLog(s,"success",`\u2713 ${i} action "${t.name}" executed successfully`),{success:!0,cacheUsed:d}}let G=!!v.isExpectFailure,_=!G&&this.isRetryableError(v.error),te=this._formatDetails(v.error);if(_&&C<E){C++,this.logger.addLog(s,"warning",`${i} action "${t.name}" step ${b} failed (attempt ${C}/${E}): ${v.error}`,te),this.retryErrorContext=`Step ${b} (attempt ${C}): Failed with error: ${v.error}`;let U=await this._capturePageState(e,s);U&&(y=U);continue}if(O&&A<D.length&&!this.isStopRequested()){let U=D[A];A++,this.logger.addLog(s,"warning",`Cache retry ${A}/2 after failure - waiting ${Math.round(U/1e3)}s before retrying ${i} action "${t.name}" step ${b} from cache`),await new Promise(Fe=>setTimeout(Fe,U));let ke=await this._capturePageState(e,s);ke&&(y=ke),C=0;continue}let J=G?"assertion failed":"execution failed";return this.logger.addLog(s,"warning",`\u2717 ${i} action "${t.name}" step ${b} ${J}: ${v.error}`,te),{success:!1,cacheUsed:d}}let L=await this._capturePageState(e,s);if(L&&(y=L),this._logActionDetails(s,t.name,V,y.screenshot,S,$,O),F+=`Step ${b}: ${V}
42
- `,!p){b++,C=0,A=0;continue}return this.logger.addLog(s,"success",`\u2713 ${i} action "${t.name}" completed`),{success:!0,cacheUsed:d}}catch(j){let N=this._formatDetails(j);return this.logger.addLog(s,"warning",`\u2717 ${i} action "${t.name}" API failed: ${j.message}`,N),{success:!1,cacheUsed:d}}}let T=`Maximum of ${w} steps reached without completing action "${t.name}"`;return this.logger.addLog(s,"warning",`\u2717 ${i} action "${t.name}" reached maximum steps limit (${w}) without completing`,T),{success:!1,cacheUsed:d}}async _capturePageState(e,t){try{let r=await B.getCurrentState(e);if(r&&r.success)return r}catch(r){let s=this._formatDetails(r);this.logger.addLog(t,"warning","Failed to capture page state for action logging",s)}return null}_logActionDetails(e,t,r,s,i,o,a=!1){let c=a?" (cache)":"",l={};typeof i<"u"&&(l.user_experience_rate=i),typeof o<"u"&&(l.user_experience_advices=o),a&&(l.from_cache=!0),this.logger.addLog(e,"info",`${t}${c}: ${r||"No description provided"}`,null,l)}_formatDetails(e,t="Unknown error"){if(e instanceof Error)return e.stack||e.message||t;if(typeof e=="string")return e||t;if(e==null)return t;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}async _buildActionCacheKey({action:e,timing:t,stepNumber:r,pageStateResult:s,previousStepsContext:i,resetStateOption:o,projectId:a,testId:c,sessionId:l,actionTimeoutMs:u,maxSteps:h,testFolderId:d}){let f="v1",m=await this._hashString(i||""),g=JSON.stringify({cacheVersion:f,actionId:e.id||"",actionName:e.name||"",actionUrl:e.url||"",actionLevel:e.level||"",timing:t,stepNumber:r,resetStateOption:o,actionTimeoutMs:u,maxSteps:h,projectId:a||"unknown-project",testId:c||"unknown-test",description:(e.description||"").trim(),storageOnly:!!e.storageOnly,testFolderId:d||e.testFolderId||"",cookies:e.cookies||[],localStorage:e.localStorage||{},sessionStorage:e.sessionStorage||{},previousStepsHash:m}),w=await this._hashString(g);return`action:${f}:${a||"project"}:${c||"test"}:${t}:${e.id||e.name||"unnamed"}:${w}`}async _hashString(e){if(typeof e!="string")return"no-string";try{if(typeof crypto<"u"&&crypto.subtle?.digest){let r=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",r);return Array.from(new Uint8Array(s)).map(i=>i.toString(16).padStart(2,"0")).join("")}}catch{}return this._simpleHash(e)}_simpleHash(e){let t=0,r=String(e);for(let s=0;s<r.length;s++)t=(t<<5)-t+r.charCodeAt(s),t|=0;return Math.abs(t).toString(16)}_shouldSkipProjectBeforeAction(e,t,r,s){if(!e||r!=="before"||t.level!=="project"||!t.id||s==="test")return!1;let i=this.executedProjectBeforeActions.get(e);return i?i.has(t.id):!1}_recordProjectBeforeActionSuccess(e,t,r,s){!e||r!=="before"||t.level!=="project"||!t.id||s!=="test"&&(this.executedProjectBeforeActions.has(e)||this.executedProjectBeforeActions.set(e,new Set),this.executedProjectBeforeActions.get(e).add(t.id))}_resolveActionUrl(e){let t=typeof e?.cloudReplaceUrl=="string"?e.cloudReplaceUrl.trim():"";return e?.cloudUseLocalUrl===!1&&t?t:typeof e?.url=="string"?e.url.trim():""}_resolveActionStorage(e){return e?.cloudUseLocalStorage===!1&&e.cloudStorage?e.cloudStorage:{cookies:e.cookies||[],localStorage:e.localStorage||{},sessionStorage:e.sessionStorage||{}}}isRetryableError(e){if(!e||typeof e!="string")return!1;let t=e.toLowerCase();return t.includes("strict mode violation")?!0:!(t.includes("assertion failed")||t.includes("expect(")&&!t.includes("timed out")||t.includes("expected")&&t.includes("received")&&!t.includes("timed out")||t.includes("assertionerror")||t.includes("expectation failed"))}};Se();var je=H(require("node:path"),1);Se();async function Pr(n){let e=await R(je.default.join(n,"structure.json"),{}),t=await R(je.default.join(n,"project.json"),{}),r=await R(je.default.join(n,"files.json"),{files:{}}),s=await R(je.default.join(n,"cache.json"),{entries:[]});return{structure:e,projectMeta:t,filesIndex:r,cacheData:s}}function he(n){return typeof n!="string"?"":n.trim()}function Jn(n,e){let t=he(n),r=he(e);if(!r)return t;let s=t.replace(/\/+$/,""),i=r.replace(/^\/+/,"");return s?`${s}/${i}`:`/${i}`}function Kn(n,e,t){let r=he(n?.replaceUrl);if(r)return r;let s=he(n?.url);if(s)return s;let i=he(t?.replaceUrl);return i||Jn(e?.baseUrl||"",t?.path||"")}function zn(n,e,t){let r=he(n?.cloudReplaceUrl);if(n?.cloudUseLocalUrl===!1&&r)return r;let s=he(t?.cloudReplaceUrl);if(t?.cloudUseLocalUrl===!1&&s)return s;let i=he(e?.cloudReplaceUrl);return e?.cloudUseLocalUrl===!1&&i?i:Kn(n,e,t)}function Dt(n=[],e){return n.map(t=>({...t,level:e}))}function Yn(n,e,t){let r=[];return Array.isArray(n.actions)&&r.push(...Dt(n.actions,"project")),e&&Array.isArray(e.actions)&&r.push(...Dt(e.actions,"testFolder")),Array.isArray(t.actions)&&r.push(...Dt(t.actions,"test")),r}function Qn(n){return Array.isArray(n)?n.map(e=>({id:e?.id||"",name:e?.name||"",description:e?.description||""})):[]}function kr(n){return Array.isArray(n)?n.map(e=>({id:e?.id||"",name:e?.name||"",description:e?.description||"",executeAfter:!!e?.executeAfter})):[]}function Xn(n,e,t,r){let s=Qn(n?.files),i=kr(n?.actions),o=kr(t?.actions),a={name:n?.name,description:n?.description,url:n?.url,maxSteps:n?.maxSteps,actionTimeout:n?.actionTimeout,resetStateOption:r,projectReset:e?.resetStateForEachTest,projectBaseUrl:e?.baseUrl,environment:n?.environment||"",role:n?.role||"",testFolderId:n?.testFolderId||"",testFolderReplaceUrl:t?.replaceUrl||"",testFolderActions:o,files:s,actions:i};try{return JSON.stringify(a)}catch{return`${n?.name||"test"}-${r}-${s.length}-${i.length}`}}function Zn(n,e,t){return Array.isArray(n.files)?n.files.map(r=>{if(!r?.id)return null;let s=e.files?.[r.id];if(!s?.path)throw new Error(`Missing stored file path for ${r.name||r.id}`);let i=et.default.join(t,s.path);return{id:r.id,name:r.name||s?.name||"",description:r.description||"",path:i}}).filter(Boolean):[]}function es(n){let e=[],t=Array.isArray(n.documents)?n.documents:[];for(let s of t)e.push({...s,testFolder:null});let r=Array.isArray(n.testFolders)?n.testFolders:[];for(let s of r){let i=Array.isArray(s.documents)?s.documents:[];for(let o of i)e.push({...o,testFolder:s})}return e}function ts(n,e,t){let r=es(n);return e==="project"?r:e==="folder"?r.filter(s=>s.testFolder?.cloudId===t):e==="test"?r.filter(s=>s.cloudId===t):[]}async function Fr({projectId:n,targetType:e,targetId:t,apiConfig:r,cacheEnabled:s,silent:i=!1}){let o=new qe({silent:i}),a=oe(n),{structure:c,filesIndex:l,cacheData:u}=await Pr(a),h=c||{},d=h.id||n,f=ts(c,e,t),m=et.default.join(a,"cache-signatures.json"),g={},w=!1,y=!1,b=!1,F=Array.isArray(u.entries)&&u.entries.length>0,p=!!u.version;if(s)try{if(await _e(m)){let S=await R(m,{});S&&typeof S=="object"&&(g=S),y=!0}}catch{g={},y=!1}if(!f.length)throw new Error("No tests found for the selected target.");let C=et.default.join(a,"cache.json");Or(u.entries||{},s,{cachePath:C,cacheVersion:u.version||null});let E=new Ze(o,r),D=new Xe(o,r),A=Z.startExecutionGroup(),T=h?.queueFailureBehavior==="continueQueue"?"continueQueue":"stopQueue",j=[],N=new Map,le=0,Y=0;for(let S of f){let $=S.testFolder,O=S.resetStateOption||h?.resetStateForEachTest||"test";if(!(S.executeOnCloud!==!1)){Y++,o.addLog(S.cloudId||S.id||"unknown-test","info",`Skipping "${S.name||"Untitled Test"}" (set to run in app only).`);continue}let k=Z.generateSessionId({...S,projectId:d,testFolderId:$?.id||null},O,A),v=S.id||S.testId||S.cloudId,Q=S.name||"Untitled Test",G=zn(S,h,$);if(!Q.trim()||!S.description?.trim()||!G||!G.trim()){le++,o.addLog(v||"unknown-test","warning","Skipping test missing required name, description, or URL.");continue}if(s&&v){let _={...S,url:G,testFolderId:$?.id||S.testFolderId||null},te=Xn(_,h,$,O),J=g[v];!y&&F&&!p&&!b?(Qe(d,v),b=!0):J&&J!==te&&Qe(d,v),J!==te&&(g[v]=te,w=!0)}j.push({testEntry:S,testFolder:$,resetStateOption:O,sessionId:k,testId:v,testName:Q,testUrl:G}),N.set(k,(N.get(k)||0)+1)}if(!j.length)throw new Error("No valid tests found for the selected target.");le>0&&o.addLog("system","warning",`Skipping ${le} test(s) without required name, description, or URL.`),Y>0&&o.addLog("system","info",`Skipping ${Y} test(s) marked for app-only execution.`);let V=0,W=0,fe=S=>{if(!S)return;let $=N.get(S);if(!$)return;let O=$-1;O<=0?N.delete(S):N.set(S,O)},pe=async(S,$,O=!1)=>{let L=$||S.resetStateOption||"test";if(L!=="never"){if(L==="testFolder"){if(O){await Z.cleanupSession();return}if((N.get(S.sessionId)||0)>1)return}await Z.cleanupSession()}};try{for(let S of j){let{testEntry:$,testFolder:O,resetStateOption:L,sessionId:k,testId:v,testName:Q,testUrl:G}=S,_={id:v,testId:v,sessionId:k,testName:Q,testDescription:$.description||"",projectId:d,testFolderId:O?.id||null,testFolderName:O?.name||null,url:G,actionTimeout:$.actionTimeout||60,testTimeout:$.testTimeout||300,maxSteps:$.maxSteps||50,actions:Array.isArray($.actions)?[...$.actions]:[],files:Zn($,l,a),environment:$.environment||"",role:$.role||"",resetStateOption:L,startedAt:new Date};o.addLog(_.id,"info",`Started executing test "${_.testName}"`);let te=Yn(h,O,_);try{let J=0,U=!1,ke=4,Fe=!1,tt=!1;for(;J<ke;){Z.shouldResetSession(_,L)&&await Z.cleanupSession(),Z.updateSessionTracking(_.sessionId,_.testFolderId);try{let me=await E.executeActions(_.sessionId,_.id,te,"before",L,_.testFolderId,_.projectId,{enableCache:!U,projectId:d,testId:v});if(!me?.success){let ge=new Error(`Before actions failed: ${me?.message||"Unknown error"}`);throw ge.shouldRetryWithoutCache=!0,me?.usedCache&&(ge.cacheUsed=!0),ge}let De=await B.getPageState(_.sessionId,_.url,null,L,_.testFolderId,_.projectId);if(!De?.success)throw new Error(De?.error||"Failed to capture initial page state");await D.executeTestSteps(_,De,L,{enableCache:!U});let rt=await E.executeActions(_.sessionId,_.id,te,"after",L,_.testFolderId,_.projectId,{enableCache:!U,projectId:d,testId:v});if(!rt?.success){let ge=new Error(`After actions failed: ${rt?.message||"Unknown error"}`);throw ge.shouldRetryWithoutCache=!0,rt?.usedCache&&(ge.cacheUsed=!0),ge}o.addLog(_.id,"success",`Test "${_.testName}" completed successfully`),Fe=!0;break}catch(me){if(!U&&!!me?.shouldRetryWithoutCache){U=!0,Qe(_.projectId,v||null),jr(_.sessionId),o.addLog(_.id,"warning",`Cache invalidated after failure - retrying test "${_.testName}" without cache`),await Z.cleanupSession(),_.startedAt=new Date,J++;continue}o.addLog(_.id,"error",`Test "${_.testName}" failed`,me.message||String(me)),tt=!0;break}}Fe?V++:tt&&W++,await pe(_,L,tt&&T==="stopQueue"),fe(_.sessionId)}catch(J){o.addLog(_.id,"error",`Test "${_.testName}" failed`,J.message||String(J)),W++,await pe(_,L,T==="stopQueue"),fe(_.sessionId)}if(W>0&&T==="stopQueue")break}}finally{await Z.cleanupSession()}if(s&&w)try{await X(m,g)}catch{}return W>0?{success:!1,passed:V,failed:W,total:j.length}:{success:!0,passed:V,failed:W,total:j.length}}function rs(n,e){if(typeof n!="string")return n?.name||"";let[t]=e;return typeof t=="string"?t:t?.type||""}var ns=process.emitWarning.bind(process);process.emitWarning=(n,...e)=>{if(rs(n,e)!=="ExperimentalWarning")return ns(n,...e)};var z=new Qt,ss="1.1.8";z.name("agenqa").description("Agenqa CLI for cloud projects").version(ss);process.on("SIGINT",()=>{console.log(`
43
- Interrupted. Exiting.`),process.exit(130)});function Ir(n,e,t){let r=Et(t||ve(n,e));if(!r)throw new Error("API base URL is not configured in this build.");return r}function It(n,e){if(n===void 0)return null;let t=String(n).trim().toLowerCase();if(["y","yes"].includes(t))return!0;if(["n","no"].includes(t))return!1;console.error(`Invalid value for ${e}. Use "yes" or "no".`),process.exit(1)}function Nt(n){console.log(`Synced project ${n.project?.name||n.project?.id}`),console.log(`Files: ${n.files.downloaded} downloaded, ${n.files.skipped} skipped, ${n.files.removed} removed.`),n.cache&&(n.cacheDisabledGlobally?console.log("Cache disabled globally for this project."):console.log("Cache synced."))}function is(n){return typeof n?.cacheCloudEnabled=="boolean"?n.cacheCloudEnabled:!!n?.cacheEnabled}function os(n){return typeof n?.cacheLocalEnabled=="boolean"?n.cacheLocalEnabled:!!n?.cacheEnabled}async function Pe(n){throw cr(n)&&(console.error("Cloud key is invalid or expired. Please re-import the project."),process.exit(2)),n}z.command("import").description("Import a cloud project using project id and secret key").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-s, --key-secret <secret>","Cloud key secret").option("--trust <yes|no>","Skip trust prompt by answering yes or no").option("--cache-local <yes|no>","Skip local cache prompt by answering yes or no").option("--cache-cloud <yes|no>","Skip cloud cache prompt by answering yes or no").action(async n=>{let e=await ie(),t=n.project.trim(),r=n.keySecret.trim(),s=Ir(e,t),i=It(n.trust,"--trust"),o=It(n.cacheLocal,"--cache-local"),a=It(n.cacheCloud,"--cache-cloud");(i??await ye("Importing projects from unknown sources can expose you to risks. Do you confirm you trust this project? (yes/no)",{required:!0}))!==!0&&(console.error("Import cancelled."),process.exit(1));let u=(o??await ye("Enable local cache on this machine? (required for cloud cache) (yes/no)"))===!0,h=!1;u?h=(a??await ye("Enable cloud cache? (warning: reuses collaborators' cached steps; only enable if you trust them to avoid security risks) (yes/no)"))===!0:a===!0&&(console.error("Cloud cache requires local cache. Re-run with --cache-local yes or omit --cache-cloud."),process.exit(1));let d={keyToken:r,cacheCloudEnabled:h,cacheLocalEnabled:u,baseUrl:s,importedAt:new Date().toISOString()};e.projects[t]=d,await xe(e),await Te(t);try{let f=await He(e,t);Nt(f),console.log("Import completed.")}catch(f){await Pe(f),console.error(f.message||String(f)),process.exit(1)}});z.command("list").description("List stored projects").action(async()=>{let n=await ie(),e=Object.entries(n.projects||{});if(e.length===0){console.log("No projects imported.");return}let t=[];for(let[a,c]of e){let l=null;try{l=await R(Dr.default.join(oe(a),"project.json"),null)}catch(f){console.error(`Warning: failed to read metadata for project ${a}: ${f.message||f}`)}let u=is(c)?"enabled":"disabled",h=c.importedAt||"import time unknown",d=ve(n,a)||"base URL not set";t.push([a,l?.name||"",d,u,h])}let r=["Project ID","Name","Base URL","Cache","Imported At"],s=r.map((a,c)=>Math.max(a.length,...t.map(l=>(l[c]||"").length))),i=s.map(a=>"-".repeat(a)).join("-+-"),o=a=>a.map((c,l)=>String(c||"").padEnd(s[l]," ")).join(" | ");console.log("Stored projects:"),console.log(o(r)),console.log(i),t.forEach(a=>console.log(o(a)))});z.command("sync").description("Sync a cloud project locally").requiredOption("-p, --project <projectId>","Cloud project id").action(async n=>{let e=await ie(),t=n.project.trim();try{let r=await He(e,t);Nt(r)}catch(r){await Pe(r),console.error(r.message||String(r)),process.exit(1)}});z.command("remove-project").description("Remove an imported project and local data").requiredOption("-p, --project <projectId>","Cloud project id").action(async n=>{let e=n.project.trim(),t=await ie();t.projects?.[e]||(console.error(`Project ${e} is not imported. Run agenqa import first.`),process.exit(1)),await ye(`Remove local data for project ${e}? This does not delete the cloud project. (yes/no)`,{required:!0})||(console.error("Remove cancelled."),process.exit(1)),delete t.projects[e],await xe(t),await Ct(e),console.log(`Removed local data for project ${e}.`)});z.command("cache").description("Enable or disable cloud cache for a project").requiredOption("-p, --project <projectId>","Project id").option("--enable","Enable cache").option("--disable","Disable cache").action(async n=>{let e=n.project.trim(),t=n.enable===!0?!0:n.disable===!0?!1:null;t===null&&(console.error("Choose either --enable or --disable."),process.exit(1));let r=await ie(),s=r.projects?.[e];s||(console.error(`Project ${e} is not imported. Run "agenqa import" first.`),process.exit(1)),t&&(console.log("Warning: cache reuses generated steps from collaborators. Enable only if you trust the project sources."),await ye("Do you want to enable cache? (yes/no)",{required:!0})||(console.error("Cache enable cancelled."),process.exit(1))),s.cacheCloudEnabled=t,s.cacheEnabled!==void 0&&(s.cacheEnabled=t),await xe(r),console.log(`Cache ${t?"enabled":"disabled"} for project ${e}.`)});z.command("reset-cache").description("Clear local cache (cloud cache downloads and local-only cache)").requiredOption("-p, --project <projectId>","Project id").action(async n=>{let e=n.project.trim();(await ie()).projects?.[e]||(console.error(`Project ${e} is not imported. Run "agenqa import" first.`),process.exit(1)),await ye(`Reset local cache for project ${e}? (yes/no)`,{required:!0})||(console.error("Reset cache cancelled."),process.exit(1)),await Te(e),console.log(`Local cache cleared for project ${e}.`)});async function Lt({projectId:n,targetType:e,targetId:t,cacheOverride:r,silent:s}){let i=await ie(),o=i.projects?.[n];if(!o)throw new Error(`Project ${n} is not imported. Run "agenqa import" first.`);let a=Ir(i,n,o.baseUrl),c=await He(i,n,{cacheOverride:r}),l=!!c?.cacheDisabledGlobally;if(c?.project?.readOnly)throw new Error("This cloud project is read-only on your current plan. Convert to local-only to run tests.");s||Nt(c);let u=l?!1:r!==null?r:os(o),h=Ve(o,n),d=await Fr({projectId:n,targetType:e,targetId:t,cacheEnabled:u,silent:s,apiConfig:{runTestUrl:`${a}/cloud/cli/run-test`,headers:h}});s||console.log(`Summary: ${d.passed}/${d.total} passed, ${d.failed} failed.`),d.success||process.exit(1)}function Rt(n){return n.cache===void 0?null:!!n.cache}z.command("run-project").description("Execute a cloud project").requiredOption("-p, --project <projectId>","Cloud project id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async n=>{try{await Lt({projectId:n.project.trim(),targetType:"project",targetId:null,cacheOverride:Rt(n),silent:!!n.silent})}catch(e){await Pe(e),console.error(e.message||String(e)),process.exit(1)}});z.command("run-folder").description("Execute a cloud test folder").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-f, --folder <folderId>","Cloud test folder id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async n=>{try{await Lt({projectId:n.project.trim(),targetType:"folder",targetId:n.folder.trim(),cacheOverride:Rt(n),silent:!!n.silent})}catch(e){await Pe(e),console.error(e.message||String(e)),process.exit(1)}});z.command("run-test").description("Execute a single cloud test case").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-t, --test <testId>","Cloud test case id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async n=>{try{await Lt({projectId:n.project.trim(),targetType:"test",targetId:n.test.trim(),cacheOverride:Rt(n),silent:!!n.silent})}catch(e){await Pe(e),console.error(e.message||String(e)),process.exit(1)}});z.parseAsync(process.argv);
36
+ `;await y.addInitScript(w)}let S=await y.newPage();if(l)try{let w=Kr(r);try{let m=S.goto(l);w?await Promise.race([m,w.promise]):await m}finally{w?.cancel()}}catch(w){throw Jt(l,w)}let b={sessionTestId:r,testFolderId:o,projectId:i,resetStateOption:s,browser:g,context:y,page:S,url:l,browserState:t,httpCredentials:c};Yn(r,b),u=b;try{let w=await ut(r);w&&(u.browserState=w)}catch{}break}catch(g){if(f=g,await me(r),H(r))throw pe(r);if(h===n)throw new Error(`Failed to initialize browser session after ${n} attempts: ${f.message}`);let p=Math.min(1e3*Math.pow(2,h-1),5e3);await new Promise(y=>setTimeout(y,p))}}}if(t&&u&&!d&&await rs(u,t,l||u.url||null),u&&(u.httpCredentials=c),u&&l&&(u.url=l),H(r))throw pe(r);return u}async function us(r,e,t,n=null,s=3e5,o=!1,i=[],a="test",l=null,c=null,u=!1,d=null){let f=new AbortController,h=null;Ge.set(r,{vmContext:null,abortController:f});try{let g=await dt(r,e,n,3,a,l,c,d),{page:p}=g;await cs(p);let S={page:os(p,i),expect:qr.expect,files:i};h=Gt.default.createContext(S),Ge.set(r,{vmContext:h,abortController:f});try{let b=await Gt.default.runInContext(`(async () => { ${t} })();`,h,{timeout:s}),w=null;if(o&&g?.page)try{w=await g.page.screenshot({type:"jpeg",fullPage:!0})}catch{}return{success:!0,message:"Test executed successfully",finalScreenshot:w}}catch(b){let w=H(r),m=ls(b),v=w||m,A=!!u&&m&&!w,j=null;return w?(await me(r),{success:!1,error:b.message,errorType:"stopped",stack:b.stack,isExpectFailure:!1,shouldStopTest:!0,tracePath:j,cancelled:!0}):v?(A||await me(r),{success:!1,error:b.message,errorType:"assertion",stack:b.stack,isExpectFailure:!0,shouldStopTest:!0,tracePath:j}):{success:!1,error:b.message,errorType:"execution",stack:b.stack,isExpectFailure:!1,shouldStopTest:!1}}}catch(g){let p=H(r)||g.code===lt;return await me(r),{success:!1,error:g.message,errorType:p?"stopped":"browser",stack:g.stack,isExpectFailure:!1,shouldStopTest:!0,tracePath:null,cancelled:p}}finally{Ge.delete(r)}}async function zr(r,e=null,t=null,n="test",s=null,o=null,i=null){if(H(r))return{success:!1,cancelled:!0,error:"Test execution stopped by user"};try{let a;if(e){a=await dt(r,e,t,3,n,s,o,i);let{page:d}=a;await Jr(d,e,r)}else{let d=be(r);if(!d||d.sessionTestId!==r)return{success:!1,error:"No active session found for this test. Provide a URL to create a new session."};a=d}let{page:l}=a,c=await l.content(),u=await l.screenshot({type:"jpeg",fullPage:!0});return{success:!0,html:c,screenshot:u}}catch(a){return a.code===lt?{success:!1,cancelled:!0,error:a.message}:{success:!1,error:a.message}}}async function Yr(r,e,t=null,n="test",s=null,o=null,i=null){if(H(r))return{success:!1,cancelled:!0,error:"Test execution stopped by user",url:We(e)};try{let a=await dt(r,e,t,3,n,s,o,i),{page:l}=a,c=Kr(r);try{let u=Jr(l,e,r);c?await Promise.race([u,c.promise]):await u}finally{c?.cancel()}if(t){if(H(r))throw pe(r);await ns(l,t,e)}return{success:!0,message:`Successfully navigated to ${We(e)}`,url:l.url()}}catch(a){return a.code===lt?{success:!1,cancelled:!0,error:a.message,url:We(e)}:{success:!1,error:a.message,url:We(e)}}}async function ds(r,e,t=null,n="test",s=null,o=null,i=null){return Yr(r,e,t,n,s,o,i)}async function hs(r){return await zr(r)}function fs(r=null){return be(r)}async function ps(r,e,t=null,n=3,s="test",o=null,i=null,a=null){return await dt(r,e,t,n,s,o,i,a)}var q={cleanupSession:me,forceStopTestExecution:as,executePlaywrightCode:us,getPageState:zr,navigateToUrl:Yr,navigateToUrlWithState:ds,getCurrentState:hs,captureCurrentBrowserState:ut,getCurrentSession:fs,getOrCreateContinuousRecordingSession:ps};function ms(r,e,t,n,s){if(!r)return!0;switch(t){case"never":return!1;case"testFolder":return s!==n;case"test":default:return r!==e}}var Qt=class{constructor(){this.currentPlaywrightSession=null,this.lastTestFolderId=null,this.currentExecutionGroupId=null,this.executionGroupStartTime=null}startExecutionGroup(){let e=Date.now();return this.currentExecutionGroupId=`group-${e}-${Math.random().toString(36).substring(2,9)}`,this.executionGroupStartTime=e,this.currentExecutionGroupId}generateSessionId(e,t,n){let s=e.projectId||"unknown-project",o=e.testFolderId||"uncategorized",i=e.id||e.testId||"unknown-test";if(t==="never")return`session-project-${s}-${n}`;if(t==="testFolder")return`session-folder-${o}-${n}`;let a=Date.now().toString()+Math.random().toString(36).substring(2,9);return`session-test-${i}-${a}`}shouldResetSession(e,t){return!this.currentPlaywrightSession||this.currentPlaywrightSession===e.sessionId?!1:ms(this.currentPlaywrightSession,e.sessionId,t,e.testFolderId,this.lastTestFolderId)}updateSessionTracking(e,t){this.currentPlaywrightSession=e,this.lastTestFolderId=t}resetSessionTracking(){this.currentPlaywrightSession=null}async cleanupSession(e=null){try{return await q.cleanupSession(e),this.resetSessionTracking(),{success:!0}}catch(t){return{success:!1,error:t.message}}}},xe=new Qt;var ae=new Map,ft=!1,Xt=null,Qr=null,ht=null,gs=null,ys=500;function ws(r){return Array.isArray(r)?r:[]}function _s(r,e){return e&&e.expiresAt&&e.expiresAt<=Date.now()?(ae.delete(r),!0):!1}function Xr(r={},e=!1,t={}){if(ft=!!e,Xt=t.cachePath||null,Qr=t.cacheVersion||null,ae=new Map,!ft)return;ws(r).forEach(s=>{!s?.key||typeof s.value>"u"||s.expiresAt&&s.expiresAt<=Date.now()||ae.set(s.key,{key:s.key,value:s.value,meta:s.meta||{},createdAt:s.createdAt||Date.now(),expiresAt:s.expiresAt||null})})}async function pt(r){if(!ft||!r)return null;let e=ae.get(r);return!e||_s(r,e)?null:e.value}function mt(r,e,t={},n={}){if(!ft||!r)return;let s=typeof n.ttl=="number"?n.ttl:gs,o=typeof s=="number"&&s>0?Date.now()+s:null;ae.set(r,{key:r,value:e,meta:t,createdAt:Date.now(),expiresAt:o}),Zt()}function gt(r=null,e=null){let t=0;for(let[n,s]of ae.entries()){let o=s?.meta||{},i=r?o.projectId===r:!1,a=e?o.testId===e:!1;(i||a)&&(ae.delete(n),t++)}return t>0&&Zt(),t}function Zr(r){if(!r)return 0;let e=0;for(let[t,n]of ae.entries())(n?.meta||{}).sessionId===r&&(ae.delete(t),e++);return e>0&&Zt(),e}function Zt(){Xt&&(ht&&clearTimeout(ht),ht=setTimeout(()=>{ht=null;let r=Array.from(ae.values()),e={version:Qr,entries:r};Promise.resolve().then(()=>(Ue(),$r)).then(({writeJson:t})=>t(Xt,e)).catch(()=>{})},ys))}var yt=class{constructor(e,t){this.logger=e,this.apiConfig=t,this.retryErrorContext=null}async executeTestSteps(e,t,n,s={}){let o=s?.enableCache!==!1,i={cacheEnabled:o,usedCache:!1},a=1,l="",c=!1,u=t.html,d=t.screenshot,f=0,h=3,g=0,p=[5,30,60],y=[5e3,15e3],S=0;for(;!c||f>0;){let w=(new Date-e.startedAt)/1e3;if(w>e.testTimeout){let m=new Error(`Test execution timeout: exceeded ${e.testTimeout} seconds (${w.toFixed(1)}s elapsed)`);if(this.isRetryableError(m.message)&&f<h){f++,this.logger.addLog(e.id,"warning",`Test timeout (attempt ${f}/${h}): ${m.message}`),this.retryErrorContext=`Test timeout (attempt ${f}): ${m.message}`;let v=await this._capturePageState(e.sessionId,e.id);v&&(u=v.html,d=v.screenshot);continue}throw m.shouldRetryWithoutCache=i.usedCache,m.cacheUsed=i.usedCache,m}if(a>e.maxSteps){let m=new Error(`Test reached maximum steps limit (${e.maxSteps}) without completing.`);throw m.isLogged=!0,m.shouldRetryWithoutCache=i.usedCache,m.cacheUsed=i.usedCache,this.logger.addLog(e.id,"error",m.message),m}try{let m=await this._executeStep(e,a,u,d,l,n,i);if(g=0,m.forceFailure){let v=m.forceFailureReason||m.description;if(m.fromCache&&S<y.length){let j=y[S];S++,this.logger.addLog(e.id,"warning",`Cache retry ${S}/2 after failure - waiting ${Math.round(j/1e3)}s before retrying step ${a} from cache`),await this._sleep(j);let $=await this._capturePageState(e.sessionId,e.id);$&&(u=$.html,d=$.screenshot),f=0;continue}this._logStepDetails(e.id,a,m.description,d,m.userExperienceRate,m.userExperienceAdvices,m.fromCache),this.logger.addLog(e.id,"error",`Step ${a} - Test failed: ${v}`);let A=new Error(`Test failed due to unresolvable issue at step ${a}: ${v}`);throw A.isLogged=!0,A.shouldRetryWithoutCache=i.usedCache,A.cacheUsed=i.usedCache,A}if(c=m.isFinalStep,m.playwrightCode){let v=!!m.fromCache&&S<y.length,A=await this._executePlaywrightCode(e,a,m,n,v),j=A.cancelled?"cancelled":A.success?"success":"failed";if(A.cancelled)return{success:!1,reason:"stopped",finalScreenshot:A.finalScreenshot||d};if(A.success){c&&A.finalScreenshot&&(d=A.finalScreenshot),!m.fromCache&&m.cacheKey&&m.cacheMeta&&mt(m.cacheKey,{playwrightCode:m.playwrightCode,description:m.description,isFinalStep:m.isFinalStep,forceFailure:m.forceFailure,forceFailureReason:m.forceFailureReason,userExperienceRate:m.userExperienceRate,userExperienceAdvices:m.userExperienceAdvices},m.cacheMeta);let $=null;c||($=await this._capturePageState(e.sessionId,e.id),$&&(u=$.html,d=$.screenshot)),this._logStepDetails(e.id,a,m.description,d,m.userExperienceRate,m.userExperienceAdvices,m.fromCache),this.logger.addLog(e.id,"success",`Step ${a} executed successfully`),l+=`Step ${a}: ${m.description}
37
+ `,c?f=0:(a++,f=0,S=0)}else{let{shouldRetry:$,error:x}=await this._handleExecutionFailure(e,a,A,f,h,l,m.description,o,i);if($){f++;let W=await this._capturePageState(e.sessionId,e.id);W&&(u=W.html,d=W.screenshot);continue}if(m.fromCache&&S<y.length){let W=y[S];S++,this.logger.addLog(e.id,"warning",`Cache retry ${S}/2 after failure - waiting ${Math.round(W/1e3)}s before retrying step ${a} from cache`),await this._sleep(W);let T=await this._capturePageState(e.sessionId,e.id);T&&(u=T.html,d=T.screenshot),f=0;continue}throw x}}else if(this._logStepDetails(e.id,a,m.description,d,m.userExperienceRate,m.userExperienceAdvices,m.fromCache),l+=`Step ${a}: ${m.description}
38
+ `,c||(a++,S=0),f=0,!c)continue}catch(m){if(this._isNetworkError(m)){if(g<p.length){let v=p[g],A=g+1;g++;let j=m.message||"Unknown network error";this.logger.addLog(e.id,"warning",`Network error during step ${a} (attempt ${A})`,`Retrying in ${v}s: ${j}`),await this._sleep(v*1e3);continue}this.logger.addLog(e.id,"error",`Network error persisted after ${p.length} retries`,m.message||"Unknown network error")}throw m.isLogged||(this.logger.addLog(e.id,"error","Test execution error",m.message),m.isLogged=!0),m.shouldRetryWithoutCache=i.usedCache,m.cacheUsed=i.usedCache,m}}return{success:!0,stepNumber:a-1,finalScreenshot:d}}async _executeStep(e,t,n,s,o,i,a){let l=o;this.retryErrorContext&&(l+=(l?`
39
+ `:"")+this.retryErrorContext,this.retryErrorContext=null);let c=a?.cacheEnabled?await this._buildStepCacheKey(e,t,n,s,l,i):null;if(c){let h=await pt(c);if(h)return a.usedCache=!0,{playwrightCode:h.playwrightCode,description:h.description,isFinalStep:h.isFinalStep,forceFailure:h.forceFailure,forceFailureReason:h.forceFailureReason,userExperienceRate:h.userExperienceRate,userExperienceAdvices:h.userExperienceAdvices,fromCache:!0,cacheKey:c,cacheMeta:{projectId:e.projectId,testId:e.testId||e.sourceTestId||e.id,sessionId:e.sessionId,timing:"step",level:"test",actionId:null,testFolderId:e.testFolderId||null}}}let u=new FormData;u.append("test_name",e.testName||"Untitled Test"),u.append("test_description",e.testDescription||""),u.append("html_code",n||"");let d=new Blob([s],{type:"image/jpeg"});u.append("screenshot",d,"screenshot.jpeg"),l&&u.append("previous_steps",l),Array.isArray(e.files)&&e.files.length>0&&e.files.forEach((h,g)=>{u.append(`files[${g}][name]`,h.name||""),u.append(`files[${g}][description]`,h.description||"")});let f=await ot(this.apiConfig.runTestUrl,{formData:u,headers:this.apiConfig.headers});return{playwrightCode:f.playwright_code,description:f.description,isFinalStep:f.is_final_step,forceFailure:f.force_failure,forceFailureReason:f.force_failure_reason,userExperienceRate:f.user_experience_rate,userExperienceAdvices:f.user_experience_advices,fromCache:!1,cacheKey:c,cacheMeta:{projectId:e.projectId,testId:e.testId||e.sourceTestId||e.id,sessionId:e.sessionId,timing:"step",level:"test",actionId:null,testFolderId:e.testFolderId||null}}}async _executePlaywrightCode(e,t,n,s,o=!1){try{let i=await this._prepareTestFiles(e);return await q.executePlaywrightCode(e.sessionId,e.url,n.playwrightCode,null,e.actionTimeout*1e3,n.isFinalStep,i,s,e.testFolderId,e.projectId,o,e.authCredentials||null)}catch(i){throw i.isLogged||(this.logger.addLog(e.id,"error",`Step ${t} execution error`,i.message),i.isLogged=!0),i}}async _prepareTestFiles(e){let t=[];if(Array.isArray(e.files))for(let n=0;n<e.files.length;n++){let s=e.files[n];s?.path&&s?.name?t[n]={name:s.name,description:s.description||"",path:s.path}:t[n]=null}return t}async _handleExecutionFailure(e,t,n,s,o,i,a,l,c){let u=`Step ${t} failed`,d=n.error;if(n.isExpectFailure){u=typeof a=="string"&&a.trim().length>0?`Step ${t} failed - ${a.trim()}`:`Step ${t} assertion failed`,this.logger.addLog(e.id,"error",u,d);let p=new Error(`${u}: ${d}`);return p.isLogged=!0,p.shouldRetryWithoutCache=c?.usedCache||!1,p.cacheUsed=c?.usedCache||!1,{shouldRetry:!1,error:p}}if(this.isRetryableError(n.error)&&s<o)return this.logger.addLog(e.id,"warning",`Step ${t} failed (attempt ${s+1}/${o}): ${n.error}`,d),this.retryErrorContext=`Step ${t} (attempt ${s+1}): Failed with error: ${n.error}`,{shouldRetry:!0};n.errorType==="execution"?u=`Step ${t} code execution failed`:n.errorType==="browser"&&(u=`Step ${t} browser error`),this.logger.addLog(e.id,"error",u,d);let h=new Error(`${u}: ${d}`);return h.isLogged=!0,h.shouldRetryWithoutCache=c?.usedCache||!1,h.cacheUsed=c?.usedCache||!1,{shouldRetry:!1,error:h}}_logStepDetails(e,t,n,s,o,i,a=!1){let l=n||"No description provided",c=a?" (cache)":"",u={};typeof o<"u"&&(u.user_experience_rate=o),typeof i<"u"&&(u.user_experience_advices=i),a&&(u.from_cache=!0),this.logger.addLog(e,"info",`Step ${t}${c}: ${l}`,null,u)}async _buildStepCacheKey(e,t,n,s,o,i){let a="v1",l=e.testId||e.sourceTestId||e.id||"unknown-test",c=e.projectId||"unknown-project",u=await this._hashString(o||""),d=this._buildFilesSignature(e.files),f=e.testFolderId||"",h=JSON.stringify({cacheVersion:a,projectId:c,sourceTestId:l,url:e.url||"",authCredentials:e.authCredentials||null,resetStateOption:i||"",maxSteps:e.maxSteps,actionTimeout:e.actionTimeout,environment:e.environment||"",role:e.role||"",previousStepsHash:u,filesSignature:d,testFolderId:f,stepNumber:t}),g=await this._hashString(h);return`step:${a}:${c}:${l}:${t}:${g}`}_buildFilesSignature(e){if(!Array.isArray(e)||e.length===0)return"no-files";let t=e.map(n=>({name:n?.name||"",description:n?.description||"",id:n?.id||""}));return this._simpleHash(JSON.stringify(t))}async _hashString(e){if(typeof e!="string")return"no-string";try{if(typeof crypto<"u"&&crypto.subtle?.digest){let n=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(s)).map(o=>o.toString(16).padStart(2,"0")).join("")}}catch{}return this._simpleHash(e)}_simpleHash(e){let t=0,n=String(e);for(let s=0;s<n.length;s++)t=(t<<5)-t+n.charCodeAt(s),t|=0;return Math.abs(t).toString(16)}async _capturePageState(e,t){try{let n=await q.getCurrentState(e);if(n&&n.success)return{html:n.html,screenshot:n.screenshot}}catch(n){this.logger.addLog(t,"warning","Failed to capture page state",n.message)}return null}_sleep(e){return new Promise(t=>setTimeout(t,e))}_isNetworkError(e){if(!e||e.code==="ERR_CANCELED")return!1;if(e.isAxiosError&&!e.response)return!0;let t=typeof e.message=="string"?e.message.toLowerCase():"",n=typeof e.code=="string"?e.code.toLowerCase():"",s=["network error","net::err_","failed to fetch","getaddrinfo","socket hang up","econnreset","econnrefused","timed out","etimedout","ehostunreach","enotfound","network is unreachable"];return!!(s.some(o=>t.includes(o))||n&&s.some(o=>n.includes(o)))}isRetryableError(e){if(!e||typeof e!="string")return!1;let t=e.toLowerCase();return t.includes("strict mode violation")?!0:!(t.includes("assertion failed")||t.includes("expect(")&&!t.includes("timed out")||t.includes("expected")&&t.includes("received")&&!t.includes("timed out")||t.includes("assertionerror")||t.includes("expectation failed"))}};var wt=class{constructor(e,t,n=()=>!1,s=()=>{}){this.logger=e,this.apiConfig=t,this.retryErrorContext=null,this.isStopRequested=n,this.executedProjectBeforeActions=new Map,this.recordActionCode=typeof s=="function"?s:()=>{}}async executeActions(e,t,n,s,o="test",i=null,a=null,l={}){let c=l?.enableCache!==!1,u=n.filter(p=>s==="before"&&!p.executeAfter||s==="after"&&p.executeAfter);if(this.isStopRequested())return this.logger.addLog(t,"warning",`${s} actions cancelled by user request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:!1};if(u.length===0)return this.logger.addLog(t,"info",`No ${s} actions to execute`),{success:!0,message:`No ${s} actions to execute`,usedCache:!1};this.logger.addLog(t,"info",`Executing ${u.length} ${s} action(s) in inheritance order (Project->Test Folder->Test)`);let d=0,f=0,h=!1;for(let p=0;p<u.length;p++){if(this.isStopRequested())return this.logger.addLog(t,"warning",`Cancelled remaining ${s} actions after user stop request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:h};let y=u[p];if(this._shouldSkipProjectBeforeAction(e,y,s,o)){this.logger.addLog(t,"info",`Skipping project-level ${s} action "${y.name}" for persistent session`);continue}try{let S=this._resolveActionUrl(y),b=this._resolveActionAuth(y);this.logger.addLog(t,"info",`[${p+1}/${u.length}] Executing ${s} action: "${y.name}" (${y.level} level) - URL: ${S}`);let w=this._resolveActionStorage(y),m=(w?.cookies?.length||0)>0||Object.keys(w?.localStorage||{}).length>0||Object.keys(w?.sessionStorage||{}).length>0,v=null;if(m?v=await this._navigateWithBrowserState(e,y,S,b,t,o,i,a):v=await q.navigateToUrl(e,S,null,o,i,a,b),v?.cancelled)return this.logger.addLog(t,"warning",`${s} action "${y.name}" cancelled during navigation`),{success:!1,cancelled:!0,usedCache:h};if(v&&v.success===!1){let $=this._formatDetails(v.error,"Navigation failed");this.logger.addLog(t,"warning",`\u2717 ${s} action "${y.name}" navigation failed`,$),f++;continue}if(this.isStopRequested())return this.logger.addLog(t,"warning",`Cancelled ${s} action "${y.name}" due to user stop request`),{success:!1,message:`${s} actions cancelled by user`,cancelled:!0,usedCache:h};let A=typeof y.description=="string"?y.description.trim():"";if(!A){this._recordProjectBeforeActionSuccess(e,y,s,o);let x=!!y.storageOnly?`\u2713 ${s} action "${y.name}" storage configuration applied (no AI instructions)`:`\u2713 ${s} action "${y.name}" navigation completed (no description to execute)`;this.logger.addLog(t,"success",x),d++;continue}let j=await this._executeActionWithAI(e,{...y,description:A},S,b,t,s,o,i,a,p+1,{enableCache:c,testId:l?.testId,projectId:l?.projectId});if(j?.cacheUsed&&(h=!0),!j||j.cancelled)return{success:!1,cancelled:!0,usedCache:h};j.success?(d++,this._recordProjectBeforeActionSuccess(e,y,s,o)):f++}catch(S){let b=this._formatDetails(S);this.logger.addLog(t,"warning",`\u2717 ${s} action "${y.name}" failed with unexpected error`,b),f++}}let g=f===0;return{success:g,message:g?`${s} actions completed`:`${s} actions failed`,usedCache:h}}async _navigateWithBrowserState(e,t,n,s,o,i,a,l){let c=this._resolveActionStorage(t);this.logger.addLog(o,"info",`Action "${t.name}" includes browser state: ${t.cookies?.length||0} cookies, ${Object.keys(t.localStorage||{}).length} localStorage items, ${Object.keys(t.sessionStorage||{}).length} sessionStorage items`);let u=JSON.parse(JSON.stringify(c));return await q.navigateToUrlWithState(e,n,u,i,a,l,s)}async _executeActionWithAI(e,t,n,s,o,i,a,l,c,u=1,d={}){let f=d?.enableCache!==!1,h=!1,g=d?.testId||o,p=d?.projectId||c;if(this.isStopRequested())return this.logger.addLog(o,"warning",`${i} action "${t.name}" cancelled before execution`),{success:!1,cancelled:!0};let y=typeof t.actionTimeout=="number"?t.actionTimeout*1e3:6e4,S=typeof t.maxSteps=="number"?t.maxSteps:10,b=await q.getCurrentState(e);if(!b||!b.success){let T=this._formatDetails(b?.error);return this.logger.addLog(o,"warning",`\u2717 ${i} action "${t.name}" failed to capture page state: ${T}`,T),{success:!1}}let w=1,m="",v=!1,A=0,j=3,$=[5e3,15e3],x=0;for(;(!v||A>0)&&w<=S;){if(this.isStopRequested())return this.logger.addLog(o,"warning",`${i} action "${t.name}" cancelled by user`),{success:!1,cancelled:!0};try{let T=(t.description||"").trim(),U=m;this.retryErrorContext&&(U+=(U?`
40
+ `:"")+this.retryErrorContext,this.retryErrorContext=null);let z=f?await this._buildActionCacheKey({action:t,timing:i,stepNumber:w,pageStateResult:b,previousStepsContext:U,resetStateOption:a,projectId:p,testId:g,sessionId:e,actionTimeoutMs:y,maxSteps:S,testFolderId:l}):null,te,V,Oe,je,ge,re,ne,N=!1;if(z){let D=await pt(z);D&&(h=!0,N=!0,{playwrightCode:te,description:V,isFinalStep:Oe,forceFailure:je,forceFailureReason:ge,userExperienceRate:re,userExperienceAdvices:ne}=D)}if(!N){let D=new FormData;D.append("test_name",`${i} action: ${t.name}`),D.append("test_description",T),D.append("html_code",b.html);let k=new Blob([b.screenshot],{type:"image/jpeg"});D.append("screenshot",k,"screenshot.jpeg"),U&&D.append("previous_steps",U),{playwright_code:te,description:V,is_final_step:Oe,forceFailure:je,forceFailureReason:ge,user_experience_rate:re,user_experience_advices:ne}=await ot(this.apiConfig.runTestUrl,{formData:D,headers:this.apiConfig.headers})}if(je){let D=ge||V;if(N&&x<$.length&&!this.isStopRequested()){let k=$[x];x++,this.logger.addLog(o,"warning",`Cache retry ${x}/2 after failure - waiting ${Math.round(k/1e3)}s before retrying ${i} action "${t.name}" step ${w} from cache`),await new Promise(Y=>setTimeout(Y,k));let Ce=await this._capturePageState(e,o);Ce&&(b=Ce),A=0;continue}return this._logActionDetails(o,t.name,V,b.screenshot,re,ne,N),this.logger.addLog(o,"warning",`\u2717 ${i} action "${t.name}" failed: ${D}`,D),{success:!1,cacheUsed:h}}if(v=!!Oe,te){if(this.isStopRequested())return this.logger.addLog(o,"warning",`${i} action "${t.name}" cancelled before executing Playwright code`),{success:!1,cancelled:!0,cacheUsed:h};let D=N&&x<$.length&&!this.isStopRequested(),k=await q.executePlaywrightCode(e,n,te,null,y,v,[],a,l,c,D,s),Ce=k.cancelled?"cancelled":k.success?"success":"failed";if(this.recordActionCode({executionId:o,timing:i,actionName:t.name,actionLevel:t.level,actionOrder:u,stepNumber:w,attempt:A+1,description:V,code:te,status:Ce}),k.cancelled)return{success:!1,cancelled:!0};if(k.success){let G=await this._capturePageState(e,o);if(G&&(b=G),!N&&z&&mt(z,{playwrightCode:te,description:V,isFinalStep:Oe,forceFailure:je,forceFailureReason:ge,userExperienceRate:re,userExperienceAdvices:ne},{projectId:p,testId:g,sessionId:e,timing:i,level:t.level,actionId:t.id||null,testFolderId:l||null}),N&&(h=!0),this._logActionDetails(o,t.name,V,b.screenshot,re,ne,N),m+=`Step ${w}: ${V}
41
+ `,!v){w++,A=0,x=0;continue}return this.logger.addLog(o,"success",`\u2713 ${i} action "${t.name}" executed successfully`),{success:!0,cacheUsed:h}}let Y=!!k.isExpectFailure,se=!Y&&this.isRetryableError(k.error),Pe=this._formatDetails(k.error);if(se&&A<j){A++,this.logger.addLog(o,"warning",`${i} action "${t.name}" step ${w} failed (attempt ${A}/${j}): ${k.error}`,Pe),this.retryErrorContext=`Step ${w} (attempt ${A}): Failed with error: ${k.error}`;let G=await this._capturePageState(e,o);G&&(b=G);continue}if(N&&x<$.length&&!this.isStopRequested()){let G=$[x];x++,this.logger.addLog(o,"warning",`Cache retry ${x}/2 after failure - waiting ${Math.round(G/1e3)}s before retrying ${i} action "${t.name}" step ${w} from cache`),await new Promise(_=>setTimeout(_,G));let ze=await this._capturePageState(e,o);ze&&(b=ze),A=0;continue}let Re=Y?"assertion failed":"execution failed";return this.logger.addLog(o,"warning",`\u2717 ${i} action "${t.name}" step ${w} ${Re}: ${k.error}`,Pe),{success:!1,cacheUsed:h}}let Ne=await this._capturePageState(e,o);if(Ne&&(b=Ne),this._logActionDetails(o,t.name,V,b.screenshot,re,ne,N),m+=`Step ${w}: ${V}
42
+ `,!v){w++,A=0,x=0;continue}return this.logger.addLog(o,"success",`\u2713 ${i} action "${t.name}" completed`),{success:!0,cacheUsed:h}}catch(T){let U=this._formatDetails(T);return this.logger.addLog(o,"warning",`\u2717 ${i} action "${t.name}" API failed: ${T.message}`,U),{success:!1,cacheUsed:h}}}let W=`Maximum of ${S} steps reached without completing action "${t.name}"`;return this.logger.addLog(o,"warning",`\u2717 ${i} action "${t.name}" reached maximum steps limit (${S}) without completing`,W),{success:!1,cacheUsed:h}}async _capturePageState(e,t){try{let n=await q.getCurrentState(e);if(n&&n.success)return n}catch(n){let s=this._formatDetails(n);this.logger.addLog(t,"warning","Failed to capture page state for action logging",s)}return null}_logActionDetails(e,t,n,s,o,i,a=!1){let l=a?" (cache)":"",c={};typeof o<"u"&&(c.user_experience_rate=o),typeof i<"u"&&(c.user_experience_advices=i),a&&(c.from_cache=!0),this.logger.addLog(e,"info",`${t}${l}: ${n||"No description provided"}`,null,c)}_formatDetails(e,t="Unknown error"){if(e instanceof Error)return e.stack||e.message||t;if(typeof e=="string")return e||t;if(e==null)return t;if(typeof e=="object")try{return JSON.stringify(e,null,2)}catch{return String(e)}return String(e)}async _buildActionCacheKey({action:e,timing:t,stepNumber:n,pageStateResult:s,previousStepsContext:o,resetStateOption:i,projectId:a,testId:l,sessionId:c,actionTimeoutMs:u,maxSteps:d,testFolderId:f}){let h="v1",g=await this._hashString(o||""),p=JSON.stringify({cacheVersion:h,actionId:e.id||"",actionName:e.name||"",actionUrl:e.url||"",actionAuth:this._resolveActionAuth(e),actionLevel:e.level||"",timing:t,stepNumber:n,resetStateOption:i,actionTimeoutMs:u,maxSteps:d,projectId:a||"unknown-project",testId:l||"unknown-test",description:(e.description||"").trim(),storageOnly:!!e.storageOnly,testFolderId:f||e.testFolderId||"",cookies:e.cookies||[],localStorage:e.localStorage||{},sessionStorage:e.sessionStorage||{},previousStepsHash:g}),y=await this._hashString(p);return`action:${h}:${a||"project"}:${l||"test"}:${t}:${e.id||e.name||"unnamed"}:${y}`}async _hashString(e){if(typeof e!="string")return"no-string";try{if(typeof crypto<"u"&&crypto.subtle?.digest){let n=new TextEncoder().encode(e),s=await crypto.subtle.digest("SHA-256",n);return Array.from(new Uint8Array(s)).map(o=>o.toString(16).padStart(2,"0")).join("")}}catch{}return this._simpleHash(e)}_simpleHash(e){let t=0,n=String(e);for(let s=0;s<n.length;s++)t=(t<<5)-t+n.charCodeAt(s),t|=0;return Math.abs(t).toString(16)}_shouldSkipProjectBeforeAction(e,t,n,s){if(!e||n!=="before"||t.level!=="project"||!t.id||s==="test")return!1;let o=this.executedProjectBeforeActions.get(e);return o?o.has(t.id):!1}_recordProjectBeforeActionSuccess(e,t,n,s){!e||n!=="before"||t.level!=="project"||!t.id||s!=="test"&&(this.executedProjectBeforeActions.has(e)||this.executedProjectBeforeActions.set(e,new Set),this.executedProjectBeforeActions.get(e).add(t.id))}_resolveActionUrl(e){let t=typeof e?.cloudReplaceUrl=="string"?e.cloudReplaceUrl.trim():"";return e?.cloudUseLocalUrl===!1&&t?t:typeof e?.url=="string"?e.url.trim():""}_resolveActionAuth(e){if(e?.cloudUseLocalUrl===!1){let s=typeof e?.cloudAuthUsername=="string"?e.cloudAuthUsername:"",o=typeof e?.cloudAuthPassword=="string"?e.cloudAuthPassword:"";return e?.cloudAuthEnabled===!0&&s.trim()?{username:s,password:o}:null}let t=typeof e?.authUsername=="string"?e.authUsername:"",n=typeof e?.authPassword=="string"?e.authPassword:"";return e?.authEnabled===!0&&t.trim()?{username:t,password:n}:null}_resolveActionStorage(e){return e?.cloudUseLocalStorage===!1&&e.cloudStorage?e.cloudStorage:{cookies:e.cookies||[],localStorage:e.localStorage||{},sessionStorage:e.sessionStorage||{}}}isRetryableError(e){if(!e||typeof e!="string")return!1;let t=e.toLowerCase();return t.includes("strict mode violation")?!0:!(t.includes("assertion failed")||t.includes("expect(")&&!t.includes("timed out")||t.includes("expected")&&t.includes("received")&&!t.includes("timed out")||t.includes("assertionerror")||t.includes("expectation failed"))}};Ue();var Ke=R(require("node:path"),1);Ue();async function en(r){let e=await I(Ke.default.join(r,"structure.json"),{}),t=await I(Ke.default.join(r,"project.json"),{}),n=await I(Ke.default.join(r,"files.json"),{files:{}}),s=await I(Ke.default.join(r,"cache.json"),{entries:[]});return{structure:e,projectMeta:t,filesIndex:n,cacheData:s}}function M(r){return typeof r!="string"?"":r.trim()}function Ss(r,e){let t=M(r),n=M(e);if(!n)return t;let s=t.replace(/\/+$/,""),o=n.replace(/^\/+/,"");return s?`${s}/${o}`:`/${o}`}function bs(r,e,t){let n=M(r?.replaceUrl);if(n)return n;let s=M(r?.url);if(s)return s;let o=M(t?.replaceUrl);return o||Ss(e?.baseUrl||"",t?.path||"")}function Cs(r,e,t){let n=M(r?.cloudReplaceUrl);if(r?.cloudUseLocalUrl===!1&&n)return n;let s=M(t?.cloudReplaceUrl);if(t?.cloudUseLocalUrl===!1&&s)return s;let o=M(e?.cloudReplaceUrl);return e?.cloudUseLocalUrl===!1&&o?o:bs(r,e,t)}function $e(r,e,t){if(r!==!0)return null;let n=typeof e=="string"?e:"",s=typeof t=="string"?t:"";return n.trim()?{username:n,password:s}:null}function As(r,e,t){return M(r?.replaceUrl)||M(r?.url)?$e(r?.authEnabled,r?.authUsername,r?.authPassword):M(t?.replaceUrl)?$e(t?.authEnabled,t?.authUsername,t?.authPassword):$e(e?.authEnabled,e?.authUsername,e?.authPassword)}function Es(r,e,t){let n=M(r?.cloudReplaceUrl);if(r?.cloudUseLocalUrl===!1&&n)return $e(r?.cloudAuthEnabled,r?.cloudAuthUsername,r?.cloudAuthPassword);let s=M(t?.cloudReplaceUrl);if(t?.cloudUseLocalUrl===!1&&s)return $e(t?.cloudAuthEnabled,t?.cloudAuthUsername,t?.cloudAuthPassword);let o=M(e?.cloudReplaceUrl);return e?.cloudUseLocalUrl===!1&&o?$e(e?.cloudAuthEnabled,e?.cloudAuthUsername,e?.cloudAuthPassword):As(r,e,t)}function vs(r){if((r?.openAiApiKeyMode==="custom"?"custom":"default")!=="custom")return{};let t=typeof r?.openAiCustomApiKey=="string"?r.openAiCustomApiKey.trim():"";return t?{"X-OpenAI-Custom-Key":t}:{}}function er(r=[],e){return r.map(t=>({...t,level:e}))}function xs(r,e,t){let n=[];return Array.isArray(r.actions)&&n.push(...er(r.actions,"project")),e&&Array.isArray(e.actions)&&n.push(...er(e.actions,"testFolder")),Array.isArray(t.actions)&&n.push(...er(t.actions,"test")),n}function $s(r){return Array.isArray(r)?r.map(e=>({id:e?.id||"",name:e?.name||"",description:e?.description||""})):[]}function tn(r){return Array.isArray(r)?r.map(e=>({id:e?.id||"",name:e?.name||"",description:e?.description||"",executeAfter:!!e?.executeAfter})):[]}function Os(r,e,t,n){let s=$s(r?.files),o=tn(r?.actions),i=tn(t?.actions),a={name:r?.name,description:r?.description,url:r?.url,authCredentials:r?.authCredentials||null,maxSteps:r?.maxSteps,actionTimeout:r?.actionTimeout,resetStateOption:n,projectReset:e?.resetStateForEachTest,projectBaseUrl:e?.baseUrl,environment:r?.environment||"",role:r?.role||"",testFolderId:r?.testFolderId||"",testFolderReplaceUrl:t?.replaceUrl||"",testFolderActions:i,files:s,actions:o};try{return JSON.stringify(a)}catch{return`${r?.name||"test"}-${n}-${s.length}-${o.length}`}}function js(r,e,t){return Array.isArray(r.files)?r.files.map(n=>{if(!n?.id)return null;let s=e.files?.[n.id];if(!s?.path)throw new Error(`Missing stored file path for ${n.name||n.id}`);let o=St.default.join(t,s.path);return{id:n.id,name:n.name||s?.name||"",description:n.description||"",path:o}}).filter(Boolean):[]}function Ps(r){let e=[],t=Array.isArray(r.documents)?r.documents:[];for(let s of t)e.push({...s,testFolder:null});let n=Array.isArray(r.testFolders)?r.testFolders:[];for(let s of n){let o=Array.isArray(s.documents)?s.documents:[];for(let i of o)e.push({...i,testFolder:s})}return e}function ks(r,e,t){let n=Ps(r);return e==="project"?n:e==="folder"?n.filter(s=>s.testFolder?.cloudId===t):e==="test"?n.filter(s=>s.cloudId===t):[]}function Fs(r,e){let n=Math.max(1,Array.isArray(_t.default.cpus())?_t.default.cpus().length:1),s=Number(_t.default.totalmem?.())||0,o=Math.floor(s/(1024*1024*1024)),i=Number.isFinite(o)&&o>0?o:4,a=2,l=2,c=Math.max(0,i-a),u=Math.max(1,Math.floor(c/l));return e?{limit:Math.max(1,Math.min(r,n,u)),cpuCores:n,totalMemoryGb:i}:{limit:1,cpuCores:n,totalMemoryGb:i}}async function rn({projectId:r,targetType:e,targetId:t,apiConfig:n,cacheEnabled:s,silent:o=!1}){let i=new at({silent:o}),a=fe(r),{structure:l,filesIndex:c,cacheData:u}=await en(a),d=l||{},f=vs(d),h={...n,headers:{...n?.headers||{},...f}},g=d.id||r,p=ks(l,e,t),y=St.default.join(a,"cache-signatures.json"),S={},b=!1,w=!1,m=!1,v=Array.isArray(u.entries)&&u.entries.length>0,A=!!u.version;if(s)try{if(await Fe(y)){let _=await I(y,{});_&&typeof _=="object"&&(S=_),w=!0}}catch{S={},w=!1}if(!p.length)throw new Error("No tests found for the selected target.");let j=St.default.join(a,"cache.json");Xr(u.entries||{},s,{cachePath:j,cacheVersion:u.version||null});let $=new wt(i,h),x=new yt(i,h),W=xe.startExecutionGroup(),T=d?.queueFailureBehavior==="continueQueue"?"continueQueue":"stopQueue",U=[],z=new Map,te=0,V=0;for(let _ of p){let E=_.testFolder,L=_.resetStateOption||d?.resetStateForEachTest||"test";if(!(_.executeOnCloud!==!1)){V++,i.addLog(_.cloudId||_.id||"unknown-test","info",`Skipping "${_.name||"Untitled Test"}" (set to run in app only).`);continue}let Q=xe.generateSessionId({..._,projectId:g,testFolderId:E?.id||null},L,W),F=_.id||_.testId||_.cloudId,ye=_.name||"Untitled Test",X=Cs(_,d,E),Ye=Es(_,d,E);if(!ye.trim()||!_.description?.trim()||!X||!X.trim()){te++,i.addLog(F||"unknown-test","warning","Skipping test missing required name, description, or URL.");continue}if(s&&F){let C={..._,url:X,authCredentials:Ye,testFolderId:E?.id||_.testFolderId||null},ke=Os(C,d,E,L),K=S[F];!w&&v&&!A&&!m?(gt(g,F),m=!0):K&&K!==ke&&gt(g,F),K!==ke&&(S[F]=ke,b=!0)}U.push({testEntry:_,testFolder:E,resetStateOption:L,sessionId:Q,testId:F,testName:ye,testUrl:X,testAuthCredentials:Ye}),z.set(Q,(z.get(Q)||0)+1)}if(!U.length)throw new Error("No valid tests found for the selected target.");te>0&&i.addLog("system","warning",`Skipping ${te} test(s) without required name, description, or URL.`),V>0&&i.addLog("system","info",`Skipping ${V} test(s) marked for app-only execution.`);let Oe=U.every(_=>_.resetStateOption==="test"||_.resetStateOption==="testFolder"),je=!!d?.parallelExecutionEnabled&&Oe,ge=Fs(U.length,je),re=ge.limit;U.length>1&&(re>1?i.addLog("system","info",`Parallel execution enabled: ${re} instances (cores: ${ge.cpuCores}, RAM: ${ge.totalMemoryGb}GB).`):i.addLog("system","info","Parallel execution disabled or limited to 1 instance for this run."));let ne=0,N=0,Ne=_=>{if(!_)return;let E=z.get(_);if(!E)return;let L=E-1;L<=0?z.delete(_):z.set(_,L)},D=async(_,E,L=!1)=>{let B=E||_.resetStateOption||"test";if(B!=="never"){if(B==="testFolder"){if(L){await xe.cleanupSession(_.sessionId);return}if((z.get(_.sessionId)||0)>1)return}await xe.cleanupSession(_.sessionId)}},k=_=>{let E=String(_?.message||"").toLowerCase();return _?.code==="EXECUTION_STOPPED"||E.includes("stopped by user")||E.includes("cancelled by user")||E.includes("execution stopped")},Ce=async _=>{let{testEntry:E,testFolder:L,resetStateOption:B,sessionId:Q,testId:F,testName:ye,testUrl:X,testAuthCredentials:Ye}=_,C={id:F,testId:F,sessionId:Q,testName:ye,testDescription:E.description||"",projectId:g,testFolderId:L?.id||null,testFolderName:L?.name||"Uncategorized",url:X,authCredentials:Ye,actionTimeout:E.actionTimeout||60,testTimeout:E.testTimeout||300,maxSteps:E.maxSteps||50,actions:Array.isArray(E.actions)?[...E.actions]:[],files:js(E,c,a),environment:E.environment||"",role:E.role||"",resetStateOption:B,startedAt:new Date};i.addLog(C.id,"info",`Started executing test "${C.testName}"`);let ke=xs(d,L,C),K="stopped",Qe=!1;try{let ce=0,Ie=!1,bt=4;for(;ce<bt;)try{let oe=await $.executeActions(C.sessionId,C.id,ke,"before",B,C.testFolderId,C.projectId,{enableCache:!Ie,projectId:g,testId:F});if(!oe?.success){let Ae=new Error(`Before actions failed: ${oe?.message||"Unknown error"}`);throw Ae.shouldRetryWithoutCache=!0,oe?.usedCache&&(Ae.cacheUsed=!0),Ae}let Xe=await q.getPageState(C.sessionId,C.url,null,B,C.testFolderId,C.projectId,C.authCredentials||null);if(!Xe?.success)throw new Error(Xe?.error||"Failed to capture initial page state");await x.executeTestSteps(C,Xe,B,{enableCache:!Ie});let Ct=await $.executeActions(C.sessionId,C.id,ke,"after",B,C.testFolderId,C.projectId,{enableCache:!Ie,projectId:g,testId:F});if(!Ct?.success){let Ae=new Error(`After actions failed: ${Ct?.message||"Unknown error"}`);throw Ae.shouldRetryWithoutCache=!0,Ct?.usedCache&&(Ae.cacheUsed=!0),Ae}i.addLog(C.id,"success",`Test "${C.testName}" completed successfully`),K="passed";break}catch(oe){if(!Ie&&!!oe?.shouldRetryWithoutCache){Ie=!0,gt(C.projectId,F||null),Zr(C.sessionId),i.addLog(C.id,"warning",`Cache invalidated after failure - retrying test "${C.testName}" without cache`),await xe.cleanupSession(C.sessionId),C.startedAt=new Date,ce++;continue}if(k(oe)){i.addLog(C.id,"warning",`Test "${C.testName}" stopped`,oe.message||String(oe)),K="stopped";break}i.addLog(C.id,"error",`Test "${C.testName}" failed`,oe.message||String(oe)),K="failed",Qe=!0;break}ce>=bt&&K==="stopped"&&(i.addLog(C.id,"error",`Test "${C.testName}" failed`,`Exceeded ${bt} retry attempts.`),K="failed",Qe=!0)}catch(ce){k(ce)?(i.addLog(C.id,"warning",`Test "${C.testName}" stopped`,ce.message||String(ce)),K="stopped"):(i.addLog(C.id,"error",`Test "${C.testName}" failed`,ce.message||String(ce)),K="failed",Qe=!0)}finally{await D(C,B,Qe&&T==="stopQueue"),Ne(C.sessionId)}return{outcome:K,test:C}},Y=[...U],se=new Set,Pe=new Map,Re=new Set,G=!1,ze=()=>{if(G||se.size>=re)return!1;let _=Y.findIndex(Q=>!Re.has(Q.sessionId));if(_===-1)return!1;let[E]=Y.splice(_,1),L=`${E.sessionId}::${E.testId||E.testName}`;Re.add(E.sessionId),Pe.set(L,E);let B=(async()=>{let Q=await Ce(E);if(Q.outcome==="passed")ne++;else if(Q.outcome==="failed"&&(N++,T==="stopQueue"&&!G)){G=!0;let F=Y.length;if(F>0){let ye=F===1?"1 pending test":`${F} pending tests`;i.addLog("system","warning",`Test failure detected - ${ye} removed from queue.`);for(let X of Y)Ne(X.sessionId);Y.splice(0)}for(let[ye,X]of Pe.entries())if(ye!==L)try{await q.forceStopTestExecution(X.sessionId||X.testId)}catch{}}})().finally(()=>{Re.delete(E.sessionId),Pe.delete(L),se.delete(B)});return se.add(B),!0};try{for(;Y.length>0||se.size>0;){for(;ze(););if(se.size===0)break;await Promise.race(se)}se.size>0&&await Promise.allSettled(Array.from(se))}finally{await xe.cleanupSession()}if(s&&b)try{await ie(y,S)}catch{}return N>0?{success:!1,passed:ne,failed:N,total:U.length}:{success:!0,passed:ne,failed:N,total:U.length}}function Us(r,e){if(typeof r!="string")return r?.name||"";let[t]=e;return typeof t=="string"?t:t?.type||""}var Ds=process.emitWarning.bind(process);process.emitWarning=(r,...e)=>{if(Us(r,e)!=="ExperimentalWarning")return Ds(r,...e)};var ee=new wr,Ls="2.0.0";ee.name("agenqa").description("Agenqa CLI for cloud projects").version(Ls);process.on("SIGINT",()=>{console.log(`
43
+ Interrupted. Exiting.`),process.exit(130)});function sn(r,e,t){let n=Mt(t||Me(r,e));if(!n)throw new Error("API base URL is not configured in this build.");return n}function tr(r,e){if(r===void 0)return null;let t=String(r).trim().toLowerCase();if(["y","yes"].includes(t))return!0;if(["n","no"].includes(t))return!1;console.error(`Invalid value for ${e}. Use "yes" or "no".`),process.exit(1)}function rr(r){console.log(`Synced project ${r.project?.name||r.project?.id}`),console.log(`Files: ${r.files.downloaded} downloaded, ${r.files.skipped} skipped, ${r.files.removed} removed.`),r.cache&&(r.cacheDisabledGlobally?console.log("Cache disabled globally for this project."):console.log("Cache synced."))}function Ns(r){return typeof r?.cacheCloudEnabled=="boolean"?r.cacheCloudEnabled:!!r?.cacheEnabled}function Rs(r){return typeof r?.cacheLocalEnabled=="boolean"?r.cacheLocalEnabled:!!r?.cacheEnabled}async function Je(r){throw jr(r)&&(console.error("Cloud key is invalid or expired. Please re-import the project."),process.exit(2)),r}ee.command("import").description("Import a cloud project using project id and secret key").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-s, --key-secret <secret>","Cloud key secret").option("--trust <yes|no>","Skip trust prompt by answering yes or no").option("--cache-local <yes|no>","Skip local cache prompt by answering yes or no").option("--cache-cloud <yes|no>","Skip cloud cache prompt by answering yes or no").action(async r=>{let e=await he(),t=r.project.trim(),n=r.keySecret.trim(),s=sn(e,t),o=tr(r.trust,"--trust"),i=tr(r.cacheLocal,"--cache-local"),a=tr(r.cacheCloud,"--cache-cloud");(o??await Ee("Importing projects from unknown sources can expose you to risks. Do you confirm you trust this project? (yes/no)",{required:!0}))!==!0&&(console.error("Import cancelled."),process.exit(1));let u=(i??await Ee("Enable local cache on this machine? (required for cloud cache) (yes/no)"))===!0,d=!1;u?d=(a??await Ee("Enable cloud cache? (warning: reuses collaborators' cached steps; only enable if you trust them to avoid security risks) (yes/no)"))===!0:a===!0&&(console.error("Cloud cache requires local cache. Re-run with --cache-local yes or omit --cache-cloud."),process.exit(1));let f={keyToken:n,cacheCloudEnabled:d,cacheLocalEnabled:u,baseUrl:s,importedAt:new Date().toISOString()};e.projects[t]=f,await qe(e),await nt(t);try{let h=await it(e,t);rr(h),console.log("Import completed.")}catch(h){await Je(h),console.error(h.message||String(h)),process.exit(1)}});ee.command("list").description("List stored projects").action(async()=>{let r=await he(),e=Object.entries(r.projects||{});if(e.length===0){console.log("No projects imported.");return}let t=[];for(let[a,l]of e){let c=null;try{c=await I(nn.default.join(fe(a),"project.json"),null)}catch(h){console.error(`Warning: failed to read metadata for project ${a}: ${h.message||h}`)}let u=Ns(l)?"enabled":"disabled",d=l.importedAt||"import time unknown",f=Me(r,a)||"base URL not set";t.push([a,c?.name||"",f,u,d])}let n=["Project ID","Name","Base URL","Cache","Imported At"],s=n.map((a,l)=>Math.max(a.length,...t.map(c=>(c[l]||"").length))),o=s.map(a=>"-".repeat(a)).join("-+-"),i=a=>a.map((l,c)=>String(l||"").padEnd(s[c]," ")).join(" | ");console.log("Stored projects:"),console.log(i(n)),console.log(o),t.forEach(a=>console.log(i(a)))});ee.command("sync").description("Sync a cloud project locally").requiredOption("-p, --project <projectId>","Cloud project id").action(async r=>{let e=await he(),t=r.project.trim();try{let n=await it(e,t);rr(n)}catch(n){await Je(n),console.error(n.message||String(n)),process.exit(1)}});ee.command("remove-project").description("Remove an imported project and local data").requiredOption("-p, --project <projectId>","Cloud project id").action(async r=>{let e=r.project.trim(),t=await he();t.projects?.[e]||(console.error(`Project ${e} is not imported. Run agenqa import first.`),process.exit(1)),await Ee(`Remove local data for project ${e}? This does not delete the cloud project. (yes/no)`,{required:!0})||(console.error("Remove cancelled."),process.exit(1)),delete t.projects[e],await qe(t),await qt(e),console.log(`Removed local data for project ${e}.`)});ee.command("cache").description("Enable or disable cloud cache for a project").requiredOption("-p, --project <projectId>","Project id").option("--enable","Enable cache").option("--disable","Disable cache").action(async r=>{let e=r.project.trim(),t=r.enable===!0?!0:r.disable===!0?!1:null;t===null&&(console.error("Choose either --enable or --disable."),process.exit(1));let n=await he(),s=n.projects?.[e];s||(console.error(`Project ${e} is not imported. Run "agenqa import" first.`),process.exit(1)),t&&(console.log("Warning: cache reuses generated steps from collaborators. Enable only if you trust the project sources."),await Ee("Do you want to enable cache? (yes/no)",{required:!0})||(console.error("Cache enable cancelled."),process.exit(1))),s.cacheCloudEnabled=t,s.cacheEnabled!==void 0&&(s.cacheEnabled=t),await qe(n),console.log(`Cache ${t?"enabled":"disabled"} for project ${e}.`)});ee.command("reset-cache").description("Clear local cache (cloud cache downloads and local-only cache)").requiredOption("-p, --project <projectId>","Project id").action(async r=>{let e=r.project.trim();(await he()).projects?.[e]||(console.error(`Project ${e} is not imported. Run "agenqa import" first.`),process.exit(1)),await Ee(`Reset local cache for project ${e}? (yes/no)`,{required:!0})||(console.error("Reset cache cancelled."),process.exit(1)),await nt(e),console.log(`Local cache cleared for project ${e}.`)});async function nr({projectId:r,targetType:e,targetId:t,cacheOverride:n,silent:s}){let o=await he(),i=o.projects?.[r];if(!i)throw new Error(`Project ${r} is not imported. Run "agenqa import" first.`);let a=sn(o,r,i.baseUrl),l=await it(o,r,{cacheOverride:n}),c=!!l?.cacheDisabledGlobally;if(l?.project?.readOnly)throw new Error("This cloud project is read-only on your current plan. Convert to local-only to run tests.");s||rr(l);let u=c?!1:n!==null?n:Rs(i),d=st(i,r),f=await rn({projectId:r,targetType:e,targetId:t,cacheEnabled:u,silent:s,apiConfig:{runTestUrl:`${a}/cloud/cli/run-test`,headers:d}});s||console.log(`Summary: ${f.passed}/${f.total} passed, ${f.failed} failed.`),f.success||process.exit(1)}function sr(r){return r.cache===void 0?null:!!r.cache}ee.command("run-project").description("Execute a cloud project").requiredOption("-p, --project <projectId>","Cloud project id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async r=>{try{await nr({projectId:r.project.trim(),targetType:"project",targetId:null,cacheOverride:sr(r),silent:!!r.silent})}catch(e){await Je(e),console.error(e.message||String(e)),process.exit(1)}});ee.command("run-folder").description("Execute a cloud test folder").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-f, --folder <folderId>","Cloud test folder id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async r=>{try{await nr({projectId:r.project.trim(),targetType:"folder",targetId:r.folder.trim(),cacheOverride:sr(r),silent:!!r.silent})}catch(e){await Je(e),console.error(e.message||String(e)),process.exit(1)}});ee.command("run-test").description("Execute a single cloud test case").requiredOption("-p, --project <projectId>","Cloud project id").requiredOption("-t, --test <testId>","Cloud test case id").option("--cache","Enable cache").option("--no-cache","Disable cache").option("--silent","Suppress non-error logs").action(async r=>{try{await nr({projectId:r.project.trim(),targetType:"test",targetId:r.test.trim(),cacheOverride:sr(r),silent:!!r.silent})}catch(e){await Je(e),console.error(e.message||String(e)),process.exit(1)}});ee.parseAsync(process.argv);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agenqa",
3
- "version": "1.1.8",
3
+ "version": "2.0.0",
4
4
  "description": "AgenQA CLI for running cloud projects",
5
5
  "type": "module",
6
6
  "bin": {