@decipher-sdk/decipher-qa 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +22 -28
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
"use strict";var fi=Object.create;var Ue=Object.defineProperty;var gi=Object.getOwnPropertyDescriptor;var yi=Object.getOwnPropertyNames;var bi=Object.getPrototypeOf,wi=Object.prototype.hasOwnProperty;var b=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var ki=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of yi(e))!wi.call(n,s)&&s!==t&&Ue(n,s,{get:()=>e[s],enumerable:!(i=gi(e,s))||i.enumerable});return n};var
|
|
2
|
+
"use strict";var fi=Object.create;var Ue=Object.defineProperty;var gi=Object.getOwnPropertyDescriptor;var yi=Object.getOwnPropertyNames;var bi=Object.getPrototypeOf,wi=Object.prototype.hasOwnProperty;var b=(n,e)=>()=>(e||n((e={exports:{}}).exports,e),e.exports);var ki=(n,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of yi(e))!wi.call(n,s)&&s!==t&&Ue(n,s,{get:()=>e[s],enumerable:!(i=gi(e,s))||i.enumerable});return n};var C=(n,e,t)=>(t=n!=null?fi(bi(n)):{},ki(e||!n||!n.__esModule?Ue(t,"default",{value:n,enumerable:!0}):t,n));var B=b(oe=>{"use strict";var J=class extends Error{constructor(e,t,i){super(i),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=t,this.exitCode=e,this.nestedError=void 0}},re=class extends J{constructor(e){super(1,"commander.invalidArgument",e),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};oe.CommanderError=J;oe.InvalidArgumentError=re});var z=b(le=>{"use strict";var{InvalidArgumentError:Ci}=B(),ae=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,i)=>{if(!this.argChoices.includes(t))throw new Ci(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(t,i):t},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function vi(n){let e=n.name()+(n.variadic===!0?"...":"");return n.required?"<"+e+">":"["+e+"]"}le.Argument=ae;le.humanReadableArgName=vi});var de=b(Le=>{"use strict";var{humanReadableArgName:_i}=z(),ce=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),i=e._getHelpCommand();return i&&!i._hidden&&t.push(i),this.sortSubcommands&&t.sort((s,r)=>s.name().localeCompare(r.name())),t}compareOptions(e,t){let i=s=>s.short?s.short.replace(/^-/,""):s.long.replace(/^--/,"");return i(e).localeCompare(i(t))}visibleOptions(e){let t=e.options.filter(s=>!s.hidden),i=e._getHelpOption();if(i&&!i.hidden){let s=i.short&&e._findOption(i.short),r=i.long&&e._findOption(i.long);!s&&!r?t.push(i):i.long&&!r?t.push(e.createOption(i.long,i.description)):i.short&&!s&&t.push(e.createOption(i.short,i.description))}return this.sortOptions&&t.sort(this.compareOptions),t}visibleGlobalOptions(e){if(!this.showGlobalOptions)return[];let t=[];for(let i=e.parent;i;i=i.parent){let s=i.options.filter(r=>!r.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(i=>_i(i)).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((i,s)=>Math.max(i,t.subcommandTerm(s).length),0)}longestOptionTermLength(e,t){return t.visibleOptions(e).reduce((i,s)=>Math.max(i,t.optionTerm(s).length),0)}longestGlobalOptionTermLength(e,t){return t.visibleGlobalOptions(e).reduce((i,s)=>Math.max(i,t.optionTerm(s).length),0)}longestArgumentTermLength(e,t){return t.visibleArguments(e).reduce((i,s)=>Math.max(i,t.argumentTerm(s).length),0)}commandUsage(e){let t=e._name;e._aliases[0]&&(t=t+"|"+e._aliases[0]);let i="";for(let s=e.parent;s;s=s.parent)i=s.name()+" "+i;return i+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(i=>JSON.stringify(i)).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(i=>JSON.stringify(i)).join(", ")}`),e.defaultValue!==void 0&&t.push(`default: ${e.defaultValueDescription||JSON.stringify(e.defaultValue)}`),t.length>0){let i=`(${t.join(", ")})`;return e.description?`${e.description} ${i}`:i}return e.description}formatHelp(e,t){let i=t.padWidth(e,t),s=t.helpWidth||80,r=2,o=2;function a(g,T){if(T){let se=`${g.padEnd(i+o)}${T}`;return t.wrap(se,s-r,i+o)}return g}function l(g){return g.join(`
|
|
3
3
|
`).replace(/^/gm," ".repeat(r))}let c=[`Usage: ${t.commandUsage(e)}`,""],h=t.commandDescription(e);h.length>0&&(c=c.concat([t.wrap(h,s,0),""]));let p=t.visibleArguments(e).map(g=>a(t.argumentTerm(g),t.argumentDescription(g)));p.length>0&&(c=c.concat(["Arguments:",l(p),""]));let k=t.visibleOptions(e).map(g=>a(t.optionTerm(g),t.optionDescription(g)));if(k.length>0&&(c=c.concat(["Options:",l(k),""])),this.showGlobalOptions){let g=t.visibleGlobalOptions(e).map(T=>a(t.optionTerm(T),t.optionDescription(T)));g.length>0&&(c=c.concat(["Global Options:",l(g),""]))}let U=t.visibleCommands(e).map(g=>a(t.subcommandTerm(g),t.subcommandDescription(g)));return U.length>0&&(c=c.concat(["Commands:",l(U),""])),c.join(`
|
|
4
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,i,s=40){let r=" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF",o=new RegExp(`[\\n][${r}]+`);if(e.match(o))return e;let a=t-i;if(a<s)return e;let l=e.slice(0,i),c=e.slice(i).replace(`\r
|
|
5
5
|
`,`
|
|
@@ -20,12 +20,12 @@ Expecting one of '${i.join("', '")}'`);return this._lifeCycleHooks[e]?this._life
|
|
|
20
20
|
`),this.outputHelp({error:!0}));let i=t||{},s=i.exitCode||1,r=i.code||"commander.error";this._exit(s,r,e)}_parseOptionsEnv(){this.options.forEach(e=>{if(e.envVar&&e.envVar in f.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()}`,f.env[e.envVar]):this.emit(`optionEnv:${e.name()}`))}})}_parseOptionsImplied(){let e=new Ri(this.options),t=i=>this.getOptionValue(i)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(i));this.options.filter(i=>i.implied!==void 0&&t(i.attributeName())&&e.valueFromOption(this.getOptionValue(i.attributeName()),i)).forEach(i=>{Object.keys(i.implied).filter(s=>!t(s)).forEach(s=>{this.setOptionValueWithSource(s,i.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 i=o=>{let a=o.attributeName(),l=this.getOptionValue(a),c=this.options.find(p=>p.negate&&a===p.attributeName()),h=this.options.find(p=>!p.negate&&a===p.attributeName());return c&&(c.presetArg===void 0&&l===!1||c.presetArg!==void 0&&l===c.presetArg)?c:h||o},s=o=>{let a=i(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},r=`error: ${s(e)} cannot be used with ${s(t)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(e){if(this._allowUnknownOption)return;let t="";if(e.startsWith("--")&&this._showSuggestionAfterError){let s=[],r=this;do{let o=r.createHelp().visibleOptions(r).filter(a=>a.long).map(a=>a.long);s=s.concat(o),r=r.parent}while(r&&!r._enablePositionalOptions);t=Fe(e,s)}let i=`error: unknown option '${e}'${t}`;this.error(i,{code:"commander.unknownOption"})}_excessArguments(e){if(this._allowExcessArguments)return;let t=this.registeredArguments.length,i=t===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${t} argument${i} but got ${e.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let e=this.args[0],t="";if(this._showSuggestionAfterError){let s=[];this.createHelp().visibleCommands(this).forEach(r=>{s.push(r.name()),r.alias()&&s.push(r.alias())}),t=Fe(e,s)}let i=`error: unknown command '${e}'${t}`;this.error(i,{code:"commander.unknownCommand"})}version(e,t,i){if(e===void 0)return this._version;this._version=e,t=t||"-V, --version",i=i||"output the version number";let s=this.createOption(t,i);return this._versionOptionName=s.attributeName(),this._registerOption(s),this.on("option:"+s.name(),()=>{this._outputConfiguration.writeOut(`${e}
|
|
21
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 i=this.parent?._findCommand(e);if(i){let s=[i.name()].concat(i.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(i=>Ti(i));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=I.basename(e,I.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},i;return t.error?i=s=>this._outputConfiguration.writeErr(s):i=s=>this._outputConfiguration.writeOut(s),t.write=e.write||i,t.command=this,t}outputHelp(e){let t;typeof e=="function"&&(t=e,e=void 0);let i=this._getHelpContext(e);this._getCommandAndAncestors().reverse().forEach(r=>r.emit("beforeAllHelp",i)),this.emit("beforeHelp",i);let s=this.helpInformation(i);if(t&&(s=t(s),typeof s!="string"&&!Buffer.isBuffer(s)))throw new Error("outputHelp callback must return a string or a Buffer");i.write(s),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",i),this._getCommandAndAncestors().forEach(r=>r.emit("afterAllHelp",i))}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=f.exitCode||0;t===0&&e&&typeof e!="function"&&e.error&&(t=1),this._exit(t,"commander.help","(outputHelp)")}addHelpText(e,t){let i=["beforeAll","before","after","afterAll"];if(!i.includes(e))throw new Error(`Unexpected value for position to addHelpText.
|
|
22
22
|
Expecting one of '${i.join("', '")}'`);let s=`${e}Help`;return this.on(s,r=>{let o;typeof t=="function"?o=t({error:r.error,command:r.command}):o=t,o&&r.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 je(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,i="127.0.0.1",s="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?s=r[3]:i=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],i=r[3],s=r[4]),t&&s!=="0"?`${t}=${i}:${parseInt(s)+1}`:e})}He.Command=be});var ze=b(O=>{"use strict";var{Argument:Ge}=z(),{Command:we}=Be(),{CommanderError:Pi,InvalidArgumentError:We}=B(),{Help:Di}=de(),{Option:Je}=me();O.program=new we;O.createCommand=n=>new we(n);O.createOption=(n,e)=>new Je(n,e);O.createArgument=(n,e)=>new Ge(n,e);O.Command=we;O.Option=Je;O.Argument=Ge;O.Help=Di;O.CommanderError=Pi;O.InvalidArgumentError=We;O.InvalidOptionArgumentError=We});var st=b((Mn,nt)=>{"use strict";nt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var ke=b((Vn,ot)=>{"use strict";var G=st(),rt={};for(let n of Object.keys(G))rt[G[n]]=n;var d={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};ot.exports=d;for(let n of Object.keys(d)){if(!("channels"in d[n]))throw new Error("missing channels property: "+n);if(!("labels"in d[n]))throw new Error("missing channel labels property: "+n);if(d[n].labels.length!==d[n].channels)throw new Error("channel and label counts mismatch: "+n);let{channels:e,labels:t}=d[n];delete d[n].channels,delete d[n].labels,Object.defineProperty(d[n],"channels",{value:e}),Object.defineProperty(d[n],"labels",{value:t})}d.rgb.hsl=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(e,t,i),r=Math.max(e,t,i),o=r-s,a,l;r===s?a=0:e===r?a=(t-i)/o:t===r?a=2+(i-e)/o:i===r&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(s+r)/2;return r===s?l=0:c<=.5?l=o/(r+s):l=o/(2-r-s),[a,l*100,c*100]};d.rgb.hsv=function(n){let e,t,i,s,r,o=n[0]/255,a=n[1]/255,l=n[2]/255,c=Math.max(o,a,l),h=c-Math.min(o,a,l),p=function(k){return(c-k)/6/h+1/2};return h===0?(s=0,r=0):(r=h/c,e=p(o),t=p(a),i=p(l),o===c?s=i-t:a===c?s=1/3+e-i:l===c&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,r*100,c*100]};d.rgb.hwb=function(n){let e=n[0],t=n[1],i=n[2],s=d.rgb.hsl(n)[0],r=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,r*100,i*100]};d.rgb.cmyk=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(1-e,1-t,1-i),r=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[r*100,o*100,a*100,s*100]};function Ui(n,e){return(n[0]-e[0])**2+(n[1]-e[1])**2+(n[2]-e[2])**2}d.rgb.keyword=function(n){let e=rt[n];if(e)return e;let t=1/0,i;for(let s of Object.keys(G)){let r=G[s],o=Ui(n,r);o<t&&(t=o,i=s)}return i};d.keyword.rgb=function(n){return G[n]};d.rgb.xyz=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,r=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,r*100,o*100]};d.rgb.lab=function(n){let e=d.rgb.xyz(n),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let r=116*i-16,o=500*(t-i),a=200*(i-s);return[r,o,a]};d.hsl.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s,r,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let c=0;c<3;c++)r=e+1/3*-(c-1),r<0&&r++,r>1&&r--,6*r<1?o=a+(s-a)*6*r:2*r<1?o=s:3*r<2?o=a+(s-a)*(2/3-r)*6:o=a,l[c]=o*255;return l};d.hsl.hsv=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=t,r=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=r<=1?r:2-r;let o=(i+t)/2,a=i===0?2*s/(r+s):2*t/(i+t);return[e,a*100,o*100]};d.hsv.rgb=function(n){let e=n[0]/60,t=n[1]/100,i=n[2]/100,s=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*r),l=255*i*(1-t*(1-r));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};d.hsv.hsl=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=Math.max(i,.01),r,o;o=(2-t)*i;let a=(2-t)*s;return r=t*s,r/=a<=1?a:2-a,r=r||0,o/=2,[e,r*100,o*100]};d.hwb.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s=t+i,r;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;r=6*e-o,(o&1)!==0&&(r=1-r);let l=t+r*(a-t),c,h,p;switch(o){default:case 6:case 0:c=a,h=l,p=t;break;case 1:c=l,h=a,p=t;break;case 2:c=t,h=a,p=l;break;case 3:c=t,h=l,p=a;break;case 4:c=l,h=t,p=a;break;case 5:c=a,h=t,p=l;break}return[c*255,h*255,p*255]};d.cmyk.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s=n[3]/100,r=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[r*255,o*255,a*255]};d.xyz.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s,r,o;return s=e*3.2406+t*-1.5372+i*-.4986,r=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),r=Math.min(Math.max(0,r),1),o=Math.min(Math.max(0,o),1),[s*255,r*255,o*255]};d.xyz.lab=function(n){let e=n[0],t=n[1],i=n[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,r=500*(e-t),o=200*(t-i);return[s,r,o]};d.lab.xyz=function(n){let e=n[0],t=n[1],i=n[2],s,r,o;r=(e+16)/116,s=t/500+r,o=r-i/200;let a=r**3,l=s**3,c=o**3;return r=a>.008856?a:(r-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,s*=95.047,r*=100,o*=108.883,[s,r,o]};d.lab.lch=function(n){let e=n[0],t=n[1],i=n[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};d.lch.lab=function(n){let e=n[0],t=n[1],s=n[2]/360*2*Math.PI,r=t*Math.cos(s),o=t*Math.sin(s);return[e,r,o]};d.rgb.ansi16=function(n,e=null){let[t,i,s]=n,r=e===null?d.rgb.hsv(n)[2]:e;if(r=Math.round(r/50),r===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return r===2&&(o+=60),o};d.hsv.ansi16=function(n){return d.rgb.ansi16(d.hsv.rgb(n),n[2])};d.rgb.ansi256=function(n){let e=n[0],t=n[1],i=n[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};d.ansi16.rgb=function(n){let e=n%10;if(e===0||e===7)return n>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(n>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,r=(e>>2&1)*t*255;return[i,s,r]};d.ansi256.rgb=function(n){if(n>=232){let r=(n-232)*10+8;return[r,r,r]}n-=16;let e,t=Math.floor(n/36)/5*255,i=Math.floor((e=n%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};d.rgb.hex=function(n){let t=(((Math.round(n[0])&255)<<16)+((Math.round(n[1])&255)<<8)+(Math.round(n[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};d.hex.rgb=function(n){let e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,r=i>>8&255,o=i&255;return[s,r,o]};d.rgb.hcg=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.max(Math.max(e,t),i),r=Math.min(Math.min(e,t),i),o=s-r,a,l;return o<1?a=r/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};d.hsl.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[n[0],i*100,s*100]};d.hsv.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[n[0],i*100,s*100]};d.hcg.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],r=e%1*6,o=r%1,a=1-o,l=0;switch(Math.floor(r)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};d.hcg.hsv=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[n[0],s*100,i*100]};d.hcg.hsl=function(n){let e=n[1]/100,i=n[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[n[0],s*100,i*100]};d.hcg.hwb=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e);return[n[0],(i-e)*100,(1-i)*100]};d.hwb.hcg=function(n){let e=n[1]/100,i=1-n[2]/100,s=i-e,r=0;return s<1&&(r=(i-s)/(1-s)),[n[0],s*100,r*100]};d.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]};d.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]};d.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]};d.gray.hsl=function(n){return[0,0,n[0]]};d.gray.hsv=d.gray.hsl;d.gray.hwb=function(n){return[0,100,n[0]]};d.gray.cmyk=function(n){return[0,0,0,n[0]]};d.gray.lab=function(n){return[n[0],0,0]};d.gray.hex=function(n){let e=Math.round(n[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};d.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}});var lt=b((Fn,at)=>{"use strict";var Y=ke();function Li(){let n={},e=Object.keys(Y);for(let t=e.length,i=0;i<t;i++)n[e[i]]={distance:-1,parent:null};return n}function $i(n){let e=Li(),t=[n];for(e[n].distance=0;t.length;){let i=t.pop(),s=Object.keys(Y[i]);for(let r=s.length,o=0;o<r;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Mi(n,e){return function(t){return e(n(t))}}function Vi(n,e){let t=[e[n].parent,n],i=Y[e[n].parent][n],s=e[n].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Mi(Y[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}at.exports=function(n){let e=$i(n),t={},i=Object.keys(e);for(let s=i.length,r=0;r<s;r++){let o=i[r];e[o].parent!==null&&(t[o]=Vi(o,e))}return t}});var dt=b((jn,ct)=>{"use strict";var ve=ke(),Fi=lt(),M={},ji=Object.keys(ve);function Hi(n){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),n(t))};return"conversion"in n&&(e.conversion=n.conversion),e}function Bi(n){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=n(t);if(typeof s=="object")for(let r=s.length,o=0;o<r;o++)s[o]=Math.round(s[o]);return s};return"conversion"in n&&(e.conversion=n.conversion),e}ji.forEach(n=>{M[n]={},Object.defineProperty(M[n],"channels",{value:ve[n].channels}),Object.defineProperty(M[n],"labels",{value:ve[n].labels});let e=Fi(n);Object.keys(e).forEach(i=>{let s=e[i];M[n][i]=Bi(s),M[n][i].raw=Hi(s)})});ct.exports=M});var gt=b((Hn,ft)=>{"use strict";var ht=(n,e)=>(...t)=>`\x1B[${n(...t)+e}m`,ut=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};5;${i}m`},pt=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},Q=n=>n,mt=(n,e,t)=>[n,e,t],V=(n,e,t)=>{Object.defineProperty(n,e,{get:()=>{let i=t();return Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},Ce,F=(n,e,t,i)=>{Ce===void 0&&(Ce=dt());let s=i?10:0,r={};for(let[o,a]of Object.entries(Ce)){let l=o==="ansi16"?"ansi":o;o===e?r[l]=n(t,s):typeof a=="object"&&(r[l]=n(a[e],s))}return r};function Gi(){let n=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[s,r]of Object.entries(i))e[s]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},i[s]=e[s],n.set(r[0],r[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:n,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",V(e.color,"ansi",()=>F(ht,"ansi16",Q,!1)),V(e.color,"ansi256",()=>F(ut,"ansi256",Q,!1)),V(e.color,"ansi16m",()=>F(pt,"rgb",mt,!1)),V(e.bgColor,"ansi",()=>F(ht,"ansi16",Q,!0)),V(e.bgColor,"ansi256",()=>F(ut,"ansi256",Q,!0)),V(e.bgColor,"ansi16m",()=>F(pt,"rgb",mt,!0)),e}Object.defineProperty(ft,"exports",{enumerable:!0,get:Gi})});var bt=b((Bn,yt)=>{"use strict";yt.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",i=e.indexOf(t+n),s=e.indexOf("--");return i!==-1&&(s===-1||i<s)}});var vt=b((Gn,kt)=>{"use strict";var Wi=require("os"),wt=require("tty"),S=bt(),{env:y}=process,N;S("no-color")||S("no-colors")||S("color=false")||S("color=never")?N=0:(S("color")||S("colors")||S("color=true")||S("color=always"))&&(N=1);"FORCE_COLOR"in y&&(y.FORCE_COLOR==="true"?N=1:y.FORCE_COLOR==="false"?N=0:N=y.FORCE_COLOR.length===0?1:Math.min(parseInt(y.FORCE_COLOR,10),3));function _e(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Ae(n,e){if(N===0)return 0;if(S("color=16m")||S("color=full")||S("color=truecolor"))return 3;if(S("color=256"))return 2;if(n&&!e&&N===void 0)return 0;let t=N||0;if(y.TERM==="dumb")return t;if(process.platform==="win32"){let i=Wi.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in y)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(i=>i in y)||y.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in y)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(y.TEAMCITY_VERSION)?1:0;if(y.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in y){let i=parseInt((y.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(y.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(y.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(y.TERM)||"COLORTERM"in y?1:t}function Ji(n){let e=Ae(n,n&&n.isTTY);return _e(e)}kt.exports={supportsColor:Ji,stdout:_e(Ae(!0,wt.isatty(1))),stderr:_e(Ae(!0,wt.isatty(2)))}});var _t=b((Wn,Ct)=>{"use strict";var zi=(n,e,t)=>{let i=n.indexOf(e);if(i===-1)return n;let s=e.length,r=0,o="";do o+=n.substr(r,i-r)+e+t,r=i+s,i=n.indexOf(e,r);while(i!==-1);return o+=n.substr(r),o},Yi=(n,e,t,i)=>{let s=0,r="";do{let o=n[i-1]==="\r";r+=n.substr(s,(o?i-1:i)-s)+e+(o?`\r
|
|
23
|
+
`)}),this}_outputHelpIfRequested(e){let t=this._getHelpOption();t&&e.find(s=>t.is(s))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function je(n){return n.map(e=>{if(!e.startsWith("--inspect"))return e;let t,i="127.0.0.1",s="9229",r;return(r=e.match(/^(--inspect(-brk)?)$/))!==null?t=r[1]:(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(t=r[1],/^\d+$/.test(r[3])?s=r[3]:i=r[3]):(r=e.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(t=r[1],i=r[3],s=r[4]),t&&s!=="0"?`${t}=${i}:${parseInt(s)+1}`:e})}He.Command=be});var ze=b(O=>{"use strict";var{Argument:Ge}=z(),{Command:we}=Be(),{CommanderError:Pi,InvalidArgumentError:We}=B(),{Help:Di}=de(),{Option:Je}=me();O.program=new we;O.createCommand=n=>new we(n);O.createOption=(n,e)=>new Je(n,e);O.createArgument=(n,e)=>new Ge(n,e);O.Command=we;O.Option=Je;O.Argument=Ge;O.Help=Di;O.CommanderError=Pi;O.InvalidArgumentError=We;O.InvalidOptionArgumentError=We});var st=b((Mn,nt)=>{"use strict";nt.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var ke=b((Vn,ot)=>{"use strict";var G=st(),rt={};for(let n of Object.keys(G))rt[G[n]]=n;var d={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};ot.exports=d;for(let n of Object.keys(d)){if(!("channels"in d[n]))throw new Error("missing channels property: "+n);if(!("labels"in d[n]))throw new Error("missing channel labels property: "+n);if(d[n].labels.length!==d[n].channels)throw new Error("channel and label counts mismatch: "+n);let{channels:e,labels:t}=d[n];delete d[n].channels,delete d[n].labels,Object.defineProperty(d[n],"channels",{value:e}),Object.defineProperty(d[n],"labels",{value:t})}d.rgb.hsl=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(e,t,i),r=Math.max(e,t,i),o=r-s,a,l;r===s?a=0:e===r?a=(t-i)/o:t===r?a=2+(i-e)/o:i===r&&(a=4+(e-t)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(s+r)/2;return r===s?l=0:c<=.5?l=o/(r+s):l=o/(2-r-s),[a,l*100,c*100]};d.rgb.hsv=function(n){let e,t,i,s,r,o=n[0]/255,a=n[1]/255,l=n[2]/255,c=Math.max(o,a,l),h=c-Math.min(o,a,l),p=function(k){return(c-k)/6/h+1/2};return h===0?(s=0,r=0):(r=h/c,e=p(o),t=p(a),i=p(l),o===c?s=i-t:a===c?s=1/3+e-i:l===c&&(s=2/3+t-e),s<0?s+=1:s>1&&(s-=1)),[s*360,r*100,c*100]};d.rgb.hwb=function(n){let e=n[0],t=n[1],i=n[2],s=d.rgb.hsl(n)[0],r=1/255*Math.min(e,Math.min(t,i));return i=1-1/255*Math.max(e,Math.max(t,i)),[s,r*100,i*100]};d.rgb.cmyk=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.min(1-e,1-t,1-i),r=(1-e-s)/(1-s)||0,o=(1-t-s)/(1-s)||0,a=(1-i-s)/(1-s)||0;return[r*100,o*100,a*100,s*100]};function Ui(n,e){return(n[0]-e[0])**2+(n[1]-e[1])**2+(n[2]-e[2])**2}d.rgb.keyword=function(n){let e=rt[n];if(e)return e;let t=1/0,i;for(let s of Object.keys(G)){let r=G[s],o=Ui(n,r);o<t&&(t=o,i=s)}return i};d.keyword.rgb=function(n){return G[n]};d.rgb.xyz=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255;e=e>.04045?((e+.055)/1.055)**2.4:e/12.92,t=t>.04045?((t+.055)/1.055)**2.4:t/12.92,i=i>.04045?((i+.055)/1.055)**2.4:i/12.92;let s=e*.4124+t*.3576+i*.1805,r=e*.2126+t*.7152+i*.0722,o=e*.0193+t*.1192+i*.9505;return[s*100,r*100,o*100]};d.rgb.lab=function(n){let e=d.rgb.xyz(n),t=e[0],i=e[1],s=e[2];t/=95.047,i/=100,s/=108.883,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116,s=s>.008856?s**(1/3):7.787*s+16/116;let r=116*i-16,o=500*(t-i),a=200*(i-s);return[r,o,a]};d.hsl.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s,r,o;if(t===0)return o=i*255,[o,o,o];i<.5?s=i*(1+t):s=i+t-i*t;let a=2*i-s,l=[0,0,0];for(let c=0;c<3;c++)r=e+1/3*-(c-1),r<0&&r++,r>1&&r--,6*r<1?o=a+(s-a)*6*r:2*r<1?o=s:3*r<2?o=a+(s-a)*(2/3-r)*6:o=a,l[c]=o*255;return l};d.hsl.hsv=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=t,r=Math.max(i,.01);i*=2,t*=i<=1?i:2-i,s*=r<=1?r:2-r;let o=(i+t)/2,a=i===0?2*s/(r+s):2*t/(i+t);return[e,a*100,o*100]};d.hsv.rgb=function(n){let e=n[0]/60,t=n[1]/100,i=n[2]/100,s=Math.floor(e)%6,r=e-Math.floor(e),o=255*i*(1-t),a=255*i*(1-t*r),l=255*i*(1-t*(1-r));switch(i*=255,s){case 0:return[i,l,o];case 1:return[a,i,o];case 2:return[o,i,l];case 3:return[o,a,i];case 4:return[l,o,i];case 5:return[i,o,a]}};d.hsv.hsl=function(n){let e=n[0],t=n[1]/100,i=n[2]/100,s=Math.max(i,.01),r,o;o=(2-t)*i;let a=(2-t)*s;return r=t*s,r/=a<=1?a:2-a,r=r||0,o/=2,[e,r*100,o*100]};d.hwb.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100,s=t+i,r;s>1&&(t/=s,i/=s);let o=Math.floor(6*e),a=1-i;r=6*e-o,(o&1)!==0&&(r=1-r);let l=t+r*(a-t),c,h,p;switch(o){default:case 6:case 0:c=a,h=l,p=t;break;case 1:c=l,h=a,p=t;break;case 2:c=t,h=a,p=l;break;case 3:c=t,h=l,p=a;break;case 4:c=l,h=t,p=a;break;case 5:c=a,h=t,p=l;break}return[c*255,h*255,p*255]};d.cmyk.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s=n[3]/100,r=1-Math.min(1,e*(1-s)+s),o=1-Math.min(1,t*(1-s)+s),a=1-Math.min(1,i*(1-s)+s);return[r*255,o*255,a*255]};d.xyz.rgb=function(n){let e=n[0]/100,t=n[1]/100,i=n[2]/100,s,r,o;return s=e*3.2406+t*-1.5372+i*-.4986,r=e*-.9689+t*1.8758+i*.0415,o=e*.0557+t*-.204+i*1.057,s=s>.0031308?1.055*s**(1/2.4)-.055:s*12.92,r=r>.0031308?1.055*r**(1/2.4)-.055:r*12.92,o=o>.0031308?1.055*o**(1/2.4)-.055:o*12.92,s=Math.min(Math.max(0,s),1),r=Math.min(Math.max(0,r),1),o=Math.min(Math.max(0,o),1),[s*255,r*255,o*255]};d.xyz.lab=function(n){let e=n[0],t=n[1],i=n[2];e/=95.047,t/=100,i/=108.883,e=e>.008856?e**(1/3):7.787*e+16/116,t=t>.008856?t**(1/3):7.787*t+16/116,i=i>.008856?i**(1/3):7.787*i+16/116;let s=116*t-16,r=500*(e-t),o=200*(t-i);return[s,r,o]};d.lab.xyz=function(n){let e=n[0],t=n[1],i=n[2],s,r,o;r=(e+16)/116,s=t/500+r,o=r-i/200;let a=r**3,l=s**3,c=o**3;return r=a>.008856?a:(r-16/116)/7.787,s=l>.008856?l:(s-16/116)/7.787,o=c>.008856?c:(o-16/116)/7.787,s*=95.047,r*=100,o*=108.883,[s,r,o]};d.lab.lch=function(n){let e=n[0],t=n[1],i=n[2],s;s=Math.atan2(i,t)*360/2/Math.PI,s<0&&(s+=360);let o=Math.sqrt(t*t+i*i);return[e,o,s]};d.lch.lab=function(n){let e=n[0],t=n[1],s=n[2]/360*2*Math.PI,r=t*Math.cos(s),o=t*Math.sin(s);return[e,r,o]};d.rgb.ansi16=function(n,e=null){let[t,i,s]=n,r=e===null?d.rgb.hsv(n)[2]:e;if(r=Math.round(r/50),r===0)return 30;let o=30+(Math.round(s/255)<<2|Math.round(i/255)<<1|Math.round(t/255));return r===2&&(o+=60),o};d.hsv.ansi16=function(n){return d.rgb.ansi16(d.hsv.rgb(n),n[2])};d.rgb.ansi256=function(n){let e=n[0],t=n[1],i=n[2];return e===t&&t===i?e<8?16:e>248?231:Math.round((e-8)/247*24)+232:16+36*Math.round(e/255*5)+6*Math.round(t/255*5)+Math.round(i/255*5)};d.ansi16.rgb=function(n){let e=n%10;if(e===0||e===7)return n>50&&(e+=3.5),e=e/10.5*255,[e,e,e];let t=(~~(n>50)+1)*.5,i=(e&1)*t*255,s=(e>>1&1)*t*255,r=(e>>2&1)*t*255;return[i,s,r]};d.ansi256.rgb=function(n){if(n>=232){let r=(n-232)*10+8;return[r,r,r]}n-=16;let e,t=Math.floor(n/36)/5*255,i=Math.floor((e=n%36)/6)/5*255,s=e%6/5*255;return[t,i,s]};d.rgb.hex=function(n){let t=(((Math.round(n[0])&255)<<16)+((Math.round(n[1])&255)<<8)+(Math.round(n[2])&255)).toString(16).toUpperCase();return"000000".substring(t.length)+t};d.hex.rgb=function(n){let e=n.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);if(!e)return[0,0,0];let t=e[0];e[0].length===3&&(t=t.split("").map(a=>a+a).join(""));let i=parseInt(t,16),s=i>>16&255,r=i>>8&255,o=i&255;return[s,r,o]};d.rgb.hcg=function(n){let e=n[0]/255,t=n[1]/255,i=n[2]/255,s=Math.max(Math.max(e,t),i),r=Math.min(Math.min(e,t),i),o=s-r,a,l;return o<1?a=r/(1-o):a=0,o<=0?l=0:s===e?l=(t-i)/o%6:s===t?l=2+(i-e)/o:l=4+(e-t)/o,l/=6,l%=1,[l*360,o*100,a*100]};d.hsl.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=t<.5?2*e*t:2*e*(1-t),s=0;return i<1&&(s=(t-.5*i)/(1-i)),[n[0],i*100,s*100]};d.hsv.hcg=function(n){let e=n[1]/100,t=n[2]/100,i=e*t,s=0;return i<1&&(s=(t-i)/(1-i)),[n[0],i*100,s*100]};d.hcg.rgb=function(n){let e=n[0]/360,t=n[1]/100,i=n[2]/100;if(t===0)return[i*255,i*255,i*255];let s=[0,0,0],r=e%1*6,o=r%1,a=1-o,l=0;switch(Math.floor(r)){case 0:s[0]=1,s[1]=o,s[2]=0;break;case 1:s[0]=a,s[1]=1,s[2]=0;break;case 2:s[0]=0,s[1]=1,s[2]=o;break;case 3:s[0]=0,s[1]=a,s[2]=1;break;case 4:s[0]=o,s[1]=0,s[2]=1;break;default:s[0]=1,s[1]=0,s[2]=a}return l=(1-t)*i,[(t*s[0]+l)*255,(t*s[1]+l)*255,(t*s[2]+l)*255]};d.hcg.hsv=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e),s=0;return i>0&&(s=e/i),[n[0],s*100,i*100]};d.hcg.hsl=function(n){let e=n[1]/100,i=n[2]/100*(1-e)+.5*e,s=0;return i>0&&i<.5?s=e/(2*i):i>=.5&&i<1&&(s=e/(2*(1-i))),[n[0],s*100,i*100]};d.hcg.hwb=function(n){let e=n[1]/100,t=n[2]/100,i=e+t*(1-e);return[n[0],(i-e)*100,(1-i)*100]};d.hwb.hcg=function(n){let e=n[1]/100,i=1-n[2]/100,s=i-e,r=0;return s<1&&(r=(i-s)/(1-s)),[n[0],s*100,r*100]};d.apple.rgb=function(n){return[n[0]/65535*255,n[1]/65535*255,n[2]/65535*255]};d.rgb.apple=function(n){return[n[0]/255*65535,n[1]/255*65535,n[2]/255*65535]};d.gray.rgb=function(n){return[n[0]/100*255,n[0]/100*255,n[0]/100*255]};d.gray.hsl=function(n){return[0,0,n[0]]};d.gray.hsv=d.gray.hsl;d.gray.hwb=function(n){return[0,100,n[0]]};d.gray.cmyk=function(n){return[0,0,0,n[0]]};d.gray.lab=function(n){return[n[0],0,0]};d.gray.hex=function(n){let e=Math.round(n[0]/100*255)&255,i=((e<<16)+(e<<8)+e).toString(16).toUpperCase();return"000000".substring(i.length)+i};d.rgb.gray=function(n){return[(n[0]+n[1]+n[2])/3/255*100]}});var lt=b((Fn,at)=>{"use strict";var Y=ke();function Li(){let n={},e=Object.keys(Y);for(let t=e.length,i=0;i<t;i++)n[e[i]]={distance:-1,parent:null};return n}function $i(n){let e=Li(),t=[n];for(e[n].distance=0;t.length;){let i=t.pop(),s=Object.keys(Y[i]);for(let r=s.length,o=0;o<r;o++){let a=s[o],l=e[a];l.distance===-1&&(l.distance=e[i].distance+1,l.parent=i,t.unshift(a))}}return e}function Mi(n,e){return function(t){return e(n(t))}}function Vi(n,e){let t=[e[n].parent,n],i=Y[e[n].parent][n],s=e[n].parent;for(;e[s].parent;)t.unshift(e[s].parent),i=Mi(Y[e[s].parent][s],i),s=e[s].parent;return i.conversion=t,i}at.exports=function(n){let e=$i(n),t={},i=Object.keys(e);for(let s=i.length,r=0;r<s;r++){let o=i[r];e[o].parent!==null&&(t[o]=Vi(o,e))}return t}});var dt=b((jn,ct)=>{"use strict";var Ce=ke(),Fi=lt(),M={},ji=Object.keys(Ce);function Hi(n){let e=function(...t){let i=t[0];return i==null?i:(i.length>1&&(t=i),n(t))};return"conversion"in n&&(e.conversion=n.conversion),e}function Bi(n){let e=function(...t){let i=t[0];if(i==null)return i;i.length>1&&(t=i);let s=n(t);if(typeof s=="object")for(let r=s.length,o=0;o<r;o++)s[o]=Math.round(s[o]);return s};return"conversion"in n&&(e.conversion=n.conversion),e}ji.forEach(n=>{M[n]={},Object.defineProperty(M[n],"channels",{value:Ce[n].channels}),Object.defineProperty(M[n],"labels",{value:Ce[n].labels});let e=Fi(n);Object.keys(e).forEach(i=>{let s=e[i];M[n][i]=Bi(s),M[n][i].raw=Hi(s)})});ct.exports=M});var gt=b((Hn,ft)=>{"use strict";var ht=(n,e)=>(...t)=>`\x1B[${n(...t)+e}m`,ut=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};5;${i}m`},pt=(n,e)=>(...t)=>{let i=n(...t);return`\x1B[${38+e};2;${i[0]};${i[1]};${i[2]}m`},Q=n=>n,mt=(n,e,t)=>[n,e,t],V=(n,e,t)=>{Object.defineProperty(n,e,{get:()=>{let i=t();return Object.defineProperty(n,e,{value:i,enumerable:!0,configurable:!0}),i},enumerable:!0,configurable:!0})},ve,F=(n,e,t,i)=>{ve===void 0&&(ve=dt());let s=i?10:0,r={};for(let[o,a]of Object.entries(ve)){let l=o==="ansi16"?"ansi":o;o===e?r[l]=n(t,s):typeof a=="object"&&(r[l]=n(a[e],s))}return r};function Gi(){let n=new Map,e={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};e.color.gray=e.color.blackBright,e.bgColor.bgGray=e.bgColor.bgBlackBright,e.color.grey=e.color.blackBright,e.bgColor.bgGrey=e.bgColor.bgBlackBright;for(let[t,i]of Object.entries(e)){for(let[s,r]of Object.entries(i))e[s]={open:`\x1B[${r[0]}m`,close:`\x1B[${r[1]}m`},i[s]=e[s],n.set(r[0],r[1]);Object.defineProperty(e,t,{value:i,enumerable:!1})}return Object.defineProperty(e,"codes",{value:n,enumerable:!1}),e.color.close="\x1B[39m",e.bgColor.close="\x1B[49m",V(e.color,"ansi",()=>F(ht,"ansi16",Q,!1)),V(e.color,"ansi256",()=>F(ut,"ansi256",Q,!1)),V(e.color,"ansi16m",()=>F(pt,"rgb",mt,!1)),V(e.bgColor,"ansi",()=>F(ht,"ansi16",Q,!0)),V(e.bgColor,"ansi256",()=>F(ut,"ansi256",Q,!0)),V(e.bgColor,"ansi16m",()=>F(pt,"rgb",mt,!0)),e}Object.defineProperty(ft,"exports",{enumerable:!0,get:Gi})});var bt=b((Bn,yt)=>{"use strict";yt.exports=(n,e=process.argv)=>{let t=n.startsWith("-")?"":n.length===1?"-":"--",i=e.indexOf(t+n),s=e.indexOf("--");return i!==-1&&(s===-1||i<s)}});var Ct=b((Gn,kt)=>{"use strict";var Wi=require("os"),wt=require("tty"),S=bt(),{env:y}=process,N;S("no-color")||S("no-colors")||S("color=false")||S("color=never")?N=0:(S("color")||S("colors")||S("color=true")||S("color=always"))&&(N=1);"FORCE_COLOR"in y&&(y.FORCE_COLOR==="true"?N=1:y.FORCE_COLOR==="false"?N=0:N=y.FORCE_COLOR.length===0?1:Math.min(parseInt(y.FORCE_COLOR,10),3));function _e(n){return n===0?!1:{level:n,hasBasic:!0,has256:n>=2,has16m:n>=3}}function Ae(n,e){if(N===0)return 0;if(S("color=16m")||S("color=full")||S("color=truecolor"))return 3;if(S("color=256"))return 2;if(n&&!e&&N===void 0)return 0;let t=N||0;if(y.TERM==="dumb")return t;if(process.platform==="win32"){let i=Wi.release().split(".");return Number(i[0])>=10&&Number(i[2])>=10586?Number(i[2])>=14931?3:2:1}if("CI"in y)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(i=>i in y)||y.CI_NAME==="codeship"?1:t;if("TEAMCITY_VERSION"in y)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(y.TEAMCITY_VERSION)?1:0;if(y.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in y){let i=parseInt((y.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(y.TERM_PROGRAM){case"iTerm.app":return i>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(y.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(y.TERM)||"COLORTERM"in y?1:t}function Ji(n){let e=Ae(n,n&&n.isTTY);return _e(e)}kt.exports={supportsColor:Ji,stdout:_e(Ae(!0,wt.isatty(1))),stderr:_e(Ae(!0,wt.isatty(2)))}});var _t=b((Wn,vt)=>{"use strict";var zi=(n,e,t)=>{let i=n.indexOf(e);if(i===-1)return n;let s=e.length,r=0,o="";do o+=n.substr(r,i-r)+e+t,r=i+s,i=n.indexOf(e,r);while(i!==-1);return o+=n.substr(r),o},Yi=(n,e,t,i)=>{let s=0,r="";do{let o=n[i-1]==="\r";r+=n.substr(s,(o?i-1:i)-s)+e+(o?`\r
|
|
24
24
|
`:`
|
|
25
25
|
`)+t,s=i+1,i=n.indexOf(`
|
|
26
|
-
`,s)}while(i!==-1);return r+=n.substr(s),r};
|
|
27
|
-
`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function St(n){let e=n[0]==="u",t=n[1]==="{";return e&&!t&&n.length===5||n[0]==="x"&&n.length===3?String.fromCharCode(parseInt(n.slice(1),16)):e&&t?String.fromCodePoint(parseInt(n.slice(2,-1),16)):Zi.get(n)||n}function en(n,e){let t=[],i=e.trim().split(/\s*,\s*/g),s;for(let r of i){let o=Number(r);if(!Number.isNaN(o))t.push(o);else if(s=r.match(Ki))t.push(s[2].replace(Xi,(a,l,c)=>l?St(l):c));else throw new Error(`Invalid Chalk template style argument: ${r} (in style '${n}')`)}return t}function tn(n){At.lastIndex=0;let e=[],t;for(;(t=At.exec(n))!==null;){let i=t[1];if(t[2]){let s=en(i,t[2]);e.push([i].concat(s))}else e.push([i])}return e}function Ot(n,e){let t={};for(let s of e)for(let r of s.styles)t[r[0]]=s.inverse?null:r.slice(1);let i=n;for(let[s,r]of Object.entries(t))if(Array.isArray(r)){if(!(s in i))throw new Error(`Unknown Chalk style: ${s}`);i=r.length>0?i[s](...r):i[s]}return i}xt.exports=(n,e)=>{let t=[],i=[],s=[];if(e.replace(Qi,(r,o,a,l,c,h)=>{if(o)s.push(St(o));else if(l){let p=s.join("");s=[],i.push(t.length===0?p:Ot(n,t)(p)),t.push({inverse:a,styles:tn(l)})}else if(c){if(t.length===0)throw new Error("Found extraneous } in Chalk template literal");i.push(Ot(n,t)(s.join(""))),s=[],t.pop()}else s.push(h)}),i.push(s.join("")),t.length>0){let r=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?"":"s"} (\`}\`)`;throw new Error(r)}return i.join("")}});var Dt=b((zn,Pt)=>{"use strict";var W=gt(),{stdout:Se,stderr:xe}=
|
|
28
|
-
`);return r!==-1&&(e=sn(e,s,i,r)),i+e+s},Oe,Rt=(n,...e)=>{let[t]=e;if(!K(t)||!K(t.raw))return e.join(" ");let i=e.slice(1),s=[t.raw[0]];for(let r=1;r<t.length;r++)s.push(String(i[r-1]).replace(/[{}\\]/g,"\\$&"),String(t.raw[r]));return Oe===void 0&&(Oe=It()),Oe(n,s.join(""))};Object.defineProperties(X.prototype,j);var ee=X();ee.supportsColor=Se;ee.stderr=X({level:xe?xe.level:0});ee.stderr.supportsColor=xe;Pt.exports=ee});var Ye=
|
|
26
|
+
`,s)}while(i!==-1);return r+=n.substr(s),r};vt.exports={stringReplaceAll:zi,stringEncaseCRLFWithFirstIndex:Yi}});var It=b((Jn,xt)=>{"use strict";var Qi=/(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi,At=/(?:^|\.)(\w+)(?:\(([^)]*)\))?/g,Ki=/^(['"])((?:\\.|(?!\1)[^\\])*)\1$/,Xi=/\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi,Zi=new Map([["n",`
|
|
27
|
+
`],["r","\r"],["t"," "],["b","\b"],["f","\f"],["v","\v"],["0","\0"],["\\","\\"],["e","\x1B"],["a","\x07"]]);function St(n){let e=n[0]==="u",t=n[1]==="{";return e&&!t&&n.length===5||n[0]==="x"&&n.length===3?String.fromCharCode(parseInt(n.slice(1),16)):e&&t?String.fromCodePoint(parseInt(n.slice(2,-1),16)):Zi.get(n)||n}function en(n,e){let t=[],i=e.trim().split(/\s*,\s*/g),s;for(let r of i){let o=Number(r);if(!Number.isNaN(o))t.push(o);else if(s=r.match(Ki))t.push(s[2].replace(Xi,(a,l,c)=>l?St(l):c));else throw new Error(`Invalid Chalk template style argument: ${r} (in style '${n}')`)}return t}function tn(n){At.lastIndex=0;let e=[],t;for(;(t=At.exec(n))!==null;){let i=t[1];if(t[2]){let s=en(i,t[2]);e.push([i].concat(s))}else e.push([i])}return e}function Ot(n,e){let t={};for(let s of e)for(let r of s.styles)t[r[0]]=s.inverse?null:r.slice(1);let i=n;for(let[s,r]of Object.entries(t))if(Array.isArray(r)){if(!(s in i))throw new Error(`Unknown Chalk style: ${s}`);i=r.length>0?i[s](...r):i[s]}return i}xt.exports=(n,e)=>{let t=[],i=[],s=[];if(e.replace(Qi,(r,o,a,l,c,h)=>{if(o)s.push(St(o));else if(l){let p=s.join("");s=[],i.push(t.length===0?p:Ot(n,t)(p)),t.push({inverse:a,styles:tn(l)})}else if(c){if(t.length===0)throw new Error("Found extraneous } in Chalk template literal");i.push(Ot(n,t)(s.join(""))),s=[],t.pop()}else s.push(h)}),i.push(s.join("")),t.length>0){let r=`Chalk template literal is missing ${t.length} closing bracket${t.length===1?"":"s"} (\`}\`)`;throw new Error(r)}return i.join("")}});var Dt=b((zn,Pt)=>{"use strict";var W=gt(),{stdout:Se,stderr:xe}=Ct(),{stringReplaceAll:nn,stringEncaseCRLFWithFirstIndex:sn}=_t(),{isArray:K}=Array,qt=["ansi","ansi","ansi256","ansi16m"],j=Object.create(null),rn=(n,e={})=>{if(e.level&&!(Number.isInteger(e.level)&&e.level>=0&&e.level<=3))throw new Error("The `level` option should be an integer from 0 to 3");let t=Se?Se.level:0;n.level=e.level===void 0?t:e.level},Ie=class{constructor(e){return Tt(e)}},Tt=n=>{let e={};return rn(e,n),e.template=(...t)=>Rt(e.template,...t),Object.setPrototypeOf(e,X.prototype),Object.setPrototypeOf(e.template,e),e.template.constructor=()=>{throw new Error("`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.")},e.template.Instance=Ie,e.template};function X(n){return Tt(n)}for(let[n,e]of Object.entries(W))j[n]={get(){let t=Z(this,Ee(e.open,e.close,this._styler),this._isEmpty);return Object.defineProperty(this,n,{value:t}),t}};j.visible={get(){let n=Z(this,this._styler,!0);return Object.defineProperty(this,"visible",{value:n}),n}};var Nt=["rgb","hex","keyword","hsl","hsv","hwb","ansi","ansi256"];for(let n of Nt)j[n]={get(){let{level:e}=this;return function(...t){let i=Ee(W.color[qt[e]][n](...t),W.color.close,this._styler);return Z(this,i,this._isEmpty)}}};for(let n of Nt){let e="bg"+n[0].toUpperCase()+n.slice(1);j[e]={get(){let{level:t}=this;return function(...i){let s=Ee(W.bgColor[qt[t]][n](...i),W.bgColor.close,this._styler);return Z(this,s,this._isEmpty)}}}}var on=Object.defineProperties(()=>{},{...j,level:{enumerable:!0,get(){return this._generator.level},set(n){this._generator.level=n}}}),Ee=(n,e,t)=>{let i,s;return t===void 0?(i=n,s=e):(i=t.openAll+n,s=e+t.closeAll),{open:n,close:e,openAll:i,closeAll:s,parent:t}},Z=(n,e,t)=>{let i=(...s)=>K(s[0])&&K(s[0].raw)?Et(i,Rt(i,...s)):Et(i,s.length===1?""+s[0]:s.join(" "));return Object.setPrototypeOf(i,on),i._generator=n,i._styler=e,i._isEmpty=t,i},Et=(n,e)=>{if(n.level<=0||!e)return n._isEmpty?"":e;let t=n._styler;if(t===void 0)return e;let{openAll:i,closeAll:s}=t;if(e.indexOf("\x1B")!==-1)for(;t!==void 0;)e=nn(e,t.close,t.open),t=t.parent;let r=e.indexOf(`
|
|
28
|
+
`);return r!==-1&&(e=sn(e,s,i,r)),i+e+s},Oe,Rt=(n,...e)=>{let[t]=e;if(!K(t)||!K(t.raw))return e.join(" ");let i=e.slice(1),s=[t.raw[0]];for(let r=1;r<t.length;r++)s.push(String(i[r-1]).replace(/[{}\\]/g,"\\$&"),String(t.raw[r]));return Oe===void 0&&(Oe=It()),Oe(n,s.join(""))};Object.defineProperties(X.prototype,j);var ee=X();ee.supportsColor=Se;ee.stderr=X({level:xe?xe.level:0});ee.stderr.supportsColor=xe;Pt.exports=ee});var Ye=C(ze(),1),{program:Sn,createCommand:xn,createArgument:In,createOption:En,CommanderError:qn,InvalidArgumentError:Tn,InvalidOptionArgumentError:Nn,Command:u,Argument:Rn,Option:Pn,Help:Dn}=Ye.default;var Qe="decipher-qa",$=process.env.SECRET_MODE_URL||"https://api.getdecipher.com";var v=C(require("fs")),L=C(require("path")),Mt=C(require("readline"));var Ke='---\nname: decipher-qa\ndescription: >-\n Creates QA tests by exploring your frontend codebase to understand pages, components, and UI flows,\n then generates step-by-step test instructions based on what it finds in the code.\n Handles the full lifecycle: create test, link login identity, generate steps, save, and run validation.\n Also manages tests and identities (CRUD) and provides CLI reference.\n---\n\n# /decipher-qa \u2014 Decipher QA Agent\n\nRoute based on the first word(s) of `$ARGUMENTS`:\n\n- **"create-test"** or **"create test"** \u2192 Read `create-test.md` in this skill directory and follow its instructions. Pass the remaining arguments.\n- **"validate"** \u2192 Read `create-test.md` in this skill directory and jump to Phase 6 (Run Validation). The user must provide a test ID. Initialize attemptNumber=1, maxAttempts=3, failureHistory=[].\n- **"test"** \u2192 Read `test.md` in this skill directory and follow its instructions. Pass the remaining arguments after "test".\n- **"identity"** \u2192 Read `identity.md` in this skill directory and follow its instructions. Pass the remaining arguments after "identity".\n- **"steps"** \u2192 Read `steps.md` in this skill directory and follow its instructions. Pass the remaining arguments after "steps".\n- **"cli"** \u2192 Read `cli.md` in this skill directory and follow its instructions.\n- **Natural language test request** (e.g. "make a test for checkout", "test the alert flow", "create a test for login") \u2192 Treat as `create-test`. Read `create-test.md` and follow its instructions. Use the user\'s description as the test description.\n- **Empty or unrecognized** \u2192 Show available commands:\n - `/decipher-qa create-test` \u2014 Create a new test end-to-end (name, identity, steps, validation)\n - `/decipher-qa validate` \u2014 Run validation on an existing test\n - `/decipher-qa test` \u2014 Manage QA tests (create, delete, list)\n - `/decipher-qa identity` \u2014 Manage login identities (create, delete, list)\n - `/decipher-qa steps` \u2014 Generate QA test steps by exploring your codebase\n - `/decipher-qa cli` \u2014 CLI command reference and error handling guide\n\nAll data is managed via the Decipher API through CLI commands.\n\n**IMPORTANT:** Always invoke the CLI as `decipher-qa` (it should be installed locally). If the command is not found, fall back to `npx @decipher-sdk/decipher-qa` \u2014 never use `npx decipher-qa` (the npm package name is `@decipher-sdk/decipher-qa`).\n',Xe=`# Test \u2014 Manage QA Tests
|
|
29
29
|
|
|
30
30
|
**IMPORTANT:** Always invoke the CLI as \`decipher-qa\` (it should be installed locally). If the command is not found, fall back to \`npx @decipher-sdk/decipher-qa\` \u2014 never use \`npx decipher-qa\` (the npm package name is \`@decipher-sdk/decipher-qa\`).
|
|
31
31
|
|
|
@@ -294,9 +294,11 @@ If you find yourself using "and" or "then" in a step description, split it into
|
|
|
294
294
|
- Click/focus a text field before typing \u2192 separate click step, then type step
|
|
295
295
|
- Dismiss a toast/banner before interacting with elements behind it \u2192 separate step
|
|
296
296
|
|
|
297
|
-
### 3. No short waits
|
|
297
|
+
### 3. No short waits \u2014 and no redundant waits before assertions
|
|
298
298
|
**Do not generate \`wait\` steps under 2000ms.** Decipher handles short delays automatically. Only add a \`wait\` step when there is a genuinely long operation (e.g. a server-side save, a page navigation, a complex animation) that takes 2 seconds or more.
|
|
299
299
|
|
|
300
|
+
**Do not add \`wait\` steps before \`assert\` steps.** Assertions already include a built-in 2-second wait, so a preceding \`wait\` of 2000ms is always redundant. Only add a wait before an assertion if the preceding operation genuinely takes longer than 2 seconds \u2014 and in that case, set the wait to the total expected time (e.g. \`3000\`), not \`2000\`.
|
|
301
|
+
|
|
300
302
|
### 4. Description specificity
|
|
301
303
|
|
|
302
304
|
**Static UI elements** \u2014 reference exact text, icons, and location:
|
|
@@ -354,7 +356,7 @@ Since the actual rendered text will contain a runtime-generated number (not the
|
|
|
354
356
|
| \`goto\` | Full URL | Auto-set to the URL | Navigate to a page. Always step 1. |
|
|
355
357
|
| \`default\` | Always empty \`""\` | Human-readable action (include typed values inline) | Any UI interaction: click, type, hover, press key |
|
|
356
358
|
| \`wait\` | Duration in ms (minimum \`"2000"\`) | Empty \`""\` | Pause for long operations (saves, page loads). Never under 2000ms. |
|
|
357
|
-
| \`assert\` | What to verify (natural language) | Empty \`""\` | Verify page state \u2014 only if user explicitly requests. Optional \`metadata.waitAfterMs\`. |
|
|
359
|
+
| \`assert\` | What to verify (natural language) | Empty \`""\` | Verify page state \u2014 only if user explicitly requests. Has a built-in 2-second wait, so don't add a \`wait\` step before assertions unless the operation takes >2s. Optional \`metadata.waitAfterMs\`. |
|
|
358
360
|
| \`conditional\` | Action if condition is true | The condition to check | Handle dynamic states (e.g. dismiss cookie banner if visible) |
|
|
359
361
|
| \`refresh\` | (optional) | Empty \`""\` | Reload the page |
|
|
360
362
|
|
|
@@ -453,29 +455,23 @@ decipher-qa steps format --type default --description 'Select "Editor" from the
|
|
|
453
455
|
# Step 13: Click Send Invite
|
|
454
456
|
decipher-qa steps format --type default --description 'Click the "Send Invite" button in the invite dialog' --data ""
|
|
455
457
|
|
|
456
|
-
# Step 14:
|
|
457
|
-
decipher-qa steps format --type wait --data "2000"
|
|
458
|
-
|
|
459
|
-
# Step 15: Assert the invitation appears
|
|
458
|
+
# Step 14: Assert the invitation appears (assertions have a built-in 2s wait \u2014 no wait step needed)
|
|
460
459
|
decipher-qa steps format --type assert --data 'A new pending invitation with role "Editor" appears in the "Pending Invitations" section'
|
|
461
460
|
|
|
462
|
-
# Step
|
|
461
|
+
# Step 15: Click the Revoke button
|
|
463
462
|
decipher-qa steps format --type default --description 'Click the "Revoke" button on the most recently added pending invitation row' --data ""
|
|
464
463
|
|
|
465
|
-
# Step
|
|
464
|
+
# Step 16: Click Confirm in the revocation dialog
|
|
466
465
|
decipher-qa steps format --type default --description 'Click the "Confirm" button in the revocation confirmation dialog' --data ""
|
|
467
466
|
|
|
468
|
-
# Step
|
|
469
|
-
decipher-qa steps format --type wait --data "2000"
|
|
470
|
-
|
|
471
|
-
# Step 19: Assert the invitation is removed
|
|
467
|
+
# Step 17: Assert the invitation is removed (no wait step needed \u2014 assertion waits automatically)
|
|
472
468
|
decipher-qa steps format --type assert --data 'The pending invitation that was just revoked is no longer visible in the "Pending Invitations" section'
|
|
473
469
|
\`\`\`
|
|
474
470
|
|
|
475
471
|
After collecting the JSON output, display the steps grouped into logical sections:
|
|
476
472
|
|
|
477
473
|
\`\`\`
|
|
478
|
-
Steps (
|
|
474
|
+
Steps (17 total):
|
|
479
475
|
|
|
480
476
|
--- Navigate to workspaces ---
|
|
481
477
|
1. [goto] https://app.example.com/workspaces
|
|
@@ -497,15 +493,13 @@ Invites a new team member with the Editor role.
|
|
|
497
493
|
11. [default] Click the "Role" dropdown in the invite dialog
|
|
498
494
|
12. [default] Select "Editor" from the role dropdown options
|
|
499
495
|
13. [default] Click the "Send Invite" button in the invite dialog
|
|
500
|
-
14. [wait] 2000ms \u2014 invitation sending
|
|
501
496
|
|
|
502
497
|
--- Verify and revoke invitation ---
|
|
503
498
|
Confirms the invitation was created, then revokes it.
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
19. [assert] The pending invitation that was just revoked is no longer visible in the "Pending Invitations" section
|
|
499
|
+
14. [assert] A new pending invitation with role "Editor" appears in the "Pending Invitations" section
|
|
500
|
+
15. [default] Click the "Revoke" button on the most recently added pending invitation row
|
|
501
|
+
16. [default] Click the "Confirm" button in the revocation confirmation dialog
|
|
502
|
+
17. [assert] The pending invitation that was just revoked is no longer visible in the "Pending Invitations" section
|
|
509
503
|
\`\`\`
|
|
510
504
|
`,tt='# CLI \u2014 Decipher QA Agent Command Reference\n\nThis is a reference for the `decipher-qa` CLI tool. Use it to run commands, understand errors, and know when to bring the user into the loop.\n\n**IMPORTANT:** Always invoke the CLI as `decipher-qa` (it should be installed locally). If the command is not found, fall back to `npx @decipher-sdk/decipher-qa` \u2014 never use `npx decipher-qa` (the npm package name is `@decipher-sdk/decipher-qa`).\n\n---\n\n## Commands\n\n### `decipher-qa init`\nScaffold skills into the nearest git repository.\n```bash\ndecipher-qa init # create skill files (skip existing)\ndecipher-qa init --force # overwrite existing skill files\n```\n\n### `decipher-qa screenshot`\nDownload a screenshot to `.decipher/screenshots/` in the current working directory. Returns the file path to stdout.\n```bash\ndecipher-qa screenshot --url "<screenshot_url>"\n```\nUse this to view screenshots from `test get` or `validation-progress` responses. After downloading, use the Read tool on the returned file path to view the image.\n\n### `decipher-qa login`\nAuthenticate with the Decipher API. **This is interactive \u2014 the user must run it in their terminal.**\n```bash\ndecipher-qa login\n```\n\n### `decipher-qa whoami`\nShow the currently authenticated user and organization.\n```bash\ndecipher-qa whoami\n```\n\n### `decipher-qa test`\nManage QA tests. All IDs are numeric.\n```bash\ndecipher-qa test list # list all tests (includes steps)\ndecipher-qa test list --name "<search>" # filter by name\ndecipher-qa test create --name "<n>" --url "<u>" --description "<d>" # create a test\ndecipher-qa test get --id <id> # get test with steps and screenshots\ndecipher-qa test update --id <id> --name "<n>" # update a test\ndecipher-qa test update --id <id> --identity-id <id> # link identity\ndecipher-qa test update --id <id> --tags "tag1,tag2" # set tags\ndecipher-qa test delete --id <id> # delete a test\ndecipher-qa test set-steps --id <id> --steps \'<json>\' # set steps array for a test\ndecipher-qa test run-validation --id <id> # trigger validation\ndecipher-qa test validation-progress --id <id> [--include-steps] # check validation progress\ndecipher-qa test start-run --id <id> # start a test run\ndecipher-qa test step-logs --id <id> # get step logs with IDs and selectors\ndecipher-qa test check-resumability --id <id> --steps \'<json>\' [--edited-step-ids \'id1,id2\'] # check if resume or restart needed\ndecipher-qa test resume-validation --id <id> [--steps \'<json>\'] [--edited-step-ids \'id1,id2\'] # resume paused validation with edits\n```\n\n### `decipher-qa identity`\nManage login identities. All IDs are numeric.\n```bash\ndecipher-qa identity list # list all identities\ndecipher-qa identity list --name "<search>" # filter by name\ndecipher-qa identity create --name "<n>" --username "<u>" --password "<p>" --url "<url>" # create\ndecipher-qa identity get --id <id> # get identity\ndecipher-qa identity update --id <id> --name "<n>" # update\ndecipher-qa identity delete --id <id> # delete\n```\n\n### `decipher-qa steps format`\nFormat a test step as JSON.\n```bash\ndecipher-qa steps format --type goto --data "https://app.example.com"\ndecipher-qa steps format --type default --description \'Click "Save"\' --data ""\ndecipher-qa steps format --type wait --data "3000"\ndecipher-qa steps format --type conditional --description "Banner is visible" --data \'Dismiss the banner\'\ndecipher-qa steps format --type assert --data "Page title is Dashboard"\ndecipher-qa steps format --type refresh\n```\nValid `--type` values: `goto`, `default`, `wait`, `assert`, `conditional`, `refresh`\n\n---\n\n## Error Handling\n\nWhen a CLI command fails, match the error output against this table to determine the cause and correct action.\n\n| Error pattern | Cause | Action |\n|---|---|---|\n| `Config not found` | User has never logged in | User must run `decipher-qa login` in their terminal |\n| `Token is invalid, revoked, or expired` | 401 from API \u2014 auth token expired | User must re-authenticate with `decipher-qa login` |\n| `Could not connect to Decipher API` | Network failure or API down | Ask user to check their network connection |\n| `not_found_error` | Invalid or stale ID | Use `decipher-qa test get --id <id>` or list items and retry with a valid ID |\n| `validation_error` | Invalid input data | Check the error message for which field is invalid |\n| `Invalid step type` | Wrong `--type` value passed to `steps format` | Use one of: `goto`, `default`, `wait`, `assert`, `conditional`, `refresh` |\n| `Invalid steps JSON` | Malformed JSON or non-array passed to `test set-steps --steps` | Ensure the value is a valid JSON array string |\n\n---\n\n## When to Bring the User Into the Loop\n\n**Always stop and involve the user when:**\n\n- **`login` is needed** \u2014 this command is interactive and must be run in the user\'s terminal. You cannot run it on their behalf.\n- **Token expiration or revocation** \u2014 the user must re-authenticate by running `decipher-qa login`.\n- **Network errors** \u2014 the user may need to check their connection, VPN, or firewall.\n- **Unexpected HTTP status codes** \u2014 if the API returns something other than 200 or a known error, report the status code and response to the user.\n- **Repeated failures** \u2014 if a command fails more than twice for the same reason, stop retrying, explain the issue, and ask the user for guidance.\n',it=`# Create Test \u2014 End-to-End Test Creation Workflow
|
|
511
505
|
|
|
@@ -868,9 +862,9 @@ Next actions:
|
|
|
868
862
|
/decipher-qa validate <id> \u2014 Re-run validation
|
|
869
863
|
/decipher-qa create-test \u2014 Create another test end-to-end
|
|
870
864
|
\`\`\`
|
|
871
|
-
`;var R=
|
|
872
|
-
`,"utf-8")),{added:s}}function dn(n){let e=L.default.join(n,".gitignore"),t="";if(
|
|
865
|
+
`;var R=C(Dt()),Ut=R.default.hex("#6C5CE7"),qe=R.default.dim,Lt=R.default.bold,A=n=>console.log(R.default.green(" + ")+n),P=n=>console.error(R.default.red(" x ")+n),w=n=>console.log(R.default.cyan(" * ")+n),x=n=>console.log(R.default.yellow(" ! ")+n),E=(n,e)=>console.log(qe(" "+n.padEnd(14))+Lt(e));function H(n){console.log(),console.log(" "+Ut(">>")+Lt(" Decipher QA ")+Ut("<<")+" "+qe(n)),console.log()}function Te(){console.log(qe(" "+"-".repeat(46)))}var te=C(require("fs")),$t=C(require("os")),ie=C(require("path")),_=ie.default.join($t.default.homedir(),".decipher","qa-config.json");function D(){te.default.existsSync(_)||(console.error(JSON.stringify({error:`Config not found at ${_}. Run \`decipher-qa login\` first.`})),process.exit(1));let n=te.default.readFileSync(_,"utf-8"),e=JSON.parse(n);return e.token||(console.error(JSON.stringify({error:`No token found in ${_}. Run \`decipher-qa login\` to authenticate.`})),process.exit(1)),e}function ne(n){let e=n;for(;;){if(te.default.existsSync(ie.default.join(e,".git")))return e;let t=ie.default.dirname(e);if(t===e)return null;e=t}}var an=[{relPath:".claude/skills/decipher-qa/SKILL.md",content:Ke},{relPath:".claude/skills/decipher-qa/test.md",content:Xe},{relPath:".claude/skills/decipher-qa/identity.md",content:Ze},{relPath:".claude/skills/decipher-qa/steps.md",content:et},{relPath:".claude/skills/decipher-qa/cli.md",content:tt},{relPath:".claude/skills/decipher-qa/create-test.md",content:it}],ln=["Bash(decipher-qa:*)","Bash(npx @decipher-sdk/decipher-qa:*)","Bash(sleep:*)","Read(.decipher/**)"];function cn(n){let e=L.default.join(n,".claude","settings.json"),t={};if(v.default.existsSync(e))try{t=JSON.parse(v.default.readFileSync(e,"utf-8"))}catch{x(" .claude/settings.json was malformed, re-creating it"),t={}}t.permissions||(t.permissions={}),Array.isArray(t.permissions.allow)||(t.permissions.allow=[]);let i=new Set(t.permissions.allow),s=[];for(let r of ln)i.has(r)||(t.permissions.allow.push(r),s.push(r));return s.length>0&&(v.default.mkdirSync(L.default.dirname(e),{recursive:!0}),v.default.writeFileSync(e,JSON.stringify(t,null,2)+`
|
|
866
|
+
`,"utf-8")),{added:s}}function dn(n){let e=L.default.join(n,".gitignore"),t="";if(v.default.existsSync(e)&&(t=v.default.readFileSync(e,"utf-8")),t.split(`
|
|
873
867
|
`).some(r=>r.trim()===".decipher/"||r.trim()===".decipher"))return!1;let s=t.length>0&&!t.endsWith(`
|
|
874
868
|
`)?`
|
|
875
|
-
`:"";return
|
|
876
|
-
`,"utf-8"),!0}async function hn(n){H("Initialize"),w("Looking for git repository...");let e=ne(process.cwd());e||(P("No git repository found. Run this command inside a git repo."),process.exit(1)),A("Found: "+e),console.log(),w("Creating skill files...");let t=0;for(let r of an){let o=L.default.join(e,r.relPath);if(C.default.existsSync(o)&&!n.force){x(` ${r.relPath} (exists, use --force to overwrite)`),t++;continue}C.default.mkdirSync(L.default.dirname(o),{recursive:!0}),C.default.writeFileSync(o,r.content,"utf-8"),console.log(` ${r.relPath}`)}console.log(),t>0&&!n.force&&(w(`${t} file(s) skipped. Use --force to overwrite skill files.`),console.log()),w("Configuring Claude Code permissions (.claude/settings.json)..."),console.log(" Decipher QA runs background agents to monitor test validation."),console.log(" These permissions let those agents run CLI commands and read"),console.log(" screenshots without prompting you for approval each time.");let{added:i}=cn(e);if(i.length>0){console.log();for(let r of i)console.log(` + ${r}`);console.log(),A("Permissions added.")}else A("Permissions already configured.");console.log(),w("Checking .gitignore..."),console.log(" Decipher QA stores temporary screenshots in .decipher/ for"),console.log(" failure analysis. Adding it to .gitignore keeps these out of"),console.log(" your repo."),dn(e)?(console.log(),console.log(" + .decipher/"),console.log(),A("Added .decipher/ to .gitignore.")):A(".decipher/ already in .gitignore."),console.log(),w("Checking authentication...");let s=!0;if(C.default.existsSync(_))try{let r=C.default.readFileSync(_,"utf-8"),o=JSON.parse(r);if(o.token)try{(await fetch(`${$}/api/v1/whoami`,{headers:{Authorization:`Bearer ${o.token}`}})).ok?(A("Already authenticated."),s=!1):x(" Existing token is invalid or expired.")}catch{x(" Could not reach Decipher API to verify token.")}}catch{}if(s){console.log(),w("To authenticate, grab your API token from:"),console.log(" https://www.app.getdecipher.com/settings?tab=testing"),console.log();let r=Mt.default.createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(a=>{r.question(" Paste your API token: ",l=>{r.close(),a(l.trim())})});if(!o)x(" No token provided. You can run `decipher-qa login` later.");else{let a=L.default.dirname(_);C.default.mkdirSync(a,{recursive:!0}),C.default.writeFileSync(_,JSON.stringify({token:o},null,2),"utf-8"),A("Token saved to "+_)}}console.log(),A("Decipher QA skills installed!"),console.log(),w("Available commands in Claude Code:"),console.log(" /decipher-qa create-test Create a new test end-to-end (name, identity, steps, validation)"),console.log(" /decipher-qa validate Run validation on an existing test"),console.log(" /decipher-qa test Manage QA tests (create, delete, list)"),console.log(" /decipher-qa identity Manage login identities (create, delete, list)"),console.log(" /decipher-qa steps Generate QA test steps by exploring your codebase"),console.log(" /decipher-qa cli CLI command reference and error handling guide"),console.log()}var Vt=new u("init").description("Scaffold Decipher QA skills into the nearest git repository").option("-f, --force","Overwrite existing skill files",!1).action(hn);var Ft=v(require("crypto"));var Ne=["goto","default","wait","assert","conditional","auth","refresh"];function un(n){let{type:e,description:t,data:i,metadata:s}=n;e==="goto"&&i&&!/^https?:\/\//i.test(i)&&x(`Data "${i}" doesn't look like a URL for a goto step`),e==="wait"&&i&&isNaN(Number(i))&&x(`Data "${i}" doesn't look numeric for a wait step`),e==="auth"&&i!=="magic_link"&&i!=="code"&&x(`Data for auth step should be "magic_link" or "code", got "${i}"`);let r={id:Ft.default.randomUUID(),type:e,description:e==="goto"&&!t?i:e==="wait"?"":t,data:i,setByUser:!0,originFrom:"agent"};if(s)try{r.metadata=JSON.parse(s)}catch{x(`Could not parse --metadata as JSON: ${s}`),r.metadata=s}console.log(JSON.stringify(r,null,2))}var pn=new u("format").description("Generate a validated JSON step object").requiredOption("--type <type>",`Step type: ${Ne.join(", ")}`).option("--description <text>","Step description","").option("--data <value>","Step data","").option("--metadata <json>","Optional JSON metadata").action(n=>{let e=n.type;Ne.includes(e)||(console.error(`Invalid step type "${e}". Must be one of: ${Ne.join(", ")}`),process.exit(1)),un({type:e,description:n.description,data:n.data,metadata:n.metadata})}),jt=new u("steps").description("QA test step utilities").addCommand(pn);async function m(n,e){let t=D(),i=e?.method??"GET",s=new URL(n,$);if(e?.query)for(let[o,a]of Object.entries(e.query))a!==void 0&&s.searchParams.set(o,a);let r;try{r=await fetch(s.toString(),{method:i,headers:{Authorization:`Bearer ${t.token}`,...e?.body!==void 0?{"Content-Type":"application/json"}:{}},body:e?.body!==void 0?JSON.stringify(e.body):void 0})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!r.ok){let o;try{o=await r.json()}catch{o={error:{message:`HTTP ${r.status} ${r.statusText}`}}}console.error(JSON.stringify(o,null,2)),process.exit(1)}return await r.json()}var Ht=new u("create").description("Create a new test").requiredOption("--name <name>","Test name").requiredOption("--url <url>","URL the test runs against").requiredOption("--description <text>","Test description").option("--identity-id <id>","Identity ID for authentication").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={name:n.name,url:n.url,description:n.description};n.identityId!==void 0&&(e.identityId=Number(n.identityId)),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m("/api/v1/tests",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var Bt=new u("get").description("Get a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{query:{include:"steps,screenshots"}});console.log(JSON.stringify(e,null,2))});var Gt=new u("update").description("Update a test by ID").requiredOption("--id <id>","Test ID").option("--name <name>","New test name").option("--url <url>","New URL").option("--identity-id <id>","New identity ID (use 'null' to clear)").option("--description <text>","New description").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.url!==void 0&&(e.url=n.url),n.identityId!==void 0&&(e.identityId=n.identityId==="null"?null:Number(n.identityId)),n.description!==void 0&&(e.description=n.description),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m(`/api/v1/tests/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var Wt=new u("delete").description("Delete a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var Jt=new u("list").description("List all tests").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/tests",{query:{name:n.name,include:"steps"}});console.log(JSON.stringify(e,null,2))});var zt=new u("set-steps").description("Set the steps array for a test by ID").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(i){console.error(JSON.stringify({error:`Invalid steps JSON: ${i.message}`})),process.exit(1)}let t=await m(`/api/v1/tests/${n.id}/steps`,{method:"PUT",body:{steps:e}});console.log(JSON.stringify(t,null,2))});var Yt=new u("run-validation").description("Trigger a validation run for a test").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/run-validation`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Qt=new u("validation-progress").description("Check validation progress for a test").requiredOption("--id <id>","Test ID").option("--include-steps","Include steps and screenshot URLs in the response").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/validation-progress`,{query:n.includeSteps?{include:"steps"}:void 0});console.log(JSON.stringify(e,null,2))});var Kt=new u("start-run").description("Start a test run").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/runs`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Xt=new u("check-resumability").description("Check if a paused validation can be resumed or must be restarted").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string (with step IDs)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/check-resumability`,{method:"POST",body:{steps:e,...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var Zt=new u("resume-validation").description("Resume a paused validation run with optional edited steps").requiredOption("--id <id>","Test ID").option("--steps <json>","Edited steps as a JSON array string (with step IDs preserved)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;if(n.steps)try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/resume-validation`,{method:"POST",body:{...e?{editedSteps:e}:{},...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ei=new u("step-logs").description("Get step logs with IDs, selectors, and execution metadata").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/step-logs`);console.log(JSON.stringify(e,null,2))});var ti=new u("test").description("Manage QA tests (create, get, update, delete, list, set-steps, run-validation, validation-progress, start-run, step-logs, check-resumability, resume-validation)").hook("preAction",()=>{D()}).addCommand(Ht).addCommand(Bt).addCommand(Gt).addCommand(Wt).addCommand(Jt).addCommand(zt).addCommand(Yt).addCommand(Qt).addCommand(Kt).addCommand(Xt).addCommand(Zt).addCommand(ei);var ii=new u("create").description("Create a new identity").requiredOption("--name <name>","Identity name").requiredOption("--username <username>","Login username or email").requiredOption("--password <password>","Login password").requiredOption("--url <url>","Login page URL").option("--description <text>","Identity description").action(async n=>{let e={name:n.name,username:n.username,password:n.password,url:n.url};n.description!==void 0&&(e.description=n.description);let t=await m("/api/v1/identities",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var ni=new u("get").description("Get an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`);console.log(JSON.stringify(e,null,2))});var si=new u("update").description("Update an identity by ID").requiredOption("--id <id>","Identity ID").option("--name <name>","New identity name").option("--username <username>","New username").option("--password <password>","New password").option("--url <url>","New login URL").option("--description <text>","New description").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.username!==void 0&&(e.username=n.username),n.password!==void 0&&(e.password=n.password),n.url!==void 0&&(e.url=n.url),n.description!==void 0&&(e.description=n.description);let t=await m(`/api/v1/identities/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var ri=new u("delete").description("Delete an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var oi=new u("list").description("List all identities").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/identities",{query:{name:n.name}});console.log(JSON.stringify(e,null,2))});var ai=new u("identity").description("Manage login identities (create, get, update, delete, list)").hook("preAction",()=>{D()}).addCommand(ii).addCommand(ni).addCommand(si).addCommand(ri).addCommand(oi);var Re=v(require("fs")),li=v(require("path")),ci=v(require("readline"));var mn="https://www.app.getdecipher.com/settings?tab=testing";async function fn(){H("Login"),w("To authenticate, grab your API token from:"),console.log(` ${mn}`),console.log();let n=ci.default.createInterface({input:process.stdin,output:process.stdout}),e=await new Promise(i=>{n.question(" Paste your API token: ",s=>{n.close(),i(s.trim())})});e||(P("No token provided. Aborting."),process.exit(1));let t=li.default.dirname(_);Re.default.mkdirSync(t,{recursive:!0}),Re.default.writeFileSync(_,JSON.stringify({token:e},null,2),"utf-8"),console.log(),A("Token saved to "+_),w("You can now use `decipher-qa test`, `decipher-qa steps`, etc."),console.log()}var di=new u("login").description("Authenticate with Decipher by saving your API token").action(fn);async function gn(){H("Who Am I");let n=D();w("Verifying token..."),console.log();let e;try{e=await fetch(`${$}/api/v1/whoami`,{headers:{Authorization:`Bearer ${n.token}`}})}catch{P("Could not connect to Decipher API."),w("Check your network connection and try again."),process.exit(1)}e.ok||(e.status===401?(P("Token is invalid, revoked, or expired."),w("Run `decipher-qa login` to re-authenticate.")):P(`Unexpected response: ${e.status} ${e.statusText}`),process.exit(1));let t=await e.json();A("Token is valid!"),console.log(),Te(),E("Key Name",t.key_name),E("Key Prefix",t.key_prefix),E("Organization",t.organization??"\u2014"),E("Scopes",t.scopes.join(", ")||"none"),E("Created By",t.created_by??"\u2014"),E("Created At",t.created_at),E("Expires At",t.expires_at??"never"),E("Last Used",t.last_used_at??"\u2014"),Te(),console.log()}var hi=new u("whoami").description("Display information about the current API token").action(gn);var Pe=v(require("fs")),De=v(require("path")),ui=v(require("crypto"));var pi=new u("screenshot").description("Download a Decipher screenshot to a temp file for viewing").requiredOption("--url <url>","The screenshot URL from decipher-qa CLI responses").action(async n=>{let e=n.url;try{let t=new URL(e);t.searchParams.set("format","raw");let i=await fetch(t.toString());i.ok||(console.error(JSON.stringify({error:`Failed to fetch screenshot: HTTP ${i.status} ${i.statusText}`})),process.exit(1));let s=i.headers.get("content-type")||"image/png",r=s.includes("webp")?".webp":s.includes("jpeg")||s.includes("jpg")?".jpg":".png",o=ui.default.createHash("md5").update(e).digest("hex").slice(0,8),a=ne(process.cwd())||process.cwd(),l=De.default.join(a,".decipher","screenshots");Pe.default.mkdirSync(l,{recursive:!0});let c=De.default.join(l,`decipher-screenshot-${o}${r}`),h=Buffer.from(await i.arrayBuffer());Pe.default.writeFileSync(c,h),console.log(c)}catch(t){let i=t instanceof Error?t.message:String(t);console.error(JSON.stringify({error:`Error fetching screenshot: ${i}`})),process.exit(1)}});var mi={name:"@decipher-sdk/decipher-qa",version:"0.0.4",bin:{"decipher-qa":"dist/index.js"},main:"./dist/index.js",files:["dist"],scripts:{build:"tsup","check-types":"tsc -p tsconfig.json --noEmit",clean:"rm -rf dist tsconfig.tsbuildinfo",dev:"tsup --watch"},author:"Decipher AI",license:"UNLICENSED",description:"Decipher QA Agent CLI \u2014 scaffolds Claude Code skills for QA test management",engines:{node:">=18"},dependencies:{chalk:"^4.1.2",commander:"^12.1.0"},devDependencies:{"@types/node":"^22.0.0",tsup:"^8.0.0",typescript:"^5.4.3"},keywords:[]};var q=new u;q.name(Qe).description("Decipher QA Agent CLI").version(mi.version,"-v, --version");q.addCommand(Vt);q.addCommand(jt);q.addCommand(ti);q.addCommand(ai);q.addCommand(di);q.addCommand(hi);q.addCommand(pi);q.parse();
|
|
869
|
+
`:"";return v.default.writeFileSync(e,t+s+`.decipher/
|
|
870
|
+
`,"utf-8"),!0}async function hn(n){H("Initialize"),w("Looking for git repository...");let e=ne(process.cwd());e||(P("No git repository found. Run this command inside a git repo."),process.exit(1)),A("Found: "+e),console.log(),w("Creating skill files...");let t=0;for(let r of an){let o=L.default.join(e,r.relPath);if(v.default.existsSync(o)&&!n.force){x(` ${r.relPath} (exists, use --force to overwrite)`),t++;continue}v.default.mkdirSync(L.default.dirname(o),{recursive:!0}),v.default.writeFileSync(o,r.content,"utf-8"),console.log(` ${r.relPath}`)}console.log(),t>0&&!n.force&&(w(`${t} file(s) skipped. Use --force to overwrite skill files.`),console.log()),w("Configuring Claude Code permissions (.claude/settings.json)..."),console.log(" Decipher QA runs background agents to monitor test validation."),console.log(" These permissions let those agents run CLI commands and read"),console.log(" screenshots without prompting you for approval each time.");let{added:i}=cn(e);if(i.length>0){console.log();for(let r of i)console.log(` + ${r}`);console.log(),A("Permissions added.")}else A("Permissions already configured.");console.log(),w("Checking .gitignore..."),console.log(" Decipher QA stores temporary screenshots in .decipher/ for"),console.log(" failure analysis. Adding it to .gitignore keeps these out of"),console.log(" your repo."),dn(e)?(console.log(),console.log(" + .decipher/"),console.log(),A("Added .decipher/ to .gitignore.")):A(".decipher/ already in .gitignore."),console.log(),w("Checking authentication...");let s=!0;if(v.default.existsSync(_))try{let r=v.default.readFileSync(_,"utf-8"),o=JSON.parse(r);if(o.token)try{(await fetch(`${$}/api/v1/whoami`,{headers:{Authorization:`Bearer ${o.token}`}})).ok?(A("Already authenticated."),s=!1):x(" Existing token is invalid or expired.")}catch{x(" Could not reach Decipher API to verify token.")}}catch{}if(s){console.log(),w("To authenticate, grab your API token from:"),console.log(" https://www.app.getdecipher.com/settings?tab=testing"),console.log();let r=Mt.default.createInterface({input:process.stdin,output:process.stdout}),o=await new Promise(a=>{r.question(" Paste your API token: ",l=>{r.close(),a(l.trim())})});if(!o)x(" No token provided. You can run `decipher-qa login` later.");else{let a=L.default.dirname(_);v.default.mkdirSync(a,{recursive:!0}),v.default.writeFileSync(_,JSON.stringify({token:o},null,2),"utf-8"),A("Token saved to "+_)}}console.log(),A("Decipher QA skills installed!"),console.log(),w("Available commands in Claude Code:"),console.log(" /decipher-qa create-test Create a new test end-to-end (name, identity, steps, validation)"),console.log(" /decipher-qa validate Run validation on an existing test"),console.log(" /decipher-qa test Manage QA tests (create, delete, list)"),console.log(" /decipher-qa identity Manage login identities (create, delete, list)"),console.log(" /decipher-qa steps Generate QA test steps by exploring your codebase"),console.log(" /decipher-qa cli CLI command reference and error handling guide"),console.log()}var Vt=new u("init").description("Scaffold Decipher QA skills into the nearest git repository").option("-f, --force","Overwrite existing skill files",!1).action(hn);var Ft=C(require("crypto"));var Ne=["goto","default","wait","assert","conditional","auth","refresh"];function un(n){let{type:e,description:t,data:i,metadata:s}=n;e==="goto"&&i&&!/^https?:\/\//i.test(i)&&x(`Data "${i}" doesn't look like a URL for a goto step`),e==="wait"&&i&&isNaN(Number(i))&&x(`Data "${i}" doesn't look numeric for a wait step`),e==="auth"&&i!=="magic_link"&&i!=="code"&&x(`Data for auth step should be "magic_link" or "code", got "${i}"`);let r={id:Ft.default.randomUUID(),type:e,description:e==="goto"&&!t?i:e==="wait"?"":t,data:i,setByUser:!0,originFrom:"agent"};if(s)try{r.metadata=JSON.parse(s)}catch{x(`Could not parse --metadata as JSON: ${s}`),r.metadata=s}console.log(JSON.stringify(r,null,2))}var pn=new u("format").description("Generate a validated JSON step object").requiredOption("--type <type>",`Step type: ${Ne.join(", ")}`).option("--description <text>","Step description","").option("--data <value>","Step data","").option("--metadata <json>","Optional JSON metadata").action(n=>{let e=n.type;Ne.includes(e)||(console.error(`Invalid step type "${e}". Must be one of: ${Ne.join(", ")}`),process.exit(1)),un({type:e,description:n.description,data:n.data,metadata:n.metadata})}),jt=new u("steps").description("QA test step utilities").addCommand(pn);async function m(n,e){let t=D(),i=e?.method??"GET",s=new URL(n,$);if(e?.query)for(let[o,a]of Object.entries(e.query))a!==void 0&&s.searchParams.set(o,a);let r;try{r=await fetch(s.toString(),{method:i,headers:{Authorization:`Bearer ${t.token}`,...e?.body!==void 0?{"Content-Type":"application/json"}:{}},body:e?.body!==void 0?JSON.stringify(e.body):void 0})}catch{console.error(JSON.stringify({error:"Could not connect to Decipher API. Check your network connection."})),process.exit(1)}if(!r.ok){let o;try{o=await r.json()}catch{o={error:{message:`HTTP ${r.status} ${r.statusText}`}}}console.error(JSON.stringify(o,null,2)),process.exit(1)}return await r.json()}var Ht=new u("create").description("Create a new test").requiredOption("--name <name>","Test name").requiredOption("--url <url>","URL the test runs against").requiredOption("--description <text>","Test description").option("--identity-id <id>","Identity ID for authentication").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={name:n.name,url:n.url,description:n.description};n.identityId!==void 0&&(e.identityId=Number(n.identityId)),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m("/api/v1/tests",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var Bt=new u("get").description("Get a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{query:{include:"steps,screenshots"}});console.log(JSON.stringify(e,null,2))});var Gt=new u("update").description("Update a test by ID").requiredOption("--id <id>","Test ID").option("--name <name>","New test name").option("--url <url>","New URL").option("--identity-id <id>","New identity ID (use 'null' to clear)").option("--description <text>","New description").option("--tags <tags>","Comma-separated tags").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.url!==void 0&&(e.url=n.url),n.identityId!==void 0&&(e.identityId=n.identityId==="null"?null:Number(n.identityId)),n.description!==void 0&&(e.description=n.description),n.tags!==void 0&&(e.tags=n.tags.split(",").map(i=>i.trim()));let t=await m(`/api/v1/tests/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var Wt=new u("delete").description("Delete a test by ID").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var Jt=new u("list").description("List all tests").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/tests",{query:{name:n.name,include:"steps"}});console.log(JSON.stringify(e,null,2))});var zt=new u("set-steps").description("Set the steps array for a test by ID").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(i){console.error(JSON.stringify({error:`Invalid steps JSON: ${i.message}`})),process.exit(1)}let t=await m(`/api/v1/tests/${n.id}/steps`,{method:"PUT",body:{steps:e}});console.log(JSON.stringify(t,null,2))});var Yt=new u("run-validation").description("Trigger a validation run for a test").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/run-validation`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Qt=new u("validation-progress").description("Check validation progress for a test").requiredOption("--id <id>","Test ID").option("--include-steps","Include steps and screenshot URLs in the response").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/validation-progress`,{query:n.includeSteps?{include:"steps"}:void 0});console.log(JSON.stringify(e,null,2))});var Kt=new u("start-run").description("Start a test run").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/runs`,{method:"POST"});console.log(JSON.stringify(e,null,2))});var Xt=new u("check-resumability").description("Check if a paused validation can be resumed or must be restarted").requiredOption("--id <id>","Test ID").requiredOption("--steps <json>","Steps as a JSON array string (with step IDs)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/check-resumability`,{method:"POST",body:{steps:e,...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var Zt=new u("resume-validation").description("Resume a paused validation run with optional edited steps").requiredOption("--id <id>","Test ID").option("--steps <json>","Edited steps as a JSON array string (with step IDs preserved)").option("--edited-step-ids <ids>","Comma-separated UUIDs of edited steps").action(async n=>{let e;if(n.steps)try{if(e=JSON.parse(n.steps),!Array.isArray(e))throw new Error("Steps must be a JSON array.")}catch(s){console.error(JSON.stringify({error:`Invalid steps JSON: ${s.message}`})),process.exit(1)}let t=n.editedStepIds?n.editedStepIds.split(",").map(s=>s.trim()):void 0,i=await m(`/api/v1/tests/${n.id}/resume-validation`,{method:"POST",body:{...e?{editedSteps:e}:{},...t?{editedStepIds:t}:{}}});console.log(JSON.stringify(i,null,2))});var ei=new u("step-logs").description("Get step logs with IDs, selectors, and execution metadata").requiredOption("--id <id>","Test ID").action(async n=>{let e=await m(`/api/v1/tests/${n.id}/step-logs`);console.log(JSON.stringify(e,null,2))});var ti=new u("test").description("Manage QA tests (create, get, update, delete, list, set-steps, run-validation, validation-progress, start-run, step-logs, check-resumability, resume-validation)").hook("preAction",()=>{D()}).addCommand(Ht).addCommand(Bt).addCommand(Gt).addCommand(Wt).addCommand(Jt).addCommand(zt).addCommand(Yt).addCommand(Qt).addCommand(Kt).addCommand(Xt).addCommand(Zt).addCommand(ei);var ii=new u("create").description("Create a new identity").requiredOption("--name <name>","Identity name").requiredOption("--username <username>","Login username or email").requiredOption("--password <password>","Login password").requiredOption("--url <url>","Login page URL").option("--description <text>","Identity description").action(async n=>{let e={name:n.name,username:n.username,password:n.password,url:n.url};n.description!==void 0&&(e.description=n.description);let t=await m("/api/v1/identities",{method:"POST",body:e});console.log(JSON.stringify(t,null,2))});var ni=new u("get").description("Get an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`);console.log(JSON.stringify(e,null,2))});var si=new u("update").description("Update an identity by ID").requiredOption("--id <id>","Identity ID").option("--name <name>","New identity name").option("--username <username>","New username").option("--password <password>","New password").option("--url <url>","New login URL").option("--description <text>","New description").action(async n=>{let e={};n.name!==void 0&&(e.name=n.name),n.username!==void 0&&(e.username=n.username),n.password!==void 0&&(e.password=n.password),n.url!==void 0&&(e.url=n.url),n.description!==void 0&&(e.description=n.description);let t=await m(`/api/v1/identities/${n.id}`,{method:"PATCH",body:e});console.log(JSON.stringify(t,null,2))});var ri=new u("delete").description("Delete an identity by ID").requiredOption("--id <id>","Identity ID").action(async n=>{let e=await m(`/api/v1/identities/${n.id}`,{method:"DELETE"});console.log(JSON.stringify(e,null,2))});var oi=new u("list").description("List all identities").option("--name <search>","Filter by name").action(async n=>{let e=await m("/api/v1/identities",{query:{name:n.name}});console.log(JSON.stringify(e,null,2))});var ai=new u("identity").description("Manage login identities (create, get, update, delete, list)").hook("preAction",()=>{D()}).addCommand(ii).addCommand(ni).addCommand(si).addCommand(ri).addCommand(oi);var Re=C(require("fs")),li=C(require("path")),ci=C(require("readline"));var mn="https://www.app.getdecipher.com/settings?tab=testing";async function fn(){H("Login"),w("To authenticate, grab your API token from:"),console.log(` ${mn}`),console.log();let n=ci.default.createInterface({input:process.stdin,output:process.stdout}),e=await new Promise(i=>{n.question(" Paste your API token: ",s=>{n.close(),i(s.trim())})});e||(P("No token provided. Aborting."),process.exit(1));let t=li.default.dirname(_);Re.default.mkdirSync(t,{recursive:!0}),Re.default.writeFileSync(_,JSON.stringify({token:e},null,2),"utf-8"),console.log(),A("Token saved to "+_),w("You can now use `decipher-qa test`, `decipher-qa steps`, etc."),console.log()}var di=new u("login").description("Authenticate with Decipher by saving your API token").action(fn);async function gn(){H("Who Am I");let n=D();w("Verifying token..."),console.log();let e;try{e=await fetch(`${$}/api/v1/whoami`,{headers:{Authorization:`Bearer ${n.token}`}})}catch{P("Could not connect to Decipher API."),w("Check your network connection and try again."),process.exit(1)}e.ok||(e.status===401?(P("Token is invalid, revoked, or expired."),w("Run `decipher-qa login` to re-authenticate.")):P(`Unexpected response: ${e.status} ${e.statusText}`),process.exit(1));let t=await e.json();A("Token is valid!"),console.log(),Te(),E("Key Name",t.key_name),E("Key Prefix",t.key_prefix),E("Organization",t.organization??"\u2014"),E("Scopes",t.scopes.join(", ")||"none"),E("Created By",t.created_by??"\u2014"),E("Created At",t.created_at),E("Expires At",t.expires_at??"never"),E("Last Used",t.last_used_at??"\u2014"),Te(),console.log()}var hi=new u("whoami").description("Display information about the current API token").action(gn);var Pe=C(require("fs")),De=C(require("path")),ui=C(require("crypto"));var pi=new u("screenshot").description("Download a Decipher screenshot to a temp file for viewing").requiredOption("--url <url>","The screenshot URL from decipher-qa CLI responses").action(async n=>{let e=n.url;try{let t=new URL(e);t.searchParams.set("format","raw");let i=await fetch(t.toString());i.ok||(console.error(JSON.stringify({error:`Failed to fetch screenshot: HTTP ${i.status} ${i.statusText}`})),process.exit(1));let s=i.headers.get("content-type")||"image/png",r=s.includes("webp")?".webp":s.includes("jpeg")||s.includes("jpg")?".jpg":".png",o=ui.default.createHash("md5").update(e).digest("hex").slice(0,8),a=ne(process.cwd())||process.cwd(),l=De.default.join(a,".decipher","screenshots");Pe.default.mkdirSync(l,{recursive:!0});let c=De.default.join(l,`decipher-screenshot-${o}${r}`),h=Buffer.from(await i.arrayBuffer());Pe.default.writeFileSync(c,h),console.log(c)}catch(t){let i=t instanceof Error?t.message:String(t);console.error(JSON.stringify({error:`Error fetching screenshot: ${i}`})),process.exit(1)}});var mi={name:"@decipher-sdk/decipher-qa",version:"0.0.5",bin:{"decipher-qa":"dist/index.js"},main:"./dist/index.js",files:["dist"],scripts:{build:"tsup","check-types":"tsc -p tsconfig.json --noEmit",clean:"rm -rf dist tsconfig.tsbuildinfo",dev:"tsup --watch"},author:"Decipher AI",license:"UNLICENSED",description:"Decipher QA Agent CLI \u2014 scaffolds Claude Code skills for QA test management",engines:{node:">=18"},dependencies:{chalk:"^4.1.2",commander:"^12.1.0"},devDependencies:{"@types/node":"^22.0.0",tsup:"^8.0.0",typescript:"^5.4.3"},keywords:[]};var q=new u;q.name(Qe).description("Decipher QA Agent CLI").version(mi.version,"-v, --version");q.addCommand(Vt);q.addCommand(jt);q.addCommand(ti);q.addCommand(ai);q.addCommand(di);q.addCommand(hi);q.addCommand(pi);q.parse();
|