domani-cli 0.4.56 → 0.4.57

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +18 -0
  2. package/dist/domani.cjs +201 -167
  3. package/package.json +1 -1
package/dist/domani.cjs CHANGED
@@ -1,215 +1,220 @@
1
1
  #!/usr/bin/env node
2
- "use strict";var wa=Object.create;var us=Object.defineProperty;var va=Object.getOwnPropertyDescriptor;var ka=Object.getOwnPropertyNames;var _a=Object.getPrototypeOf,ja=Object.prototype.hasOwnProperty;var Ie=(e,t)=>()=>(e&&(t=e(e=0)),t);var ct=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Vt=(e,t)=>{for(var i in t)us(e,i,{get:t[i],enumerable:!0})},xa=(e,t,i,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ka(t))!ja.call(e,n)&&n!==i&&us(e,n,{get:()=>t[n],enumerable:!(s=va(t,n))||s.enumerable});return e};var D=(e,t,i)=>(i=e!=null?wa(_a(e)):{},xa(t||!e||!e.__esModule?us(i,"default",{value:e,enumerable:!0}):i,e));var ti=ct(fs=>{var vi=class extends Error{constructor(t,i,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=i,this.exitCode=t,this.nestedError=void 0}},ms=class extends vi{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};fs.CommanderError=vi;fs.InvalidArgumentError=ms});var ki=ct(hs=>{var{InvalidArgumentError:Sa}=ti(),ps=class{constructor(t,i){switch(this.description=i||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(t,i){return i===this.defaultValue||!Array.isArray(i)?[t]:i.concat(t)}default(t,i){return this.defaultValue=t,this.defaultValueDescription=i,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(i,s)=>{if(!this.argChoices.includes(i))throw new Sa(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(i,s):i},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Ca(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}hs.Argument=ps;hs.humanReadableArgName=Ca});var ys=ct(bs=>{var{humanReadableArgName:Oa}=ki(),gs=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let i=t.commands.filter(n=>!n._hidden),s=t._getHelpCommand();return s&&!s._hidden&&i.push(s),this.sortSubcommands&&i.sort((n,r)=>n.name().localeCompare(r.name())),i}compareOptions(t,i){let s=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return s(t).localeCompare(s(i))}visibleOptions(t){let i=t.options.filter(n=>!n.hidden),s=t._getHelpOption();if(s&&!s.hidden){let n=s.short&&t._findOption(s.short),r=s.long&&t._findOption(s.long);!n&&!r?i.push(s):s.long&&!r?i.push(t.createOption(s.long,s.description)):s.short&&!n&&i.push(t.createOption(s.short,s.description))}return this.sortOptions&&i.sort(this.compareOptions),i}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let i=[];for(let s=t.parent;s;s=s.parent){let n=s.options.filter(r=>!r.hidden);i.push(...n)}return this.sortOptions&&i.sort(this.compareOptions),i}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(i=>{i.description=i.description||t._argsDescription[i.name()]||""}),t.registeredArguments.find(i=>i.description)?t.registeredArguments:[]}subcommandTerm(t){let i=t.registeredArguments.map(s=>Oa(s)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(i?" "+i:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,i){return i.visibleCommands(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleSubcommandTerm(i.subcommandTerm(n)))),0)}longestOptionTermLength(t,i){return i.visibleOptions(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleOptionTerm(i.optionTerm(n)))),0)}longestGlobalOptionTermLength(t,i){return i.visibleGlobalOptions(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleOptionTerm(i.optionTerm(n)))),0)}longestArgumentTermLength(t,i){return i.visibleArguments(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleArgumentTerm(i.argumentTerm(n)))),0)}commandUsage(t){let i=t._name;t._aliases[0]&&(i=i+"|"+t._aliases[0]);let s="";for(let n=t.parent;n;n=n.parent)s=n.name()+" "+s;return s+i+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let i=[];return t.argChoices&&i.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&i.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&i.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&i.push(`env: ${t.envVar}`),i.length>0?`${t.description} (${i.join(", ")})`:t.description}argumentDescription(t){let i=[];if(t.argChoices&&i.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&i.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),i.length>0){let s=`(${i.join(", ")})`;return t.description?`${t.description} ${s}`:s}return t.description}formatHelp(t,i){let s=i.padWidth(t,i),n=i.helpWidth??80;function r(g,b){return i.formatItem(g,s,b,i)}let o=[`${i.styleTitle("Usage:")} ${i.styleUsage(i.commandUsage(t))}`,""],a=i.commandDescription(t);a.length>0&&(o=o.concat([i.boxWrap(i.styleCommandDescription(a),n),""]));let l=i.visibleArguments(t).map(g=>r(i.styleArgumentTerm(i.argumentTerm(g)),i.styleArgumentDescription(i.argumentDescription(g))));l.length>0&&(o=o.concat([i.styleTitle("Arguments:"),...l,""]));let m=i.visibleOptions(t).map(g=>r(i.styleOptionTerm(i.optionTerm(g)),i.styleOptionDescription(i.optionDescription(g))));if(m.length>0&&(o=o.concat([i.styleTitle("Options:"),...m,""])),i.showGlobalOptions){let g=i.visibleGlobalOptions(t).map(b=>r(i.styleOptionTerm(i.optionTerm(b)),i.styleOptionDescription(i.optionDescription(b))));g.length>0&&(o=o.concat([i.styleTitle("Global Options:"),...g,""]))}let f=i.visibleCommands(t).map(g=>r(i.styleSubcommandTerm(i.subcommandTerm(g)),i.styleSubcommandDescription(i.subcommandDescription(g))));return f.length>0&&(o=o.concat([i.styleTitle("Commands:"),...f,""])),o.join(`
3
- `)}displayWidth(t){return Nn(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i==="[command]"?this.styleSubcommandText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleCommandText(i)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleSubcommandText(i)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,i){return Math.max(i.longestOptionTermLength(t,i),i.longestGlobalOptionTermLength(t,i),i.longestSubcommandTermLength(t,i),i.longestArgumentTermLength(t,i))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,i,s,n){let o=" ".repeat(2);if(!s)return o+t;let a=t.padEnd(i+t.length-n.displayWidth(t)),l=2,f=(this.helpWidth??80)-i-l-2,g;return f<this.minWidthToWrap||n.preformatted(s)?g=s:g=n.boxWrap(s,f).replace(/\n/g,`
2
+ "use strict";var Oa=Object.create;var ps=Object.defineProperty;var Ia=Object.getOwnPropertyDescriptor;var Ra=Object.getOwnPropertyNames;var Aa=Object.getPrototypeOf,Ea=Object.prototype.hasOwnProperty;var Ae=(e,t)=>()=>(e&&(t=e(e=0)),t);var ft=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ht=(e,t)=>{for(var i in t)ps(e,i,{get:t[i],enumerable:!0})},Ta=(e,t,i,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of Ra(t))!Ea.call(e,n)&&n!==i&&ps(e,n,{get:()=>t[n],enumerable:!(s=Ia(t,n))||s.enumerable});return e};var D=(e,t,i)=>(i=e!=null?Oa(Aa(e)):{},Ta(t||!e||!e.__esModule?ps(i,"default",{value:e,enumerable:!0}):i,e));var si=ft(gs=>{var xi=class extends Error{constructor(t,i,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=i,this.exitCode=t,this.nestedError=void 0}},hs=class extends xi{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}};gs.CommanderError=xi;gs.InvalidArgumentError=hs});var ji=ft(bs=>{var{InvalidArgumentError:Pa}=si(),ys=class{constructor(t,i){switch(this.description=i||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case"<":this.required=!0,this._name=t.slice(1,-1);break;case"[":this.required=!1,this._name=t.slice(1,-1);break;default:this.required=!0,this._name=t;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=!0,this._name=this._name.slice(0,-3))}name(){return this._name}_concatValue(t,i){return i===this.defaultValue||!Array.isArray(i)?[t]:i.concat(t)}default(t,i){return this.defaultValue=t,this.defaultValueDescription=i,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(i,s)=>{if(!this.argChoices.includes(i))throw new Pa(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(i,s):i},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}};function Da(e){let t=e.name()+(e.variadic===!0?"...":"");return e.required?"<"+t+">":"["+t+"]"}bs.Argument=ys;bs.humanReadableArgName=Da});var $s=ft(vs=>{var{humanReadableArgName:Na}=ji(),ws=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80}visibleCommands(t){let i=t.commands.filter(n=>!n._hidden),s=t._getHelpCommand();return s&&!s._hidden&&i.push(s),this.sortSubcommands&&i.sort((n,r)=>n.name().localeCompare(r.name())),i}compareOptions(t,i){let s=n=>n.short?n.short.replace(/^-/,""):n.long.replace(/^--/,"");return s(t).localeCompare(s(i))}visibleOptions(t){let i=t.options.filter(n=>!n.hidden),s=t._getHelpOption();if(s&&!s.hidden){let n=s.short&&t._findOption(s.short),r=s.long&&t._findOption(s.long);!n&&!r?i.push(s):s.long&&!r?i.push(t.createOption(s.long,s.description)):s.short&&!n&&i.push(t.createOption(s.short,s.description))}return this.sortOptions&&i.sort(this.compareOptions),i}visibleGlobalOptions(t){if(!this.showGlobalOptions)return[];let i=[];for(let s=t.parent;s;s=s.parent){let n=s.options.filter(r=>!r.hidden);i.push(...n)}return this.sortOptions&&i.sort(this.compareOptions),i}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(i=>{i.description=i.description||t._argsDescription[i.name()]||""}),t.registeredArguments.find(i=>i.description)?t.registeredArguments:[]}subcommandTerm(t){let i=t.registeredArguments.map(s=>Na(s)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(i?" "+i:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,i){return i.visibleCommands(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleSubcommandTerm(i.subcommandTerm(n)))),0)}longestOptionTermLength(t,i){return i.visibleOptions(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleOptionTerm(i.optionTerm(n)))),0)}longestGlobalOptionTermLength(t,i){return i.visibleGlobalOptions(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleOptionTerm(i.optionTerm(n)))),0)}longestArgumentTermLength(t,i){return i.visibleArguments(t).reduce((s,n)=>Math.max(s,this.displayWidth(i.styleArgumentTerm(i.argumentTerm(n)))),0)}commandUsage(t){let i=t._name;t._aliases[0]&&(i=i+"|"+t._aliases[0]);let s="";for(let n=t.parent;n;n=n.parent)s=n.name()+" "+s;return s+i+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let i=[];return t.argChoices&&i.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&i.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&i.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&i.push(`env: ${t.envVar}`),i.length>0?`${t.description} (${i.join(", ")})`:t.description}argumentDescription(t){let i=[];if(t.argChoices&&i.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&i.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),i.length>0){let s=`(${i.join(", ")})`;return t.description?`${t.description} ${s}`:s}return t.description}formatHelp(t,i){let s=i.padWidth(t,i),n=i.helpWidth??80;function r(g,y){return i.formatItem(g,s,y,i)}let o=[`${i.styleTitle("Usage:")} ${i.styleUsage(i.commandUsage(t))}`,""],a=i.commandDescription(t);a.length>0&&(o=o.concat([i.boxWrap(i.styleCommandDescription(a),n),""]));let l=i.visibleArguments(t).map(g=>r(i.styleArgumentTerm(i.argumentTerm(g)),i.styleArgumentDescription(i.argumentDescription(g))));l.length>0&&(o=o.concat([i.styleTitle("Arguments:"),...l,""]));let f=i.visibleOptions(t).map(g=>r(i.styleOptionTerm(i.optionTerm(g)),i.styleOptionDescription(i.optionDescription(g))));if(f.length>0&&(o=o.concat([i.styleTitle("Options:"),...f,""])),i.showGlobalOptions){let g=i.visibleGlobalOptions(t).map(y=>r(i.styleOptionTerm(i.optionTerm(y)),i.styleOptionDescription(i.optionDescription(y))));g.length>0&&(o=o.concat([i.styleTitle("Global Options:"),...g,""]))}let m=i.visibleCommands(t).map(g=>r(i.styleSubcommandTerm(i.subcommandTerm(g)),i.styleSubcommandDescription(i.subcommandDescription(g))));return m.length>0&&(o=o.concat([i.styleTitle("Commands:"),...m,""])),o.join(`
3
+ `)}displayWidth(t){return Mn(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i==="[command]"?this.styleSubcommandText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleCommandText(i)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(i=>i==="[options]"?this.styleOptionText(i):i[0]==="["||i[0]==="<"?this.styleArgumentText(i):this.styleSubcommandText(i)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,i){return Math.max(i.longestOptionTermLength(t,i),i.longestGlobalOptionTermLength(t,i),i.longestSubcommandTermLength(t,i),i.longestArgumentTermLength(t,i))}preformatted(t){return/\n[^\S\r\n]/.test(t)}formatItem(t,i,s,n){let o=" ".repeat(2);if(!s)return o+t;let a=t.padEnd(i+t.length-n.displayWidth(t)),l=2,m=(this.helpWidth??80)-i-l-2,g;return m<this.minWidthToWrap||n.preformatted(s)?g=s:g=n.boxWrap(s,m).replace(/\n/g,`
4
4
  `+" ".repeat(i+l)),o+a+" ".repeat(l)+g.replace(/\n/g,`
5
- ${o}`)}boxWrap(t,i){if(i<this.minWidthToWrap)return t;let s=t.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,r=[];return s.forEach(o=>{let a=o.match(n);if(a===null){r.push("");return}let l=[a.shift()],m=this.displayWidth(l[0]);a.forEach(f=>{let g=this.displayWidth(f);if(m+g<=i){l.push(f),m+=g;return}r.push(l.join(""));let b=f.trimStart();l=[b],m=this.displayWidth(b)}),r.push(l.join(""))}),r.join(`
6
- `)}};function Nn(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}bs.Help=gs;bs.stripColor=Nn});var ks=ct(vs=>{var{InvalidArgumentError:Ia}=ti(),$s=class{constructor(t,i){this.flags=t,this.description=i||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let s=Ra(t);this.short=s.shortFlag,this.long=s.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(t,i){return this.defaultValue=t,this.defaultValueDescription=i,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let i=t;return typeof t=="string"&&(i={[t]:!0}),this.implied=Object.assign(this.implied||{},i),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_concatValue(t,i){return i===this.defaultValue||!Array.isArray(i)?[t]:i.concat(t)}choices(t){return this.argChoices=t.slice(),this.parseArg=(i,s)=>{if(!this.argChoices.includes(i))throw new Ia(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(i,s):i},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?Un(this.name().replace(/^no-/,"")):Un(this.name())}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},ws=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(i=>{i.negate?this.negativeOptions.set(i.attributeName(),i):this.positiveOptions.set(i.attributeName(),i)}),this.negativeOptions.forEach((i,s)=>{this.positiveOptions.has(s)&&this.dualOptions.add(s)})}valueFromOption(t,i){let s=i.attributeName();if(!this.dualOptions.has(s))return!0;let n=this.negativeOptions.get(s).presetArg,r=n!==void 0?n:!1;return i.negate===(r===t)}};function Un(e){return e.split("-").reduce((t,i)=>t+i[0].toUpperCase()+i.slice(1))}function Ra(e){let t,i,s=/^-[^-]$/,n=/^--[^-]/,r=e.split(/[ |,]+/).concat("guard");if(s.test(r[0])&&(t=r.shift()),n.test(r[0])&&(i=r.shift()),!t&&s.test(r[0])&&(t=r.shift()),!t&&n.test(r[0])&&(t=i,i=r.shift()),r[0].startsWith("-")){let o=r[0],a=`option creation failed due to '${o}' in option flags '${e}'`;throw/^-[^-][^-]/.test(o)?new Error(`${a}
5
+ ${o}`)}boxWrap(t,i){if(i<this.minWidthToWrap)return t;let s=t.split(/\r\n|\n/),n=/[\s]*[^\s]+/g,r=[];return s.forEach(o=>{let a=o.match(n);if(a===null){r.push("");return}let l=[a.shift()],f=this.displayWidth(l[0]);a.forEach(m=>{let g=this.displayWidth(m);if(f+g<=i){l.push(m),f+=g;return}r.push(l.join(""));let y=m.trimStart();l=[y],f=this.displayWidth(y)}),r.push(l.join(""))}),r.join(`
6
+ `)}};function Mn(e){let t=/\x1b\[\d*(;\d*)*m/g;return e.replace(t,"")}vs.Help=ws;vs.stripColor=Mn});var js=ft(xs=>{var{InvalidArgumentError:Ua}=si(),ks=class{constructor(t,i){this.flags=t,this.description=i||"",this.required=t.includes("<"),this.optional=t.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test(t),this.mandatory=!1;let s=qa(t);this.short=s.shortFlag,this.long=s.longFlag,this.negate=!1,this.long&&(this.negate=this.long.startsWith("--no-")),this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default(t,i){return this.defaultValue=t,this.defaultValueDescription=i,this}preset(t){return this.presetArg=t,this}conflicts(t){return this.conflictsWith=this.conflictsWith.concat(t),this}implies(t){let i=t;return typeof t=="string"&&(i={[t]:!0}),this.implied=Object.assign(this.implied||{},i),this}env(t){return this.envVar=t,this}argParser(t){return this.parseArg=t,this}makeOptionMandatory(t=!0){return this.mandatory=!!t,this}hideHelp(t=!0){return this.hidden=!!t,this}_concatValue(t,i){return i===this.defaultValue||!Array.isArray(i)?[t]:i.concat(t)}choices(t){return this.argChoices=t.slice(),this.parseArg=(i,s)=>{if(!this.argChoices.includes(i))throw new Ua(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(i,s):i},this}name(){return this.long?this.long.replace(/^--/,""):this.short.replace(/^-/,"")}attributeName(){return this.negate?Ln(this.name().replace(/^no-/,"")):Ln(this.name())}is(t){return this.short===t||this.long===t}isBoolean(){return!this.required&&!this.optional&&!this.negate}},_s=class{constructor(t){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,t.forEach(i=>{i.negate?this.negativeOptions.set(i.attributeName(),i):this.positiveOptions.set(i.attributeName(),i)}),this.negativeOptions.forEach((i,s)=>{this.positiveOptions.has(s)&&this.dualOptions.add(s)})}valueFromOption(t,i){let s=i.attributeName();if(!this.dualOptions.has(s))return!0;let n=this.negativeOptions.get(s).presetArg,r=n!==void 0?n:!1;return i.negate===(r===t)}};function Ln(e){return e.split("-").reduce((t,i)=>t+i[0].toUpperCase()+i.slice(1))}function qa(e){let t,i,s=/^-[^-]$/,n=/^--[^-]/,r=e.split(/[ |,]+/).concat("guard");if(s.test(r[0])&&(t=r.shift()),n.test(r[0])&&(i=r.shift()),!t&&s.test(r[0])&&(t=r.shift()),!t&&n.test(r[0])&&(t=i,i=r.shift()),r[0].startsWith("-")){let o=r[0],a=`option creation failed due to '${o}' in option flags '${e}'`;throw/^-[^-][^-]/.test(o)?new Error(`${a}
7
7
  - a short flag is a single dash and a single character
8
8
  - either use a single dash and a single character (for a short flag)
9
9
  - or use a double dash for a long option (and can have two, like '--ws, --workspace')`):s.test(o)?new Error(`${a}
10
10
  - too many short flags`):n.test(o)?new Error(`${a}
11
11
  - too many long flags`):new Error(`${a}
12
- - unrecognised flag format`)}if(t===void 0&&i===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:i}}vs.Option=$s;vs.DualOptions=ws});var Fn=ct(qn=>{function Aa(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let i=[];for(let s=0;s<=e.length;s++)i[s]=[s];for(let s=0;s<=t.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let n=1;n<=e.length;n++){let r=1;e[n-1]===t[s-1]?r=0:r=1,i[n][s]=Math.min(i[n-1][s]+1,i[n][s-1]+1,i[n-1][s-1]+r),n>1&&s>1&&e[n-1]===t[s-2]&&e[n-2]===t[s-1]&&(i[n][s]=Math.min(i[n][s],i[n-2][s-2]+1))}return i[e.length][t.length]}function Ea(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let i=e.startsWith("--");i&&(e=e.slice(2),t=t.map(o=>o.slice(2)));let s=[],n=3,r=.4;return t.forEach(o=>{if(o.length<=1)return;let a=Aa(e,o),l=Math.max(e.length,o.length);(l-a)/l>r&&(a<n?(n=a,s=[o]):a===n&&s.push(o))}),s.sort((o,a)=>o.localeCompare(a)),i&&(s=s.map(o=>`--${o}`)),s.length>1?`
12
+ - unrecognised flag format`)}if(t===void 0&&i===void 0)throw new Error(`option creation failed due to no flags found in '${e}'.`);return{shortFlag:t,longFlag:i}}xs.Option=ks;xs.DualOptions=_s});var Wn=ft(Vn=>{function Fa(e,t){if(Math.abs(e.length-t.length)>3)return Math.max(e.length,t.length);let i=[];for(let s=0;s<=e.length;s++)i[s]=[s];for(let s=0;s<=t.length;s++)i[0][s]=s;for(let s=1;s<=t.length;s++)for(let n=1;n<=e.length;n++){let r=1;e[n-1]===t[s-1]?r=0:r=1,i[n][s]=Math.min(i[n-1][s]+1,i[n][s-1]+1,i[n-1][s-1]+r),n>1&&s>1&&e[n-1]===t[s-2]&&e[n-2]===t[s-1]&&(i[n][s]=Math.min(i[n][s],i[n-2][s-2]+1))}return i[e.length][t.length]}function Ma(e,t){if(!t||t.length===0)return"";t=Array.from(new Set(t));let i=e.startsWith("--");i&&(e=e.slice(2),t=t.map(o=>o.slice(2)));let s=[],n=3,r=.4;return t.forEach(o=>{if(o.length<=1)return;let a=Fa(e,o),l=Math.max(e.length,o.length);(l-a)/l>r&&(a<n?(n=a,s=[o]):a===n&&s.push(o))}),s.sort((o,a)=>o.localeCompare(a)),i&&(s=s.map(o=>`--${o}`)),s.length>1?`
13
13
  (Did you mean one of ${s.join(", ")}?)`:s.length===1?`
14
- (Did you mean ${s[0]}?)`:""}qn.suggestSimilar=Ea});var Wn=ct(Cs=>{var Ta=require("node:events").EventEmitter,_s=require("node:child_process"),ut=require("node:path"),_i=require("node:fs"),ne=require("node:process"),{Argument:Pa,humanReadableArgName:Da}=ki(),{CommanderError:js}=ti(),{Help:Na,stripColor:Ua}=ys(),{Option:Mn,DualOptions:qa}=ks(),{suggestSimilar:Ln}=Fn(),xs=class e extends Ta{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:i=>ne.stdout.write(i),writeErr:i=>ne.stderr.write(i),outputError:(i,s)=>s(i),getOutHelpWidth:()=>ne.stdout.isTTY?ne.stdout.columns:void 0,getErrHelpWidth:()=>ne.stderr.isTTY?ne.stderr.columns:void 0,getOutHasColors:()=>Ss()??(ne.stdout.isTTY&&ne.stdout.hasColors?.()),getErrHasColors:()=>Ss()??(ne.stderr.isTTY&&ne.stderr.hasColors?.()),stripColor:i=>Ua(i)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let i=this;i;i=i.parent)t.push(i);return t}command(t,i,s){let n=i,r=s;typeof n=="object"&&n!==null&&(r=n,n=null),r=r||{};let[,o,a]=t.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return n&&(l.description(n),l._executableHandler=!0),r.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(r.noHelp||r.hidden),l._executableFile=r.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),n?this:l}createCommand(t){return new e(t)}createHelp(){return Object.assign(new Na,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,t),this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,i){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
15
- - specify the name in Command constructor or using .name()`);return i=i||{},i.isDefault&&(this._defaultCommandName=t._name),(i.noHelp||i.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,i){return new Pa(t,i)}argument(t,i,s,n){let r=this.createArgument(t,i);return typeof s=="function"?r.default(n).argParser(s):r.default(s),this.addArgument(r),this}arguments(t){return t.trim().split(/ +/).forEach(i=>{this.argument(i)}),this}addArgument(t){let i=this.registeredArguments.slice(-1)[0];if(i&&i.variadic)throw new Error(`only the last argument can be variadic '${i.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,i){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,this;t=t??"help [command]";let[,s,n]=t.match(/([^ ]+) *(.*)/),r=i??"display help for command",o=this.createCommand(s);return o.helpOption(!1),n&&o.arguments(n),r&&o.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(t,i){return typeof t!="object"?(this.helpCommand(t,i),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(t,i){let s=["preSubcommand","preAction","postAction"];if(!s.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
16
- Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(i):this._lifeCycleHooks[t]=[i],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=i=>{if(i.code!=="commander.executeSubCommandAsync")throw i},this}_exit(t,i,s){this._exitCallback&&this._exitCallback(new js(t,i,s)),ne.exit(t)}action(t){let i=s=>{let n=this.registeredArguments.length,r=s.slice(0,n);return this._storeOptionsAsProperties?r[n]=this:r[n]=this.opts(),r.push(this),t.apply(this,r)};return this._actionHandler=i,this}createOption(t,i){return new Mn(t,i)}_callParseArg(t,i,s,n){try{return t.parseArg(i,s)}catch(r){if(r.code==="commander.invalidArgument"){let o=`${n} ${r.message}`;this.error(o,{exitCode:r.exitCode,code:r.code})}throw r}}_registerOption(t){let i=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(i){let s=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${s}'
17
- - already used by option '${i.flags}'`)}this.options.push(t)}_registerCommand(t){let i=n=>[n.name()].concat(n.aliases()),s=i(t).find(n=>this._findCommand(n));if(s){let n=i(this._findCommand(s)).join("|"),r=i(t).join("|");throw new Error(`cannot add command '${r}' as already have command '${n}'`)}this.commands.push(t)}addOption(t){this._registerOption(t);let i=t.name(),s=t.attributeName();if(t.negate){let r=t.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(s,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(s,t.defaultValue,"default");let n=(r,o,a)=>{r==null&&t.presetArg!==void 0&&(r=t.presetArg);let l=this.getOptionValue(s);r!==null&&t.parseArg?r=this._callParseArg(t,r,l,o):r!==null&&t.variadic&&(r=t._concatValue(r,l)),r==null&&(t.negate?r=!1:t.isBoolean()||t.optional?r=!0:r=""),this.setOptionValueWithSource(s,r,a)};return this.on("option:"+i,r=>{let o=`error: option '${t.flags}' argument '${r}' is invalid.`;n(r,o,"cli")}),t.envVar&&this.on("optionEnv:"+i,r=>{let o=`error: option '${t.flags}' value '${r}' from env '${t.envVar}' is invalid.`;n(r,o,"env")}),this}_optionEx(t,i,s,n,r){if(typeof i=="object"&&i instanceof Mn)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(i,s);if(o.makeOptionMandatory(!!t.mandatory),typeof n=="function")o.default(r).argParser(n);else if(n instanceof RegExp){let a=n;n=(l,m)=>{let f=a.exec(l);return f?f[0]:m},o.default(r).argParser(n)}else o.default(n);return this.addOption(o)}option(t,i,s,n){return this._optionEx({},t,i,s,n)}requiredOption(t,i,s,n){return this._optionEx({mandatory:!0},t,i,s,n)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(t=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,i){return this.setOptionValueWithSource(t,i,void 0)}setOptionValueWithSource(t,i,s){return this._storeOptionsAsProperties?this[t]=i:this._optionValues[t]=i,this._optionValueSources[t]=s,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let i;return this._getCommandAndAncestors().forEach(s=>{s.getOptionValueSource(t)!==void 0&&(i=s.getOptionValueSource(t))}),i}_prepareUserArgs(t,i){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(i=i||{},t===void 0&&i.from===void 0){ne.versions?.electron&&(i.from="electron");let n=ne.execArgv??[];(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))&&(i.from="eval")}t===void 0&&(t=ne.argv),this.rawArgs=t.slice();let s;switch(i.from){case void 0:case"node":this._scriptPath=t[1],s=t.slice(2);break;case"electron":ne.defaultApp?(this._scriptPath=t[1],s=t.slice(2)):s=t.slice(1);break;case"user":s=t.slice(0);break;case"eval":s=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${i.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",s}parse(t,i){this._prepareForParse();let s=this._prepareUserArgs(t,i);return this._parseCommand([],s),this}async parseAsync(t,i){this._prepareForParse();let s=this._prepareUserArgs(t,i);return await this._parseCommand([],s),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
18
- - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,i,s){if(_i.existsSync(t))return;let n=i?`searched for local subcommand relative to directory '${i}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",r=`'${t}' does not exist
14
+ (Did you mean ${s[0]}?)`:""}Vn.suggestSimilar=Ma});var Gn=ft(Rs=>{var La=require("node:events").EventEmitter,Ss=require("node:child_process"),pt=require("node:path"),Si=require("node:fs"),ne=require("node:process"),{Argument:Va,humanReadableArgName:Wa}=ji(),{CommanderError:Cs}=si(),{Help:Ha,stripColor:Ja}=$s(),{Option:Hn,DualOptions:Ba}=js(),{suggestSimilar:Jn}=Wn(),Os=class e extends La{constructor(t){super(),this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!1,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=t||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._savedState=null,this._outputConfiguration={writeOut:i=>ne.stdout.write(i),writeErr:i=>ne.stderr.write(i),outputError:(i,s)=>s(i),getOutHelpWidth:()=>ne.stdout.isTTY?ne.stdout.columns:void 0,getErrHelpWidth:()=>ne.stderr.isTTY?ne.stderr.columns:void 0,getOutHasColors:()=>Is()??(ne.stdout.isTTY&&ne.stdout.hasColors?.()),getErrHasColors:()=>Is()??(ne.stderr.isTTY&&ne.stderr.hasColors?.()),stripColor:i=>Ja(i)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings(t){return this._outputConfiguration=t._outputConfiguration,this._helpOption=t._helpOption,this._helpCommand=t._helpCommand,this._helpConfiguration=t._helpConfiguration,this._exitCallback=t._exitCallback,this._storeOptionsAsProperties=t._storeOptionsAsProperties,this._combineFlagAndOptionalValue=t._combineFlagAndOptionalValue,this._allowExcessArguments=t._allowExcessArguments,this._enablePositionalOptions=t._enablePositionalOptions,this._showHelpAfterError=t._showHelpAfterError,this._showSuggestionAfterError=t._showSuggestionAfterError,this}_getCommandAndAncestors(){let t=[];for(let i=this;i;i=i.parent)t.push(i);return t}command(t,i,s){let n=i,r=s;typeof n=="object"&&n!==null&&(r=n,n=null),r=r||{};let[,o,a]=t.match(/([^ ]+) *(.*)/),l=this.createCommand(o);return n&&(l.description(n),l._executableHandler=!0),r.isDefault&&(this._defaultCommandName=l._name),l._hidden=!!(r.noHelp||r.hidden),l._executableFile=r.executableFile||null,a&&l.arguments(a),this._registerCommand(l),l.parent=this,l.copyInheritedSettings(this),n?this:l}createCommand(t){return new e(t)}createHelp(){return Object.assign(new Ha,this.configureHelp())}configureHelp(t){return t===void 0?this._helpConfiguration:(this._helpConfiguration=t,this)}configureOutput(t){return t===void 0?this._outputConfiguration:(Object.assign(this._outputConfiguration,t),this)}showHelpAfterError(t=!0){return typeof t!="string"&&(t=!!t),this._showHelpAfterError=t,this}showSuggestionAfterError(t=!0){return this._showSuggestionAfterError=!!t,this}addCommand(t,i){if(!t._name)throw new Error(`Command passed to .addCommand() must have a name
15
+ - specify the name in Command constructor or using .name()`);return i=i||{},i.isDefault&&(this._defaultCommandName=t._name),(i.noHelp||i.hidden)&&(t._hidden=!0),this._registerCommand(t),t.parent=this,t._checkForBrokenPassThrough(),this}createArgument(t,i){return new Va(t,i)}argument(t,i,s,n){let r=this.createArgument(t,i);return typeof s=="function"?r.default(n).argParser(s):r.default(s),this.addArgument(r),this}arguments(t){return t.trim().split(/ +/).forEach(i=>{this.argument(i)}),this}addArgument(t){let i=this.registeredArguments.slice(-1)[0];if(i&&i.variadic)throw new Error(`only the last argument can be variadic '${i.name()}'`);if(t.required&&t.defaultValue!==void 0&&t.parseArg===void 0)throw new Error(`a default value for a required argument is never used: '${t.name()}'`);return this.registeredArguments.push(t),this}helpCommand(t,i){if(typeof t=="boolean")return this._addImplicitHelpCommand=t,this;t=t??"help [command]";let[,s,n]=t.match(/([^ ]+) *(.*)/),r=i??"display help for command",o=this.createCommand(s);return o.helpOption(!1),n&&o.arguments(n),r&&o.description(r),this._addImplicitHelpCommand=!0,this._helpCommand=o,this}addHelpCommand(t,i){return typeof t!="object"?(this.helpCommand(t,i),this):(this._addImplicitHelpCommand=!0,this._helpCommand=t,this)}_getHelpCommand(){return this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))?(this._helpCommand===void 0&&this.helpCommand(void 0,void 0),this._helpCommand):null}hook(t,i){let s=["preSubcommand","preAction","postAction"];if(!s.includes(t))throw new Error(`Unexpected value for event passed to hook : '${t}'.
16
+ Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[t]?this._lifeCycleHooks[t].push(i):this._lifeCycleHooks[t]=[i],this}exitOverride(t){return t?this._exitCallback=t:this._exitCallback=i=>{if(i.code!=="commander.executeSubCommandAsync")throw i},this}_exit(t,i,s){this._exitCallback&&this._exitCallback(new Cs(t,i,s)),ne.exit(t)}action(t){let i=s=>{let n=this.registeredArguments.length,r=s.slice(0,n);return this._storeOptionsAsProperties?r[n]=this:r[n]=this.opts(),r.push(this),t.apply(this,r)};return this._actionHandler=i,this}createOption(t,i){return new Hn(t,i)}_callParseArg(t,i,s,n){try{return t.parseArg(i,s)}catch(r){if(r.code==="commander.invalidArgument"){let o=`${n} ${r.message}`;this.error(o,{exitCode:r.exitCode,code:r.code})}throw r}}_registerOption(t){let i=t.short&&this._findOption(t.short)||t.long&&this._findOption(t.long);if(i){let s=t.long&&this._findOption(t.long)?t.long:t.short;throw new Error(`Cannot add option '${t.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${s}'
17
+ - already used by option '${i.flags}'`)}this.options.push(t)}_registerCommand(t){let i=n=>[n.name()].concat(n.aliases()),s=i(t).find(n=>this._findCommand(n));if(s){let n=i(this._findCommand(s)).join("|"),r=i(t).join("|");throw new Error(`cannot add command '${r}' as already have command '${n}'`)}this.commands.push(t)}addOption(t){this._registerOption(t);let i=t.name(),s=t.attributeName();if(t.negate){let r=t.long.replace(/^--no-/,"--");this._findOption(r)||this.setOptionValueWithSource(s,t.defaultValue===void 0?!0:t.defaultValue,"default")}else t.defaultValue!==void 0&&this.setOptionValueWithSource(s,t.defaultValue,"default");let n=(r,o,a)=>{r==null&&t.presetArg!==void 0&&(r=t.presetArg);let l=this.getOptionValue(s);r!==null&&t.parseArg?r=this._callParseArg(t,r,l,o):r!==null&&t.variadic&&(r=t._concatValue(r,l)),r==null&&(t.negate?r=!1:t.isBoolean()||t.optional?r=!0:r=""),this.setOptionValueWithSource(s,r,a)};return this.on("option:"+i,r=>{let o=`error: option '${t.flags}' argument '${r}' is invalid.`;n(r,o,"cli")}),t.envVar&&this.on("optionEnv:"+i,r=>{let o=`error: option '${t.flags}' value '${r}' from env '${t.envVar}' is invalid.`;n(r,o,"env")}),this}_optionEx(t,i,s,n,r){if(typeof i=="object"&&i instanceof Hn)throw new Error("To add an Option object use addOption() instead of option() or requiredOption()");let o=this.createOption(i,s);if(o.makeOptionMandatory(!!t.mandatory),typeof n=="function")o.default(r).argParser(n);else if(n instanceof RegExp){let a=n;n=(l,f)=>{let m=a.exec(l);return m?m[0]:f},o.default(r).argParser(n)}else o.default(n);return this.addOption(o)}option(t,i,s,n){return this._optionEx({},t,i,s,n)}requiredOption(t,i,s,n){return this._optionEx({mandatory:!0},t,i,s,n)}combineFlagAndOptionalValue(t=!0){return this._combineFlagAndOptionalValue=!!t,this}allowUnknownOption(t=!0){return this._allowUnknownOption=!!t,this}allowExcessArguments(t=!0){return this._allowExcessArguments=!!t,this}enablePositionalOptions(t=!0){return this._enablePositionalOptions=!!t,this}passThroughOptions(t=!0){return this._passThroughOptions=!!t,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw new Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties(t=!0){if(this.options.length)throw new Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw new Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!t,this}getOptionValue(t){return this._storeOptionsAsProperties?this[t]:this._optionValues[t]}setOptionValue(t,i){return this.setOptionValueWithSource(t,i,void 0)}setOptionValueWithSource(t,i,s){return this._storeOptionsAsProperties?this[t]=i:this._optionValues[t]=i,this._optionValueSources[t]=s,this}getOptionValueSource(t){return this._optionValueSources[t]}getOptionValueSourceWithGlobals(t){let i;return this._getCommandAndAncestors().forEach(s=>{s.getOptionValueSource(t)!==void 0&&(i=s.getOptionValueSource(t))}),i}_prepareUserArgs(t,i){if(t!==void 0&&!Array.isArray(t))throw new Error("first parameter to parse must be array or undefined");if(i=i||{},t===void 0&&i.from===void 0){ne.versions?.electron&&(i.from="electron");let n=ne.execArgv??[];(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))&&(i.from="eval")}t===void 0&&(t=ne.argv),this.rawArgs=t.slice();let s;switch(i.from){case void 0:case"node":this._scriptPath=t[1],s=t.slice(2);break;case"electron":ne.defaultApp?(this._scriptPath=t[1],s=t.slice(2)):s=t.slice(1);break;case"user":s=t.slice(0);break;case"eval":s=t.slice(1);break;default:throw new Error(`unexpected parse option { from: '${i.from}' }`)}return!this._name&&this._scriptPath&&this.nameFromFilename(this._scriptPath),this._name=this._name||"program",s}parse(t,i){this._prepareForParse();let s=this._prepareUserArgs(t,i);return this._parseCommand([],s),this}async parseAsync(t,i){this._prepareForParse();let s=this._prepareUserArgs(t,i);return await this._parseCommand([],s),this}_prepareForParse(){this._savedState===null?this.saveStateBeforeParse():this.restoreStateBeforeParse()}saveStateBeforeParse(){this._savedState={_name:this._name,_optionValues:{...this._optionValues},_optionValueSources:{...this._optionValueSources}}}restoreStateBeforeParse(){if(this._storeOptionsAsProperties)throw new Error(`Can not call parse again when storeOptionsAsProperties is true.
18
+ - either make a new Command for each call to parse, or stop storing options as properties`);this._name=this._savedState._name,this._scriptPath=null,this.rawArgs=[],this._optionValues={...this._savedState._optionValues},this._optionValueSources={...this._savedState._optionValueSources},this.args=[],this.processedArgs=[]}_checkForMissingExecutable(t,i,s){if(Si.existsSync(t))return;let n=i?`searched for local subcommand relative to directory '${i}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",r=`'${t}' does not exist
19
19
  - if '${s}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
20
20
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
21
- - ${n}`;throw new Error(r)}_executeSubCommand(t,i){i=i.slice();let s=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function r(f,g){let b=ut.resolve(f,g);if(_i.existsSync(b))return b;if(n.includes(ut.extname(g)))return;let k=n.find(v=>_i.existsSync(`${b}${v}`));if(k)return`${b}${k}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let f;try{f=_i.realpathSync(this._scriptPath)}catch{f=this._scriptPath}a=ut.resolve(ut.dirname(f),a)}if(a){let f=r(a,o);if(!f&&!t._executableFile&&this._scriptPath){let g=ut.basename(this._scriptPath,ut.extname(this._scriptPath));g!==this._name&&(f=r(a,`${g}-${t._name}`))}o=f||o}s=n.includes(ut.extname(o));let l;ne.platform!=="win32"?s?(i.unshift(o),i=Vn(ne.execArgv).concat(i),l=_s.spawn(ne.argv[0],i,{stdio:"inherit"})):l=_s.spawn(o,i,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,t._name),i.unshift(o),i=Vn(ne.execArgv).concat(i),l=_s.spawn(ne.execPath,i,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(g=>{ne.on(g,()=>{l.killed===!1&&l.exitCode===null&&l.kill(g)})});let m=this._exitCallback;l.on("close",f=>{f=f??1,m?m(new js(f,"commander.executeSubCommandAsync","(close)")):ne.exit(f)}),l.on("error",f=>{if(f.code==="ENOENT")this._checkForMissingExecutable(o,a,t._name);else if(f.code==="EACCES")throw new Error(`'${o}' not executable`);if(!m)ne.exit(1);else{let g=new js(1,"commander.executeSubCommandAsync","(error)");g.nestedError=f,m(g)}}),this.runningCommand=l}_dispatchSubcommand(t,i,s){let n=this._findCommand(t);n||this.help({error:!0}),n._prepareForParse();let r;return r=this._chainOrCallSubCommandHook(r,n,"preSubcommand"),r=this._chainOrCall(r,()=>{if(n._executableHandler)this._executeSubCommand(n,i.concat(s));else return n._parseCommand(i,s)}),r}_dispatchHelpCommand(t){t||this.help();let i=this._findCommand(t);return i&&!i._executableHandler&&i.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,i)=>{t.required&&this.args[i]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(s,n,r)=>{let o=n;if(n!==null&&s.parseArg){let a=`error: command-argument value '${n}' is invalid for argument '${s.name()}'.`;o=this._callParseArg(s,n,r,a)}return o};this._checkNumberOfArguments();let i=[];this.registeredArguments.forEach((s,n)=>{let r=s.defaultValue;s.variadic?n<this.args.length?(r=this.args.slice(n),s.parseArg&&(r=r.reduce((o,a)=>t(s,a,o),s.defaultValue))):r===void 0&&(r=[]):n<this.args.length&&(r=this.args[n],s.parseArg&&(r=t(s,r,s.defaultValue))),i[n]=r}),this.processedArgs=i}_chainOrCall(t,i){return t&&t.then&&typeof t.then=="function"?t.then(()=>i()):i()}_chainOrCallHooks(t,i){let s=t,n=[];return this._getCommandAndAncestors().reverse().filter(r=>r._lifeCycleHooks[i]!==void 0).forEach(r=>{r._lifeCycleHooks[i].forEach(o=>{n.push({hookedCommand:r,callback:o})})}),i==="postAction"&&n.reverse(),n.forEach(r=>{s=this._chainOrCall(s,()=>r.callback(r.hookedCommand,this))}),s}_chainOrCallSubCommandHook(t,i,s){let n=t;return this._lifeCycleHooks[s]!==void 0&&this._lifeCycleHooks[s].forEach(r=>{n=this._chainOrCall(n,()=>r(this,i))}),n}_parseCommand(t,i){let s=this.parseOptions(i);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(s.operands),i=s.unknown,this.args=t.concat(i),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),i);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(i),this._dispatchSubcommand(this._defaultCommandName,t,i);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(s.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{s.unknown.length>0&&this.unknownOption(s.unknown[0])},r=`command:${this.name()}`;if(this._actionHandler){n(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(r,t,i)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(r))n(),this._processArguments(),this.parent.emit(r,t,i);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,i);this.listenerCount("command:*")?this.emit("command:*",t,i):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(i=>i._name===t||i._aliases.includes(t))}_findOption(t){return this.options.find(i=>i.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(i=>{i.mandatory&&t.getOptionValue(i.attributeName())===void 0&&t.missingMandatoryOptionValue(i)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(s=>{let n=s.attributeName();return this.getOptionValue(n)===void 0?!1:this.getOptionValueSource(n)!=="default"});t.filter(s=>s.conflictsWith.length>0).forEach(s=>{let n=t.find(r=>s.conflictsWith.includes(r.attributeName()));n&&this._conflictingOption(s,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let i=[],s=[],n=i,r=t.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;r.length;){let l=r.shift();if(l==="--"){n===s&&n.push(l),n.push(...r);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let m=this._findOption(l);if(m){if(m.required){let f=r.shift();f===void 0&&this.optionMissingArgument(m),this.emit(`option:${m.name()}`,f)}else if(m.optional){let f=null;r.length>0&&!o(r[0])&&(f=r.shift()),this.emit(`option:${m.name()}`,f)}else this.emit(`option:${m.name()}`);a=m.variadic?m:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let m=this._findOption(`-${l[1]}`);if(m){m.required||m.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${m.name()}`,l.slice(2)):(this.emit(`option:${m.name()}`),r.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let m=l.indexOf("="),f=this._findOption(l.slice(0,m));if(f&&(f.required||f.optional)){this.emit(`option:${f.name()}`,l.slice(m+1));continue}}if(o(l)&&(n=s),(this._enablePositionalOptions||this._passThroughOptions)&&i.length===0&&s.length===0){if(this._findCommand(l)){i.push(l),r.length>0&&s.push(...r);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){i.push(l),r.length>0&&i.push(...r);break}else if(this._defaultCommandName){s.push(l),r.length>0&&s.push(...r);break}}if(this._passThroughOptions){n.push(l),r.length>0&&n.push(...r);break}n.push(l)}return{operands:i,unknown:s}}opts(){if(this._storeOptionsAsProperties){let t={},i=this.options.length;for(let s=0;s<i;s++){let n=this.options[s].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,i)=>Object.assign(t,i.opts()),{})}error(t,i){this._outputConfiguration.outputError(`${t}
21
+ - ${n}`;throw new Error(r)}_executeSubCommand(t,i){i=i.slice();let s=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function r(m,g){let y=pt.resolve(m,g);if(Si.existsSync(y))return y;if(n.includes(pt.extname(g)))return;let k=n.find($=>Si.existsSync(`${y}${$}`));if(k)return`${y}${k}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let m;try{m=Si.realpathSync(this._scriptPath)}catch{m=this._scriptPath}a=pt.resolve(pt.dirname(m),a)}if(a){let m=r(a,o);if(!m&&!t._executableFile&&this._scriptPath){let g=pt.basename(this._scriptPath,pt.extname(this._scriptPath));g!==this._name&&(m=r(a,`${g}-${t._name}`))}o=m||o}s=n.includes(pt.extname(o));let l;ne.platform!=="win32"?s?(i.unshift(o),i=Bn(ne.execArgv).concat(i),l=Ss.spawn(ne.argv[0],i,{stdio:"inherit"})):l=Ss.spawn(o,i,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,t._name),i.unshift(o),i=Bn(ne.execArgv).concat(i),l=Ss.spawn(ne.execPath,i,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(g=>{ne.on(g,()=>{l.killed===!1&&l.exitCode===null&&l.kill(g)})});let f=this._exitCallback;l.on("close",m=>{m=m??1,f?f(new Cs(m,"commander.executeSubCommandAsync","(close)")):ne.exit(m)}),l.on("error",m=>{if(m.code==="ENOENT")this._checkForMissingExecutable(o,a,t._name);else if(m.code==="EACCES")throw new Error(`'${o}' not executable`);if(!f)ne.exit(1);else{let g=new Cs(1,"commander.executeSubCommandAsync","(error)");g.nestedError=m,f(g)}}),this.runningCommand=l}_dispatchSubcommand(t,i,s){let n=this._findCommand(t);n||this.help({error:!0}),n._prepareForParse();let r;return r=this._chainOrCallSubCommandHook(r,n,"preSubcommand"),r=this._chainOrCall(r,()=>{if(n._executableHandler)this._executeSubCommand(n,i.concat(s));else return n._parseCommand(i,s)}),r}_dispatchHelpCommand(t){t||this.help();let i=this._findCommand(t);return i&&!i._executableHandler&&i.help(),this._dispatchSubcommand(t,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){this.registeredArguments.forEach((t,i)=>{t.required&&this.args[i]==null&&this.missingArgument(t.name())}),!(this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)&&this.args.length>this.registeredArguments.length&&this._excessArguments(this.args)}_processArguments(){let t=(s,n,r)=>{let o=n;if(n!==null&&s.parseArg){let a=`error: command-argument value '${n}' is invalid for argument '${s.name()}'.`;o=this._callParseArg(s,n,r,a)}return o};this._checkNumberOfArguments();let i=[];this.registeredArguments.forEach((s,n)=>{let r=s.defaultValue;s.variadic?n<this.args.length?(r=this.args.slice(n),s.parseArg&&(r=r.reduce((o,a)=>t(s,a,o),s.defaultValue))):r===void 0&&(r=[]):n<this.args.length&&(r=this.args[n],s.parseArg&&(r=t(s,r,s.defaultValue))),i[n]=r}),this.processedArgs=i}_chainOrCall(t,i){return t&&t.then&&typeof t.then=="function"?t.then(()=>i()):i()}_chainOrCallHooks(t,i){let s=t,n=[];return this._getCommandAndAncestors().reverse().filter(r=>r._lifeCycleHooks[i]!==void 0).forEach(r=>{r._lifeCycleHooks[i].forEach(o=>{n.push({hookedCommand:r,callback:o})})}),i==="postAction"&&n.reverse(),n.forEach(r=>{s=this._chainOrCall(s,()=>r.callback(r.hookedCommand,this))}),s}_chainOrCallSubCommandHook(t,i,s){let n=t;return this._lifeCycleHooks[s]!==void 0&&this._lifeCycleHooks[s].forEach(r=>{n=this._chainOrCall(n,()=>r(this,i))}),n}_parseCommand(t,i){let s=this.parseOptions(i);if(this._parseOptionsEnv(),this._parseOptionsImplied(),t=t.concat(s.operands),i=s.unknown,this.args=t.concat(i),t&&this._findCommand(t[0]))return this._dispatchSubcommand(t[0],t.slice(1),i);if(this._getHelpCommand()&&t[0]===this._getHelpCommand().name())return this._dispatchHelpCommand(t[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(i),this._dispatchSubcommand(this._defaultCommandName,t,i);this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName&&this.help({error:!0}),this._outputHelpIfRequested(s.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let n=()=>{s.unknown.length>0&&this.unknownOption(s.unknown[0])},r=`command:${this.name()}`;if(this._actionHandler){n(),this._processArguments();let o;return o=this._chainOrCallHooks(o,"preAction"),o=this._chainOrCall(o,()=>this._actionHandler(this.processedArgs)),this.parent&&(o=this._chainOrCall(o,()=>{this.parent.emit(r,t,i)})),o=this._chainOrCallHooks(o,"postAction"),o}if(this.parent&&this.parent.listenerCount(r))n(),this._processArguments(),this.parent.emit(r,t,i);else if(t.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",t,i);this.listenerCount("command:*")?this.emit("command:*",t,i):this.commands.length?this.unknownCommand():(n(),this._processArguments())}else this.commands.length?(n(),this.help({error:!0})):(n(),this._processArguments())}_findCommand(t){if(t)return this.commands.find(i=>i._name===t||i._aliases.includes(t))}_findOption(t){return this.options.find(i=>i.is(t))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(t=>{t.options.forEach(i=>{i.mandatory&&t.getOptionValue(i.attributeName())===void 0&&t.missingMandatoryOptionValue(i)})})}_checkForConflictingLocalOptions(){let t=this.options.filter(s=>{let n=s.attributeName();return this.getOptionValue(n)===void 0?!1:this.getOptionValueSource(n)!=="default"});t.filter(s=>s.conflictsWith.length>0).forEach(s=>{let n=t.find(r=>s.conflictsWith.includes(r.attributeName()));n&&this._conflictingOption(s,n)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(t=>{t._checkForConflictingLocalOptions()})}parseOptions(t){let i=[],s=[],n=i,r=t.slice();function o(l){return l.length>1&&l[0]==="-"}let a=null;for(;r.length;){let l=r.shift();if(l==="--"){n===s&&n.push(l),n.push(...r);break}if(a&&!o(l)){this.emit(`option:${a.name()}`,l);continue}if(a=null,o(l)){let f=this._findOption(l);if(f){if(f.required){let m=r.shift();m===void 0&&this.optionMissingArgument(f),this.emit(`option:${f.name()}`,m)}else if(f.optional){let m=null;r.length>0&&!o(r[0])&&(m=r.shift()),this.emit(`option:${f.name()}`,m)}else this.emit(`option:${f.name()}`);a=f.variadic?f:null;continue}}if(l.length>2&&l[0]==="-"&&l[1]!=="-"){let f=this._findOption(`-${l[1]}`);if(f){f.required||f.optional&&this._combineFlagAndOptionalValue?this.emit(`option:${f.name()}`,l.slice(2)):(this.emit(`option:${f.name()}`),r.unshift(`-${l.slice(2)}`));continue}}if(/^--[^=]+=/.test(l)){let f=l.indexOf("="),m=this._findOption(l.slice(0,f));if(m&&(m.required||m.optional)){this.emit(`option:${m.name()}`,l.slice(f+1));continue}}if(o(l)&&(n=s),(this._enablePositionalOptions||this._passThroughOptions)&&i.length===0&&s.length===0){if(this._findCommand(l)){i.push(l),r.length>0&&s.push(...r);break}else if(this._getHelpCommand()&&l===this._getHelpCommand().name()){i.push(l),r.length>0&&i.push(...r);break}else if(this._defaultCommandName){s.push(l),r.length>0&&s.push(...r);break}}if(this._passThroughOptions){n.push(l),r.length>0&&n.push(...r);break}n.push(l)}return{operands:i,unknown:s}}opts(){if(this._storeOptionsAsProperties){let t={},i=this.options.length;for(let s=0;s<i;s++){let n=this.options[s].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce((t,i)=>Object.assign(t,i.opts()),{})}error(t,i){this._outputConfiguration.outputError(`${t}
22
22
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError=="string"?this._outputConfiguration.writeErr(`${this._showHelpAfterError}
23
23
  `):this._showHelpAfterError&&(this._outputConfiguration.writeErr(`
24
- `),this.outputHelp({error:!0}));let s=i||{},n=s.exitCode||1,r=s.code||"commander.error";this._exit(n,r,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in ne.env){let i=t.attributeName();(this.getOptionValue(i)===void 0||["default","config","env"].includes(this.getOptionValueSource(i)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,ne.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new qa(this.options),i=s=>this.getOptionValue(s)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(s));this.options.filter(s=>s.implied!==void 0&&i(s.attributeName())&&t.valueFromOption(this.getOptionValue(s.attributeName()),s)).forEach(s=>{Object.keys(s.implied).filter(n=>!i(n)).forEach(n=>{this.setOptionValueWithSource(n,s.implied[n],"implied")})})}missingArgument(t){let i=`error: missing required argument '${t}'`;this.error(i,{code:"commander.missingArgument"})}optionMissingArgument(t){let i=`error: option '${t.flags}' argument missing`;this.error(i,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let i=`error: required option '${t.flags}' not specified`;this.error(i,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,i){let s=o=>{let a=o.attributeName(),l=this.getOptionValue(a),m=this.options.find(g=>g.negate&&a===g.attributeName()),f=this.options.find(g=>!g.negate&&a===g.attributeName());return m&&(m.presetArg===void 0&&l===!1||m.presetArg!==void 0&&l===m.presetArg)?m:f||o},n=o=>{let a=s(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},r=`error: ${n(t)} cannot be used with ${n(i)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let i="";if(t.startsWith("--")&&this._showSuggestionAfterError){let n=[],r=this;do{let o=r.createHelp().visibleOptions(r).filter(a=>a.long).map(a=>a.long);n=n.concat(o),r=r.parent}while(r&&!r._enablePositionalOptions);i=Ln(t,n)}let s=`error: unknown option '${t}'${i}`;this.error(s,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let i=this.registeredArguments.length,s=i===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${i} argument${s} but got ${t.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],i="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(r=>{n.push(r.name()),r.alias()&&n.push(r.alias())}),i=Ln(t,n)}let s=`error: unknown command '${t}'${i}`;this.error(s,{code:"commander.unknownCommand"})}version(t,i,s){if(t===void 0)return this._version;this._version=t,i=i||"-V, --version",s=s||"output the version number";let n=this.createOption(i,s);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${t}
25
- `),this._exit(0,"commander.version",t)}),this}description(t,i){return t===void 0&&i===void 0?this._description:(this._description=t,i&&(this._argsDescription=i),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let i=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(i=this.commands[this.commands.length-1]),t===i._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(t);if(s){let n=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${n}'`)}return i._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(i=>this.alias(i)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let i=this.registeredArguments.map(s=>Da(s));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?i:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}nameFromFilename(t){return this._name=ut.basename(t,ut.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let i=this.createHelp(),s=this._getOutputContext(t);i.prepareContext({error:s.error,helpWidth:s.helpWidth,outputHasColors:s.hasColors});let n=i.formatHelp(this,i);return s.hasColors?n:this._outputConfiguration.stripColor(n)}_getOutputContext(t){t=t||{};let i=!!t.error,s,n,r;return i?(s=a=>this._outputConfiguration.writeErr(a),n=this._outputConfiguration.getErrHasColors(),r=this._outputConfiguration.getErrHelpWidth()):(s=a=>this._outputConfiguration.writeOut(a),n=this._outputConfiguration.getOutHasColors(),r=this._outputConfiguration.getOutHelpWidth()),{error:i,write:a=>(n||(a=this._outputConfiguration.stripColor(a)),s(a)),hasColors:n,helpWidth:r}}outputHelp(t){let i;typeof t=="function"&&(i=t,t=void 0);let s=this._getOutputContext(t),n={error:s.error,write:s.write,command:this};this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let r=this.helpInformation({error:s.error});if(i&&(r=i(r),typeof r!="string"&&!Buffer.isBuffer(r)))throw new Error("outputHelp callback must return a string or a Buffer");s.write(r),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",n))}helpOption(t,i){return typeof t=="boolean"?(t?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(t=t??"-h, --help",i=i??"display help for command",this._helpOption=this.createOption(t,i),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this}help(t){this.outputHelp(t);let i=Number(ne.exitCode??0);i===0&&t&&typeof t!="function"&&t.error&&(i=1),this._exit(i,"commander.help","(outputHelp)")}addHelpText(t,i){let s=["beforeAll","before","after","afterAll"];if(!s.includes(t))throw new Error(`Unexpected value for position to addHelpText.
24
+ `),this.outputHelp({error:!0}));let s=i||{},n=s.exitCode||1,r=s.code||"commander.error";this._exit(n,r,t)}_parseOptionsEnv(){this.options.forEach(t=>{if(t.envVar&&t.envVar in ne.env){let i=t.attributeName();(this.getOptionValue(i)===void 0||["default","config","env"].includes(this.getOptionValueSource(i)))&&(t.required||t.optional?this.emit(`optionEnv:${t.name()}`,ne.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new Ba(this.options),i=s=>this.getOptionValue(s)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(s));this.options.filter(s=>s.implied!==void 0&&i(s.attributeName())&&t.valueFromOption(this.getOptionValue(s.attributeName()),s)).forEach(s=>{Object.keys(s.implied).filter(n=>!i(n)).forEach(n=>{this.setOptionValueWithSource(n,s.implied[n],"implied")})})}missingArgument(t){let i=`error: missing required argument '${t}'`;this.error(i,{code:"commander.missingArgument"})}optionMissingArgument(t){let i=`error: option '${t.flags}' argument missing`;this.error(i,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue(t){let i=`error: required option '${t.flags}' not specified`;this.error(i,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption(t,i){let s=o=>{let a=o.attributeName(),l=this.getOptionValue(a),f=this.options.find(g=>g.negate&&a===g.attributeName()),m=this.options.find(g=>!g.negate&&a===g.attributeName());return f&&(f.presetArg===void 0&&l===!1||f.presetArg!==void 0&&l===f.presetArg)?f:m||o},n=o=>{let a=s(o),l=a.attributeName();return this.getOptionValueSource(l)==="env"?`environment variable '${a.envVar}'`:`option '${a.flags}'`},r=`error: ${n(t)} cannot be used with ${n(i)}`;this.error(r,{code:"commander.conflictingOption"})}unknownOption(t){if(this._allowUnknownOption)return;let i="";if(t.startsWith("--")&&this._showSuggestionAfterError){let n=[],r=this;do{let o=r.createHelp().visibleOptions(r).filter(a=>a.long).map(a=>a.long);n=n.concat(o),r=r.parent}while(r&&!r._enablePositionalOptions);i=Jn(t,n)}let s=`error: unknown option '${t}'${i}`;this.error(s,{code:"commander.unknownOption"})}_excessArguments(t){if(this._allowExcessArguments)return;let i=this.registeredArguments.length,s=i===1?"":"s",r=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${i} argument${s} but got ${t.length}.`;this.error(r,{code:"commander.excessArguments"})}unknownCommand(){let t=this.args[0],i="";if(this._showSuggestionAfterError){let n=[];this.createHelp().visibleCommands(this).forEach(r=>{n.push(r.name()),r.alias()&&n.push(r.alias())}),i=Jn(t,n)}let s=`error: unknown command '${t}'${i}`;this.error(s,{code:"commander.unknownCommand"})}version(t,i,s){if(t===void 0)return this._version;this._version=t,i=i||"-V, --version",s=s||"output the version number";let n=this.createOption(i,s);return this._versionOptionName=n.attributeName(),this._registerOption(n),this.on("option:"+n.name(),()=>{this._outputConfiguration.writeOut(`${t}
25
+ `),this._exit(0,"commander.version",t)}),this}description(t,i){return t===void 0&&i===void 0?this._description:(this._description=t,i&&(this._argsDescription=i),this)}summary(t){return t===void 0?this._summary:(this._summary=t,this)}alias(t){if(t===void 0)return this._aliases[0];let i=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler&&(i=this.commands[this.commands.length-1]),t===i._name)throw new Error("Command alias can't be the same as its name");let s=this.parent?._findCommand(t);if(s){let n=[s.name()].concat(s.aliases()).join("|");throw new Error(`cannot add alias '${t}' to command '${this.name()}' as already have command '${n}'`)}return i._aliases.push(t),this}aliases(t){return t===void 0?this._aliases:(t.forEach(i=>this.alias(i)),this)}usage(t){if(t===void 0){if(this._usage)return this._usage;let i=this.registeredArguments.map(s=>Wa(s));return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?i:[]).join(" ")}return this._usage=t,this}name(t){return t===void 0?this._name:(this._name=t,this)}nameFromFilename(t){return this._name=pt.basename(t,pt.extname(t)),this}executableDir(t){return t===void 0?this._executableDir:(this._executableDir=t,this)}helpInformation(t){let i=this.createHelp(),s=this._getOutputContext(t);i.prepareContext({error:s.error,helpWidth:s.helpWidth,outputHasColors:s.hasColors});let n=i.formatHelp(this,i);return s.hasColors?n:this._outputConfiguration.stripColor(n)}_getOutputContext(t){t=t||{};let i=!!t.error,s,n,r;return i?(s=a=>this._outputConfiguration.writeErr(a),n=this._outputConfiguration.getErrHasColors(),r=this._outputConfiguration.getErrHelpWidth()):(s=a=>this._outputConfiguration.writeOut(a),n=this._outputConfiguration.getOutHasColors(),r=this._outputConfiguration.getOutHelpWidth()),{error:i,write:a=>(n||(a=this._outputConfiguration.stripColor(a)),s(a)),hasColors:n,helpWidth:r}}outputHelp(t){let i;typeof t=="function"&&(i=t,t=void 0);let s=this._getOutputContext(t),n={error:s.error,write:s.write,command:this};this._getCommandAndAncestors().reverse().forEach(o=>o.emit("beforeAllHelp",n)),this.emit("beforeHelp",n);let r=this.helpInformation({error:s.error});if(i&&(r=i(r),typeof r!="string"&&!Buffer.isBuffer(r)))throw new Error("outputHelp callback must return a string or a Buffer");s.write(r),this._getHelpOption()?.long&&this.emit(this._getHelpOption().long),this.emit("afterHelp",n),this._getCommandAndAncestors().forEach(o=>o.emit("afterAllHelp",n))}helpOption(t,i){return typeof t=="boolean"?(t?this._helpOption=this._helpOption??void 0:this._helpOption=null,this):(t=t??"-h, --help",i=i??"display help for command",this._helpOption=this.createOption(t,i),this)}_getHelpOption(){return this._helpOption===void 0&&this.helpOption(void 0,void 0),this._helpOption}addHelpOption(t){return this._helpOption=t,this}help(t){this.outputHelp(t);let i=Number(ne.exitCode??0);i===0&&t&&typeof t!="function"&&t.error&&(i=1),this._exit(i,"commander.help","(outputHelp)")}addHelpText(t,i){let s=["beforeAll","before","after","afterAll"];if(!s.includes(t))throw new Error(`Unexpected value for position to addHelpText.
26
26
  Expecting one of '${s.join("', '")}'`);let n=`${t}Help`;return this.on(n,r=>{let o;typeof i=="function"?o=i({error:r.error,command:r.command}):o=i,o&&r.write(`${o}
27
- `)}),this}_outputHelpIfRequested(t){let i=this._getHelpOption();i&&t.find(n=>i.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Vn(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let i,s="127.0.0.1",n="9229",r;return(r=t.match(/^(--inspect(-brk)?)$/))!==null?i=r[1]:(r=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(i=r[1],/^\d+$/.test(r[3])?n=r[3]:s=r[3]):(r=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(i=r[1],s=r[3],n=r[4]),i&&n!=="0"?`${i}=${s}:${parseInt(n)+1}`:t})}function Ss(){if(ne.env.NO_COLOR||ne.env.FORCE_COLOR==="0"||ne.env.FORCE_COLOR==="false")return!1;if(ne.env.FORCE_COLOR||ne.env.CLICOLOR_FORCE!==void 0)return!0}Cs.Command=xs;Cs.useColor=Ss});var Gn=ct(Ge=>{var{Argument:Hn}=ki(),{Command:Os}=Wn(),{CommanderError:Fa,InvalidArgumentError:Jn}=ti(),{Help:Ma}=ys(),{Option:Bn}=ks();Ge.program=new Os;Ge.createCommand=e=>new Os(e);Ge.createOption=(e,t)=>new Bn(e,t);Ge.createArgument=(e,t)=>new Hn(e,t);Ge.Command=Os;Ge.Option=Bn;Ge.Argument=Hn;Ge.Help=Ma;Ge.CommanderError=Fa;Ge.InvalidArgumentError=Jn;Ge.InvalidOptionArgumentError=Jn});var L=ct((ou,Is)=>{var xi=process||{},Yn=xi.argv||[],ji=xi.env||{},La=!(ji.NO_COLOR||Yn.includes("--no-color"))&&(!!ji.FORCE_COLOR||Yn.includes("--color")||xi.platform==="win32"||(xi.stdout||{}).isTTY&&ji.TERM!=="dumb"||!!ji.CI),Va=(e,t,i=e)=>s=>{let n=""+s,r=n.indexOf(t,e.length);return~r?e+Wa(n,t,i,r)+t:e+n+t},Wa=(e,t,i,s)=>{let n="",r=0;do n+=e.substring(r,s)+i,r=s+t.length,s=e.indexOf(t,r);while(~s);return n+e.substring(r)},Xn=(e=La)=>{let t=e?Va:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};Is.exports=Xn();Is.exports.createColors=Xn});var Wt,ii,si=Ie(()=>{"use strict";Wt="domani.run",ii=`https://${Wt}`});function St(e,t,i){try{let s=(0,Zn.spawnSync)(e,t,{encoding:"utf-8",input:i,timeout:3e3,stdio:["pipe","pipe","ignore"]});return{ok:s.status===0,stdout:(s.stdout||"").trim()}}catch{return{ok:!1,stdout:""}}}function Qn(){return process.platform==="darwin"?!0:process.platform==="linux"?St("secret-tool",["--help"]).ok:!1}function er(e={}){if(e.refresh&&(Ht=void 0),Ht!==void 0)return Ht??void 0;let t;if(process.platform==="darwin"){let i=St("security",["find-generic-password","-s",Jt,"-a",Bt,"-w"]);i.ok&&i.stdout&&(t=i.stdout)}else if(process.platform==="linux"){let i=St("secret-tool",["lookup","service",Jt,"account",Bt]);i.ok&&i.stdout&&(t=i.stdout)}return Ht=t??null,t}function tr(e){let t=!1;return process.platform==="darwin"?t=St("security",["add-generic-password","-U","-s",Jt,"-a",Bt,"-w",e]).ok:process.platform==="linux"&&(t=St("secret-tool",["store","--label=domani CLI token","service",Jt,"account",Bt],e+`
28
- `).ok),t&&(Ht=e),t}function ir(){process.platform==="darwin"?St("security",["delete-generic-password","-s",Jt,"-a",Bt]):process.platform==="linux"&&St("secret-tool",["clear","service",Jt,"account",Bt]),Ht=null}var Zn,Jt,Bt,Ht,sr=Ie(()=>{"use strict";Zn=require("child_process"),Jt="domani-cli",Bt="default"});function or(e){rr=e}function mt(){try{let e=wt.default.readFileSync(Rs,"utf-8");return JSON.parse(e)}catch{return{}}}function Gt(e){e.token&&Qn()&&tr(e.token)&&(e={...e,token:void 0,token_in_keychain:!0}),wt.default.mkdirSync(Oi,{recursive:!0,mode:448}),wt.default.writeFileSync(Rs,JSON.stringify(e,null,2),{mode:384})}function lr(){ir();try{wt.default.unlinkSync(Rs)}catch{}}function Fe(){return rr||mt().api_url||ii}function Me(e={}){if(process.env.DOMANI_API_KEY)return process.env.DOMANI_API_KEY;let t=mt();if(t.token)return t.token;if(t.token_in_keychain)return er({refresh:e.refreshKeychain})}function Ja(){try{let e=wt.default.readFileSync(ar,"utf-8");return JSON.parse(e)}catch{return null}}function Ba(e){try{wt.default.mkdirSync(Oi,{recursive:!0,mode:448}),wt.default.writeFileSync(ar,JSON.stringify(e),{mode:384})}catch{}}function Si(e,t){let i=e.split(".").map(Number),s=t.split(".").map(Number);for(let n=0;n<3;n++){if((i[n]||0)>(s[n]||0))return 1;if((i[n]||0)<(s[n]||0))return-1}return 0}async function dr(){let e=Ja();if(e&&Date.now()-e.checkedAt<Ha)return Si(e.version,ke)>0?{update:e.version,forced:Si(ke,e.min)<0}:null;try{let t=Fe(),i=await fetch(`${t}/api/cli/version`,{signal:AbortSignal.timeout(3e3)});if(!i.ok)return null;let s=await i.json();if(Ba({version:s.version,min:s.min,checkedAt:Date.now()}),Si(s.version,ke)>0)return{update:s.version,forced:Si(ke,s.min)<0}}catch{}return null}var wt,Ci,nr,Oi,Rs,rr,ar,Ha,As,ke,ft=Ie(()=>{"use strict";wt=D(require("fs"),1),Ci=D(require("path"),1),nr=D(require("os"),1);si();sr();Oi=process.env.DOMANI_CONFIG_DIR||Ci.default.join(nr.default.homedir(),".domani"),Rs=Ci.default.join(Oi,"config.json");ar=Ci.default.join(Oi,"version-check.json"),Ha=1440*60*1e3;As=process.stdout.isTTY??!1,ke="0.4.56"});var Ts=ct((mu,cr)=>{"use strict";var Es={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let i="";return e<0?i+=`\x1B[${-e}D`:e>0&&(i+=`\x1B[${e}C`),t<0?i+=`\x1B[${-t}A`:t>0&&(i+=`\x1B[${t}B`),i},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},Ga={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},Ka={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let i=0;i<e;i++)t+=this.line+(i<e-1?Es.up():"");return e&&(t+=Es.left),t}};cr.exports={cursor:Es,scroll:Ga,erase:Ka,beep:"\x07"}});function pt(e,t,i){if(!i.some(o=>!o.disabled))return e;let s=e+t,n=Math.max(i.length-1,0),r=s<0?n:s>n?0:s;return i[r].disabled?pt(r,t<0?-1:1,i):r}function qs(e,t,i){return String(e).normalize().replaceAll(`\r
27
+ `)}),this}_outputHelpIfRequested(t){let i=this._getHelpOption();i&&t.find(n=>i.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Bn(e){return e.map(t=>{if(!t.startsWith("--inspect"))return t;let i,s="127.0.0.1",n="9229",r;return(r=t.match(/^(--inspect(-brk)?)$/))!==null?i=r[1]:(r=t.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null?(i=r[1],/^\d+$/.test(r[3])?n=r[3]:s=r[3]):(r=t.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null&&(i=r[1],s=r[3],n=r[4]),i&&n!=="0"?`${i}=${s}:${parseInt(n)+1}`:t})}function Is(){if(ne.env.NO_COLOR||ne.env.FORCE_COLOR==="0"||ne.env.FORCE_COLOR==="false")return!1;if(ne.env.FORCE_COLOR||ne.env.CLICOLOR_FORCE!==void 0)return!0}Rs.Command=Os;Rs.useColor=Is});var Xn=ft(ze=>{var{Argument:Kn}=ji(),{Command:As}=Gn(),{CommanderError:Ga,InvalidArgumentError:zn}=si(),{Help:Ka}=$s(),{Option:Yn}=js();ze.program=new As;ze.createCommand=e=>new As(e);ze.createOption=(e,t)=>new Yn(e,t);ze.createArgument=(e,t)=>new Kn(e,t);ze.Command=As;ze.Option=Yn;ze.Argument=Kn;ze.Help=Ka;ze.CommanderError=Ga;ze.InvalidArgumentError=zn;ze.InvalidOptionArgumentError=zn});var M=ft((xu,Es)=>{var Oi=process||{},er=Oi.argv||[],Ci=Oi.env||{},za=!(Ci.NO_COLOR||er.includes("--no-color"))&&(!!Ci.FORCE_COLOR||er.includes("--color")||Oi.platform==="win32"||(Oi.stdout||{}).isTTY&&Ci.TERM!=="dumb"||!!Ci.CI),Ya=(e,t,i=e)=>s=>{let n=""+s,r=n.indexOf(t,e.length);return~r?e+Xa(n,t,i,r)+t:e+n+t},Xa=(e,t,i,s)=>{let n="",r=0;do n+=e.substring(r,s)+i,r=s+t.length,s=e.indexOf(t,r);while(~s);return n+e.substring(r)},tr=(e=za)=>{let t=e?Ya:()=>String;return{isColorSupported:e,reset:t("\x1B[0m","\x1B[0m"),bold:t("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:t("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:t("\x1B[3m","\x1B[23m"),underline:t("\x1B[4m","\x1B[24m"),inverse:t("\x1B[7m","\x1B[27m"),hidden:t("\x1B[8m","\x1B[28m"),strikethrough:t("\x1B[9m","\x1B[29m"),black:t("\x1B[30m","\x1B[39m"),red:t("\x1B[31m","\x1B[39m"),green:t("\x1B[32m","\x1B[39m"),yellow:t("\x1B[33m","\x1B[39m"),blue:t("\x1B[34m","\x1B[39m"),magenta:t("\x1B[35m","\x1B[39m"),cyan:t("\x1B[36m","\x1B[39m"),white:t("\x1B[37m","\x1B[39m"),gray:t("\x1B[90m","\x1B[39m"),bgBlack:t("\x1B[40m","\x1B[49m"),bgRed:t("\x1B[41m","\x1B[49m"),bgGreen:t("\x1B[42m","\x1B[49m"),bgYellow:t("\x1B[43m","\x1B[49m"),bgBlue:t("\x1B[44m","\x1B[49m"),bgMagenta:t("\x1B[45m","\x1B[49m"),bgCyan:t("\x1B[46m","\x1B[49m"),bgWhite:t("\x1B[47m","\x1B[49m"),blackBright:t("\x1B[90m","\x1B[39m"),redBright:t("\x1B[91m","\x1B[39m"),greenBright:t("\x1B[92m","\x1B[39m"),yellowBright:t("\x1B[93m","\x1B[39m"),blueBright:t("\x1B[94m","\x1B[39m"),magentaBright:t("\x1B[95m","\x1B[39m"),cyanBright:t("\x1B[96m","\x1B[39m"),whiteBright:t("\x1B[97m","\x1B[39m"),bgBlackBright:t("\x1B[100m","\x1B[49m"),bgRedBright:t("\x1B[101m","\x1B[49m"),bgGreenBright:t("\x1B[102m","\x1B[49m"),bgYellowBright:t("\x1B[103m","\x1B[49m"),bgBlueBright:t("\x1B[104m","\x1B[49m"),bgMagentaBright:t("\x1B[105m","\x1B[49m"),bgCyanBright:t("\x1B[106m","\x1B[49m"),bgWhiteBright:t("\x1B[107m","\x1B[49m")}};Es.exports=tr();Es.exports.createColors=tr});var Jt,ni,ri=Ae(()=>{"use strict";Jt="domani.run",ni=`https://${Jt}`});function Ot(e,t,i){try{let s=(0,ir.spawnSync)(e,t,{encoding:"utf-8",input:i,timeout:3e3,stdio:["pipe","pipe","ignore"]});return{ok:s.status===0,stdout:(s.stdout||"").trim()}}catch{return{ok:!1,stdout:""}}}function sr(){return process.platform==="darwin"?!0:process.platform==="linux"?Ot("secret-tool",["--help"]).ok:!1}function nr(e={}){if(e.refresh&&(Bt=void 0),Bt!==void 0)return Bt??void 0;let t;if(process.platform==="darwin"){let i=Ot("security",["find-generic-password","-s",Gt,"-a",Kt,"-w"]);i.ok&&i.stdout&&(t=i.stdout)}else if(process.platform==="linux"){let i=Ot("secret-tool",["lookup","service",Gt,"account",Kt]);i.ok&&i.stdout&&(t=i.stdout)}return Bt=t??null,t}function rr(e){let t=!1;return process.platform==="darwin"?t=Ot("security",["add-generic-password","-U","-s",Gt,"-a",Kt,"-w",e]).ok:process.platform==="linux"&&(t=Ot("secret-tool",["store","--label=domani CLI token","service",Gt,"account",Kt],e+`
28
+ `).ok),t&&(Bt=e),t}function or(){process.platform==="darwin"?Ot("security",["delete-generic-password","-s",Gt,"-a",Kt]):process.platform==="linux"&&Ot("secret-tool",["clear","service",Gt,"account",Kt]),Bt=null}var ir,Gt,Kt,Bt,ar=Ae(()=>{"use strict";ir=require("child_process"),Gt="domani-cli",Kt="default"});function cr(e){dr=e}function ht(){try{let e=_t.default.readFileSync(Ts,"utf-8");return JSON.parse(e)}catch{return{}}}function zt(e){e.token&&sr()&&rr(e.token)&&(e={...e,token:void 0,token_in_keychain:!0}),_t.default.mkdirSync(Ai,{recursive:!0,mode:448}),_t.default.writeFileSync(Ts,JSON.stringify(e,null,2),{mode:384})}function mr(){or();try{_t.default.unlinkSync(Ts)}catch{}}function Le(){return dr||ht().api_url||ni}function Ve(e={}){if(process.env.DOMANI_API_KEY)return process.env.DOMANI_API_KEY;let t=ht();if(t.token)return t.token;if(t.token_in_keychain)return nr({refresh:e.refreshKeychain})}function Qa(){try{let e=_t.default.readFileSync(ur,"utf-8");return JSON.parse(e)}catch{return null}}function el(e){try{_t.default.mkdirSync(Ai,{recursive:!0,mode:448}),_t.default.writeFileSync(ur,JSON.stringify(e),{mode:384})}catch{}}function Ii(e,t){let i=e.split(".").map(Number),s=t.split(".").map(Number);for(let n=0;n<3;n++){if((i[n]||0)>(s[n]||0))return 1;if((i[n]||0)<(s[n]||0))return-1}return 0}async function fr(){let e=Qa();if(e&&Date.now()-e.checkedAt<Za)return Ii(e.version,xe)>0?{update:e.version,forced:Ii(xe,e.min)<0}:null;try{let t=Le(),i=await fetch(`${t}/api/cli/version`,{signal:AbortSignal.timeout(3e3)});if(!i.ok)return null;let s=await i.json();if(el({version:s.version,min:s.min,checkedAt:Date.now()}),Ii(s.version,xe)>0)return{update:s.version,forced:Ii(xe,s.min)<0}}catch{}return null}var _t,Ri,lr,Ai,Ts,dr,ur,Za,Ps,xe,gt=Ae(()=>{"use strict";_t=D(require("fs"),1),Ri=D(require("path"),1),lr=D(require("os"),1);ri();ar();Ai=process.env.DOMANI_CONFIG_DIR||Ri.default.join(lr.default.homedir(),".domani"),Ts=Ri.default.join(Ai,"config.json");ur=Ri.default.join(Ai,"version-check.json"),Za=1440*60*1e3;Ps=process.stdout.isTTY??!1,xe="0.4.57"});var Ns=ft((Ru,pr)=>{"use strict";var Ds={to(e,t){return t?`\x1B[${t+1};${e+1}H`:`\x1B[${e+1}G`},move(e,t){let i="";return e<0?i+=`\x1B[${-e}D`:e>0&&(i+=`\x1B[${e}C`),t<0?i+=`\x1B[${-t}A`:t>0&&(i+=`\x1B[${t}B`),i},up:(e=1)=>`\x1B[${e}A`,down:(e=1)=>`\x1B[${e}B`,forward:(e=1)=>`\x1B[${e}C`,backward:(e=1)=>`\x1B[${e}D`,nextLine:(e=1)=>"\x1B[E".repeat(e),prevLine:(e=1)=>"\x1B[F".repeat(e),left:"\x1B[G",hide:"\x1B[?25l",show:"\x1B[?25h",save:"\x1B7",restore:"\x1B8"},tl={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},il={screen:"\x1B[2J",up:(e=1)=>"\x1B[1J".repeat(e),down:(e=1)=>"\x1B[J".repeat(e),line:"\x1B[2K",lineEnd:"\x1B[K",lineStart:"\x1B[1K",lines(e){let t="";for(let i=0;i<e;i++)t+=this.line+(i<e-1?Ds.up():"");return e&&(t+=Ds.left),t}};pr.exports={cursor:Ds,scroll:tl,erase:il,beep:"\x07"}});function yt(e,t,i){if(!i.some(o=>!o.disabled))return e;let s=e+t,n=Math.max(i.length-1,0),r=s<0?n:s>n?0:s;return i[r].disabled?yt(r,t<0?-1:1,i):r}function Ls(e,t,i){return String(e).normalize().replaceAll(`\r
29
29
  `,`
30
30
  `).split(`
31
- `).map(s=>ol(s,t,i)).join(`
32
- `)}function $r(e){if(e.aliases!==void 0){let t=e.aliases;for(let i in t){if(!Object.hasOwn(t,i))continue;let s=t[i];ce.actions.has(s)&&(ce.aliases.has(i)||ce.aliases.set(i,s))}}if(e.messages!==void 0){let t=e.messages;t.cancel!==void 0&&(ce.messages.cancel=t.cancel),t.error!==void 0&&(ce.messages.error=t.error)}e.withGuide!==void 0&&(ce.withGuide=e.withGuide!==!1)}function Vs(e,t){if(typeof e=="string")return ce.aliases.get(e)===t;for(let i of e)if(i!==void 0&&Vs(i,t))return!0;return!1}function ll(e,t){if(e===t)return;let i=e.split(`
31
+ `).map(s=>pl(s,t,i)).join(`
32
+ `)}function _r(e){if(e.aliases!==void 0){let t=e.aliases;for(let i in t){if(!Object.hasOwn(t,i))continue;let s=t[i];ce.actions.has(s)&&(ce.aliases.has(i)||ce.aliases.set(i,s))}}if(e.messages!==void 0){let t=e.messages;t.cancel!==void 0&&(ce.messages.cancel=t.cancel),t.error!==void 0&&(ce.messages.error=t.error)}e.withGuide!==void 0&&(ce.withGuide=e.withGuide!==!1)}function Js(e,t){if(typeof e=="string")return ce.aliases.get(e)===t;for(let i of e)if(i!==void 0&&Js(i,t))return!0;return!1}function gl(e,t){if(e===t)return;let i=e.split(`
33
33
  `),s=t.split(`
34
- `),n=Math.max(i.length,s.length),r=[];for(let o=0;o<n;o++)i[o]!==s[o]&&r.push(o);return{lines:r,numLinesBefore:i.length,numLinesAfter:s.length,numLines:n}}function le(e){return e===Fs}function Ei(e,t){let i=e;i.isTTY&&i.setRawMode(t)}function wr({input:e=Ct.stdin,output:t=Ct.stdout,overwrite:i=!0,hideCursor:s=!0}={}){let n=kt.createInterface({input:e,output:t,prompt:"",tabSize:1});kt.emitKeypressEvents(e,n),e instanceof Us.ReadStream&&e.isTTY&&e.setRawMode(!0);let r=(o,{name:a,sequence:l})=>{let m=String(o);if(Vs([m,a,l],"cancel")){s&&t.write(Re.cursor.show),process.exit(0);return}if(!i)return;kt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{kt.clearLine(t,1,()=>{e.once("keypress",r)})})};return s&&t.write(Re.cursor.hide),e.once("keypress",r),()=>{e.off("keypress",r),s&&t.write(Re.cursor.show),e instanceof Us.ReadStream&&e.isTTY&&!dl&&e.setRawMode(!1),n.terminal=!1,n.close()}}function nt(e,t,i,s=i){let n=Ot(e??Ct.stdout);return qs(t,n-i.length,{hard:!0,trim:!1}).split(`
34
+ `),n=Math.max(i.length,s.length),r=[];for(let o=0;o<n;o++)i[o]!==s[o]&&r.push(o);return{lines:r,numLinesBefore:i.length,numLinesAfter:s.length,numLines:n}}function le(e){return e===Vs}function Di(e,t){let i=e;i.isTTY&&i.setRawMode(t)}function xr({input:e=It.stdin,output:t=It.stdout,overwrite:i=!0,hideCursor:s=!0}={}){let n=jt.createInterface({input:e,output:t,prompt:"",tabSize:1});jt.emitKeypressEvents(e,n),e instanceof Ms.ReadStream&&e.isTTY&&e.setRawMode(!0);let r=(o,{name:a,sequence:l})=>{let f=String(o);if(Js([f,a,l],"cancel")){s&&t.write(Ee.cursor.show),process.exit(0);return}if(!i)return;jt.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{jt.clearLine(t,1,()=>{e.once("keypress",r)})})};return s&&t.write(Ee.cursor.hide),e.once("keypress",r),()=>{e.off("keypress",r),s&&t.write(Ee.cursor.show),e instanceof Ms.ReadStream&&e.isTTY&&!yl&&e.setRawMode(!1),n.terminal=!1,n.close()}}function ot(e,t,i,s=i){let n=Rt(e??It.stdout);return Ls(t,n-i.length,{hard:!0,trim:!1}).split(`
35
35
  `).map((r,o)=>`${o===0?s:i}${r}`).join(`
36
- `)}function cl(e,t){if(e===void 0||t.length===0)return 0;let i=t.findIndex(s=>s.value===e);return i!==-1?i:0}function ul(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function ml(e,t){if(t)return e?t:t[0]}var vt,Ct,kt,pr,Re,Us,za,Ya,Xa,Ps,Ii,Ri,Ds,Ai,Za,Qa,hr,el,ni,Fi,gr,tl,Ms,br,il,yr,Ls,ur,sl,mr,fr,nl,Ns,rl,ol,al,ce,dl,Fs,Ot,Ws,st,ri,Ti,Pi,Di,vr,Ni,Ui,qi,Hs=Ie(()=>{vt=D(L(),1),Ct=require("node:process"),kt=D(require("node:readline"),1),pr=D(require("node:readline"),1),Re=D(Ts(),1),Us=require("node:tty");za=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,Ya=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Xa=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141,Ps=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Ii=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ri=/\t{1,1000}/y,Ds=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Ai=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Za=new RegExp("\\p{M}+","gu"),Qa={limit:1/0,ellipsis:""},hr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?hr(n,Qa,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,m=i.ambiguousWidth??1,f=i.emojiWidth??2,g=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,v=0,h=0,_=e.length,x=0,O=!1,A=_,M=Math.max(0,s-r),H=0,ee=0,P=0,T=0;e:for(;;){if(ee>H||h>=_&&h>v){let U=e.slice(H,ee)||e.slice(v,h);x=0;for(let Z of U.replaceAll(Za,"")){let Y=Z.codePointAt(0)||0;if(Ya(Y)?T=g:Xa(Y)?T=k:m!==b&&za(Y)?T=m:T=b,P+T>M&&(A=Math.min(A,Math.max(H,v)+x)),P+T>s){O=!0;break e}x+=Z.length,P+=T}H=ee=0}if(h>=_)break;if(Ai.lastIndex=h,Ai.test(e)){if(x=Ai.lastIndex-h,T=x*b,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/b))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Ai.lastIndex;continue}if(Ps.lastIndex=h,Ps.test(e)){if(P+o>M&&(A=Math.min(A,h)),P+o>s){O=!0;break}P+=o,H=v,ee=h,h=v=Ps.lastIndex;continue}if(Ii.lastIndex=h,Ii.test(e)){if(x=Ii.lastIndex-h,T=x*a,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/a))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Ii.lastIndex;continue}if(Ri.lastIndex=h,Ri.test(e)){if(x=Ri.lastIndex-h,T=x*l,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/l))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Ri.lastIndex;continue}if(Ds.lastIndex=h,Ds.test(e)){if(P+f>M&&(A=Math.min(A,h)),P+f>s){O=!0;break}P+=f,H=v,ee=h,h=v=Ds.lastIndex;continue}h+=1}return{width:O?M:P,index:O?A:_,truncated:O,ellipsed:O&&s>=r}},el={limit:1/0,ellipsis:"",ellipsisWidth:0},ni=(e,t={})=>hr(e,el,t).width,Fi="\x1B",gr="\x9B",tl=39,Ms="\x07",br="[",il="]",yr="m",Ls=`${il}8;;`,ur=new RegExp(`(?:\\${br}(?<code>\\d+)m|\\${Ls}(?<uri>.*)${Ms})`,"y"),sl=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},mr=e=>`${Fi}${br}${e}${yr}`,fr=e=>`${Fi}${Ls}${e}${Ms}`,nl=e=>e.map(t=>ni(t)),Ns=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:ni(o),l=s.next(),m=s.next(),f=0;for(;!l.done;){let g=l.value,b=ni(g);a+b<=i?e[e.length-1]+=g:(e.push(g),a=0),(g===Fi||g===gr)&&(n=!0,r=t.startsWith(Ls,f+1)),n?r?g===Ms&&(n=!1,r=!1):g===yr&&(n=!1):(a+=b,a===i&&!m.done&&(e.push(""),a=0)),l=m,m=s.next(),f+=g.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},rl=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(ni(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},ol=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=nl(o),l=[""];for(let[v,h]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let _=ni(l.at(-1)??"");if(v!==0&&(_>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),_=0),(_>0||i.trim===!1)&&(l[l.length-1]+=" ",_++)),i.hard&&a[v]>t){let x=t-_,O=1+Math.floor((a[v]-x-1)/t);Math.floor((a[v]-1)/t)<O&&l.push(""),Ns(l,h,t);continue}if(_+a[v]>t&&_>0&&a[v]>0){if(i.wordWrap===!1&&_<t){Ns(l,h,t);continue}l.push("")}if(_+a[v]>t&&i.wordWrap===!1){Ns(l,h,t);continue}l[l.length-1]+=h}i.trim!==!1&&(l=l.map(v=>rl(v)));let m=l.join(`
37
- `),f=m[Symbol.iterator](),g=f.next(),b=f.next(),k=0;for(;!g.done;){let v=g.value,h=b.value;if(s+=v,v===Fi||v===gr){ur.lastIndex=k+1;let x=ur.exec(m)?.groups;if(x?.code!==void 0){let O=Number.parseFloat(x.code);n=O===tl?void 0:O}else x?.uri!==void 0&&(r=x.uri.length===0?void 0:x.uri)}let _=n?sl(n):void 0;h===`
38
- `?(r&&(s+=fr("")),n&&_&&(s+=mr(_))):v===`
39
- `&&(n&&_&&(s+=mr(n)),r&&(s+=fr(r))),k+=v.length,g=b,b=f.next()}return s};al=["up","down","left","right","space","enter","cancel"],ce={actions:new Set(al),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0};dl=globalThis.process.platform.startsWith("win"),Fs=Symbol("clack:cancel");Ot=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Ws=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;st=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,i=!0){let{input:s=Ct.stdin,output:n=Ct.stdout,render:r,signal:o,...a}=t;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=i,this._abortSignal=o,this.input=s,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(t,i){let s=this._subscribers.get(t)??[];s.push(i),this._subscribers.set(t,s)}on(t,i){this.setSubscriber(t,{cb:i})}once(t,i){this.setSubscriber(t,{cb:i,once:!0})}emit(t,...i){let s=this._subscribers.get(t)??[],n=[];for(let r of s)r.cb(...i),r.once&&n.push(()=>s.splice(s.indexOf(r),1));for(let r of n)r()}prompt(){return new Promise(t=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Fs);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=pr.default.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Ei(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Re.cursor.show),this.output.off("resize",this.render),Ei(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Re.cursor.show),this.output.off("resize",this.render),Ei(this.input,!1),t(Fs)})})}_isActionKey(t,i){return t===" "}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,i){this.userInput=t??"",this.emit("userInput",this.userInput),i&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(t,i){if(this._track&&i.name!=="return"&&(i.name&&this._isActionKey(t,i)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),i?.name&&(!this._track&&ce.aliases.has(i.name)&&this.emit("cursor",ce.aliases.get(i.name)),ce.actions.has(i.name)&&this.emit("cursor",i.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t?.toLowerCase(),i),i?.name==="return"){if(this.opts.validate){let s=this.opts.validate(this.value);s&&(this.error=s instanceof Error?s.message:s,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Vs([t,i?.name,i?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
40
- `),Ei(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=qs(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
41
- `).length-1;this.output.write(Re.cursor.move(-999,t*-1))}render(){let t=qs(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Re.cursor.hide);else{let i=ll(this._prevFrame,t),s=Ws(this.output);if(this.restoreCursor(),i){let n=Math.max(0,i.numLinesAfter-s),r=Math.max(0,i.numLinesBefore-s),o=i.lines.find(a=>a>=n);if(o===void 0){this._prevFrame=t;return}if(i.lines.length===1){this.output.write(Re.cursor.move(0,o-r)),this.output.write(Re.erase.lines(1));let a=t.split(`
42
- `);this.output.write(a[o]),this._prevFrame=t,this.output.write(Re.cursor.move(0,a.length-o-1));return}else if(i.lines.length>1){if(n<r)o=n;else{let l=o-r;l>0&&this.output.write(Re.cursor.move(0,l))}this.output.write(Re.erase.down());let a=t.split(`
36
+ `)}function bl(e,t){if(e===void 0||t.length===0)return 0;let i=t.findIndex(s=>s.value===e);return i!==-1?i:0}function wl(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function vl(e,t){if(t)return e?t:t[0]}var xt,It,jt,br,Ee,Ms,sl,nl,rl,Us,Ei,Ti,qs,Pi,ol,al,wr,ll,oi,Vi,vr,dl,Ws,$r,cl,kr,Hs,hr,ul,gr,yr,ml,Fs,fl,pl,hl,ce,yl,Vs,Rt,Bs,rt,ai,Ni,Ui,qi,jr,Fi,Mi,Li,Gs=Ae(()=>{xt=D(M(),1),It=require("node:process"),jt=D(require("node:readline"),1),br=D(require("node:readline"),1),Ee=D(Ns(),1),Ms=require("node:tty");sl=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,nl=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,rl=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141,Us=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Ei=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ti=/\t{1,1000}/y,qs=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Pi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,ol=new RegExp("\\p{M}+","gu"),al={limit:1/0,ellipsis:""},wr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?wr(n,al,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,g=i.fullWidthWidth??2,y=i.regularWidth??1,k=i.wideWidth??2,$=0,h=0,_=e.length,j=0,O=!1,A=_,L=Math.max(0,s-r),H=0,te=0,P=0,T=0;e:for(;;){if(te>H||h>=_&&h>$){let U=e.slice(H,te)||e.slice($,h);j=0;for(let Q of U.replaceAll(ol,"")){let Y=Q.codePointAt(0)||0;if(nl(Y)?T=g:rl(Y)?T=k:f!==y&&sl(Y)?T=f:T=y,P+T>L&&(A=Math.min(A,Math.max(H,$)+j)),P+T>s){O=!0;break e}j+=Q.length,P+=T}H=te=0}if(h>=_)break;if(Pi.lastIndex=h,Pi.test(e)){if(j=Pi.lastIndex-h,T=j*y,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/y))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Pi.lastIndex;continue}if(Us.lastIndex=h,Us.test(e)){if(P+o>L&&(A=Math.min(A,h)),P+o>s){O=!0;break}P+=o,H=$,te=h,h=$=Us.lastIndex;continue}if(Ei.lastIndex=h,Ei.test(e)){if(j=Ei.lastIndex-h,T=j*a,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/a))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Ei.lastIndex;continue}if(Ti.lastIndex=h,Ti.test(e)){if(j=Ti.lastIndex-h,T=j*l,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/l))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Ti.lastIndex;continue}if(qs.lastIndex=h,qs.test(e)){if(P+m>L&&(A=Math.min(A,h)),P+m>s){O=!0;break}P+=m,H=$,te=h,h=$=qs.lastIndex;continue}h+=1}return{width:O?L:P,index:O?A:_,truncated:O,ellipsed:O&&s>=r}},ll={limit:1/0,ellipsis:"",ellipsisWidth:0},oi=(e,t={})=>wr(e,ll,t).width,Vi="\x1B",vr="\x9B",dl=39,Ws="\x07",$r="[",cl="]",kr="m",Hs=`${cl}8;;`,hr=new RegExp(`(?:\\${$r}(?<code>\\d+)m|\\${Hs}(?<uri>.*)${Ws})`,"y"),ul=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},gr=e=>`${Vi}${$r}${e}${kr}`,yr=e=>`${Vi}${Hs}${e}${Ws}`,ml=e=>e.map(t=>oi(t)),Fs=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:oi(o),l=s.next(),f=s.next(),m=0;for(;!l.done;){let g=l.value,y=oi(g);a+y<=i?e[e.length-1]+=g:(e.push(g),a=0),(g===Vi||g===vr)&&(n=!0,r=t.startsWith(Hs,m+1)),n?r?g===Ws&&(n=!1,r=!1):g===kr&&(n=!1):(a+=y,a===i&&!f.done&&(e.push(""),a=0)),l=f,f=s.next(),m+=g.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},fl=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(oi(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},pl=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=ml(o),l=[""];for(let[$,h]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let _=oi(l.at(-1)??"");if($!==0&&(_>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),_=0),(_>0||i.trim===!1)&&(l[l.length-1]+=" ",_++)),i.hard&&a[$]>t){let j=t-_,O=1+Math.floor((a[$]-j-1)/t);Math.floor((a[$]-1)/t)<O&&l.push(""),Fs(l,h,t);continue}if(_+a[$]>t&&_>0&&a[$]>0){if(i.wordWrap===!1&&_<t){Fs(l,h,t);continue}l.push("")}if(_+a[$]>t&&i.wordWrap===!1){Fs(l,h,t);continue}l[l.length-1]+=h}i.trim!==!1&&(l=l.map($=>fl($)));let f=l.join(`
37
+ `),m=f[Symbol.iterator](),g=m.next(),y=m.next(),k=0;for(;!g.done;){let $=g.value,h=y.value;if(s+=$,$===Vi||$===vr){hr.lastIndex=k+1;let j=hr.exec(f)?.groups;if(j?.code!==void 0){let O=Number.parseFloat(j.code);n=O===dl?void 0:O}else j?.uri!==void 0&&(r=j.uri.length===0?void 0:j.uri)}let _=n?ul(n):void 0;h===`
38
+ `?(r&&(s+=yr("")),n&&_&&(s+=gr(_))):$===`
39
+ `&&(n&&_&&(s+=gr(n)),r&&(s+=yr(r))),k+=$.length,g=y,y=m.next()}return s};hl=["up","down","left","right","space","enter","cancel"],ce={actions:new Set(hl),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0};yl=globalThis.process.platform.startsWith("win"),Vs=Symbol("clack:cancel");Rt=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Bs=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;rt=class{input;output;_abortSignal;rl;opts;_render;_track=!1;_prevFrame="";_subscribers=new Map;_cursor=0;state="initial";error="";value;userInput="";constructor(t,i=!0){let{input:s=It.stdin,output:n=It.stdout,render:r,signal:o,...a}=t;this.opts=a,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=r.bind(this),this._track=i,this._abortSignal=o,this.input=s,this.output=n}unsubscribe(){this._subscribers.clear()}setSubscriber(t,i){let s=this._subscribers.get(t)??[];s.push(i),this._subscribers.set(t,s)}on(t,i){this.setSubscriber(t,{cb:i})}once(t,i){this.setSubscriber(t,{cb:i,once:!0})}emit(t,...i){let s=this._subscribers.get(t)??[],n=[];for(let r of s)r.cb(...i),r.once&&n.push(()=>s.splice(s.indexOf(r),1));for(let r of n)r()}prompt(){return new Promise(t=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),t(Vs);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=br.default.createInterface({input:this.input,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:!0}),this.rl.prompt(),this.opts.initialUserInput!==void 0&&this._setUserInput(this.opts.initialUserInput,!0),this.input.on("keypress",this.onKeypress),Di(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(Ee.cursor.show),this.output.off("resize",this.render),Di(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Ee.cursor.show),this.output.off("resize",this.render),Di(this.input,!1),t(Vs)})})}_isActionKey(t,i){return t===" "}_setValue(t){this.value=t,this.emit("value",this.value)}_setUserInput(t,i){this.userInput=t??"",this.emit("userInput",this.userInput),i&&this._track&&this.rl&&(this.rl.write(this.userInput),this._cursor=this.rl.cursor)}_clearUserInput(){this.rl?.write(null,{ctrl:!0,name:"u"}),this._setUserInput("")}onKeypress(t,i){if(this._track&&i.name!=="return"&&(i.name&&this._isActionKey(t,i)&&this.rl?.write(null,{ctrl:!0,name:"h"}),this._cursor=this.rl?.cursor??0,this._setUserInput(this.rl?.line)),this.state==="error"&&(this.state="active"),i?.name&&(!this._track&&ce.aliases.has(i.name)&&this.emit("cursor",ce.aliases.get(i.name)),ce.actions.has(i.name)&&this.emit("cursor",i.name)),t&&(t.toLowerCase()==="y"||t.toLowerCase()==="n")&&this.emit("confirm",t.toLowerCase()==="y"),this.emit("key",t?.toLowerCase(),i),i?.name==="return"){if(this.opts.validate){let s=this.opts.validate(this.value);s&&(this.error=s instanceof Error?s.message:s,this.state="error",this.rl?.write(this.userInput))}this.state!=="error"&&(this.state="submit")}Js([t,i?.name,i?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
40
+ `),Di(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let t=Ls(this._prevFrame,process.stdout.columns,{hard:!0,trim:!1}).split(`
41
+ `).length-1;this.output.write(Ee.cursor.move(-999,t*-1))}render(){let t=Ls(this._render(this)??"",process.stdout.columns,{hard:!0,trim:!1});if(t!==this._prevFrame){if(this.state==="initial")this.output.write(Ee.cursor.hide);else{let i=gl(this._prevFrame,t),s=Bs(this.output);if(this.restoreCursor(),i){let n=Math.max(0,i.numLinesAfter-s),r=Math.max(0,i.numLinesBefore-s),o=i.lines.find(a=>a>=n);if(o===void 0){this._prevFrame=t;return}if(i.lines.length===1){this.output.write(Ee.cursor.move(0,o-r)),this.output.write(Ee.erase.lines(1));let a=t.split(`
42
+ `);this.output.write(a[o]),this._prevFrame=t,this.output.write(Ee.cursor.move(0,a.length-o-1));return}else if(i.lines.length>1){if(n<r)o=n;else{let l=o-r;l>0&&this.output.write(Ee.cursor.move(0,l))}this.output.write(Ee.erase.down());let a=t.split(`
43
43
  `).slice(o);this.output.write(a.join(`
44
- `)),this._prevFrame=t;return}}this.output.write(Re.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};ri=class extends st{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#s;#t;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return vt.default.inverse(vt.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let t=this.userInput.slice(0,this._cursor),[i,...s]=this.userInput.slice(this._cursor);return`${t}${vt.default.inverse(i)}${s.join("")}`}get options(){return typeof this.#t=="function"?this.#t():this.#t}constructor(t){super(t),this.#t=t.options;let i=this.options;this.filteredOptions=[...i],this.multiple=t.multiple===!0,this.#s=t.filter??ul;let s;if(t.initialValue&&Array.isArray(t.initialValue)?this.multiple?s=t.initialValue:s=t.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(s=[this.options[0].value]),s)for(let n of s){let r=i.findIndex(o=>o.value===n);r!==-1&&(this.toggleSelected(n),this.#e=r)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(n,r)=>this.#n(n,r)),this.on("userInput",n=>this.#r(n))}_isActionKey(t,i){return t===" "||this.multiple&&this.isNavigating&&i.name==="space"&&t!==void 0&&t!==""}#n(t,i){let s=i.name==="up",n=i.name==="down",r=i.name==="return";s||n?(this.#e=pt(this.#e,s?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):r?this.value=ml(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(i.name==="tab"||this.isNavigating&&i.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(t){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(t)?this.selectedValues=this.selectedValues.filter(i=>i!==t):this.selectedValues=[...this.selectedValues,t]:this.selectedValues=[t])}#r(t){if(t!==this.#i){this.#i=t;let i=this.options;t?this.filteredOptions=i.filter(r=>this.#s(t,r)):this.filteredOptions=[...i];let s=cl(this.focusedValue,this.filteredOptions);this.#e=pt(s,0,this.filteredOptions);let n=this.filteredOptions[this.#e];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},Ti=class extends st{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",i=>{this.output.write(Re.cursor.move(0,-1)),this.value=i,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},Pi=class extends st{options;cursor=0;#e;getGroupItems(t){return this.options.filter(i=>i.group===t)}isGroupSelected(t){let i=this.getGroupItems(t),s=this.value;return s===void 0?!1:i.every(n=>s.includes(n.value))}toggleValue(){let t=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),t.group===!0){let i=t.value,s=this.getGroupItems(i);this.isGroupSelected(i)?this.value=this.value.filter(n=>s.findIndex(r=>r.value===n)===-1):this.value=[...this.value,...s.map(n=>n.value)],this.value=Array.from(new Set(this.value))}else{let i=this.value.includes(t.value);this.value=i?this.value.filter(s=>s!==t.value):[...this.value,t.value]}}constructor(t){super(t,!1);let{options:i}=t;this.#e=t.selectableGroups!==!1,this.options=Object.entries(i).flatMap(([s,n])=>[{value:s,group:!0,label:s},...n.map(r=>({...r,group:s}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:s})=>s===t.cursorAt),this.#e?0:1),this.on("cursor",s=>{switch(s){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},Di=class extends st{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(t=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,i=this.value!==void 0&&this.value.length===t.length;this.value=i?[]:t.map(s=>s.value)}toggleInvert(){let t=this.value;if(!t)return;let i=this._enabledOptions.filter(s=>!t.includes(s.value));this.value=i.map(s=>s.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter(i=>i!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let i=Math.max(this.options.findIndex(({value:s})=>s===t.cursorAt),0);this.cursor=this.options[i].disabled?pt(i,1,this.options):i,this.on("key",s=>{s==="a"&&this.toggleAll(),s==="i"&&this.toggleInvert()}),this.on("cursor",s=>{switch(s){case"left":case"up":this.cursor=pt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=pt(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},vr=class extends st{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${vt.default.inverse(vt.default.hidden("_"))}`;let t=this.masked,i=t.slice(0,this.cursor),s=t.slice(this.cursor);return`${i}${vt.default.inverse(s[0])}${s.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:e,...t}){super(t),this._mask=e??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},Ni=class extends st{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let i=this.options.findIndex(({value:n})=>n===t.initialValue),s=i===-1?0:i;this.cursor=this.options[s].disabled?pt(s,1,this.options):s,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=pt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=pt(this.cursor,1,this.options);break}this.changeValue()})}},Ui=class extends st{options;cursor=0;constructor(t){super(t,!1),this.options=t.options;let i=t.caseSensitive===!0,s=this.options.map(({value:[n]})=>i?n:n?.toLowerCase());this.cursor=Math.max(s.indexOf(t.initialValue),0),this.on("key",(n,r)=>{if(!n)return;let o=i&&r.shift?n.toUpperCase():n;if(!s.includes(o))return;let a=this.options.find(({value:[l]})=>i?l===o:l?.toLowerCase()===n);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},qi=class extends st{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let i=t.slice(0,this.cursor),[s,...n]=t.slice(this.cursor);return`${i}${vt.default.inverse(s)}${n.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",i=>{this._setValue(i)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});var dn={};Vt(dn,{S_BAR:()=>E,S_BAR_END:()=>_e,S_BAR_END_RIGHT:()=>Er,S_BAR_H:()=>Gi,S_BAR_START:()=>Xs,S_BAR_START_RIGHT:()=>Ar,S_CHECKBOX_ACTIVE:()=>Bi,S_CHECKBOX_INACTIVE:()=>zt,S_CHECKBOX_SELECTED:()=>Rt,S_CONNECT_LEFT:()=>Pr,S_CORNER_BOTTOM_LEFT:()=>en,S_CORNER_BOTTOM_RIGHT:()=>Qs,S_CORNER_TOP_LEFT:()=>Dr,S_CORNER_TOP_RIGHT:()=>Zs,S_ERROR:()=>rn,S_INFO:()=>tn,S_PASSWORD_MASK:()=>Tr,S_RADIO_ACTIVE:()=>li,S_RADIO_INACTIVE:()=>Et,S_STEP_ACTIVE:()=>Rr,S_STEP_CANCEL:()=>zs,S_STEP_ERROR:()=>Ys,S_STEP_SUBMIT:()=>Tt,S_SUCCESS:()=>sn,S_WARN:()=>nn,autocomplete:()=>Lr,autocompleteMultiselect:()=>Ol,box:()=>El,cancel:()=>Dl,confirm:()=>Ke,group:()=>Tl,groupMultiselect:()=>Pl,intro:()=>Nl,isCI:()=>Ks,isCancel:()=>le,isTTY:()=>Ir,limitOptions:()=>Xt,log:()=>Ve,multiselect:()=>ql,note:()=>Ll,outro:()=>Ul,password:()=>Vl,path:()=>Wl,progress:()=>Jl,select:()=>Qe,selectKey:()=>Bl,settings:()=>ce,spinner:()=>di,stream:()=>It,symbol:()=>Ze,symbolBar:()=>on,taskLog:()=>zl,tasks:()=>Gl,text:()=>Ae,unicode:()=>Ji,unicodeOr:()=>oe,updateSettings:()=>$r});function fl(){return Le.default.platform!=="win32"?Le.default.env.TERM!=="linux":!!Le.default.env.CI||!!Le.default.env.WT_SESSION||!!Le.default.env.TERMINUS_SUBLIME||Le.default.env.ConEmuTask==="{cmd::Cmder}"||Le.default.env.TERM_PROGRAM==="Terminus-Sublime"||Le.default.env.TERM_PROGRAM==="vscode"||Le.default.env.TERM==="xterm-256color"||Le.default.env.TERM==="alacritty"||Le.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function Yt(e,t,i){return String(e).normalize().replaceAll(`\r
44
+ `)),this._prevFrame=t;return}}this.output.write(Ee.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};ai=class extends rt{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#s;#t;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return xt.default.inverse(xt.default.hidden("_"));if(this._cursor>=this.userInput.length)return`${this.userInput}\u2588`;let t=this.userInput.slice(0,this._cursor),[i,...s]=this.userInput.slice(this._cursor);return`${t}${xt.default.inverse(i)}${s.join("")}`}get options(){return typeof this.#t=="function"?this.#t():this.#t}constructor(t){super(t),this.#t=t.options;let i=this.options;this.filteredOptions=[...i],this.multiple=t.multiple===!0,this.#s=t.filter??wl;let s;if(t.initialValue&&Array.isArray(t.initialValue)?this.multiple?s=t.initialValue:s=t.initialValue.slice(0,1):!this.multiple&&this.options.length>0&&(s=[this.options[0].value]),s)for(let n of s){let r=i.findIndex(o=>o.value===n);r!==-1&&(this.toggleSelected(n),this.#e=r)}this.focusedValue=this.options[this.#e]?.value,this.on("key",(n,r)=>this.#n(n,r)),this.on("userInput",n=>this.#r(n))}_isActionKey(t,i){return t===" "||this.multiple&&this.isNavigating&&i.name==="space"&&t!==void 0&&t!==""}#n(t,i){let s=i.name==="up",n=i.name==="down",r=i.name==="return";s||n?(this.#e=yt(this.#e,s?-1:1,this.filteredOptions),this.focusedValue=this.filteredOptions[this.#e]?.value,this.multiple||(this.selectedValues=[this.focusedValue]),this.isNavigating=!0):r?this.value=vl(this.multiple,this.selectedValues):this.multiple?this.focusedValue!==void 0&&(i.name==="tab"||this.isNavigating&&i.name==="space")?this.toggleSelected(this.focusedValue):this.isNavigating=!1:(this.focusedValue&&(this.selectedValues=[this.focusedValue]),this.isNavigating=!1)}deselectAll(){this.selectedValues=[]}toggleSelected(t){this.filteredOptions.length!==0&&(this.multiple?this.selectedValues.includes(t)?this.selectedValues=this.selectedValues.filter(i=>i!==t):this.selectedValues=[...this.selectedValues,t]:this.selectedValues=[t])}#r(t){if(t!==this.#i){this.#i=t;let i=this.options;t?this.filteredOptions=i.filter(r=>this.#s(t,r)):this.filteredOptions=[...i];let s=bl(this.focusedValue,this.filteredOptions);this.#e=yt(s,0,this.filteredOptions);let n=this.filteredOptions[this.#e];n&&!n.disabled?this.focusedValue=n.value:this.focusedValue=void 0,this.multiple||(this.focusedValue!==void 0?this.toggleSelected(this.focusedValue):this.deselectAll())}}},Ni=class extends rt{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(t){super(t,!1),this.value=!!t.initialValue,this.on("userInput",()=>{this.value=this._value}),this.on("confirm",i=>{this.output.write(Ee.cursor.move(0,-1)),this.value=i,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}},Ui=class extends rt{options;cursor=0;#e;getGroupItems(t){return this.options.filter(i=>i.group===t)}isGroupSelected(t){let i=this.getGroupItems(t),s=this.value;return s===void 0?!1:i.every(n=>s.includes(n.value))}toggleValue(){let t=this.options[this.cursor];if(this.value===void 0&&(this.value=[]),t.group===!0){let i=t.value,s=this.getGroupItems(i);this.isGroupSelected(i)?this.value=this.value.filter(n=>s.findIndex(r=>r.value===n)===-1):this.value=[...this.value,...s.map(n=>n.value)],this.value=Array.from(new Set(this.value))}else{let i=this.value.includes(t.value);this.value=i?this.value.filter(s=>s!==t.value):[...this.value,t.value]}}constructor(t){super(t,!1);let{options:i}=t;this.#e=t.selectableGroups!==!1,this.options=Object.entries(i).flatMap(([s,n])=>[{value:s,group:!0,label:s},...n.map(r=>({...r,group:s}))]),this.value=[...t.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:s})=>s===t.cursorAt),this.#e?0:1),this.on("cursor",s=>{switch(s){case"left":case"up":{this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===0?this.options.length-1:this.cursor-1);break}case"down":case"right":{this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;let n=this.options[this.cursor]?.group===!0;!this.#e&&n&&(this.cursor=this.cursor===this.options.length-1?0:this.cursor+1);break}case"space":this.toggleValue();break}})}},qi=class extends rt{options;cursor=0;get _value(){return this.options[this.cursor].value}get _enabledOptions(){return this.options.filter(t=>t.disabled!==!0)}toggleAll(){let t=this._enabledOptions,i=this.value!==void 0&&this.value.length===t.length;this.value=i?[]:t.map(s=>s.value)}toggleInvert(){let t=this.value;if(!t)return;let i=this._enabledOptions.filter(s=>!t.includes(s.value));this.value=i.map(s=>s.value)}toggleValue(){this.value===void 0&&(this.value=[]);let t=this.value.includes(this._value);this.value=t?this.value.filter(i=>i!==this._value):[...this.value,this._value]}constructor(t){super(t,!1),this.options=t.options,this.value=[...t.initialValues??[]];let i=Math.max(this.options.findIndex(({value:s})=>s===t.cursorAt),0);this.cursor=this.options[i].disabled?yt(i,1,this.options):i,this.on("key",s=>{s==="a"&&this.toggleAll(),s==="i"&&this.toggleInvert()}),this.on("cursor",s=>{switch(s){case"left":case"up":this.cursor=yt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=yt(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},jr=class extends rt{_mask="\u2022";get cursor(){return this._cursor}get masked(){return this.userInput.replaceAll(/./g,this._mask)}get userInputWithCursor(){if(this.state==="submit"||this.state==="cancel")return this.masked;let e=this.userInput;if(this.cursor>=e.length)return`${this.masked}${xt.default.inverse(xt.default.hidden("_"))}`;let t=this.masked,i=t.slice(0,this.cursor),s=t.slice(this.cursor);return`${i}${xt.default.inverse(s[0])}${s.slice(1)}`}clear(){this._clearUserInput()}constructor({mask:e,...t}){super(t),this._mask=e??"\u2022",this.on("userInput",i=>{this._setValue(i)})}},Fi=class extends rt{options;cursor=0;get _selectedValue(){return this.options[this.cursor]}changeValue(){this.value=this._selectedValue.value}constructor(t){super(t,!1),this.options=t.options;let i=this.options.findIndex(({value:n})=>n===t.initialValue),s=i===-1?0:i;this.cursor=this.options[s].disabled?yt(s,1,this.options):s,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=yt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=yt(this.cursor,1,this.options);break}this.changeValue()})}},Mi=class extends rt{options;cursor=0;constructor(t){super(t,!1),this.options=t.options;let i=t.caseSensitive===!0,s=this.options.map(({value:[n]})=>i?n:n?.toLowerCase());this.cursor=Math.max(s.indexOf(t.initialValue),0),this.on("key",(n,r)=>{if(!n)return;let o=i&&r.shift?n.toUpperCase():n;if(!s.includes(o))return;let a=this.options.find(({value:[l]})=>i?l===o:l?.toLowerCase()===n);a&&(this.value=a.value,this.state="submit",this.emit("submit"))})}},Li=class extends rt{get userInputWithCursor(){if(this.state==="submit")return this.userInput;let t=this.userInput;if(this.cursor>=t.length)return`${this.userInput}\u2588`;let i=t.slice(0,this.cursor),[s,...n]=t.slice(this.cursor);return`${i}${xt.default.inverse(s)}${n.join("")}`}get cursor(){return this._cursor}constructor(t){super({...t,initialUserInput:t.initialUserInput??t.initialValue}),this.on("userInput",i=>{this._setValue(i)}),this.on("finalize",()=>{this.value||(this.value=t.defaultValue),this.value===void 0&&(this.value="")})}}});var mn={};Ht(mn,{S_BAR:()=>E,S_BAR_END:()=>je,S_BAR_END_RIGHT:()=>Nr,S_BAR_H:()=>Yi,S_BAR_START:()=>en,S_BAR_START_RIGHT:()=>Dr,S_CHECKBOX_ACTIVE:()=>zi,S_CHECKBOX_INACTIVE:()=>Xt,S_CHECKBOX_SELECTED:()=>Et,S_CONNECT_LEFT:()=>qr,S_CORNER_BOTTOM_LEFT:()=>nn,S_CORNER_BOTTOM_RIGHT:()=>sn,S_CORNER_TOP_LEFT:()=>Fr,S_CORNER_TOP_RIGHT:()=>tn,S_ERROR:()=>ln,S_INFO:()=>rn,S_PASSWORD_MASK:()=>Ur,S_RADIO_ACTIVE:()=>ci,S_RADIO_INACTIVE:()=>Pt,S_STEP_ACTIVE:()=>Pr,S_STEP_CANCEL:()=>Zs,S_STEP_ERROR:()=>Qs,S_STEP_SUBMIT:()=>Dt,S_SUCCESS:()=>on,S_WARN:()=>an,autocomplete:()=>Jr,autocompleteMultiselect:()=>Nl,box:()=>Ml,cancel:()=>Wl,confirm:()=>Ye,group:()=>Ll,groupMultiselect:()=>Vl,intro:()=>Hl,isCI:()=>Xs,isCancel:()=>le,isTTY:()=>Tr,limitOptions:()=>Qt,log:()=>He,multiselect:()=>Bl,note:()=>zl,outro:()=>Jl,password:()=>Yl,path:()=>Xl,progress:()=>Ql,select:()=>tt,selectKey:()=>ed,settings:()=>ce,spinner:()=>ui,stream:()=>At,symbol:()=>et,symbolBar:()=>dn,taskLog:()=>sd,tasks:()=>td,text:()=>Te,unicode:()=>Ki,unicodeOr:()=>oe,updateSettings:()=>_r});function $l(){return We.default.platform!=="win32"?We.default.env.TERM!=="linux":!!We.default.env.CI||!!We.default.env.WT_SESSION||!!We.default.env.TERMINUS_SUBLIME||We.default.env.ConEmuTask==="{cmd::Cmder}"||We.default.env.TERM_PROGRAM==="Terminus-Sublime"||We.default.env.TERM_PROGRAM==="vscode"||We.default.env.TERM==="xterm-256color"||We.default.env.TERM==="alacritty"||We.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function Zt(e,t,i){return String(e).normalize().replaceAll(`\r
45
45
  `,`
46
46
  `).split(`
47
- `).map(s=>xl(s,t,i)).join(`
48
- `)}function xr(e){return e.label??String(e.value??"")}function Mr(e,t){if(!e)return!0;let i=(t.label??String(t.value??"")).toLowerCase(),s=(t.hint??"").toLowerCase(),n=String(t.value).toLowerCase(),r=e.toLowerCase();return i.includes(r)||s.includes(r)||n.includes(r)}function Cl(e,t){let i=[];for(let s of t)e.includes(s.value)&&i.push(s);return i}function Sr(e,t,i,s){let n=i,r=i;return s==="center"?n=Math.floor((t-e)/2):s==="right"&&(n=t-e-i),r=t-n-e,[n,r]}function Jl({style:e="heavy",max:t=100,size:i=40,...s}={}){let n=di(s),r=0,o="",a=Math.max(1,t),l=Math.max(1,i),m=k=>{switch(k){case"initial":case"active":return p.default.magenta;case"error":case"cancel":return p.default.red;case"submit":return p.default.green;default:return p.default.magenta}},f=(k,v)=>{let h=Math.floor(r/a*l);return`${m(k)(Cr[e].repeat(h))}${p.default.dim(Cr[e].repeat(l-h))} ${v}`},g=(k="")=>{o=k,n.start(f("initial",k))},b=(k=1,v)=>{r=Math.min(a,k+r),n.message(f("active",v??o)),o=v??o};return{start:g,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:b,isCancelled:n.isCancelled,message:k=>b(0,k)}}var p,Le,At,ai,Kt,Hi,Ji,Ks,Ir,oe,Rr,zs,Ys,Tt,Xs,E,_e,Ar,Er,li,Et,Bi,Rt,zt,Tr,Gi,Zs,Pr,Qs,en,Dr,tn,sn,nn,rn,Ze,on,pl,hl,gl,Js,Mi,Li,Bs,Vi,bl,yl,Nr,$l,Te,Ki,Ur,wl,an,qr,vl,Fr,ln,kr,kl,_r,jr,_l,Gs,jl,xl,Sl,Xt,Lr,Ol,Il,Rl,Al,El,Ke,Tl,Pl,Ve,Dl,Nl,Ul,oi,ql,Fl,Ml,Ll,Vl,Wl,Hl,di,Cr,Wi,Qe,Bl,Or,It,Gl,Kl,zl,Ae,Pe=Ie(()=>{Hs();Hs();p=D(L(),1),Le=D(require("node:process"),1),At=require("node:fs"),ai=require("node:path"),Kt=D(Ts(),1),Hi=require("node:util");Ji=fl(),Ks=()=>process.env.CI==="true",Ir=e=>e.isTTY===!0,oe=(e,t)=>Ji?e:t,Rr=oe("\u25C6","*"),zs=oe("\u25A0","x"),Ys=oe("\u25B2","x"),Tt=oe("\u25C7","o"),Xs=oe("\u250C","T"),E=oe("\u2502","|"),_e=oe("\u2514","\u2014"),Ar=oe("\u2510","T"),Er=oe("\u2518","\u2014"),li=oe("\u25CF",">"),Et=oe("\u25CB"," "),Bi=oe("\u25FB","[\u2022]"),Rt=oe("\u25FC","[+]"),zt=oe("\u25FB","[ ]"),Tr=oe("\u25AA","\u2022"),Gi=oe("\u2500","-"),Zs=oe("\u256E","+"),Pr=oe("\u251C","+"),Qs=oe("\u256F","+"),en=oe("\u2570","+"),Dr=oe("\u256D","+"),tn=oe("\u25CF","\u2022"),sn=oe("\u25C6","*"),nn=oe("\u25B2","!"),rn=oe("\u25A0","x"),Ze=e=>{switch(e){case"initial":case"active":return p.default.cyan(Rr);case"cancel":return p.default.red(zs);case"error":return p.default.yellow(Ys);case"submit":return p.default.green(Tt)}},on=e=>{switch(e){case"initial":case"active":return p.default.cyan(E);case"cancel":return p.default.red(E);case"error":return p.default.yellow(E);case"submit":return p.default.green(E)}},pl=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,hl=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,gl=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141,Js=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Mi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Li=/\t{1,1000}/y,Bs=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Vi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,bl=new RegExp("\\p{M}+","gu"),yl={limit:1/0,ellipsis:""},Nr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Nr(n,yl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,m=i.ambiguousWidth??1,f=i.emojiWidth??2,g=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,v=0,h=0,_=e.length,x=0,O=!1,A=_,M=Math.max(0,s-r),H=0,ee=0,P=0,T=0;e:for(;;){if(ee>H||h>=_&&h>v){let U=e.slice(H,ee)||e.slice(v,h);x=0;for(let Z of U.replaceAll(bl,"")){let Y=Z.codePointAt(0)||0;if(hl(Y)?T=g:gl(Y)?T=k:m!==b&&pl(Y)?T=m:T=b,P+T>M&&(A=Math.min(A,Math.max(H,v)+x)),P+T>s){O=!0;break e}x+=Z.length,P+=T}H=ee=0}if(h>=_)break;if(Vi.lastIndex=h,Vi.test(e)){if(x=Vi.lastIndex-h,T=x*b,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/b))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Vi.lastIndex;continue}if(Js.lastIndex=h,Js.test(e)){if(P+o>M&&(A=Math.min(A,h)),P+o>s){O=!0;break}P+=o,H=v,ee=h,h=v=Js.lastIndex;continue}if(Mi.lastIndex=h,Mi.test(e)){if(x=Mi.lastIndex-h,T=x*a,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/a))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Mi.lastIndex;continue}if(Li.lastIndex=h,Li.test(e)){if(x=Li.lastIndex-h,T=x*l,P+T>M&&(A=Math.min(A,h+Math.floor((M-P)/l))),P+T>s){O=!0;break}P+=T,H=v,ee=h,h=v=Li.lastIndex;continue}if(Bs.lastIndex=h,Bs.test(e)){if(P+f>M&&(A=Math.min(A,h)),P+f>s){O=!0;break}P+=f,H=v,ee=h,h=v=Bs.lastIndex;continue}h+=1}return{width:O?M:P,index:O?A:_,truncated:O,ellipsed:O&&s>=r}},$l={limit:1/0,ellipsis:"",ellipsisWidth:0},Te=(e,t={})=>Nr(e,$l,t).width,Ki="\x1B",Ur="\x9B",wl=39,an="\x07",qr="[",vl="]",Fr="m",ln=`${vl}8;;`,kr=new RegExp(`(?:\\${qr}(?<code>\\d+)m|\\${ln}(?<uri>.*)${an})`,"y"),kl=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},_r=e=>`${Ki}${qr}${e}${Fr}`,jr=e=>`${Ki}${ln}${e}${an}`,_l=e=>e.map(t=>Te(t)),Gs=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:Te(o),l=s.next(),m=s.next(),f=0;for(;!l.done;){let g=l.value,b=Te(g);a+b<=i?e[e.length-1]+=g:(e.push(g),a=0),(g===Ki||g===Ur)&&(n=!0,r=t.startsWith(ln,f+1)),n?r?g===an&&(n=!1,r=!1):g===Fr&&(n=!1):(a+=b,a===i&&!m.done&&(e.push(""),a=0)),l=m,m=s.next(),f+=g.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},jl=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(Te(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},xl=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=_l(o),l=[""];for(let[v,h]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let _=Te(l.at(-1)??"");if(v!==0&&(_>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),_=0),(_>0||i.trim===!1)&&(l[l.length-1]+=" ",_++)),i.hard&&a[v]>t){let x=t-_,O=1+Math.floor((a[v]-x-1)/t);Math.floor((a[v]-1)/t)<O&&l.push(""),Gs(l,h,t);continue}if(_+a[v]>t&&_>0&&a[v]>0){if(i.wordWrap===!1&&_<t){Gs(l,h,t);continue}l.push("")}if(_+a[v]>t&&i.wordWrap===!1){Gs(l,h,t);continue}l[l.length-1]+=h}i.trim!==!1&&(l=l.map(v=>jl(v)));let m=l.join(`
49
- `),f=m[Symbol.iterator](),g=f.next(),b=f.next(),k=0;for(;!g.done;){let v=g.value,h=b.value;if(s+=v,v===Ki||v===Ur){kr.lastIndex=k+1;let x=kr.exec(m)?.groups;if(x?.code!==void 0){let O=Number.parseFloat(x.code);n=O===wl?void 0:O}else x?.uri!==void 0&&(r=x.uri.length===0?void 0:x.uri)}let _=n?kl(n):void 0;h===`
50
- `?(r&&(s+=jr("")),n&&_&&(s+=_r(_))):v===`
51
- `&&(n&&_&&(s+=_r(n)),r&&(s+=jr(r))),k+=v.length,g=b,b=f.next()}return s};Sl=(e,t,i,s,n)=>{let r=t,o=0;for(let a=i;a<s;a++){let l=e[a];if(r=r-l.length,o++,r<=n)break}return{lineCount:r,removals:o}},Xt=e=>{let{cursor:t,options:i,style:s}=e,n=e.output??process.stdout,r=Ot(n),o=e.columnPadding??0,a=e.rowPadding??4,l=r-o,m=Ws(n),f=p.default.dim("..."),g=e.maxItems??Number.POSITIVE_INFINITY,b=Math.max(m-a,0),k=Math.max(Math.min(g,b),5),v=0;t>=k-3&&(v=Math.max(Math.min(t-k+3,i.length-k),0));let h=k<i.length&&v>0,_=k<i.length&&v+k<i.length,x=Math.min(v+k,i.length),O=[],A=0;h&&A++,_&&A++;let M=v+(h?1:0),H=x-(_?1:0);for(let P=M;P<H;P++){let T=Yt(s(i[P],P===t),l,{hard:!0,trim:!1}).split(`
52
- `);O.push(T),A+=T.length}if(A>b){let P=0,T=0,U=A,Z=t-M,Y=(q,ie)=>Sl(O,U,q,ie,b);h?({lineCount:U,removals:P}=Y(0,Z),U>b&&({lineCount:U,removals:T}=Y(Z+1,O.length))):({lineCount:U,removals:T}=Y(Z+1,O.length),U>b&&({lineCount:U,removals:P}=Y(0,Z))),P>0&&(h=!0,O.splice(0,P)),T>0&&(_=!0,O.splice(O.length-T,T))}let ee=[];h&&ee.push(f);for(let P of O)for(let T of P)ee.push(T);return _&&ee.push(f),ee};Lr=e=>new ri({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,filter:e.filter??((t,i)=>Mr(t,i)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??ce.withGuide,i=t?[`${p.default.gray(E)}`,`${Ze(this.state)} ${e.message}`]:[`${Ze(this.state)} ${e.message}`],s=this.userInput,n=this.options,r=e.placeholder,o=s===""&&r!==void 0,a=(l,m)=>{let f=xr(l),g=l.hint&&l.value===this.focusedValue?p.default.dim(` (${l.hint})`):"";switch(m){case"active":return`${p.default.green(li)} ${f}${g}`;case"inactive":return`${p.default.dim(Et)} ${p.default.dim(f)}`;case"disabled":return`${p.default.gray(Et)} ${p.default.strikethrough(p.default.gray(f))}`}};switch(this.state){case"submit":{let l=Cl(this.selectedValues,n),m=l.length>0?` ${p.default.dim(l.map(xr).join(", "))}`:"",f=t?p.default.gray(E):"";return`${i.join(`
47
+ `).map(s=>Tl(s,t,i)).join(`
48
+ `)}function Ir(e){return e.label??String(e.value??"")}function Hr(e,t){if(!e)return!0;let i=(t.label??String(t.value??"")).toLowerCase(),s=(t.hint??"").toLowerCase(),n=String(t.value).toLowerCase(),r=e.toLowerCase();return i.includes(r)||s.includes(r)||n.includes(r)}function Dl(e,t){let i=[];for(let s of t)e.includes(s.value)&&i.push(s);return i}function Rr(e,t,i,s){let n=i,r=i;return s==="center"?n=Math.floor((t-e)/2):s==="right"&&(n=t-e-i),r=t-n-e,[n,r]}function Ql({style:e="heavy",max:t=100,size:i=40,...s}={}){let n=ui(s),r=0,o="",a=Math.max(1,t),l=Math.max(1,i),f=k=>{switch(k){case"initial":case"active":return p.default.magenta;case"error":case"cancel":return p.default.red;case"submit":return p.default.green;default:return p.default.magenta}},m=(k,$)=>{let h=Math.floor(r/a*l);return`${f(k)(Ar[e].repeat(h))}${p.default.dim(Ar[e].repeat(l-h))} ${$}`},g=(k="")=>{o=k,n.start(m("initial",k))},y=(k=1,$)=>{r=Math.min(a,k+r),n.message(m("active",$??o)),o=$??o};return{start:g,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:y,isCancelled:n.isCancelled,message:k=>y(0,k)}}var p,We,Tt,di,Yt,Gi,Ki,Xs,Tr,oe,Pr,Zs,Qs,Dt,en,E,je,Dr,Nr,ci,Pt,zi,Et,Xt,Ur,Yi,tn,qr,sn,nn,Fr,rn,on,an,ln,et,dn,kl,_l,xl,Ks,Wi,Hi,zs,Ji,jl,Sl,Mr,Cl,De,Xi,Lr,Ol,cn,Vr,Il,Wr,un,Sr,Rl,Cr,Or,Al,Ys,El,Tl,Pl,Qt,Jr,Nl,Ul,ql,Fl,Ml,Ye,Ll,Vl,He,Wl,Hl,Jl,li,Bl,Gl,Kl,zl,Yl,Xl,Zl,ui,Ar,Bi,tt,ed,Er,At,td,id,sd,Te,Ne=Ae(()=>{Gs();Gs();p=D(M(),1),We=D(require("node:process"),1),Tt=require("node:fs"),di=require("node:path"),Yt=D(Ns(),1),Gi=require("node:util");Ki=$l(),Xs=()=>process.env.CI==="true",Tr=e=>e.isTTY===!0,oe=(e,t)=>Ki?e:t,Pr=oe("\u25C6","*"),Zs=oe("\u25A0","x"),Qs=oe("\u25B2","x"),Dt=oe("\u25C7","o"),en=oe("\u250C","T"),E=oe("\u2502","|"),je=oe("\u2514","\u2014"),Dr=oe("\u2510","T"),Nr=oe("\u2518","\u2014"),ci=oe("\u25CF",">"),Pt=oe("\u25CB"," "),zi=oe("\u25FB","[\u2022]"),Et=oe("\u25FC","[+]"),Xt=oe("\u25FB","[ ]"),Ur=oe("\u25AA","\u2022"),Yi=oe("\u2500","-"),tn=oe("\u256E","+"),qr=oe("\u251C","+"),sn=oe("\u256F","+"),nn=oe("\u2570","+"),Fr=oe("\u256D","+"),rn=oe("\u25CF","\u2022"),on=oe("\u25C6","*"),an=oe("\u25B2","!"),ln=oe("\u25A0","x"),et=e=>{switch(e){case"initial":case"active":return p.default.cyan(Pr);case"cancel":return p.default.red(Zs);case"error":return p.default.yellow(Qs);case"submit":return p.default.green(Dt)}},dn=e=>{switch(e){case"initial":case"active":return p.default.cyan(E);case"cancel":return p.default.red(E);case"error":return p.default.yellow(E);case"submit":return p.default.green(E)}},kl=e=>e===161||e===164||e===167||e===168||e===170||e===173||e===174||e>=176&&e<=180||e>=182&&e<=186||e>=188&&e<=191||e===198||e===208||e===215||e===216||e>=222&&e<=225||e===230||e>=232&&e<=234||e===236||e===237||e===240||e===242||e===243||e>=247&&e<=250||e===252||e===254||e===257||e===273||e===275||e===283||e===294||e===295||e===299||e>=305&&e<=307||e===312||e>=319&&e<=322||e===324||e>=328&&e<=331||e===333||e===338||e===339||e===358||e===359||e===363||e===462||e===464||e===466||e===468||e===470||e===472||e===474||e===476||e===593||e===609||e===708||e===711||e>=713&&e<=715||e===717||e===720||e>=728&&e<=731||e===733||e===735||e>=768&&e<=879||e>=913&&e<=929||e>=931&&e<=937||e>=945&&e<=961||e>=963&&e<=969||e===1025||e>=1040&&e<=1103||e===1105||e===8208||e>=8211&&e<=8214||e===8216||e===8217||e===8220||e===8221||e>=8224&&e<=8226||e>=8228&&e<=8231||e===8240||e===8242||e===8243||e===8245||e===8251||e===8254||e===8308||e===8319||e>=8321&&e<=8324||e===8364||e===8451||e===8453||e===8457||e===8467||e===8470||e===8481||e===8482||e===8486||e===8491||e===8531||e===8532||e>=8539&&e<=8542||e>=8544&&e<=8555||e>=8560&&e<=8569||e===8585||e>=8592&&e<=8601||e===8632||e===8633||e===8658||e===8660||e===8679||e===8704||e===8706||e===8707||e===8711||e===8712||e===8715||e===8719||e===8721||e===8725||e===8730||e>=8733&&e<=8736||e===8739||e===8741||e>=8743&&e<=8748||e===8750||e>=8756&&e<=8759||e===8764||e===8765||e===8776||e===8780||e===8786||e===8800||e===8801||e>=8804&&e<=8807||e===8810||e===8811||e===8814||e===8815||e===8834||e===8835||e===8838||e===8839||e===8853||e===8857||e===8869||e===8895||e===8978||e>=9312&&e<=9449||e>=9451&&e<=9547||e>=9552&&e<=9587||e>=9600&&e<=9615||e>=9618&&e<=9621||e===9632||e===9633||e>=9635&&e<=9641||e===9650||e===9651||e===9654||e===9655||e===9660||e===9661||e===9664||e===9665||e>=9670&&e<=9672||e===9675||e>=9678&&e<=9681||e>=9698&&e<=9701||e===9711||e===9733||e===9734||e===9737||e===9742||e===9743||e===9756||e===9758||e===9792||e===9794||e===9824||e===9825||e>=9827&&e<=9829||e>=9831&&e<=9834||e===9836||e===9837||e===9839||e===9886||e===9887||e===9919||e>=9926&&e<=9933||e>=9935&&e<=9939||e>=9941&&e<=9953||e===9955||e===9960||e===9961||e>=9963&&e<=9969||e===9972||e>=9974&&e<=9977||e===9979||e===9980||e===9982||e===9983||e===10045||e>=10102&&e<=10111||e>=11094&&e<=11097||e>=12872&&e<=12879||e>=57344&&e<=63743||e>=65024&&e<=65039||e===65533||e>=127232&&e<=127242||e>=127248&&e<=127277||e>=127280&&e<=127337||e>=127344&&e<=127373||e===127375||e===127376||e>=127387&&e<=127404||e>=917760&&e<=917999||e>=983040&&e<=1048573||e>=1048576&&e<=1114109,_l=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,xl=e=>e>=4352&&e<=4447||e===8986||e===8987||e===9001||e===9002||e>=9193&&e<=9196||e===9200||e===9203||e===9725||e===9726||e===9748||e===9749||e>=9800&&e<=9811||e===9855||e===9875||e===9889||e===9898||e===9899||e===9917||e===9918||e===9924||e===9925||e===9934||e===9940||e===9962||e===9970||e===9971||e===9973||e===9978||e===9981||e===9989||e===9994||e===9995||e===10024||e===10060||e===10062||e>=10067&&e<=10069||e===10071||e>=10133&&e<=10135||e===10160||e===10175||e===11035||e===11036||e===11088||e===11093||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12287||e>=12289&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12591||e>=12593&&e<=12686||e>=12688&&e<=12771||e>=12783&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=94176&&e<=94180||e===94192||e===94193||e>=94208&&e<=100343||e>=100352&&e<=101589||e>=101632&&e<=101640||e>=110576&&e<=110579||e>=110581&&e<=110587||e===110589||e===110590||e>=110592&&e<=110882||e===110898||e>=110928&&e<=110930||e===110933||e>=110948&&e<=110951||e>=110960&&e<=111355||e===126980||e===127183||e===127374||e>=127377&&e<=127386||e>=127488&&e<=127490||e>=127504&&e<=127547||e>=127552&&e<=127560||e===127568||e===127569||e>=127584&&e<=127589||e>=127744&&e<=127776||e>=127789&&e<=127797||e>=127799&&e<=127868||e>=127870&&e<=127891||e>=127904&&e<=127946||e>=127951&&e<=127955||e>=127968&&e<=127984||e===127988||e>=127992&&e<=128062||e===128064||e>=128066&&e<=128252||e>=128255&&e<=128317||e>=128331&&e<=128334||e>=128336&&e<=128359||e===128378||e===128405||e===128406||e===128420||e>=128507&&e<=128591||e>=128640&&e<=128709||e===128716||e>=128720&&e<=128722||e>=128725&&e<=128727||e>=128732&&e<=128735||e===128747||e===128748||e>=128756&&e<=128764||e>=128992&&e<=129003||e===129008||e>=129292&&e<=129338||e>=129340&&e<=129349||e>=129351&&e<=129535||e>=129648&&e<=129660||e>=129664&&e<=129672||e>=129680&&e<=129725||e>=129727&&e<=129733||e>=129742&&e<=129755||e>=129760&&e<=129768||e>=129776&&e<=129784||e>=131072&&e<=196605||e>=196608&&e<=262141,Ks=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Wi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Hi=/\t{1,1000}/y,zs=new RegExp("[\\u{1F1E6}-\\u{1F1FF}]{2}|\\u{1F3F4}[\\u{E0061}-\\u{E007A}]{2}[\\u{E0030}-\\u{E0039}\\u{E0061}-\\u{E007A}]{1,3}\\u{E007F}|(?:\\p{Emoji}\\uFE0F\\u20E3?|\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation})(?:\\u200D(?:\\p{Emoji_Modifier_Base}\\p{Emoji_Modifier}?|\\p{Emoji_Presentation}|\\p{Emoji}\\uFE0F\\u20E3?))*","yu"),Ji=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,jl=new RegExp("\\p{M}+","gu"),Sl={limit:1/0,ellipsis:""},Mr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Mr(n,Sl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,g=i.fullWidthWidth??2,y=i.regularWidth??1,k=i.wideWidth??2,$=0,h=0,_=e.length,j=0,O=!1,A=_,L=Math.max(0,s-r),H=0,te=0,P=0,T=0;e:for(;;){if(te>H||h>=_&&h>$){let U=e.slice(H,te)||e.slice($,h);j=0;for(let Q of U.replaceAll(jl,"")){let Y=Q.codePointAt(0)||0;if(_l(Y)?T=g:xl(Y)?T=k:f!==y&&kl(Y)?T=f:T=y,P+T>L&&(A=Math.min(A,Math.max(H,$)+j)),P+T>s){O=!0;break e}j+=Q.length,P+=T}H=te=0}if(h>=_)break;if(Ji.lastIndex=h,Ji.test(e)){if(j=Ji.lastIndex-h,T=j*y,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/y))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Ji.lastIndex;continue}if(Ks.lastIndex=h,Ks.test(e)){if(P+o>L&&(A=Math.min(A,h)),P+o>s){O=!0;break}P+=o,H=$,te=h,h=$=Ks.lastIndex;continue}if(Wi.lastIndex=h,Wi.test(e)){if(j=Wi.lastIndex-h,T=j*a,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/a))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Wi.lastIndex;continue}if(Hi.lastIndex=h,Hi.test(e)){if(j=Hi.lastIndex-h,T=j*l,P+T>L&&(A=Math.min(A,h+Math.floor((L-P)/l))),P+T>s){O=!0;break}P+=T,H=$,te=h,h=$=Hi.lastIndex;continue}if(zs.lastIndex=h,zs.test(e)){if(P+m>L&&(A=Math.min(A,h)),P+m>s){O=!0;break}P+=m,H=$,te=h,h=$=zs.lastIndex;continue}h+=1}return{width:O?L:P,index:O?A:_,truncated:O,ellipsed:O&&s>=r}},Cl={limit:1/0,ellipsis:"",ellipsisWidth:0},De=(e,t={})=>Mr(e,Cl,t).width,Xi="\x1B",Lr="\x9B",Ol=39,cn="\x07",Vr="[",Il="]",Wr="m",un=`${Il}8;;`,Sr=new RegExp(`(?:\\${Vr}(?<code>\\d+)m|\\${un}(?<uri>.*)${cn})`,"y"),Rl=e=>{if(e>=30&&e<=37||e>=90&&e<=97)return 39;if(e>=40&&e<=47||e>=100&&e<=107)return 49;if(e===1||e===2)return 22;if(e===3)return 23;if(e===4)return 24;if(e===7)return 27;if(e===8)return 28;if(e===9)return 29;if(e===0)return 0},Cr=e=>`${Xi}${Vr}${e}${Wr}`,Or=e=>`${Xi}${un}${e}${cn}`,Al=e=>e.map(t=>De(t)),Ys=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:De(o),l=s.next(),f=s.next(),m=0;for(;!l.done;){let g=l.value,y=De(g);a+y<=i?e[e.length-1]+=g:(e.push(g),a=0),(g===Xi||g===Lr)&&(n=!0,r=t.startsWith(un,m+1)),n?r?g===cn&&(n=!1,r=!1):g===Wr&&(n=!1):(a+=y,a===i&&!f.done&&(e.push(""),a=0)),l=f,f=s.next(),m+=g.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},El=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(De(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},Tl=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=Al(o),l=[""];for(let[$,h]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let _=De(l.at(-1)??"");if($!==0&&(_>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),_=0),(_>0||i.trim===!1)&&(l[l.length-1]+=" ",_++)),i.hard&&a[$]>t){let j=t-_,O=1+Math.floor((a[$]-j-1)/t);Math.floor((a[$]-1)/t)<O&&l.push(""),Ys(l,h,t);continue}if(_+a[$]>t&&_>0&&a[$]>0){if(i.wordWrap===!1&&_<t){Ys(l,h,t);continue}l.push("")}if(_+a[$]>t&&i.wordWrap===!1){Ys(l,h,t);continue}l[l.length-1]+=h}i.trim!==!1&&(l=l.map($=>El($)));let f=l.join(`
49
+ `),m=f[Symbol.iterator](),g=m.next(),y=m.next(),k=0;for(;!g.done;){let $=g.value,h=y.value;if(s+=$,$===Xi||$===Lr){Sr.lastIndex=k+1;let j=Sr.exec(f)?.groups;if(j?.code!==void 0){let O=Number.parseFloat(j.code);n=O===Ol?void 0:O}else j?.uri!==void 0&&(r=j.uri.length===0?void 0:j.uri)}let _=n?Rl(n):void 0;h===`
50
+ `?(r&&(s+=Or("")),n&&_&&(s+=Cr(_))):$===`
51
+ `&&(n&&_&&(s+=Cr(n)),r&&(s+=Or(r))),k+=$.length,g=y,y=m.next()}return s};Pl=(e,t,i,s,n)=>{let r=t,o=0;for(let a=i;a<s;a++){let l=e[a];if(r=r-l.length,o++,r<=n)break}return{lineCount:r,removals:o}},Qt=e=>{let{cursor:t,options:i,style:s}=e,n=e.output??process.stdout,r=Rt(n),o=e.columnPadding??0,a=e.rowPadding??4,l=r-o,f=Bs(n),m=p.default.dim("..."),g=e.maxItems??Number.POSITIVE_INFINITY,y=Math.max(f-a,0),k=Math.max(Math.min(g,y),5),$=0;t>=k-3&&($=Math.max(Math.min(t-k+3,i.length-k),0));let h=k<i.length&&$>0,_=k<i.length&&$+k<i.length,j=Math.min($+k,i.length),O=[],A=0;h&&A++,_&&A++;let L=$+(h?1:0),H=j-(_?1:0);for(let P=L;P<H;P++){let T=Zt(s(i[P],P===t),l,{hard:!0,trim:!1}).split(`
52
+ `);O.push(T),A+=T.length}if(A>y){let P=0,T=0,U=A,Q=t-L,Y=(q,se)=>Pl(O,U,q,se,y);h?({lineCount:U,removals:P}=Y(0,Q),U>y&&({lineCount:U,removals:T}=Y(Q+1,O.length))):({lineCount:U,removals:T}=Y(Q+1,O.length),U>y&&({lineCount:U,removals:P}=Y(0,Q))),P>0&&(h=!0,O.splice(0,P)),T>0&&(_=!0,O.splice(O.length-T,T))}let te=[];h&&te.push(m);for(let P of O)for(let T of P)te.push(T);return _&&te.push(m),te};Jr=e=>new ai({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,filter:e.filter??((t,i)=>Hr(t,i)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??ce.withGuide,i=t?[`${p.default.gray(E)}`,`${et(this.state)} ${e.message}`]:[`${et(this.state)} ${e.message}`],s=this.userInput,n=this.options,r=e.placeholder,o=s===""&&r!==void 0,a=(l,f)=>{let m=Ir(l),g=l.hint&&l.value===this.focusedValue?p.default.dim(` (${l.hint})`):"";switch(f){case"active":return`${p.default.green(ci)} ${m}${g}`;case"inactive":return`${p.default.dim(Pt)} ${p.default.dim(m)}`;case"disabled":return`${p.default.gray(Pt)} ${p.default.strikethrough(p.default.gray(m))}`}};switch(this.state){case"submit":{let l=Dl(this.selectedValues,n),f=l.length>0?` ${p.default.dim(l.map(Ir).join(", "))}`:"",m=t?p.default.gray(E):"";return`${i.join(`
53
53
  `)}
54
- ${f}${m}`}case"cancel":{let l=s?` ${p.default.strikethrough(p.default.dim(s))}`:"",m=t?p.default.gray(E):"";return`${i.join(`
54
+ ${m}${f}`}case"cancel":{let l=s?` ${p.default.strikethrough(p.default.dim(s))}`:"",f=t?p.default.gray(E):"";return`${i.join(`
55
55
  `)}
56
- ${m}${l}`}default:{let l=this.state==="error"?p.default.yellow:p.default.cyan,m=t?`${l(E)} `:"",f=t?l(_e):"",g="";if(this.isNavigating||o){let O=o?r:s;g=O!==""?` ${p.default.dim(O)}`:""}else g=` ${this.userInputWithCursor}`;let b=this.filteredOptions.length!==n.length?p.default.dim(` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",k=this.filteredOptions.length===0&&s?[`${m}${p.default.yellow("No matches found")}`]:[],v=this.state==="error"?[`${m}${p.default.yellow(this.error)}`]:[];t&&i.push(`${m.trimEnd()}`),i.push(`${m}${p.default.dim("Search:")}${g}${b}`,...k,...v);let h=[`${p.default.dim("\u2191/\u2193")} to select`,`${p.default.dim("Enter:")} confirm`,`${p.default.dim("Type:")} to search`],_=[`${m}${h.join(" \u2022 ")}`,f],x=this.filteredOptions.length===0?[]:Xt({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:i.length+_.length,style:(O,A)=>a(O,O.disabled?"disabled":A?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...i,...x.map(O=>`${m}${O}`),..._].join(`
57
- `)}}}}).prompt(),Ol=e=>{let t=(s,n,r,o)=>{let a=r.includes(s.value),l=s.label??String(s.value??""),m=s.hint&&o!==void 0&&s.value===o?p.default.dim(` (${s.hint})`):"",f=a?p.default.green(Rt):p.default.dim(zt);return s.disabled?`${p.default.gray(zt)} ${p.default.strikethrough(p.default.gray(l))}`:n?`${f} ${l}${m}`:`${f} ${p.default.dim(l)}`},i=new ri({options:e.options,multiple:!0,filter:e.filter??((s,n)=>Mr(s,n)),validate:()=>{if(e.required&&i.selectedValues.length===0)return"Please select at least one item"},initialValue:e.initialValues,signal:e.signal,input:e.input,output:e.output,render(){let s=`${p.default.gray(E)}
58
- ${Ze(this.state)} ${e.message}
59
- `,n=this.userInput,r=e.placeholder,o=n===""&&r!==void 0,a=this.isNavigating||o?p.default.dim(o?r:n):this.userInputWithCursor,l=this.options,m=this.filteredOptions.length!==l.length?p.default.dim(` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${s}${p.default.gray(E)} ${p.default.dim(`${this.selectedValues.length} items selected`)}`;case"cancel":return`${s}${p.default.gray(E)} ${p.default.strikethrough(p.default.dim(n))}`;default:{let f=this.state==="error"?p.default.yellow:p.default.cyan,g=[`${p.default.dim("\u2191/\u2193")} to navigate`,`${p.default.dim(this.isNavigating?"Space/Tab:":"Tab:")} select`,`${p.default.dim("Enter:")} confirm`,`${p.default.dim("Type:")} to search`],b=this.filteredOptions.length===0&&n?[`${f(E)} ${p.default.yellow("No matches found")}`]:[],k=this.state==="error"?[`${f(E)} ${p.default.yellow(this.error)}`]:[],v=[...`${s}${f(E)}`.split(`
60
- `),`${f(E)} ${p.default.dim("Search:")} ${a}${m}`,...b,...k],h=[`${f(E)} ${g.join(" \u2022 ")}`,`${f(_e)}`],_=Xt({cursor:this.cursor,options:this.filteredOptions,style:(x,O)=>t(x,O,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:v.length+h.length});return[...v,..._.map(x=>`${f(E)} ${x}`),...h].join(`
61
- `)}}}});return i.prompt()},Il=[Dr,Zs,en,Qs],Rl=[Xs,Ar,_e,Er];Al=e=>e,El=(e="",t="",i)=>{let s=i?.output??process.stdout,n=Ot(s),r=2,o=i?.titlePadding??1,a=i?.contentPadding??2,l=i?.width===void 0||i.width==="auto"?1:Math.min(1,i.width),m=i?.withGuide??ce.withGuide?`${E} `:"",f=i?.formatBorder??Al,g=(i?.rounded?Il:Rl).map(f),b=f(Gi),k=f(E),v=Te(m),h=Te(t),_=n-v,x=Math.floor(n*l)-v;if(i?.width==="auto"){let U=e.split(`
62
- `),Z=h+o*2;for(let q of U){let ie=Te(q)+a*2;ie>Z&&(Z=ie)}let Y=Z+r;Y<x&&(x=Y)}x%2!==0&&(x<_?x++:x--);let O=x-r,A=O-o*2,M=h>A?`${t.slice(0,A-3)}...`:t,[H,ee]=Sr(Te(M),O,o,i?.titleAlign),P=Yt(e,O-a*2,{hard:!0,trim:!1});s.write(`${m}${g[0]}${b.repeat(H)}${M}${b.repeat(ee)}${g[1]}
56
+ ${f}${l}`}default:{let l=this.state==="error"?p.default.yellow:p.default.cyan,f=t?`${l(E)} `:"",m=t?l(je):"",g="";if(this.isNavigating||o){let O=o?r:s;g=O!==""?` ${p.default.dim(O)}`:""}else g=` ${this.userInputWithCursor}`;let y=this.filteredOptions.length!==n.length?p.default.dim(` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"",k=this.filteredOptions.length===0&&s?[`${f}${p.default.yellow("No matches found")}`]:[],$=this.state==="error"?[`${f}${p.default.yellow(this.error)}`]:[];t&&i.push(`${f.trimEnd()}`),i.push(`${f}${p.default.dim("Search:")}${g}${y}`,...k,...$);let h=[`${p.default.dim("\u2191/\u2193")} to select`,`${p.default.dim("Enter:")} confirm`,`${p.default.dim("Type:")} to search`],_=[`${f}${h.join(" \u2022 ")}`,m],j=this.filteredOptions.length===0?[]:Qt({cursor:this.cursor,options:this.filteredOptions,columnPadding:t?3:0,rowPadding:i.length+_.length,style:(O,A)=>a(O,O.disabled?"disabled":A?"active":"inactive"),maxItems:e.maxItems,output:e.output});return[...i,...j.map(O=>`${f}${O}`),..._].join(`
57
+ `)}}}}).prompt(),Nl=e=>{let t=(s,n,r,o)=>{let a=r.includes(s.value),l=s.label??String(s.value??""),f=s.hint&&o!==void 0&&s.value===o?p.default.dim(` (${s.hint})`):"",m=a?p.default.green(Et):p.default.dim(Xt);return s.disabled?`${p.default.gray(Xt)} ${p.default.strikethrough(p.default.gray(l))}`:n?`${m} ${l}${f}`:`${m} ${p.default.dim(l)}`},i=new ai({options:e.options,multiple:!0,filter:e.filter??((s,n)=>Hr(s,n)),validate:()=>{if(e.required&&i.selectedValues.length===0)return"Please select at least one item"},initialValue:e.initialValues,signal:e.signal,input:e.input,output:e.output,render(){let s=`${p.default.gray(E)}
58
+ ${et(this.state)} ${e.message}
59
+ `,n=this.userInput,r=e.placeholder,o=n===""&&r!==void 0,a=this.isNavigating||o?p.default.dim(o?r:n):this.userInputWithCursor,l=this.options,f=this.filteredOptions.length!==l.length?p.default.dim(` (${this.filteredOptions.length} match${this.filteredOptions.length===1?"":"es"})`):"";switch(this.state){case"submit":return`${s}${p.default.gray(E)} ${p.default.dim(`${this.selectedValues.length} items selected`)}`;case"cancel":return`${s}${p.default.gray(E)} ${p.default.strikethrough(p.default.dim(n))}`;default:{let m=this.state==="error"?p.default.yellow:p.default.cyan,g=[`${p.default.dim("\u2191/\u2193")} to navigate`,`${p.default.dim(this.isNavigating?"Space/Tab:":"Tab:")} select`,`${p.default.dim("Enter:")} confirm`,`${p.default.dim("Type:")} to search`],y=this.filteredOptions.length===0&&n?[`${m(E)} ${p.default.yellow("No matches found")}`]:[],k=this.state==="error"?[`${m(E)} ${p.default.yellow(this.error)}`]:[],$=[...`${s}${m(E)}`.split(`
60
+ `),`${m(E)} ${p.default.dim("Search:")} ${a}${f}`,...y,...k],h=[`${m(E)} ${g.join(" \u2022 ")}`,`${m(je)}`],_=Qt({cursor:this.cursor,options:this.filteredOptions,style:(j,O)=>t(j,O,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:$.length+h.length});return[...$,..._.map(j=>`${m(E)} ${j}`),...h].join(`
61
+ `)}}}});return i.prompt()},Ul=[Fr,tn,nn,sn],ql=[en,Dr,je,Nr];Fl=e=>e,Ml=(e="",t="",i)=>{let s=i?.output??process.stdout,n=Rt(s),r=2,o=i?.titlePadding??1,a=i?.contentPadding??2,l=i?.width===void 0||i.width==="auto"?1:Math.min(1,i.width),f=i?.withGuide??ce.withGuide?`${E} `:"",m=i?.formatBorder??Fl,g=(i?.rounded?Ul:ql).map(m),y=m(Yi),k=m(E),$=De(f),h=De(t),_=n-$,j=Math.floor(n*l)-$;if(i?.width==="auto"){let U=e.split(`
62
+ `),Q=h+o*2;for(let q of U){let se=De(q)+a*2;se>Q&&(Q=se)}let Y=Q+r;Y<j&&(j=Y)}j%2!==0&&(j<_?j++:j--);let O=j-r,A=O-o*2,L=h>A?`${t.slice(0,A-3)}...`:t,[H,te]=Rr(De(L),O,o,i?.titleAlign),P=Zt(e,O-a*2,{hard:!0,trim:!1});s.write(`${f}${g[0]}${y.repeat(H)}${L}${y.repeat(te)}${g[1]}
63
63
  `);let T=P.split(`
64
- `);for(let U of T){let[Z,Y]=Sr(Te(U),O,a,i?.contentAlign);s.write(`${m}${k}${" ".repeat(Z)}${U}${" ".repeat(Y)}${k}
65
- `)}s.write(`${m}${g[2]}${b.repeat(O)}${g[3]}
66
- `)},Ke=e=>{let t=e.active??"Yes",i=e.inactive??"No";return new Ti({active:t,inactive:i,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let s=e.withGuide??ce.withGuide,n=`${s?`${p.default.gray(E)}
67
- `:""}${Ze(this.state)} ${e.message}
64
+ `);for(let U of T){let[Q,Y]=Rr(De(U),O,a,i?.contentAlign);s.write(`${f}${k}${" ".repeat(Q)}${U}${" ".repeat(Y)}${k}
65
+ `)}s.write(`${f}${g[2]}${y.repeat(O)}${g[3]}
66
+ `)},Ye=e=>{let t=e.active??"Yes",i=e.inactive??"No";return new Ni({active:t,inactive:i,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let s=e.withGuide??ce.withGuide,n=`${s?`${p.default.gray(E)}
67
+ `:""}${et(this.state)} ${e.message}
68
68
  `,r=this.value?t:i;switch(this.state){case"submit":{let o=s?`${p.default.gray(E)} `:"";return`${n}${o}${p.default.dim(r)}`}case"cancel":{let o=s?`${p.default.gray(E)} `:"";return`${n}${o}${p.default.strikethrough(p.default.dim(r))}${s?`
69
- ${p.default.gray(E)}`:""}`}default:{let o=s?`${p.default.cyan(E)} `:"",a=s?p.default.cyan(_e):"";return`${n}${o}${this.value?`${p.default.green(li)} ${t}`:`${p.default.dim(Et)} ${p.default.dim(t)}`}${e.vertical?s?`
69
+ ${p.default.gray(E)}`:""}`}default:{let o=s?`${p.default.cyan(E)} `:"",a=s?p.default.cyan(je):"";return`${n}${o}${this.value?`${p.default.green(ci)} ${t}`:`${p.default.dim(Pt)} ${p.default.dim(t)}`}${e.vertical?s?`
70
70
  ${p.default.cyan(E)} `:`
71
- `:` ${p.default.dim("/")} `}${this.value?`${p.default.dim(Et)} ${p.default.dim(i)}`:`${p.default.green(li)} ${i}`}
71
+ `:` ${p.default.dim("/")} `}${this.value?`${p.default.dim(Pt)} ${p.default.dim(i)}`:`${p.default.green(ci)} ${i}`}
72
72
  ${a}
73
- `}}}}).prompt()},Tl=async(e,t)=>{let i={},s=Object.keys(e);for(let n of s){let r=e[n],o=await r({results:i})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&le(o)){i[n]="canceled",t.onCancel({results:i});continue}i[n]=o}return i},Pl=e=>{let{selectableGroups:t=!0,groupSpacing:i=0}=e,s=(r,o,a=[])=>{let l=r.label??String(r.value),m=typeof r.group=="string",f=m&&(a[a.indexOf(r)+1]??{group:!0}),g=m&&f&&f.group===!0,b=m?t?`${g?_e:E} `:" ":"",k="";if(i>0&&!m){let h=`
74
- ${p.default.cyan(E)}`;k=`${h.repeat(i-1)}${h} `}if(o==="active")return`${k}${p.default.dim(b)}${p.default.cyan(Bi)} ${l}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`;if(o==="group-active")return`${k}${b}${p.default.cyan(Bi)} ${p.default.dim(l)}`;if(o==="group-active-selected")return`${k}${b}${p.default.green(Rt)} ${p.default.dim(l)}`;if(o==="selected"){let h=m||t?p.default.green(Rt):"";return`${k}${p.default.dim(b)}${h} ${p.default.dim(l)}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`}if(o==="cancelled")return`${p.default.strikethrough(p.default.dim(l))}`;if(o==="active-selected")return`${k}${p.default.dim(b)}${p.default.green(Rt)} ${l}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`;if(o==="submitted")return`${p.default.dim(l)}`;let v=m||t?p.default.dim(zt):"";return`${k}${p.default.dim(b)}${v} ${p.default.dim(l)}`},n=e.required??!0;return new Pi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:n,cursorAt:e.cursorAt,selectableGroups:t,validate(r){if(n&&(r===void 0||r.length===0))return`Please select at least one option.
73
+ `}}}}).prompt()},Ll=async(e,t)=>{let i={},s=Object.keys(e);for(let n of s){let r=e[n],o=await r({results:i})?.catch(a=>{throw a});if(typeof t?.onCancel=="function"&&le(o)){i[n]="canceled",t.onCancel({results:i});continue}i[n]=o}return i},Vl=e=>{let{selectableGroups:t=!0,groupSpacing:i=0}=e,s=(r,o,a=[])=>{let l=r.label??String(r.value),f=typeof r.group=="string",m=f&&(a[a.indexOf(r)+1]??{group:!0}),g=f&&m&&m.group===!0,y=f?t?`${g?je:E} `:" ":"",k="";if(i>0&&!f){let h=`
74
+ ${p.default.cyan(E)}`;k=`${h.repeat(i-1)}${h} `}if(o==="active")return`${k}${p.default.dim(y)}${p.default.cyan(zi)} ${l}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`;if(o==="group-active")return`${k}${y}${p.default.cyan(zi)} ${p.default.dim(l)}`;if(o==="group-active-selected")return`${k}${y}${p.default.green(Et)} ${p.default.dim(l)}`;if(o==="selected"){let h=f||t?p.default.green(Et):"";return`${k}${p.default.dim(y)}${h} ${p.default.dim(l)}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`}if(o==="cancelled")return`${p.default.strikethrough(p.default.dim(l))}`;if(o==="active-selected")return`${k}${p.default.dim(y)}${p.default.green(Et)} ${l}${r.hint?` ${p.default.dim(`(${r.hint})`)}`:""}`;if(o==="submitted")return`${p.default.dim(l)}`;let $=f||t?p.default.dim(Xt):"";return`${k}${p.default.dim(y)}${$} ${p.default.dim(l)}`},n=e.required??!0;return new Ui({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:n,cursorAt:e.cursorAt,selectableGroups:t,validate(r){if(n&&(r===void 0||r.length===0))return`Please select at least one option.
75
75
  ${p.default.reset(p.default.dim(`Press ${p.default.gray(p.default.bgWhite(p.default.inverse(" space ")))} to select, ${p.default.gray(p.default.bgWhite(p.default.inverse(" enter ")))} to submit`))}`},render(){let r=`${p.default.gray(E)}
76
- ${Ze(this.state)} ${e.message}
77
- `,o=this.value??[];switch(this.state){case"submit":{let a=this.options.filter(({value:m})=>o.includes(m)).map(m=>s(m,"submitted")),l=a.length===0?"":` ${a.join(p.default.dim(", "))}`;return`${r}${p.default.gray(E)}${l}`}case"cancel":{let a=this.options.filter(({value:l})=>o.includes(l)).map(l=>s(l,"cancelled")).join(p.default.dim(", "));return`${r}${p.default.gray(E)} ${a.trim()?`${a}
76
+ ${et(this.state)} ${e.message}
77
+ `,o=this.value??[];switch(this.state){case"submit":{let a=this.options.filter(({value:f})=>o.includes(f)).map(f=>s(f,"submitted")),l=a.length===0?"":` ${a.join(p.default.dim(", "))}`;return`${r}${p.default.gray(E)}${l}`}case"cancel":{let a=this.options.filter(({value:l})=>o.includes(l)).map(l=>s(l,"cancelled")).join(p.default.dim(", "));return`${r}${p.default.gray(E)} ${a.trim()?`${a}
78
78
  ${p.default.gray(E)}`:""}`}case"error":{let a=this.error.split(`
79
- `).map((l,m)=>m===0?`${p.default.yellow(_e)} ${p.default.yellow(l)}`:` ${l}`).join(`
80
- `);return`${r}${p.default.yellow(E)} ${this.options.map((l,m,f)=>{let g=o.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`),b=m===this.cursor;return!b&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?s(l,g?"group-active-selected":"group-active",f):b&&g?s(l,"active-selected",f):g?s(l,"selected",f):s(l,b?"active":"inactive",f)}).join(`
79
+ `).map((l,f)=>f===0?`${p.default.yellow(je)} ${p.default.yellow(l)}`:` ${l}`).join(`
80
+ `);return`${r}${p.default.yellow(E)} ${this.options.map((l,f,m)=>{let g=o.includes(l.value)||l.group===!0&&this.isGroupSelected(`${l.value}`),y=f===this.cursor;return!y&&typeof l.group=="string"&&this.options[this.cursor].value===l.group?s(l,g?"group-active-selected":"group-active",m):y&&g?s(l,"active-selected",m):g?s(l,"selected",m):s(l,y?"active":"inactive",m)}).join(`
81
81
  ${p.default.yellow(E)} `)}
82
82
  ${a}
83
- `}default:{let a=this.options.map((m,f,g)=>{let b=o.includes(m.value)||m.group===!0&&this.isGroupSelected(`${m.value}`),k=f===this.cursor,v=!k&&typeof m.group=="string"&&this.options[this.cursor].value===m.group,h="";return v?h=s(m,b?"group-active-selected":"group-active",g):k&&b?h=s(m,"active-selected",g):b?h=s(m,"selected",g):h=s(m,k?"active":"inactive",g),`${f!==0&&!h.startsWith(`
83
+ `}default:{let a=this.options.map((f,m,g)=>{let y=o.includes(f.value)||f.group===!0&&this.isGroupSelected(`${f.value}`),k=m===this.cursor,$=!k&&typeof f.group=="string"&&this.options[this.cursor].value===f.group,h="";return $?h=s(f,y?"group-active-selected":"group-active",g):k&&y?h=s(f,"active-selected",g):y?h=s(f,"selected",g):h=s(f,k?"active":"inactive",g),`${m!==0&&!h.startsWith(`
84
84
  `)?" ":""}${h}`}).join(`
85
85
  ${p.default.cyan(E)}`),l=a.startsWith(`
86
86
  `)?"":" ";return`${r}${p.default.cyan(E)}${l}${a}
87
- ${p.default.cyan(_e)}
88
- `}}}}).prompt()},Ve={message:(e=[],{symbol:t=p.default.gray(E),secondarySymbol:i=p.default.gray(E),output:s=process.stdout,spacing:n=1,withGuide:r}={})=>{let o=[],a=r??ce.withGuide,l=a?i:"",m=a?`${t} `:"",f=a?`${i} `:"";for(let b=0;b<n;b++)o.push(l);let g=Array.isArray(e)?e:e.split(`
89
- `);if(g.length>0){let[b,...k]=g;b.length>0?o.push(`${m}${b}`):o.push(a?t:"");for(let v of k)v.length>0?o.push(`${f}${v}`):o.push(a?i:"")}s.write(`${o.join(`
87
+ ${p.default.cyan(je)}
88
+ `}}}}).prompt()},He={message:(e=[],{symbol:t=p.default.gray(E),secondarySymbol:i=p.default.gray(E),output:s=process.stdout,spacing:n=1,withGuide:r}={})=>{let o=[],a=r??ce.withGuide,l=a?i:"",f=a?`${t} `:"",m=a?`${i} `:"";for(let y=0;y<n;y++)o.push(l);let g=Array.isArray(e)?e:e.split(`
89
+ `);if(g.length>0){let[y,...k]=g;y.length>0?o.push(`${f}${y}`):o.push(a?t:"");for(let $ of k)$.length>0?o.push(`${m}${$}`):o.push(a?i:"")}s.write(`${o.join(`
90
90
  `)}
91
- `)},info:(e,t)=>{Ve.message(e,{...t,symbol:p.default.blue(tn)})},success:(e,t)=>{Ve.message(e,{...t,symbol:p.default.green(sn)})},step:(e,t)=>{Ve.message(e,{...t,symbol:p.default.green(Tt)})},warn:(e,t)=>{Ve.message(e,{...t,symbol:p.default.yellow(nn)})},warning:(e,t)=>{Ve.warn(e,t)},error:(e,t)=>{Ve.message(e,{...t,symbol:p.default.red(rn)})}},Dl=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(_e)} ${p.default.red(e)}
91
+ `)},info:(e,t)=>{He.message(e,{...t,symbol:p.default.blue(rn)})},success:(e,t)=>{He.message(e,{...t,symbol:p.default.green(on)})},step:(e,t)=>{He.message(e,{...t,symbol:p.default.green(Dt)})},warn:(e,t)=>{He.message(e,{...t,symbol:p.default.yellow(an)})},warning:(e,t)=>{He.warn(e,t)},error:(e,t)=>{He.message(e,{...t,symbol:p.default.red(ln)})}},Wl=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(je)} ${p.default.red(e)}
92
92
 
93
- `)},Nl=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(Xs)} ${e}
94
- `)},Ul=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(E)}
95
- ${p.default.gray(_e)} ${e}
93
+ `)},Hl=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(en)} ${e}
94
+ `)},Jl=(e="",t)=>{(t?.output??process.stdout).write(`${p.default.gray(E)}
95
+ ${p.default.gray(je)} ${e}
96
96
 
97
- `)},oi=(e,t)=>e.split(`
97
+ `)},li=(e,t)=>e.split(`
98
98
  `).map(i=>t(i)).join(`
99
- `),ql=e=>{let t=(s,n)=>{let r=s.label??String(s.value);return n==="disabled"?`${p.default.gray(zt)} ${oi(r,o=>p.default.strikethrough(p.default.gray(o)))}${s.hint?` ${p.default.dim(`(${s.hint??"disabled"})`)}`:""}`:n==="active"?`${p.default.cyan(Bi)} ${r}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="selected"?`${p.default.green(Rt)} ${oi(r,p.default.dim)}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="cancelled"?`${oi(r,o=>p.default.strikethrough(p.default.dim(o)))}`:n==="active-selected"?`${p.default.green(Rt)} ${r}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="submitted"?`${oi(r,p.default.dim)}`:`${p.default.dim(zt)} ${oi(r,p.default.dim)}`},i=e.required??!0;return new Di({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:i,cursorAt:e.cursorAt,validate(s){if(i&&(s===void 0||s.length===0))return`Please select at least one option.
100
- ${p.default.reset(p.default.dim(`Press ${p.default.gray(p.default.bgWhite(p.default.inverse(" space ")))} to select, ${p.default.gray(p.default.bgWhite(p.default.inverse(" enter ")))} to submit`))}`},render(){let s=nt(e.output,e.message,`${on(this.state)} `,`${Ze(this.state)} `),n=`${p.default.gray(E)}
99
+ `),Bl=e=>{let t=(s,n)=>{let r=s.label??String(s.value);return n==="disabled"?`${p.default.gray(Xt)} ${li(r,o=>p.default.strikethrough(p.default.gray(o)))}${s.hint?` ${p.default.dim(`(${s.hint??"disabled"})`)}`:""}`:n==="active"?`${p.default.cyan(zi)} ${r}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="selected"?`${p.default.green(Et)} ${li(r,p.default.dim)}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="cancelled"?`${li(r,o=>p.default.strikethrough(p.default.dim(o)))}`:n==="active-selected"?`${p.default.green(Et)} ${r}${s.hint?` ${p.default.dim(`(${s.hint})`)}`:""}`:n==="submitted"?`${li(r,p.default.dim)}`:`${p.default.dim(Xt)} ${li(r,p.default.dim)}`},i=e.required??!0;return new qi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValues:e.initialValues,required:i,cursorAt:e.cursorAt,validate(s){if(i&&(s===void 0||s.length===0))return`Please select at least one option.
100
+ ${p.default.reset(p.default.dim(`Press ${p.default.gray(p.default.bgWhite(p.default.inverse(" space ")))} to select, ${p.default.gray(p.default.bgWhite(p.default.inverse(" enter ")))} to submit`))}`},render(){let s=ot(e.output,e.message,`${dn(this.state)} `,`${et(this.state)} `),n=`${p.default.gray(E)}
101
101
  ${s}
102
- `,r=this.value??[],o=(a,l)=>{if(a.disabled)return t(a,"disabled");let m=r.includes(a.value);return l&&m?t(a,"active-selected"):m?t(a,"selected"):t(a,l?"active":"inactive")};switch(this.state){case"submit":{let a=this.options.filter(({value:m})=>r.includes(m)).map(m=>t(m,"submitted")).join(p.default.dim(", "))||p.default.dim("none"),l=nt(e.output,a,`${p.default.gray(E)} `);return`${n}${l}`}case"cancel":{let a=this.options.filter(({value:m})=>r.includes(m)).map(m=>t(m,"cancelled")).join(p.default.dim(", "));if(a.trim()==="")return`${n}${p.default.gray(E)}`;let l=nt(e.output,a,`${p.default.gray(E)} `);return`${n}${l}
102
+ `,r=this.value??[],o=(a,l)=>{if(a.disabled)return t(a,"disabled");let f=r.includes(a.value);return l&&f?t(a,"active-selected"):f?t(a,"selected"):t(a,l?"active":"inactive")};switch(this.state){case"submit":{let a=this.options.filter(({value:f})=>r.includes(f)).map(f=>t(f,"submitted")).join(p.default.dim(", "))||p.default.dim("none"),l=ot(e.output,a,`${p.default.gray(E)} `);return`${n}${l}`}case"cancel":{let a=this.options.filter(({value:f})=>r.includes(f)).map(f=>t(f,"cancelled")).join(p.default.dim(", "));if(a.trim()==="")return`${n}${p.default.gray(E)}`;let l=ot(e.output,a,`${p.default.gray(E)} `);return`${n}${l}
103
103
  ${p.default.gray(E)}`}case"error":{let a=`${p.default.yellow(E)} `,l=this.error.split(`
104
- `).map((g,b)=>b===0?`${p.default.yellow(_e)} ${p.default.yellow(g)}`:` ${g}`).join(`
105
- `),m=n.split(`
106
- `).length,f=l.split(`
107
- `).length+1;return`${n}${a}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:m+f,style:o}).join(`
104
+ `).map((g,y)=>y===0?`${p.default.yellow(je)} ${p.default.yellow(g)}`:` ${g}`).join(`
105
+ `),f=n.split(`
106
+ `).length,m=l.split(`
107
+ `).length+1;return`${n}${a}${Qt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:f+m,style:o}).join(`
108
108
  ${a}`)}
109
109
  ${l}
110
110
  `}default:{let a=`${p.default.cyan(E)} `,l=n.split(`
111
- `).length;return`${n}${a}${Xt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+2,style:o}).join(`
111
+ `).length;return`${n}${a}${Qt({output:e.output,options:this.options,cursor:this.cursor,maxItems:e.maxItems,columnPadding:a.length,rowPadding:l+2,style:o}).join(`
112
112
  ${a}`)}
113
- ${p.default.cyan(_e)}
114
- `}}}}).prompt()},Fl=e=>p.default.dim(e),Ml=(e,t,i)=>{let s={hard:!0,trim:!1},n=Yt(e,t,s).split(`
115
- `),r=n.reduce((l,m)=>Math.max(Te(m),l),0),o=n.map(i).reduce((l,m)=>Math.max(Te(m),l),0),a=t-(o-r);return Yt(e,a,s)},Ll=(e="",t="",i)=>{let s=i?.output??Le.default.stdout,n=i?.withGuide??ce.withGuide,r=i?.format??Fl,o=["",...Ml(e,Ot(s)-6,r).split(`
116
- `).map(r),""],a=Te(t),l=Math.max(o.reduce((b,k)=>{let v=Te(k);return v>b?v:b},0),a)+2,m=o.map(b=>`${p.default.gray(E)} ${b}${" ".repeat(l-Te(b))}${p.default.gray(E)}`).join(`
117
- `),f=n?`${p.default.gray(E)}
118
- `:"",g=n?Pr:en;s.write(`${f}${p.default.green(Tt)} ${p.default.reset(t)} ${p.default.gray(Gi.repeat(Math.max(l-a-1,1))+Zs)}
119
- ${m}
120
- ${p.default.gray(g+Gi.repeat(l+2)+Qs)}
121
- `)},Vl=e=>new vr({validate:e.validate,mask:e.mask??Tr,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??ce.withGuide,i=`${t?`${p.default.gray(E)}
122
- `:""}${Ze(this.state)} ${e.message}
123
- `,s=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let r=t?`${p.default.yellow(E)} `:"",o=t?`${p.default.yellow(_e)} `:"",a=n??"";return e.clearOnError&&this.clear(),`${i.trim()}
113
+ ${p.default.cyan(je)}
114
+ `}}}}).prompt()},Gl=e=>p.default.dim(e),Kl=(e,t,i)=>{let s={hard:!0,trim:!1},n=Zt(e,t,s).split(`
115
+ `),r=n.reduce((l,f)=>Math.max(De(f),l),0),o=n.map(i).reduce((l,f)=>Math.max(De(f),l),0),a=t-(o-r);return Zt(e,a,s)},zl=(e="",t="",i)=>{let s=i?.output??We.default.stdout,n=i?.withGuide??ce.withGuide,r=i?.format??Gl,o=["",...Kl(e,Rt(s)-6,r).split(`
116
+ `).map(r),""],a=De(t),l=Math.max(o.reduce((y,k)=>{let $=De(k);return $>y?$:y},0),a)+2,f=o.map(y=>`${p.default.gray(E)} ${y}${" ".repeat(l-De(y))}${p.default.gray(E)}`).join(`
117
+ `),m=n?`${p.default.gray(E)}
118
+ `:"",g=n?qr:nn;s.write(`${m}${p.default.green(Dt)} ${p.default.reset(t)} ${p.default.gray(Yi.repeat(Math.max(l-a-1,1))+tn)}
119
+ ${f}
120
+ ${p.default.gray(g+Yi.repeat(l+2)+sn)}
121
+ `)},Yl=e=>new jr({validate:e.validate,mask:e.mask??Ur,signal:e.signal,input:e.input,output:e.output,render(){let t=e.withGuide??ce.withGuide,i=`${t?`${p.default.gray(E)}
122
+ `:""}${et(this.state)} ${e.message}
123
+ `,s=this.userInputWithCursor,n=this.masked;switch(this.state){case"error":{let r=t?`${p.default.yellow(E)} `:"",o=t?`${p.default.yellow(je)} `:"",a=n??"";return e.clearOnError&&this.clear(),`${i.trim()}
124
124
  ${r}${a}
125
125
  ${o}${p.default.yellow(this.error)}
126
126
  `}case"submit":{let r=t?`${p.default.gray(E)} `:"",o=n?p.default.dim(n):"";return`${i}${r}${o}`}case"cancel":{let r=t?`${p.default.gray(E)} `:"",o=n?p.default.strikethrough(p.default.dim(n)):"";return`${i}${r}${o}${n&&t?`
127
- ${p.default.gray(E)}`:""}`}default:{let r=t?`${p.default.cyan(E)} `:"",o=t?p.default.cyan(_e):"";return`${i}${r}${s}
127
+ ${p.default.gray(E)}`:""}`}default:{let r=t?`${p.default.cyan(E)} `:"",o=t?p.default.cyan(je):"";return`${i}${r}${s}
128
128
  ${o}
129
- `}}}}).prompt(),Wl=e=>{let t=e.validate;return Lr({...e,initialUserInput:e.initialValue??e.root??process.cwd(),maxItems:5,validate(i){if(!Array.isArray(i)){if(!i)return"Please select a path";if(t)return t(i)}},options(){let i=this.userInput;if(i==="")return[];try{let s;return(0,At.existsSync)(i)?(0,At.lstatSync)(i).isDirectory()?s=i:s=(0,ai.dirname)(i):s=(0,ai.dirname)(i),(0,At.readdirSync)(s).map(n=>{let r=(0,ai.join)(s,n),o=(0,At.lstatSync)(r);return{name:n,path:r,isDirectory:o.isDirectory()}}).filter(({path:n,isDirectory:r})=>n.startsWith(i)&&(e.directory||!r)).map(n=>({value:n.path}))}catch{return[]}}})},Hl=p.default.magenta,di=({indicator:e="dots",onCancel:t,output:i=process.stdout,cancelMessage:s,errorMessage:n,frames:r=Ji?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Ji?80:120,signal:a,...l}={})=>{let m=Ks(),f,g,b=!1,k=!1,v="",h,_=performance.now(),x=Ot(i),O=l?.styleFrame??Hl,A=F=>{let X=F>1?n??ce.messages.error:s??ce.messages.cancel;k=F===1,b&&(ie(X,F),k&&typeof t=="function"&&t())},M=()=>A(2),H=()=>A(1),ee=()=>{process.on("uncaughtExceptionMonitor",M),process.on("unhandledRejection",M),process.on("SIGINT",H),process.on("SIGTERM",H),process.on("exit",A),a&&a.addEventListener("abort",H)},P=()=>{process.removeListener("uncaughtExceptionMonitor",M),process.removeListener("unhandledRejection",M),process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),process.removeListener("exit",A),a&&a.removeEventListener("abort",H)},T=()=>{if(h===void 0)return;m&&i.write(`
130
- `);let F=Yt(h,x,{hard:!0,trim:!1}).split(`
131
- `);F.length>1&&i.write(Kt.cursor.up(F.length-1)),i.write(Kt.cursor.to(0)),i.write(Kt.erase.down())},U=F=>F.replace(/\.+$/,""),Z=F=>{let X=(performance.now()-F)/1e3,Q=Math.floor(X/60),G=Math.floor(X%60);return Q>0?`[${Q}m ${G}s]`:`[${G}s]`},Y=l.withGuide??ce.withGuide,q=(F="")=>{b=!0,f=wr({output:i}),v=U(F),_=performance.now(),Y&&i.write(`${p.default.gray(E)}
132
- `);let X=0,Q=0;ee(),g=setInterval(()=>{if(m&&v===h)return;T(),h=v;let G=O(r[X]),Oe;if(m)Oe=`${G} ${v}...`;else if(e==="timer")Oe=`${G} ${v} ${Z(_)}`;else{let de=".".repeat(Math.floor(Q)).slice(0,3);Oe=`${G} ${v}${de}`}let Be=Yt(Oe,x,{hard:!0,trim:!1});i.write(Be),X=X+1<r.length?X+1:0,Q=Q<4?Q+.125:0},o)},ie=(F="",X=0,Q=!1)=>{if(!b)return;b=!1,clearInterval(g),T();let G=X===0?p.default.green(Tt):X===1?p.default.red(zs):p.default.red(Ys);v=F??v,Q||(e==="timer"?i.write(`${G} ${v} ${Z(_)}
133
- `):i.write(`${G} ${v}
134
- `)),P(),f()};return{start:q,stop:(F="")=>ie(F,0),message:(F="")=>{v=U(F??v)},cancel:(F="")=>ie(F,1),error:(F="")=>ie(F,2),clear:()=>ie("",0,!0),get isCancelled(){return k}}},Cr={light:oe("\u2500","-"),heavy:oe("\u2501","="),block:oe("\u2588","#")};Wi=(e,t)=>e.includes(`
129
+ `}}}}).prompt(),Xl=e=>{let t=e.validate;return Jr({...e,initialUserInput:e.initialValue??e.root??process.cwd(),maxItems:5,validate(i){if(!Array.isArray(i)){if(!i)return"Please select a path";if(t)return t(i)}},options(){let i=this.userInput;if(i==="")return[];try{let s;return(0,Tt.existsSync)(i)?(0,Tt.lstatSync)(i).isDirectory()?s=i:s=(0,di.dirname)(i):s=(0,di.dirname)(i),(0,Tt.readdirSync)(s).map(n=>{let r=(0,di.join)(s,n),o=(0,Tt.lstatSync)(r);return{name:n,path:r,isDirectory:o.isDirectory()}}).filter(({path:n,isDirectory:r})=>n.startsWith(i)&&(e.directory||!r)).map(n=>({value:n.path}))}catch{return[]}}})},Zl=p.default.magenta,ui=({indicator:e="dots",onCancel:t,output:i=process.stdout,cancelMessage:s,errorMessage:n,frames:r=Ki?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Ki?80:120,signal:a,...l}={})=>{let f=Xs(),m,g,y=!1,k=!1,$="",h,_=performance.now(),j=Rt(i),O=l?.styleFrame??Zl,A=F=>{let X=F>1?n??ce.messages.error:s??ce.messages.cancel;k=F===1,y&&(se(X,F),k&&typeof t=="function"&&t())},L=()=>A(2),H=()=>A(1),te=()=>{process.on("uncaughtExceptionMonitor",L),process.on("unhandledRejection",L),process.on("SIGINT",H),process.on("SIGTERM",H),process.on("exit",A),a&&a.addEventListener("abort",H)},P=()=>{process.removeListener("uncaughtExceptionMonitor",L),process.removeListener("unhandledRejection",L),process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),process.removeListener("exit",A),a&&a.removeEventListener("abort",H)},T=()=>{if(h===void 0)return;f&&i.write(`
130
+ `);let F=Zt(h,j,{hard:!0,trim:!1}).split(`
131
+ `);F.length>1&&i.write(Yt.cursor.up(F.length-1)),i.write(Yt.cursor.to(0)),i.write(Yt.erase.down())},U=F=>F.replace(/\.+$/,""),Q=F=>{let X=(performance.now()-F)/1e3,ee=Math.floor(X/60),K=Math.floor(X%60);return ee>0?`[${ee}m ${K}s]`:`[${K}s]`},Y=l.withGuide??ce.withGuide,q=(F="")=>{y=!0,m=xr({output:i}),$=U(F),_=performance.now(),Y&&i.write(`${p.default.gray(E)}
132
+ `);let X=0,ee=0;te(),g=setInterval(()=>{if(f&&$===h)return;T(),h=$;let K=O(r[X]),Re;if(f)Re=`${K} ${$}...`;else if(e==="timer")Re=`${K} ${$} ${Q(_)}`;else{let de=".".repeat(Math.floor(ee)).slice(0,3);Re=`${K} ${$}${de}`}let Ke=Zt(Re,j,{hard:!0,trim:!1});i.write(Ke),X=X+1<r.length?X+1:0,ee=ee<4?ee+.125:0},o)},se=(F="",X=0,ee=!1)=>{if(!y)return;y=!1,clearInterval(g),T();let K=X===0?p.default.green(Dt):X===1?p.default.red(Zs):p.default.red(Qs);$=F??$,ee||(e==="timer"?i.write(`${K} ${$} ${Q(_)}
133
+ `):i.write(`${K} ${$}
134
+ `)),P(),m()};return{start:q,stop:(F="")=>se(F,0),message:(F="")=>{$=U(F??$)},cancel:(F="")=>se(F,1),error:(F="")=>se(F,2),clear:()=>se("",0,!0),get isCancelled(){return k}}},Ar={light:oe("\u2500","-"),heavy:oe("\u2501","="),block:oe("\u2588","#")};Bi=(e,t)=>e.includes(`
135
135
  `)?e.split(`
136
136
  `).map(i=>t(i)).join(`
137
- `):t(e),Qe=e=>{let t=(i,s)=>{let n=i.label??String(i.value);switch(s){case"disabled":return`${p.default.gray(Et)} ${Wi(n,p.default.gray)}${i.hint?` ${p.default.dim(`(${i.hint??"disabled"})`)}`:""}`;case"selected":return`${Wi(n,p.default.dim)}`;case"active":return`${p.default.green(li)} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`;case"cancelled":return`${Wi(n,r=>p.default.strikethrough(p.default.dim(r)))}`;default:return`${p.default.dim(Et)} ${Wi(n,p.default.dim)}`}};return new Ni({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let i=e.withGuide??ce.withGuide,s=`${Ze(this.state)} `,n=`${on(this.state)} `,r=nt(e.output,e.message,n,s),o=`${i?`${p.default.gray(E)}
137
+ `):t(e),tt=e=>{let t=(i,s)=>{let n=i.label??String(i.value);switch(s){case"disabled":return`${p.default.gray(Pt)} ${Bi(n,p.default.gray)}${i.hint?` ${p.default.dim(`(${i.hint??"disabled"})`)}`:""}`;case"selected":return`${Bi(n,p.default.dim)}`;case"active":return`${p.default.green(ci)} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`;case"cancelled":return`${Bi(n,r=>p.default.strikethrough(p.default.dim(r)))}`;default:return`${p.default.dim(Pt)} ${Bi(n,p.default.dim)}`}};return new Fi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let i=e.withGuide??ce.withGuide,s=`${et(this.state)} `,n=`${dn(this.state)} `,r=ot(e.output,e.message,n,s),o=`${i?`${p.default.gray(E)}
138
138
  `:""}${r}
139
- `;switch(this.state){case"submit":{let a=i?`${p.default.gray(E)} `:"",l=nt(e.output,t(this.options[this.cursor],"selected"),a);return`${o}${l}`}case"cancel":{let a=i?`${p.default.gray(E)} `:"",l=nt(e.output,t(this.options[this.cursor],"cancelled"),a);return`${o}${l}${i?`
140
- ${p.default.gray(E)}`:""}`}default:{let a=i?`${p.default.cyan(E)} `:"",l=i?p.default.cyan(_e):"",m=o.split(`
141
- `).length,f=i?2:1;return`${o}${a}${Xt({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:m+f,style:(g,b)=>t(g,g.disabled?"disabled":b?"active":"inactive")}).join(`
139
+ `;switch(this.state){case"submit":{let a=i?`${p.default.gray(E)} `:"",l=ot(e.output,t(this.options[this.cursor],"selected"),a);return`${o}${l}`}case"cancel":{let a=i?`${p.default.gray(E)} `:"",l=ot(e.output,t(this.options[this.cursor],"cancelled"),a);return`${o}${l}${i?`
140
+ ${p.default.gray(E)}`:""}`}default:{let a=i?`${p.default.cyan(E)} `:"",l=i?p.default.cyan(je):"",f=o.split(`
141
+ `).length,m=i?2:1;return`${o}${a}${Qt({output:e.output,cursor:this.cursor,options:this.options,maxItems:e.maxItems,columnPadding:a.length,rowPadding:f+m,style:(g,y)=>t(g,g.disabled?"disabled":y?"active":"inactive")}).join(`
142
142
  ${a}`)}
143
143
  ${l}
144
- `}}}}).prompt()},Bl=e=>{let t=(i,s="inactive")=>{let n=i.label??String(i.value);return s==="selected"?`${p.default.dim(n)}`:s==="cancelled"?`${p.default.strikethrough(p.default.dim(n))}`:s==="active"?`${p.default.bgCyan(p.default.gray(` ${i.value} `))} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`:`${p.default.gray(p.default.bgWhite(p.default.inverse(` ${i.value} `)))} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`};return new Ui({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,caseSensitive:e.caseSensitive,render(){let i=e.withGuide??ce.withGuide,s=`${i?`${p.default.gray(E)}
145
- `:""}${Ze(this.state)} ${e.message}
146
- `;switch(this.state){case"submit":{let n=i?`${p.default.gray(E)} `:"",r=this.options.find(a=>a.value===this.value)??e.options[0],o=nt(e.output,t(r,"selected"),n);return`${s}${o}`}case"cancel":{let n=i?`${p.default.gray(E)} `:"",r=nt(e.output,t(this.options[0],"cancelled"),n);return`${s}${r}${i?`
147
- ${p.default.gray(E)}`:""}`}default:{let n=i?`${p.default.cyan(E)} `:"",r=i?p.default.cyan(_e):"",o=this.options.map((a,l)=>nt(e.output,t(a,l===this.cursor?"active":"inactive"),n)).join(`
144
+ `}}}}).prompt()},ed=e=>{let t=(i,s="inactive")=>{let n=i.label??String(i.value);return s==="selected"?`${p.default.dim(n)}`:s==="cancelled"?`${p.default.strikethrough(p.default.dim(n))}`:s==="active"?`${p.default.bgCyan(p.default.gray(` ${i.value} `))} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`:`${p.default.gray(p.default.bgWhite(p.default.inverse(` ${i.value} `)))} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`};return new Mi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,caseSensitive:e.caseSensitive,render(){let i=e.withGuide??ce.withGuide,s=`${i?`${p.default.gray(E)}
145
+ `:""}${et(this.state)} ${e.message}
146
+ `;switch(this.state){case"submit":{let n=i?`${p.default.gray(E)} `:"",r=this.options.find(a=>a.value===this.value)??e.options[0],o=ot(e.output,t(r,"selected"),n);return`${s}${o}`}case"cancel":{let n=i?`${p.default.gray(E)} `:"",r=ot(e.output,t(this.options[0],"cancelled"),n);return`${s}${r}${i?`
147
+ ${p.default.gray(E)}`:""}`}default:{let n=i?`${p.default.cyan(E)} `:"",r=i?p.default.cyan(je):"",o=this.options.map((a,l)=>ot(e.output,t(a,l===this.cursor?"active":"inactive"),n)).join(`
148
148
  `);return`${s}${o}
149
149
  ${r}
150
- `}}}}).prompt()},Or=`${p.default.gray(E)} `,It={message:async(e,{symbol:t=p.default.gray(E)}={})=>{process.stdout.write(`${p.default.gray(E)}
150
+ `}}}}).prompt()},Er=`${p.default.gray(E)} `,At={message:async(e,{symbol:t=p.default.gray(E)}={})=>{process.stdout.write(`${p.default.gray(E)}
151
151
  ${t} `);let i=3;for await(let s of e){s=s.replace(/\n/g,`
152
- ${Or}`),s.includes(`
153
- `)&&(i=3+(0,Hi.stripVTControlCharacters)(s.slice(s.lastIndexOf(`
154
- `))).length);let n=(0,Hi.stripVTControlCharacters)(s).length;i+n<process.stdout.columns?(i+=n,process.stdout.write(s)):(process.stdout.write(`
155
- ${Or}${s.trimStart()}`),i=3+(0,Hi.stripVTControlCharacters)(s.trimStart()).length)}process.stdout.write(`
156
- `)},info:e=>It.message(e,{symbol:p.default.blue(tn)}),success:e=>It.message(e,{symbol:p.default.green(sn)}),step:e=>It.message(e,{symbol:p.default.green(Tt)}),warn:e=>It.message(e,{symbol:p.default.yellow(nn)}),warning:e=>It.warn(e),error:e=>It.message(e,{symbol:p.default.red(rn)})},Gl=async(e,t)=>{for(let i of e){if(i.enabled===!1)continue;let s=di(t);s.start(i.title);let n=await i.task(s.message);s.stop(n||i.title)}},Kl=e=>e.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),zl=e=>{let t=e.output??process.stdout,i=Ot(t),s=p.default.gray(E),n=e.spacing??1,r=3,o=e.retainLog===!0,a=!Ks()&&Ir(t);t.write(`${s}
157
- `),t.write(`${p.default.green(Tt)} ${e.title}
152
+ ${Er}`),s.includes(`
153
+ `)&&(i=3+(0,Gi.stripVTControlCharacters)(s.slice(s.lastIndexOf(`
154
+ `))).length);let n=(0,Gi.stripVTControlCharacters)(s).length;i+n<process.stdout.columns?(i+=n,process.stdout.write(s)):(process.stdout.write(`
155
+ ${Er}${s.trimStart()}`),i=3+(0,Gi.stripVTControlCharacters)(s.trimStart()).length)}process.stdout.write(`
156
+ `)},info:e=>At.message(e,{symbol:p.default.blue(rn)}),success:e=>At.message(e,{symbol:p.default.green(on)}),step:e=>At.message(e,{symbol:p.default.green(Dt)}),warn:e=>At.message(e,{symbol:p.default.yellow(an)}),warning:e=>At.warn(e),error:e=>At.message(e,{symbol:p.default.red(ln)})},td=async(e,t)=>{for(let i of e){if(i.enabled===!1)continue;let s=ui(t);s.start(i.title);let n=await i.task(s.message);s.stop(n||i.title)}},id=e=>e.replace(/\x1b\[(?:\d+;)*\d*[ABCDEFGHfJKSTsu]|\x1b\[(s|u)/g,""),sd=e=>{let t=e.output??process.stdout,i=Rt(t),s=p.default.gray(E),n=e.spacing??1,r=3,o=e.retainLog===!0,a=!Xs()&&Tr(t);t.write(`${s}
157
+ `),t.write(`${p.default.green(Dt)} ${e.title}
158
158
  `);for(let _=0;_<n;_++)t.write(`${s}
159
- `);let l=[{value:"",full:""}],m=!1,f=_=>{if(l.length===0)return;let x=0;_&&(x+=n+2);for(let O of l){let{value:A,result:M}=O,H=M?.message??A;if(H.length===0)continue;M===void 0&&O.header!==void 0&&O.header!==""&&(H+=`
160
- ${O.header}`);let ee=H.split(`
161
- `).reduce((P,T)=>T===""?P+1:P+Math.ceil((T.length+r)/i),0);x+=ee}x>0&&(x+=1,t.write(Kt.erase.lines(x)))},g=(_,x,O)=>{let A=O?`${_.full}
162
- ${_.value}`:_.value;_.header!==void 0&&_.header!==""&&Ve.message(_.header.split(`
163
- `).map(p.default.bold),{output:t,secondarySymbol:s,symbol:s,spacing:0}),Ve.message(A.split(`
164
- `).map(p.default.dim),{output:t,secondarySymbol:s,symbol:s,spacing:x??n})},b=()=>{for(let _ of l){let{header:x,value:O,full:A}=_;(x===void 0||x.length===0)&&O.length===0||g(_,void 0,o===!0&&A.length>0)}},k=(_,x,O)=>{if(f(!1),(O?.raw!==!0||!m)&&_.value!==""&&(_.value+=`
165
- `),_.value+=Kl(x),m=O?.raw===!0,e.limit!==void 0){let A=_.value.split(`
166
- `),M=A.length-e.limit;if(M>0){let H=A.splice(0,M);o&&(_.full+=(_.full===""?"":`
159
+ `);let l=[{value:"",full:""}],f=!1,m=_=>{if(l.length===0)return;let j=0;_&&(j+=n+2);for(let O of l){let{value:A,result:L}=O,H=L?.message??A;if(H.length===0)continue;L===void 0&&O.header!==void 0&&O.header!==""&&(H+=`
160
+ ${O.header}`);let te=H.split(`
161
+ `).reduce((P,T)=>T===""?P+1:P+Math.ceil((T.length+r)/i),0);j+=te}j>0&&(j+=1,t.write(Yt.erase.lines(j)))},g=(_,j,O)=>{let A=O?`${_.full}
162
+ ${_.value}`:_.value;_.header!==void 0&&_.header!==""&&He.message(_.header.split(`
163
+ `).map(p.default.bold),{output:t,secondarySymbol:s,symbol:s,spacing:0}),He.message(A.split(`
164
+ `).map(p.default.dim),{output:t,secondarySymbol:s,symbol:s,spacing:j??n})},y=()=>{for(let _ of l){let{header:j,value:O,full:A}=_;(j===void 0||j.length===0)&&O.length===0||g(_,void 0,o===!0&&A.length>0)}},k=(_,j,O)=>{if(m(!1),(O?.raw!==!0||!f)&&_.value!==""&&(_.value+=`
165
+ `),_.value+=id(j),f=O?.raw===!0,e.limit!==void 0){let A=_.value.split(`
166
+ `),L=A.length-e.limit;if(L>0){let H=A.splice(0,L);o&&(_.full+=(_.full===""?"":`
167
167
  `)+H.join(`
168
168
  `))}_.value=A.join(`
169
- `)}a&&v()},v=()=>{for(let _ of l)_.result?_.result.status==="error"?Ve.error(_.result.message,{output:t,secondarySymbol:s,spacing:0}):Ve.success(_.result.message,{output:t,secondarySymbol:s,spacing:0}):_.value!==""&&g(_,0)},h=(_,x)=>{f(!1),_.result=x,a&&v()};return{message(_,x){k(l[0],_,x)},group(_){let x={header:_,value:"",full:""};return l.push(x),{message(O,A){k(x,O,A)},error(O){h(x,{status:"error",message:O})},success(O){h(x,{status:"success",message:O})}}},error(_,x){f(!0),Ve.error(_,{output:t,secondarySymbol:s,spacing:1}),x?.showLog!==!1&&b(),l.splice(1,l.length-1),l[0].value="",l[0].full=""},success(_,x){f(!0),Ve.success(_,{output:t,secondarySymbol:s,spacing:1}),x?.showLog===!0&&b(),l.splice(1,l.length-1),l[0].value="",l[0].full=""}}},Ae=e=>new qi({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??ce.withGuide,i=`${`${t?`${p.default.gray(E)}
170
- `:""}${Ze(this.state)} `}${e.message}
171
- `,s=e.placeholder?p.default.inverse(e.placeholder[0])+p.default.dim(e.placeholder.slice(1)):p.default.inverse(p.default.hidden("_")),n=this.userInput?this.userInputWithCursor:s,r=this.value??"";switch(this.state){case"error":{let o=this.error?` ${p.default.yellow(this.error)}`:"",a=t?`${p.default.yellow(E)} `:"",l=t?p.default.yellow(_e):"";return`${i.trim()}
169
+ `)}a&&$()},$=()=>{for(let _ of l)_.result?_.result.status==="error"?He.error(_.result.message,{output:t,secondarySymbol:s,spacing:0}):He.success(_.result.message,{output:t,secondarySymbol:s,spacing:0}):_.value!==""&&g(_,0)},h=(_,j)=>{m(!1),_.result=j,a&&$()};return{message(_,j){k(l[0],_,j)},group(_){let j={header:_,value:"",full:""};return l.push(j),{message(O,A){k(j,O,A)},error(O){h(j,{status:"error",message:O})},success(O){h(j,{status:"success",message:O})}}},error(_,j){m(!0),He.error(_,{output:t,secondarySymbol:s,spacing:1}),j?.showLog!==!1&&y(),l.splice(1,l.length-1),l[0].value="",l[0].full=""},success(_,j){m(!0),He.success(_,{output:t,secondarySymbol:s,spacing:1}),j?.showLog===!0&&y(),l.splice(1,l.length-1),l[0].value="",l[0].full=""}}},Te=e=>new Li({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,output:e.output,signal:e.signal,input:e.input,render(){let t=e?.withGuide??ce.withGuide,i=`${`${t?`${p.default.gray(E)}
170
+ `:""}${et(this.state)} `}${e.message}
171
+ `,s=e.placeholder?p.default.inverse(e.placeholder[0])+p.default.dim(e.placeholder.slice(1)):p.default.inverse(p.default.hidden("_")),n=this.userInput?this.userInputWithCursor:s,r=this.value??"";switch(this.state){case"error":{let o=this.error?` ${p.default.yellow(this.error)}`:"",a=t?`${p.default.yellow(E)} `:"",l=t?p.default.yellow(je):"";return`${i.trim()}
172
172
  ${a}${n}
173
173
  ${l}${o}
174
174
  `}case"submit":{let o=r?` ${p.default.dim(r)}`:"",a=t?p.default.gray(E):"";return`${i}${a}${o}`}case"cancel":{let o=r?` ${p.default.strikethrough(p.default.dim(r))}`:"",a=t?p.default.gray(E):"";return`${i}${a}${o}${r.trim()?`
175
- ${a}`:""}`}default:{let o=t?`${p.default.cyan(E)} `:"",a=t?p.default.cyan(_e):"";return`${i}${o}${n}
175
+ ${a}`:""}`}default:{let o=t?`${p.default.cyan(E)} `:"",a=t?p.default.cyan(je):"";return`${i}${o}${n}
176
176
  ${a}
177
- `}}}}).prompt()});function Yl(e){return!!(e.json||!je)}function S(e,t=50){console.log(),console.log(` ${J.default.bold(e)}`),console.log(` ${J.default.dim("\u2500".repeat(t))}`)}function c(e,t,i=2){let s=" ".repeat(i);console.log(`${s}${J.default.dim(e.padEnd(16))} ${t}`)}function d(){console.log()}function ze(e){console.log(` ${J.default.dim(e)}`)}function I(e,t){console.log(` ${J.default.dim(e)} ${J.default.cyan(t)}`)}function Jr(e){return e.split(/(https?:\/\/[^\s]+)/g).map(i=>/^https?:\/\//.test(i)?`\x1B]8;;${i}\x1B\\${J.default.underline(J.default.cyan(i))}\x1B]8;;\x1B\\`:J.default.dim(i)).join("")}function un(e,t){console.error(` ${y.error} ${J.default.red(e)}`),t&&console.error(` ${Jr(t)}`)}function C(e=!0){return e?di():Xl}function Br(e){return e.replace(Zl,"")}function zi(e,t){let i=Br(e).length,s=Math.max(0,t-i);return e+" ".repeat(s)}function se(e,t,i){let s=i||e.map((o,a)=>{let l=t.reduce((m,f)=>Math.max(m,Br(f[a]||"").length),0);return Math.max(o.length,l)+2}),n=e.map((o,a)=>J.default.dim(o.padEnd(s[a]))).join(" "),r=s.map(o=>J.default.dim("\u2500".repeat(o))).join(" ");console.log(` ${n}`),console.log(` ${r}`);for(let o of t){let a=o.map((l,m)=>zi(l,s[m])).join(" ");console.log(` ${a}`)}}function Ql(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function cn(e){if(Array.isArray(e))return e.map(cn);if(e&&typeof e=="object"&&!(e instanceof Date)){let t={};for(let[i,s]of Object.entries(e))t[Ql(i)]=cn(s);return t}return e}function w(e,t){let i=cn(e);if(!t){console.log(JSON.stringify(i,null,2));return}let s=t.split(",").map(n=>n.trim()).filter(Boolean);if(Array.isArray(i)){let n=i.map(r=>Vr(r,s));console.log(JSON.stringify(n,null,2))}else console.log(JSON.stringify(i&&typeof i=="object"?Vr(i,s):i,null,2))}function Vr(e,t){let i={};for(let s of t)s in e&&(i[s]=e[s]);if(Object.keys(i).length===0){for(let[s,n]of Object.entries(e))if(Array.isArray(n)&&n.length>0&&typeof n[0]=="object"){let r=n.map(o=>{let a={};for(let l of t)l in o&&(a[l]=o[l]);return a});Object.keys(r[0]).length>0&&(i[s]=r)}}return i}function Pt(e){return!!(e.yes||Yl(e))}function B(e,t,i,s){if(i){w({dry_run:!0,action:e,...t},s);return}console.log(),console.log(` ${J.default.yellow("\u25B8 DRY RUN")} ${J.default.dim("- no changes made")}`),console.log(` ${J.default.dim("Action:")} ${J.default.bold(e)}`);for(let[n,r]of Object.entries(t))r!=null&&(Array.isArray(r)?console.log(` ${J.default.dim(n+":")} ${r.map(String).join(", ")}`):console.log(typeof r=="object"?` ${J.default.dim(n+":")} ${JSON.stringify(r)}`:` ${J.default.dim(n+":")} ${String(r)}`));console.log()}function td(e,t,i){return t===401||t===403?"auth_required":t===402||i?"payment_required":t===404?"not_found":t===409?"conflict":t===422?"validation_error":t===429?"rate_limited":/contact/i.test(e)?"contact_required":"error"}function u(e,t){let i=e||`Request failed${t?.status?` (${t.status})`:""}`,s=t?.code||td(i,t?.status,t?.fixUrl),n=t?.fixCommand||ed[s];if(t?.json){let r={error:i,code:s};t.hint&&(r.hint=t.hint),n&&(r.fix_command=n),t.fixUrl&&(r.fix_url=t.fixUrl),w(r,t.fields)}else un(i,t?.hint),n?console.error(` ${J.default.dim("Or run:")} ${J.default.cyan(n)}`):t?.fixUrl&&console.error(` ${Jr(`Add a payment method at ${t.fixUrl}`)}`);process.exit(1)}function We(e){let t=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";(0,Hr.execFile)(t,[e])}function Dt(e){return new Promise(t=>setTimeout(t,e))}function Nt(e,t,i,s=!0){let n=process.stdout.isTTY??!1;if(!s)return{start(){},markDone(){},stop(){}};let r=0,o=null,a=2+t.length;function l(){let b=" "+e.map((h,_)=>J.default.dim(h.padEnd(i[_]))).join(" "),k=" "+i.map(h=>J.default.dim("\u2500".repeat(h))).join(" "),v=[b,k];for(let h of t){let _=h.status==="done"?h.icon??y.success:J.default.cyan(Wr[r%Wr.length]),x=h.cells.map((O,A)=>zi(O,i[A])).join(" ");v.push(` ${_} ${x}`)}return v}let m=!1,f=()=>process.stdout.write("\x1B[?25h");function g(){let b=l();if(m&&n){process.stdout.write(`\x1B[${a}A`);for(let k of b)process.stdout.write(`\x1B[2K${k}
178
- `)}else{for(let k of b)console.log(k);m=!0}}return{start(){n&&(process.stdout.write("\x1B[?25l"),process.on("exit",f)),g(),n&&(o=setInterval(()=>{r++,g()},80))},markDone(b,k){t[b].status="done",k!==void 0&&(t[b].icon=k),n&&g()},stop(){o&&clearInterval(o);for(let b of t)b.status="done";g(),n&&(process.stdout.write("\x1B[?25h"),process.removeListener("exit",f))}}}var J,Hr,je,y,$,Xl,Zl,ed,Wr,V=Ie(()=>{"use strict";J=D(L(),1),Hr=require("child_process");Pe();je=process.stdout.isTTY??!1;y={success:J.default.green("\u2713"),error:J.default.red("\u2717"),warning:J.default.yellow("!"),info:J.default.cyan("\u25CF"),arrow:J.default.dim("\u2192"),dot:J.default.dim("\xB7"),dash:J.default.dim("\u2500")},$={domain:e=>J.default.bold(J.default.white(e)),price:e=>J.default.green(`$${e}`),label:e=>J.default.dim(e),value:e=>J.default.white(e),dim:e=>J.default.dim(e),bold:e=>J.default.bold(e),success:e=>J.default.green(e),error:e=>J.default.red(e),warn:e=>J.default.yellow(e),cyan:e=>J.default.cyan(e),url:e=>`\x1B]8;;${e}\x1B\\${J.default.underline(J.default.cyan(e))}\x1B]8;;\x1B\\`};Xl={start:()=>{},stop:()=>{},message:()=>{}};Zl=/\x1b\]8;;[^\x1b]*\x1b\\|\x1b\[[0-9;]*m/g;ed={auth_required:"domani login",payment_required:"domani card add",contact_required:"domani contact set"};Wr=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function Gr(e){return typeof e=="string"&&["pro","agent","fleet","scale","mail_solo","mail_team","mail_business"].includes(e)}function Kr(e){return Gr(e.plan)||Array.isArray(e.workspace_plans)&&e.workspace_plans.some(Gr)}async function zr(){if(fn)return;let e=process.argv.includes("--json")||!As,t=Fe(),i=Me();try{let r=await(await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${i}`}})).json();if(Kr(r)){fn=!0;return}}catch{}e&&(console.log(JSON.stringify({error:"Paid plan required",code:"upgrade_required",hint:"Upgrade at https://domani.run/settings",fix_command:"domani upgrade"},null,2)),process.exit(1)),d(),console.log(` ${ye.default.dim("This feature requires a")} ${ye.default.bold("paid plan")} ${ye.default.dim("(including an active Mailzero workspace plan or legacy Pro subscription).")}`),console.log(` ${ye.default.dim("Opening pricing page")} ${y.arrow} ${ye.default.cyan("domani.run/pricing")}`),We(`${t.replace("http://localhost:3000","https://domani.run")}/pricing`),d();let s=C(!0);s.start("Waiting for upgrade...");for(let n=0;n<120;n++){await new Promise(r=>setTimeout(r,5e3));try{let o=await(await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${i}`}})).json();if(Kr(o)){fn=!0,s.stop(`${y.success} Paid plan active! Continuing...`),d();return}}catch{}}s.stop("Timed out"),console.error(` ${ye.default.red("\u2717")} No upgrade detected. Visit ${ye.default.cyan("domani.run/settings")} to upgrade.`),process.exit(1)}async function Yr(){if(mn||Me()){mn=!0;return}(process.argv.includes("--json")||!As)&&(console.log(JSON.stringify({error:"Not logged in",code:"auth_required",hint:"Run 'domani login' or set DOMANI_API_KEY environment variable",fix_command:"domani login"},null,2)),process.exit(1)),d(),console.log(` ${ye.default.dim("You're not logged in.")} Starting authentication...`),d();let t=Fe(),i=C(!0);i.start("Requesting auth code");let s;try{s=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}})}catch{i.stop("Failed"),console.error(` ${ye.default.red("\u2717")} Could not reach ${t}. Check your connection.`),process.exit(1)}if(!s.ok){i.stop("Failed");let o=`Server error (${s.status})`;try{let a=await s.json();o=a.error||a.message||o}catch{}console.error(` ${ye.default.red("\u2717")} ${o}`),process.exit(1)}let n,r;try{({code:n,auth_url:r}=await s.json())}catch{i.stop("Failed"),console.error(` ${ye.default.red("\u2717")} Invalid response from server.`),process.exit(1)}i.stop(`${y.success} Auth code ready`),d(),console.log(` ${ye.default.dim("Verification code:")} ${ye.default.bold(ye.default.cyan(n))}`),console.log(` ${ye.default.dim("Opening browser")} ${y.arrow} ${$.url(r)}`),We(r),d(),i.start("Waiting for browser approval");for(let o=0;o<120;o++){await new Promise(m=>setTimeout(m,5e3));let a=await fetch(`${t}/api/auth/cli/poll?code=${n}`).catch(()=>null);if(!a||!a.ok&&a.status!==202)continue;let l=await a.json().catch(()=>({}));if(l.status==="complete"){Gt({...mt(),token:l.token,email:l.email,api_url:t}),mn=!0,i.stop(`${y.success} Logged in as ${ye.default.bold(l.email)}`),d();return}}i.stop("Timed out"),console.error(` ${ye.default.red("\u2717")} No approval received. Run ${ye.default.cyan("domani login")} to try again.`),process.exit(1)}var ye,mn,fn,pn=Ie(()=>{"use strict";ye=D(L(),1);ft();V();mn=!1,fn=!1});function Qr(e){return e.json=async()=>{let t=await e.clone().text();try{return JSON.parse(t)}catch{let i=t.trim().slice(0,120);return e.ok?(Object.defineProperty(e,"ok",{value:!1}),{error:`Unexpected non-JSON response (HTTP ${e.status})`,hint:`The server replied but not with JSON${i?` (got: "${i}")`:""}. This is usually transient (deploy or proxy) - retry in a few seconds.`}):{error:`Server error (${e.status})`,hint:"The server returned an unexpected response. Try again later."}}},e}async function j(e,t={},i=!1){let s=Me(),n=`${Fe()}${e}`,r=await fetch(n,{...t,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json","User-Agent":`domani-cli/${ke}`,...t.headers}});if(!i){let o=await r.clone().text();try{if(JSON.parse(o).code==="UPGRADE_REQUIRED")return await zr(),j(e,t,!0)}catch{}}return Qr(r)}async function be(e,t={}){let i=`${Fe()}${e}`,s=Me(),n=await fetch(i,{...t,headers:{"Content-Type":"application/json","User-Agent":`domani-cli/${ke}`,...s?{Authorization:`Bearer ${s}`}:{},...t.headers}});return Qr(n)}var K=Ie(()=>{"use strict";ft();pn()});function _t(){return{ok:!0}}function ht(e,t,i){return{ok:!1,error:{message:e,code:t,hint:i}}}function io(e){return nd.test(e)?ht("Input contains control characters","invalid_input","Remove non-printable characters from the input"):_t()}function cd(e){return rd.test(e)?ht("Input contains path traversal","invalid_input","Domain names cannot contain '../' or '..\\'"):_t()}function ud(e){return od.test(e)?ht("Input contains query string or fragment","invalid_input","Remove '?' or '#' from the domain name"):_t()}function md(e){return ad.test(e)?ht("Input contains percent-encoded characters","invalid_input","Use plain text, not URL-encoded values (e.g. 'example.com' not 'example%2Ecom')"):_t()}function so(e){if(!e)return ht("Domain name is required","validation_error");if(e.length>to)return ht(`Domain name too long (${e.length} chars, max ${to})`,"validation_error");for(let t of[io,cd,ud,md]){let i=t(e);if(!i.ok)return i}return ld.test(e)?_t():ht(`Invalid domain name: ${e}`,"validation_error","Domain names can only contain letters, digits, hyphens, and dots")}function fd(e){if(!e)return ht("TLD is required","validation_error");let t=io(e);return t.ok?dd.test(e)?_t():ht(`Invalid TLD: ${e}`,"validation_error","TLDs contain only letters (e.g. 'com', '.dev', 'ai')"):t}function pd(e){for(let t of e){let i=so(t);if(!i.ok)return i}return _t()}function hd(e){for(let t of e){let i=fd(t);if(!i.ok)return i}return _t()}function z(e,t){let i=so(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}function no(e,t){let i=pd(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}function Yi(e,t){let i=hd(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}var nd,rd,od,ad,ld,dd,to,he=Ie(()=>{"use strict";V();nd=/[\x00-\x08\x0b\x0c\x0e-\x1f]/,rd=/\.\.[/\\]/,od=/[?#]/,ad=/%[0-9a-fA-F]{2}/,ld=/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.?$/,dd=/^\.?[a-zA-Z]{2,63}$/,to=253});async function fe(){je||u("Missing required argument: domain",{hint:"Pass the domain as an argument, e.g. 'domani settings example.com'",code:"missing_argument",json:!0});let e=C(!0);e.start("Loading your domains");let t=await j("/api/domains"),i=await t.json();t.ok||(e.stop("Failed"),un(i.error,i.hint),process.exit(1));let s=i.domains||[];s.length===0&&(e.stop("No domains"),d(),console.log(` ${gn.default.dim("No domains yet.")} Use: ${gn.default.cyan("domani buy <domain>")}`),d(),process.exit(0)),e.stop(`${s.length} domain(s)`);let n=await Qe({message:"Which domain?",options:s.map(r=>({value:r.domain,label:r.domain,hint:r.status!=="active"?r.status:void 0}))});return le(n)&&process.exit(0),n}var gn,Ye=Ie(()=>{"use strict";K();Pe();gn=D(L(),1);V()});var oo={};Vt(oo,{connect:()=>bn});async function bn(e,t,i){e||(e=await fe()),z(e,i);let s;if(t&&!i.provider?t.includes(".")?s=t:i.provider=t:s=t,!s&&!i.provider&&!i.list&&i.dryRun)return B("connect",{domain:e,note:"No provider specified. Pass --provider <name> to connect."},i.json,i.fields);if(!s&&!i.provider&&!i.list){let n=C(!i.json);n.start(`Loading providers for ${$.domain(e)}`);let r=await j(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop("Providers loaded"),i.json){w(o,i.fields);return}let a=[];for(let h of["hosting","email"]){let _=o.providers?.[h]||[];for(let x of _)a.push({value:`${h}:${x.name}`,label:x.name,hint:h})}a.length===0&&u("No providers available",{code:"not_found",json:i.json,fields:i.fields});let l=await Qe({message:"Choose a provider",options:a});le(l)&&process.exit(0);let[m,f]=l.split(":"),b=(o.providers?.[m]||[]).find(h=>h.name===f),k;if(b&&b.methods.length>1){let h=await Qe({message:"Choose a method",options:b.methods.map(_=>({value:_.name,label:_.name,hint:_.default?"default":void 0}))});le(h)&&process.exit(0),k=h}let v;if(m==="hosting"&&b?.requires_target){b.notes?.setup&&ze(b.notes.setup);let h=await Ae({message:"Target hostname or IP"});le(h)&&process.exit(0),v=h.trim()}return ro(e,{target:v,provider:f,method:k,dryRun:i.dryRun,json:!1})}if(i.list){let n=C(!i.json);n.start(`Loading providers for ${$.domain(e)}`);let r=await j(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop("Providers loaded"),i.json){w(o,i.fields);return}S(`Providers for ${$.domain(o.domain)}`);for(let a of["hosting","email"]){let l=o.providers?.[a];if(l?.length){d(),console.log(` ${ue.default.bold(a.toUpperCase())}`);for(let m of l){let f=m.methods.map(g=>g.default?ue.default.green(`${g.name} (default)`):ue.default.dim(g.name)).join(ue.default.dim(", "));console.log(` ${ue.default.cyan(m.name.padEnd(20))} ${f}`)}}}d();return}return ro(e,i)}async function ro(e,t){let i={};if(t.target&&(i.target=t.target),t.provider&&(i.provider=t.provider),t.method&&(i.method=t.method),t.dryRun)return B("connect",{domain:e,...i},t.json,t.fields);let s=C(!t.json);s.start(`Connecting ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify(i)}),r=await n.json();n.ok||(s.stop("Connection failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.status==="manual_setup_required";if(s.stop(o?`${y.success} DNS instructions for ${ue.default.cyan(r.provider)}`:`${y.success} Connected to ${ue.default.cyan(r.provider)}`),t.json){w(r,t.fields);return}if(S(o?`Add these records at your registrar for ${$.domain(r.domain)}`:`Connected ${$.domain(r.domain)}`),c("Provider",ue.default.cyan(r.provider)),c("Method",r.method),r.records?.length){let a=[8,22,40];d(),console.log(` ${ue.default.bold("DNS Records")}`);let l=["Type","Name","Value"].map((f,g)=>ue.default.dim(f.padEnd(a[g]))).join(" "),m=a.map(f=>ue.default.dim("\u2500".repeat(f))).join(" ");console.log(` ${l}`),console.log(` ${m}`);for(let f of r.records){let g=f.record,b=f.status!=="already_set";process.stdout.isTTY&&b&&await Dt(50);let v=[ue.default.yellow(g.type),g.name,ue.default.cyan(g.value)+(g.priority?ue.default.dim(` pri=${g.priority}`):"")].map((x,O)=>zi(x,a[O])).join(" "),h=f.status==="already_set"?ue.default.dim("\u2713"):f.status==="updated"?ue.default.yellow("\u21BA"):f.status==="pending"?ue.default.yellow("\u2192"):y.success,_=f.status==="already_set"?ue.default.dim(" already set"):f.status==="updated"?ue.default.dim(" updated"):f.status==="pending"?ue.default.dim(" add this"):"";console.log(` ${h} ${v}${_}`)}}d(),r.next_steps?.length?(console.log(` ${ue.default.bold("Next steps")}`),r.next_steps.forEach((a,l)=>{console.log(` ${ue.default.dim(`${l+1}.`)} ${a}`)})):r.hint&&console.log(` ${ue.default.dim(r.hint)}`),r.docs&&console.log(` ${ue.default.dim("Docs:")} ${$.url(r.docs)}`),d()}var ue,yn=Ie(()=>{"use strict";K();ue=D(L(),1);Pe();V();he();Ye()});function Ut(e,t=process.env){if(e.clearHeaders&&(e.authorizationEnv||e.apiKeyEnv))throw new Error("--clear-headers cannot be combined with header environment options");if(e.clearHeaders)return{};let i={},s=[["Authorization",e.authorizationEnv],["X-API-Key",e.apiKeyEnv]];for(let[n,r]of s){if(!r)continue;let o=t[r];if(!o)throw new Error(`Environment variable ${r} is not set`);i[n]=o}return Object.keys(i).length>0?i:void 0}function qt(e){return e?Object.keys(e):[]}var Xi=Ie(()=>{"use strict"});var go={};Vt(go,{email:()=>ui,parseRecipients:()=>Zi,recipientField:()=>Qi});function yd(e){return[R.default.yellow(e.type),e.name,R.default.cyan(e.value)+(e.priority?R.default.dim(` pri=${e.priority}`):"")]}function $n(e){return bd[e]||e}function Zi(e){return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}function Qi(e){if(e.length!==0)return e.length===1?e[0]:e}function $d(e,t){if(e&&e.includes("@")){let[i,s]=e.split("@",2);!t.slug&&i&&(t.slug=i),!t.domain&&s&&(t.domain=s)}}async function Xe(e){return e.domain?(z(e.domain,e),e.domain):fe()}async function ui(e,t,i){if(e&&e.includes(".")&&!gd.includes(e))return i.check?lo(e,!!i.json,i.fields):t?co(e,t,!!i.json,i.fields):po(e,!!i.json,i.fields);if($d(t,i),i.body&&!i.text&&(i.text=i.body),i.title&&!i.subject&&(i.subject=i.title),i.from&&i.from.includes("@")){let[s,n]=i.from.split("@",2);!i.slug&&s&&(i.slug=s),!i.domain&&n&&(i.domain=n)}switch(e){case void 0:return ao(i);case"list":return ao(i);case"inbox":return Ld(i);case"folders":return Vd(i);case"archive":case"trash":case"restore":case"read":case"unread":case"star":case"unstar":return Wd(e,i);case"setup":return Id(i);case"status":return Rd(i);case"remove":return Ad(i);case"create":return Ed(i);case"delete":return Td(i);case"send":return Pd(i);case"webhook":return Hd(i);case"webhook-test":return Jd(i);case"forward":return Bd(i);case"work":return jd(i);case"triage":return xd(i);case"note":return Sd(i);case"notes":return Cd(i);case"activity":return Od(i);case"changes":return _d(i);case"coordination":return wd(i);case"presence":return vd(i);case"release-presence":return kd(i);case"escalate":return Dd(i);case"remind":return Nd(i);case"contacts":return Ud(i);case"contact-add":return qd(i);case"contact-remove":return Fd(i);case"tone":return Md(i);case"check":return lo(i.domain||await fe(),!!i.json,i.fields);case"connect":return co(i.domain||await fe(),t||void 0,!!i.json,i.fields);default:u(`Unknown action: ${e}`,{hint:"Actions: list, inbox, folders, archive, trash, restore, read, unread, star, unstar, create, delete, send, forward, webhook, webhook-test, work, triage, notes, note, activity, changes, coordination, presence, release-presence, setup, status, check, connect",code:"validation_error",json:i.json,fields:i.fields})}}function wn(e){let t=e.mailboxIds?.split(",").map(i=>i.trim()).filter(Boolean)[0];return(!t||!e.threadKey)&&u("Mailbox ID and thread key required",{hint:"Pass --mailbox-ids mb_1 --thread-key 'jmap:thread_1'",code:"validation_error",json:e.json,fields:e.fields}),{mailboxId:t,threadKey:e.threadKey}}async function wd(e){let{mailboxId:t,threadKey:i}=wn(e),s=new URLSearchParams({mailbox_id:t,thread_key:i}),n=await j(`/api/email/collaboration/coordination?${s}`),r=await n.json();if(n.ok||u(r.error||"Could not read coordination",{code:r.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(r,e.fields);S("Conversation Coordination"),c("Conversation",r.conversation_id),c("Reply version",String(r.reply_version)),c("Presence",String(r.presence?.length||0)),c("Compose lease",r.compose_lease?.holder?.label||"none")}async function vd(e){let{mailboxId:t,threadKey:i}=wn(e);e.clientId||u("Client ID required",{hint:"Pass a stable --client-id for this agent process or app installation",code:"validation_error",json:e.json,fields:e.fields});let s=e.mode||"viewing";["viewing","composing"].includes(s)||u("Mode must be viewing or composing",{code:"validation_error",json:e.json,fields:e.fields});let n=await j("/api/email/collaboration/coordination",{method:"PUT",body:JSON.stringify({mailbox_id:t,thread_key:i,client_id:e.clientId,mode:s,acquire_lease:e.acquireLease!==!1})}),r=await n.json();if(n.ok||u(r.error||"Could not heartbeat presence",{code:r.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(r,e.fields);S("Conversation Presence"),c("Mode",s),c("Reply version",String(r.reply_version)),c("Lease ID",r.compose_lease?.lease_id||"none"),c("Expires",r.compose_lease?.expires_at||r.presence?.find(o=>o.client_id===e.clientId)?.expires_at||"unknown")}async function kd(e){let{mailboxId:t,threadKey:i}=wn(e);e.clientId||u("Client ID required",{hint:"Pass the same --client-id used for presence",code:"validation_error",json:e.json,fields:e.fields});let s=await j("/api/email/collaboration/coordination",{method:"DELETE",body:JSON.stringify({mailbox_id:t,thread_key:i,client_id:e.clientId,lease_id:e.leaseId})}),n=await s.json();if(s.ok||u(n.error||"Could not release presence",{code:n.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(n,e.fields);S("Conversation Presence"),c("Released",e.clientId),c("Remaining presence",String(n.presence?.length||0))}async function _d(e){let t=e.mailboxIds?.split(",").map(r=>r.trim()).filter(Boolean)[0];t||u("Mailbox ID required",{hint:"Usage: domani email changes --mailbox-ids mb_1 [--cursor <opaque>]",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams({mailbox_id:t});e.cursor&&i.set("cursor",e.cursor),e.limit&&i.set("limit",e.limit);let s=await j(`/api/email/changes?${i}`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);if(S("Mailbox Changes"),n.requires_full_sync){c("Full sync","Required"),c("Baseline cursor",n.next_cursor),ze("Take a bounded mailbox snapshot, then call this command again with --cursor to replay concurrent changes.");return}n.changes.length?se(["Sequence","Type","Resource","Created"],n.changes.map(r=>[r.sequence,r.type,`${r.resource_type}:${r.resource_id||"-"}`,r.created_at]),[12,32,40,24]):console.log(` ${R.default.dim("No changes since this cursor.")}`),c("Next cursor",n.next_cursor),n.has_more&&ze("More changes are available; call again with the next cursor.")}async function jd(e){let t=(e.mailboxIds||"").split(",").map(r=>r.trim()).filter(Boolean);t.length||u("Mailbox IDs required",{hint:"Usage: domani email work --mailbox-ids mb_1,mb_2",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams({mailbox_ids:t.join(",")});e.status&&i.set("status",e.status),e.assigned&&i.set("assigned",e.assigned),e.limit&&i.set("limit",e.limit);let s=await j(`/api/email/work-queue?${i}`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);if(S("Shared Inbox Work"),!n.items.length)return console.log(` ${R.default.dim("No conversations match this queue.")}`);se(["Thread","Status","Assignee","Subject"],n.items.map(r=>[r.thread_key,r.status,r.assignee?.label||"Unassigned",r.subject||"(no subject)"]),[28,10,28,48]),n.partial&&ze("This is a bounded snapshot. Increase --limit or use the API scan_limit when you need a wider queue.")}async function xd(e){(!e.mailboxIds||!e.threadKey)&&u("Mailbox ID and thread key required",{hint:"Usage: domani email triage --mailbox-ids mb_1 --thread-key <key> --status closed",code:"validation_error",json:e.json,fields:e.fields});let t=e.assigneeId&&e.assigneeType?{type:e.assigneeType,id:e.assigneeId}:void 0,i=await j("/api/email/collaboration",{method:"PATCH",body:JSON.stringify({mailbox_id:e.mailboxIds.split(",")[0],thread_key:e.threadKey,thread_aliases:e.threadAliases?.split(",").map(n=>n.trim()).filter(Boolean),status:e.status,assignee:t,version:e.ifVersion?Number.parseInt(e.ifVersion,10):void 0})}),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json)return w(s,e.fields);S("Conversation Updated"),c("Status",s.status),c("Assignee",s.assignee?.label||"Unassigned"),c("Version",s.version)}async function Sd(e){(!e.conversationId||!e.note)&&u("Conversation ID and note required",{hint:'Usage: domani email note --conversation-id conv_1 --note "Waiting for finance"',code:"validation_error",json:e.json,fields:e.fields});let t=await j(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/notes`,{method:"POST",body:JSON.stringify({body:e.note})}),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);console.log(`${y.success} Private note added`)}async function Cd(e){e.conversationId||u("Conversation ID required",{hint:"Usage: domani email notes --conversation-id conv_1",code:"validation_error",json:e.json,fields:e.fields});let t=await j(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/notes`),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);if(S("Private Notes"),!i.notes.length)return console.log(` ${R.default.dim("No private notes yet.")}`);se(["Author","Created","Note"],i.notes.map(s=>[s.author.label,s.created_at,s.body]),[28,24,64])}async function Od(e){e.conversationId||u("Conversation ID required",{hint:"Usage: domani email activity --conversation-id conv_1",code:"validation_error",json:e.json,fields:e.fields});let t=await j(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/activity`),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);if(S("Conversation Activity"),!i.activity.length)return console.log(` ${R.default.dim("No activity yet.")}`);se(["Type","Actor","Created"],i.activity.map(s=>[s.type,s.actor.label,s.created_at]),[36,32,24])}async function Id(e){let t=await Xe(e);if(e.dryRun)return B("email_setup",{domain:t},e.json,e.fields);let i=C(!e.json);i.start(`Setting up email on ${$.domain(t)}`);let s=await j(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"POST"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Email ${n.status==="already_configured"?"already configured":"configured"}`),e.json){w(n,e.fields);return}if(n.records?.length){d(),S(`Email DNS Records ${$.domain(t)}`);let r=n.records.map(o=>[R.default.yellow(o.type),o.name,o.value.length>40?o.value.slice(0,40)+"...":o.value,o.status==="verified"||o.status==="created"?R.default.green(o.status):R.default.yellow(o.status)]);se(["Type","Name","Value","Status"],r,[8,28,44,12])}d(),n.hint&&ze(n.hint),I("Check status:",`domani email status --domain ${t}`),d()}async function Rd(e){let t=await Xe(e),i=C(!e.json);i.start(`Checking email status for ${$.domain(t)}`);let s=await j(`/api/domains/${encodeURIComponent(t)}/email/status`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Status loaded`),e.json){w(n,e.fields);return}if(S(`Email ${$.domain(t)}`),c("Enabled",n.enabled?R.default.green("yes"):R.default.dim("no")),n.enabled&&(c("Verified",n.verified?R.default.green("yes"):R.default.yellow("pending")),c("Mailboxes",String(n.mailbox_count))),d(),!n.enabled)I("Set up email:",`domani email setup --domain ${t}`),d();else if(!n.verified&&n.records?.length){console.log(` ${R.default.yellow("!")} Add these DNS records to verify:`);for(let r of n.records)console.log(` ${R.default.yellow(r.type)} ${r.name} ${R.default.dim("\u2192")} ${r.value.length>50?r.value.slice(0,50)+"...":r.value}`);d()}}async function Ad(e){let t=await Xe(e);if(e.dryRun)return B("email_remove",{domain:t},e.json,e.fields);let i=C(!e.json);i.start(`Removing email from ${$.domain(t)}`);let s=await j(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Email disabled`),e.json){w(n,e.fields);return}n.mailboxes_deleted>0&&console.log(` ${R.default.dim(`${n.mailboxes_deleted} mailbox(es) deleted.`)}`),d()}async function ao(e){let t=C(!e.json);t.start("Loading mailboxes");let i=e.domain?`?domain=${encodeURIComponent(e.domain)}`:"",s=await j(`/api/emails${i}`),n=await s.json();s.ok||(t.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}));let r=n.mailboxes||[];if(t.stop(`${y.success} ${r.length} mailbox(es)`),e.json){w(n,e.fields);return}if(r.length===0){d(),console.log(` ${R.default.dim("No mailboxes.")}`),d(),I("Create one:","domani email create hello@example.com"),d();return}d(),S("Mailboxes");let o=r.map(a=>[R.default.cyan(a.address),String(a.message_count),a.webhook_url?$.url(a.webhook_url):R.default.dim("-"),R.default.dim(new Date(a.created_at).toLocaleDateString())]);se(["Address","Messages","Webhook","Created"],o,[32,10,36,14]),d()}async function Ed(e){let t=await Xe(e);if(e.dryRun)return B("email_create_mailbox",{domain:t,slug:e.slug,workspace_id:e.workspace},e.json,e.fields);let i=e.slug;if(!i&&!e.json){let m=await Ae({message:`Email handle for @${t}:`,placeholder:"hello"});le(m)&&process.exit(0),i=m}i||u("Slug required",{hint:`Usage: domani email create hello@${t}`,code:"validation_error",json:e.json,fields:e.fields});let s=`${i}@${t}`,n=C(!e.json);n.start("Creating mailbox");let r=await j("/api/emails",{method:"POST",body:JSON.stringify({address:s,workspace_id:e.workspace})}),o=await r.json();if(r.status===202&&!e.json){n.stop("");let m=o.txt_record,f=o.email_records||[],g=[{type:"TXT",name:m?.name||"@",value:m?.value||"",note:"ownership proof"},...f];d(),console.log(" Add these records at your DNS provider:"),d();for(let x of g){let O=x.priority!==void 0?` ${R.default.dim(`priority: ${x.priority}`)}`:"",A=x.note?` ${R.default.dim(`(${x.note})`)}`:"";console.log(` ${R.default.yellow(x.type)} ${R.default.bold(x.name)}${O}${A}`),console.log(` ${R.default.dim("\u2192")} ${R.default.cyan(x.value)}`),d()}ze("DNS propagation typically takes 5\u201330 minutes. Checking automatically..."),d();let b=g.map(x=>({cells:[R.default.yellow(x.type),x.name,x.note?R.default.dim(`(${x.note})`):""],status:"pending"})),k=Nt(["Type","Name",""],b,[6,24,16]);k.start();let v=0;for(;r.status===202&&v<60;)await Dt(15e3),v++,r=await j("/api/emails",{method:"POST",body:JSON.stringify({address:s,workspace_id:e.workspace})}),o=await r.json(),r.status!==202&&!r.ok&&(k.stop(),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields}));r.status===202&&(k.stop(),u("TXT record not detected after 15 minutes.",{hint:`Check the record is set, then retry: domani email create ${s}`,code:"timeout",json:e.json,fields:e.fields})),k.markDone(0);let h=x=>`${x.type}:${x.name}`,_=new Map;g.slice(1).forEach((x,O)=>_.set(h(x),O+1));for(let x=0;x<60;x++){await Dt(15e3);let O=await j(`/api/domains/${encodeURIComponent(t)}/email/status`),A=await O.json();if(O.ok&&A.records){for(let M of A.records)if(M.status==="verified"||M.status==="created"){let H=_.get(h(M));H!==void 0&&k.markDone(H)}}if(O.ok&&A.verified)break}k.stop(),d()}if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),n.stop(`${y.success} ${R.default.cyan(o.address)} created`),e.json){w(o,e.fields);return}let a=await j(`/api/domains/${encodeURIComponent(t)}/email/status`),l=await a.json();d(),a.ok&&l.verified?(I("Read inbox:",`domani email inbox ${o.address}`),I("Web inbox:",`${ii}/inbox?address=${encodeURIComponent(o.address)}`)):(I("Check propagation:",`domani email status --domain ${t}`),I("Web inbox:",`${ii}/inbox?address=${encodeURIComponent(o.address)}`)),d()}async function Td(e){let t=await Xe(e);if(e.slug||u("Slug required",{hint:"Usage: domani email delete hello@example.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_delete_mailbox",{domain:t,address:`${e.slug}@${t}`},e.json,e.fields);let i=C(!e.json);i.start(`Deleting ${e.slug}@${t}`);let s=encodeURIComponent(`${e.slug}@${t}`),n=await j(`/api/emails/${s}`,{method:"DELETE",body:JSON.stringify({confirm:!0})}),r=await n.json();if(n.ok||(i.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Mailbox deleted`),e.json){w(r,e.fields);return}console.log(` ${R.default.dim(`${r.address} and all messages deleted.`)}`),d()}async function Pd(e){let t=await Xe(e);if(e.slug||u("Slug required",{hint:'Usage: domani email send hello@example.com --to user@test.com --subject "Hi" --body "Hello"',code:"validation_error",json:e.json,fields:e.fields}),e.to||u("Recipient required",{hint:"Usage: domani email send hello@example.com --to user@test.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_send",{from:`${e.slug}@${t}`,to:e.to,subject:e.subject},e.json,e.fields);let i=C(!e.json);i.start(`Sending from ${e.slug}@${t}`);let s={to:Qi(Zi(e.to))},n=Qi(Zi(e.cc)),r=Qi(Zi(e.bcc));n&&(s.cc=n),r&&(s.bcc=r),e.subject&&(s.subject=e.subject),e.text&&(s.text=e.text),e.inReplyTo&&(s.in_reply_to=e.inReplyTo),e.references&&(s.references=e.references),e.sendAt&&(s.send_at=e.sendAt);let o=encodeURIComponent(`${e.slug}@${t}`),a=await j(`/api/emails/${o}/send`,{method:"POST",body:JSON.stringify(s)}),l=await a.json();if(!a.ok){i.stop("Failed");let f=l.code==="MONTHLY_LIMIT_EXCEEDED"?`Run ${R.default.cyan("domani upgrade")} to switch to Pro (10,000 emails/month).`:l.hint;u(l.error||l.message,{hint:f,status:a.status,json:e.json,fields:e.fields})}let m=Array.isArray(l.to)?l.to.join(", "):l.to;if(i.stop(l.status==="scheduled"?`${y.success} Scheduled for ${R.default.cyan(e.sendAt||"")} to ${R.default.cyan(m)} ${R.default.dim("(trash the message before then to cancel)")}`:`${y.success} Sent to ${R.default.cyan(m)}`),e.json){w(l,e.fields);return}}function vn(e,t){return(!e.slug||!e.domain)&&u("Mailbox address required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),{domain:e.domain,slug:e.slug,address:`${e.slug}@${e.domain}`}}async function mo(e,t,i,s,n){let r=C(!i.json);r.start(s);let o=await j(e,{method:"POST",body:JSON.stringify(t)}),a=await o.json();o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:i.json,fields:i.fields})),r.stop(n(a)),i.json&&w(a,i.fields)}async function Dd(e){let t='Usage: domani email escalate hello@example.com --message-id MSG_ID [--reason "refund over $500"] [--clear]',{address:i}=vn(e,t);e.messageId||u("Message ID required",{hint:t,code:"validation_error",json:e.json,fields:e.fields});let s={};e.reason&&(s.reason=e.reason),e.clear&&(s.clear=!0),await mo(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/escalate`,s,e,e.clear?"Clearing escalation":"Flagging for a human",n=>n.needs_human?`${y.success} Flagged for a human ${R.default.dim("(conversation held, email.escalated fired)")}`:`${y.success} Escalation cleared`)}async function Nd(e){let t='Usage: domani email remind hello@example.com --message-id MSG_ID --at 2026-09-03T09:00:00Z [--note "chase the invoice"] [--clear]',{address:i}=vn(e,t);e.messageId||u("Message ID required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),!e.at&&!e.clear&&u("Reminder time required",{hint:t,code:"validation_error",json:e.json,fields:e.fields});let s={};e.at&&(s.remind_at=e.at),e.note&&(s.note=e.note),e.clear&&(s.clear=!0),await mo(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/remind`,s,e,e.clear?"Clearing reminder":"Setting follow-up reminder",n=>n.remind_at?`${y.success} Reminder set for ${R.default.cyan(String(n.remind_at))} ${R.default.dim("(fires only if still unanswered)")}`:`${y.success} Reminder cleared`)}async function Ud(e){let t=new URLSearchParams;e.q&&t.set("q",e.q),e.limit&&t.set("limit",e.limit),e.cursor&&t.set("cursor",e.cursor);let i=await j(`/api/contacts${t.size?`?${t}`:""}`),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json){w(s,e.fields);return}let n=s.contacts||[];if(n.length===0){console.log(R.default.dim("No contacts yet. The address book fills itself as mail flows in and out."));return}for(let r of n){let o=r.name?` ${R.default.dim(r.name)}`:"",a=r.notes?` ${R.default.dim("-")} ${r.notes}`:"";console.log(`${R.default.cyan(r.address)}${o} ${R.default.dim(`(${r.message_count} msg${r.message_count!==1?"s":""}, last ${r.last_direction||"-"})`)}${a}`)}s.next_cursor&&console.log(R.default.dim(`More: --cursor ${s.next_cursor}`))}function fo(e,t){return e.slug&&e.domain?`${e.slug}@${e.domain}`:(u("Contact address required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),"")}async function qd(e){let i=fo(e,'Usage: domani email contact-add ada@example.com [--name "Ada"] [--notes "prefers short emails"]'),s={address:i};e.name!==void 0&&(s.name=e.name),e.notes!==void 0&&(s.notes=e.notes);let n=await j("/api/contacts",{method:"POST",body:JSON.stringify(s)}),r=await n.json();if(n.ok||u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}),e.json){w(r,e.fields);return}console.log(`${y.success} Contact ${R.default.cyan(i)} saved.`)}async function Fd(e){let i=fo(e,"Usage: domani email contact-remove ada@example.com"),s=await j(`/api/contacts/${encodeURIComponent(i)}`,{method:"DELETE"}),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json){w(n,e.fields);return}console.log(n.deleted?`${y.success} Contact ${R.default.cyan(i)} deleted.`:R.default.dim(`No contact ${i}.`))}async function Md(e){let t='Usage: domani email tone hello@example.com [--set "lowercase, friendly, sign as Ada"] [--clear]',{address:i}=vn(e,t),s=encodeURIComponent(i);if(e.set===void 0&&!e.clear){let o=await j(`/api/emails/${s}`),a=await o.json();if(o.ok||u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields}),e.json){w({address:i,tone_notes:a.tone_notes??null},e.fields);return}console.log(a.tone_notes?a.tone_notes:R.default.dim(`No tone notes on ${i}. Set them with --set.`));return}let n=await j(`/api/emails/${s}`,{method:"PATCH",body:JSON.stringify({tone_notes:e.clear?null:e.set})}),r=await n.json();if(n.ok||u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}),e.json){w(r,e.fields);return}console.log(e.clear?`${y.success} Tone notes cleared on ${R.default.cyan(i)}.`:`${y.success} Tone notes set on ${R.default.cyan(i)}.`)}async function Ld(e){let t=await Xe(e);e.slug||u("Slug required",{hint:"Usage: domani email inbox hello@example.com [--direction in|out] [--limit 20]",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams;e.direction&&i.set("direction",e.direction),e.folder&&i.set("folder",e.folder),e.view&&i.set("view",e.view),e.limit&&i.set("limit",e.limit);let s=i.toString()?`?${i}`:"",n=C(!e.json);n.start(`Loading messages for ${e.slug}@${t}`);let r=encodeURIComponent(`${e.slug}@${t}`),o=await j(`/api/emails/${r}/messages${s}`),a=await o.json();o.ok||(n.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields}));let l=a.messages||[];if(e.json){n.stop(`${y.success} ${l.length} message(s)`),w(a,e.fields);return}if(l.length===0){n.stop(`${R.default.dim("No messages")}`);return}let m=l.length>1?"s":"";n.stop(`${y.success} ${R.default.cyan(`${e.slug}@${t}`)} ${R.default.dim("\xB7 "+l.length+" message"+m)}`);for(let f of l){let g=f.direction==="in"?R.default.green("in "):R.default.dim("out"),b=f.direction==="in"?f.from:f.to,k=f.subject||"(no subject)",v=R.default.dim(new Date(f.created_at).toLocaleString()),h=k;if(f.text){let _=f.text.replace(/\s+/g," ").trim(),x=_.length>60?_.slice(0,60)+"\u2026":_;h=`${k} ${R.default.dim("- "+x)}`}console.log(` ${g} ${b.padEnd(30)} ${h} ${v}`)}a.next_cursor&&console.log(` ${R.default.dim("\u2026 more available, use --limit to paginate")}`)}async function Vd(e){let t=await Xe(e);e.slug||u("Slug required",{hint:"Usage: domani email folders hello@example.com",code:"validation_error",json:e.json,fields:e.fields});let i=encodeURIComponent(`${e.slug}@${t}`),s=await j(`/api/emails/${i}/folders`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);S(`Folders for ${e.slug}@${t}`);for(let r of n.folders||[])c(r.id,`${r.total} total, ${r.unread} unread`);for(let r of n.views||[])c(r.id,`${r.total} total, ${r.unread} unread`)}async function Wd(e,t){let i=await Xe(t);t.slug||u("Slug required",{hint:`Usage: domani email ${e} hello@example.com --message-ids id1,id2`,code:"validation_error",json:t.json,fields:t.fields});let s=(t.messageIds||"").split(",").map(f=>f.trim()).filter(Boolean);s.length||u("Message IDs required",{hint:"Pass --message-ids id1,id2",code:"validation_error",json:t.json,fields:t.fields});let n={message_ids:s,idempotency_key:t.idempotencyKey||(0,uo.randomUUID)()};if((e==="archive"||e==="trash")&&Object.assign(n,{action:"move",destination:e==="archive"?"archive":"trash"}),e==="restore"&&(n.action="restore"),(e==="read"||e==="unread")&&Object.assign(n,{action:"mark_read",read:e==="read"}),(e==="star"||e==="unstar")&&Object.assign(n,{action:"star",starred:e==="star"}),t.dryRun)return B("email_messages_action",{address:`${t.slug}@${i}`,...n},t.json,t.fields);let r=encodeURIComponent(`${t.slug}@${i}`),o=await j(`/api/emails/${r}/messages/actions`,{method:"POST",body:JSON.stringify(n)}),a=await o.json();if(!o.ok&&o.status!==207&&u(a.error||a.message,{hint:a.hint,status:o.status,json:t.json,fields:t.fields}),t.json)return w(a,t.fields);let l=(a.results||[]).filter(f=>f.ok).length,m=(a.results||[]).length-l;console.log(`${y.success} ${l} updated${m?R.default.yellow(`, ${m} failed`):""}`),a.operation_id&&(c("Operation",a.operation_id),c("Idempotency key",a.idempotency_key),a.idempotent_replay&&c("Receipt","replayed (no duplicate mutation)"))}async function Hd(e){let t=await Xe(e);e.slug||u("Slug required",{hint:"Usage: domani email webhook hello@example.com --url https://...",code:"validation_error",json:e.json,fields:e.fields});let i=`${e.slug}@${t}`,s=encodeURIComponent(i),n;try{n=Ut(e)}catch(o){u(o instanceof Error?o.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(!e.url&&n!==void 0&&u("--url is required when changing webhook auth headers",{hint:"Pass the existing webhook URL with --authorization-env, --api-key-env, or --clear-headers.",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_webhook",{address:i,webhook_url:e.url||null,...n!==void 0?{header_names:qt(n)}:{}},e.json,e.fields);let r=C(!e.json);if(e.url){r.start(`Setting webhook for ${i}`);let o=await j(`/api/emails/${s}/webhook`,{method:"PUT",body:JSON.stringify({url:e.url,...n!==void 0?{headers:n}:{}})}),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields})),r.stop(`${y.success} Webhook set`),e.json){w(a,e.fields);return}S(`Mailbox ${a.address}`),c("Webhook",$.url(a.webhook_url)),c("Auth headers",a.header_names?.join(", ")||R.default.dim("none")),c("Signing secret",R.default.dim(a.signing_secret)),d()}else{r.start(`Removing webhook for ${i}`);let o=await j(`/api/emails/${s}/webhook`,{method:"DELETE"}),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields})),r.stop(`${y.success} Webhook removed`),e.json){w(a,e.fields);return}S(`Mailbox ${a.address}`),c("Webhook",R.default.dim("none")),d()}}async function Jd(e){let t=await Xe(e);e.slug||u("Slug required",{hint:"Usage: domani email webhook-test hello@example.com",code:"validation_error",json:e.json,fields:e.fields});let i=`${e.slug}@${t}`;if(e.dryRun)return B("email_webhook_test",{address:i},e.json,e.fields);let s=C(!e.json);s.start(`Testing webhook for ${i}`);let n=await j(`/api/emails/${encodeURIComponent(i)}/webhook/test`,{method:"POST"}),r=await n.json();if((!n.ok||!r.success)&&(s.stop("Failed"),u(r.error||r.message||"Webhook test failed",{hint:r.hint||"Check the endpoint and sender authentication, then retry.",status:n.status,json:e.json,fields:e.fields})),s.stop(`${y.success} Test delivered`),e.json)return w(r,e.fields);S(`Mailbox ${i}`),c("Delivery",R.default.green("successful")),typeof r.status=="number"&&c("Endpoint",`HTTP ${r.status}`),d()}async function Bd(e){let t=await Xe(e);if(e.slug||u("Slug required",{hint:"Usage: domani email forward hello@example.com --forward-to me@gmail.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_forward",{address:`${e.slug}@${t}`,forward_to:e.forwardTo||null},e.json,e.fields);let i=C(!e.json),s=e.forwardTo||null;i.start(`Updating forward for ${e.slug}@${t}`);let n=encodeURIComponent(`${e.slug}@${t}`),r=await j(`/api/emails/${n}`,{method:"PATCH",body:JSON.stringify({forward_to:s})}),o=await r.json();if(r.ok||(i.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Forward ${s?"set":"removed"}`),e.json){w(o,e.fields);return}S(`Mailbox ${o.address}`),c("Forward to",o.forward_to?R.default.cyan(o.forward_to):R.default.dim("none")),d()}async function lo(e,t,i){let s=C(!t);s.start(`Checking email health for ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}/email/check`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop("Email health checked"),t){w(r,i);return}if(S(`Email Health ${$.domain(r.domain)}`),r.provider?c("Provider",R.default.cyan($n(r.provider))):c("Provider",R.default.dim("unknown")),r.mx.configured?c("MX",`${y.success} ${R.default.green("propagated")} ${R.default.dim(`(${r.mx.records.length} record${r.mx.records.length!==1?"s":""})`)}`):c("MX",`${y.error} ${R.default.red("not configured")}`),r.spf.configured?c("SPF",`${y.success} ${R.default.green(r.spf.value)}`):c("SPF",`${y.error} ${R.default.red("missing")}`),r.dmarc.configured){let o=r.dmarc.value.length>50?r.dmarc.value.slice(0,50)+"...":r.dmarc.value;c("DMARC",`${y.success} ${R.default.green(o)}`)}else c("DMARC",`${y.error} ${R.default.red("missing")}`);r.dkim.configured?c("DKIM",`${y.success} ${R.default.green("found")} ${R.default.dim(`(${r.dkim.selectors.join(", ")})`)}`):c("DKIM",`${y.warning} ${R.default.yellow("not found")}`),d(),r.mx.configured?(!r.spf.configured||!r.dmarc.configured)&&(ze("SPF and DMARC protect against email spoofing. Re-run email setup to add them."),d()):(I("Set up email:",`domani email ${e} google`),d())}async function co(e,t,i,s){return t?ho(e,t,i,s):po(e,i,s)}async function po(e,t,i){let s=C(!t);s.start("Loading email providers");let n=await j(`/api/domains/${encodeURIComponent(e)}/connect`),r=await n.json();n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop("Providers loaded");let o=r.providers?.email||[];o.length===0&&u("No email providers available",{code:"not_found",json:t,fields:i});let a=await Qe({message:"Choose an email provider",options:o.map(l=>({value:l.name,label:$n(l.name)}))});return le(a)&&process.exit(0),ho(e,a,t,i)}async function ho(e,t,i,s){if(i){let m=await j(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),f=await m.json();m.ok||u(f.error||f.message,{hint:f.hint,status:m.status,json:i,fields:s}),w(f,s);return}let n=await j(`/api/domains/${encodeURIComponent(e)}/connect?provider=${encodeURIComponent(t)}`);if(!n.ok){let m=await n.json();u(m.error||m.message,{hint:m.hint,status:n.status,json:i,fields:s})}let r=await n.json(),o=r.preview?.records??[],a=r.preview?.provider??t,l=$n(a);if(S(`Email ${$.domain(e)}`),c("Provider",R.default.cyan(l)),o.length){d(),console.log(` ${R.default.bold("DNS Records")}`);let m=[8,24,40],f=Nt(["Type","Name","Value"],o.map(x=>({cells:yd(x),status:"pending"})),m);f.start();let g=await j(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),b=await g.json();g.ok||(f.stop(),d(),u(b.error||b.message,{hint:b.hint,status:g.status,json:i,fields:s}));let k=b.records||[];for(let x=0;x<o.length;x++)k.find(A=>A.record.type===o[x].type&&A.record.name===o[x].name&&A.record.value===o[x].value)?.status==="already_set"||await Dt(60),f.markDone(x);await Dt(80),f.stop();let v=k.filter(x=>x.status==="created"||x.status==="updated").length,h=k.filter(x=>x.status==="already_set").length,_;h===k.length?_=`All ${h} records already set`:h>0?_=`${v} created, ${h} already set`:_=`${v} DNS records set`,d(),console.log(` ${y.success} ${R.default.green(`Email configured - ${_}`)}`)}else{let m=C(!0);m.start("Setting DNS records");let f=await j(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),g=await f.json();f.ok||(m.stop("Failed"),u(g.error||g.message,{hint:g.hint,status:f.status,json:i,fields:s})),m.stop(`${y.success} Email configured via ${R.default.cyan(l)}`)}d(),I("Verify propagation:",`domani email ${e} --check`),d()}var R,uo,gd,bd,kn=Ie(()=>{"use strict";K();si();R=D(L(),1);Pe();V();he();Ye();uo=require("node:crypto");Xi();gd=["setup","status","remove","list","create","delete","send","inbox","folders","archive","trash","restore","read","unread","star","unstar","webhook","forward","check","connect","work","triage","notes","note","activity","changes","coordination","presence","release-presence","escalate","remind","contacts","contact-add","contact-remove","tone"],bd={"google-workspace":"Google Workspace",fastmail:"Fastmail",proton:"Proton Mail"}});var bo={};Vt(bo,{dns:()=>jn});async function jn(e,t,i,s,n,r){e||(e=await fe()),z(e,r);let o=r?.json??!1,a=r?.type||i,l=r?.name||s,m=r?.value||n;if(!t||t==="get"){let f=C(!o);f.start(`Loading DNS for ${$.domain(e)}`);let g=await j(`/api/domains/${encodeURIComponent(e)}/dns`),b=await g.json();if(g.ok||(f.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:g.status,json:o,fields:r?.fields})),f.stop(`${b.records.length} record(s)`),o){w(b,r?.fields);return}if(b.records.length===0){d(),console.log(` ${xe.default.dim(`No DNS records for ${e}`)}`),d(),I("Auto-configure DNS:",`domani connect ${e}`),d();return}let k=[8,24,40,8];S(`DNS ${$.domain(e)}`,k.reduce((h,_)=>h+_,0)+k.length-1);let v=b.records.map(h=>{let _=h.priority?xe.default.dim(` pri=${h.priority}`):"";return[xe.default.yellow(h.type),h.name,xe.default.cyan(h.value)+_,xe.default.dim(String(h.ttl))]});se(["Type","Name","Value","TTL"],v,k),d();return}if(t==="set"){if((!a||!l||!m)&&u("Missing arguments for dns set",{hint:"Usage: domani dns <domain> set --type A --name www --value 1.2.3.4",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return B("dns_set",{domain:e,record:{type:a.toUpperCase(),name:l,value:m,ttl:3600}},o,r?.fields);let f=C(!o);f.start(`Setting ${xe.default.yellow(a.toUpperCase())} record`);let g=await j(`/api/domains/${encodeURIComponent(e)}/dns`),b=await g.json(),v=(g.ok?b.records:[]).filter(x=>!(x.type===a.toUpperCase()&&x.name===l));v.push({type:a.toUpperCase(),name:l,value:m,ttl:3600});let h=await j(`/api/domains/${encodeURIComponent(e)}/dns`,{method:"PUT",body:JSON.stringify({records:v})}),_=await h.json();h.ok||(f.stop("Failed"),u(_.error||_.message,{hint:_.hint,status:h.status,json:o,fields:r?.fields})),f.stop(`${y.success} ${xe.default.yellow(a.toUpperCase())} ${l} ${y.arrow} ${xe.default.cyan(m)}`),o?w(_,r?.fields):(d(),I("Check propagation:",`domani status ${e}`),d());return}if(t==="delete"){if((!a||!l)&&u("Missing arguments for dns delete",{hint:"Usage: domani dns <domain> delete --type A --name www",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return B("dns_delete",{domain:e,record:{type:a.toUpperCase(),name:l}},o,r?.fields);let f=C(!o);f.start(`Deleting ${xe.default.yellow(a.toUpperCase())} ${l}`);let g=await j(`/api/domains/${encodeURIComponent(e)}/dns?type=${encodeURIComponent(a.toUpperCase())}&name=${encodeURIComponent(l)}`,{method:"DELETE"}),b=await g.json();g.ok||(f.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:g.status,json:o,fields:r?.fields})),f.stop(`${y.success} Deleted ${xe.default.yellow(a.toUpperCase())} ${l}`),o?w(b,r?.fields):(d(),I("Check propagation:",`domani status ${e}`),d());return}if(t==="snapshot"){if(r?.dryRun)return B("dns_snapshot",{domain:e},o,r?.fields);let f=C(!o);f.start(`Capturing DNS snapshot for ${$.domain(e)}`);let g=await j(`/api/domains/${encodeURIComponent(e)}/dns/snapshot`,{method:"POST"}),b=await g.json();g.ok||(f.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:g.status,json:o,fields:r?.fields}));let k=b.records?.length??0;if(f.stop(`${y.success} Captured ${k} record(s)`),o){w(b,r?.fields);return}let v=`${e}.dns.json`,h=(0,_n.resolve)(process.cwd(),v);(0,es.writeFileSync)(h,JSON.stringify(b,null,2)+`
179
- `),S("DNS Snapshot"),c("Domain",$.domain(b.domain)),c("Records",String(k)),c("Subdomains",String(b.subdomains?.length??0)),c("Sources",(b.sources||[]).join(", ")||"none"),c("Captured",b.capturedAt||b.captured_at||"now"),c("Saved to",xe.default.cyan(v)),d(),I("Restore from this snapshot:",`domani dns ${e} restore --file ${v}`),d();return}if(t==="restore"){if(r?.dryRun)return B("dns_restore",{domain:e,source:r?.file||"server_backup"},o,r?.fields);let f=C(!o),g;if(r?.file){let v=(0,_n.resolve)(process.cwd(),r.file);v.startsWith(process.cwd())||u("File path must be within the current directory",{hint:`Got: ${r.file}`,code:"validation_error",json:o,fields:r?.fields});try{let h=(0,es.readFileSync)(v,"utf-8"),_=JSON.parse(h);g=JSON.stringify({snapshot:_}),f.start(`Restoring DNS for ${$.domain(e)} from ${xe.default.cyan(r.file)}`)}catch(h){u(`Failed to read snapshot file: ${h instanceof Error?h.message:"unknown"}`,{hint:`Make sure ${r.file} exists and contains valid JSON.`,code:"validation_error",json:o,fields:r?.fields})}}else f.start(`Restoring DNS for ${$.domain(e)} from server backup`);let b=await j(`/api/domains/${encodeURIComponent(e)}/dns/restore`,{method:"POST",...g?{body:g}:{}}),k=await b.json();if(b.ok||(f.stop("Failed"),u(k.error||k.message,{hint:k.hint,status:b.status,json:o,fields:r?.fields})),f.stop(`${y.success} Restored DNS`),o){w(k,r?.fields);return}if(S("DNS Restored"),c("Domain",$.domain(k.domain)),c("Applied",xe.default.green(String(k.applied??0))),c("Skipped",xe.default.dim(String(k.skipped??0))),k.errors?.length>0){c("Errors",xe.default.red(String(k.errors.length)));for(let v of k.errors)console.log(` ${xe.default.red("\u2022")} ${v}`)}d(),I("Verify DNS records:",`domani dns ${e}`),d();return}u(`Unknown action: ${t}`,{hint:"Use 'get', 'set', 'delete', 'snapshot', or 'restore'.",code:"validation_error",json:o,fields:r?.fields})}var xe,es,_n,xn=Ie(()=>{"use strict";K();xe=D(L(),1);V();he();Ye();es=require("node:fs"),_n=require("node:path")});var yo={};Vt(yo,{status:()=>Sn});function Gd(e){return[et.default.yellow(e.type),e.name,et.default.cyan(e.value)+(e.priority?et.default.dim(` pri=${e.priority}`):"")]}function Kd(e){if(S(`Status ${$.domain(e.domain)}`),e.expires){let t=new Date(e.expires).toLocaleDateString(),i=e.days_until_expiry,s=i!=null&&i<30?et.default.red:i!=null&&i<90?et.default.yellow:et.default.green;c("Expires",`${t} ${et.default.dim("(")}${s(`${i} days`)}${et.default.dim(")")}`)}}async function Sn(e,t){if(e||(e=await fe()),z(e,t),t.json){let g=await j(`/api/domains/${encodeURIComponent(e)}/status`),b=await g.json();g.ok||u(b.error||b.message,{hint:b.hint,status:g.status,json:t.json,fields:t.fields}),w(b,t.fields);return}let i=C(!0);i.start(`Checking ${$.domain(e)}`);let s;try{s=await j(`/api/domains/${encodeURIComponent(e)}/status`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(t.timeout?parseInt(t.timeout,10)*1e3:3e4)})}catch{i.stop("Failed"),u("Request timed out",{hint:"The status check took too long. Try again.",code:"timeout",json:t.json,fields:t.fields})}if(!s.ok){i.stop("Failed");try{let g=await s.json();u(g.error||g.message,{hint:g.hint,status:s.status,json:t.json,fields:t.fields})}catch{u(`Server error (${s.status})`,{status:s.status,json:t.json,fields:t.fields})}}let n=s.body;n||(i.stop("Failed"),u("Empty response"));let r=new TextDecoder,o="",a=null,l=[],m=!1,f="";try{for await(let g of n){o+=r.decode(g,{stream:!0});let b=o.split(`
180
- `);o=b.pop()??"";for(let k of b)if(k.startsWith("event: "))f=k.slice(7);else if(k.startsWith("data: ")){let v=JSON.parse(k.slice(6));if(f==="info"&&(i.stop("Status retrieved"),m=!0,Kd(v)),f==="records")if(l=v,l.length>0){d(),console.log(` ${et.default.bold("DNS Records")}`);let h=[8,10,34];a=Nt(["Type","Name","Value"],l.map(_=>({cells:Gd(_),status:"pending"})),h),a.start()}else d(),c("DNS",et.default.dim("no records")),I("Auto-configure DNS:",`domani connect ${e}`);if(f==="propagation"&&a){let{index:h,propagated:_}=v,x=_?y.success:`${y.warning}`;a.markDone(h,x)}f==="done"&&a&&a.stop(),f==="error"&&(m||i.stop("Failed"),a&&a.stop(),u(v.message||"Status check failed"))}}}catch{m||i.stop("Failed"),a&&a.stop(),u("Connection lost",{hint:"The status check was interrupted. Try again.",code:"connection_lost",json:t.json,fields:t.fields})}m||i.stop("Done"),d()}var et,Cn=Ie(()=>{"use strict";K();et=D(L(),1);V();he();Ye()});var mi={};Vt(mi,{buy:()=>In});async function On(e){let t=await Qe({message:`What's next for ${De.default.cyan(e)}?`,options:[{value:"connect",label:"Connect to a service",hint:"domani connect"},{value:"email",label:"Set up email",hint:"domani email setup"},{value:"dns",label:"Configure DNS",hint:"domani dns"},{value:"status",label:"Check status & DNS propagation",hint:"domani status"},{value:"done",label:"Done"}]});if(le(t)||t==="done"){d();return}if(d(),t==="connect"){let{connect:i}=await Promise.resolve().then(()=>(yn(),oo));await i(e,void 0,{})}else if(t==="email"){let i=await Ae({message:`Mailbox name for ${De.default.cyan(e)}`,placeholder:"e.g. hey, hello, contact"});if(le(i)||!i){d();return}d();let{email:s}=await Promise.resolve().then(()=>(kn(),go));await s("create",void 0,{domain:e,slug:i})}else if(t==="dns"){let{dns:i}=await Promise.resolve().then(()=>(xn(),bo));await i(e)}else if(t==="status"){let{status:i}=await Promise.resolve().then(()=>(Cn(),yo));await i(e,{})}}async function zd(e,t){z(e,t);let i;if(t.preChecked)i={available:!0,...t.preChecked};else{let f=C(!t.json);f.start(`Checking ${$.domain(e)}`);let g=await j(`/api/domains/search?q=${encodeURIComponent(e)}`);i=await g.json(),g.ok||(f.stop("Search failed"),u(i.error,{hint:i.hint,status:g.status,json:t.json,fields:t.fields})),i.available||(f.stop(`${y.error} ${$.domain(e)} is not available`),u(`${e} is not available`,{code:"not_available",json:t.json,fields:t.fields})),f.stop(`${y.success} ${$.domain(e)} ${y.dot} available ${y.dot} ${$.price(i.price)}/yr`)}if(t.dryRun)return B("buy",{domain:e,available:!0,price:i.price,currency:i.currency||"USD"},t.json,t.fields);if(!Pt(t)){let f=await Ke({message:`Purchase ${De.default.bold(e)} for ${$.price(i.price)}/yr?`});if(!f||typeof f=="symbol"){console.log(` ${De.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start("Purchasing");let n=await j("/api/domains/buy",{method:"POST",headers:{Accept:"text/event-stream"},body:JSON.stringify({domain:e})});if(!n.ok||!n.body){s.stop("Purchase failed");let f=await n.json().catch(()=>({}));u(f.error||f.message,{hint:f.hint,fixUrl:f.setup_url||f.payment_options?.card?.setup_url,status:n.status,json:t.json,fields:t.fields})}let r={},o=new TextDecoder,a="",l="";for await(let f of n.body){a+=o.decode(f,{stream:!0});let g=a.split(`
181
- `);a=g.pop()??"";for(let b of g)if(b.startsWith("event: "))l=b.slice(7).trim();else if(b.startsWith("data: ")){let k=JSON.parse(b.slice(6));l==="checking"?s.message(`Checking ${$.domain(k.domain)}`):l==="payment"?s.message(`Charging ${$.price(k.total)}`):l==="registering"?s.message(`Registering ${$.domain(k.domain)}`):l==="registered"?r=k:l==="error"&&(s.stop("Purchase failed"),u(k.error,{hint:k.hint,fixUrl:k.setup_url,status:n.status,json:t.json,fields:t.fields}))}}let m=r.expires?De.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(s.stop(`${y.success} ${$.domain(r.domain)} is yours!${m}`),t.json){w(r,t.fields);return}je?await On(r.domain):(I("Connect to a service:",`domani connect ${r.domain}`),I("Set up email:",`domani email setup ${r.domain}`),I("Configure DNS:",`domani dns ${r.domain}`),d())}async function Yd(e,t){no(e,t);let i=!!t.json,s=C(!i);s.start(`Checking ${e.length} domains`);let n=await Promise.all(e.map(async h=>{try{let _=await j(`/api/domains/search?q=${encodeURIComponent(h)}`),x=await _.json();return{domain:h,available:_.ok&&x.available,price:x.price}}catch{return{domain:h,available:!1,price:void 0}}})),r=n.filter(h=>h.available),o=n.filter(h=>!h.available);r.length===0&&(s.stop(`${y.error} None of the ${e.length} domains are available`),process.exit(1));let a=r.reduce((h,_)=>h+(_.price||0),0);if(s.stop(`${y.success} ${r.length}/${e.length} available ${y.dot} ${$.price(a.toFixed(2))} total`),o.length>0)for(let h of o)console.log(` ${y.error} ${$.domain(h.domain)} ${De.default.dim("not available")}`);if(t.dryRun)return B("buy_bulk",{domains:r.map(h=>({domain:h.domain,price:h.price})),unavailable:o.map(h=>h.domain),total_price:parseFloat(a.toFixed(2))},t.json,t.fields);if(!Pt(t)){let h=await Ke({message:`Purchase ${De.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${$.price(a.toFixed(2))}?`});if(!h||typeof h=="symbol"){console.log(` ${De.default.dim("Cancelled.")}`);return}}d();let l=r.map(h=>({cells:[$.domain(h.domain),h.price?`${$.price(h.price.toFixed(2))}/yr`:""],status:"pending"})),m=Nt(["Domain","Price"],l,[30,12],!i);m.start();let g=await(await j("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(h=>h.domain)})})).json(),b=new Set((g.results||[]).map(h=>h.domain));for(let h=0;h<r.length;h++){let _=r[h].domain.toLowerCase().trim();b.has(_)?m.markDone(h,y.success):m.markDone(h,y.error)}if(m.stop(),i){w(g,t.fields);return}d();let k=g.summary?.succeeded??0,v=g.summary?.failed??0;if(k>0&&console.log(` ${y.success} ${De.default.green(`${k} domain${k>1?"s":""} registered`)}`),v>0){console.log(` ${y.error} ${De.default.red(`${v} failed`)}`);for(let h of g.errors||[])console.log(` ${De.default.dim("\u2500")} ${$.domain(h.domain)}: ${De.default.dim(h.error)}${h.hint?` ${De.default.dim(`(${h.hint})`)}`:""}`)}if(d(),k>0&&je){let h=(g.results||[]).filter(_=>_.success).map(_=>_.domain);if(h.length===1)await On(h[0]);else{let _=await Qe({message:"Set up one of your new domains?",options:[...h.map(x=>({value:x,label:De.default.cyan(x)})),{value:"done",label:"Done"}]});!le(_)&&_!=="done"?(d(),await On(_)):d()}}else k>0&&(I("Connect to a service:","domani connect <domain>"),I("Set up email:","domani email setup <domain>"),d())}async function In(e,t){let i=e.filter(Boolean);if(i.length===0){je||u("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:t.json});let s=await Ae({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(le(s)||!s)&&process.exit(0),i=s.split(/\s+/).filter(Boolean)}return i.length===1?zd(i[0],t):Yd(i,t)}var De,Zt=Ie(()=>{"use strict";K();Pe();De=D(L(),1);V();he()});var Kn=D(Gn(),1),{program:zc,createCommand:Yc,createArgument:Xc,createOption:Zc,CommanderError:Qc,InvalidArgumentError:eu,InvalidOptionArgumentError:tu,Command:zn,Argument:iu,Option:su,Help:nu}=Kn.default;var lt=D(L(),1);ft();pn();V();si();ft();var rt=D(L(),1);V();var id=new Set(["cli","mcp","plugin","skill","api"]);function sd(e){let t=e.scopes?.split(",").map(o=>o.trim()).filter(Boolean),i=e.mailboxes?.split(",").map(o=>o.trim().toLowerCase()).filter(Boolean),s=!!(t?.length||i?.length||e.label||e.expiresIn),n=e.surface||"cli";if(!id.has(n))throw new RangeError("--surface must be one of: cli, mcp, plugin, skill, api");let r=e.expiresIn===void 0?void 0:Number(e.expiresIn);if(r!==void 0&&(!Number.isInteger(r)||r<3600||r>31536e3))throw new RangeError("--expires-in must be an integer between 3600 and 31536000 seconds");return{delegated:s,body:{...t?.length?{scopes:t}:{},...i?.length?{mailboxes:i}:{},...e.label?{label:e.label}:{},...r!==void 0?{expires_in:r}:{},surface:n,intent:"programmatic_access"}}}async function Xr(e){let t=Fe(),i=C(!e.json),s;try{s=sd(e)}catch(k){u(k instanceof Error?k.message:"Invalid login options",{code:"invalid_expires_in",json:e.json})}let{body:n,delegated:r}=s,o=mt(),a=Me();if(a&&!r){i.start("Checking session");try{let k=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${a}`}});if(k.ok){let v=await k.json();i.stop(`Already logged in as ${rt.default.bold(v.email)}`),e.json&&w({status:"already_logged_in",email:v.email});return}}catch{}i.stop("Session expired, re-authenticating"),d()}i.start("Requesting auth code");let l=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok){i.stop("Failed to initiate login");try{let k=await l.json();u(k.error||k.message||`Server error (${l.status})`,{hint:k.hint,code:"login_failed",json:e.json})}catch{u(`Could not reach ${t}. Check your connection and try again.`,{code:"network_error",json:e.json})}}let{code:m,auth_url:f,expires_in:g}=await l.json();if(i.stop("Auth code received"),e.json){w({status:"awaiting_approval",code:m,auth_url:f,expires_in:g});return}d(),console.log(` ${rt.default.dim("Verification code:")} ${rt.default.bold(rt.default.cyan(m))}`),e.open!==!1?(console.log(` ${rt.default.dim("Opening browser")} ${y.arrow} ${$.url(f)}`),We(f)):console.log(` ${rt.default.dim("Open this URL to approve:")} ${$.url(f)}`),d(),i.start("Waiting for approval");let b=120;for(let k=0;k<b;k++){await new Promise(_=>setTimeout(_,5e3));let v=await fetch(`${t}/api/auth/cli/poll?code=${m}`);!v.ok&&v.status!==202&&(i.stop("Login failed"),u(`Server error (${v.status})`,{code:"login_failed"}));let h=await v.json();if(h.status==="complete"){Gt({...mt(),token:h.token,email:h.email,api_url:t}),i.stop(`Logged in as ${rt.default.bold(h.email)}`),d(),console.log(` ${rt.default.bold("Get one real result:")}`),I("1. Create your free inbox:","domani email create YOUR_HANDLE@domani.run"),I("2. Connect your webhook:","domani email webhook YOUR_HANDLE@domani.run --url https://YOUR_AGENT/webhook"),I("3. Prove delivery:","domani email webhook-test YOUR_HANDLE@domani.run"),console.log(` ${rt.default.dim("A custom domain can wait until this loop works.")}`),d();return}h.error&&(i.stop("Login failed"),u(h.error||h.message,{hint:h.hint,code:"login_failed"}))}i.stop("Login timed out"),u("No approval received within 10 minutes",{hint:"Run 'domani login' to try again",code:"timeout"})}ft();var hn=D(L(),1);V();async function Zr(e){let t=mt();if(!t.token){e.json?w({status:"not_logged_in"}):console.log(` ${hn.default.dim("Not logged in.")}`);return}let{api_url:i}=t;lr(),i&&Gt({api_url:i}),e.json?w({status:"logged_out",email:t.email||null}):console.log(` ${y.success} Logged out${t.email?` ${hn.default.dim(`(${t.email})`)}`:""}`)}K();var ci=D(L(),1);V();async function eo(e){let[t,i]=await Promise.all([j("/api/me"),j("/api/me/activation")]),s=await t.json();t.ok||u(s.error||s.message,{hint:s.hint,status:t.status,json:e.json,fields:e.fields});let n=i.ok?await i.json():null;if(e.json){w({...s,activation:n},e.fields);return}if(S("Account"),c("Email",ci.default.bold(s.email)),c("Payment",s.has_payment_method?`${y.success} ${ci.default.green("active")}`:`${y.error} ${ci.default.dim("none")}`),c("Domains",String(s.domain_count)),c("API tokens",String(s.token_count)),c("Referral code",s.referral_code||ci.default.dim("-")),c("Created",new Date(s.created_at).toLocaleDateString()),n){c("Activation",n.status);let r=n.recommended_actions?.[0];r&&c("Next action",r.label)}d()}K();Pe();var N=D(L(),1);V();he();var He=10,Qt=200,ts=["com","io","ai","dev","app","co","net","org","xyz","sh","me","cc","tech","run","cloud","so","gg","fm","tv","pro","one","inc","ltd","llc","biz","group","global","ventures","capital","fund","agency","store","shop","market","sale","deals","auction","trade","studio","design","art","space","style","fashion","luxury","brand","media","digital","site","online","live","show","world","zone","land","place","city","town","blog","news","social","chat","link","page","fun","lol","meme","wtf","tools","build","works","work","team","solutions","services","systems","network","software","music","video","photo","photos","game","games","club","stream","film","movie","pizza","coffee","beer","bar","pub","restaurant","cafe","kitchen","food","wine","health","care","clinic","dental","fitness","yoga","bio","life","lifestyle","finance","money","legal","law","cash","academy","university","education","training","courses","science","wiki","guide","us","uk","eu","ca","au","de","fr","it","es","nl","jp","sg","nz","mx","house","homes","realty","estate","garden","nyc","london","berlin","paris","guru","ninja","rocks","fail","party","vip","gold","black","pink","red","events","travel","sport","jobs","careers","consulting","energy","eco","green","support","help","info","new","now","today","day"],is=null;async function $o(){if(is)return is;try{let e=await be("/api/tlds?sort=price&order=asc&limit=1000");if(e.ok){let i=(await e.json()).tlds.map(s=>s.tld);if(i.length>0){let s=new Set(ts),n=new Set(i),r=[...ts.filter(o=>n.has(o)),...i.filter(o=>!s.has(o))];return is=r,r}}}catch{}return is=ts,ts}async function Xd(e,t,i,s,n){let r=[],o=[],a=He,l=0,m=!0,f=0,g=0,b=!1,k=!1,v=null,h="",_=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],x=0,O=setInterval(()=>{k||!m||(x=(x+1)%_.length,T())},80);function A(){f>0&&(process.stdout.write(`\x1B[${f}A\x1B[0J`),f=0)}function M(){if(m)return[];let F=He+g*He;return r.length>a||s&&F<n.length?["more","new","skip"]:["new","skip"]}function H(){return r.slice(0,a)}function ee(){let F=M();return Math.max(0,H().length+F.length-1)}let P=6;function T(){A();let F=[],X=H(),Q=!m&&X.length===0&&o.length>0,G=Q?o.slice(0,P):X,Oe=G.reduce((de,ae)=>Math.max(de,ae.domain.length),0),Be=M();for(let de=0;de<G.length;de++){let ae=G[de];if(Q)F.push(`${N.default.dim("\u2502")} ${N.default.dim("\u2715")} ${N.default.dim(ae.domain.padEnd(Oe))} ${N.default.dim("taken")}`);else{let ve=de===l,dt=ve?N.default.green("\u25CF"):N.default.dim("\u25CB"),te=ae.domain.padEnd(Oe),it=ve?N.default.bold(N.default.cyan(te)):te,$t=ae.for_sale?N.default.cyan(`$${ae.for_sale.price} (for sale)`):N.default.dim(`$${ae.price}/yr`);F.push(`${N.default.dim("\u2502")} ${dt} ${it} ${$t}`)}}if(Q&&o.length>P&&F.push(`${N.default.dim("\u2502")} ${N.default.dim(`\u2026 and ${o.length-P} more taken`)}`),m){let de=h?N.default.dim(`checking ${h}\u2026`):N.default.dim("searching\u2026");F.push(`${N.default.dim("\u2502")} ${N.default.cyan(_[x])} ${de}`)}else{let de=He+g*He;s&&de>=n.length&&F.push(`${N.default.dim("\u2502")} ${N.default.dim(`All ${Math.min(de,n.length)} TLDs searched`)}`);for(let ve=0;ve<Be.length;ve++){let it=H().length+ve===l?N.default.green("\u25CF"):N.default.dim("\u25CB"),$t=Be[ve]==="more"?N.default.dim("More \u2192"):Be[ve]==="new"?N.default.dim("New search \u2192"):N.default.dim("Skip");F.push(`${N.default.dim("\u2502")} ${it} ${$t}`)}F.push(N.default.dim("\u2514"))}process.stdout.write(F.join(`
177
+ `}}}}).prompt()});function nd(e){return!!(e.json||!Se)}function S(e,t=50){console.log(),console.log(` ${J.default.bold(e)}`),console.log(` ${J.default.dim("\u2500".repeat(t))}`)}function c(e,t,i=2){let s=" ".repeat(i);console.log(`${s}${J.default.dim(e.padEnd(16))} ${t}`)}function d(){console.log()}function Xe(e){console.log(` ${J.default.dim(e)}`)}function I(e,t){console.log(` ${J.default.dim(e)} ${J.default.cyan(t)}`)}function zr(e){return e.split(/(https?:\/\/[^\s]+)/g).map(i=>/^https?:\/\//.test(i)?`\x1B]8;;${i}\x1B\\${J.default.underline(J.default.cyan(i))}\x1B]8;;\x1B\\`:J.default.dim(i)).join("")}function pn(e,t){console.error(` ${b.error} ${J.default.red(e)}`),t&&console.error(` ${zr(t)}`)}function C(e=!0){return e?ui():rd}function Yr(e){return e.replace(od,"")}function Zi(e,t){let i=Yr(e).length,s=Math.max(0,t-i);return e+" ".repeat(s)}function Z(e,t,i){let s=i||e.map((o,a)=>{let l=t.reduce((f,m)=>Math.max(f,Yr(m[a]||"").length),0);return Math.max(o.length,l)+2}),n=e.map((o,a)=>J.default.dim(o.padEnd(s[a]))).join(" "),r=s.map(o=>J.default.dim("\u2500".repeat(o))).join(" ");console.log(` ${n}`),console.log(` ${r}`);for(let o of t){let a=o.map((l,f)=>Zi(l,s[f])).join(" ");console.log(` ${a}`)}}function ad(e){return e.replace(/[A-Z]/g,t=>`_${t.toLowerCase()}`)}function fn(e){if(Array.isArray(e))return e.map(fn);if(e&&typeof e=="object"&&!(e instanceof Date)){let t={};for(let[i,s]of Object.entries(e))t[ad(i)]=fn(s);return t}return e}function w(e,t){let i=fn(e);if(!t){console.log(JSON.stringify(i,null,2));return}let s=t.split(",").map(n=>n.trim()).filter(Boolean);if(Array.isArray(i)){let n=i.map(r=>Br(r,s));console.log(JSON.stringify(n,null,2))}else console.log(JSON.stringify(i&&typeof i=="object"?Br(i,s):i,null,2))}function Br(e,t){let i={};for(let s of t)s in e&&(i[s]=e[s]);if(Object.keys(i).length===0){for(let[s,n]of Object.entries(e))if(Array.isArray(n)&&n.length>0&&typeof n[0]=="object"){let r=n.map(o=>{let a={};for(let l of t)l in o&&(a[l]=o[l]);return a});Object.keys(r[0]).length>0&&(i[s]=r)}}return i}function Nt(e){return!!(e.yes||nd(e))}function B(e,t,i,s){if(i){w({dry_run:!0,action:e,...t},s);return}console.log(),console.log(` ${J.default.yellow("\u25B8 DRY RUN")} ${J.default.dim("- no changes made")}`),console.log(` ${J.default.dim("Action:")} ${J.default.bold(e)}`);for(let[n,r]of Object.entries(t))r!=null&&(Array.isArray(r)?console.log(` ${J.default.dim(n+":")} ${r.map(String).join(", ")}`):console.log(typeof r=="object"?` ${J.default.dim(n+":")} ${JSON.stringify(r)}`:` ${J.default.dim(n+":")} ${String(r)}`));console.log()}function dd(e,t,i){return t===401||t===403?"auth_required":t===402||i?"payment_required":t===404?"not_found":t===409?"conflict":t===422?"validation_error":t===429?"rate_limited":/contact/i.test(e)?"contact_required":"error"}function u(e,t){let i=e||`Request failed${t?.status?` (${t.status})`:""}`,s=t?.code||dd(i,t?.status,t?.fixUrl),n=t?.fixCommand||ld[s];if(t?.json){let r={error:i,code:s};t.hint&&(r.hint=t.hint),n&&(r.fix_command=n),t.fixUrl&&(r.fix_url=t.fixUrl),w(r,t.fields)}else pn(i,t?.hint),n?console.error(` ${J.default.dim("Or run:")} ${J.default.cyan(n)}`):t?.fixUrl&&console.error(` ${zr(`Add a payment method at ${t.fixUrl}`)}`);process.exit(1)}function Je(e){let t=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";(0,Kr.execFile)(t,[e])}function Ut(e){return new Promise(t=>setTimeout(t,e))}function qt(e,t,i,s=!0){let n=process.stdout.isTTY??!1;if(!s)return{start(){},markDone(){},stop(){}};let r=0,o=null,a=2+t.length;function l(){let y=" "+e.map((h,_)=>J.default.dim(h.padEnd(i[_]))).join(" "),k=" "+i.map(h=>J.default.dim("\u2500".repeat(h))).join(" "),$=[y,k];for(let h of t){let _=h.status==="done"?h.icon??b.success:J.default.cyan(Gr[r%Gr.length]),j=h.cells.map((O,A)=>Zi(O,i[A])).join(" ");$.push(` ${_} ${j}`)}return $}let f=!1,m=()=>process.stdout.write("\x1B[?25h");function g(){let y=l();if(f&&n){process.stdout.write(`\x1B[${a}A`);for(let k of y)process.stdout.write(`\x1B[2K${k}
178
+ `)}else{for(let k of y)console.log(k);f=!0}}return{start(){n&&(process.stdout.write("\x1B[?25l"),process.on("exit",m)),g(),n&&(o=setInterval(()=>{r++,g()},80))},markDone(y,k){t[y].status="done",k!==void 0&&(t[y].icon=k),n&&g()},stop(){o&&clearInterval(o);for(let y of t)y.status="done";g(),n&&(process.stdout.write("\x1B[?25h"),process.removeListener("exit",m))}}}var J,Kr,Se,b,v,rd,od,ld,Gr,V=Ae(()=>{"use strict";J=D(M(),1),Kr=require("child_process");Ne();Se=process.stdout.isTTY??!1;b={success:J.default.green("\u2713"),error:J.default.red("\u2717"),warning:J.default.yellow("!"),info:J.default.cyan("\u25CF"),arrow:J.default.dim("\u2192"),dot:J.default.dim("\xB7"),dash:J.default.dim("\u2500")},v={domain:e=>J.default.bold(J.default.white(e)),price:e=>J.default.green(`$${e}`),label:e=>J.default.dim(e),value:e=>J.default.white(e),dim:e=>J.default.dim(e),bold:e=>J.default.bold(e),success:e=>J.default.green(e),error:e=>J.default.red(e),warn:e=>J.default.yellow(e),cyan:e=>J.default.cyan(e),url:e=>`\x1B]8;;${e}\x1B\\${J.default.underline(J.default.cyan(e))}\x1B]8;;\x1B\\`};rd={start:()=>{},stop:()=>{},message:()=>{}};od=/\x1b\]8;;[^\x1b]*\x1b\\|\x1b\[[0-9;]*m/g;ld={auth_required:"domani login",payment_required:"domani card add",contact_required:"domani contact set"};Gr=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"]});function Xr(e){return typeof e=="string"&&["pro","agent","fleet","scale","mail_solo","mail_team","mail_business"].includes(e)}function Zr(e){return Xr(e.plan)||Array.isArray(e.workspace_plans)&&e.workspace_plans.some(Xr)}async function Qr(){if(gn)return;let e=process.argv.includes("--json")||!Ps,t=Le(),i=Ve();try{let r=await(await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${i}`}})).json();if(Zr(r)){gn=!0;return}}catch{}e&&(console.log(JSON.stringify({error:"Paid plan required",code:"upgrade_required",hint:"Upgrade at https://domani.run/settings",fix_command:"domani upgrade"},null,2)),process.exit(1)),d(),console.log(` ${ve.default.dim("This feature requires a")} ${ve.default.bold("paid plan")} ${ve.default.dim("(including an active Mailzero workspace plan or legacy Pro subscription).")}`),console.log(` ${ve.default.dim("Opening pricing page")} ${b.arrow} ${ve.default.cyan("domani.run/pricing")}`),Je(`${t.replace("http://localhost:3000","https://domani.run")}/pricing`),d();let s=C(!0);s.start("Waiting for upgrade...");for(let n=0;n<120;n++){await new Promise(r=>setTimeout(r,5e3));try{let o=await(await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${i}`}})).json();if(Zr(o)){gn=!0,s.stop(`${b.success} Paid plan active! Continuing...`),d();return}}catch{}}s.stop("Timed out"),console.error(` ${ve.default.red("\u2717")} No upgrade detected. Visit ${ve.default.cyan("domani.run/settings")} to upgrade.`),process.exit(1)}async function eo(){if(hn||Ve()){hn=!0;return}(process.argv.includes("--json")||!Ps)&&(console.log(JSON.stringify({error:"Not logged in",code:"auth_required",hint:"Run 'domani login' or set DOMANI_API_KEY environment variable",fix_command:"domani login"},null,2)),process.exit(1)),d(),console.log(` ${ve.default.dim("You're not logged in.")} Starting authentication...`),d();let t=Le(),i=C(!0);i.start("Requesting auth code");let s;try{s=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"}})}catch{i.stop("Failed"),console.error(` ${ve.default.red("\u2717")} Could not reach ${t}. Check your connection.`),process.exit(1)}if(!s.ok){i.stop("Failed");let o=`Server error (${s.status})`;try{let a=await s.json();o=a.error||a.message||o}catch{}console.error(` ${ve.default.red("\u2717")} ${o}`),process.exit(1)}let n,r;try{({code:n,auth_url:r}=await s.json())}catch{i.stop("Failed"),console.error(` ${ve.default.red("\u2717")} Invalid response from server.`),process.exit(1)}i.stop(`${b.success} Auth code ready`),d(),console.log(` ${ve.default.dim("Verification code:")} ${ve.default.bold(ve.default.cyan(n))}`),console.log(` ${ve.default.dim("Opening browser")} ${b.arrow} ${v.url(r)}`),Je(r),d(),i.start("Waiting for browser approval");for(let o=0;o<120;o++){await new Promise(f=>setTimeout(f,5e3));let a=await fetch(`${t}/api/auth/cli/poll?code=${n}`).catch(()=>null);if(!a||!a.ok&&a.status!==202)continue;let l=await a.json().catch(()=>({}));if(l.status==="complete"){zt({...ht(),token:l.token,email:l.email,api_url:t}),hn=!0,i.stop(`${b.success} Logged in as ${ve.default.bold(l.email)}`),d();return}}i.stop("Timed out"),console.error(` ${ve.default.red("\u2717")} No approval received. Run ${ve.default.cyan("domani login")} to try again.`),process.exit(1)}var ve,hn,gn,yn=Ae(()=>{"use strict";ve=D(M(),1);gt();V();hn=!1,gn=!1});function so(e){return e.json=async()=>{let t=await e.clone().text();try{return JSON.parse(t)}catch{let i=t.trim().slice(0,120);return e.ok?(Object.defineProperty(e,"ok",{value:!1}),{error:`Unexpected non-JSON response (HTTP ${e.status})`,hint:`The server replied but not with JSON${i?` (got: "${i}")`:""}. This is usually transient (deploy or proxy) - retry in a few seconds.`}):{error:`Server error (${e.status})`,hint:"The server returned an unexpected response. Try again later."}}},e}async function x(e,t={},i=!1){let s=Ve(),n=`${Le()}${e}`,r=await fetch(n,{...t,headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json","User-Agent":`domani-cli/${xe}`,...t.headers}});if(!i){let o=await r.clone().text();try{if(JSON.parse(o).code==="UPGRADE_REQUIRED")return await Qr(),x(e,t,!0)}catch{}}return so(r)}async function be(e,t={}){let i=`${Le()}${e}`,s=Ve(),n=await fetch(i,{...t,headers:{"Content-Type":"application/json","User-Agent":`domani-cli/${xe}`,...s?{Authorization:`Bearer ${s}`}:{},...t.headers}});return so(n)}var G=Ae(()=>{"use strict";gt();yn()});function St(){return{ok:!0}}function bt(e,t,i){return{ok:!1,error:{message:e,code:t,hint:i}}}function oo(e){return md.test(e)?bt("Input contains control characters","invalid_input","Remove non-printable characters from the input"):St()}function bd(e){return fd.test(e)?bt("Input contains path traversal","invalid_input","Domain names cannot contain '../' or '..\\'"):St()}function wd(e){return pd.test(e)?bt("Input contains query string or fragment","invalid_input","Remove '?' or '#' from the domain name"):St()}function vd(e){return hd.test(e)?bt("Input contains percent-encoded characters","invalid_input","Use plain text, not URL-encoded values (e.g. 'example.com' not 'example%2Ecom')"):St()}function ao(e){if(!e)return bt("Domain name is required","validation_error");if(e.length>ro)return bt(`Domain name too long (${e.length} chars, max ${ro})`,"validation_error");for(let t of[oo,bd,wd,vd]){let i=t(e);if(!i.ok)return i}return gd.test(e)?St():bt(`Invalid domain name: ${e}`,"validation_error","Domain names can only contain letters, digits, hyphens, and dots")}function $d(e){if(!e)return bt("TLD is required","validation_error");let t=oo(e);return t.ok?yd.test(e)?St():bt(`Invalid TLD: ${e}`,"validation_error","TLDs contain only letters (e.g. 'com', '.dev', 'ai')"):t}function kd(e){for(let t of e){let i=ao(t);if(!i.ok)return i}return St()}function _d(e){for(let t of e){let i=$d(t);if(!i.ok)return i}return St()}function z(e,t){let i=ao(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}function lo(e,t){let i=kd(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}function Qi(e,t){let i=_d(e);i.ok||u(i.error.message,{code:i.error.code,hint:i.error.hint,json:t?.json,fields:t?.fields})}var md,fd,pd,hd,gd,yd,ro,ge=Ae(()=>{"use strict";V();md=/[\x00-\x08\x0b\x0c\x0e-\x1f]/,fd=/\.\.[/\\]/,pd=/[?#]/,hd=/%[0-9a-fA-F]{2}/,gd=/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?)*\.?$/,yd=/^\.?[a-zA-Z]{2,63}$/,ro=253});async function fe(){Se||u("Missing required argument: domain",{hint:"Pass the domain as an argument, e.g. 'domani settings example.com'",code:"missing_argument",json:!0});let e=C(!0);e.start("Loading your domains");let t=await x("/api/domains"),i=await t.json();t.ok||(e.stop("Failed"),pn(i.error,i.hint),process.exit(1));let s=i.domains||[];s.length===0&&(e.stop("No domains"),d(),console.log(` ${wn.default.dim("No domains yet.")} Use: ${wn.default.cyan("domani buy <domain>")}`),d(),process.exit(0)),e.stop(`${s.length} domain(s)`);let n=await tt({message:"Which domain?",options:s.map(r=>({value:r.domain,label:r.domain,hint:r.status!=="active"?r.status:void 0}))});return le(n)&&process.exit(0),n}var wn,Ze=Ae(()=>{"use strict";G();Ne();wn=D(M(),1);V()});var uo={};Ht(uo,{connect:()=>vn});async function vn(e,t,i){e||(e=await fe()),z(e,i);let s;if(t&&!i.provider?t.includes(".")?s=t:i.provider=t:s=t,!s&&!i.provider&&!i.list&&i.dryRun)return B("connect",{domain:e,note:"No provider specified. Pass --provider <name> to connect."},i.json,i.fields);if(!s&&!i.provider&&!i.list){let n=C(!i.json);n.start(`Loading providers for ${v.domain(e)}`);let r=await x(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop("Providers loaded"),i.json){w(o,i.fields);return}let a=[];for(let h of["hosting","email"]){let _=o.providers?.[h]||[];for(let j of _)a.push({value:`${h}:${j.name}`,label:j.name,hint:h})}a.length===0&&u("No providers available",{code:"not_found",json:i.json,fields:i.fields});let l=await tt({message:"Choose a provider",options:a});le(l)&&process.exit(0);let[f,m]=l.split(":"),y=(o.providers?.[f]||[]).find(h=>h.name===m),k;if(y&&y.methods.length>1){let h=await tt({message:"Choose a method",options:y.methods.map(_=>({value:_.name,label:_.name,hint:_.default?"default":void 0}))});le(h)&&process.exit(0),k=h}let $;if(f==="hosting"&&y?.requires_target){y.notes?.setup&&Xe(y.notes.setup);let h=await Te({message:"Target hostname or IP"});le(h)&&process.exit(0),$=h.trim()}return co(e,{target:$,provider:m,method:k,dryRun:i.dryRun,json:!1})}if(i.list){let n=C(!i.json);n.start(`Loading providers for ${v.domain(e)}`);let r=await x(`/api/domains/${encodeURIComponent(e)}/connect`),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop("Providers loaded"),i.json){w(o,i.fields);return}S(`Providers for ${v.domain(o.domain)}`);for(let a of["hosting","email"]){let l=o.providers?.[a];if(l?.length){d(),console.log(` ${ue.default.bold(a.toUpperCase())}`);for(let f of l){let m=f.methods.map(g=>g.default?ue.default.green(`${g.name} (default)`):ue.default.dim(g.name)).join(ue.default.dim(", "));console.log(` ${ue.default.cyan(f.name.padEnd(20))} ${m}`)}}}d();return}return co(e,i)}async function co(e,t){let i={};if(t.target&&(i.target=t.target),t.provider&&(i.provider=t.provider),t.method&&(i.method=t.method),t.dryRun)return B("connect",{domain:e,...i},t.json,t.fields);let s=C(!t.json);s.start(`Connecting ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify(i)}),r=await n.json();n.ok||(s.stop("Connection failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.status==="manual_setup_required";if(s.stop(o?`${b.success} DNS instructions for ${ue.default.cyan(r.provider)}`:`${b.success} Connected to ${ue.default.cyan(r.provider)}`),t.json){w(r,t.fields);return}if(S(o?`Add these records at your registrar for ${v.domain(r.domain)}`:`Connected ${v.domain(r.domain)}`),c("Provider",ue.default.cyan(r.provider)),c("Method",r.method),r.records?.length){let a=[8,22,40];d(),console.log(` ${ue.default.bold("DNS Records")}`);let l=["Type","Name","Value"].map((m,g)=>ue.default.dim(m.padEnd(a[g]))).join(" "),f=a.map(m=>ue.default.dim("\u2500".repeat(m))).join(" ");console.log(` ${l}`),console.log(` ${f}`);for(let m of r.records){let g=m.record,y=m.status!=="already_set";process.stdout.isTTY&&y&&await Ut(50);let $=[ue.default.yellow(g.type),g.name,ue.default.cyan(g.value)+(g.priority?ue.default.dim(` pri=${g.priority}`):"")].map((j,O)=>Zi(j,a[O])).join(" "),h=m.status==="already_set"?ue.default.dim("\u2713"):m.status==="updated"?ue.default.yellow("\u21BA"):m.status==="pending"?ue.default.yellow("\u2192"):b.success,_=m.status==="already_set"?ue.default.dim(" already set"):m.status==="updated"?ue.default.dim(" updated"):m.status==="pending"?ue.default.dim(" add this"):"";console.log(` ${h} ${$}${_}`)}}d(),r.next_steps?.length?(console.log(` ${ue.default.bold("Next steps")}`),r.next_steps.forEach((a,l)=>{console.log(` ${ue.default.dim(`${l+1}.`)} ${a}`)})):r.hint&&console.log(` ${ue.default.dim(r.hint)}`),r.docs&&console.log(` ${ue.default.dim("Docs:")} ${v.url(r.docs)}`),d()}var ue,$n=Ae(()=>{"use strict";G();ue=D(M(),1);Ne();V();ge();Ze()});function Ft(e,t=process.env){if(e.clearHeaders&&(e.authorizationEnv||e.apiKeyEnv))throw new Error("--clear-headers cannot be combined with header environment options");if(e.clearHeaders)return{};let i={},s=[["Authorization",e.authorizationEnv],["X-API-Key",e.apiKeyEnv]];for(let[n,r]of s){if(!r)continue;let o=t[r];if(!o)throw new Error(`Environment variable ${r} is not set`);i[n]=o}return Object.keys(i).length>0?i:void 0}function Mt(e){return e?Object.keys(e):[]}var es=Ae(()=>{"use strict"});var vo={};Ht(vo,{email:()=>fi,parseRecipients:()=>ts,recipientField:()=>is});function Sd(e){return[R.default.yellow(e.type),e.name,R.default.cyan(e.value)+(e.priority?R.default.dim(` pri=${e.priority}`):"")]}function kn(e){return jd[e]||e}function ts(e){return e?e.split(",").map(t=>t.trim()).filter(Boolean):[]}function is(e){if(e.length!==0)return e.length===1?e[0]:e}function Cd(e,t){if(e&&e.includes("@")){let[i,s]=e.split("@",2);!t.slug&&i&&(t.slug=i),!t.domain&&s&&(t.domain=s)}}async function Qe(e){return e.domain?(z(e.domain,e),e.domain):fe()}async function fi(e,t,i){if(e&&e.includes(".")&&!xd.includes(e))return i.check?fo(e,!!i.json,i.fields):t?po(e,t,!!i.json,i.fields):bo(e,!!i.json,i.fields);if(Cd(t,i),i.body&&!i.text&&(i.text=i.body),i.title&&!i.subject&&(i.subject=i.title),i.from&&i.from.includes("@")){let[s,n]=i.from.split("@",2);!i.slug&&s&&(i.slug=s),!i.domain&&n&&(i.domain=n)}switch(e){case void 0:return mo(i);case"list":return mo(i);case"inbox":return zd(i);case"folders":return Yd(i);case"archive":case"trash":case"restore":case"read":case"unread":case"star":case"unstar":return Xd(e,i);case"setup":return Ud(i);case"status":return qd(i);case"remove":return Fd(i);case"create":return Md(i);case"delete":return Ld(i);case"send":return Vd(i);case"webhook":return Zd(i);case"webhook-test":return Qd(i);case"forward":return ec(i);case"work":return Ed(i);case"triage":return Td(i);case"note":return Pd(i);case"notes":return Dd(i);case"activity":return Nd(i);case"changes":return Ad(i);case"coordination":return Od(i);case"presence":return Id(i);case"release-presence":return Rd(i);case"escalate":return Wd(i);case"remind":return Hd(i);case"contacts":return Jd(i);case"contact-add":return Bd(i);case"contact-remove":return Gd(i);case"tone":return Kd(i);case"check":return fo(i.domain||await fe(),!!i.json,i.fields);case"connect":return po(i.domain||await fe(),t||void 0,!!i.json,i.fields);default:u(`Unknown action: ${e}`,{hint:"Actions: list, inbox, folders, archive, trash, restore, read, unread, star, unstar, create, delete, send, forward, webhook, webhook-test, work, triage, notes, note, activity, changes, coordination, presence, release-presence, setup, status, check, connect",code:"validation_error",json:i.json,fields:i.fields})}}function _n(e){let t=e.mailboxIds?.split(",").map(i=>i.trim()).filter(Boolean)[0];return(!t||!e.threadKey)&&u("Mailbox ID and thread key required",{hint:"Pass --mailbox-ids mb_1 --thread-key 'jmap:thread_1'",code:"validation_error",json:e.json,fields:e.fields}),{mailboxId:t,threadKey:e.threadKey}}async function Od(e){let{mailboxId:t,threadKey:i}=_n(e),s=new URLSearchParams({mailbox_id:t,thread_key:i}),n=await x(`/api/email/collaboration/coordination?${s}`),r=await n.json();if(n.ok||u(r.error||"Could not read coordination",{code:r.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(r,e.fields);S("Conversation Coordination"),c("Conversation",r.conversation_id),c("Reply version",String(r.reply_version)),c("Presence",String(r.presence?.length||0)),c("Compose lease",r.compose_lease?.holder?.label||"none")}async function Id(e){let{mailboxId:t,threadKey:i}=_n(e);e.clientId||u("Client ID required",{hint:"Pass a stable --client-id for this agent process or app installation",code:"validation_error",json:e.json,fields:e.fields});let s=e.mode||"viewing";["viewing","composing"].includes(s)||u("Mode must be viewing or composing",{code:"validation_error",json:e.json,fields:e.fields});let n=await x("/api/email/collaboration/coordination",{method:"PUT",body:JSON.stringify({mailbox_id:t,thread_key:i,client_id:e.clientId,mode:s,acquire_lease:e.acquireLease!==!1})}),r=await n.json();if(n.ok||u(r.error||"Could not heartbeat presence",{code:r.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(r,e.fields);S("Conversation Presence"),c("Mode",s),c("Reply version",String(r.reply_version)),c("Lease ID",r.compose_lease?.lease_id||"none"),c("Expires",r.compose_lease?.expires_at||r.presence?.find(o=>o.client_id===e.clientId)?.expires_at||"unknown")}async function Rd(e){let{mailboxId:t,threadKey:i}=_n(e);e.clientId||u("Client ID required",{hint:"Pass the same --client-id used for presence",code:"validation_error",json:e.json,fields:e.fields});let s=await x("/api/email/collaboration/coordination",{method:"DELETE",body:JSON.stringify({mailbox_id:t,thread_key:i,client_id:e.clientId,lease_id:e.leaseId})}),n=await s.json();if(s.ok||u(n.error||"Could not release presence",{code:n.code||"api_error",json:e.json,fields:e.fields}),e.json)return w(n,e.fields);S("Conversation Presence"),c("Released",e.clientId),c("Remaining presence",String(n.presence?.length||0))}async function Ad(e){let t=e.mailboxIds?.split(",").map(r=>r.trim()).filter(Boolean)[0];t||u("Mailbox ID required",{hint:"Usage: domani email changes --mailbox-ids mb_1 [--cursor <opaque>]",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams({mailbox_id:t});e.cursor&&i.set("cursor",e.cursor),e.limit&&i.set("limit",e.limit);let s=await x(`/api/email/changes?${i}`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);if(S("Mailbox Changes"),n.requires_full_sync){c("Full sync","Required"),c("Baseline cursor",n.next_cursor),Xe("Take a bounded mailbox snapshot, then call this command again with --cursor to replay concurrent changes.");return}n.changes.length?Z(["Sequence","Type","Resource","Created"],n.changes.map(r=>[r.sequence,r.type,`${r.resource_type}:${r.resource_id||"-"}`,r.created_at]),[12,32,40,24]):console.log(` ${R.default.dim("No changes since this cursor.")}`),c("Next cursor",n.next_cursor),n.has_more&&Xe("More changes are available; call again with the next cursor.")}async function Ed(e){let t=(e.mailboxIds||"").split(",").map(r=>r.trim()).filter(Boolean);t.length||u("Mailbox IDs required",{hint:"Usage: domani email work --mailbox-ids mb_1,mb_2",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams({mailbox_ids:t.join(",")});e.status&&i.set("status",e.status),e.assigned&&i.set("assigned",e.assigned),e.limit&&i.set("limit",e.limit);let s=await x(`/api/email/work-queue?${i}`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);if(S("Shared Inbox Work"),!n.items.length)return console.log(` ${R.default.dim("No conversations match this queue.")}`);Z(["Thread","Status","Assignee","Subject"],n.items.map(r=>[r.thread_key,r.status,r.assignee?.label||"Unassigned",r.subject||"(no subject)"]),[28,10,28,48]),n.partial&&Xe("This is a bounded snapshot. Increase --limit or use the API scan_limit when you need a wider queue.")}async function Td(e){(!e.mailboxIds||!e.threadKey)&&u("Mailbox ID and thread key required",{hint:"Usage: domani email triage --mailbox-ids mb_1 --thread-key <key> --status closed",code:"validation_error",json:e.json,fields:e.fields});let t=e.assigneeId&&e.assigneeType?{type:e.assigneeType,id:e.assigneeId}:void 0,i=await x("/api/email/collaboration",{method:"PATCH",body:JSON.stringify({mailbox_id:e.mailboxIds.split(",")[0],thread_key:e.threadKey,thread_aliases:e.threadAliases?.split(",").map(n=>n.trim()).filter(Boolean),status:e.status,assignee:t,version:e.ifVersion?Number.parseInt(e.ifVersion,10):void 0})}),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json)return w(s,e.fields);S("Conversation Updated"),c("Status",s.status),c("Assignee",s.assignee?.label||"Unassigned"),c("Version",s.version)}async function Pd(e){(!e.conversationId||!e.note)&&u("Conversation ID and note required",{hint:'Usage: domani email note --conversation-id conv_1 --note "Waiting for finance"',code:"validation_error",json:e.json,fields:e.fields});let t=await x(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/notes`,{method:"POST",body:JSON.stringify({body:e.note})}),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);console.log(`${b.success} Private note added`)}async function Dd(e){e.conversationId||u("Conversation ID required",{hint:"Usage: domani email notes --conversation-id conv_1",code:"validation_error",json:e.json,fields:e.fields});let t=await x(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/notes`),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);if(S("Private Notes"),!i.notes.length)return console.log(` ${R.default.dim("No private notes yet.")}`);Z(["Author","Created","Note"],i.notes.map(s=>[s.author.label,s.created_at,s.body]),[28,24,64])}async function Nd(e){e.conversationId||u("Conversation ID required",{hint:"Usage: domani email activity --conversation-id conv_1",code:"validation_error",json:e.json,fields:e.fields});let t=await x(`/api/email/collaboration/${encodeURIComponent(e.conversationId)}/activity`),i=await t.json();if(t.ok||u(i.error||i.message,{hint:i.hint,status:t.status,json:e.json,fields:e.fields}),e.json)return w(i,e.fields);if(S("Conversation Activity"),!i.activity.length)return console.log(` ${R.default.dim("No activity yet.")}`);Z(["Type","Actor","Created"],i.activity.map(s=>[s.type,s.actor.label,s.created_at]),[36,32,24])}async function Ud(e){let t=await Qe(e);if(e.dryRun)return B("email_setup",{domain:t},e.json,e.fields);let i=C(!e.json);i.start(`Setting up email on ${v.domain(t)}`);let s=await x(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"POST"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Email ${n.status==="already_configured"?"already configured":"configured"}`),e.json){w(n,e.fields);return}if(n.records?.length){d(),S(`Email DNS Records ${v.domain(t)}`);let r=n.records.map(o=>[R.default.yellow(o.type),o.name,o.value.length>40?o.value.slice(0,40)+"...":o.value,o.status==="verified"||o.status==="created"?R.default.green(o.status):R.default.yellow(o.status)]);Z(["Type","Name","Value","Status"],r,[8,28,44,12])}d(),n.hint&&Xe(n.hint),I("Check status:",`domani email status --domain ${t}`),d()}async function qd(e){let t=await Qe(e),i=C(!e.json);i.start(`Checking email status for ${v.domain(t)}`);let s=await x(`/api/domains/${encodeURIComponent(t)}/email/status`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Status loaded`),e.json){w(n,e.fields);return}if(S(`Email ${v.domain(t)}`),c("Enabled",n.enabled?R.default.green("yes"):R.default.dim("no")),n.enabled&&(c("Verified",n.verified?R.default.green("yes"):R.default.yellow("pending")),c("Mailboxes",String(n.mailbox_count))),d(),!n.enabled)I("Set up email:",`domani email setup --domain ${t}`),d();else if(!n.verified&&n.records?.length){console.log(` ${R.default.yellow("!")} Add these DNS records to verify:`);for(let r of n.records)console.log(` ${R.default.yellow(r.type)} ${r.name} ${R.default.dim("\u2192")} ${r.value.length>50?r.value.slice(0,50)+"...":r.value}`);d()}}async function Fd(e){let t=await Qe(e);if(e.dryRun)return B("email_remove",{domain:t},e.json,e.fields);let i=C(!e.json);i.start(`Removing email from ${v.domain(t)}`);let s=await x(`/api/domains/${encodeURIComponent(t)}/email/setup`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Email disabled`),e.json){w(n,e.fields);return}n.mailboxes_deleted>0&&console.log(` ${R.default.dim(`${n.mailboxes_deleted} mailbox(es) deleted.`)}`),d()}async function mo(e){let t=C(!e.json);t.start("Loading mailboxes");let i=e.domain?`?domain=${encodeURIComponent(e.domain)}`:"",s=await x(`/api/emails${i}`),n=await s.json();s.ok||(t.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}));let r=n.mailboxes||[];if(t.stop(`${b.success} ${r.length} mailbox(es)`),e.json){w(n,e.fields);return}if(r.length===0){d(),console.log(` ${R.default.dim("No mailboxes.")}`),d(),I("Create one:","domani email create hello@example.com"),d();return}d(),S("Mailboxes");let o=r.map(a=>[R.default.cyan(a.address),String(a.message_count),a.webhook_url?v.url(a.webhook_url):R.default.dim("-"),R.default.dim(new Date(a.created_at).toLocaleDateString())]);Z(["Address","Messages","Webhook","Created"],o,[32,10,36,14]),d()}async function Md(e){let t=await Qe(e);if(e.dryRun)return B("email_create_mailbox",{domain:t,slug:e.slug,workspace_id:e.workspace},e.json,e.fields);let i=e.slug;if(!i&&!e.json){let f=await Te({message:`Email handle for @${t}:`,placeholder:"hello"});le(f)&&process.exit(0),i=f}i||u("Slug required",{hint:`Usage: domani email create hello@${t}`,code:"validation_error",json:e.json,fields:e.fields});let s=`${i}@${t}`,n=C(!e.json);n.start("Creating mailbox");let r=await x("/api/emails",{method:"POST",body:JSON.stringify({address:s,workspace_id:e.workspace})}),o=await r.json();if(r.status===202&&!e.json){n.stop("");let f=o.txt_record,m=o.email_records||[],g=[{type:"TXT",name:f?.name||"@",value:f?.value||"",note:"ownership proof"},...m];d(),console.log(" Add these records at your DNS provider:"),d();for(let j of g){let O=j.priority!==void 0?` ${R.default.dim(`priority: ${j.priority}`)}`:"",A=j.note?` ${R.default.dim(`(${j.note})`)}`:"";console.log(` ${R.default.yellow(j.type)} ${R.default.bold(j.name)}${O}${A}`),console.log(` ${R.default.dim("\u2192")} ${R.default.cyan(j.value)}`),d()}Xe("DNS propagation typically takes 5\u201330 minutes. Checking automatically..."),d();let y=g.map(j=>({cells:[R.default.yellow(j.type),j.name,j.note?R.default.dim(`(${j.note})`):""],status:"pending"})),k=qt(["Type","Name",""],y,[6,24,16]);k.start();let $=0;for(;r.status===202&&$<60;)await Ut(15e3),$++,r=await x("/api/emails",{method:"POST",body:JSON.stringify({address:s,workspace_id:e.workspace})}),o=await r.json(),r.status!==202&&!r.ok&&(k.stop(),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields}));r.status===202&&(k.stop(),u("TXT record not detected after 15 minutes.",{hint:`Check the record is set, then retry: domani email create ${s}`,code:"timeout",json:e.json,fields:e.fields})),k.markDone(0);let h=j=>`${j.type}:${j.name}`,_=new Map;g.slice(1).forEach((j,O)=>_.set(h(j),O+1));for(let j=0;j<60;j++){await Ut(15e3);let O=await x(`/api/domains/${encodeURIComponent(t)}/email/status`),A=await O.json();if(O.ok&&A.records){for(let L of A.records)if(L.status==="verified"||L.status==="created"){let H=_.get(h(L));H!==void 0&&k.markDone(H)}}if(O.ok&&A.verified)break}k.stop(),d()}if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),n.stop(`${b.success} ${R.default.cyan(o.address)} created`),e.json){w(o,e.fields);return}let a=await x(`/api/domains/${encodeURIComponent(t)}/email/status`),l=await a.json();d(),a.ok&&l.verified?(I("Read inbox:",`domani email inbox ${o.address}`),I("Web inbox:",`${ni}/inbox?address=${encodeURIComponent(o.address)}`)):(I("Check propagation:",`domani email status --domain ${t}`),I("Web inbox:",`${ni}/inbox?address=${encodeURIComponent(o.address)}`)),d()}async function Ld(e){let t=await Qe(e);if(e.slug||u("Slug required",{hint:"Usage: domani email delete hello@example.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_delete_mailbox",{domain:t,address:`${e.slug}@${t}`},e.json,e.fields);let i=C(!e.json);i.start(`Deleting ${e.slug}@${t}`);let s=encodeURIComponent(`${e.slug}@${t}`),n=await x(`/api/emails/${s}`,{method:"DELETE",body:JSON.stringify({confirm:!0})}),r=await n.json();if(n.ok||(i.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Mailbox deleted`),e.json){w(r,e.fields);return}console.log(` ${R.default.dim(`${r.address} and all messages deleted.`)}`),d()}async function Vd(e){let t=await Qe(e);if(e.slug||u("Slug required",{hint:'Usage: domani email send hello@example.com --to user@test.com --subject "Hi" --body "Hello"',code:"validation_error",json:e.json,fields:e.fields}),e.to||u("Recipient required",{hint:"Usage: domani email send hello@example.com --to user@test.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_send",{from:`${e.slug}@${t}`,to:e.to,subject:e.subject},e.json,e.fields);let i=C(!e.json);i.start(`Sending from ${e.slug}@${t}`);let s={to:is(ts(e.to))},n=is(ts(e.cc)),r=is(ts(e.bcc));n&&(s.cc=n),r&&(s.bcc=r),e.subject&&(s.subject=e.subject),e.text&&(s.text=e.text),e.inReplyTo&&(s.in_reply_to=e.inReplyTo),e.references&&(s.references=e.references),e.sendAt&&(s.send_at=e.sendAt);let o=encodeURIComponent(`${e.slug}@${t}`),a=await x(`/api/emails/${o}/send`,{method:"POST",body:JSON.stringify(s)}),l=await a.json();if(!a.ok){i.stop("Failed");let m=l.code==="MONTHLY_LIMIT_EXCEEDED"?`Run ${R.default.cyan("domani upgrade")} to switch to Pro (10,000 emails/month).`:l.hint;u(l.error||l.message,{hint:m,status:a.status,json:e.json,fields:e.fields})}let f=Array.isArray(l.to)?l.to.join(", "):l.to;if(i.stop(l.status==="scheduled"?`${b.success} Scheduled for ${R.default.cyan(e.sendAt||"")} to ${R.default.cyan(f)} ${R.default.dim("(trash the message before then to cancel)")}`:`${b.success} Sent to ${R.default.cyan(f)}`),e.json){w(l,e.fields);return}}function xn(e,t){return(!e.slug||!e.domain)&&u("Mailbox address required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),{domain:e.domain,slug:e.slug,address:`${e.slug}@${e.domain}`}}async function go(e,t,i,s,n){let r=C(!i.json);r.start(s);let o=await x(e,{method:"POST",body:JSON.stringify(t)}),a=await o.json();o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:i.json,fields:i.fields})),r.stop(n(a)),i.json&&w(a,i.fields)}async function Wd(e){let t='Usage: domani email escalate hello@example.com --message-id MSG_ID [--reason "refund over $500"] [--clear]',{address:i}=xn(e,t);e.messageId||u("Message ID required",{hint:t,code:"validation_error",json:e.json,fields:e.fields});let s={};e.reason&&(s.reason=e.reason),e.clear&&(s.clear=!0),await go(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/escalate`,s,e,e.clear?"Clearing escalation":"Flagging for a human",n=>n.needs_human?`${b.success} Flagged for a human ${R.default.dim("(conversation held, email.escalated fired)")}`:`${b.success} Escalation cleared`)}async function Hd(e){let t='Usage: domani email remind hello@example.com --message-id MSG_ID --at 2026-09-03T09:00:00Z [--note "chase the invoice"] [--clear]',{address:i}=xn(e,t);e.messageId||u("Message ID required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),!e.at&&!e.clear&&u("Reminder time required",{hint:t,code:"validation_error",json:e.json,fields:e.fields});let s={};e.at&&(s.remind_at=e.at),e.note&&(s.note=e.note),e.clear&&(s.clear=!0),await go(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/remind`,s,e,e.clear?"Clearing reminder":"Setting follow-up reminder",n=>n.remind_at?`${b.success} Reminder set for ${R.default.cyan(String(n.remind_at))} ${R.default.dim("(fires only if still unanswered)")}`:`${b.success} Reminder cleared`)}async function Jd(e){let t=new URLSearchParams;e.q&&t.set("q",e.q),e.limit&&t.set("limit",e.limit),e.cursor&&t.set("cursor",e.cursor);let i=await x(`/api/contacts${t.size?`?${t}`:""}`),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json){w(s,e.fields);return}let n=s.contacts||[];if(n.length===0){console.log(R.default.dim("No contacts yet. The address book fills itself as mail flows in and out."));return}for(let r of n){let o=r.name?` ${R.default.dim(r.name)}`:"",a=r.notes?` ${R.default.dim("-")} ${r.notes}`:"";console.log(`${R.default.cyan(r.address)}${o} ${R.default.dim(`(${r.message_count} msg${r.message_count!==1?"s":""}, last ${r.last_direction||"-"})`)}${a}`)}s.next_cursor&&console.log(R.default.dim(`More: --cursor ${s.next_cursor}`))}function yo(e,t){return e.slug&&e.domain?`${e.slug}@${e.domain}`:(u("Contact address required",{hint:t,code:"validation_error",json:e.json,fields:e.fields}),"")}async function Bd(e){let i=yo(e,'Usage: domani email contact-add ada@example.com [--name "Ada"] [--notes "prefers short emails"]'),s={address:i};e.name!==void 0&&(s.name=e.name),e.notes!==void 0&&(s.notes=e.notes);let n=await x("/api/contacts",{method:"POST",body:JSON.stringify(s)}),r=await n.json();if(n.ok||u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}),e.json){w(r,e.fields);return}console.log(`${b.success} Contact ${R.default.cyan(i)} saved.`)}async function Gd(e){let i=yo(e,"Usage: domani email contact-remove ada@example.com"),s=await x(`/api/contacts/${encodeURIComponent(i)}`,{method:"DELETE"}),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json){w(n,e.fields);return}console.log(n.deleted?`${b.success} Contact ${R.default.cyan(i)} deleted.`:R.default.dim(`No contact ${i}.`))}async function Kd(e){let t='Usage: domani email tone hello@example.com [--set "lowercase, friendly, sign as Ada"] [--clear]',{address:i}=xn(e,t),s=encodeURIComponent(i);if(e.set===void 0&&!e.clear){let o=await x(`/api/emails/${s}`),a=await o.json();if(o.ok||u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields}),e.json){w({address:i,tone_notes:a.tone_notes??null},e.fields);return}console.log(a.tone_notes?a.tone_notes:R.default.dim(`No tone notes on ${i}. Set them with --set.`));return}let n=await x(`/api/emails/${s}`,{method:"PATCH",body:JSON.stringify({tone_notes:e.clear?null:e.set})}),r=await n.json();if(n.ok||u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}),e.json){w(r,e.fields);return}console.log(e.clear?`${b.success} Tone notes cleared on ${R.default.cyan(i)}.`:`${b.success} Tone notes set on ${R.default.cyan(i)}.`)}async function zd(e){let t=await Qe(e);e.slug||u("Slug required",{hint:"Usage: domani email inbox hello@example.com [--direction in|out] [--limit 20]",code:"validation_error",json:e.json,fields:e.fields});let i=new URLSearchParams;e.direction&&i.set("direction",e.direction),e.folder&&i.set("folder",e.folder),e.view&&i.set("view",e.view),e.limit&&i.set("limit",e.limit);let s=i.toString()?`?${i}`:"",n=C(!e.json);n.start(`Loading messages for ${e.slug}@${t}`);let r=encodeURIComponent(`${e.slug}@${t}`),o=await x(`/api/emails/${r}/messages${s}`),a=await o.json();o.ok||(n.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields}));let l=a.messages||[];if(e.json){n.stop(`${b.success} ${l.length} message(s)`),w(a,e.fields);return}if(l.length===0){n.stop(`${R.default.dim("No messages")}`);return}let f=l.length>1?"s":"";n.stop(`${b.success} ${R.default.cyan(`${e.slug}@${t}`)} ${R.default.dim("\xB7 "+l.length+" message"+f)}`);for(let m of l){let g=m.direction==="in"?R.default.green("in "):R.default.dim("out"),y=m.direction==="in"?m.from:m.to,k=m.subject||"(no subject)",$=R.default.dim(new Date(m.created_at).toLocaleString()),h=k;if(m.text){let _=m.text.replace(/\s+/g," ").trim(),j=_.length>60?_.slice(0,60)+"\u2026":_;h=`${k} ${R.default.dim("- "+j)}`}console.log(` ${g} ${y.padEnd(30)} ${h} ${$}`)}a.next_cursor&&console.log(` ${R.default.dim("\u2026 more available, use --limit to paginate")}`)}async function Yd(e){let t=await Qe(e);e.slug||u("Slug required",{hint:"Usage: domani email folders hello@example.com",code:"validation_error",json:e.json,fields:e.fields});let i=encodeURIComponent(`${e.slug}@${t}`),s=await x(`/api/emails/${i}/folders`),n=await s.json();if(s.ok||u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}),e.json)return w(n,e.fields);S(`Folders for ${e.slug}@${t}`);for(let r of n.folders||[])c(r.id,`${r.total} total, ${r.unread} unread`);for(let r of n.views||[])c(r.id,`${r.total} total, ${r.unread} unread`)}async function Xd(e,t){let i=await Qe(t);t.slug||u("Slug required",{hint:`Usage: domani email ${e} hello@example.com --message-ids id1,id2`,code:"validation_error",json:t.json,fields:t.fields});let s=(t.messageIds||"").split(",").map(m=>m.trim()).filter(Boolean);s.length||u("Message IDs required",{hint:"Pass --message-ids id1,id2",code:"validation_error",json:t.json,fields:t.fields});let n={message_ids:s,idempotency_key:t.idempotencyKey||(0,ho.randomUUID)()};if((e==="archive"||e==="trash")&&Object.assign(n,{action:"move",destination:e==="archive"?"archive":"trash"}),e==="restore"&&(n.action="restore"),(e==="read"||e==="unread")&&Object.assign(n,{action:"mark_read",read:e==="read"}),(e==="star"||e==="unstar")&&Object.assign(n,{action:"star",starred:e==="star"}),t.dryRun)return B("email_messages_action",{address:`${t.slug}@${i}`,...n},t.json,t.fields);let r=encodeURIComponent(`${t.slug}@${i}`),o=await x(`/api/emails/${r}/messages/actions`,{method:"POST",body:JSON.stringify(n)}),a=await o.json();if(!o.ok&&o.status!==207&&u(a.error||a.message,{hint:a.hint,status:o.status,json:t.json,fields:t.fields}),t.json)return w(a,t.fields);let l=(a.results||[]).filter(m=>m.ok).length,f=(a.results||[]).length-l;console.log(`${b.success} ${l} updated${f?R.default.yellow(`, ${f} failed`):""}`),a.operation_id&&(c("Operation",a.operation_id),c("Idempotency key",a.idempotency_key),a.idempotent_replay&&c("Receipt","replayed (no duplicate mutation)"))}async function Zd(e){let t=await Qe(e);e.slug||u("Slug required",{hint:"Usage: domani email webhook hello@example.com --url https://...",code:"validation_error",json:e.json,fields:e.fields});let i=`${e.slug}@${t}`,s=encodeURIComponent(i),n;try{n=Ft(e)}catch(o){u(o instanceof Error?o.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(!e.url&&n!==void 0&&u("--url is required when changing webhook auth headers",{hint:"Pass the existing webhook URL with --authorization-env, --api-key-env, or --clear-headers.",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_webhook",{address:i,webhook_url:e.url||null,...n!==void 0?{header_names:Mt(n)}:{}},e.json,e.fields);let r=C(!e.json);if(e.url){r.start(`Setting webhook for ${i}`);let o=await x(`/api/emails/${s}/webhook`,{method:"PUT",body:JSON.stringify({url:e.url,...n!==void 0?{headers:n}:{}})}),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields})),r.stop(`${b.success} Webhook set`),e.json){w(a,e.fields);return}S(`Mailbox ${a.address}`),c("Webhook",v.url(a.webhook_url)),c("Auth headers",a.header_names?.join(", ")||R.default.dim("none")),c("Signing secret",R.default.dim(a.signing_secret)),d()}else{r.start(`Removing webhook for ${i}`);let o=await x(`/api/emails/${s}/webhook`,{method:"DELETE"}),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:e.json,fields:e.fields})),r.stop(`${b.success} Webhook removed`),e.json){w(a,e.fields);return}S(`Mailbox ${a.address}`),c("Webhook",R.default.dim("none")),d()}}async function Qd(e){let t=await Qe(e);e.slug||u("Slug required",{hint:"Usage: domani email webhook-test hello@example.com",code:"validation_error",json:e.json,fields:e.fields});let i=`${e.slug}@${t}`;if(e.dryRun)return B("email_webhook_test",{address:i},e.json,e.fields);let s=C(!e.json);s.start(`Testing webhook for ${i}`);let n=await x(`/api/emails/${encodeURIComponent(i)}/webhook/test`,{method:"POST"}),r=await n.json();if((!n.ok||!r.success)&&(s.stop("Failed"),u(r.error||r.message||"Webhook test failed",{hint:r.hint||"Check the endpoint and sender authentication, then retry.",status:n.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Test delivered`),e.json)return w(r,e.fields);S(`Mailbox ${i}`),c("Delivery",R.default.green("successful")),typeof r.status=="number"&&c("Endpoint",`HTTP ${r.status}`),d()}async function ec(e){let t=await Qe(e);if(e.slug||u("Slug required",{hint:"Usage: domani email forward hello@example.com --forward-to me@gmail.com",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("email_forward",{address:`${e.slug}@${t}`,forward_to:e.forwardTo||null},e.json,e.fields);let i=C(!e.json),s=e.forwardTo||null;i.start(`Updating forward for ${e.slug}@${t}`);let n=encodeURIComponent(`${e.slug}@${t}`),r=await x(`/api/emails/${n}`,{method:"PATCH",body:JSON.stringify({forward_to:s})}),o=await r.json();if(r.ok||(i.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Forward ${s?"set":"removed"}`),e.json){w(o,e.fields);return}S(`Mailbox ${o.address}`),c("Forward to",o.forward_to?R.default.cyan(o.forward_to):R.default.dim("none")),d()}async function fo(e,t,i){let s=C(!t);s.start(`Checking email health for ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}/email/check`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop("Email health checked"),t){w(r,i);return}if(S(`Email Health ${v.domain(r.domain)}`),r.provider?c("Provider",R.default.cyan(kn(r.provider))):c("Provider",R.default.dim("unknown")),r.mx.configured?c("MX",`${b.success} ${R.default.green("propagated")} ${R.default.dim(`(${r.mx.records.length} record${r.mx.records.length!==1?"s":""})`)}`):c("MX",`${b.error} ${R.default.red("not configured")}`),r.spf.configured?c("SPF",`${b.success} ${R.default.green(r.spf.value)}`):c("SPF",`${b.error} ${R.default.red("missing")}`),r.dmarc.configured){let o=r.dmarc.value.length>50?r.dmarc.value.slice(0,50)+"...":r.dmarc.value;c("DMARC",`${b.success} ${R.default.green(o)}`)}else c("DMARC",`${b.error} ${R.default.red("missing")}`);r.dkim.configured?c("DKIM",`${b.success} ${R.default.green("found")} ${R.default.dim(`(${r.dkim.selectors.join(", ")})`)}`):c("DKIM",`${b.warning} ${R.default.yellow("not found")}`),d(),r.mx.configured?(!r.spf.configured||!r.dmarc.configured)&&(Xe("SPF and DMARC protect against email spoofing. Re-run email setup to add them."),d()):(I("Set up email:",`domani email ${e} google`),d())}async function po(e,t,i,s){return t?wo(e,t,i,s):bo(e,i,s)}async function bo(e,t,i){let s=C(!t);s.start("Loading email providers");let n=await x(`/api/domains/${encodeURIComponent(e)}/connect`),r=await n.json();n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop("Providers loaded");let o=r.providers?.email||[];o.length===0&&u("No email providers available",{code:"not_found",json:t,fields:i});let a=await tt({message:"Choose an email provider",options:o.map(l=>({value:l.name,label:kn(l.name)}))});return le(a)&&process.exit(0),wo(e,a,t,i)}async function wo(e,t,i,s){if(i){let f=await x(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),m=await f.json();f.ok||u(m.error||m.message,{hint:m.hint,status:f.status,json:i,fields:s}),w(m,s);return}let n=await x(`/api/domains/${encodeURIComponent(e)}/connect?provider=${encodeURIComponent(t)}`);if(!n.ok){let f=await n.json();u(f.error||f.message,{hint:f.hint,status:n.status,json:i,fields:s})}let r=await n.json(),o=r.preview?.records??[],a=r.preview?.provider??t,l=kn(a);if(S(`Email ${v.domain(e)}`),c("Provider",R.default.cyan(l)),o.length){d(),console.log(` ${R.default.bold("DNS Records")}`);let f=[8,24,40],m=qt(["Type","Name","Value"],o.map(j=>({cells:Sd(j),status:"pending"})),f);m.start();let g=await x(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),y=await g.json();g.ok||(m.stop(),d(),u(y.error||y.message,{hint:y.hint,status:g.status,json:i,fields:s}));let k=y.records||[];for(let j=0;j<o.length;j++)k.find(A=>A.record.type===o[j].type&&A.record.name===o[j].name&&A.record.value===o[j].value)?.status==="already_set"||await Ut(60),m.markDone(j);await Ut(80),m.stop();let $=k.filter(j=>j.status==="created"||j.status==="updated").length,h=k.filter(j=>j.status==="already_set").length,_;h===k.length?_=`All ${h} records already set`:h>0?_=`${$} created, ${h} already set`:_=`${$} DNS records set`,d(),console.log(` ${b.success} ${R.default.green(`Email configured - ${_}`)}`)}else{let f=C(!0);f.start("Setting DNS records");let m=await x(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),g=await m.json();m.ok||(f.stop("Failed"),u(g.error||g.message,{hint:g.hint,status:m.status,json:i,fields:s})),f.stop(`${b.success} Email configured via ${R.default.cyan(l)}`)}d(),I("Verify propagation:",`domani email ${e} --check`),d()}var R,ho,xd,jd,jn=Ae(()=>{"use strict";G();ri();R=D(M(),1);Ne();V();ge();Ze();ho=require("node:crypto");es();xd=["setup","status","remove","list","create","delete","send","inbox","folders","archive","trash","restore","read","unread","star","unstar","webhook","forward","check","connect","work","triage","notes","note","activity","changes","coordination","presence","release-presence","escalate","remind","contacts","contact-add","contact-remove","tone"],jd={"google-workspace":"Google Workspace",fastmail:"Fastmail",proton:"Proton Mail"}});var $o={};Ht($o,{dns:()=>Cn});async function Cn(e,t,i,s,n,r){e||(e=await fe()),z(e,r);let o=r?.json??!1,a=r?.type||i,l=r?.name||s,f=r?.value||n;if(!t||t==="get"){let m=C(!o);m.start(`Loading DNS for ${v.domain(e)}`);let g=await x(`/api/domains/${encodeURIComponent(e)}/dns`),y=await g.json();if(g.ok||(m.stop("Failed"),u(y.error||y.message,{hint:y.hint,status:g.status,json:o,fields:r?.fields})),m.stop(`${y.records.length} record(s)`),o){w(y,r?.fields);return}if(y.records.length===0){d(),console.log(` ${Ce.default.dim(`No DNS records for ${e}`)}`),d(),I("Auto-configure DNS:",`domani connect ${e}`),d();return}let k=[8,24,40,8];S(`DNS ${v.domain(e)}`,k.reduce((h,_)=>h+_,0)+k.length-1);let $=y.records.map(h=>{let _=h.priority?Ce.default.dim(` pri=${h.priority}`):"";return[Ce.default.yellow(h.type),h.name,Ce.default.cyan(h.value)+_,Ce.default.dim(String(h.ttl))]});Z(["Type","Name","Value","TTL"],$,k),d();return}if(t==="set"){if((!a||!l||!f)&&u("Missing arguments for dns set",{hint:"Usage: domani dns <domain> set --type A --name www --value 1.2.3.4",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return B("dns_set",{domain:e,record:{type:a.toUpperCase(),name:l,value:f,ttl:3600}},o,r?.fields);let m=C(!o);m.start(`Setting ${Ce.default.yellow(a.toUpperCase())} record`);let g=await x(`/api/domains/${encodeURIComponent(e)}/dns`),y=await g.json(),$=(g.ok?y.records:[]).filter(j=>!(j.type===a.toUpperCase()&&j.name===l));$.push({type:a.toUpperCase(),name:l,value:f,ttl:3600});let h=await x(`/api/domains/${encodeURIComponent(e)}/dns`,{method:"PUT",body:JSON.stringify({records:$})}),_=await h.json();h.ok||(m.stop("Failed"),u(_.error||_.message,{hint:_.hint,status:h.status,json:o,fields:r?.fields})),m.stop(`${b.success} ${Ce.default.yellow(a.toUpperCase())} ${l} ${b.arrow} ${Ce.default.cyan(f)}`),o?w(_,r?.fields):(d(),I("Check propagation:",`domani status ${e}`),d());return}if(t==="delete"){if((!a||!l)&&u("Missing arguments for dns delete",{hint:"Usage: domani dns <domain> delete --type A --name www",code:"validation_error",json:o,fields:r?.fields}),r?.dryRun)return B("dns_delete",{domain:e,record:{type:a.toUpperCase(),name:l}},o,r?.fields);let m=C(!o);m.start(`Deleting ${Ce.default.yellow(a.toUpperCase())} ${l}`);let g=await x(`/api/domains/${encodeURIComponent(e)}/dns?type=${encodeURIComponent(a.toUpperCase())}&name=${encodeURIComponent(l)}`,{method:"DELETE"}),y=await g.json();g.ok||(m.stop("Failed"),u(y.error||y.message,{hint:y.hint,status:g.status,json:o,fields:r?.fields})),m.stop(`${b.success} Deleted ${Ce.default.yellow(a.toUpperCase())} ${l}`),o?w(y,r?.fields):(d(),I("Check propagation:",`domani status ${e}`),d());return}if(t==="snapshot"){if(r?.dryRun)return B("dns_snapshot",{domain:e},o,r?.fields);let m=C(!o);m.start(`Capturing DNS snapshot for ${v.domain(e)}`);let g=await x(`/api/domains/${encodeURIComponent(e)}/dns/snapshot`,{method:"POST"}),y=await g.json();g.ok||(m.stop("Failed"),u(y.error||y.message,{hint:y.hint,status:g.status,json:o,fields:r?.fields}));let k=y.records?.length??0;if(m.stop(`${b.success} Captured ${k} record(s)`),o){w(y,r?.fields);return}let $=`${e}.dns.json`,h=(0,Sn.resolve)(process.cwd(),$);(0,ss.writeFileSync)(h,JSON.stringify(y,null,2)+`
179
+ `),S("DNS Snapshot"),c("Domain",v.domain(y.domain)),c("Records",String(k)),c("Subdomains",String(y.subdomains?.length??0)),c("Sources",(y.sources||[]).join(", ")||"none"),c("Captured",y.capturedAt||y.captured_at||"now"),c("Saved to",Ce.default.cyan($)),d(),I("Restore from this snapshot:",`domani dns ${e} restore --file ${$}`),d();return}if(t==="restore"){if(r?.dryRun)return B("dns_restore",{domain:e,source:r?.file||"server_backup"},o,r?.fields);let m=C(!o),g;if(r?.file){let $=(0,Sn.resolve)(process.cwd(),r.file);$.startsWith(process.cwd())||u("File path must be within the current directory",{hint:`Got: ${r.file}`,code:"validation_error",json:o,fields:r?.fields});try{let h=(0,ss.readFileSync)($,"utf-8"),_=JSON.parse(h);g=JSON.stringify({snapshot:_}),m.start(`Restoring DNS for ${v.domain(e)} from ${Ce.default.cyan(r.file)}`)}catch(h){u(`Failed to read snapshot file: ${h instanceof Error?h.message:"unknown"}`,{hint:`Make sure ${r.file} exists and contains valid JSON.`,code:"validation_error",json:o,fields:r?.fields})}}else m.start(`Restoring DNS for ${v.domain(e)} from server backup`);let y=await x(`/api/domains/${encodeURIComponent(e)}/dns/restore`,{method:"POST",...g?{body:g}:{}}),k=await y.json();if(y.ok||(m.stop("Failed"),u(k.error||k.message,{hint:k.hint,status:y.status,json:o,fields:r?.fields})),m.stop(`${b.success} Restored DNS`),o){w(k,r?.fields);return}if(S("DNS Restored"),c("Domain",v.domain(k.domain)),c("Applied",Ce.default.green(String(k.applied??0))),c("Skipped",Ce.default.dim(String(k.skipped??0))),k.errors?.length>0){c("Errors",Ce.default.red(String(k.errors.length)));for(let $ of k.errors)console.log(` ${Ce.default.red("\u2022")} ${$}`)}d(),I("Verify DNS records:",`domani dns ${e}`),d();return}u(`Unknown action: ${t}`,{hint:"Use 'get', 'set', 'delete', 'snapshot', or 'restore'.",code:"validation_error",json:o,fields:r?.fields})}var Ce,ss,Sn,On=Ae(()=>{"use strict";G();Ce=D(M(),1);V();ge();Ze();ss=require("node:fs"),Sn=require("node:path")});var ko={};Ht(ko,{status:()=>In});function tc(e){return[it.default.yellow(e.type),e.name,it.default.cyan(e.value)+(e.priority?it.default.dim(` pri=${e.priority}`):"")]}function ic(e){if(S(`Status ${v.domain(e.domain)}`),e.expires){let t=new Date(e.expires).toLocaleDateString(),i=e.days_until_expiry,s=i!=null&&i<30?it.default.red:i!=null&&i<90?it.default.yellow:it.default.green;c("Expires",`${t} ${it.default.dim("(")}${s(`${i} days`)}${it.default.dim(")")}`)}}async function In(e,t){if(e||(e=await fe()),z(e,t),t.json){let g=await x(`/api/domains/${encodeURIComponent(e)}/status`),y=await g.json();g.ok||u(y.error||y.message,{hint:y.hint,status:g.status,json:t.json,fields:t.fields}),w(y,t.fields);return}let i=C(!0);i.start(`Checking ${v.domain(e)}`);let s;try{s=await x(`/api/domains/${encodeURIComponent(e)}/status`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(t.timeout?parseInt(t.timeout,10)*1e3:3e4)})}catch{i.stop("Failed"),u("Request timed out",{hint:"The status check took too long. Try again.",code:"timeout",json:t.json,fields:t.fields})}if(!s.ok){i.stop("Failed");try{let g=await s.json();u(g.error||g.message,{hint:g.hint,status:s.status,json:t.json,fields:t.fields})}catch{u(`Server error (${s.status})`,{status:s.status,json:t.json,fields:t.fields})}}let n=s.body;n||(i.stop("Failed"),u("Empty response"));let r=new TextDecoder,o="",a=null,l=[],f=!1,m="";try{for await(let g of n){o+=r.decode(g,{stream:!0});let y=o.split(`
180
+ `);o=y.pop()??"";for(let k of y)if(k.startsWith("event: "))m=k.slice(7);else if(k.startsWith("data: ")){let $=JSON.parse(k.slice(6));if(m==="info"&&(i.stop("Status retrieved"),f=!0,ic($)),m==="records")if(l=$,l.length>0){d(),console.log(` ${it.default.bold("DNS Records")}`);let h=[8,10,34];a=qt(["Type","Name","Value"],l.map(_=>({cells:tc(_),status:"pending"})),h),a.start()}else d(),c("DNS",it.default.dim("no records")),I("Auto-configure DNS:",`domani connect ${e}`);if(m==="propagation"&&a){let{index:h,propagated:_}=$,j=_?b.success:`${b.warning}`;a.markDone(h,j)}m==="done"&&a&&a.stop(),m==="error"&&(f||i.stop("Failed"),a&&a.stop(),u($.message||"Status check failed"))}}}catch{f||i.stop("Failed"),a&&a.stop(),u("Connection lost",{hint:"The status check was interrupted. Try again.",code:"connection_lost",json:t.json,fields:t.fields})}f||i.stop("Done"),d()}var it,Rn=Ae(()=>{"use strict";G();it=D(M(),1);V();ge();Ze()});var pi={};Ht(pi,{buy:()=>En});async function An(e){let t=await tt({message:`What's next for ${Ue.default.cyan(e)}?`,options:[{value:"connect",label:"Connect to a service",hint:"domani connect"},{value:"email",label:"Set up email",hint:"domani email setup"},{value:"dns",label:"Configure DNS",hint:"domani dns"},{value:"status",label:"Check status & DNS propagation",hint:"domani status"},{value:"done",label:"Done"}]});if(le(t)||t==="done"){d();return}if(d(),t==="connect"){let{connect:i}=await Promise.resolve().then(()=>($n(),uo));await i(e,void 0,{})}else if(t==="email"){let i=await Te({message:`Mailbox name for ${Ue.default.cyan(e)}`,placeholder:"e.g. hey, hello, contact"});if(le(i)||!i){d();return}d();let{email:s}=await Promise.resolve().then(()=>(jn(),vo));await s("create",void 0,{domain:e,slug:i})}else if(t==="dns"){let{dns:i}=await Promise.resolve().then(()=>(On(),$o));await i(e)}else if(t==="status"){let{status:i}=await Promise.resolve().then(()=>(Rn(),ko));await i(e,{})}}async function sc(e,t){z(e,t);let i;if(t.preChecked)i={available:!0,...t.preChecked};else{let m=C(!t.json);m.start(`Checking ${v.domain(e)}`);let g=await x(`/api/domains/search?q=${encodeURIComponent(e)}`);i=await g.json(),g.ok||(m.stop("Search failed"),u(i.error,{hint:i.hint,status:g.status,json:t.json,fields:t.fields})),i.available||(m.stop(`${b.error} ${v.domain(e)} is not available`),u(`${e} is not available`,{code:"not_available",json:t.json,fields:t.fields})),m.stop(`${b.success} ${v.domain(e)} ${b.dot} available ${b.dot} ${v.price(i.price)}/yr`)}if(t.dryRun)return B("buy",{domain:e,available:!0,price:i.price,currency:i.currency||"USD"},t.json,t.fields);if(!Nt(t)){let m=await Ye({message:`Purchase ${Ue.default.bold(e)} for ${v.price(i.price)}/yr?`});if(!m||typeof m=="symbol"){console.log(` ${Ue.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start("Purchasing");let n=await x("/api/domains/buy",{method:"POST",headers:{Accept:"text/event-stream"},body:JSON.stringify({domain:e})});if(!n.ok||!n.body){s.stop("Purchase failed");let m=await n.json().catch(()=>({}));u(m.error||m.message,{hint:m.hint,fixUrl:m.setup_url||m.payment_options?.card?.setup_url,status:n.status,json:t.json,fields:t.fields})}let r={},o=new TextDecoder,a="",l="";for await(let m of n.body){a+=o.decode(m,{stream:!0});let g=a.split(`
181
+ `);a=g.pop()??"";for(let y of g)if(y.startsWith("event: "))l=y.slice(7).trim();else if(y.startsWith("data: ")){let k=JSON.parse(y.slice(6));l==="checking"?s.message(`Checking ${v.domain(k.domain)}`):l==="payment"?s.message(`Charging ${v.price(k.total)}`):l==="registering"?s.message(`Registering ${v.domain(k.domain)}`):l==="registered"?r=k:l==="error"&&(s.stop("Purchase failed"),u(k.error,{hint:k.hint,fixUrl:k.setup_url,status:n.status,json:t.json,fields:t.fields}))}}let f=r.expires?Ue.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(s.stop(`${b.success} ${v.domain(r.domain)} is yours!${f}`),t.json){w(r,t.fields);return}Se?await An(r.domain):(I("Connect to a service:",`domani connect ${r.domain}`),I("Set up email:",`domani email setup ${r.domain}`),I("Configure DNS:",`domani dns ${r.domain}`),d())}async function nc(e,t){lo(e,t);let i=!!t.json,s=C(!i);s.start(`Checking ${e.length} domains`);let n=await Promise.all(e.map(async h=>{try{let _=await x(`/api/domains/search?q=${encodeURIComponent(h)}`),j=await _.json();return{domain:h,available:_.ok&&j.available,price:j.price}}catch{return{domain:h,available:!1,price:void 0}}})),r=n.filter(h=>h.available),o=n.filter(h=>!h.available);r.length===0&&(s.stop(`${b.error} None of the ${e.length} domains are available`),process.exit(1));let a=r.reduce((h,_)=>h+(_.price||0),0);if(s.stop(`${b.success} ${r.length}/${e.length} available ${b.dot} ${v.price(a.toFixed(2))} total`),o.length>0)for(let h of o)console.log(` ${b.error} ${v.domain(h.domain)} ${Ue.default.dim("not available")}`);if(t.dryRun)return B("buy_bulk",{domains:r.map(h=>({domain:h.domain,price:h.price})),unavailable:o.map(h=>h.domain),total_price:parseFloat(a.toFixed(2))},t.json,t.fields);if(!Nt(t)){let h=await Ye({message:`Purchase ${Ue.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${v.price(a.toFixed(2))}?`});if(!h||typeof h=="symbol"){console.log(` ${Ue.default.dim("Cancelled.")}`);return}}d();let l=r.map(h=>({cells:[v.domain(h.domain),h.price?`${v.price(h.price.toFixed(2))}/yr`:""],status:"pending"})),f=qt(["Domain","Price"],l,[30,12],!i);f.start();let g=await(await x("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(h=>h.domain)})})).json(),y=new Set((g.results||[]).map(h=>h.domain));for(let h=0;h<r.length;h++){let _=r[h].domain.toLowerCase().trim();y.has(_)?f.markDone(h,b.success):f.markDone(h,b.error)}if(f.stop(),i){w(g,t.fields);return}d();let k=g.summary?.succeeded??0,$=g.summary?.failed??0;if(k>0&&console.log(` ${b.success} ${Ue.default.green(`${k} domain${k>1?"s":""} registered`)}`),$>0){console.log(` ${b.error} ${Ue.default.red(`${$} failed`)}`);for(let h of g.errors||[])console.log(` ${Ue.default.dim("\u2500")} ${v.domain(h.domain)}: ${Ue.default.dim(h.error)}${h.hint?` ${Ue.default.dim(`(${h.hint})`)}`:""}`)}if(d(),k>0&&Se){let h=(g.results||[]).filter(_=>_.success).map(_=>_.domain);if(h.length===1)await An(h[0]);else{let _=await tt({message:"Set up one of your new domains?",options:[...h.map(j=>({value:j,label:Ue.default.cyan(j)})),{value:"done",label:"Done"}]});!le(_)&&_!=="done"?(d(),await An(_)):d()}}else k>0&&(I("Connect to a service:","domani connect <domain>"),I("Set up email:","domani email setup <domain>"),d())}async function En(e,t){let i=e.filter(Boolean);if(i.length===0){Se||u("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:t.json});let s=await Te({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(le(s)||!s)&&process.exit(0),i=s.split(/\s+/).filter(Boolean)}return i.length===1?sc(i[0],t):nc(i,t)}var Ue,ei=Ae(()=>{"use strict";G();Ne();Ue=D(M(),1);V();ge()});var Zn=D(Xn(),1),{program:fu,createCommand:pu,createArgument:hu,createOption:gu,CommanderError:yu,InvalidArgumentError:bu,InvalidOptionArgumentError:wu,Command:Qn,Argument:vu,Option:$u,Help:ku}=Zn.default;var ut=D(M(),1);gt();yn();V();ri();gt();var at=D(M(),1);V();var cd=new Set(["cli","mcp","plugin","skill","api"]);function ud(e){let t=e.scopes?.split(",").map(o=>o.trim()).filter(Boolean),i=e.mailboxes?.split(",").map(o=>o.trim().toLowerCase()).filter(Boolean),s=!!(t?.length||i?.length||e.label||e.expiresIn),n=e.surface||"cli";if(!cd.has(n))throw new RangeError("--surface must be one of: cli, mcp, plugin, skill, api");let r=e.expiresIn===void 0?void 0:Number(e.expiresIn);if(r!==void 0&&(!Number.isInteger(r)||r<3600||r>31536e3))throw new RangeError("--expires-in must be an integer between 3600 and 31536000 seconds");return{delegated:s,body:{...t?.length?{scopes:t}:{},...i?.length?{mailboxes:i}:{},...e.label?{label:e.label}:{},...r!==void 0?{expires_in:r}:{},surface:n,intent:"programmatic_access"}}}async function to(e){let t=Le(),i=C(!e.json),s;try{s=ud(e)}catch(k){u(k instanceof Error?k.message:"Invalid login options",{code:"invalid_expires_in",json:e.json})}let{body:n,delegated:r}=s,o=ht(),a=Ve();if(a&&!r){i.start("Checking session");try{let k=await fetch(`${t}/api/me`,{headers:{Authorization:`Bearer ${a}`}});if(k.ok){let $=await k.json();i.stop(`Already logged in as ${at.default.bold($.email)}`),e.json&&w({status:"already_logged_in",email:$.email});return}}catch{}i.stop("Session expired, re-authenticating"),d()}i.start("Requesting auth code");let l=await fetch(`${t}/api/auth/cli`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n)});if(!l.ok){i.stop("Failed to initiate login");try{let k=await l.json();u(k.error||k.message||`Server error (${l.status})`,{hint:k.hint,code:"login_failed",json:e.json})}catch{u(`Could not reach ${t}. Check your connection and try again.`,{code:"network_error",json:e.json})}}let{code:f,auth_url:m,expires_in:g}=await l.json();if(i.stop("Auth code received"),e.json){w({status:"awaiting_approval",code:f,auth_url:m,expires_in:g});return}d(),console.log(` ${at.default.dim("Verification code:")} ${at.default.bold(at.default.cyan(f))}`),e.open!==!1?(console.log(` ${at.default.dim("Opening browser")} ${b.arrow} ${v.url(m)}`),Je(m)):console.log(` ${at.default.dim("Open this URL to approve:")} ${v.url(m)}`),d(),i.start("Waiting for approval");let y=120;for(let k=0;k<y;k++){await new Promise(_=>setTimeout(_,5e3));let $=await fetch(`${t}/api/auth/cli/poll?code=${f}`);!$.ok&&$.status!==202&&(i.stop("Login failed"),u(`Server error (${$.status})`,{code:"login_failed"}));let h=await $.json();if(h.status==="complete"){zt({...ht(),token:h.token,email:h.email,api_url:t}),i.stop(`Logged in as ${at.default.bold(h.email)}`),d(),console.log(` ${at.default.bold("Get one real result:")}`),I("1. Create your free inbox:","domani email create YOUR_HANDLE@domani.run"),I("2. Connect your webhook:","domani email webhook YOUR_HANDLE@domani.run --url https://YOUR_AGENT/webhook"),I("3. Prove delivery:","domani email webhook-test YOUR_HANDLE@domani.run"),console.log(` ${at.default.dim("A custom domain can wait until this loop works.")}`),d();return}h.error&&(i.stop("Login failed"),u(h.error||h.message,{hint:h.hint,code:"login_failed"}))}i.stop("Login timed out"),u("No approval received within 10 minutes",{hint:"Run 'domani login' to try again",code:"timeout"})}gt();var bn=D(M(),1);V();async function io(e){let t=ht();if(!t.token){e.json?w({status:"not_logged_in"}):console.log(` ${bn.default.dim("Not logged in.")}`);return}let{api_url:i}=t;mr(),i&&zt({api_url:i}),e.json?w({status:"logged_out",email:t.email||null}):console.log(` ${b.success} Logged out${t.email?` ${bn.default.dim(`(${t.email})`)}`:""}`)}G();var mi=D(M(),1);V();async function no(e){let[t,i]=await Promise.all([x("/api/me"),x("/api/me/activation")]),s=await t.json();t.ok||u(s.error||s.message,{hint:s.hint,status:t.status,json:e.json,fields:e.fields});let n=i.ok?await i.json():null;if(e.json){w({...s,activation:n},e.fields);return}if(S("Account"),c("Email",mi.default.bold(s.email)),c("Payment",s.has_payment_method?`${b.success} ${mi.default.green("active")}`:`${b.error} ${mi.default.dim("none")}`),c("Domains",String(s.domain_count)),c("API tokens",String(s.token_count)),c("Referral code",s.referral_code||mi.default.dim("-")),c("Created",new Date(s.created_at).toLocaleDateString()),n){c("Activation",n.status);let r=n.recommended_actions?.[0];r&&c("Next action",r.label)}d()}G();Ne();var N=D(M(),1);V();ge();var Be=10,ti=200,ns=["com","io","ai","dev","app","co","net","org","xyz","sh","me","cc","tech","run","cloud","so","gg","fm","tv","pro","one","inc","ltd","llc","biz","group","global","ventures","capital","fund","agency","store","shop","market","sale","deals","auction","trade","studio","design","art","space","style","fashion","luxury","brand","media","digital","site","online","live","show","world","zone","land","place","city","town","blog","news","social","chat","link","page","fun","lol","meme","wtf","tools","build","works","work","team","solutions","services","systems","network","software","music","video","photo","photos","game","games","club","stream","film","movie","pizza","coffee","beer","bar","pub","restaurant","cafe","kitchen","food","wine","health","care","clinic","dental","fitness","yoga","bio","life","lifestyle","finance","money","legal","law","cash","academy","university","education","training","courses","science","wiki","guide","us","uk","eu","ca","au","de","fr","it","es","nl","jp","sg","nz","mx","house","homes","realty","estate","garden","nyc","london","berlin","paris","guru","ninja","rocks","fail","party","vip","gold","black","pink","red","events","travel","sport","jobs","careers","consulting","energy","eco","green","support","help","info","new","now","today","day"],rs=null;async function _o(){if(rs)return rs;try{let e=await be("/api/tlds?sort=price&order=asc&limit=1000");if(e.ok){let i=(await e.json()).tlds.map(s=>s.tld);if(i.length>0){let s=new Set(ns),n=new Set(i),r=[...ns.filter(o=>n.has(o)),...i.filter(o=>!s.has(o))];return rs=r,r}}}catch{}return rs=ns,ns}async function rc(e,t,i,s,n){let r=[],o=[],a=Be,l=0,f=!0,m=0,g=0,y=!1,k=!1,$=null,h="",_=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],j=0,O=setInterval(()=>{k||!f||(j=(j+1)%_.length,T())},80);function A(){m>0&&(process.stdout.write(`\x1B[${m}A\x1B[0J`),m=0)}function L(){if(f)return[];let F=Be+g*Be;return r.length>a||s&&F<n.length?["more","new","skip"]:["new","skip"]}function H(){return r.slice(0,a)}function te(){let F=L();return Math.max(0,H().length+F.length-1)}let P=6;function T(){A();let F=[],X=H(),ee=!f&&X.length===0&&o.length>0,K=ee?o.slice(0,P):X,Re=K.reduce((de,ae)=>Math.max(de,ae.domain.length),0),Ke=L();for(let de=0;de<K.length;de++){let ae=K[de];if(ee)F.push(`${N.default.dim("\u2502")} ${N.default.dim("\u2715")} ${N.default.dim(ae.domain.padEnd(Re))} ${N.default.dim("taken")}`);else{let _e=de===l,mt=_e?N.default.green("\u25CF"):N.default.dim("\u25CB"),ie=ae.domain.padEnd(Re),nt=_e?N.default.bold(N.default.cyan(ie)):ie,kt=ae.for_sale?N.default.cyan(`$${ae.for_sale.price} (for sale)`):N.default.dim(`$${ae.price}/yr`);F.push(`${N.default.dim("\u2502")} ${mt} ${nt} ${kt}`)}}if(ee&&o.length>P&&F.push(`${N.default.dim("\u2502")} ${N.default.dim(`\u2026 and ${o.length-P} more taken`)}`),f){let de=h?N.default.dim(`checking ${h}\u2026`):N.default.dim("searching\u2026");F.push(`${N.default.dim("\u2502")} ${N.default.cyan(_[j])} ${de}`)}else{let de=Be+g*Be;s&&de>=n.length&&F.push(`${N.default.dim("\u2502")} ${N.default.dim(`All ${Math.min(de,n.length)} TLDs searched`)}`);for(let _e=0;_e<Ke.length;_e++){let nt=H().length+_e===l?N.default.green("\u25CF"):N.default.dim("\u25CB"),kt=Ke[_e]==="more"?N.default.dim("More \u2192"):Ke[_e]==="new"?N.default.dim("New search \u2192"):N.default.dim("Skip");F.push(`${N.default.dim("\u2502")} ${nt} ${kt}`)}F.push(N.default.dim("\u2514"))}process.stdout.write(F.join(`
182
182
  `)+`
183
- `),f=F.length}process.stdout.write(`${N.default.cyan("\u25C6")} Register a domain?
184
- `),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let U=F=>{let X=F.toString();if(X==="\x1B[A")l=Math.max(0,l-1),T();else if(X==="\x1B[B")l=Math.min(ee(),l+1),T();else if(X==="\r"){let Q=H();if(m&&Q.length===0)return;if(l<Q.length)v=Q[l]?.domain??null,k=!0;else{let Oe=M()[l-Q.length];Oe==="more"?(a+=He,r.length<a?b=!0:(l=Math.min(l,ee()),T())):(Oe==="new"&&(v="__new__"),k=!0)}}else(X===""||X==="\x1B")&&(k=!0)};process.stdin.on("data",U),T();async function Z(F){let X=new TextDecoder,Q="",G="";for await(let Oe of F){if(k)break;Q+=X.decode(Oe,{stream:!0});let Be=Q.split(`
185
- `);Q=Be.pop()??"";for(let de of Be)if(de.startsWith("event: "))G=de.slice(7);else if(de.startsWith("data: ")){let ae=JSON.parse(de.slice(6));if(G==="error"&&(process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdout.write("\x1B[?25h"),u(ae.message||ae.error||"Search failed",{code:ae.code||"error"})),G==="result"&&(h=ae.domain),G==="result"&&(ae.available||ae.for_sale||i)){if(g===0){let ve=r.findIndex(dt=>dt.price>ae.price);ve===-1?r.push(ae):(r.splice(ve,0,ae),ve<=l&&l++)}else r.push(ae);T()}else if(G==="result"&&!ae.available&&!ae.error)o.length<8&&o.push(ae);else if(G==="done"){m=!1,l=Math.min(l,ee());let ve=He+g*He;r.length<a&&s&&ve<n.length&&(b=!0),b||T()}}}m=!1}for(await Z(e);!k;)if(await new Promise(F=>{let X=setInterval(()=>{(k||b)&&(clearInterval(X),F())},16)}),b&&!k){b=!1;let F=He+g*He,X=n.slice(F,F+He);g++,m=!0,l=Math.min(l,Math.max(0,r.length-1)),T();let Q=new URLSearchParams;Q.set("domains",X.map(G=>`${t}.${G}`).join(","));try{let G=await be(`/api/domains/search?${Q}`,{headers:{Accept:"text/event-stream"}});G.ok&&G.body?await Z(G.body):(m=!1,T())}catch{m=!1,T()}}clearInterval(O),process.stdin.removeListener("data",U),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?25h"),A();let Y=v==="__new__",q=Y?null:v,ie=q?r.find(F=>F.domain===q)??null:null;return q?process.stdout.write(`${N.default.dim("\u25C7")} Register a domain?
183
+ `),m=F.length}process.stdout.write(`${N.default.cyan("\u25C6")} Register a domain?
184
+ `),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let U=F=>{let X=F.toString();if(X==="\x1B[A")l=Math.max(0,l-1),T();else if(X==="\x1B[B")l=Math.min(te(),l+1),T();else if(X==="\r"){let ee=H();if(f&&ee.length===0)return;if(l<ee.length)$=ee[l]?.domain??null,k=!0;else{let Re=L()[l-ee.length];Re==="more"?(a+=Be,r.length<a?y=!0:(l=Math.min(l,te()),T())):(Re==="new"&&($="__new__"),k=!0)}}else(X===""||X==="\x1B")&&(k=!0)};process.stdin.on("data",U),T();async function Q(F){let X=new TextDecoder,ee="",K="";for await(let Re of F){if(k)break;ee+=X.decode(Re,{stream:!0});let Ke=ee.split(`
185
+ `);ee=Ke.pop()??"";for(let de of Ke)if(de.startsWith("event: "))K=de.slice(7);else if(de.startsWith("data: ")){let ae=JSON.parse(de.slice(6));if(K==="error"&&(process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdout.write("\x1B[?25h"),u(ae.message||ae.error||"Search failed",{code:ae.code||"error"})),K==="result"&&(h=ae.domain),K==="result"&&(ae.available||ae.for_sale||i)){if(g===0){let _e=r.findIndex(mt=>mt.price>ae.price);_e===-1?r.push(ae):(r.splice(_e,0,ae),_e<=l&&l++)}else r.push(ae);T()}else if(K==="result"&&!ae.available&&!ae.error)o.length<8&&o.push(ae);else if(K==="done"){f=!1,l=Math.min(l,te());let _e=Be+g*Be;r.length<a&&s&&_e<n.length&&(y=!0),y||T()}}}f=!1}for(await Q(e);!k;)if(await new Promise(F=>{let X=setInterval(()=>{(k||y)&&(clearInterval(X),F())},16)}),y&&!k){y=!1;let F=Be+g*Be,X=n.slice(F,F+Be);g++,f=!0,l=Math.min(l,Math.max(0,r.length-1)),T();let ee=new URLSearchParams;ee.set("domains",X.map(K=>`${t}.${K}`).join(","));try{let K=await be(`/api/domains/search?${ee}`,{headers:{Accept:"text/event-stream"}});K.ok&&K.body?await Q(K.body):(f=!1,T())}catch{f=!1,T()}}clearInterval(O),process.stdin.removeListener("data",U),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?25h"),A();let Y=$==="__new__",q=Y?null:$,se=q?r.find(F=>F.domain===q)??null:null;return q?process.stdout.write(`${N.default.dim("\u25C7")} Register a domain?
186
186
  ${N.default.dim("\u2502")} ${N.default.bold(N.default.cyan(q))}
187
187
  ${N.default.dim("\u2514")}
188
188
  `):process.stdout.write(`${N.default.dim("\u2514")}
189
- `),{chosen:q,chosenResult:ie,searchAgain:Y,allTaken:r.length===0&&o.length>0,expanded:g>0}}async function wo(e,t,i){if(!e){je||u("Missing required argument: domain",{hint:"Usage: domani search <domain> [tlds...]",code:"missing_argument",json:i.json});let U=await Ae({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});(le(U)||!U)&&process.exit(0),e=U}let s=t.map(U=>U.replace(/^\./,"")),n=i.tlds?.split(",").map(U=>U.trim())||[],r=[...new Set([...s,...n])];if(r.length>0&&Yi(r,i),z(e,i),e.includes(".")&&r.length===0){let U=C(!i.json);U.start(`Checking ${$.domain(e)}`);let[Z,Y]=await Promise.all([be(`/api/domains/search?q=${encodeURIComponent(e)}`),be(`/api/domains/${encodeURIComponent(e)}/og`).catch(()=>null)]),q=await Z.json();if(Z.ok||(U.stop("Search failed"),u(q.error||q.message,{hint:q.hint,status:Z.status,json:i.json,fields:i.fields})),i.json){let ie=q.domain.split(".")[0];w({name:ie,results:[q],total:1,available:q.available?1:0},i.fields);return}if(q.available)if(U.stop(`${y.success} ${$.domain(q.domain)} ${y.dot} available ${y.dot} ${$.price(q.price)}/yr`),je&&!i.json){let{buy:ie}=await Promise.resolve().then(()=>(Zt(),mi));await ie([q.domain],{preChecked:{price:q.price,currency:q.currency}})}else d(),I("Register it:",`domani buy ${q.domain}`),d();else if(q.for_sale?.buyable)if(U.stop(`${y.info} ${$.domain(q.domain)} ${y.dot} ${N.default.cyan("for sale")} ${y.dot} ${$.price(q.for_sale.price)}`),je&&!i.json){let{buy:ie}=await Promise.resolve().then(()=>(Zt(),mi));await ie([q.domain],{preChecked:{price:q.for_sale.price,currency:q.for_sale.currency,marketplace:!0}})}else d(),I("Buy it:",`domani buy ${q.domain}`),d();else if(q.error)U.stop(`${N.default.dim("?")} ${$.domain(q.domain)} ${y.dot} ${N.default.dim("lookup failed")}`);else{let ie;try{if(Y?.ok){let X=await Y.json();X?.title&&(ie=X.title)}}catch{}let F=ie?` ${y.dot} ${N.default.dim(`"${ie}"`)}`:"";U.stop(`${y.error} ${$.domain(q.domain)} ${y.dot} ${N.default.red("taken")}${F}`)}return}let o=e.split(".")[0];if(je&&!i.json&&r.length>0){let U=new URLSearchParams;U.set("domains",r.map(te=>`${o}.${te}`).join(",")),i.maxPrice&&U.set("max_price",i.maxPrice);let Z=await be(`/api/domains/search?${U}`,{headers:{Accept:"text/event-stream"}});if(!Z.ok||!Z.body){u("Search failed",{json:i.json});return}let Y=[],q=new TextDecoder,ie="",F="",X=C(!0);X.start(`Checking ${r.length} TLD${r.length>1?"s":""}`);for await(let te of Z.body){ie+=q.decode(te,{stream:!0});let it=ie.split(`
190
- `);ie=it.pop()??"";for(let $t of it)$t.startsWith("event: ")?F=$t.slice(7):$t.startsWith("data: ")&&F==="result"&&Y.push(JSON.parse($t.slice(6)))}X.stop("");let Q=Math.max(...r.map(te=>`${o}.${te}`.length))+2,G=Y.filter(te=>te.available),Oe=Y.filter(te=>!te.available&&!te.error),Be=Y.filter(te=>!te.available&&te.for_sale);for(let te of[...G,...Be,...Oe.filter(it=>!it.for_sale)])te.available?console.log(` ${N.default.green("\u2713")} ${N.default.bold(N.default.white(te.domain.padEnd(Q)))} ${N.default.green($.price(te.price)+"/yr")}`):te.for_sale?console.log(` ${N.default.cyan("$")} ${N.default.bold(N.default.white(te.domain.padEnd(Q)))} ${N.default.cyan($.price(te.for_sale.price))} ${N.default.dim("(for sale)")}`):console.log(` ${N.default.dim("\u2717")} ${N.default.dim(te.domain.padEnd(Q))} ${N.default.dim("taken")}`);if(G.length===0){console.log(` ${N.default.dim("No domains available")}`),d();return}let{buy:de}=await Promise.resolve().then(()=>(Zt(),mi));if(G.length===1){await de([G[0].domain],{preChecked:{price:G[0].price,currency:G[0].currency}});return}let{select:ae,isCancel:ve}=await Promise.resolve().then(()=>(Pe(),dn)),dt=await ae({message:"Register one?",options:[...G.map(te=>({value:te.domain,label:$.domain(te.domain),hint:$.price(te.price)+"/yr"})),{value:"__skip__",label:"Skip"}]});if(!ve(dt)&&dt!=="__skip__"){d();let te=G.find(it=>it.domain===dt);await de([dt],{preChecked:te?{price:te.price,currency:te.currency}:void 0})}else d();return}if(je&&!i.json){let U=await $o();for(i.expand&&U.length>Qt&&console.error(N.default.dim(` (--expand: checking the first ${Qt} of ${U.length} TLDs - server limit per request)`));;){let Z=i.expand?U.slice(0,Qt):U.slice(0,He),Y=new URLSearchParams;Y.set("domains",Z.map(ae=>`${o}.${ae}`).join(",")),i.maxPrice&&Y.set("max_price",i.maxPrice);let q=C(!0);q.start(`Searching available domains for ${N.default.bold(o)}`);let ie=await be(`/api/domains/search?${Y}`,{headers:{Accept:"text/event-stream"}});if(!ie.ok||!ie.body){q.stop("Search failed");break}q.stop("");let F=!i.expand,{chosen:X,chosenResult:Q,searchAgain:G}=await Xd(ie.body,o,i.all??!1,F,U);if(X){d();let{buy:ae}=await Promise.resolve().then(()=>(Zt(),mi)),ve=Q?{price:Q.price,currency:Q.currency}:void 0;await ae([X],{preChecked:ve});return}if(!G)break;let{text:Oe,isCancel:Be}=await Promise.resolve().then(()=>(Pe(),dn)),de=await Oe({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});if(Be(de)||!de)break;o=de.split(".")[0]}d();return}let a=o,l=await $o(),m=r.length>0?r:i.expand?l.slice(0,Qt):l.slice(0,He);i.expand&&r.length===0&&l.length>Qt&&console.error(`(--expand: checking the first ${Qt} of ${l.length} TLDs - server limit per request; use --tlds to target others)`);let f=m.map(U=>`${a}.${U}`),g=new URLSearchParams;g.set("domains",f.join(",")),i.maxPrice&&g.set("max_price",i.maxPrice);let b=C(!i.json);b.start(`Searching available domains for ${N.default.bold(a)}`);let k=await be(`/api/domains/search?${g}`,{headers:{Accept:"text/event-stream"}});if(!k.ok){b.stop("Search failed");try{let U=await k.json();u(U.error||U.message||`Server error (${k.status})`,{hint:U.hint,status:k.status,json:i.json,fields:i.fields})}catch{u(`Server error (${k.status})`,{status:k.status,json:i.json,fields:i.fields})}}let v=k.body;v||(b.stop("Search failed"),u("Empty response",{code:"error",json:i.json,fields:i.fields}));let h=[],_=!1,x=0,O=i.all??!1;function A(){_||(_=!0,b.stop(`Checking TLDs for ${N.default.bold(a)}`),d())}function M(U){A(),U.available?console.log(` ${y.success} ${$.domain(U.domain).padEnd(37)} ${$.price(U.price)}${N.default.dim("/yr")}`):U.for_sale?console.log(` ${y.info} ${$.domain(U.domain).padEnd(37)} ${N.default.cyan($.price(U.for_sale.price))} ${N.default.dim("(for sale)")}`):U.error||console.log(` ${y.error} ${N.default.dim(U.domain.padEnd(38))} ${N.default.red("taken")}`)}function H(){_||b.message(`Checking TLDs for ${N.default.bold(a)} ${N.default.dim(`(${x} checked)`)}`)}let ee=new TextDecoder,P="",T="";for await(let U of v){P+=ee.decode(U,{stream:!0});let Z=P.split(`
191
- `);P=Z.pop()??"";for(let Y of Z)if(Y.startsWith("event: "))T=Y.slice(7);else if(Y.startsWith("data: ")){let q=JSON.parse(Y.slice(6));if(T==="error")b.stop("Search failed"),u(q.message||q.error||"Search failed",{code:q.code||"error",json:i.json,fields:i.fields});else if(T==="result")x++,q.available||q.for_sale||O?(i.json||M(q),h.push(q)):i.json||H();else if(T==="done"){if(i.json){h.sort((Q,G)=>Q.price-G.price),w({name:a,results:h,total:q.total,available:q.available},i.fields);return}_&&console.log(` ${N.default.dim("\u2500".repeat(50))}`);let ie=q.total-q.available,F=q.total>=5&&ie/q.total>=.5,X=`Checked ${q.total} TLDs \xB7 ${q.available} available${F?" \xB7 popular name":""}`;console.log(` ${N.default.dim(X)}`),q.available===0&&!i.expand&&r.length===0&&(d(),I("Try more TLDs:",`domani search ${a} --expand`))}}}d()}Zt();K();var fi=D(L(),1);V();he();Xi();function vo(e,t,i=process.env){let s=Ut(t,i);if(s!==void 0&&!e)throw new Error("--webhook is required when setting webhook authentication");return{request:{...e?{webhook_url:e}:{},...s!==void 0?{webhook_headers:s}:{}},preview:{...e?{webhook_url:e}:{},...s!==void 0?{webhook_header_names:qt(s)}:{}}}}async function ko(e,t){z(e,t);let i={domain:e};t.slug&&(i.slug=t.slug),t.name&&(i.name=t.name);let s;try{s=vo(t.webhook,t)}catch(a){u(a instanceof Error?a.message:"Invalid webhook headers",{hint:"Set the named environment variable and retry.",code:"validation_error",json:t.json,fields:t.fields})}if(Object.assign(i,s.request),t.years&&(i.years=Number(t.years)),t.paymentMethod&&(i.payment_method=t.paymentMethod),t.dryRun){let a={...i};delete a.webhook_headers,Object.assign(a,s.preview),B("POST /api/agents/provision",a,t.json,t.fields);return}let n=C(!t.json);n.start(`Provisioning ${$.domain(e)}`);let r=await j("/api/agents/provision",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),o=await r.json();if(r.ok||(n.stop("Provisioning failed"),u(o.error||"Provisioning failed",{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),n.stop(`${$.domain(e)} is ready`),t.json){w(o,t.fields);return}if(d(),S("Agent identity"),c("Domain",`${o.domain} (${o.domain_status})`),c("Mailbox",o.mailbox?fi.default.green(o.mailbox.address):fi.default.yellow("pending DNS")),c("Webhook",o.webhook?o.webhook.url:fi.default.dim("none")),o.webhook?.header_names.length&&c("Webhook auth",o.webhook.header_names.join(", ")),o.webhook?.secret&&c("Signing secret",o.webhook.secret),o.warnings?.length){d();for(let a of o.warnings)ze(fi.default.yellow(a))}if(o.next_steps?.length){d(),S("Next");for(let a of o.next_steps)ze(a)}d()}K();var gt=D(L(),1);V();async function _o(e){let t=C(!e.json);t.start("Loading domains");let i=await j("/api/domains"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${s.domains.length} domain(s)`),e.json){w({...s,count:s.domains.length},e.fields);return}if(s.domains.length===0){d(),console.log(` ${gt.default.dim("No domains yet.")} Use: ${gt.default.cyan("domani buy <domain>")}`),d();return}let n=[30,12,12,14];S(`Your Domains (${s.domains.length})`,n.reduce((o,a)=>o+a,0)+n.length-1);let r=s.domains.map(o=>{let a=new Date(o.expiresAt).toLocaleDateString(),l=o.status==="active"?gt.default.green:o.status==="pending"?gt.default.yellow:gt.default.red,m=o.autoRenew?gt.default.green("on"):gt.default.dim("off");return[$.domain(o.domain),l(o.status),m,gt.default.dim(a)]});se(["Domain","Status","Auto-renew","Expires"],r,n),d()}xn();K();var Ft=D(L(),1);V();async function jo(e){let t=new URLSearchParams;e.maxPrice&&t.set("max_price",e.maxPrice),e.minPrice&&t.set("min_price",e.minPrice),e.sort&&t.set("sort",e.sort),e.search&&t.set("search",e.search),e.limit&&t.set("limit",e.limit),t.set("order","asc");let i=C(!e.json);i.start("Loading TLDs");let s=await be(`/api/tlds?${t}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${n.total} TLDs loaded`),e.json){w(n,e.fields);return}let r=n.tlds;if(r.length===0){d(),console.log(` ${Ft.default.dim("No TLDs match your filters.")}`),d();return}S("TLD Pricing");let o=r.map(a=>[Ft.default.bold(`.${a.tld}`),$.price(a.registration.toFixed(2))+Ft.default.dim("/yr"),Ft.default.dim("renew ")+$.price(a.renewal.toFixed(2))+Ft.default.dim("/yr")]);se(["TLD","Register","Renewal"],o,[22,16,20]),d(),console.log(` ${Ft.default.dim(`${n.total} TLDs total`)}`),d()}K();var Se=D(L(),1);V();he();async function xo(e,t){z(e,t);let i=C(!t.json);i.start(`Looking up ${$.domain(e)}`);let[s,n]=await Promise.all([be(`/api/domains/whois?q=${encodeURIComponent(e)}`),be(`/api/domains/${encodeURIComponent(e)}/og`).catch(()=>null)]),r=await s.json(),o=null;try{n?.ok&&(o=await n.json())}catch{}if(s.ok||(i.stop("Lookup failed"),u(r.error||r.message,{hint:r.hint,status:s.status,json:t.json,fields:t.fields})),i.stop("WHOIS data retrieved"),t.json){w({...r,...o?{og:o}:{}},t.fields);return}if(S(`WHOIS ${$.domain(r.domain)}`),!r.registered){c("Status",`${y.success} ${Se.default.green("not registered")}`),d(),I("Register it:",`domani buy ${r.domain}`),d();return}if(c("Status",`${y.error} ${Se.default.red("registered")}`),(o?.title||o?.description)&&(d(),console.log(` ${Se.default.bold("Website preview")}`),console.log(` ${Se.default.dim("\u2500".repeat(50))}`),o.title&&c("Title",o.title),o.description&&c("Description",Se.default.dim(o.description.length>80?o.description.slice(0,80)+"\u2026":o.description)),d()),r.registrar&&c("Registrar",r.registrar),r.created&&c("Created",r.created),r.expires&&c("Expires",r.expires),r.days_until_expiry!=null){let l=r.days_until_expiry,m=l<30?Se.default.red:l<90?Se.default.yellow:Se.default.green;c("Days left",m(String(l)))}r.updated&&c("Updated",r.updated),c("DNSSEC",r.dnssec?Se.default.green("yes"):Se.default.dim("no")),r.nameservers?.length>0&&c("Nameservers",r.nameservers.map(l=>Se.default.cyan(l)).join(Se.default.dim(", "))),r.status?.length>0&&c("Status codes",Se.default.dim(r.status.join(", ")));let a=r.contacts?.registrant;a&&!r.redacted?(d(),console.log(` ${Se.default.bold("Registrant")}`),console.log(` ${Se.default.dim("\u2500".repeat(50))}`),a.name&&c("Name",a.name),a.organization&&c("Organization",a.organization),a.email&&c("Email",$.url(a.email)),a.country&&c("Country",a.country)):r.redacted&&c("Contact",Se.default.dim("redacted (WHOIS privacy)")),d()}K();Pe();var bt=D(L(),1);V();he();async function So(e,t){if(!e){je||u("Missing required argument: prompt",{hint:'Usage: domani suggest "describe your project"',code:"missing_argument",json:t.json});let h=await Ae({message:"Describe your project or idea",placeholder:"e.g. AI coding assistant, pet food delivery..."});(le(h)||!h)&&process.exit(0),e=h}let i=new URLSearchParams({prompt:e});if(t.count&&i.set("count",t.count),t.tlds&&i.set("tlds",t.tlds),t.tlds&&Yi(t.tlds.split(",").map(h=>h.trim()),t),t.style&&i.set("style",t.style),t.lang&&i.set("lang",t.lang),t.json){let h=C(!1);h.start("Finding available domains");let _=t.timeout?parseInt(t.timeout,10)*1e3:6e4,x;try{x=await be(`/api/domains/suggest?${i}`,{signal:AbortSignal.timeout(_)})}catch{h.stop("Failed"),u("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout",json:t.json,fields:t.fields})}let O=await x.json();x.ok||(h.stop("Failed"),u(O.error||O.message,{hint:O.hint,status:x.status,json:t.json,fields:t.fields})),w(O,t.fields);return}let s=C(!0);s.start("Finding available domains");let n=t.timeout?parseInt(t.timeout,10)*1e3:6e4,r;try{r=await be(`/api/domains/suggest?${i}`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(n)})}catch{s.stop("Failed"),u("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout"})}if(!r.ok){s.stop("Failed");try{let h=await r.json();u(h.error||h.message||`Server error (${r.status})`,{hint:h.hint,status:r.status})}catch{u(`Server error (${r.status})`,{status:r.status})}}let o=r.body;o||(s.stop("Failed"),u("Empty response"));let a=[],l=[],m=!1,f=0;function g(){m||(m=!0,s.stop("Finding available domains"),d())}let b=new TextDecoder,k="",v="";for await(let h of o){k+=b.decode(h,{stream:!0});let _=k.split(`
192
- `);k=_.pop()??"";for(let x of _)if(x.startsWith("event: "))v=x.slice(7);else if(x.startsWith("data: "))try{let O=JSON.parse(x.slice(6));if(v==="result")f++,O.available?a.push(O):l.push(O),m||s.message(`Finding available domains ${bt.default.dim(`(${f} checked, ${a.length} available)`)}`);else if(v==="iteration")m||s.message(`Finding available domains ${bt.default.dim(`(round ${O.n})`)}`);else if(v==="done"){g();for(let A of a){let M=A.reason?` ${bt.default.dim(A.reason)}`:"";console.log(` ${y.success} ${$.domain(A.domain).padEnd(37)} ${$.price(A.price)}${bt.default.dim("/yr")}${M}`)}for(let A of l)console.log(` ${y.error} ${bt.default.dim(A.domain.padEnd(38))} ${bt.default.red("taken")}`);console.log(` ${bt.default.dim("\u2500".repeat(50))}`),console.log(` ${bt.default.dim(`Found ${O.total} available \xB7 checked ${O.checked} \xB7 ${O.iterations} round${O.iterations>1?"s":""}`)}`)}else v==="error"&&(m||s.stop("Failed"),u(O.message))}catch{}}a.length===0&&l.length===0&&(m||s.stop("No results"),u("Could not find available domains for this prompt.")),d(),a.length>0&&(I("Register one:",`domani buy ${a[0].domain}`),d())}yn();Cn();K();Pe();var ot=D(L(),1);V();he();si();async function Co(e){let t=e.maxConsecutiveFailures??10,i=0;for(let s=1;s<=e.maxAttempts;s++){let n=await e.fetchPlan().catch(()=>null);if(e.onTick?.(n,s),n!==null){if(i=0,e.isEligible(n))return{status:"eligible",plan:n}}else if(i++,i>=t)return{status:"unreachable",failures:i};s<e.maxAttempts&&await e.sleep(e.intervalMs)}return{status:"timeout",attempts:e.maxAttempts}}var pi=D(L(),1);V();function hi(e){if(e){d(),console.log(` ${pi.default.bold(`Exit path (${e.managed_via})`)}`),console.log(` ${pi.default.dim("Unlock:")} ${e.unlock}`),console.log(` ${pi.default.dim("Auth code:")} ${e.auth_code}`);for(let t of e.notes||[])console.log(` ${pi.default.yellow("!")} ${t}`)}}var Zd=6e4,Qd=1440;async function Oo(e,t){z(e,t);let i=C(!t.json);i.start(`Planning safe adoption for ${$.domain(e)}`);let s=await j(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Check failed"),u(n.error,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),n.options?.transfer?.eligible)i.stop(`${y.success} Eligible for transfer`);else{i.stop(`${y.error} Not eligible`);let a=n.options?.transfer;if(t.watch&&a?.eligible_at){let l=await j("/api/domains/transfer-watch",{method:"POST",body:JSON.stringify({domain:e})}),m=await l.json();if(l.ok||u(m.error||m.message,{hint:m.hint,status:l.status,json:t.json,fields:t.fields}),t.json){w(m,t.fields);return}S("Transfer Watch Registered"),c("Domain",$.domain(e)),c("Eligible from",m.eligible_at||a.eligible_at),m.hint&&(d(),console.log(` ${ot.default.dim(m.hint)}`)),d();return}if(t.watch){t.json||(console.log(` ${ot.default.dim(a?.reason||"Domain is not eligible for transfer yet.")}`),hi(a?.guidance),d());let l=C(!t.json);l.start(`Watching ${$.domain(e)} until it becomes transferable (every 60s, Ctrl+C to stop)`);let m=await Co({fetchPlan:async()=>{let f=await j(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`);return f.ok?f.json():null},isEligible:f=>!!f.options?.transfer?.eligible,sleep:f=>new Promise(g=>setTimeout(g,f)),intervalMs:Zd,maxAttempts:Qd});m.status!=="eligible"&&(l.stop(`${y.error} Watch ended`),u(m.status==="timeout"?"Domain did not become eligible within 24 hours.":"Gave up after repeated failures fetching the adoption plan.",{hint:"The transfer lock is disabled at the losing registrar; rerun with --watch once you have flipped it.",code:m.status==="timeout"?"watch_timeout":"watch_unreachable",json:t.json,fields:t.fields})),n=m.plan,l.stop(`${y.success} Now eligible for transfer`)}else{t.json||hi(a?.guidance);let l=a?.eligible_at?`Eligible from ${a.eligible_at}. Rerun with --watch to register a server watch (email + webhook when the date arrives).`:"Fix the blocker above, then rerun - or rerun with --watch to poll until the domain becomes eligible and continue automatically.",m=t.json&&a?.guidance?` The registrar exit playbook is in the adoption plan (options.transfer.guidance, \`domani adopt ${e} --json\`).`:"";u(a?.reason||"Domain is not eligible for transfer.",{hint:[l+m,...n.warnings?.length?[n.warnings.join(" ")]:[]].join(" "),code:"not_eligible",json:t.json,fields:t.fields})}}if(t.dryRun)return B("transfer",{domain:e,eligible:!0,price:n.options.transfer.price,currency:n.options.transfer.currency||"USD",includes_renewal:!0,preserves_nameservers:!0,migrates_dns:!1,nameservers:n.current.nameservers,dns_provider:n.current.dns_provider,dnssec_enabled:n.current.dnssec_enabled},t.json,t.fields);if(!Pt(t)){S("Transfer Safety Plan"),c("Registrar",n.current.registrar||"Unknown"),c("DNS provider",n.current.dns_provider),c("Nameservers",`${n.current.nameservers.length} preserved`),c("DNSSEC",n.current.dnssec_enabled?ot.default.yellow("Enabled, DS will be verified"):"Not enabled"),c("DNS migration","Not requested"),d();let a=n.options.transfer.price!=null?` for ${$.price(n.options.transfer.price.toFixed(2))}`:"",l=await Ke({message:`Transfer ${ot.default.bold(e)} to ${Wt}${a}? Nameservers stay unchanged and 1 year is included.`});if(!l||typeof l=="symbol"){console.log(` ${ot.default.dim("Cancelled.")}`);return}}if(!t.authCode){(t.json||!process.stdout.isTTY)&&u("--auth-code is required",{hint:"The safety plan passed. Get the EPP/auth code from the current registrar and retry.",code:"validation_error",json:t.json,fields:t.fields}),n.options?.transfer?.guidance&&console.log(` ${ot.default.dim("Where to get it:")} ${n.options.transfer.guidance.auth_code}`);let a=await Ae({message:"Enter the EPP/auth code from your current registrar:",validate:l=>!l||l.trim().length===0?"Auth code is required":void 0});le(a)&&process.exit(0),t.authCode=a}i.start(`Initiating transfer for ${$.domain(e)}`);let r=await j("/api/domains/transfer",{method:"POST",body:JSON.stringify({domain:e,auth_code:t.authCode})}),o=await r.json();if(r.ok||(i.stop("Transfer failed"),u(o.error||o.message,{hint:o.hint,fixUrl:o.setup_url||o.payment_options?.card?.setup_url,status:r.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Transfer initiated`),t.json){w(o,t.fields);return}S("Transfer Initiated"),c("Domain",$.domain(o.domain)),c("Status",ot.default.yellow(o.status||"pending")),o.price&&c("Price",$.price(o.price)+ot.default.dim(` ${o.currency||"USD"}`)),o.payment_method&&c("Payment",o.payment_method),o.expires&&c("Expires",new Date(o.expires).toLocaleDateString()),o.hint&&(d(),console.log(` ${ot.default.dim(o.hint)}`)),d(),I("Check transfer progress:",`domani status ${o.domain}`),d()}K();var gi=D(L(),1);V();he();async function Io(e,t){z(e,t);let i=C(!t.json);i.start(`Inspecting ${$.domain(e)}`);let s=await j(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Inspection failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Adoption plan ready`),t.json){w(n,t.fields);return}if(S(`Adopt ${$.domain(n.domain)}`),c("Registrar",n.current.registrar||"Unknown"),c("DNS provider",n.current.dns_provider),c("Nameservers",n.current.nameservers.join(", ")||"None detected"),c("DNSSEC",n.current.dnssec_enabled?gi.default.yellow("Enabled"):"Not enabled"),c("Account",n.account_state),c("Recommended",gi.default.cyan(n.recommended_action)),d(),n.recommended_action==="connect"&&I("Connect free, without changing registrar or DNS:",`domani import ${n.domain}`),n.options.transfer.available){let r=n.options.transfer.price==null?"price unavailable":`$${n.options.transfer.price.toFixed(2)} ${n.options.transfer.currency}`;I(`Transfer registration for ${r}, preserving nameservers:`,`domani transfer ${n.domain}`),!n.options.transfer.eligible&&n.options.transfer.reason&&(console.log(` ${gi.default.yellow("!")} ${n.options.transfer.reason}`),I("Wait for eligibility and transfer in one go:",`domani transfer ${n.domain} --watch`)),hi(n.options.transfer.guidance)}for(let r of n.warnings||[])console.log(` ${gi.default.yellow("!")} ${r}`);d()}K();Pe();var ss=D(L(),1);V();he();Ye();async function Ro(e,t){e||(e=await fe()),z(e,t);let i=t.years?parseInt(t.years,10):1;if((isNaN(i)||i<1||i>10)&&u("--years must be between 1 and 10",{code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return B("renew",{domain:e,years:i},t.json,t.fields);if(!Pt(t)){let o=await Ke({message:`Renew ${ss.default.bold(e)} for ${i} year${i>1?"s":""}? You will be charged.`});if(!o||typeof o=="symbol"){console.log(` ${ss.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start(`Renewing ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}/renew`,{method:"POST",body:JSON.stringify({years:i})}),r=await n.json();if(n.ok||(s.stop("Renewal failed"),u(r.error||r.message,{hint:r.hint,fixUrl:r.setup_url||r.payment_options?.card?.setup_url,status:n.status,json:t.json,fields:t.fields})),s.stop(`${y.success} Domain renewed`),t.json){w(r,t.fields);return}S("Renewal Complete"),c("Domain",$.domain(r.domain)),c("Years",String(r.renewed_years)),c("New expiry",new Date(r.new_expiry).toLocaleDateString()),r.price&&c("Price",$.price(r.price)+ss.default.dim(` ${r.currency||"USD"}`)),r.payment_method&&c("Payment",r.payment_method),d(),I("Verify renewal:",`domani status ${r.domain}`),d()}K();var at=D(L(),1);V();he();async function Ao(e,t){e||u("Domain is required",{hint:`Usage: domani import <domain>
193
- domani import <domain> --verify`,code:"validation_error",json:t.json,fields:t.fields}),z(e,t);let i=t.verify?"/api/domains/import/verify":"/api/domains/import",s=C(!t.json);s.start(t.verify?`Verifying ownership of ${$.domain(e)}`:`Initiating import for ${$.domain(e)}`);let n=await j(i,{method:"POST",body:JSON.stringify({domain:e})}),r=await n.json();if(n.ok||(s.stop(t.verify?"Verification failed":"Import failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields})),t.json){s.stop(""),w(r,t.fields);return}t.verify?(s.stop(`${y.success} ${$.domain(e)} imported!`),S("Domain Imported"),c("Domain",$.domain(r.domain)),c("Status",at.default.green(r.status||"active")),r.expires_at&&c("Expires",new Date(r.expires_at).toLocaleDateString()),r.registrar&&c("Registrar",r.registrar),d(),I("Check domain health:",`domani status ${r.domain}`),d()):(s.stop(`${y.success} Verification record ready`),S("Import Domain"),c("Domain",$.domain(r.domain)),c("Status",at.default.yellow("pending verification")),d(),console.log(" Add this TXT record at your DNS provider:"),d(),console.log(` ${at.default.dim("Type:")} ${at.default.bold("TXT")}`),console.log(` ${at.default.dim("Name:")} ${at.default.bold(r.txt_record?.name||"@")}`),console.log(` ${at.default.dim("Value:")} ${at.default.bold(r.txt_record?.value||`domani-verify=${r.token}`)}`),d(),console.log(` ${at.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),d(),I("Once the record is set, verify:",`domani import ${e} --verify`),d())}kn();ft();V();function Eo(e){let t=Me();if(t||(d(),u("Not logged in",{hint:"Run 'domani login' first",code:"auth_required",json:e.json})),!e.reveal&&!e.json&&process.stdout.isTTY){let i=`${t.slice(0,12)}...${t.slice(-4)}`;console.log(i),console.log("Run 'domani token --reveal' to print the full key.");return}e.json?w({token:t}):console.log(t)}K();var Ne=D(L(),1);V();async function To(e,t){switch(e){case void 0:case"list":return ec(t.json,t.fields);case"create":return tc(t);case"revoke":return ic(t);default:u(`Unknown action: ${e}`,{hint:"Actions: list, create, revoke",code:"validation_error",json:t.json,fields:t.fields})}}async function ec(e,t){let i=C(!e);i.start("Loading tokens");let s=await j("/api/tokens"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${y.success} ${n.tokens.length} token(s)`),e){w(n,t);return}if(n.tokens.length===0){d(),console.log(` ${Ne.default.dim("No tokens.")}`),d(),I("Create one:",'domani tokens create --name "My App"'),d();return}d(),S("API Tokens");let r=n.tokens.map(o=>{let a;o.expired?a=Ne.default.red("Expired"):o.expiresAt?a=Ne.default.dim(`Expires ${new Date(o.expiresAt).toLocaleDateString()}`):a=Ne.default.dim("No expiration");let l=o.scopes.includes("*")?Ne.default.dim("all"):Ne.default.dim(o.scopes.join(", "));return[Ne.default.dim(o.id),Ne.default.bold(o.name),o.agent_identity?Ne.default.dim(o.agent_identity.name||o.agent_identity.slug):Ne.default.dim("\u2014"),l,a]});se(["ID","Name","Agent","Scopes","Expiration"],r,[28,16,18,32,20]),d()}async function tc(e){let t={};if(e.name&&(t.name=e.name),e.scopes&&(t.scopes=e.scopes.split(",").map(r=>r.trim())),e.expiresIn){let r=Number(e.expiresIn);(isNaN(r)||r<3600||r>31536e3)&&u("Invalid --expires-in value",{hint:"Must be between 3600 (1 hour) and 31536000 (1 year) seconds",code:"validation_error",json:e.json,fields:e.fields}),t.expires_in=r}e.agentIdentity&&(t.agent_identity_id=e.agentIdentity);let i=C(!e.json);i.start("Creating token");let s=await j("/api/tokens",{method:"POST",body:JSON.stringify(t)}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Token created`),e.json){w(n,e.fields);return}d(),S("Token Created"),c("ID",n.id),c("Name",n.name),c("Scopes",n.scopes?.includes("*")?"All (full access)":n.scopes?.join(", ")||"All"),n.agent_identity&&c("Agent",n.agent_identity.name||n.agent_identity.slug),c("Expires",n.expiresAt?new Date(n.expiresAt).toLocaleString():"Never"),d(),console.log(` ${Ne.default.yellow("!")} ${Ne.default.bold("Key:")} ${n.key}`),console.log(` ${Ne.default.dim("Save this key - it will not be shown again.")}`),d()}async function ic(e){e.tokenId||u("Token ID required",{hint:`Usage: domani tokens revoke --token-id <id>
194
- Run 'domani tokens list' to see your tokens.`,code:"validation_error",json:e.json,fields:e.fields});let t=C(!e.json);t.start("Revoking token");let i=await j(`/api/tokens/${encodeURIComponent(e.tokenId)}`,{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${y.success} Token revoked`),e.json){w(s,e.fields);return}console.log(` ${Ne.default.dim("Any applications using this key will need a new one.")}`),d()}K();var Ce=D(L(),1);V();he();Ye();async function Po(e,t){e||(e=await fe()),z(e,t);let i=t.autoRenew!==void 0,s=t.whoisPrivacy!==void 0,n=t.securityLock!==void 0;if(!i&&!s&&!n)return sc(e,t.json,t.fields);let r={};if(i){let m=Rn(t.autoRenew);m===null&&u("--auto-renew must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.auto_renew=m}if(s){let m=Rn(t.whoisPrivacy);m===null&&u("--whois-privacy must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.whois_privacy=m}if(n){let m=Rn(t.securityLock);m===null&&u("--security-lock must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.security_lock=m}if(t.dryRun)return B("settings_update",{domain:e,...r},t.json,t.fields);let o=C(!t.json);o.start(`Updating ${$.domain(e)}`);let a=await j(`/api/domains/${encodeURIComponent(e)}/settings`,{method:"PUT",body:JSON.stringify(r)}),l=await a.json();if(a.ok||(o.stop("Failed"),u(l.error||l.message,{hint:l.hint,status:a.status,json:t.json,fields:t.fields})),o.stop(`${y.success} Settings updated`),t.json){w(l,t.fields);return}S("Settings Updated"),c("Domain",$.domain(l.domain)),l.auto_renew!==void 0&&c("Auto-renew",l.auto_renew?Ce.default.green("on"):Ce.default.dim("off")),l.whois_privacy!==void 0&&c("WHOIS privacy",l.whois_privacy?Ce.default.green("on"):Ce.default.dim("off")),l.security_lock!==void 0&&c("Security lock",l.security_lock?Ce.default.green("locked"):Ce.default.dim("unlocked")),l.hint&&c("",Ce.default.dim(l.hint)),d()}async function sc(e,t,i){let s=C(!t);s.start(`Loading ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop(`${y.success} ${$.domain(e)}`),t){w(r,i);return}S("Domain Settings"),c("Domain",$.domain(r.domain)),c("Status",r.status==="active"?Ce.default.green(r.status):Ce.default.yellow(r.status)),c("Auto-renew",r.auto_renew?Ce.default.green("on"):Ce.default.dim("off")),r.registrar&&(c("WHOIS privacy",r.registrar.whois_privacy?Ce.default.green("on"):Ce.default.dim("off")),c("Security lock",r.registrar.security_lock?Ce.default.green("locked"):Ce.default.dim("unlocked"))),c("Expires",new Date(r.expires_at).toLocaleDateString()+Ce.default.dim(` (${r.days_until_expiry} days)`)),d(),I("Toggle auto-renew:",`domani settings ${e} --auto-renew off`),I("Toggle WHOIS privacy:",`domani settings ${e} --whois-privacy off`),I("Toggle security lock:",`domani settings ${e} --security-lock off`),I("Get transfer auth code:",`domani auth-code ${e}`),d()}function Rn(e){let t=e.toLowerCase();return t==="on"||t==="true"||t==="1"||t==="enable"?!0:t==="off"||t==="false"||t==="0"||t==="disable"?!1:null}K();var Mt=D(L(),1);V();he();Ye();async function Do(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Getting auth code for ${$.domain(e)}`);let s=await j(`/api/domains/${encodeURIComponent(e)}/auth-code`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Auth code retrieved`),t.json){w(n,t.fields);return}if(S("Auth Code"),c("Domain",$.domain(n.domain)),c("Auth code",Mt.default.bold(Mt.default.green(n.auth_code))),n.was_unlocked&&c("",Mt.default.yellow("Domain was automatically unlocked to allow transfer.")),n.hint&&(d(),console.log(` ${Mt.default.dim(n.hint)}`)),n.next_steps?.length){d();for(let r of n.next_steps)console.log(` ${Mt.default.dim("\u2192")} ${Mt.default.dim(r)}`)}d(),I("Check transfer status:",`domani transfer-away ${e}`),I("Re-lock domain:",`domani settings ${e} --security-lock on`),d()}K();var yt=D(L(),1);V();he();Ye();var nc={none:yt.default.dim,pending:yt.default.yellow,approved:yt.default.yellow,completed:yt.default.green,rejected:yt.default.red,expired:yt.default.red};async function No(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Checking transfer status for ${$.domain(e)}`);let s=await j(`/api/domains/${encodeURIComponent(e)}/transfer-away`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} ${$.domain(e)}`),t.json){w(n,t.fields);return}S("Transfer Away Status"),c("Domain",$.domain(n.domain));let r=nc[n.status]||yt.default.dim;c("Status",r(n.status)),n.gaining_registrar&&c("New registrar",n.gaining_registrar),n.request_date&&c("Requested",new Date(n.request_date).toLocaleDateString()),n.hint&&(d(),console.log(` ${yt.default.dim(n.hint)}`)),d(),n.status==="none"?I("Get auth code to start:",`domani auth-code ${e}`):n.status==="pending"||n.status==="approved"?I("Check again later:",`domani transfer-away ${e}`):n.status==="completed"?I("Search for a new domain:","domani search <name>"):(n.status==="rejected"||n.status==="expired")&&I("Retry with a new auth code:",`domani auth-code ${e}`),d()}K();Pe();var ns=D(L(),1);V();async function Uo(e,t){return e==="set"?oc(t):rc(t)}async function rc(e){let t=C(!e.json);t.start("Loading contact info");let i=await j("/api/me/contact"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${y.success} Contact info`),e.json){w(s,e.fields);return}if(S("Contact Info"),!s.has_contact){console.log(` ${y.warning} ${ns.default.yellow("No contact info set.")} Run ${ns.default.bold("domani contact set")} to add.`),d(),console.log(` ${ns.default.dim("Contact info is required before purchasing domains.")}`),d();return}let n=s.contact;c("Name",`${n.first_name} ${n.last_name}`),n.org_name&&c("Organization",n.org_name),c("Address",n.address1),n.address2&&c("",n.address2),c("",`${n.city}, ${n.state} ${n.postal_code}`),c("Country",n.country),c("Phone",n.phone),c("Email",n.email),d()}async function oc(e){let t={},i=e.firstName||e.lastName||e.address1;if(!je&&!i&&u("Missing required flags for contact set",{hint:"Usage: domani contact set --first-name John --last-name Doe --address1 '123 Main St' --city SF --state CA --postal-code 94105 --country US --phone +1.5551234567 --email john@example.com",code:"missing_argument",json:e.json}),i){let a=["firstName","lastName","address1","city","state","postalCode","country","phone","email"],l={firstName:"first_name",lastName:"last_name",orgName:"org_name",address1:"address1",address2:"address2",city:"city",state:"state",postalCode:"postal_code",country:"country",phone:"phone",email:"email"},m=a.filter(f=>!e[f]);m.length>0&&u(`Missing required flags: ${m.map(f=>`--${f.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`)}`).join(", ")}`,{code:"missing_argument",json:e.json});for(let[f,g]of Object.entries(l)){let b=e[f];b&&(t[g]=b)}}else{let a=await j("/api/me/contact"),m=(a.ok?await a.json():null)?.contact,f=[{key:"first_name",message:"First name",placeholder:"John",required:!0},{key:"last_name",message:"Last name",placeholder:"Doe",required:!0},{key:"org_name",message:"Organization (optional, press Enter to skip)",placeholder:"Acme Inc.",required:!1},{key:"address1",message:"Address line 1",placeholder:"123 Main St",required:!0},{key:"address2",message:"Address line 2 (optional)",placeholder:"Suite 100",required:!1},{key:"city",message:"City",placeholder:"San Francisco",required:!0},{key:"state",message:"State / Province",placeholder:"CA",required:!0},{key:"postal_code",message:"Postal / ZIP code",placeholder:"94105",required:!0},{key:"country",message:"Country code (ISO 3166-1 alpha-2)",placeholder:"US",required:!0},{key:"phone",message:"Phone (+CC.NUMBER)",placeholder:"+1.5551234567",required:!0},{key:"email",message:"Contact email",placeholder:"john@example.com",required:!0}];for(let g of f){let b=m?.[g.key]||"",k=await Ae({message:g.message,placeholder:g.placeholder,defaultValue:b,validate:g.required?h=>h?.trim()?void 0:`${g.message} is required`:void 0});le(k)&&process.exit(0);let v=k.trim();v&&(t[g.key]=v)}}if(e.dryRun)return B("contact_set",t,e.json,e.fields);let s=C(!e.json);s.start("Saving contact info");let n=await j("/api/me/contact",{method:"PUT",body:JSON.stringify(t)}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),s.stop(`${y.success} Contact info saved`),e.json){w(r,e.fields);return}S("Contact Saved");let o=r.contact;c("Name",`${o.first_name} ${o.last_name}`),o.org_name&&c("Organization",o.org_name),c("Address",o.address1),o.address2&&c("",o.address2),c("",`${o.city}, ${o.state} ${o.postal_code}`),c("Country",o.country),c("Phone",o.phone),c("Email",o.email),d(),I("Search for a domain:","domani search <name>"),d()}K();var Ee=D(L(),1);V();he();Ye();async function Mo(e,t,i,s){if(e||(e=await fe()),z(e,s),!t)return ac(e,s.json,s.fields);switch(t){case"enable":case"on":return s.dryRun?B("parking_enable",{domain:e},s.json,s.fields):qo(e,!0,s.json,s.fields);case"disable":case"off":return s.dryRun?B("parking_disable",{domain:e},s.json,s.fields):qo(e,!1,s.json,s.fields);case"price":{i||u("Price required",{hint:"Usage: domani parking <domain> price <amount>",code:"validation_error",json:s.json,fields:s.fields});let n=parseFloat(i);return(isNaN(n)||n<=0)&&u("Price must be a positive number",{hint:`Got: "${i}"`,code:"validation_error",json:s.json,fields:s.fields}),s.dryRun?B("parking_price",{domain:e,price:n},s.json,s.fields):Fo(e,n,s.json,s.fields)}case"unprice":case"unlist":return s.dryRun?B("parking_unlist",{domain:e},s.json,s.fields):Fo(e,null,s.json,s.fields);default:u(`Unknown action: ${t}`,{hint:"Actions: enable, disable, price <amount>, unprice",code:"validation_error",json:s.json,fields:s.fields})}}async function ac(e,t,i){let s=C(!t);s.start(`Loading ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop(`${y.success} ${$.domain(e)}`),t){w({domain:r.domain,parking_enabled:r.parking_enabled,listing_price:r.listing_price},i);return}S("Parking"),c("Domain",$.domain(r.domain)),c("Parking",r.parking_enabled?Ee.default.green("enabled"):Ee.default.dim("disabled")),c("Listing",r.listing_price?`${$.price(r.listing_price)} ${Ee.default.dim("(for sale)")}`:Ee.default.dim("not listed")),d(),I("Enable parking:",`domani parking ${e} enable`),I("Set sale price:",`domani parking ${e} price 499`),I("View analytics:",`domani analytics ${e}`),d()}async function qo(e,t,i,s){let n=C(!i);n.start(`${t?"Enabling":"Disabling"} parking for ${$.domain(e)}`);let r=await j(`/api/domains/${encodeURIComponent(e)}/parking`,{method:"PUT",body:JSON.stringify({enabled:t})}),o=await r.json();if(r.status===409&&o.requires_confirmation){if(n.stop(`${y.warning} DNS records will be replaced`),i){w(o,s);return}console.log(`
195
- ${Ee.default.yellow("Enabling parking will replace these DNS records:")}`);for(let a of o.existing_dns||[])console.log(` ${Ee.default.dim(a.type)} ${a.name} ${Ee.default.dim("\u2192")} ${a.value}`);console.log(`
196
- ${Ee.default.dim("Run again with --confirm to proceed (not implemented yet).")}`),console.log(` ${Ee.default.dim("Or use the dashboard to confirm.")}`),d();return}if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i,fields:s})),n.stop(`${y.success} Parking ${t?"enabled":"disabled"}`),i){w(o,s);return}S("Parking Updated"),c("Domain",$.domain(o.domain)),c("Parking",o.parking_enabled?Ee.default.green("enabled"):Ee.default.dim("disabled")),o.hint&&c("",Ee.default.dim(o.hint)),d()}async function Fo(e,t,i,s){let n=C(!i);n.start(t!==null?`Setting price for ${$.domain(e)} to ${$.price(t)}`:`Removing listing for ${$.domain(e)}`);let r=await j(`/api/domains/${encodeURIComponent(e)}/parking`,{method:"PUT",body:JSON.stringify({listing_price:t})}),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i,fields:s})),n.stop(`${y.success} ${t!==null?"Price set":"Listing removed"}`),i){w(o,s);return}S("Listing Updated"),c("Domain",$.domain(o.domain)),c("Listing",o.listing_price?`${$.price(o.listing_price)} ${Ee.default.dim("(for sale)")}`:Ee.default.dim("not listed")),o.hint&&c("",Ee.default.dim(o.hint)),d()}K();var Je=D(L(),1);V();he();Ye();var lc=" \u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588";function dc(e){let t=Math.max(...e,1);return e.map(i=>lc[Math.min(Math.round(i/t*8),8)]).join("")}async function Lo(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Loading analytics for ${$.domain(e)}`);let s=await j(`/api/domains/${encodeURIComponent(e)}/analytics`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop("Analytics loaded"),t.json){w(n,t.fields);return}if(d(),S(`Analytics: ${$.domain(e)}`),c("Views (7d)",Je.default.cyan(n.views_7d.toLocaleString())),c("Views (30d)",Je.default.cyan(n.views_30d.toLocaleString())),c("Inquiries",Je.default.cyan(String(n.inquiries_30d))),c("Conversion",n.conversion_rate>0?Je.default.green(`${n.conversion_rate}%`):Je.default.dim("0%")),n.daily_views&&n.daily_views.length>0){let r=n.daily_views.map(m=>m.views),o=dc(r),a=n.daily_views[0].date.slice(5),l=n.daily_views[n.daily_views.length-1].date.slice(5);d(),console.log(` ${Je.default.dim(a)} ${Je.default.cyan(o)} ${Je.default.dim(l)}`)}if(n.recent_inquiries&&n.recent_inquiries.length>0){d(),console.log(` ${Je.default.bold("Recent Inquiries")}`);let r=n.recent_inquiries.map(o=>[Je.default.dim(o.email),o.offer?$.price(o.offer):Je.default.dim("-"),Je.default.dim(new Date(o.date).toLocaleDateString())]);se(["Email","Offer","Date"],r,[30,12,14])}d(),I("Set a listing price:",`domani parking ${e} price <amount>`),I("Set up email:",`domani email setup ${e}`),I("Domain settings:",`domani settings ${e}`),d()}K();var pe=D(L(),1);V();Xi();async function Vo(e,t){switch(e){case void 0:case"list":return uc(t.json,t.fields);case"create":return mc(t);case"update":return fc(t);case"delete":return pc(t);case"deliveries":return hc(t);case"replay":return cc(t);case"events":return gc(t.json,t.fields);default:u(`Unknown action: ${e}`,{hint:"Actions: list, create, update, delete, deliveries, replay, events",code:"validation_error",json:t.json,fields:t.fields})}}async function cc(e){(!e.webhookId||!e.deliveryId||!e.idempotencyKey)&&u("Webhook ID, delivery ID, and idempotency key are required",{hint:"Usage: domani webhooks replay --webhook-id <id> --delivery-id <id> --idempotency-key <stable-key>",code:"validation_error",json:e.json,fields:e.fields});let t=C(!e.json);t.start("Replaying webhook delivery");let i=await j(`/api/webhooks/${encodeURIComponent(e.webhookId)}/deliveries/${encodeURIComponent(e.deliveryId)}/replay`,{method:"POST",body:JSON.stringify({idempotency_key:e.idempotencyKey})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${y.success} Webhook replay ${s.status}`),e.json)return w(s,e.fields);S("Webhook Replay Receipt"),c("Delivery",s.delivery_id),c("Original",s.original_delivery_id),c("Status",s.status),c("Attempts",s.attempts),c("Idempotent retry",s.idempotent_replay?"yes":"no"),d()}async function uc(e,t){let i=C(!e);i.start("Loading webhooks");let s=await j("/api/webhooks"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${y.success} ${n.webhooks.length} webhook(s)`),e){w(n,t);return}if(n.webhooks.length===0){d(),console.log(` ${pe.default.dim("No webhooks configured.")}`),d(),I("Create one:","domani webhooks create --url https://... --events domain.purchased,dns.updated"),I("List events:","domani webhooks events"),d();return}d(),S("Webhooks");let r=n.webhooks.map(o=>[pe.default.dim(o.id),$.url(o.url),o.events.length<=3?o.events.join(", "):`${o.events.length} events`,o.header_names?.join(", ")||pe.default.dim("none"),o.active?pe.default.green("active"):pe.default.dim("paused")]);se(["ID","URL","Events","Auth headers","Status"],r,[28,40,24,20,10]),d()}async function mc(e){e.url||u("URL required",{hint:"Usage: domani webhooks create --url https://example.com/hook --events domain.purchased,dns.updated",code:"validation_error",json:e.json,fields:e.fields}),e.events||u("Events required",{hint:`Usage: domani webhooks create --url https://... --events domain.purchased,dns.updated
197
- Run 'domani webhooks events' to see available event types.`,code:"validation_error",json:e.json,fields:e.fields});let t=e.events.split(",").map(o=>o.trim()),i;try{i=Ut(e)}catch(o){u(o instanceof Error?o.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(e.dryRun)return B("webhook_create",{url:e.url,events:t,header_names:qt(i)},e.json,e.fields);let s=C(!e.json);s.start("Creating webhook");let n=await j("/api/webhooks",{method:"POST",body:JSON.stringify({url:e.url,events:t,...i!==void 0?{headers:i}:{}})}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),s.stop(`${y.success} Webhook created`),e.json){w(r,e.fields);return}d(),S("Webhook Created"),c("ID",r.id),c("URL",$.url(r.url)),c("Events",r.events.join(", ")),c("Auth headers",r.header_names?.join(", ")||pe.default.dim("none")),c("Status",pe.default.green("active")),d(),console.log(` ${pe.default.yellow("!")} ${pe.default.bold("Secret:")} ${r.secret}`),console.log(` ${pe.default.dim("Save this secret - it won't be shown again.")}`),console.log(` ${pe.default.dim("Use it to verify payloads with HMAC-SHA256.")}`),d()}async function fc(e){e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks update --webhook-id <id> [--url ...] [--events ...] [--active on|off]",code:"validation_error",json:e.json,fields:e.fields});let t={};e.url&&(t.url=e.url),e.events&&(t.events=e.events.split(",").map(r=>r.trim())),e.active!==void 0&&(t.active=e.active==="on"||e.active==="true");try{let r=Ut(e);r!==void 0&&(t.headers=r)}catch(r){u(r instanceof Error?r.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(e.dryRun){let{headers:r,...o}=t;return B("webhook_update",{webhook_id:e.webhookId,...o,...r!==void 0?{header_names:qt(r)}:{}},e.json,e.fields)}let i=C(!e.json);i.start("Updating webhook");let s=await j(`/api/webhooks/${encodeURIComponent(e.webhookId)}`,{method:"PATCH",body:JSON.stringify(t)}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} Webhook updated`),e.json){w(n,e.fields);return}S("Webhook Updated"),c("ID",n.id),c("URL",$.url(n.url)),c("Events",n.events.join(", ")),c("Auth headers",n.header_names?.join(", ")||pe.default.dim("none")),c("Status",n.active?pe.default.green("active"):pe.default.dim("paused")),d()}async function pc(e){if(e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks delete --webhook-id <id>",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("webhook_delete",{webhook_id:e.webhookId},e.json,e.fields);let t=C(!e.json);t.start("Deleting webhook");let i=await j(`/api/webhooks/${encodeURIComponent(e.webhookId)}`,{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${y.success} Webhook deleted`),e.json){w(s,e.fields);return}console.log(` ${pe.default.dim("Pending deliveries have been cancelled.")}`),d()}async function hc(e){e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks deliveries --webhook-id <id> [--limit 20]",code:"validation_error",json:e.json,fields:e.fields});let t=e.limit?`?limit=${e.limit}`:"",i=C(!e.json);i.start("Loading deliveries");let s=await j(`/api/webhooks/${encodeURIComponent(e.webhookId)}/deliveries${t}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${y.success} ${n.deliveries.length} delivery(ies)`),e.json){w(n,e.fields);return}if(n.deliveries.length===0){d(),console.log(` ${pe.default.dim("No deliveries yet.")}`),d();return}d(),S("Deliveries");let r=n.deliveries.map(o=>{let a=o.status==="delivered"?pe.default.green("delivered"):o.status==="failed"?pe.default.red("failed"):pe.default.yellow("pending");return[o.event_type,a,o.http_status?String(o.http_status):pe.default.dim("-"),String(o.attempts),pe.default.dim(new Date(o.created_at).toLocaleString())]});se(["Event","Status","HTTP","Tries","Date"],r,[22,12,6,6,22]),d()}async function gc(e,t){let i=C(!e);i.start("Loading event types");let s=await be("/api/webhooks/events"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${y.success} ${n.events.length} event type(s)`),e){w(n,t);return}d(),S("Webhook Event Types");let r=n.events.map(o=>[pe.default.cyan(o.type),pe.default.dim(o.description)]);se(["Event","Description"],r,[24,50]),d()}K();var $e=D(L(),1);V();he();async function Wo(e,t){if(e||u("Domain is required",{hint:`Usage: domani sell <domain> --price <amount>
189
+ `),{chosen:q,chosenResult:se,searchAgain:Y,allTaken:r.length===0&&o.length>0,expanded:g>0}}async function xo(e,t,i){if(!e){Se||u("Missing required argument: domain",{hint:"Usage: domani search <domain> [tlds...]",code:"missing_argument",json:i.json});let U=await Te({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});(le(U)||!U)&&process.exit(0),e=U}let s=t.map(U=>U.replace(/^\./,"")),n=i.tlds?.split(",").map(U=>U.trim())||[],r=[...new Set([...s,...n])];if(r.length>0&&Qi(r,i),z(e,i),e.includes(".")&&r.length===0){let U=C(!i.json);U.start(`Checking ${v.domain(e)}`);let[Q,Y]=await Promise.all([be(`/api/domains/search?q=${encodeURIComponent(e)}`),be(`/api/domains/${encodeURIComponent(e)}/og`).catch(()=>null)]),q=await Q.json();if(Q.ok||(U.stop("Search failed"),u(q.error||q.message,{hint:q.hint,status:Q.status,json:i.json,fields:i.fields})),i.json){let se=q.domain.split(".")[0];w({name:se,results:[q],total:1,available:q.available?1:0},i.fields);return}if(q.available)if(U.stop(`${b.success} ${v.domain(q.domain)} ${b.dot} available ${b.dot} ${v.price(q.price)}/yr`),Se&&!i.json){let{buy:se}=await Promise.resolve().then(()=>(ei(),pi));await se([q.domain],{preChecked:{price:q.price,currency:q.currency}})}else d(),I("Register it:",`domani buy ${q.domain}`),d();else if(q.for_sale?.buyable)if(U.stop(`${b.info} ${v.domain(q.domain)} ${b.dot} ${N.default.cyan("for sale")} ${b.dot} ${v.price(q.for_sale.price)}`),Se&&!i.json){let{buy:se}=await Promise.resolve().then(()=>(ei(),pi));await se([q.domain],{preChecked:{price:q.for_sale.price,currency:q.for_sale.currency,marketplace:!0}})}else d(),I("Buy it:",`domani buy ${q.domain}`),d();else if(q.error)U.stop(`${N.default.dim("?")} ${v.domain(q.domain)} ${b.dot} ${N.default.dim("lookup failed")}`);else{let se;try{if(Y?.ok){let X=await Y.json();X?.title&&(se=X.title)}}catch{}let F=se?` ${b.dot} ${N.default.dim(`"${se}"`)}`:"";U.stop(`${b.error} ${v.domain(q.domain)} ${b.dot} ${N.default.red("taken")}${F}`)}return}let o=e.split(".")[0];if(Se&&!i.json&&r.length>0){let U=new URLSearchParams;U.set("domains",r.map(ie=>`${o}.${ie}`).join(",")),i.maxPrice&&U.set("max_price",i.maxPrice);let Q=await be(`/api/domains/search?${U}`,{headers:{Accept:"text/event-stream"}});if(!Q.ok||!Q.body){u("Search failed",{json:i.json});return}let Y=[],q=new TextDecoder,se="",F="",X=C(!0);X.start(`Checking ${r.length} TLD${r.length>1?"s":""}`);for await(let ie of Q.body){se+=q.decode(ie,{stream:!0});let nt=se.split(`
190
+ `);se=nt.pop()??"";for(let kt of nt)kt.startsWith("event: ")?F=kt.slice(7):kt.startsWith("data: ")&&F==="result"&&Y.push(JSON.parse(kt.slice(6)))}X.stop("");let ee=Math.max(...r.map(ie=>`${o}.${ie}`.length))+2,K=Y.filter(ie=>ie.available),Re=Y.filter(ie=>!ie.available&&!ie.error),Ke=Y.filter(ie=>!ie.available&&ie.for_sale);for(let ie of[...K,...Ke,...Re.filter(nt=>!nt.for_sale)])ie.available?console.log(` ${N.default.green("\u2713")} ${N.default.bold(N.default.white(ie.domain.padEnd(ee)))} ${N.default.green(v.price(ie.price)+"/yr")}`):ie.for_sale?console.log(` ${N.default.cyan("$")} ${N.default.bold(N.default.white(ie.domain.padEnd(ee)))} ${N.default.cyan(v.price(ie.for_sale.price))} ${N.default.dim("(for sale)")}`):console.log(` ${N.default.dim("\u2717")} ${N.default.dim(ie.domain.padEnd(ee))} ${N.default.dim("taken")}`);if(K.length===0){console.log(` ${N.default.dim("No domains available")}`),d();return}let{buy:de}=await Promise.resolve().then(()=>(ei(),pi));if(K.length===1){await de([K[0].domain],{preChecked:{price:K[0].price,currency:K[0].currency}});return}let{select:ae,isCancel:_e}=await Promise.resolve().then(()=>(Ne(),mn)),mt=await ae({message:"Register one?",options:[...K.map(ie=>({value:ie.domain,label:v.domain(ie.domain),hint:v.price(ie.price)+"/yr"})),{value:"__skip__",label:"Skip"}]});if(!_e(mt)&&mt!=="__skip__"){d();let ie=K.find(nt=>nt.domain===mt);await de([mt],{preChecked:ie?{price:ie.price,currency:ie.currency}:void 0})}else d();return}if(Se&&!i.json){let U=await _o();for(i.expand&&U.length>ti&&console.error(N.default.dim(` (--expand: checking the first ${ti} of ${U.length} TLDs - server limit per request)`));;){let Q=i.expand?U.slice(0,ti):U.slice(0,Be),Y=new URLSearchParams;Y.set("domains",Q.map(ae=>`${o}.${ae}`).join(",")),i.maxPrice&&Y.set("max_price",i.maxPrice);let q=C(!0);q.start(`Searching available domains for ${N.default.bold(o)}`);let se=await be(`/api/domains/search?${Y}`,{headers:{Accept:"text/event-stream"}});if(!se.ok||!se.body){q.stop("Search failed");break}q.stop("");let F=!i.expand,{chosen:X,chosenResult:ee,searchAgain:K}=await rc(se.body,o,i.all??!1,F,U);if(X){d();let{buy:ae}=await Promise.resolve().then(()=>(ei(),pi)),_e=ee?{price:ee.price,currency:ee.currency}:void 0;await ae([X],{preChecked:_e});return}if(!K)break;let{text:Re,isCancel:Ke}=await Promise.resolve().then(()=>(Ne(),mn)),de=await Re({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});if(Ke(de)||!de)break;o=de.split(".")[0]}d();return}let a=o,l=await _o(),f=r.length>0?r:i.expand?l.slice(0,ti):l.slice(0,Be);i.expand&&r.length===0&&l.length>ti&&console.error(`(--expand: checking the first ${ti} of ${l.length} TLDs - server limit per request; use --tlds to target others)`);let m=f.map(U=>`${a}.${U}`),g=new URLSearchParams;g.set("domains",m.join(",")),i.maxPrice&&g.set("max_price",i.maxPrice);let y=C(!i.json);y.start(`Searching available domains for ${N.default.bold(a)}`);let k=await be(`/api/domains/search?${g}`,{headers:{Accept:"text/event-stream"}});if(!k.ok){y.stop("Search failed");try{let U=await k.json();u(U.error||U.message||`Server error (${k.status})`,{hint:U.hint,status:k.status,json:i.json,fields:i.fields})}catch{u(`Server error (${k.status})`,{status:k.status,json:i.json,fields:i.fields})}}let $=k.body;$||(y.stop("Search failed"),u("Empty response",{code:"error",json:i.json,fields:i.fields}));let h=[],_=!1,j=0,O=i.all??!1;function A(){_||(_=!0,y.stop(`Checking TLDs for ${N.default.bold(a)}`),d())}function L(U){A(),U.available?console.log(` ${b.success} ${v.domain(U.domain).padEnd(37)} ${v.price(U.price)}${N.default.dim("/yr")}`):U.for_sale?console.log(` ${b.info} ${v.domain(U.domain).padEnd(37)} ${N.default.cyan(v.price(U.for_sale.price))} ${N.default.dim("(for sale)")}`):U.error||console.log(` ${b.error} ${N.default.dim(U.domain.padEnd(38))} ${N.default.red("taken")}`)}function H(){_||y.message(`Checking TLDs for ${N.default.bold(a)} ${N.default.dim(`(${j} checked)`)}`)}let te=new TextDecoder,P="",T="";for await(let U of $){P+=te.decode(U,{stream:!0});let Q=P.split(`
191
+ `);P=Q.pop()??"";for(let Y of Q)if(Y.startsWith("event: "))T=Y.slice(7);else if(Y.startsWith("data: ")){let q=JSON.parse(Y.slice(6));if(T==="error")y.stop("Search failed"),u(q.message||q.error||"Search failed",{code:q.code||"error",json:i.json,fields:i.fields});else if(T==="result")j++,q.available||q.for_sale||O?(i.json||L(q),h.push(q)):i.json||H();else if(T==="done"){if(i.json){h.sort((ee,K)=>ee.price-K.price),w({name:a,results:h,total:q.total,available:q.available},i.fields);return}_&&console.log(` ${N.default.dim("\u2500".repeat(50))}`);let se=q.total-q.available,F=q.total>=5&&se/q.total>=.5,X=`Checked ${q.total} TLDs \xB7 ${q.available} available${F?" \xB7 popular name":""}`;console.log(` ${N.default.dim(X)}`),q.available===0&&!i.expand&&r.length===0&&(d(),I("Try more TLDs:",`domani search ${a} --expand`))}}}d()}ei();G();var hi=D(M(),1);V();ge();es();function jo(e,t,i=process.env){let s=Ft(t,i);if(s!==void 0&&!e)throw new Error("--webhook is required when setting webhook authentication");return{request:{...e?{webhook_url:e}:{},...s!==void 0?{webhook_headers:s}:{}},preview:{...e?{webhook_url:e}:{},...s!==void 0?{webhook_header_names:Mt(s)}:{}}}}async function So(e,t){z(e,t);let i={domain:e};t.slug&&(i.slug=t.slug),t.name&&(i.name=t.name);let s;try{s=jo(t.webhook,t)}catch(a){u(a instanceof Error?a.message:"Invalid webhook headers",{hint:"Set the named environment variable and retry.",code:"validation_error",json:t.json,fields:t.fields})}if(Object.assign(i,s.request),t.years&&(i.years=Number(t.years)),t.paymentMethod&&(i.payment_method=t.paymentMethod),t.dryRun){let a={...i};delete a.webhook_headers,Object.assign(a,s.preview),B("POST /api/agents/provision",a,t.json,t.fields);return}let n=C(!t.json);n.start(`Provisioning ${v.domain(e)}`);let r=await x("/api/agents/provision",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(i)}),o=await r.json();if(r.ok||(n.stop("Provisioning failed"),u(o.error||"Provisioning failed",{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),n.stop(`${v.domain(e)} is ready`),t.json){w(o,t.fields);return}if(d(),S("Agent identity"),c("Domain",`${o.domain} (${o.domain_status})`),c("Mailbox",o.mailbox?hi.default.green(o.mailbox.address):hi.default.yellow("pending DNS")),c("Webhook",o.webhook?o.webhook.url:hi.default.dim("none")),o.webhook?.header_names.length&&c("Webhook auth",o.webhook.header_names.join(", ")),o.webhook?.secret&&c("Signing secret",o.webhook.secret),o.warnings?.length){d();for(let a of o.warnings)Xe(hi.default.yellow(a))}if(o.next_steps?.length){d(),S("Next");for(let a of o.next_steps)Xe(a)}d()}G();var wt=D(M(),1);V();async function Co(e){let t=C(!e.json);t.start("Loading domains");let i=await x("/api/domains"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${s.domains.length} domain(s)`),e.json){w({...s,count:s.domains.length},e.fields);return}if(s.domains.length===0){d(),console.log(` ${wt.default.dim("No domains yet.")} Use: ${wt.default.cyan("domani buy <domain>")}`),d();return}let n=[30,12,12,14];S(`Your Domains (${s.domains.length})`,n.reduce((o,a)=>o+a,0)+n.length-1);let r=s.domains.map(o=>{let a=new Date(o.expiresAt).toLocaleDateString(),l=o.status==="active"?wt.default.green:o.status==="pending"?wt.default.yellow:wt.default.red,f=o.autoRenew?wt.default.green("on"):wt.default.dim("off");return[v.domain(o.domain),l(o.status),f,wt.default.dim(a)]});Z(["Domain","Status","Auto-renew","Expires"],r,n),d()}On();G();var Lt=D(M(),1);V();async function Oo(e){let t=new URLSearchParams;e.maxPrice&&t.set("max_price",e.maxPrice),e.minPrice&&t.set("min_price",e.minPrice),e.sort&&t.set("sort",e.sort),e.search&&t.set("search",e.search),e.limit&&t.set("limit",e.limit),t.set("order","asc");let i=C(!e.json);i.start("Loading TLDs");let s=await be(`/api/tlds?${t}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${n.total} TLDs loaded`),e.json){w(n,e.fields);return}let r=n.tlds;if(r.length===0){d(),console.log(` ${Lt.default.dim("No TLDs match your filters.")}`),d();return}S("TLD Pricing");let o=r.map(a=>[Lt.default.bold(`.${a.tld}`),v.price(a.registration.toFixed(2))+Lt.default.dim("/yr"),Lt.default.dim("renew ")+v.price(a.renewal.toFixed(2))+Lt.default.dim("/yr")]);Z(["TLD","Register","Renewal"],o,[22,16,20]),d(),console.log(` ${Lt.default.dim(`${n.total} TLDs total`)}`),d()}G();var Oe=D(M(),1);V();ge();async function Io(e,t){z(e,t);let i=C(!t.json);i.start(`Looking up ${v.domain(e)}`);let[s,n]=await Promise.all([be(`/api/domains/whois?q=${encodeURIComponent(e)}`),be(`/api/domains/${encodeURIComponent(e)}/og`).catch(()=>null)]),r=await s.json(),o=null;try{n?.ok&&(o=await n.json())}catch{}if(s.ok||(i.stop("Lookup failed"),u(r.error||r.message,{hint:r.hint,status:s.status,json:t.json,fields:t.fields})),i.stop("WHOIS data retrieved"),t.json){w({...r,...o?{og:o}:{}},t.fields);return}if(S(`WHOIS ${v.domain(r.domain)}`),!r.registered){c("Status",`${b.success} ${Oe.default.green("not registered")}`),d(),I("Register it:",`domani buy ${r.domain}`),d();return}if(c("Status",`${b.error} ${Oe.default.red("registered")}`),(o?.title||o?.description)&&(d(),console.log(` ${Oe.default.bold("Website preview")}`),console.log(` ${Oe.default.dim("\u2500".repeat(50))}`),o.title&&c("Title",o.title),o.description&&c("Description",Oe.default.dim(o.description.length>80?o.description.slice(0,80)+"\u2026":o.description)),d()),r.registrar&&c("Registrar",r.registrar),r.created&&c("Created",r.created),r.expires&&c("Expires",r.expires),r.days_until_expiry!=null){let l=r.days_until_expiry,f=l<30?Oe.default.red:l<90?Oe.default.yellow:Oe.default.green;c("Days left",f(String(l)))}r.updated&&c("Updated",r.updated),c("DNSSEC",r.dnssec?Oe.default.green("yes"):Oe.default.dim("no")),r.nameservers?.length>0&&c("Nameservers",r.nameservers.map(l=>Oe.default.cyan(l)).join(Oe.default.dim(", "))),r.status?.length>0&&c("Status codes",Oe.default.dim(r.status.join(", ")));let a=r.contacts?.registrant;a&&!r.redacted?(d(),console.log(` ${Oe.default.bold("Registrant")}`),console.log(` ${Oe.default.dim("\u2500".repeat(50))}`),a.name&&c("Name",a.name),a.organization&&c("Organization",a.organization),a.email&&c("Email",v.url(a.email)),a.country&&c("Country",a.country)):r.redacted&&c("Contact",Oe.default.dim("redacted (WHOIS privacy)")),d()}G();Ne();var vt=D(M(),1);V();ge();async function Ro(e,t){if(!e){Se||u("Missing required argument: prompt",{hint:'Usage: domani suggest "describe your project"',code:"missing_argument",json:t.json});let h=await Te({message:"Describe your project or idea",placeholder:"e.g. AI coding assistant, pet food delivery..."});(le(h)||!h)&&process.exit(0),e=h}let i=new URLSearchParams({prompt:e});if(t.count&&i.set("count",t.count),t.tlds&&i.set("tlds",t.tlds),t.tlds&&Qi(t.tlds.split(",").map(h=>h.trim()),t),t.style&&i.set("style",t.style),t.lang&&i.set("lang",t.lang),t.json){let h=C(!1);h.start("Finding available domains");let _=t.timeout?parseInt(t.timeout,10)*1e3:6e4,j;try{j=await be(`/api/domains/suggest?${i}`,{signal:AbortSignal.timeout(_)})}catch{h.stop("Failed"),u("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout",json:t.json,fields:t.fields})}let O=await j.json();j.ok||(h.stop("Failed"),u(O.error||O.message,{hint:O.hint,status:j.status,json:t.json,fields:t.fields})),w(O,t.fields);return}let s=C(!0);s.start("Finding available domains");let n=t.timeout?parseInt(t.timeout,10)*1e3:6e4,r;try{r=await be(`/api/domains/suggest?${i}`,{headers:{Accept:"text/event-stream"},signal:AbortSignal.timeout(n)})}catch{s.stop("Failed"),u("Request timed out",{hint:"Suggest took too long. Try --timeout <seconds> to increase.",code:"timeout"})}if(!r.ok){s.stop("Failed");try{let h=await r.json();u(h.error||h.message||`Server error (${r.status})`,{hint:h.hint,status:r.status})}catch{u(`Server error (${r.status})`,{status:r.status})}}let o=r.body;o||(s.stop("Failed"),u("Empty response"));let a=[],l=[],f=!1,m=0;function g(){f||(f=!0,s.stop("Finding available domains"),d())}let y=new TextDecoder,k="",$="";for await(let h of o){k+=y.decode(h,{stream:!0});let _=k.split(`
192
+ `);k=_.pop()??"";for(let j of _)if(j.startsWith("event: "))$=j.slice(7);else if(j.startsWith("data: "))try{let O=JSON.parse(j.slice(6));if($==="result")m++,O.available?a.push(O):l.push(O),f||s.message(`Finding available domains ${vt.default.dim(`(${m} checked, ${a.length} available)`)}`);else if($==="iteration")f||s.message(`Finding available domains ${vt.default.dim(`(round ${O.n})`)}`);else if($==="done"){g();for(let A of a){let L=A.reason?` ${vt.default.dim(A.reason)}`:"";console.log(` ${b.success} ${v.domain(A.domain).padEnd(37)} ${v.price(A.price)}${vt.default.dim("/yr")}${L}`)}for(let A of l)console.log(` ${b.error} ${vt.default.dim(A.domain.padEnd(38))} ${vt.default.red("taken")}`);console.log(` ${vt.default.dim("\u2500".repeat(50))}`),console.log(` ${vt.default.dim(`Found ${O.total} available \xB7 checked ${O.checked} \xB7 ${O.iterations} round${O.iterations>1?"s":""}`)}`)}else $==="error"&&(f||s.stop("Failed"),u(O.message))}catch{}}a.length===0&&l.length===0&&(f||s.stop("No results"),u("Could not find available domains for this prompt.")),d(),a.length>0&&(I("Register one:",`domani buy ${a[0].domain}`),d())}$n();Rn();G();Ne();var lt=D(M(),1);V();ge();ri();async function Ao(e){let t=e.maxConsecutiveFailures??10,i=0;for(let s=1;s<=e.maxAttempts;s++){let n=await e.fetchPlan().catch(()=>null);if(e.onTick?.(n,s),n!==null){if(i=0,e.isEligible(n))return{status:"eligible",plan:n}}else if(i++,i>=t)return{status:"unreachable",failures:i};s<e.maxAttempts&&await e.sleep(e.intervalMs)}return{status:"timeout",attempts:e.maxAttempts}}var gi=D(M(),1);V();function yi(e){if(e){d(),console.log(` ${gi.default.bold(`Exit path (${e.managed_via})`)}`),console.log(` ${gi.default.dim("Unlock:")} ${e.unlock}`),console.log(` ${gi.default.dim("Auth code:")} ${e.auth_code}`);for(let t of e.notes||[])console.log(` ${gi.default.yellow("!")} ${t}`)}}var oc=6e4,ac=1440;async function Eo(e,t){z(e,t);let i=C(!t.json);i.start(`Planning safe adoption for ${v.domain(e)}`);let s=await x(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Check failed"),u(n.error,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),n.options?.transfer?.eligible)i.stop(`${b.success} Eligible for transfer`);else{i.stop(`${b.error} Not eligible`);let a=n.options?.transfer;if(t.watch&&a?.eligible_at){let l=await x("/api/domains/transfer-watch",{method:"POST",body:JSON.stringify({domain:e})}),f=await l.json();if(l.ok||u(f.error||f.message,{hint:f.hint,status:l.status,json:t.json,fields:t.fields}),t.json){w(f,t.fields);return}S("Transfer Watch Registered"),c("Domain",v.domain(e)),c("Eligible from",f.eligible_at||a.eligible_at),f.hint&&(d(),console.log(` ${lt.default.dim(f.hint)}`)),d();return}if(t.watch){t.json||(console.log(` ${lt.default.dim(a?.reason||"Domain is not eligible for transfer yet.")}`),yi(a?.guidance),d());let l=C(!t.json);l.start(`Watching ${v.domain(e)} until it becomes transferable (every 60s, Ctrl+C to stop)`);let f=await Ao({fetchPlan:async()=>{let m=await x(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`);return m.ok?m.json():null},isEligible:m=>!!m.options?.transfer?.eligible,sleep:m=>new Promise(g=>setTimeout(g,m)),intervalMs:oc,maxAttempts:ac});f.status!=="eligible"&&(l.stop(`${b.error} Watch ended`),u(f.status==="timeout"?"Domain did not become eligible within 24 hours.":"Gave up after repeated failures fetching the adoption plan.",{hint:"The transfer lock is disabled at the losing registrar; rerun with --watch once you have flipped it.",code:f.status==="timeout"?"watch_timeout":"watch_unreachable",json:t.json,fields:t.fields})),n=f.plan,l.stop(`${b.success} Now eligible for transfer`)}else{t.json||yi(a?.guidance);let l=a?.eligible_at?`Eligible from ${a.eligible_at}. Rerun with --watch to register a server watch (email + webhook when the date arrives).`:"Fix the blocker above, then rerun - or rerun with --watch to poll until the domain becomes eligible and continue automatically.",f=t.json&&a?.guidance?` The registrar exit playbook is in the adoption plan (options.transfer.guidance, \`domani adopt ${e} --json\`).`:"";u(a?.reason||"Domain is not eligible for transfer.",{hint:[l+f,...n.warnings?.length?[n.warnings.join(" ")]:[]].join(" "),code:"not_eligible",json:t.json,fields:t.fields})}}if(t.dryRun)return B("transfer",{domain:e,eligible:!0,price:n.options.transfer.price,currency:n.options.transfer.currency||"USD",includes_renewal:!0,preserves_nameservers:!0,migrates_dns:!1,nameservers:n.current.nameservers,dns_provider:n.current.dns_provider,dnssec_enabled:n.current.dnssec_enabled},t.json,t.fields);if(!Nt(t)){S("Transfer Safety Plan"),c("Registrar",n.current.registrar||"Unknown"),c("DNS provider",n.current.dns_provider),c("Nameservers",`${n.current.nameservers.length} preserved`),c("DNSSEC",n.current.dnssec_enabled?lt.default.yellow("Enabled, DS will be verified"):"Not enabled"),c("DNS migration","Not requested"),d();let a=n.options.transfer.price!=null?` for ${v.price(n.options.transfer.price.toFixed(2))}`:"",l=await Ye({message:`Transfer ${lt.default.bold(e)} to ${Jt}${a}? Nameservers stay unchanged and 1 year is included.`});if(!l||typeof l=="symbol"){console.log(` ${lt.default.dim("Cancelled.")}`);return}}if(!t.authCode){(t.json||!process.stdout.isTTY)&&u("--auth-code is required",{hint:"The safety plan passed. Get the EPP/auth code from the current registrar and retry.",code:"validation_error",json:t.json,fields:t.fields}),n.options?.transfer?.guidance&&console.log(` ${lt.default.dim("Where to get it:")} ${n.options.transfer.guidance.auth_code}`);let a=await Te({message:"Enter the EPP/auth code from your current registrar:",validate:l=>!l||l.trim().length===0?"Auth code is required":void 0});le(a)&&process.exit(0),t.authCode=a}i.start(`Initiating transfer for ${v.domain(e)}`);let r=await x("/api/domains/transfer",{method:"POST",body:JSON.stringify({domain:e,auth_code:t.authCode})}),o=await r.json();if(r.ok||(i.stop("Transfer failed"),u(o.error||o.message,{hint:o.hint,fixUrl:o.setup_url||o.payment_options?.card?.setup_url,status:r.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Transfer initiated`),t.json){w(o,t.fields);return}S("Transfer Initiated"),c("Domain",v.domain(o.domain)),c("Status",lt.default.yellow(o.status||"pending")),o.price&&c("Price",v.price(o.price)+lt.default.dim(` ${o.currency||"USD"}`)),o.payment_method&&c("Payment",o.payment_method),o.expires&&c("Expires",new Date(o.expires).toLocaleDateString()),o.hint&&(d(),console.log(` ${lt.default.dim(o.hint)}`)),d(),I("Check transfer progress:",`domani status ${o.domain}`),d()}G();var bi=D(M(),1);V();ge();async function To(e,t){z(e,t);let i=C(!t.json);i.start(`Inspecting ${v.domain(e)}`);let s=await x(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Inspection failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Adoption plan ready`),t.json){w(n,t.fields);return}if(S(`Adopt ${v.domain(n.domain)}`),c("Registrar",n.current.registrar||"Unknown"),c("DNS provider",n.current.dns_provider),c("Nameservers",n.current.nameservers.join(", ")||"None detected"),c("DNSSEC",n.current.dnssec_enabled?bi.default.yellow("Enabled"):"Not enabled"),c("Account",n.account_state),c("Recommended",bi.default.cyan(n.recommended_action)),d(),n.recommended_action==="connect"&&I("Connect free, without changing registrar or DNS:",`domani import ${n.domain}`),n.options.transfer.available){let r=n.options.transfer.price==null?"price unavailable":`$${n.options.transfer.price.toFixed(2)} ${n.options.transfer.currency}`;I(`Transfer registration for ${r}, preserving nameservers:`,`domani transfer ${n.domain}`),!n.options.transfer.eligible&&n.options.transfer.reason&&(console.log(` ${bi.default.yellow("!")} ${n.options.transfer.reason}`),I("Wait for eligibility and transfer in one go:",`domani transfer ${n.domain} --watch`)),yi(n.options.transfer.guidance)}for(let r of n.warnings||[])console.log(` ${bi.default.yellow("!")} ${r}`);d()}G();Ne();var os=D(M(),1);V();ge();Ze();async function Po(e,t){e||(e=await fe()),z(e,t);let i=t.years?parseInt(t.years,10):1;if((isNaN(i)||i<1||i>10)&&u("--years must be between 1 and 10",{code:"validation_error",json:t.json,fields:t.fields}),t.dryRun)return B("renew",{domain:e,years:i},t.json,t.fields);if(!Nt(t)){let o=await Ye({message:`Renew ${os.default.bold(e)} for ${i} year${i>1?"s":""}? You will be charged.`});if(!o||typeof o=="symbol"){console.log(` ${os.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start(`Renewing ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}/renew`,{method:"POST",body:JSON.stringify({years:i})}),r=await n.json();if(n.ok||(s.stop("Renewal failed"),u(r.error||r.message,{hint:r.hint,fixUrl:r.setup_url||r.payment_options?.card?.setup_url,status:n.status,json:t.json,fields:t.fields})),s.stop(`${b.success} Domain renewed`),t.json){w(r,t.fields);return}S("Renewal Complete"),c("Domain",v.domain(r.domain)),c("Years",String(r.renewed_years)),c("New expiry",new Date(r.new_expiry).toLocaleDateString()),r.price&&c("Price",v.price(r.price)+os.default.dim(` ${r.currency||"USD"}`)),r.payment_method&&c("Payment",r.payment_method),d(),I("Verify renewal:",`domani status ${r.domain}`),d()}G();var dt=D(M(),1);V();ge();async function Do(e,t){e||u("Domain is required",{hint:`Usage: domani import <domain>
193
+ domani import <domain> --verify`,code:"validation_error",json:t.json,fields:t.fields}),z(e,t);let i=t.verify?"/api/domains/import/verify":"/api/domains/import",s=C(!t.json);s.start(t.verify?`Verifying ownership of ${v.domain(e)}`:`Initiating import for ${v.domain(e)}`);let n=await x(i,{method:"POST",body:JSON.stringify({domain:e})}),r=await n.json();if(n.ok||(s.stop(t.verify?"Verification failed":"Import failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields})),t.json){s.stop(""),w(r,t.fields);return}t.verify?(s.stop(`${b.success} ${v.domain(e)} imported!`),S("Domain Imported"),c("Domain",v.domain(r.domain)),c("Status",dt.default.green(r.status||"active")),r.expires_at&&c("Expires",new Date(r.expires_at).toLocaleDateString()),r.registrar&&c("Registrar",r.registrar),d(),I("Check domain health:",`domani status ${r.domain}`),d()):(s.stop(`${b.success} Verification record ready`),S("Import Domain"),c("Domain",v.domain(r.domain)),c("Status",dt.default.yellow("pending verification")),d(),console.log(" Add this TXT record at your DNS provider:"),d(),console.log(` ${dt.default.dim("Type:")} ${dt.default.bold("TXT")}`),console.log(` ${dt.default.dim("Name:")} ${dt.default.bold(r.txt_record?.name||"@")}`),console.log(` ${dt.default.dim("Value:")} ${dt.default.bold(r.txt_record?.value||`domani-verify=${r.token}`)}`),d(),console.log(` ${dt.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),d(),I("Once the record is set, verify:",`domani import ${e} --verify`),d())}jn();gt();V();function No(e){let t=Ve();if(t||(d(),u("Not logged in",{hint:"Run 'domani login' first",code:"auth_required",json:e.json})),!e.reveal&&!e.json&&process.stdout.isTTY){let i=`${t.slice(0,12)}...${t.slice(-4)}`;console.log(i),console.log("Run 'domani token --reveal' to print the full key.");return}e.json?w({token:t}):console.log(t)}G();var qe=D(M(),1);V();async function Uo(e,t){switch(e){case void 0:case"list":return lc(t.json,t.fields);case"create":return dc(t);case"revoke":return cc(t);default:u(`Unknown action: ${e}`,{hint:"Actions: list, create, revoke",code:"validation_error",json:t.json,fields:t.fields})}}async function lc(e,t){let i=C(!e);i.start("Loading tokens");let s=await x("/api/tokens"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${b.success} ${n.tokens.length} token(s)`),e){w(n,t);return}if(n.tokens.length===0){d(),console.log(` ${qe.default.dim("No tokens.")}`),d(),I("Create one:",'domani tokens create --name "My App"'),d();return}d(),S("API Tokens");let r=n.tokens.map(o=>{let a;o.expired?a=qe.default.red("Expired"):o.expiresAt?a=qe.default.dim(`Expires ${new Date(o.expiresAt).toLocaleDateString()}`):a=qe.default.dim("No expiration");let l=o.scopes.includes("*")?qe.default.dim("all"):qe.default.dim(o.scopes.join(", "));return[qe.default.dim(o.id),qe.default.bold(o.name),o.agent_identity?qe.default.dim(o.agent_identity.name||o.agent_identity.slug):qe.default.dim("\u2014"),l,a]});Z(["ID","Name","Agent","Scopes","Expiration"],r,[28,16,18,32,20]),d()}async function dc(e){let t={};if(e.name&&(t.name=e.name),e.scopes&&(t.scopes=e.scopes.split(",").map(r=>r.trim())),e.expiresIn){let r=Number(e.expiresIn);(isNaN(r)||r<3600||r>31536e3)&&u("Invalid --expires-in value",{hint:"Must be between 3600 (1 hour) and 31536000 (1 year) seconds",code:"validation_error",json:e.json,fields:e.fields}),t.expires_in=r}e.agentIdentity&&(t.agent_identity_id=e.agentIdentity);let i=C(!e.json);i.start("Creating token");let s=await x("/api/tokens",{method:"POST",body:JSON.stringify(t)}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Token created`),e.json){w(n,e.fields);return}d(),S("Token Created"),c("ID",n.id),c("Name",n.name),c("Scopes",n.scopes?.includes("*")?"All (full access)":n.scopes?.join(", ")||"All"),n.agent_identity&&c("Agent",n.agent_identity.name||n.agent_identity.slug),c("Expires",n.expiresAt?new Date(n.expiresAt).toLocaleString():"Never"),d(),console.log(` ${qe.default.yellow("!")} ${qe.default.bold("Key:")} ${n.key}`),console.log(` ${qe.default.dim("Save this key - it will not be shown again.")}`),d()}async function cc(e){e.tokenId||u("Token ID required",{hint:`Usage: domani tokens revoke --token-id <id>
194
+ Run 'domani tokens list' to see your tokens.`,code:"validation_error",json:e.json,fields:e.fields});let t=C(!e.json);t.start("Revoking token");let i=await x(`/api/tokens/${encodeURIComponent(e.tokenId)}`,{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${b.success} Token revoked`),e.json){w(s,e.fields);return}console.log(` ${qe.default.dim("Any applications using this key will need a new one.")}`),d()}G();var Ie=D(M(),1);V();ge();Ze();async function qo(e,t){e||(e=await fe()),z(e,t);let i=t.autoRenew!==void 0,s=t.whoisPrivacy!==void 0,n=t.securityLock!==void 0;if(!i&&!s&&!n)return uc(e,t.json,t.fields);let r={};if(i){let f=Tn(t.autoRenew);f===null&&u("--auto-renew must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.auto_renew=f}if(s){let f=Tn(t.whoisPrivacy);f===null&&u("--whois-privacy must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.whois_privacy=f}if(n){let f=Tn(t.securityLock);f===null&&u("--security-lock must be on or off",{code:"validation_error",json:t.json,fields:t.fields}),r.security_lock=f}if(t.dryRun)return B("settings_update",{domain:e,...r},t.json,t.fields);let o=C(!t.json);o.start(`Updating ${v.domain(e)}`);let a=await x(`/api/domains/${encodeURIComponent(e)}/settings`,{method:"PUT",body:JSON.stringify(r)}),l=await a.json();if(a.ok||(o.stop("Failed"),u(l.error||l.message,{hint:l.hint,status:a.status,json:t.json,fields:t.fields})),o.stop(`${b.success} Settings updated`),t.json){w(l,t.fields);return}S("Settings Updated"),c("Domain",v.domain(l.domain)),l.auto_renew!==void 0&&c("Auto-renew",l.auto_renew?Ie.default.green("on"):Ie.default.dim("off")),l.whois_privacy!==void 0&&c("WHOIS privacy",l.whois_privacy?Ie.default.green("on"):Ie.default.dim("off")),l.security_lock!==void 0&&c("Security lock",l.security_lock?Ie.default.green("locked"):Ie.default.dim("unlocked")),l.hint&&c("",Ie.default.dim(l.hint)),d()}async function uc(e,t,i){let s=C(!t);s.start(`Loading ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop(`${b.success} ${v.domain(e)}`),t){w(r,i);return}S("Domain Settings"),c("Domain",v.domain(r.domain)),c("Status",r.status==="active"?Ie.default.green(r.status):Ie.default.yellow(r.status)),c("Auto-renew",r.auto_renew?Ie.default.green("on"):Ie.default.dim("off")),r.registrar&&(c("WHOIS privacy",r.registrar.whois_privacy?Ie.default.green("on"):Ie.default.dim("off")),c("Security lock",r.registrar.security_lock?Ie.default.green("locked"):Ie.default.dim("unlocked"))),c("Expires",new Date(r.expires_at).toLocaleDateString()+Ie.default.dim(` (${r.days_until_expiry} days)`)),d(),I("Toggle auto-renew:",`domani settings ${e} --auto-renew off`),I("Toggle WHOIS privacy:",`domani settings ${e} --whois-privacy off`),I("Toggle security lock:",`domani settings ${e} --security-lock off`),I("Get transfer auth code:",`domani auth-code ${e}`),d()}function Tn(e){let t=e.toLowerCase();return t==="on"||t==="true"||t==="1"||t==="enable"?!0:t==="off"||t==="false"||t==="0"||t==="disable"?!1:null}G();var Vt=D(M(),1);V();ge();Ze();async function Fo(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Getting auth code for ${v.domain(e)}`);let s=await x(`/api/domains/${encodeURIComponent(e)}/auth-code`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Auth code retrieved`),t.json){w(n,t.fields);return}if(S("Auth Code"),c("Domain",v.domain(n.domain)),c("Auth code",Vt.default.bold(Vt.default.green(n.auth_code))),n.was_unlocked&&c("",Vt.default.yellow("Domain was automatically unlocked to allow transfer.")),n.hint&&(d(),console.log(` ${Vt.default.dim(n.hint)}`)),n.next_steps?.length){d();for(let r of n.next_steps)console.log(` ${Vt.default.dim("\u2192")} ${Vt.default.dim(r)}`)}d(),I("Check transfer status:",`domani transfer-away ${e}`),I("Re-lock domain:",`domani settings ${e} --security-lock on`),d()}G();var $t=D(M(),1);V();ge();Ze();var mc={none:$t.default.dim,pending:$t.default.yellow,approved:$t.default.yellow,completed:$t.default.green,rejected:$t.default.red,expired:$t.default.red};async function Mo(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Checking transfer status for ${v.domain(e)}`);let s=await x(`/api/domains/${encodeURIComponent(e)}/transfer-away`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} ${v.domain(e)}`),t.json){w(n,t.fields);return}S("Transfer Away Status"),c("Domain",v.domain(n.domain));let r=mc[n.status]||$t.default.dim;c("Status",r(n.status)),n.gaining_registrar&&c("New registrar",n.gaining_registrar),n.request_date&&c("Requested",new Date(n.request_date).toLocaleDateString()),n.hint&&(d(),console.log(` ${$t.default.dim(n.hint)}`)),d(),n.status==="none"?I("Get auth code to start:",`domani auth-code ${e}`):n.status==="pending"||n.status==="approved"?I("Check again later:",`domani transfer-away ${e}`):n.status==="completed"?I("Search for a new domain:","domani search <name>"):(n.status==="rejected"||n.status==="expired")&&I("Retry with a new auth code:",`domani auth-code ${e}`),d()}G();Ne();var as=D(M(),1);V();async function Lo(e,t){return e==="set"?pc(t):fc(t)}async function fc(e){let t=C(!e.json);t.start("Loading contact info");let i=await x("/api/me/contact"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${b.success} Contact info`),e.json){w(s,e.fields);return}if(S("Contact Info"),!s.has_contact){console.log(` ${b.warning} ${as.default.yellow("No contact info set.")} Run ${as.default.bold("domani contact set")} to add.`),d(),console.log(` ${as.default.dim("Contact info is required before purchasing domains.")}`),d();return}let n=s.contact;c("Name",`${n.first_name} ${n.last_name}`),n.org_name&&c("Organization",n.org_name),c("Address",n.address1),n.address2&&c("",n.address2),c("",`${n.city}, ${n.state} ${n.postal_code}`),c("Country",n.country),c("Phone",n.phone),c("Email",n.email),d()}async function pc(e){let t={},i=e.firstName||e.lastName||e.address1;if(!Se&&!i&&u("Missing required flags for contact set",{hint:"Usage: domani contact set --first-name John --last-name Doe --address1 '123 Main St' --city SF --state CA --postal-code 94105 --country US --phone +1.5551234567 --email john@example.com",code:"missing_argument",json:e.json}),i){let a=["firstName","lastName","address1","city","state","postalCode","country","phone","email"],l={firstName:"first_name",lastName:"last_name",orgName:"org_name",address1:"address1",address2:"address2",city:"city",state:"state",postalCode:"postal_code",country:"country",phone:"phone",email:"email"},f=a.filter(m=>!e[m]);f.length>0&&u(`Missing required flags: ${f.map(m=>`--${m.replace(/[A-Z]/g,g=>`-${g.toLowerCase()}`)}`).join(", ")}`,{code:"missing_argument",json:e.json});for(let[m,g]of Object.entries(l)){let y=e[m];y&&(t[g]=y)}}else{let a=await x("/api/me/contact"),f=(a.ok?await a.json():null)?.contact,m=[{key:"first_name",message:"First name",placeholder:"John",required:!0},{key:"last_name",message:"Last name",placeholder:"Doe",required:!0},{key:"org_name",message:"Organization (optional, press Enter to skip)",placeholder:"Acme Inc.",required:!1},{key:"address1",message:"Address line 1",placeholder:"123 Main St",required:!0},{key:"address2",message:"Address line 2 (optional)",placeholder:"Suite 100",required:!1},{key:"city",message:"City",placeholder:"San Francisco",required:!0},{key:"state",message:"State / Province",placeholder:"CA",required:!0},{key:"postal_code",message:"Postal / ZIP code",placeholder:"94105",required:!0},{key:"country",message:"Country code (ISO 3166-1 alpha-2)",placeholder:"US",required:!0},{key:"phone",message:"Phone (+CC.NUMBER)",placeholder:"+1.5551234567",required:!0},{key:"email",message:"Contact email",placeholder:"john@example.com",required:!0}];for(let g of m){let y=f?.[g.key]||"",k=await Te({message:g.message,placeholder:g.placeholder,defaultValue:y,validate:g.required?h=>h?.trim()?void 0:`${g.message} is required`:void 0});le(k)&&process.exit(0);let $=k.trim();$&&(t[g.key]=$)}}if(e.dryRun)return B("contact_set",t,e.json,e.fields);let s=C(!e.json);s.start("Saving contact info");let n=await x("/api/me/contact",{method:"PUT",body:JSON.stringify(t)}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Contact info saved`),e.json){w(r,e.fields);return}S("Contact Saved");let o=r.contact;c("Name",`${o.first_name} ${o.last_name}`),o.org_name&&c("Organization",o.org_name),c("Address",o.address1),o.address2&&c("",o.address2),c("",`${o.city}, ${o.state} ${o.postal_code}`),c("Country",o.country),c("Phone",o.phone),c("Email",o.email),d(),I("Search for a domain:","domani search <name>"),d()}G();var Pe=D(M(),1);V();ge();Ze();async function Ho(e,t,i,s){if(e||(e=await fe()),z(e,s),!t)return hc(e,s.json,s.fields);switch(t){case"enable":case"on":return s.dryRun?B("parking_enable",{domain:e},s.json,s.fields):Vo(e,!0,s.json,s.fields);case"disable":case"off":return s.dryRun?B("parking_disable",{domain:e},s.json,s.fields):Vo(e,!1,s.json,s.fields);case"price":{i||u("Price required",{hint:"Usage: domani parking <domain> price <amount>",code:"validation_error",json:s.json,fields:s.fields});let n=parseFloat(i);return(isNaN(n)||n<=0)&&u("Price must be a positive number",{hint:`Got: "${i}"`,code:"validation_error",json:s.json,fields:s.fields}),s.dryRun?B("parking_price",{domain:e,price:n},s.json,s.fields):Wo(e,n,s.json,s.fields)}case"unprice":case"unlist":return s.dryRun?B("parking_unlist",{domain:e},s.json,s.fields):Wo(e,null,s.json,s.fields);default:u(`Unknown action: ${t}`,{hint:"Actions: enable, disable, price <amount>, unprice",code:"validation_error",json:s.json,fields:s.fields})}}async function hc(e,t,i){let s=C(!t);s.start(`Loading ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}`),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t,fields:i})),s.stop(`${b.success} ${v.domain(e)}`),t){w({domain:r.domain,parking_enabled:r.parking_enabled,listing_price:r.listing_price},i);return}S("Parking"),c("Domain",v.domain(r.domain)),c("Parking",r.parking_enabled?Pe.default.green("enabled"):Pe.default.dim("disabled")),c("Listing",r.listing_price?`${v.price(r.listing_price)} ${Pe.default.dim("(for sale)")}`:Pe.default.dim("not listed")),d(),I("Enable parking:",`domani parking ${e} enable`),I("Set sale price:",`domani parking ${e} price 499`),I("View analytics:",`domani analytics ${e}`),d()}async function Vo(e,t,i,s){let n=C(!i);n.start(`${t?"Enabling":"Disabling"} parking for ${v.domain(e)}`);let r=await x(`/api/domains/${encodeURIComponent(e)}/parking`,{method:"PUT",body:JSON.stringify({enabled:t})}),o=await r.json();if(r.status===409&&o.requires_confirmation){if(n.stop(`${b.warning} DNS records will be replaced`),i){w(o,s);return}console.log(`
195
+ ${Pe.default.yellow("Enabling parking will replace these DNS records:")}`);for(let a of o.existing_dns||[])console.log(` ${Pe.default.dim(a.type)} ${a.name} ${Pe.default.dim("\u2192")} ${a.value}`);console.log(`
196
+ ${Pe.default.dim("Run again with --confirm to proceed (not implemented yet).")}`),console.log(` ${Pe.default.dim("Or use the dashboard to confirm.")}`),d();return}if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i,fields:s})),n.stop(`${b.success} Parking ${t?"enabled":"disabled"}`),i){w(o,s);return}S("Parking Updated"),c("Domain",v.domain(o.domain)),c("Parking",o.parking_enabled?Pe.default.green("enabled"):Pe.default.dim("disabled")),o.hint&&c("",Pe.default.dim(o.hint)),d()}async function Wo(e,t,i,s){let n=C(!i);n.start(t!==null?`Setting price for ${v.domain(e)} to ${v.price(t)}`:`Removing listing for ${v.domain(e)}`);let r=await x(`/api/domains/${encodeURIComponent(e)}/parking`,{method:"PUT",body:JSON.stringify({listing_price:t})}),o=await r.json();if(r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i,fields:s})),n.stop(`${b.success} ${t!==null?"Price set":"Listing removed"}`),i){w(o,s);return}S("Listing Updated"),c("Domain",v.domain(o.domain)),c("Listing",o.listing_price?`${v.price(o.listing_price)} ${Pe.default.dim("(for sale)")}`:Pe.default.dim("not listed")),o.hint&&c("",Pe.default.dim(o.hint)),d()}G();var Ge=D(M(),1);V();ge();Ze();var gc=" \u2581\u2582\u2583\u2584\u2585\u2586\u2587\u2588";function yc(e){let t=Math.max(...e,1);return e.map(i=>gc[Math.min(Math.round(i/t*8),8)]).join("")}async function Jo(e,t){e||(e=await fe()),z(e,t);let i=C(!t.json);i.start(`Loading analytics for ${v.domain(e)}`);let s=await x(`/api/domains/${encodeURIComponent(e)}/analytics`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop("Analytics loaded"),t.json){w(n,t.fields);return}if(d(),S(`Analytics: ${v.domain(e)}`),c("Views (7d)",Ge.default.cyan(n.views_7d.toLocaleString())),c("Views (30d)",Ge.default.cyan(n.views_30d.toLocaleString())),c("Inquiries",Ge.default.cyan(String(n.inquiries_30d))),c("Conversion",n.conversion_rate>0?Ge.default.green(`${n.conversion_rate}%`):Ge.default.dim("0%")),n.daily_views&&n.daily_views.length>0){let r=n.daily_views.map(f=>f.views),o=yc(r),a=n.daily_views[0].date.slice(5),l=n.daily_views[n.daily_views.length-1].date.slice(5);d(),console.log(` ${Ge.default.dim(a)} ${Ge.default.cyan(o)} ${Ge.default.dim(l)}`)}if(n.recent_inquiries&&n.recent_inquiries.length>0){d(),console.log(` ${Ge.default.bold("Recent Inquiries")}`);let r=n.recent_inquiries.map(o=>[Ge.default.dim(o.email),o.offer?v.price(o.offer):Ge.default.dim("-"),Ge.default.dim(new Date(o.date).toLocaleDateString())]);Z(["Email","Offer","Date"],r,[30,12,14])}d(),I("Set a listing price:",`domani parking ${e} price <amount>`),I("Set up email:",`domani email setup ${e}`),I("Domain settings:",`domani settings ${e}`),d()}G();var pe=D(M(),1);V();es();async function Bo(e,t){switch(e){case void 0:case"list":return wc(t.json,t.fields);case"create":return vc(t);case"update":return $c(t);case"delete":return kc(t);case"deliveries":return _c(t);case"replay":return bc(t);case"events":return xc(t.json,t.fields);default:u(`Unknown action: ${e}`,{hint:"Actions: list, create, update, delete, deliveries, replay, events",code:"validation_error",json:t.json,fields:t.fields})}}async function bc(e){(!e.webhookId||!e.deliveryId||!e.idempotencyKey)&&u("Webhook ID, delivery ID, and idempotency key are required",{hint:"Usage: domani webhooks replay --webhook-id <id> --delivery-id <id> --idempotency-key <stable-key>",code:"validation_error",json:e.json,fields:e.fields});let t=C(!e.json);t.start("Replaying webhook delivery");let i=await x(`/api/webhooks/${encodeURIComponent(e.webhookId)}/deliveries/${encodeURIComponent(e.deliveryId)}/replay`,{method:"POST",body:JSON.stringify({idempotency_key:e.idempotencyKey})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${b.success} Webhook replay ${s.status}`),e.json)return w(s,e.fields);S("Webhook Replay Receipt"),c("Delivery",s.delivery_id),c("Original",s.original_delivery_id),c("Status",s.status),c("Attempts",s.attempts),c("Idempotent retry",s.idempotent_replay?"yes":"no"),d()}async function wc(e,t){let i=C(!e);i.start("Loading webhooks");let s=await x("/api/webhooks"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${b.success} ${n.webhooks.length} webhook(s)`),e){w(n,t);return}if(n.webhooks.length===0){d(),console.log(` ${pe.default.dim("No webhooks configured.")}`),d(),I("Create one:","domani webhooks create --url https://... --events domain.purchased,dns.updated"),I("List events:","domani webhooks events"),d();return}d(),S("Webhooks");let r=n.webhooks.map(o=>[pe.default.dim(o.id),v.url(o.url),o.events.length<=3?o.events.join(", "):`${o.events.length} events`,o.header_names?.join(", ")||pe.default.dim("none"),o.active?pe.default.green("active"):pe.default.dim("paused")]);Z(["ID","URL","Events","Auth headers","Status"],r,[28,40,24,20,10]),d()}async function vc(e){e.url||u("URL required",{hint:"Usage: domani webhooks create --url https://example.com/hook --events domain.purchased,dns.updated",code:"validation_error",json:e.json,fields:e.fields}),e.events||u("Events required",{hint:`Usage: domani webhooks create --url https://... --events domain.purchased,dns.updated
197
+ Run 'domani webhooks events' to see available event types.`,code:"validation_error",json:e.json,fields:e.fields});let t=e.events.split(",").map(o=>o.trim()),i;try{i=Ft(e)}catch(o){u(o instanceof Error?o.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(e.dryRun)return B("webhook_create",{url:e.url,events:t,header_names:Mt(i)},e.json,e.fields);let s=C(!e.json);s.start("Creating webhook");let n=await x("/api/webhooks",{method:"POST",body:JSON.stringify({url:e.url,events:t,...i!==void 0?{headers:i}:{}})}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields})),s.stop(`${b.success} Webhook created`),e.json){w(r,e.fields);return}d(),S("Webhook Created"),c("ID",r.id),c("URL",v.url(r.url)),c("Events",r.events.join(", ")),c("Auth headers",r.header_names?.join(", ")||pe.default.dim("none")),c("Status",pe.default.green("active")),d(),console.log(` ${pe.default.yellow("!")} ${pe.default.bold("Secret:")} ${r.secret}`),console.log(` ${pe.default.dim("Save this secret - it won't be shown again.")}`),console.log(` ${pe.default.dim("Use it to verify payloads with HMAC-SHA256.")}`),d()}async function $c(e){e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks update --webhook-id <id> [--url ...] [--events ...] [--active on|off]",code:"validation_error",json:e.json,fields:e.fields});let t={};e.url&&(t.url=e.url),e.events&&(t.events=e.events.split(",").map(r=>r.trim())),e.active!==void 0&&(t.active=e.active==="on"||e.active==="true");try{let r=Ft(e);r!==void 0&&(t.headers=r)}catch(r){u(r instanceof Error?r.message:"Invalid webhook headers",{hint:"Set the named environment variable, or remove the conflicting header option.",code:"validation_error",json:e.json,fields:e.fields})}if(e.dryRun){let{headers:r,...o}=t;return B("webhook_update",{webhook_id:e.webhookId,...o,...r!==void 0?{header_names:Mt(r)}:{}},e.json,e.fields)}let i=C(!e.json);i.start("Updating webhook");let s=await x(`/api/webhooks/${encodeURIComponent(e.webhookId)}`,{method:"PATCH",body:JSON.stringify(t)}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} Webhook updated`),e.json){w(n,e.fields);return}S("Webhook Updated"),c("ID",n.id),c("URL",v.url(n.url)),c("Events",n.events.join(", ")),c("Auth headers",n.header_names?.join(", ")||pe.default.dim("none")),c("Status",n.active?pe.default.green("active"):pe.default.dim("paused")),d()}async function kc(e){if(e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks delete --webhook-id <id>",code:"validation_error",json:e.json,fields:e.fields}),e.dryRun)return B("webhook_delete",{webhook_id:e.webhookId},e.json,e.fields);let t=C(!e.json);t.start("Deleting webhook");let i=await x(`/api/webhooks/${encodeURIComponent(e.webhookId)}`,{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),t.stop(`${b.success} Webhook deleted`),e.json){w(s,e.fields);return}console.log(` ${pe.default.dim("Pending deliveries have been cancelled.")}`),d()}async function _c(e){e.webhookId||u("Webhook ID required",{hint:"Usage: domani webhooks deliveries --webhook-id <id> [--limit 20]",code:"validation_error",json:e.json,fields:e.fields});let t=e.limit?`?limit=${e.limit}`:"",i=C(!e.json);i.start("Loading deliveries");let s=await x(`/api/webhooks/${encodeURIComponent(e.webhookId)}/deliveries${t}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields})),i.stop(`${b.success} ${n.deliveries.length} delivery(ies)`),e.json){w(n,e.fields);return}if(n.deliveries.length===0){d(),console.log(` ${pe.default.dim("No deliveries yet.")}`),d();return}d(),S("Deliveries");let r=n.deliveries.map(o=>{let a=o.status==="delivered"?pe.default.green("delivered"):o.status==="failed"?pe.default.red("failed"):pe.default.yellow("pending");return[o.event_type,a,o.http_status?String(o.http_status):pe.default.dim("-"),String(o.attempts),pe.default.dim(new Date(o.created_at).toLocaleString())]});Z(["Event","Status","HTTP","Tries","Date"],r,[22,12,6,6,22]),d()}async function xc(e,t){let i=C(!e);i.start("Loading event types");let s=await be("/api/webhooks/events"),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e,fields:t})),i.stop(`${b.success} ${n.events.length} event type(s)`),e){w(n,t);return}d(),S("Webhook Event Types");let r=n.events.map(o=>[pe.default.cyan(o.type),pe.default.dim(o.description)]);Z(["Event","Description"],r,[24,50]),d()}G();var $e=D(M(),1);V();ge();async function Go(e,t){if(e||u("Domain is required",{hint:`Usage: domani sell <domain> --price <amount>
198
198
  domani sell <domain> --verify
199
199
  domani sell <domain> --status
200
- domani sell <domain> --cancel`,code:"validation_error",json:t.json,fields:t.fields}),z(e,t),t.status)return $c(e,t);if(t.verify)return yc(e,t);if(t.cancel)return wc(e,t);if(t.transferCode)return vc(e,t.transferCode,t);if(t.price)return bc(e,t);u("No action specified",{hint:`Usage: domani sell <domain> --price <amount>
200
+ domani sell <domain> --cancel`,code:"validation_error",json:t.json,fields:t.fields}),z(e,t),t.status)return Cc(e,t);if(t.verify)return Sc(e,t);if(t.cancel)return Oc(e,t);if(t.transferCode)return Ic(e,t.transferCode,t);if(t.price)return jc(e,t);u("No action specified",{hint:`Usage: domani sell <domain> --price <amount>
201
201
  domani sell <domain> --verify
202
202
  domani sell <domain> --status
203
203
  domani sell <domain> --cancel
204
- domani sell <domain> --transfer-code <code>`,code:"validation_error",json:t.json,fields:t.fields})}async function bc(e,t){let i=parseFloat(t.price);(isNaN(i)||i<=0)&&u("Invalid price",{hint:"Price must be a positive number, e.g. --price 5000",code:"validation_error",json:t.json,fields:t.fields});let s=C(!t.json);s.start(`Listing ${$.domain(e)} for sale`);let n={domain:e,price:i};t.description&&(n.description=t.description);let r=await j("/api/domains/sell",{method:"POST",body:JSON.stringify(n)}),o=await r.json();if(r.ok||(s.stop("Listing failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),t.json){s.stop(""),w(o,t.fields);return}(o.listing?.status??"pending_verification")==="active"?(s.stop(`${y.success} Listed for sale`),S("Sell Domain"),c("Domain",$.domain(o.listing?.domain||e)),c("Price",$.price(i)),c("Status",$e.default.green("active")),d(),console.log(` ${$e.default.dim("Your listing is live on the marketplace.")}`),d()):(s.stop(`${y.success} Verification record ready`),S("Sell Domain"),c("Domain",$.domain(o.listing?.domain||e)),c("Price",$.price(i)),c("Status",$e.default.yellow("pending verification")),d(),console.log(" Add this TXT record at your DNS provider:"),d(),console.log(` ${$e.default.dim("Type:")} ${$e.default.bold("TXT")}`),console.log(` ${$e.default.dim("Name:")} ${$e.default.bold(o.txt_record?.name||"@")}`),console.log(` ${$e.default.dim("Value:")} ${$e.default.bold(o.txt_record?.value||`domani-verify=${o.token}`)}`),d(),console.log(` ${$e.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),d(),I("Once the record is set, verify:",`domani sell ${e} --verify`),d())}async function yc(e,t){let i=C(!t.json);i.start(`Verifying ownership of ${$.domain(e)}`);let s=await j("/api/domains/sell/verify",{method:"POST",body:JSON.stringify({domain:e})}),n=await s.json();if(s.ok||(i.stop("Verification failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),t.json){i.stop(""),w(n,t.fields);return}i.stop(`${y.success} ${$.domain(e)} is now listed for sale!`),S("Domain Listed"),c("Domain",$.domain(n.domain||e)),c("Status",$e.default.green(n.status||"active")),n.price&&c("Price",$.price(n.price)),d(),I("Check listing status:",`domani sell ${e} --status`),I("View your deals:","domani deals"),d()}async function $c(e,t){let i=C(!t.json);i.start(`Checking listing status for ${$.domain(e)}`);let s=await j(`/api/domains/sell/status?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Listing status loaded`),t.json){w(n,t.fields);return}let r=n.listing;if(S("Listing Status"),c("Domain",$.domain(n.domain||e)),r){let o=r.status;c("Status",o==="active"?$e.default.green(o):$e.default.yellow(o||"unknown")),r.price&&c("Price",$.price(r.price)),r.description&&c("Description",r.description),r.created_at&&c("Listed",$e.default.dim(new Date(r.created_at).toLocaleDateString()))}else c("Status",$e.default.dim("No listing found"));n.deal&&c("Deal",`${n.deal.status} ($${n.deal.price})`),d()}async function wc(e,t){let i=C(!t.json);i.start(`Removing ${$.domain(e)} from sale`);let s=await j(`/api/domains/sell?domain=${encodeURIComponent(e)}`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),t.json){i.stop(""),w(n,t.fields);return}i.stop(`${y.success} ${$.domain(e)} removed from sale`),d()}async function vc(e,t,i){let s=C(!i.json);s.start(`Looking up active deal for ${$.domain(e)}`);let n=await j(`/api/deals?role=seller&domain=${encodeURIComponent(e)}&status=active`),r=await n.json();n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:i.json,fields:i.fields}));let a=(r.deals||r.data||[]).filter(g=>g.domain.toLowerCase()===e.toLowerCase());a.length===0&&(s.stop("No active deal found"),u(`No active deal found for ${e}`,{hint:`Make sure you have an active sale for this domain.
205
- Run 'domani deals --role seller' to see your deals.`,code:"not_found",json:i.json,fields:i.fields}));let l=a[0].id;s.message(`Submitting transfer code for deal ${$e.default.dim(l)}`);let m=await j(`/api/deals/${encodeURIComponent(l)}`,{method:"PATCH",body:JSON.stringify({auth_code:t})}),f=await m.json();if(m.ok||(s.stop("Failed"),u(f.error||f.message,{hint:f.hint,status:m.status,json:i.json,fields:i.fields})),i.json){s.stop(""),w(f,i.fields);return}s.stop(`${y.success} Transfer code submitted for ${$.domain(e)}`),S("Transfer Code Submitted"),c("Domain",$.domain(e)),c("Deal",$e.default.dim(l)),c("Status",$e.default.green(f.status||"code_submitted")),d(),I("Track the deal:",`domani deals ${l}`),d()}K();var we=D(L(),1);V();async function Ho(e,t){return e?_c(e,t):kc(t)}async function kc(e){let t=C(!e.json);t.start("Loading deals");let i=new URLSearchParams;e.role&&i.set("role",e.role),e.status&&i.set("status",e.status);let s=i.toString()?`?${i.toString()}`:"",n=await j(`/api/deals${s}`),r=await n.json();n.ok||(t.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.deals||r.data||[];if(t.stop(`${y.success} ${o.length} deal(s)`),e.json){w(r,e.fields);return}if(o.length===0){d(),console.log(` ${we.default.dim("No deals found.")}`),d(),I("List a domain for sale:","domani sell <domain> --price <amount>"),d();return}d(),S("Deals");let a=o.map(l=>{let m=l.status==="completed"?we.default.green:l.status==="active"?we.default.cyan:l.status==="cancelled"?we.default.red:we.default.yellow;return[$.domain(l.domain),$.price(l.price),m(l.status),we.default.dim(l.role||"-"),we.default.dim(new Date(l.created_at).toLocaleDateString())]});se(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),d()}async function _c(e,t){let i=C(!t.json);i.start(`Loading deal ${we.default.dim(e)}`);let s=await j(`/api/deals/${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Deal loaded`),t.json){w(n,t.fields);return}let r=n.deal||n;S("Deal Details"),c("ID",we.default.dim(r.id)),c("Domain",$.domain(r.domain)),c("Price",$.price(r.price));let o=r.status==="completed"?we.default.green:r.status==="active"?we.default.cyan:r.status==="cancelled"?we.default.red:we.default.yellow;c("Status",o(r.status)),r.role&&c("Your Role",r.role),r.buyer&&c("Buyer",we.default.dim(r.buyer)),r.seller&&c("Seller",we.default.dim(r.seller)),r.created_at&&c("Created",we.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&c("Updated",we.default.dim(new Date(r.updated_at).toLocaleDateString())),d();let a=r.events||[];if(a.length>0){S("Timeline");for(let l of a){let m=we.default.dim(new Date(l.created_at).toLocaleString()),f=l.status==="completed"?y.success:l.status==="expired"||l.status==="refunded"?y.error:y.info;console.log(` ${f} ${m} ${l.detail||l.status}`)}d()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(I("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),d())}K();var Ue=D(L(),1);V();he();async function Go(e,t,i){switch(e){case void 0:case"list":case"ls":return jc(i);case"request":case"acquire":case"new":return Jo(t,i);case"status":case"get":return Bo(t,i);case"cancel":case"rm":return xc(t,i);default:return e.includes(".")?Jo(e,i):Bo(e,i)}}async function Jo(e,t){e||u("A domain is required.",{hint:"domani broker request dream.com --max-budget 5000",json:t.json}),z(e,{json:t.json});let i=C(!t.json);i.start(`Requesting acquisition of ${$.domain(e)}`);let s={domain:e};if(t.maxBudget){let a=Number(t.maxBudget);(!Number.isFinite(a)||a<=0)&&u("--max-budget must be a positive number (USD).",{json:t.json}),s.max_budget=a}let n=await j("/api/broker",{method:"POST",body:JSON.stringify(s)}),r=await n.json();n.ok||(i.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.request||r;if(i.stop(`${y.success} Acquisition requested`),t.json)return w(r,t.fields);S("Broker request"),c("Domain",$.domain(o.domain)),c("Status",An(o.status)),o.max_budget!=null&&c("Max budget",$.price(o.max_budget)),c("ID",Ue.default.dim(o.id)),d(),console.log(` ${Ue.default.dim("We'll source the owner and reach out anonymously. Commission-only - you pay nothing unless a deal closes.")}`),d(),I("Check progress:",`domani broker status ${o.id}`),d()}async function jc(e){let t=C(!e.json);t.start("Loading broker requests");let i=e.status?`?status=${encodeURIComponent(e.status)}`:"",s=await j(`/api/broker${i}`),n=await s.json();s.ok||(t.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}));let r=n.requests||n.data||[];if(t.stop(`${y.success} ${r.length} request(s)`),e.json)return w(n,e.fields);if(r.length===0){d(),console.log(` ${Ue.default.dim("No broker requests yet.")}`),d(),I("Acquire a taken domain:","domani broker request <domain> --max-budget <amount>"),d();return}d(),S("Broker requests"),se(["Domain","Status","Budget","ID"],r.map(o=>[$.domain(o.domain),An(o.status),o.max_budget!=null?$.price(o.max_budget):Ue.default.dim("-"),Ue.default.dim(o.id)])),d()}async function Bo(e,t){e||u("A request ID is required.",{hint:"domani broker status <id> (list with: domani broker)",json:t.json});let i=C(!t.json);i.start("Loading request");let s=await j(`/api/broker/${encodeURIComponent(e)}`),n=await s.json();s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields}));let r=n.request||n;if(i.stop(`${y.success} ${$.domain(r.domain)}`),t.json)return w(n,t.fields);S("Broker request"),c("Domain",$.domain(r.domain)),c("Status",An(r.status)),r.max_budget!=null&&c("Max budget",$.price(r.max_budget)),c("Contacted",r.contacted?Ue.default.green("yes"):Ue.default.dim("not yet")),r.failure_reason&&c("Reason",Ue.default.yellow(r.failure_reason)),c("ID",Ue.default.dim(r.id)),d(),r.negotiation_id?(console.log(` ${Ue.default.dim("The owner responded - an anonymous negotiation is open.")}`),d(),I("Review the offer:","domani deals"),d()):["sourcing","contacted","negotiating"].includes(r.status)&&(I("Cancel this request:",`domani broker cancel ${r.id}`),d())}async function xc(e,t){e||u("A request ID is required.",{hint:"domani broker cancel <id>",json:t.json});let i=C(!t.json);i.start("Cancelling request");let s=await j(`/api/broker/${encodeURIComponent(e)}`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${y.success} Request cancelled`),t.json)return w(n,t.fields);d()}function An(e){return["completed","agreed"].includes(e)?Ue.default.green(e):["negotiating","contacted","sourcing"].includes(e)?Ue.default.cyan(e):["declined","no_contact","failed","expired","cancelled"].includes(e)?Ue.default.dim(e):e}K();var ge=D(L(),1);V();async function zo(e){return e.read?Cc(e):Sc(e)}async function Sc(e){let t=C(!e.json);t.start("Loading notifications");let i=new URLSearchParams;e.unread&&i.set("unread","true"),e.limit&&i.set("limit",e.limit);let s=i.toString()?`?${i.toString()}`:"",n=await j(`/api/notifications${s}`),r=await n.json();n.ok||(t.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.notifications||r.data||[],a=r.unread_count??o.filter(m=>!m.read).length;if(t.stop(`${y.success} ${o.length} notification(s)${a>0?` ${y.dot} ${ge.default.yellow(`${a} unread`)}`:""}`),e.json){w(r,e.fields);return}if(o.length===0){d(),console.log(` ${ge.default.dim("No notifications.")}`),d();return}d(),S("Notifications");let l=o.map(m=>{let f=m.read?ge.default.dim(y.dot):ge.default.cyan(y.info),g=Oc(m.type),b=m.read?ge.default.dim(m.title):ge.default.white(m.title),k=m.body?m.read?ge.default.dim(Ko(m.body,40)):ge.default.dim(Ko(m.body,40)):ge.default.dim("-"),v=ge.default.dim(new Date(m.created_at).toLocaleDateString());return[f,g,b,k,v]});se(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),d(),a>0&&(console.log(` ${ge.default.dim("Mark all as read:")} ${ge.default.cyan("domani notifications --read")}`),d())}async function Cc(e){let t=C(!e.json);t.start("Marking all notifications as read");let i=await j("/api/notifications/read-all",{method:"POST"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),e.json){t.stop(""),w(s,e.fields);return}let n=s.count??0;t.stop(`${y.success} ${n} notification(s) marked as read`),d()}function Oc(e){let t={deal:ge.default.cyan,sale:ge.default.green,purchase:ge.default.green,transfer:ge.default.yellow,expiry:ge.default.red,security:ge.default.red,billing:ge.default.yellow,email:ge.default.blue},i=e.split(".")[0].split("_")[0];return(t[i]||ge.default.dim)(e)}function Ko(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}K();var jt=D(L(),1);V();async function Yo(e){let t=e.limit?Number(e.limit):20,i=await j(`/api/billing/invoices?limit=${t}`),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json){w({...s,count:s.invoices.length},e.fields);return}if(s.invoices.length===0){console.log(` ${jt.default.dim("No invoices yet.")}`);return}S(`Invoices (${s.invoices.length})`),d();for(let n of s.invoices){let r=`$${(n.amount_paid/100).toFixed(2)}`,o=new Date(n.created).toLocaleDateString(),a=n.number||n.id;console.log(` ${y.success} ${jt.default.bold(a)} ${jt.default.green(r)} ${jt.default.dim(o)}`),n.description&&console.log(` ${jt.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${jt.default.dim(n.hosted_invoice_url)}`)}d(),s.has_more&&(console.log(` ${jt.default.dim(`Showing ${s.invoices.length} most recent. Use --limit to see more.`)}`),d())}K();var bi=D(L(),1);V();async function Xo(e){let t=C(!e?.json);t.start("Setting up billing session");let i=await j("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),s.url||(t.stop("Failed"),u("No checkout URL returned",{hint:"Try again or add a payment method at the dashboard.",json:e?.json})),t.stop("Checkout ready"),e?.json){w({url:s.url});return}d(),console.log(` ${bi.default.dim("Opening browser")} ${y.arrow} ${$.url(s.url)}`),d(),We(s.url),console.log(` ${y.info} ${bi.default.dim("Complete payment setup in your browser.")}`),console.log(` ${bi.default.dim(" After setup, you can purchase domains with")} ${bi.default.cyan("domani buy")}`),d()}K();var En=D(L(),1);V();async function Zo(e){let t=C(!e?.json);t.start("Creating upgrade session");let i=await j("/api/billing/subscribe",{method:"POST"}),s=await i.json();if(!i.ok){t.stop("Failed"),s.code==="ALREADY_SUBSCRIBED"||s.code==="ALREADY_PRO"?u("You're already on a paid plan.",{json:e?.json}):u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json});return}if(t.stop("Ready"),e?.json){w({url:s.url},e?.fields);return}d(),console.log(` ${En.default.dim("Opening browser")} ${y.arrow} ${$.url(s.url)}`),d(),We(s.url),console.log(` ${y.info} ${En.default.dim("Complete your plan upgrade in the browser.")}`),d()}K();var Tn=D(L(),1);V();async function Qo(e){let t=C(!e?.json);t.start("Cancelling subscription");let i=await j("/api/billing/cancel",{method:"POST"}),s=await i.json();if(!i.ok){t.stop("Failed"),s.code==="NOT_PAID"||s.code==="NOT_PRO"?u("You're not on a paid plan.",{json:e?.json}):u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json});return}if(t.stop("Done"),e?.json){w(s,e?.fields);return}d();let n=s.cancel_at?new Date(s.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${y.success} ${Tn.default.dim("Subscription cancelled.")} Access continues until ${Tn.default.cyan(n)}.`),d()}K();var tt=D(L(),1);V();he();Ye();async function ea(e,t,i){e||(e=await fe()),z(e,i);let s=[];if(t?.length&&s.push(...t),i.set&&s.push(...i.set.split(",").map(n=>n.trim()).filter(Boolean)),s.length>0||i.reset){await Rc(e,s,i);return}await Ic(e,i)}async function Ic(e,t){let i=C(!t.json);i.start(`Fetching nameservers for ${$.domain(e)}`);let s=await j(`/api/domains/${encodeURIComponent(e)}/nameservers`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`Nameservers for ${$.domain(e)}`),t.json){w(n,t.fields);return}if(d(),n.nameservers.length===0)console.log(` ${y.warning} ${tt.default.yellow("No nameservers configured.")}`),console.log(` ${tt.default.dim("DNS operations (parking, email, connect) will not work.")}`),d(),I("Set default nameservers:",`domani nameservers ${e} --reset`);else{S("Nameservers");for(let r of n.nameservers)console.log(` ${y.success} ${tt.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(d(),console.log(` ${tt.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(d(),c("Defaults",n.default_nameservers.map(r=>tt.default.dim(r)).join(tt.default.dim(", ")))),d()}async function Rc(e,t,i){let s=C(!i.json);if(i.reset){s.start(`Fetching default nameservers for ${$.domain(e)}`);let o=await j(`/api/domains/${encodeURIComponent(e)}/nameservers`),a=await o.json();o.ok||(s.stop("Failed"),u(a.error,{hint:a.hint,status:o.status,json:i.json,fields:i.fields})),a.default_nameservers?.length||(s.stop("No defaults"),u("No default nameservers available for this domain's registrar.",{code:"not_found",json:i.json,fields:i.fields})),t=a.default_nameservers,s.stop(`Using defaults: ${t.map(l=>tt.default.cyan(l)).join(tt.default.dim(", "))}`)}if(t.length<2&&u("At least 2 nameservers required.",{hint:"Example: domani nameservers example.com ns1.dns.com ns2.dns.com",code:"validation_error",json:i.json,fields:i.fields}),i.dryRun)return B("nameservers_set",{domain:e,nameservers:t},i.json,i.fields);s.start(`Setting nameservers for ${$.domain(e)}`);let n=await j(`/api/domains/${encodeURIComponent(e)}/nameservers`,{method:"PUT",body:JSON.stringify({nameservers:t})}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:i.json,fields:i.fields})),s.stop(`${y.success} Nameservers updated`),i.json){w(r,i.fields);return}d();for(let o of r.nameservers)console.log(` ${y.success} ${tt.default.cyan(o)}`);d(),console.log(` ${tt.default.dim("Changes may take up to 48 hours to propagate.")}`),d(),I("Check propagation:",`domani status ${e}`),d()}var ta=require("crypto"),rs=D(require("fs"),1);ft();var yi=D(L(),1);V();function Ac(e,t){let i=e.split(".").map(Number),s=t.split(".").map(Number);for(let n=0;n<3;n++){if((i[n]||0)>(s[n]||0))return 1;if((i[n]||0)<(s[n]||0))return-1}return 0}async function ia(e){let t=!!e?.json,i=C(!t);i.start("Checking for updates");let s=Fe();try{let n=await fetch(`${s}/api/cli/version`);n.ok||(i.stop("Failed"),u("Could not check for updates"));let r=await n.json(),o=r.version,a=r.sha256;if(Ac(o,ke)<=0){i.stop(`${y.success} Already up to date (v${ke})`),t&&w({current:ke,latest:o,up_to_date:!0});return}if(t&&!e?.yes){i.stop(""),w({current:ke,latest:o,up_to_date:!1,hint:"Run `domani update --yes` to upgrade non-interactively, or `domani update` in an interactive terminal."});return}i.stop(t?"":`New version available: ${yi.default.cyan(ke)} ${y.arrow} ${yi.default.green(o)}`);let l=C(!t);l.start("Downloading update");let m=`${s}/cli/domani.js`,f=await fetch(m);f.ok||(l.stop("Download failed"),u(`Failed to download from ${m}`));let g=await f.text();a&&(0,ta.createHash)("sha256").update(g).digest("hex")!==a&&(l.stop("Integrity check failed"),u("Downloaded file does not match expected hash - update aborted"));let b=process.argv[1];b||(l.stop("Failed"),u("Could not determine binary path"));let k=rs.default.realpathSync(b),v=k+".tmp";if(rs.default.writeFileSync(v,g,{mode:493}),rs.default.renameSync(v,k),l.stop(`${y.success} Updated to v${o}`),t){w({updated:!0,from:ke,to:o});return}d(),console.log(` ${yi.default.dim("Restart your terminal or run")} domani --version ${yi.default.dim("to verify")}`),d()}catch(n){u(`Update failed: ${n instanceof Error?n.message:String(n)}`)}}var os=D(require("fs"),1),sa=D(require("path"),1),na=D(require("os"),1);Pe();var $i=D(L(),1);V();async function ra(){let e=process.argv[1],t=e?os.default.realpathSync(e):null,i=sa.default.join(na.default.homedir(),".domani");if(d(),console.log(` ${$i.default.bold("This will remove:")}`),t&&console.log(` ${y.dot} CLI binary: ${$i.default.dim(t)}`),console.log(` ${y.dot} Config dir: ${$i.default.dim(i)}`),d(),await Ke({message:"Uninstall domani?"})!==!0){console.log(` ${$i.default.dim("Cancelled.")}`);return}os.default.rmSync(i,{recursive:!0,force:!0}),t&&os.default.unlinkSync(t),d(),console.log(` ${y.success} domani uninstalled.`),d()}K();var re=D(L(),1);V();async function aa(e,t){let i=t?.json,s=t?.fields,n=e?`/api/schema?command=${encodeURIComponent(e)}`:"/api/schema",r=C(!i);r.start("Loading schema");let o=await be(n),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:i,fields:s})),r.stop("Schema loaded"),i){w(a,s);return}e?Tc(e,a):Ec(a.commands)}function Ec(e){S("Commands");let t=Object.entries(e).map(([i,s])=>[re.default.bold(re.default.cyan(i)),s.description]);se(["Command","Description"],t,[20,50]),d(),console.log(` ${re.default.dim("Run")} ${re.default.cyan("domani schema <command>")} ${re.default.dim("for full details")}`),d()}function Tc(e,t){if(S(`domani ${e}`),console.log(` ${t.description}`),d(),console.log(` ${$.label("Usage:")} ${re.default.cyan(t.usage)}`),t.arguments&&Object.keys(t.arguments).length>0){d(),console.log(` ${re.default.bold("Arguments")}`);for(let[i,s]of Object.entries(t.arguments)){let n=s.required?re.default.red("*"):"",r=re.default.dim(`(${s.type}${s.variadic?", variadic":""})`);console.log(` ${re.default.cyan(i)}${n} ${r}`),s.description&&console.log(` ${re.default.dim(s.description)}`)}}if(t.options&&Object.keys(t.options).length>0){d(),console.log(` ${re.default.bold("Options")}`);for(let[i,s]of Object.entries(t.options)){let n=s.required?re.default.red("*"):"",r=re.default.dim(`(${s.type})`),o=s.choices?re.default.dim(` [${s.choices.join(", ")}]`):"";console.log(` ${re.default.cyan(`--${i}`)}${n} ${r}${o}`),console.log(` ${re.default.dim(s.description)}`)}}if(t.api)if(d(),console.log(` ${re.default.bold("API")}`),Pc(t.api))oa(t.api);else for(let[i,s]of Object.entries(t.api))console.log(` ${re.default.bold(re.default.yellow(i))}`),oa(s,6);t.errors&&t.errors.length>0&&(d(),console.log(` ${re.default.bold("Errors")}`),console.log(` ${t.errors.map(i=>re.default.dim(i)).join(re.default.dim(", "))}`)),d()}function Pc(e){return typeof e=="object"&&e!==null&&"method"in e&&"path"in e}function oa(e,t=4){let i=" ".repeat(t);if(console.log(`${i}${re.default.green(e.method)} ${re.default.white(e.path)}`),e.parameters&&Object.keys(e.parameters).length>0)for(let[s,n]of Object.entries(e.parameters)){let r=n.required?re.default.red("*"):"",o=[n.type];n.enum&&o.push(`enum: ${n.enum.join(", ")}`),n.minimum!==void 0&&o.push(`min: ${n.minimum}`),n.maximum!==void 0&&o.push(`max: ${n.maximum}`),n.maxItems!==void 0&&o.push(`maxItems: ${n.maxItems}`),n.items&&o.push(`items: ${n.items}`),n.in==="path"&&o.push("in: path");let a=re.default.dim(`(${o.join(", ")})`);console.log(`${i} ${re.default.cyan(s)}${r} ${a}`),n.description&&console.log(`${i} ${re.default.dim(n.description)}`)}}K();var qe=D(L(),1);Pe();V();async function la(e){let t=C(!e.json);t.start("Loading payment method");let i=await j("/api/me"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),e.json){t.stop(""),w(s.card?{has_payment_method:s.has_payment_method,card:s.card}:{has_payment_method:!1},e.fields);return}if(!s.has_payment_method||!s.card){t.stop("No payment method on file"),d(),console.log(` ${qe.default.dim("Add a card with")} ${qe.default.cyan("domani card add")}`),d();return}let{brand:n,last4:r,exp_month:o,exp_year:a}=s.card,l=`${String(o).padStart(2,"0")}/${a}`,m=n.charAt(0).toUpperCase()+n.slice(1);t.stop("Payment method loaded"),S("Payment method"),c("Card",`${qe.default.bold(m)} \u2022\u2022\u2022\u2022 ${qe.default.bold(r)}`),c("Expires",l),d(),console.log(` ${qe.default.dim("Update with")} ${qe.default.cyan("domani card add")}`),d()}async function da(e){let t=C(!e?.json);t.start("Setting up payment session");let i=await j("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),s.url||(t.stop("Failed"),u("No checkout URL returned",{json:e?.json})),t.stop("Checkout ready"),e?.json){w({url:s.url},e?.fields);return}d(),console.log(` ${qe.default.dim("Opening browser")} ${y.arrow} ${$.url(s.url)}`),d(),We(s.url),console.log(` ${y.info} ${qe.default.dim("Complete payment setup in your browser.")}`),console.log(` ${qe.default.dim(" After setup, you can purchase domains with")} ${qe.default.cyan("domani buy")}`),d()}async function ca(e){if(!e?.yes&&!e?.json){let n=await Ke({message:"Remove your saved payment method?"});if(le(n)||!n){console.log(` ${qe.default.dim("Cancelled.")}`);return}}let t=C(!e?.json);t.start("Removing payment method");let i=await j("/api/billing/card",{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),t.stop(`${y.success} Payment method removed`),e?.json){w({removed:!0},e?.fields);return}d(),console.log(` ${qe.default.dim("Add a new card with")} ${qe.default.cyan("domani card add")}`),d()}var Pn=D(L(),1);K();V();async function me(e,t,i,s){let n=C(!i.json);n.start(s);let r=await j(e,t),o=await r.json();return r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop(`${y.success} Done`),o}async function ua(e,t){if(!e||e==="list"){let i=await me("/api/workspaces",void 0,t,"Loading workspaces");if(t.json)return w(i,t.fields);if(d(),S("Workspaces"),!i.workspaces.length){console.log(` ${Pn.default.dim("No workspaces yet.")}`),I("Create one:","domani workspace create --name Acme");return}se(["ID","Name","Role","Mailboxes","Members"],i.workspaces.map(s=>[s.id,s.name,s.role,String(s.mailbox_count),String(s.member_count)]),[28,28,10,10,8]),d();return}if(e==="create"){t.name||u("Workspace name required",{hint:"Usage: domani workspace create --name Acme",code:"validation_error",json:t.json});let i=await me("/api/workspaces",{method:"POST",body:JSON.stringify({name:t.name})},t,"Creating workspace");if(t.json)return w(i,t.fields);d(),S("Workspace Created"),c("ID",i.id),c("Name",i.name),d();return}if(e==="show"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace show --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}`,void 0,t,"Loading workspace");if(t.json)return w(i,t.fields);d(),S(i.name),c("Role",i.role),c("Mailboxes",i.mailboxes.length),c("Members",i.members.length),d(),se(["Email","Role","Mailbox grants"],i.members.map(s=>[s.email,s.role,String(s.mailbox_grants.length)]),[42,12,16]),d();return}if(e==="access"){if(t.id||u("Workspace ID required",{hint:"Usage: domani workspace access --id <id>",code:"validation_error",json:t.json}),!t.subject&&!t.resource&&!t.profile){let a=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access`,void 0,t,"Loading access graph");if(t.json)return w(a,t.fields);d(),S("Access Graph"),c("Principals",a.principals.length),c("Mailboxes",a.mailboxes.length),c("Groups",a.groups.length),c("Collections",a.collections.length),c("Active grants",a.grants.length),c("Pending offers",a.offers.length),d();return}(!t.subject||!t.resource||!t.profile)&&u("Subject, resource, and profile are required together",{hint:"Usage: domani workspace access --id <id> --subject human:<id> --resource mailbox:<id> --profile responder [--apply]",code:"validation_error",json:t.json});let[i,s]=t.subject.split(":",2),[n,r]=t.resource.split(":",2);(!s||!["human","agent","service","token","group"].includes(i))&&u("Invalid --subject",{hint:"Use human:<id>, agent:<id>, service:<id>, token:<id>, or group:<id>",json:t.json}),(!r||!["mailbox","collection"].includes(n))&&u("Invalid --resource",{hint:"Use mailbox:<id> or collection:<id>",json:t.json});let o=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access`,{method:"PUT",body:JSON.stringify({mode:t.apply?"apply":"plan",subject:i==="group"?{type:"group",id:s}:{type:"principal",principal:{type:i,id:s}},resource:{type:n,id:r},profile:t.profile,expected_version:t.expectedVersion?Number(t.expectedVersion):void 0})},t,t.apply?"Applying access":"Planning access");if(t.json)return w(o,t.fields);d(),S(t.apply?"Access Applied":"Access Plan"),c("Action",o.action),c("Changed",String(o.changed)),o.grant_id&&c("Grant",o.grant_id),d();return}if(e==="group"){(!t.id||!t.name)&&u("Workspace ID and group name required",{hint:"Usage: domani workspace group --id <id> --name Support --principals human:u1,agent:a1",code:"validation_error",json:t.json});let i=(t.principals||"").split(",").map(n=>n.trim()).filter(Boolean).map(n=>{let[r,o]=n.split(":",2);return o||u(`Invalid principal: ${n}`,{hint:"Use type:id",json:t.json}),{type:r,id:o,label:o}}),s=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/groups`,{method:"PUT",body:JSON.stringify({id:t.groupId,name:t.name,principals:i})},t,"Syncing access group");if(t.json)return w(s,t.fields);d(),S("Access Group Synced"),c("ID",s.id),c("Principals",s.principal_count),d();return}if(e==="collection"){(!t.id||!t.name)&&u("Workspace ID and collection name required",{hint:"Usage: domani workspace collection --id <id> --name Admin --mailboxes mb1,mb2",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/collections`,{method:"PUT",body:JSON.stringify({id:t.collectionId,name:t.name,mailbox_ids:t.mailboxes?.split(",").map(s=>s.trim()).filter(Boolean)??[]})},t,"Syncing mailbox collection");if(t.json)return w(i,t.fields);d(),S("Mailbox Collection Synced"),c("ID",i.id),c("Mailboxes",i.mailbox_count),d();return}if(e==="offer"){(!t.id||!t.email)&&u("Workspace ID and recipient email required",{hint:"Usage: domani workspace offer --id <id> --email person@example.com --mailboxes mb1,mb2 --profile responder",code:"validation_error",json:t.json});let i=(t.mailboxes||"").split(",").map(n=>n.trim()).filter(Boolean).map(n=>({resource:{type:"mailbox",id:n},profile:t.profile||"responder"})),s=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/offers`,{method:"POST",body:JSON.stringify({email:t.email,grants:i,ownership_disposition:t.ownershipDisposition,creator_disposition:t.creatorDisposition,billing_disposition:t.billingDisposition})},t,"Sending access offer");if(t.json)return w(s,t.fields);d(),S("Access Offered"),c("Email",s.email),c("Expires",s.expires_at),d();return}if(e==="accept-offer"){t.token||u("Access offer token required",{hint:"Usage: domani workspace accept-offer --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/access/offers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting access offer");if(t.json)return w(i,t.fields);d(),S("Access Accepted"),c("Workspace",i.workspace_name),c("Ownership",i.ownership),d();return}if(e==="revoke-access"){(!t.id||!t.grantId)&&u("Workspace and grant IDs required",{hint:"Usage: domani workspace revoke-access --id <id> --grant-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/grants/${encodeURIComponent(t.grantId)}`,{method:"DELETE",body:JSON.stringify({expected_version:t.expectedVersion?Number(t.expectedVersion):void 0})},t,"Revoking access");if(t.json)return w(i,t.fields);d(),S("Access Revoked"),c("Grant",i.grant_id),c("Version",i.version),d();return}if(e==="rename"){(!t.id||!t.name)&&u("Workspace ID and name required",{hint:"Usage: domani workspace rename --id <id> --name <name>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}`,{method:"PATCH",body:JSON.stringify({name:t.name})},t,"Renaming workspace");if(t.json)return w(i,t.fields);d(),S("Workspace Renamed"),c("ID",i.id),c("Name",i.name),d();return}if(e==="invite"){(!t.id||!t.email)&&u("Workspace ID and email required",{hint:"Usage: domani workspace invite --id <id> --email person@example.com",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/invitations`,{method:"POST",body:JSON.stringify({email:t.email,role:t.role,mailbox_ids:t.mailboxes?.split(",").map(s=>s.trim()).filter(Boolean),mailbox_role:t.mailboxRole})},t,"Sending invitation");if(t.json)return w(i,t.fields);d(),S("Invitation Sent"),c("Email",i.email),c("Role",i.role),c("Expires",i.expires_at),d();return}if(e==="accept"){t.token||u("Invitation token required",{hint:"Usage: domani workspace accept --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/invitations/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting invitation");if(t.json)return w(i,t.fields);d(),S("Workspace Joined"),c("Workspace",i.workspace_name),c("Role",i.role),d();return}if(e==="revoke-invite"){(!t.id||!t.invitationId)&&u("Workspace ID and invitation ID required",{hint:"Usage: domani workspace revoke-invite --id <id> --invitation-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/invitations/${encodeURIComponent(t.invitationId)}`,{method:"DELETE"},t,"Revoking invitation");if(t.json)return w(i,t.fields);d(),S("Invitation Revoked"),c("Invitation",i.invitation_id),d();return}if(e==="member-role"){(!t.id||!t.membershipId||!t.role)&&u("Workspace ID, membership ID, and role required",{hint:"Usage: domani workspace member-role --id <id> --membership-id <id> --role admin|member",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"PATCH",body:JSON.stringify({role:t.role})},t,"Updating member role");if(t.json)return w(i,t.fields);d(),S("Member Updated"),c("Membership",i.id),c("Role",i.role),d();return}if(e==="remove-member"){(!t.id||!t.membershipId)&&u("Workspace ID and membership ID required",{hint:"Usage: domani workspace remove-member --id <id> --membership-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"DELETE"},t,"Removing member and revoking access");if(t.json)return w(i,t.fields);d(),S("Member Removed"),c("Membership",i.membership_id),d();return}if(e==="leave"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace leave --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/me`,{method:"DELETE"},t,"Leaving workspace and revoking access");if(t.json)return w(i,t.fields);d(),S("Workspace Left"),c("Workspace",i.workspace_id),d();return}if(e==="transfer"){(!t.id||!t.membershipId)&&u("Workspace ID and target membership ID required",{hint:"Usage: domani workspace transfer --id <workspace-id> --membership-id <membership-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer`,{method:"POST",body:JSON.stringify({membership_id:t.membershipId})},t,"Requesting ownership transfer");if(t.json)return w(i,t.fields);d(),S("Ownership Transfer Requested"),c("To",i.to_email),c("Expires",i.expires_at),c("Billing",i.billing),d();return}if(e==="accept-ownership"){t.token||u("Ownership transfer token required",{hint:"Usage: domani workspace accept-ownership --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/ownership-transfers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting ownership");if(t.json)return w(i,t.fields);d(),S("Ownership Transferred"),c("Workspace",i.workspace_id),c("Domains",i.domains_transferred),c("Mailboxes",i.mailboxes_transferred),c("Previous owner",i.previous_owner_role),d();return}if(e==="revoke-transfer"){(!t.id||!t.transferId)&&u("Workspace ID and transfer ID required",{hint:"Usage: domani workspace revoke-transfer --id <workspace-id> --transfer-id <transfer-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer/${encodeURIComponent(t.transferId)}`,{method:"DELETE"},t,"Revoking ownership transfer");if(t.json)return w(i,t.fields);d(),S("Ownership Transfer Revoked"),c("Transfer",i.transfer_id),d();return}if(e==="adopt-mailbox"){(!t.id||!t.mailboxId)&&u("Workspace ID and mailbox ID required",{hint:"Usage: domani workspace adopt-mailbox --id <workspace-id> --mailbox-id <mailbox-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes`,{method:"POST",body:JSON.stringify({mailbox_id:t.mailboxId})},t,"Adopting mailbox boundary");if(t.json)return w(i,t.fields);d(),S(i.adopted?"Mailbox Boundary Adopted":"Already in Workspace"),c("Address",i.address),c("Mailboxes",i.mailbox_ids?.length??1),d();return}if(e==="grant"){(!t.id||!t.mailboxId||!t.membershipId||!t.role)&&u("Workspace, mailbox, membership, and role required",{hint:"Usage: domani workspace grant --id <id> --mailbox-id <id> --membership-id <id> --role viewer|responder|manager",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes/${encodeURIComponent(t.mailboxId)}/grants`,{method:"PUT",body:JSON.stringify({membership_id:t.membershipId,role:t.role})},t,"Granting mailbox access");if(t.json)return w(i,t.fields);d(),S("Mailbox Access Granted"),c("Membership",i.membership_id),c("Mailbox",i.mailbox_id),c("Role",i.role),d();return}if(e==="revoke-grant"){(!t.id||!t.mailboxId||!t.membershipId)&&u("Workspace, mailbox, and membership required",{hint:"Usage: domani workspace revoke-grant --id <id> --mailbox-id <id> --membership-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes/${encodeURIComponent(t.mailboxId)}/grants`,{method:"DELETE",body:JSON.stringify({membership_id:t.membershipId})},t,"Revoking mailbox access");if(t.json)return w(i,t.fields);d(),S("Mailbox Access Revoked"),c("Membership",i.membership_id),c("Mailbox",i.mailbox_id),d();return}if(e==="checkout"){(!t.id||!t.plan)&&u("Workspace ID and plan required",{hint:"Usage: domani workspace checkout --id <id> --plan mail_team",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/billing/checkout`,{method:"POST",body:JSON.stringify({plan:t.plan})},t,"Creating secure checkout");if(t.json)return w(i,t.fields);d(),S("Workspace Checkout"),c("Plan",i.plan),c("URL",i.url),d(),i.url&&t.open!==!1&&(console.log(` ${Pn.default.dim("Opening browser")} ${y.arrow} ${$.url(i.url)}`),We(i.url));return}if(e==="cancel"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace cancel --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/billing/cancel`,{method:"POST"},t,"Scheduling cancellation");if(t.json)return w(i,t.fields);d(),S("Cancellation Scheduled"),c("Message",i.message),i.cancel_at&&c("Cancels",i.cancel_at),d();return}u(`Unknown action: ${e}`,{hint:"Actions: list, create, show, access, group, collection, offer, accept-offer, revoke-access, rename, invite, accept, revoke-invite, member-role, remove-member, leave, transfer, accept-ownership, revoke-transfer, adopt-mailbox, grant, revoke-grant, checkout, cancel",code:"validation_error",json:t.json,fields:t.fields})}var cs=D(L(),1);K();var as=D(require("node:crypto"),1),ei=D(require("node:fs"),1),ma=D(require("node:os"),1),ls=D(require("node:path"),1),Dc=process.env.DOMANI_CONFIG_DIR||ls.default.join(ma.default.homedir(),".domani"),fa=ls.default.join(Dc,"mutations");function Nc(e){return ls.default.join(fa,`${as.default.createHash("sha256").update(e).digest("hex")}.json`)}function xt(e,t,i){let s=Nc(e),n=as.default.createHash("sha256").update(JSON.stringify(t)).digest("hex");if(!i)try{let o=JSON.parse(ei.default.readFileSync(s,"utf8"));if(o.key&&o.fingerprint===n)return{key:o.key,complete:()=>{try{ei.default.unlinkSync(s)}catch{}}}}catch{}let r=i||`cli-${as.default.randomUUID()}`;return ei.default.mkdirSync(fa,{recursive:!0,mode:448}),ei.default.writeFileSync(s,JSON.stringify({key:r,fingerprint:n}),{mode:384}),{key:r,complete:()=>{try{ei.default.unlinkSync(s)}catch{}}}}V();function pa(e){if(e.clearUpstreamHeaders)return{};let t={};for(let[i,s]of[["Authorization",e.upstreamAuthorizationEnv],["X-Api-Key",e.upstreamApiKeyEnv]]){if(!s)continue;let n=process.env[s];n||u(`Environment variable ${s} is empty`,{code:"validation_error",json:e.json}),t[i]=n}return Object.keys(t).length?t:void 0}async function Lt(e,t){let i=await e.json();return e.ok||u(i.error||i.message,{hint:i.hint,status:e.status,json:t.json,fields:t.fields}),i}function ds(e,t){if(t.json)return w(e,t.fields);let i=e.http_route||e;d(),S("HTTP Route"),c("ID",i.id),c("URL",i.url),c("Upstream",i.upstream),c("Status",i.status),c("Expires",i.expires_at),c("Browser mode",i.browser_mode||"stateless"),i.upstream_verification?.secret&&(c("Verification secret",cs.default.yellow(i.upstream_verification.secret)),console.log(cs.default.dim(" Save this secret now. It will not be shown again after this receipt."))),d()}async function ha(e,t,i){if(!e||e==="list"){let s=new URLSearchParams;i.domain&&s.set("domain",i.domain),i.hostname&&s.set("hostname",i.hostname),i.status&&s.set("status",i.status);let n=await Lt(await j(`/api/http-routes${s.size?`?${s}`:""}`),i);if(i.json)return w(n,i.fields);d(),S("HTTP Routes");for(let r of n.http_routes)console.log(` ${cs.default.dim(r.id)} ${r.hostname} ${r.status} ${r.upstream}`);d();return}if(e==="create"){i.upstream||u("--upstream is required",{code:"validation_error",json:i.json});let s=pa(i),n={...i.hostname?{hostname:i.hostname}:{},upstream:i.upstream,...i.expiresIn?{expires_in:Number(i.expiresIn)}:{},...i.hostHeader?{host_header:i.hostHeader}:{},...i.upstreamVerification?{upstream_verification:i.upstreamVerification}:{},...s?{upstream_headers:s}:{}},r=xt(`route:create:${i.hostname||"auto"}`,n,i.idempotencyKey),o=C(!i.json);o.start("Creating HTTP route");let a=await Lt(await j("/api/http-routes",{method:"POST",headers:{"Idempotency-Key":r.key},body:JSON.stringify(n)}),i);return r.complete(),o.stop(`${y.success} HTTP route created`),ds(a,i)}if(t||u("Route ID is required",{hint:`Usage: domani route ${e} <id>`,code:"validation_error",json:i.json}),e==="get")return ds(await Lt(await j(`/api/http-routes/${encodeURIComponent(t)}`),i),i);if(e==="delete"){let s=await j(`/api/http-routes/${encodeURIComponent(t)}`,{method:"DELETE"});if(s.ok||await Lt(s,i),i.json)return w({deleted:!0,id:t},i.fields);console.log(`${y.success} HTTP route deleted`);return}if(e==="refresh"){i.expiresIn||u("--expires-in is required",{code:"validation_error",json:i.json});let s={expires_in:Number(i.expiresIn)},n=xt(`route:refresh:${t}`,s,i.idempotencyKey),r=await Lt(await j(`/api/http-routes/${encodeURIComponent(t)}`,{method:"PATCH",headers:{"Idempotency-Key":n.key},body:JSON.stringify(s)}),i);return n.complete(),ds(r,i)}if(e==="rotate-verification"){let s=xt(`route:rotate-verification:${t}`,{},i.idempotencyKey),n=await Lt(await j(`/api/http-routes/${encodeURIComponent(t)}/upstream-verification/rotate`,{method:"POST",headers:{"Idempotency-Key":s.key}}),i);return s.complete(),i.json?w(n,i.fields):ds(n,i)}if(e==="rotate-headers"){let s=pa(i);s||u("Provide an upstream header environment variable or --clear-upstream-headers",{code:"validation_error",json:i.json});let n=xt(`route:rotate-headers:${t}`,{upstream_headers:s},i.idempotencyKey),r=await Lt(await j(`/api/http-routes/${encodeURIComponent(t)}/upstream-headers`,{method:"PUT",headers:{"Idempotency-Key":n.key},body:JSON.stringify({upstream_headers:s})}),i);if(n.complete(),i.json)return w(r,i.fields);console.log(`${y.success} Upstream headers replaced: ${r.upstream_header_names.join(", ")||"none"}`);return}u(`Unknown action: ${e}`,{hint:"Actions: create, list, get, refresh, rotate-verification, rotate-headers, delete",code:"validation_error",json:i.json})}var ga=D(L(),1);K();V();async function Uc(e,t){let i=await e.json();return e.ok||u(i.error||i.message,{hint:i.hint,status:e.status,json:t.json,fields:t.fields}),i}async function ba(e,t,i,s){let n=`/api/domains/${encodeURIComponent(e)}/hostname-bindings`,r;if(!t||t==="list")r=await j(n);else if(t==="plan")s.hostname||u("--hostname is required",{code:"validation_error",json:s.json}),r=await j(`${n}/plan`,{method:"POST",body:JSON.stringify({hostname:s.hostname,browser_mode:s.browserMode})});else if(t==="create"){s.hostname||u("--hostname is required",{code:"validation_error",json:s.json});let l={hostname:s.hostname,browser_mode:s.browserMode,expected_zone_version:s.expectedZoneVersion,acknowledgements:s.acknowledgements?.split(",").map(f=>f.trim())},m=xt(`binding:create:${e}:${s.hostname}`,l);r=await j(n,{method:"POST",headers:{"Idempotency-Key":m.key},body:JSON.stringify(l)}),r.ok&&m.complete()}else{i||u("Binding ID is required",{hint:`Usage: domani binding ${e} ${t} <id>`,code:"validation_error",json:s.json});let l=`${n}/${encodeURIComponent(i)}`;if(t==="get")r=await j(l);else if(t==="verify")r=await j(`${l}/verify`,{method:"POST"});else if(t==="delete")r=await j(l,{method:"DELETE"});else if(t==="update"){s.browserMode||u("--browser-mode is required",{code:"validation_error",json:s.json});let m={browser_mode:s.browserMode,acknowledgements:s.acknowledgements?.split(",").map(g=>g.trim())},f=xt(`binding:update:${e}:${i}`,m);r=await j(l,{method:"PATCH",headers:{"Idempotency-Key":f.key},body:JSON.stringify(m)}),r.ok&&f.complete()}else return u(`Unknown action: ${t}`,{hint:"Actions: list, plan, create, get, update, verify, delete",code:"validation_error",json:s.json})}if(r.status===204){if(s.json)return w({disabled:!0,id:i},s.fields);console.log("Hostname binding disabled");return}let o=await Uc(r,s);if(s.json)return w(o,s.fields);d(),S(t==="plan"?"Hostname Binding Plan":"Hostname Bindings");let a=o.hostname_bindings||(o.hostname_binding?[o.hostname_binding]:[]);if(a.length)for(let l of a)console.log(` ${ga.default.dim(l.id)} ${l.hostname_pattern} ${l.status} ${l.browser_mode}`);else console.log(JSON.stringify(o,null,2));d()}var ya=D(require("node:readline"),1);ft();function qc(e){return(Array.isArray(e)?e:[e]).filter(i=>!!i&&typeof i=="object")}function Dn(e,t,i,s){return{jsonrpc:"2.0",id:e,error:{code:t,message:i,...s?{data:s}:{}}}}function wi(e,t,i,s){let n=qc(e).filter(r=>Object.prototype.hasOwnProperty.call(r,"id")).map(r=>Dn(r.id??null,t,i,s));if(n.length!==0)return Array.isArray(e)?n:n[0]}function Fc(e){let t=[];for(let i of e.split(/\r?\n/)){if(!i.startsWith("data:"))continue;let s=i.slice(5).trim();if(!(!s||s==="[DONE]"))try{t.push(JSON.parse(s))}catch{}}return t}async function Mc(e,t={}){let i=t.fetchImpl??fetch,s=t.getAuthToken?t.getAuthToken():Me(),n=(t.apiUrl??Fe()).replace(/\/$/,""),r={"Content-Type":"application/json",Accept:"application/json, text/event-stream"};s&&(r.Authorization=`Bearer ${s}`);let o=()=>i(`${n}/mcp`,{method:"POST",headers:r,body:JSON.stringify(e)}),a;try{a=await o()}catch(f){let g=f instanceof Error?f.message:"Unknown network error",b=wi(e,-32002,"Domani MCP is unreachable",{code:"MCP_NETWORK_ERROR",hint:`Check your connection and that ${n} is reachable.`,detail:g});return b===void 0?[]:[b]}if(a.status===401){let f=t.refreshAuthToken?t.refreshAuthToken():t.getAuthToken?void 0:Me({refreshKeychain:!0});if(f&&f!==s){await a.body?.cancel(),s=f,r.Authorization=`Bearer ${s}`;try{a=await o()}catch(g){let b=g instanceof Error?g.message:"Unknown network error",k=wi(e,-32002,"Domani MCP is unreachable",{code:"MCP_NETWORK_ERROR",hint:`Check your connection and that ${n} is reachable.`,detail:b});return k===void 0?[]:[k]}}}if(a.status===202||a.status===204)return[];let l=await a.text();if(a.status===401){let f=wi(e,-32001,"Domani authentication required",{code:"AUTH_REQUIRED",hint:"Run `npx -y domani-cli@latest login`, approve access in the browser, then retry. Never paste an API key into chat.",fix_command:"npx -y domani-cli@latest login"});return f===void 0?[]:[f]}if(!a.ok){let f=wi(e,-32e3,`Domani MCP request failed (${a.status})`,{code:"MCP_HTTP_ERROR",hint:"Retry once. If the error persists, check https://domani.run/status."});return f===void 0?[]:[f]}if(!l.trim())return[];if((a.headers.get("content-type")??"").includes("text/event-stream"))return Fc(l);try{return[JSON.parse(l)]}catch{let f=wi(e,-32700,"Domani MCP returned invalid JSON",{code:"MCP_INVALID_RESPONSE"});return f===void 0?[]:[f]}}async function $a(e={}){let t=e.stderr??process.stderr,i=ya.default.createInterface({input:process.stdin,crlfDelay:1/0}),s=new Set;e.verbose&&t.write(`domani MCP bridge ready
206
- `);for await(let n of i){if(!n.trim())continue;let r=(async()=>{let o;try{o=JSON.parse(n)}catch{process.stdout.write(`${JSON.stringify(Dn(null,-32700,"Parse error"))}
207
- `);return}let a=await Mc(o,e);for(let l of a)process.stdout.write(`${JSON.stringify(l)}
204
+ domani sell <domain> --transfer-code <code>`,code:"validation_error",json:t.json,fields:t.fields})}async function jc(e,t){let i=parseFloat(t.price);(isNaN(i)||i<=0)&&u("Invalid price",{hint:"Price must be a positive number, e.g. --price 5000",code:"validation_error",json:t.json,fields:t.fields});let s=C(!t.json);s.start(`Listing ${v.domain(e)} for sale`);let n={domain:e,price:i};t.description&&(n.description=t.description);let r=await x("/api/domains/sell",{method:"POST",body:JSON.stringify(n)}),o=await r.json();if(r.ok||(s.stop("Listing failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:t.json,fields:t.fields})),t.json){s.stop(""),w(o,t.fields);return}(o.listing?.status??"pending_verification")==="active"?(s.stop(`${b.success} Listed for sale`),S("Sell Domain"),c("Domain",v.domain(o.listing?.domain||e)),c("Price",v.price(i)),c("Status",$e.default.green("active")),d(),console.log(` ${$e.default.dim("Your listing is live on the marketplace.")}`),d()):(s.stop(`${b.success} Verification record ready`),S("Sell Domain"),c("Domain",v.domain(o.listing?.domain||e)),c("Price",v.price(i)),c("Status",$e.default.yellow("pending verification")),d(),console.log(" Add this TXT record at your DNS provider:"),d(),console.log(` ${$e.default.dim("Type:")} ${$e.default.bold("TXT")}`),console.log(` ${$e.default.dim("Name:")} ${$e.default.bold(o.txt_record?.name||"@")}`),console.log(` ${$e.default.dim("Value:")} ${$e.default.bold(o.txt_record?.value||`domani-verify=${o.token}`)}`),d(),console.log(` ${$e.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),d(),I("Once the record is set, verify:",`domani sell ${e} --verify`),d())}async function Sc(e,t){let i=C(!t.json);i.start(`Verifying ownership of ${v.domain(e)}`);let s=await x("/api/domains/sell/verify",{method:"POST",body:JSON.stringify({domain:e})}),n=await s.json();if(s.ok||(i.stop("Verification failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),t.json){i.stop(""),w(n,t.fields);return}i.stop(`${b.success} ${v.domain(e)} is now listed for sale!`),S("Domain Listed"),c("Domain",v.domain(n.domain||e)),c("Status",$e.default.green(n.status||"active")),n.price&&c("Price",v.price(n.price)),d(),I("Check listing status:",`domani sell ${e} --status`),I("View your deals:","domani deals"),d()}async function Cc(e,t){let i=C(!t.json);i.start(`Checking listing status for ${v.domain(e)}`);let s=await x(`/api/domains/sell/status?domain=${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Listing status loaded`),t.json){w(n,t.fields);return}let r=n.listing;if(S("Listing Status"),c("Domain",v.domain(n.domain||e)),r){let o=r.status;c("Status",o==="active"?$e.default.green(o):$e.default.yellow(o||"unknown")),r.price&&c("Price",v.price(r.price)),r.description&&c("Description",r.description),r.created_at&&c("Listed",$e.default.dim(new Date(r.created_at).toLocaleDateString()))}else c("Status",$e.default.dim("No listing found"));n.deal&&c("Deal",`${n.deal.status} ($${n.deal.price})`),d()}async function Oc(e,t){let i=C(!t.json);i.start(`Removing ${v.domain(e)} from sale`);let s=await x(`/api/domains/sell?domain=${encodeURIComponent(e)}`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),t.json){i.stop(""),w(n,t.fields);return}i.stop(`${b.success} ${v.domain(e)} removed from sale`),d()}async function Ic(e,t,i){let s=C(!i.json);s.start(`Looking up active deal for ${v.domain(e)}`);let n=await x(`/api/deals?role=seller&domain=${encodeURIComponent(e)}&status=active`),r=await n.json();n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:i.json,fields:i.fields}));let a=(r.deals||r.data||[]).filter(g=>g.domain.toLowerCase()===e.toLowerCase());a.length===0&&(s.stop("No active deal found"),u(`No active deal found for ${e}`,{hint:`Make sure you have an active sale for this domain.
205
+ Run 'domani deals --role seller' to see your deals.`,code:"not_found",json:i.json,fields:i.fields}));let l=a[0].id;s.message(`Submitting transfer code for deal ${$e.default.dim(l)}`);let f=await x(`/api/deals/${encodeURIComponent(l)}`,{method:"PATCH",body:JSON.stringify({auth_code:t})}),m=await f.json();if(f.ok||(s.stop("Failed"),u(m.error||m.message,{hint:m.hint,status:f.status,json:i.json,fields:i.fields})),i.json){s.stop(""),w(m,i.fields);return}s.stop(`${b.success} Transfer code submitted for ${v.domain(e)}`),S("Transfer Code Submitted"),c("Domain",v.domain(e)),c("Deal",$e.default.dim(l)),c("Status",$e.default.green(m.status||"code_submitted")),d(),I("Track the deal:",`domani deals ${l}`),d()}G();var ke=D(M(),1);V();async function Ko(e,t){return e?Ac(e,t):Rc(t)}async function Rc(e){let t=C(!e.json);t.start("Loading deals");let i=new URLSearchParams;e.role&&i.set("role",e.role),e.status&&i.set("status",e.status);let s=i.toString()?`?${i.toString()}`:"",n=await x(`/api/deals${s}`),r=await n.json();n.ok||(t.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.deals||r.data||[];if(t.stop(`${b.success} ${o.length} deal(s)`),e.json){w(r,e.fields);return}if(o.length===0){d(),console.log(` ${ke.default.dim("No deals found.")}`),d(),I("List a domain for sale:","domani sell <domain> --price <amount>"),d();return}d(),S("Deals");let a=o.map(l=>{let f=l.status==="completed"?ke.default.green:l.status==="active"?ke.default.cyan:l.status==="cancelled"?ke.default.red:ke.default.yellow;return[v.domain(l.domain),v.price(l.price),f(l.status),ke.default.dim(l.role||"-"),ke.default.dim(new Date(l.created_at).toLocaleDateString())]});Z(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),d()}async function Ac(e,t){let i=C(!t.json);i.start(`Loading deal ${ke.default.dim(e)}`);let s=await x(`/api/deals/${encodeURIComponent(e)}`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Deal loaded`),t.json){w(n,t.fields);return}let r=n.deal||n;S("Deal Details"),c("ID",ke.default.dim(r.id)),c("Domain",v.domain(r.domain)),c("Price",v.price(r.price));let o=r.status==="completed"?ke.default.green:r.status==="active"?ke.default.cyan:r.status==="cancelled"?ke.default.red:ke.default.yellow;c("Status",o(r.status)),r.role&&c("Your Role",r.role),r.buyer&&c("Buyer",ke.default.dim(r.buyer)),r.seller&&c("Seller",ke.default.dim(r.seller)),r.created_at&&c("Created",ke.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&c("Updated",ke.default.dim(new Date(r.updated_at).toLocaleDateString())),d();let a=r.events||[];if(a.length>0){S("Timeline");for(let l of a){let f=ke.default.dim(new Date(l.created_at).toLocaleString()),m=l.status==="completed"?b.success:l.status==="expired"||l.status==="refunded"?b.error:b.info;console.log(` ${m} ${f} ${l.detail||l.status}`)}d()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(I("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),d())}G();var Fe=D(M(),1);V();ge();async function Xo(e,t,i){switch(e){case void 0:case"list":case"ls":return Ec(i);case"request":case"acquire":case"new":return zo(t,i);case"status":case"get":return Yo(t,i);case"cancel":case"rm":return Tc(t,i);default:return e.includes(".")?zo(e,i):Yo(e,i)}}async function zo(e,t){e||u("A domain is required.",{hint:"domani broker request dream.com --max-budget 5000",json:t.json}),z(e,{json:t.json});let i=C(!t.json);i.start(`Requesting acquisition of ${v.domain(e)}`);let s={domain:e};if(t.maxBudget){let a=Number(t.maxBudget);(!Number.isFinite(a)||a<=0)&&u("--max-budget must be a positive number (USD).",{json:t.json}),s.max_budget=a}let n=await x("/api/broker",{method:"POST",body:JSON.stringify(s)}),r=await n.json();n.ok||(i.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}));let o=r.request||r;if(i.stop(`${b.success} Acquisition requested`),t.json)return w(r,t.fields);S("Broker request"),c("Domain",v.domain(o.domain)),c("Status",Pn(o.status)),o.max_budget!=null&&c("Max budget",v.price(o.max_budget)),c("ID",Fe.default.dim(o.id)),d(),console.log(` ${Fe.default.dim("We'll source the owner and reach out anonymously. Commission-only - you pay nothing unless a deal closes.")}`),d(),I("Check progress:",`domani broker status ${o.id}`),d()}async function Ec(e){let t=C(!e.json);t.start("Loading broker requests");let i=e.status?`?status=${encodeURIComponent(e.status)}`:"",s=await x(`/api/broker${i}`),n=await s.json();s.ok||(t.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:e.json,fields:e.fields}));let r=n.requests||n.data||[];if(t.stop(`${b.success} ${r.length} request(s)`),e.json)return w(n,e.fields);if(r.length===0){d(),console.log(` ${Fe.default.dim("No broker requests yet.")}`),d(),I("Acquire a taken domain:","domani broker request <domain> --max-budget <amount>"),d();return}d(),S("Broker requests"),Z(["Domain","Status","Budget","ID"],r.map(o=>[v.domain(o.domain),Pn(o.status),o.max_budget!=null?v.price(o.max_budget):Fe.default.dim("-"),Fe.default.dim(o.id)])),d()}async function Yo(e,t){e||u("A request ID is required.",{hint:"domani broker status <id> (list with: domani broker)",json:t.json});let i=C(!t.json);i.start("Loading request");let s=await x(`/api/broker/${encodeURIComponent(e)}`),n=await s.json();s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields}));let r=n.request||n;if(i.stop(`${b.success} ${v.domain(r.domain)}`),t.json)return w(n,t.fields);S("Broker request"),c("Domain",v.domain(r.domain)),c("Status",Pn(r.status)),r.max_budget!=null&&c("Max budget",v.price(r.max_budget)),c("Contacted",r.contacted?Fe.default.green("yes"):Fe.default.dim("not yet")),r.failure_reason&&c("Reason",Fe.default.yellow(r.failure_reason)),c("ID",Fe.default.dim(r.id)),d(),r.negotiation_id?(console.log(` ${Fe.default.dim("The owner responded - an anonymous negotiation is open.")}`),d(),I("Review the offer:","domani deals"),d()):["sourcing","contacted","negotiating"].includes(r.status)&&(I("Cancel this request:",`domani broker cancel ${r.id}`),d())}async function Tc(e,t){e||u("A request ID is required.",{hint:"domani broker cancel <id>",json:t.json});let i=C(!t.json);i.start("Cancelling request");let s=await x(`/api/broker/${encodeURIComponent(e)}`,{method:"DELETE"}),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`${b.success} Request cancelled`),t.json)return w(n,t.fields);d()}function Pn(e){return["completed","agreed"].includes(e)?Fe.default.green(e):["negotiating","contacted","sourcing"].includes(e)?Fe.default.cyan(e):["declined","no_contact","failed","expired","cancelled"].includes(e)?Fe.default.dim(e):e}G();var ye=D(M(),1);V();async function Qo(e){return e.read?Dc(e):Pc(e)}async function Pc(e){let t=C(!e.json);t.start("Loading notifications");let i=new URLSearchParams;e.unread&&i.set("unread","true"),e.limit&&i.set("limit",e.limit);let s=i.toString()?`?${i.toString()}`:"",n=await x(`/api/notifications${s}`),r=await n.json();n.ok||(t.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:e.json,fields:e.fields}));let o=r.notifications||r.data||[],a=r.unread_count??o.filter(f=>!f.read).length;if(t.stop(`${b.success} ${o.length} notification(s)${a>0?` ${b.dot} ${ye.default.yellow(`${a} unread`)}`:""}`),e.json){w(r,e.fields);return}if(o.length===0){d(),console.log(` ${ye.default.dim("No notifications.")}`),d();return}d(),S("Notifications");let l=o.map(f=>{let m=f.read?ye.default.dim(b.dot):ye.default.cyan(b.info),g=Nc(f.type),y=f.read?ye.default.dim(f.title):ye.default.white(f.title),k=f.body?f.read?ye.default.dim(Zo(f.body,40)):ye.default.dim(Zo(f.body,40)):ye.default.dim("-"),$=ye.default.dim(new Date(f.created_at).toLocaleDateString());return[m,g,y,k,$]});Z(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),d(),a>0&&(console.log(` ${ye.default.dim("Mark all as read:")} ${ye.default.cyan("domani notifications --read")}`),d())}async function Dc(e){let t=C(!e.json);t.start("Marking all notifications as read");let i=await x("/api/notifications/read-all",{method:"POST"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),e.json){t.stop(""),w(s,e.fields);return}let n=s.count??0;t.stop(`${b.success} ${n} notification(s) marked as read`),d()}function Nc(e){let t={deal:ye.default.cyan,sale:ye.default.green,purchase:ye.default.green,transfer:ye.default.yellow,expiry:ye.default.red,security:ye.default.red,billing:ye.default.yellow,email:ye.default.blue},i=e.split(".")[0].split("_")[0];return(t[i]||ye.default.dim)(e)}function Zo(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}G();var Ct=D(M(),1);V();async function ea(e){let t=e.limit?Number(e.limit):20,i=await x(`/api/billing/invoices?limit=${t}`),s=await i.json();if(i.ok||u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields}),e.json){w({...s,count:s.invoices.length},e.fields);return}if(s.invoices.length===0){console.log(` ${Ct.default.dim("No invoices yet.")}`);return}S(`Invoices (${s.invoices.length})`),d();for(let n of s.invoices){let r=`$${(n.amount_paid/100).toFixed(2)}`,o=new Date(n.created).toLocaleDateString(),a=n.number||n.id;console.log(` ${b.success} ${Ct.default.bold(a)} ${Ct.default.green(r)} ${Ct.default.dim(o)}`),n.description&&console.log(` ${Ct.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${Ct.default.dim(n.hosted_invoice_url)}`)}d(),s.has_more&&(console.log(` ${Ct.default.dim(`Showing ${s.invoices.length} most recent. Use --limit to see more.`)}`),d())}G();var wi=D(M(),1);V();async function ta(e){let t=C(!e?.json);t.start("Setting up billing session");let i=await x("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),s.url||(t.stop("Failed"),u("No checkout URL returned",{hint:"Try again or add a payment method at the dashboard.",json:e?.json})),t.stop("Checkout ready"),e?.json){w({url:s.url});return}d(),console.log(` ${wi.default.dim("Opening browser")} ${b.arrow} ${v.url(s.url)}`),d(),Je(s.url),console.log(` ${b.info} ${wi.default.dim("Complete payment setup in your browser.")}`),console.log(` ${wi.default.dim(" After setup, you can purchase domains with")} ${wi.default.cyan("domani buy")}`),d()}G();var Dn=D(M(),1);V();async function ia(e){let t=C(!e?.json);t.start("Creating upgrade session");let i=await x("/api/billing/subscribe",{method:"POST"}),s=await i.json();if(!i.ok){t.stop("Failed"),s.code==="ALREADY_SUBSCRIBED"||s.code==="ALREADY_PRO"?u("You're already on a paid plan.",{json:e?.json}):u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json});return}if(t.stop("Ready"),e?.json){w({url:s.url},e?.fields);return}d(),console.log(` ${Dn.default.dim("Opening browser")} ${b.arrow} ${v.url(s.url)}`),d(),Je(s.url),console.log(` ${b.info} ${Dn.default.dim("Complete your plan upgrade in the browser.")}`),d()}G();var Nn=D(M(),1);V();async function sa(e){let t=C(!e?.json);t.start("Cancelling subscription");let i=await x("/api/billing/cancel",{method:"POST"}),s=await i.json();if(!i.ok){t.stop("Failed"),s.code==="NOT_PAID"||s.code==="NOT_PRO"?u("You're not on a paid plan.",{json:e?.json}):u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json});return}if(t.stop("Done"),e?.json){w(s,e?.fields);return}d();let n=s.cancel_at?new Date(s.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${b.success} ${Nn.default.dim("Subscription cancelled.")} Access continues until ${Nn.default.cyan(n)}.`),d()}G();var st=D(M(),1);V();ge();Ze();async function na(e,t,i){e||(e=await fe()),z(e,i);let s=[];if(t?.length&&s.push(...t),i.set&&s.push(...i.set.split(",").map(n=>n.trim()).filter(Boolean)),s.length>0||i.reset){await qc(e,s,i);return}await Uc(e,i)}async function Uc(e,t){let i=C(!t.json);i.start(`Fetching nameservers for ${v.domain(e)}`);let s=await x(`/api/domains/${encodeURIComponent(e)}/nameservers`),n=await s.json();if(s.ok||(i.stop("Failed"),u(n.error||n.message,{hint:n.hint,status:s.status,json:t.json,fields:t.fields})),i.stop(`Nameservers for ${v.domain(e)}`),t.json){w(n,t.fields);return}if(d(),n.nameservers.length===0)console.log(` ${b.warning} ${st.default.yellow("No nameservers configured.")}`),console.log(` ${st.default.dim("DNS operations (parking, email, connect) will not work.")}`),d(),I("Set default nameservers:",`domani nameservers ${e} --reset`);else{S("Nameservers");for(let r of n.nameservers)console.log(` ${b.success} ${st.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(d(),console.log(` ${st.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(d(),c("Defaults",n.default_nameservers.map(r=>st.default.dim(r)).join(st.default.dim(", ")))),d()}async function qc(e,t,i){let s=C(!i.json);if(i.reset){s.start(`Fetching default nameservers for ${v.domain(e)}`);let o=await x(`/api/domains/${encodeURIComponent(e)}/nameservers`),a=await o.json();o.ok||(s.stop("Failed"),u(a.error,{hint:a.hint,status:o.status,json:i.json,fields:i.fields})),a.default_nameservers?.length||(s.stop("No defaults"),u("No default nameservers available for this domain's registrar.",{code:"not_found",json:i.json,fields:i.fields})),t=a.default_nameservers,s.stop(`Using defaults: ${t.map(l=>st.default.cyan(l)).join(st.default.dim(", "))}`)}if(t.length<2&&u("At least 2 nameservers required.",{hint:"Example: domani nameservers example.com ns1.dns.com ns2.dns.com",code:"validation_error",json:i.json,fields:i.fields}),i.dryRun)return B("nameservers_set",{domain:e,nameservers:t},i.json,i.fields);s.start(`Setting nameservers for ${v.domain(e)}`);let n=await x(`/api/domains/${encodeURIComponent(e)}/nameservers`,{method:"PUT",body:JSON.stringify({nameservers:t})}),r=await n.json();if(n.ok||(s.stop("Failed"),u(r.error||r.message,{hint:r.hint,status:n.status,json:i.json,fields:i.fields})),s.stop(`${b.success} Nameservers updated`),i.json){w(r,i.fields);return}d();for(let o of r.nameservers)console.log(` ${b.success} ${st.default.cyan(o)}`);d(),console.log(` ${st.default.dim("Changes may take up to 48 hours to propagate.")}`),d(),I("Check propagation:",`domani status ${e}`),d()}var ra=require("crypto"),ls=D(require("fs"),1);gt();var vi=D(M(),1);V();function Fc(e,t){let i=e.split(".").map(Number),s=t.split(".").map(Number);for(let n=0;n<3;n++){if((i[n]||0)>(s[n]||0))return 1;if((i[n]||0)<(s[n]||0))return-1}return 0}async function oa(e){let t=!!e?.json,i=C(!t);i.start("Checking for updates");let s=Le();try{let n=await fetch(`${s}/api/cli/version`);n.ok||(i.stop("Failed"),u("Could not check for updates"));let r=await n.json(),o=r.version,a=r.sha256;if(Fc(o,xe)<=0){i.stop(`${b.success} Already up to date (v${xe})`),t&&w({current:xe,latest:o,up_to_date:!0});return}if(t&&!e?.yes){i.stop(""),w({current:xe,latest:o,up_to_date:!1,hint:"Run `domani update --yes` to upgrade non-interactively, or `domani update` in an interactive terminal."});return}i.stop(t?"":`New version available: ${vi.default.cyan(xe)} ${b.arrow} ${vi.default.green(o)}`);let l=C(!t);l.start("Downloading update");let f=`${s}/cli/domani.js`,m=await fetch(f);m.ok||(l.stop("Download failed"),u(`Failed to download from ${f}`));let g=await m.text();a&&(0,ra.createHash)("sha256").update(g).digest("hex")!==a&&(l.stop("Integrity check failed"),u("Downloaded file does not match expected hash - update aborted"));let y=process.argv[1];y||(l.stop("Failed"),u("Could not determine binary path"));let k=ls.default.realpathSync(y),$=k+".tmp";if(ls.default.writeFileSync($,g,{mode:493}),ls.default.renameSync($,k),l.stop(`${b.success} Updated to v${o}`),t){w({updated:!0,from:xe,to:o});return}d(),console.log(` ${vi.default.dim("Restart your terminal or run")} domani --version ${vi.default.dim("to verify")}`),d()}catch(n){u(`Update failed: ${n instanceof Error?n.message:String(n)}`)}}var ds=D(require("fs"),1),aa=D(require("path"),1),la=D(require("os"),1);Ne();var $i=D(M(),1);V();async function da(){let e=process.argv[1],t=e?ds.default.realpathSync(e):null,i=aa.default.join(la.default.homedir(),".domani");if(d(),console.log(` ${$i.default.bold("This will remove:")}`),t&&console.log(` ${b.dot} CLI binary: ${$i.default.dim(t)}`),console.log(` ${b.dot} Config dir: ${$i.default.dim(i)}`),d(),await Ye({message:"Uninstall domani?"})!==!0){console.log(` ${$i.default.dim("Cancelled.")}`);return}ds.default.rmSync(i,{recursive:!0,force:!0}),t&&ds.default.unlinkSync(t),d(),console.log(` ${b.success} domani uninstalled.`),d()}G();var re=D(M(),1);V();async function ua(e,t){let i=t?.json,s=t?.fields,n=e?`/api/schema?command=${encodeURIComponent(e)}`:"/api/schema",r=C(!i);r.start("Loading schema");let o=await be(n),a=await o.json();if(o.ok||(r.stop("Failed"),u(a.error||a.message,{hint:a.hint,status:o.status,json:i,fields:s})),r.stop("Schema loaded"),i){w(a,s);return}e?Lc(e,a):Mc(a.commands)}function Mc(e){S("Commands");let t=Object.entries(e).map(([i,s])=>[re.default.bold(re.default.cyan(i)),s.description]);Z(["Command","Description"],t,[20,50]),d(),console.log(` ${re.default.dim("Run")} ${re.default.cyan("domani schema <command>")} ${re.default.dim("for full details")}`),d()}function Lc(e,t){if(S(`domani ${e}`),console.log(` ${t.description}`),d(),console.log(` ${v.label("Usage:")} ${re.default.cyan(t.usage)}`),t.arguments&&Object.keys(t.arguments).length>0){d(),console.log(` ${re.default.bold("Arguments")}`);for(let[i,s]of Object.entries(t.arguments)){let n=s.required?re.default.red("*"):"",r=re.default.dim(`(${s.type}${s.variadic?", variadic":""})`);console.log(` ${re.default.cyan(i)}${n} ${r}`),s.description&&console.log(` ${re.default.dim(s.description)}`)}}if(t.options&&Object.keys(t.options).length>0){d(),console.log(` ${re.default.bold("Options")}`);for(let[i,s]of Object.entries(t.options)){let n=s.required?re.default.red("*"):"",r=re.default.dim(`(${s.type})`),o=s.choices?re.default.dim(` [${s.choices.join(", ")}]`):"";console.log(` ${re.default.cyan(`--${i}`)}${n} ${r}${o}`),console.log(` ${re.default.dim(s.description)}`)}}if(t.api)if(d(),console.log(` ${re.default.bold("API")}`),Vc(t.api))ca(t.api);else for(let[i,s]of Object.entries(t.api))console.log(` ${re.default.bold(re.default.yellow(i))}`),ca(s,6);t.errors&&t.errors.length>0&&(d(),console.log(` ${re.default.bold("Errors")}`),console.log(` ${t.errors.map(i=>re.default.dim(i)).join(re.default.dim(", "))}`)),d()}function Vc(e){return typeof e=="object"&&e!==null&&"method"in e&&"path"in e}function ca(e,t=4){let i=" ".repeat(t);if(console.log(`${i}${re.default.green(e.method)} ${re.default.white(e.path)}`),e.parameters&&Object.keys(e.parameters).length>0)for(let[s,n]of Object.entries(e.parameters)){let r=n.required?re.default.red("*"):"",o=[n.type];n.enum&&o.push(`enum: ${n.enum.join(", ")}`),n.minimum!==void 0&&o.push(`min: ${n.minimum}`),n.maximum!==void 0&&o.push(`max: ${n.maximum}`),n.maxItems!==void 0&&o.push(`maxItems: ${n.maxItems}`),n.items&&o.push(`items: ${n.items}`),n.in==="path"&&o.push("in: path");let a=re.default.dim(`(${o.join(", ")})`);console.log(`${i} ${re.default.cyan(s)}${r} ${a}`),n.description&&console.log(`${i} ${re.default.dim(n.description)}`)}}G();var Me=D(M(),1);Ne();V();async function ma(e){let t=C(!e.json);t.start("Loading payment method");let i=await x("/api/me"),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e.json,fields:e.fields})),e.json){t.stop(""),w(s.card?{has_payment_method:s.has_payment_method,card:s.card}:{has_payment_method:!1},e.fields);return}if(!s.has_payment_method||!s.card){t.stop("No payment method on file"),d(),console.log(` ${Me.default.dim("Add a card with")} ${Me.default.cyan("domani card add")}`),d();return}let{brand:n,last4:r,exp_month:o,exp_year:a}=s.card,l=`${String(o).padStart(2,"0")}/${a}`,f=n.charAt(0).toUpperCase()+n.slice(1);t.stop("Payment method loaded"),S("Payment method"),c("Card",`${Me.default.bold(f)} \u2022\u2022\u2022\u2022 ${Me.default.bold(r)}`),c("Expires",l),d(),console.log(` ${Me.default.dim("Update with")} ${Me.default.cyan("domani card add")}`),d()}async function fa(e){let t=C(!e?.json);t.start("Setting up payment session");let i=await x("/api/billing/setup",{method:"POST",body:JSON.stringify({mode:"checkout"})}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),s.url||(t.stop("Failed"),u("No checkout URL returned",{json:e?.json})),t.stop("Checkout ready"),e?.json){w({url:s.url},e?.fields);return}d(),console.log(` ${Me.default.dim("Opening browser")} ${b.arrow} ${v.url(s.url)}`),d(),Je(s.url),console.log(` ${b.info} ${Me.default.dim("Complete payment setup in your browser.")}`),console.log(` ${Me.default.dim(" After setup, you can purchase domains with")} ${Me.default.cyan("domani buy")}`),d()}async function pa(e){if(!e?.yes&&!e?.json){let n=await Ye({message:"Remove your saved payment method?"});if(le(n)||!n){console.log(` ${Me.default.dim("Cancelled.")}`);return}}let t=C(!e?.json);t.start("Removing payment method");let i=await x("/api/billing/card",{method:"DELETE"}),s=await i.json();if(i.ok||(t.stop("Failed"),u(s.error||s.message,{hint:s.hint,status:i.status,json:e?.json})),t.stop(`${b.success} Payment method removed`),e?.json){w({removed:!0},e?.fields);return}d(),console.log(` ${Me.default.dim("Add a new card with")} ${Me.default.cyan("domani card add")}`),d()}var Un=D(M(),1);G();V();async function me(e,t,i,s){let n=C(!i.json);n.start(s);let r=await x(e,t),o=await r.json();return r.ok||(n.stop("Failed"),u(o.error||o.message,{hint:o.hint,status:r.status,json:i.json,fields:i.fields})),n.stop(`${b.success} Done`),o}async function ha(e,t){if(!e||e==="list"){let i=await me("/api/workspaces",void 0,t,"Loading workspaces");if(t.json)return w(i,t.fields);if(d(),S("Workspaces"),!i.workspaces.length){console.log(` ${Un.default.dim("No workspaces yet.")}`),I("Create one:","domani workspace create --name Acme");return}Z(["ID","Name","Role","Mailboxes","Members"],i.workspaces.map(s=>[s.id,s.name,s.role,String(s.mailbox_count),String(s.member_count)]),[28,28,10,10,8]),d();return}if(e==="create"){t.name||u("Workspace name required",{hint:"Usage: domani workspace create --name Acme",code:"validation_error",json:t.json});let i=await me("/api/workspaces",{method:"POST",body:JSON.stringify({name:t.name})},t,"Creating workspace");if(t.json)return w(i,t.fields);d(),S("Workspace Created"),c("ID",i.id),c("Name",i.name),d();return}if(e==="show"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace show --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}`,void 0,t,"Loading workspace");if(t.json)return w(i,t.fields);d(),S(i.name),c("Role",i.role),c("Mailboxes",i.mailboxes.length),c("Members",i.members.length),d(),Z(["Email","Role","Mailbox grants"],i.members.map(s=>[s.email,s.role,String(s.mailbox_grants.length)]),[42,12,16]),d();return}if(e==="access"){if(t.id||u("Workspace ID required",{hint:"Usage: domani workspace access --id <id>",code:"validation_error",json:t.json}),!t.subject&&!t.resource&&!t.profile){let a=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access`,void 0,t,"Loading access graph");if(t.json)return w(a,t.fields);d(),S("Access Graph"),c("Principals",a.principals.length),c("Mailboxes",a.mailboxes.length),c("Groups",a.groups.length),c("Collections",a.collections.length),c("Active grants",a.grants.length),c("Pending offers",a.offers.length),d();return}(!t.subject||!t.resource||!t.profile)&&u("Subject, resource, and profile are required together",{hint:"Usage: domani workspace access --id <id> --subject human:<id> --resource mailbox:<id> --profile responder [--apply]",code:"validation_error",json:t.json});let[i,s]=t.subject.split(":",2),[n,r]=t.resource.split(":",2);(!s||!["human","agent","service","token","group"].includes(i))&&u("Invalid --subject",{hint:"Use human:<id>, agent:<id>, service:<id>, token:<id>, or group:<id>",json:t.json}),(!r||!["mailbox","collection"].includes(n))&&u("Invalid --resource",{hint:"Use mailbox:<id> or collection:<id>",json:t.json});let o=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access`,{method:"PUT",body:JSON.stringify({mode:t.apply?"apply":"plan",subject:i==="group"?{type:"group",id:s}:{type:"principal",principal:{type:i,id:s}},resource:{type:n,id:r},profile:t.profile,expected_version:t.expectedVersion?Number(t.expectedVersion):void 0})},t,t.apply?"Applying access":"Planning access");if(t.json)return w(o,t.fields);d(),S(t.apply?"Access Applied":"Access Plan"),c("Action",o.action),c("Changed",String(o.changed)),o.grant_id&&c("Grant",o.grant_id),d();return}if(e==="group"){(!t.id||!t.name)&&u("Workspace ID and group name required",{hint:"Usage: domani workspace group --id <id> --name Support --principals human:u1,agent:a1",code:"validation_error",json:t.json});let i=(t.principals||"").split(",").map(n=>n.trim()).filter(Boolean).map(n=>{let[r,o]=n.split(":",2);return o||u(`Invalid principal: ${n}`,{hint:"Use type:id",json:t.json}),{type:r,id:o,label:o}}),s=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/groups`,{method:"PUT",body:JSON.stringify({id:t.groupId,name:t.name,principals:i})},t,"Syncing access group");if(t.json)return w(s,t.fields);d(),S("Access Group Synced"),c("ID",s.id),c("Principals",s.principal_count),d();return}if(e==="collection"){(!t.id||!t.name)&&u("Workspace ID and collection name required",{hint:"Usage: domani workspace collection --id <id> --name Admin --mailboxes mb1,mb2",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/collections`,{method:"PUT",body:JSON.stringify({id:t.collectionId,name:t.name,mailbox_ids:t.mailboxes?.split(",").map(s=>s.trim()).filter(Boolean)??[]})},t,"Syncing mailbox collection");if(t.json)return w(i,t.fields);d(),S("Mailbox Collection Synced"),c("ID",i.id),c("Mailboxes",i.mailbox_count),d();return}if(e==="offer"){(!t.id||!t.email)&&u("Workspace ID and recipient email required",{hint:"Usage: domani workspace offer --id <id> --email person@example.com --mailboxes mb1,mb2 --profile responder",code:"validation_error",json:t.json});let i=(t.mailboxes||"").split(",").map(n=>n.trim()).filter(Boolean).map(n=>({resource:{type:"mailbox",id:n},profile:t.profile||"responder"})),s=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/offers`,{method:"POST",body:JSON.stringify({email:t.email,grants:i,ownership_disposition:t.ownershipDisposition,creator_disposition:t.creatorDisposition,billing_disposition:t.billingDisposition})},t,"Sending access offer");if(t.json)return w(s,t.fields);d(),S("Access Offered"),c("Email",s.email),c("Expires",s.expires_at),d();return}if(e==="accept-offer"){t.token||u("Access offer token required",{hint:"Usage: domani workspace accept-offer --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/access/offers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting access offer");if(t.json)return w(i,t.fields);d(),S("Access Accepted"),c("Workspace",i.workspace_name),c("Ownership",i.ownership),d();return}if(e==="revoke-access"){(!t.id||!t.grantId)&&u("Workspace and grant IDs required",{hint:"Usage: domani workspace revoke-access --id <id> --grant-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/access/grants/${encodeURIComponent(t.grantId)}`,{method:"DELETE",body:JSON.stringify({expected_version:t.expectedVersion?Number(t.expectedVersion):void 0})},t,"Revoking access");if(t.json)return w(i,t.fields);d(),S("Access Revoked"),c("Grant",i.grant_id),c("Version",i.version),d();return}if(e==="rename"){(!t.id||!t.name)&&u("Workspace ID and name required",{hint:"Usage: domani workspace rename --id <id> --name <name>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}`,{method:"PATCH",body:JSON.stringify({name:t.name})},t,"Renaming workspace");if(t.json)return w(i,t.fields);d(),S("Workspace Renamed"),c("ID",i.id),c("Name",i.name),d();return}if(e==="invite"){(!t.id||!t.email)&&u("Workspace ID and email required",{hint:"Usage: domani workspace invite --id <id> --email person@example.com",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/invitations`,{method:"POST",body:JSON.stringify({email:t.email,role:t.role,mailbox_ids:t.mailboxes?.split(",").map(s=>s.trim()).filter(Boolean),mailbox_role:t.mailboxRole})},t,"Sending invitation");if(t.json)return w(i,t.fields);d(),S("Invitation Sent"),c("Email",i.email),c("Role",i.role),c("Expires",i.expires_at),d();return}if(e==="accept"){t.token||u("Invitation token required",{hint:"Usage: domani workspace accept --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/invitations/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting invitation");if(t.json)return w(i,t.fields);d(),S("Workspace Joined"),c("Workspace",i.workspace_name),c("Role",i.role),d();return}if(e==="revoke-invite"){(!t.id||!t.invitationId)&&u("Workspace ID and invitation ID required",{hint:"Usage: domani workspace revoke-invite --id <id> --invitation-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/invitations/${encodeURIComponent(t.invitationId)}`,{method:"DELETE"},t,"Revoking invitation");if(t.json)return w(i,t.fields);d(),S("Invitation Revoked"),c("Invitation",i.invitation_id),d();return}if(e==="member-role"){(!t.id||!t.membershipId||!t.role)&&u("Workspace ID, membership ID, and role required",{hint:"Usage: domani workspace member-role --id <id> --membership-id <id> --role admin|member",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"PATCH",body:JSON.stringify({role:t.role})},t,"Updating member role");if(t.json)return w(i,t.fields);d(),S("Member Updated"),c("Membership",i.id),c("Role",i.role),d();return}if(e==="remove-member"){(!t.id||!t.membershipId)&&u("Workspace ID and membership ID required",{hint:"Usage: domani workspace remove-member --id <id> --membership-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"DELETE"},t,"Removing member and revoking access");if(t.json)return w(i,t.fields);d(),S("Member Removed"),c("Membership",i.membership_id),d();return}if(e==="leave"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace leave --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/members/me`,{method:"DELETE"},t,"Leaving workspace and revoking access");if(t.json)return w(i,t.fields);d(),S("Workspace Left"),c("Workspace",i.workspace_id),d();return}if(e==="transfer"){(!t.id||!t.membershipId)&&u("Workspace ID and target membership ID required",{hint:"Usage: domani workspace transfer --id <workspace-id> --membership-id <membership-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer`,{method:"POST",body:JSON.stringify({membership_id:t.membershipId})},t,"Requesting ownership transfer");if(t.json)return w(i,t.fields);d(),S("Ownership Transfer Requested"),c("To",i.to_email),c("Expires",i.expires_at),c("Billing",i.billing),d();return}if(e==="accept-ownership"){t.token||u("Ownership transfer token required",{hint:"Usage: domani workspace accept-ownership --token <token>",code:"validation_error",json:t.json});let i=await me("/api/workspaces/ownership-transfers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting ownership");if(t.json)return w(i,t.fields);d(),S("Ownership Transferred"),c("Workspace",i.workspace_id),c("Domains",i.domains_transferred),c("Mailboxes",i.mailboxes_transferred),c("Previous owner",i.previous_owner_role),d();return}if(e==="revoke-transfer"){(!t.id||!t.transferId)&&u("Workspace ID and transfer ID required",{hint:"Usage: domani workspace revoke-transfer --id <workspace-id> --transfer-id <transfer-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer/${encodeURIComponent(t.transferId)}`,{method:"DELETE"},t,"Revoking ownership transfer");if(t.json)return w(i,t.fields);d(),S("Ownership Transfer Revoked"),c("Transfer",i.transfer_id),d();return}if(e==="adopt-mailbox"){(!t.id||!t.mailboxId)&&u("Workspace ID and mailbox ID required",{hint:"Usage: domani workspace adopt-mailbox --id <workspace-id> --mailbox-id <mailbox-id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes`,{method:"POST",body:JSON.stringify({mailbox_id:t.mailboxId})},t,"Adopting mailbox boundary");if(t.json)return w(i,t.fields);d(),S(i.adopted?"Mailbox Boundary Adopted":"Already in Workspace"),c("Address",i.address),c("Mailboxes",i.mailbox_ids?.length??1),d();return}if(e==="grant"){(!t.id||!t.mailboxId||!t.membershipId||!t.role)&&u("Workspace, mailbox, membership, and role required",{hint:"Usage: domani workspace grant --id <id> --mailbox-id <id> --membership-id <id> --role viewer|responder|manager",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes/${encodeURIComponent(t.mailboxId)}/grants`,{method:"PUT",body:JSON.stringify({membership_id:t.membershipId,role:t.role})},t,"Granting mailbox access");if(t.json)return w(i,t.fields);d(),S("Mailbox Access Granted"),c("Membership",i.membership_id),c("Mailbox",i.mailbox_id),c("Role",i.role),d();return}if(e==="revoke-grant"){(!t.id||!t.mailboxId||!t.membershipId)&&u("Workspace, mailbox, and membership required",{hint:"Usage: domani workspace revoke-grant --id <id> --mailbox-id <id> --membership-id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes/${encodeURIComponent(t.mailboxId)}/grants`,{method:"DELETE",body:JSON.stringify({membership_id:t.membershipId})},t,"Revoking mailbox access");if(t.json)return w(i,t.fields);d(),S("Mailbox Access Revoked"),c("Membership",i.membership_id),c("Mailbox",i.mailbox_id),d();return}if(e==="checkout"){(!t.id||!t.plan)&&u("Workspace ID and plan required",{hint:"Usage: domani workspace checkout --id <id> --plan mail_team",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/billing/checkout`,{method:"POST",body:JSON.stringify({plan:t.plan})},t,"Creating secure checkout");if(t.json)return w(i,t.fields);d(),S("Workspace Checkout"),c("Plan",i.plan),c("URL",i.url),d(),i.url&&t.open!==!1&&(console.log(` ${Un.default.dim("Opening browser")} ${b.arrow} ${v.url(i.url)}`),Je(i.url));return}if(e==="cancel"){t.id||u("Workspace ID required",{hint:"Usage: domani workspace cancel --id <id>",code:"validation_error",json:t.json});let i=await me(`/api/workspaces/${encodeURIComponent(t.id)}/billing/cancel`,{method:"POST"},t,"Scheduling cancellation");if(t.json)return w(i,t.fields);d(),S("Cancellation Scheduled"),c("Message",i.message),i.cancel_at&&c("Cancels",i.cancel_at),d();return}u(`Unknown action: ${e}`,{hint:"Actions: list, create, show, access, group, collection, offer, accept-offer, revoke-access, rename, invite, accept, revoke-invite, member-role, remove-member, leave, transfer, accept-ownership, revoke-transfer, adopt-mailbox, grant, revoke-grant, checkout, cancel",code:"validation_error",json:t.json,fields:t.fields})}var fs=D(M(),1);G();var cs=D(require("node:crypto"),1),ii=D(require("node:fs"),1),ga=D(require("node:os"),1),us=D(require("node:path"),1),Wc=process.env.DOMANI_CONFIG_DIR||us.default.join(ga.default.homedir(),".domani"),ya=us.default.join(Wc,"mutations");function Hc(e){return us.default.join(ya,`${cs.default.createHash("sha256").update(e).digest("hex")}.json`)}function ct(e,t,i){let s=Hc(e),n=cs.default.createHash("sha256").update(JSON.stringify(t)).digest("hex");if(!i)try{let o=JSON.parse(ii.default.readFileSync(s,"utf8"));if(o.key&&o.fingerprint===n)return{key:o.key,complete:()=>{try{ii.default.unlinkSync(s)}catch{}}}}catch{}let r=i||`cli-${cs.default.randomUUID()}`;return ii.default.mkdirSync(ya,{recursive:!0,mode:448}),ii.default.writeFileSync(s,JSON.stringify({key:r,fingerprint:n}),{mode:384}),{key:r,complete:()=>{try{ii.default.unlinkSync(s)}catch{}}}}V();function ba(e){if(e.clearUpstreamHeaders)return{};let t={};for(let[i,s]of[["Authorization",e.upstreamAuthorizationEnv],["X-Api-Key",e.upstreamApiKeyEnv]]){if(!s)continue;let n=process.env[s];n||u(`Environment variable ${s} is empty`,{code:"validation_error",json:e.json}),t[i]=n}return Object.keys(t).length?t:void 0}async function Wt(e,t){let i=await e.json();return e.ok||u(i.error||i.message,{hint:i.hint,status:e.status,json:t.json,fields:t.fields}),i}function ms(e,t){if(t.json)return w(e,t.fields);let i=e.http_route||e;d(),S("HTTP Route"),c("ID",i.id),c("URL",i.url),c("Upstream",i.upstream),c("Status",i.status),c("Expires",i.expires_at),c("Browser mode",i.browser_mode||"stateless"),i.upstream_verification?.secret&&(c("Verification secret",fs.default.yellow(i.upstream_verification.secret)),console.log(fs.default.dim(" Save this secret now. It will not be shown again after this receipt."))),d()}async function wa(e,t,i){if(!e||e==="list"){let s=new URLSearchParams;i.domain&&s.set("domain",i.domain),i.hostname&&s.set("hostname",i.hostname),i.status&&s.set("status",i.status);let n=await Wt(await x(`/api/http-routes${s.size?`?${s}`:""}`),i);if(i.json)return w(n,i.fields);d(),S("HTTP Routes");for(let r of n.http_routes)console.log(` ${fs.default.dim(r.id)} ${r.hostname} ${r.status} ${r.upstream}`);d();return}if(e==="create"){i.upstream||u("--upstream is required",{code:"validation_error",json:i.json});let s=ba(i),n={...i.hostname?{hostname:i.hostname}:{},upstream:i.upstream,...i.expiresIn?{expires_in:Number(i.expiresIn)}:{},...i.hostHeader?{host_header:i.hostHeader}:{},...i.upstreamVerification?{upstream_verification:i.upstreamVerification}:{},...s?{upstream_headers:s}:{}},r=ct(`route:create:${i.hostname||"auto"}`,n,i.idempotencyKey),o=C(!i.json);o.start("Creating HTTP route");let a=await Wt(await x("/api/http-routes",{method:"POST",headers:{"Idempotency-Key":r.key},body:JSON.stringify(n)}),i);return r.complete(),o.stop(`${b.success} HTTP route created`),ms(a,i)}if(t||u("Route ID is required",{hint:`Usage: domani route ${e} <id>`,code:"validation_error",json:i.json}),e==="get")return ms(await Wt(await x(`/api/http-routes/${encodeURIComponent(t)}`),i),i);if(e==="delete"){let s=await x(`/api/http-routes/${encodeURIComponent(t)}`,{method:"DELETE"});if(s.ok||await Wt(s,i),i.json)return w({deleted:!0,id:t},i.fields);console.log(`${b.success} HTTP route deleted`);return}if(e==="refresh"){i.expiresIn||u("--expires-in is required",{code:"validation_error",json:i.json});let s={expires_in:Number(i.expiresIn)},n=ct(`route:refresh:${t}`,s,i.idempotencyKey),r=await Wt(await x(`/api/http-routes/${encodeURIComponent(t)}`,{method:"PATCH",headers:{"Idempotency-Key":n.key},body:JSON.stringify(s)}),i);return n.complete(),ms(r,i)}if(e==="rotate-verification"){let s=ct(`route:rotate-verification:${t}`,{},i.idempotencyKey),n=await Wt(await x(`/api/http-routes/${encodeURIComponent(t)}/upstream-verification/rotate`,{method:"POST",headers:{"Idempotency-Key":s.key}}),i);return s.complete(),i.json?w(n,i.fields):ms(n,i)}if(e==="rotate-headers"){let s=ba(i);s||u("Provide an upstream header environment variable or --clear-upstream-headers",{code:"validation_error",json:i.json});let n=ct(`route:rotate-headers:${t}`,{upstream_headers:s},i.idempotencyKey),r=await Wt(await x(`/api/http-routes/${encodeURIComponent(t)}/upstream-headers`,{method:"PUT",headers:{"Idempotency-Key":n.key},body:JSON.stringify({upstream_headers:s})}),i);if(n.complete(),i.json)return w(r,i.fields);console.log(`${b.success} Upstream headers replaced: ${r.upstream_header_names.join(", ")||"none"}`);return}u(`Unknown action: ${e}`,{hint:"Actions: create, list, get, refresh, rotate-verification, rotate-headers, delete",code:"validation_error",json:i.json})}var he=D(M(),1),ka=require("node:fs");G();V();var qn="mailzero-personal-ai.v1",we=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AssistantUsageError"}},Jc={choose:"choose",instruct:"instruct","take-over":"take_over",snooze:"snooze",ignore:"ignore",correct:"correct"},Bc=["today","settings","set","preview","backfill","retry","item","choose","instruct","snooze","ignore","take-over","correct","plan","activity","export","delete"];function va(e){return(e||"").split(",").map(t=>t.trim()).filter(Boolean)}function ki(e,t,i){let s=Number(e);if(!Number.isInteger(s)||s<i)throw new we(`${t} must be an integer of at least ${i}`);return s}function Gc(e,t,i){let s=e||"today";switch(s){case"today":return{method:"GET",path:"/api/assistant/today"};case"settings":return{method:"GET",path:"/api/assistant/settings"};case"set":{let n={};if(i.enable&&i.disable)throw new we("Use either --enable or --disable");if(i.pause&&i.resume)throw new we("Use either --pause or --resume");if(i.enable&&(n.enabled=!0),i.disable&&(n.enabled=!1),i.shadow!==void 0&&(n.shadow_enabled=i.shadow),i.pause&&(n.paused=!0),i.resume&&(n.paused=!1),i.none?n.mailbox_ids=[]:i.mailboxes!==void 0&&(n.mailbox_ids=va(i.mailboxes)),i.days!==void 0&&(n.history_window_days=ki(i.days,"--days",1)),i.attachmentVision!==void 0){if(!["on","off"].includes(i.attachmentVision))throw new we("--attachment-vision must be on or off");n.attachment_vision=i.attachmentVision==="on"}if(!Object.keys(n).length)throw new we("Provide at least one setting","Options: --enable, --disable, --shadow, --no-shadow, --pause, --resume, --mailboxes <ids>, --none, --days <n>, --attachment-vision <on|off>");return{method:"PUT",path:"/api/assistant/settings",body:n}}case"preview":{if(!i.consent)throw new we("--consent is required to start the assistant",`Consent means Domani may read the selected mailboxes and send bounded, minimized message content to the approved private model route (version ${qn}). Nothing is ever sent on your behalf. You can pause or delete derived data at any time.`);let n=va(i.mailboxes);if(!n.length)throw new we("--mailboxes is required","Pass owned mailbox IDs, comma-separated. List them with: domani assistant settings");return{method:"POST",path:"/api/assistant/preview",body:{mailbox_ids:n,history_window_days:i.days===void 0?30:ki(i.days,"--days",1),consent:!0,consent_version:qn}}}case"backfill":return{method:"GET",path:"/api/assistant/backfill"};case"retry":return{method:"POST",path:"/api/assistant/backfill",idempotency:"assistant:retry"};case"item":if(!t)throw new we("Work item ID is required","Usage: domani assistant item <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}`};case"plan":if(!t)throw new we("Action plan ID is required","Usage: domani assistant plan <id>");return{method:"GET",path:`/api/assistant/action-plans/${encodeURIComponent(t)}`};case"activity":return{method:"GET",path:`/api/assistant/activity${i.limit!==void 0?`?limit=${ki(i.limit,"--limit",1)}`:""}`};case"export":return{method:"GET",path:"/api/assistant/data"};case"delete":if(!i.yes)throw new we("Deleting derived assistant data requires --yes","This removes analyses, Decisions, plans, receipts, imports, and settings. Source mail is never touched.");return{method:"DELETE",path:"/api/assistant/data"};case"choose":case"instruct":case"snooze":case"ignore":case"take-over":case"correct":{if(!t)throw new we("Work item ID is required",`Usage: domani assistant ${s} <id> --item-version <work_item_version>`);if(i.itemVersion===void 0)throw new we("--item-version is required","Pass the work_item_version shown by: domani assistant item <id>");let n=Jc[s],r={type:n,work_item_version:ki(i.itemVersion,"--item-version",1)};if(n==="choose"){if(!i.option||!i.decision||i.decisionVersion===void 0)throw new we("--option, --decision and --decision-version are required","They come from the Decision shown by: domani assistant item <id>");r.decision_id=i.decision,r.decision_version=ki(i.decisionVersion,"--decision-version",1),r.option_id=i.option}if(n==="instruct"){if(!i.text)throw new we("--text is required","The instruction the assistant should follow when preparing the draft");r.instruction=i.text}if(n==="snooze"){if(!i.until)throw new we("--until is required","ISO 8601 date-time, for example 2026-09-03T09:00:00Z");r.until=i.until}if(n==="correct"){if(!i.field||!i.text)throw new we("--field and --text are required","Name the analysis field to correct and the correct value");r.field=i.field,r.correction=i.text}return{method:"POST",path:`/api/assistant/work-items/${encodeURIComponent(t)}/interactions`,body:r,idempotency:`assistant:${n}:${t}`}}default:throw new we(`Unknown action: ${s}`,`Actions: ${Bc.join(", ")}`)}}async function Kc(e,t){let i=await e.json();if(e.ok)return i;i.code==="NOT_AVAILABLE"&&u("The Mailzero assistant is in private preview",{hint:"It is enabled per account during the private beta. Ask for access at https://domani.run/support or wait for general availability.",code:"not_available",status:e.status,json:t.json,fields:t.fields}),i.code==="INSUFFICIENT_SCOPE"&&u(i.error||"Missing assistant scope",{hint:"This token needs the assistant:read scope for reads and assistant:write for changes. Create one with: domani tokens create --scopes assistant:read,assistant:write",code:"insufficient_scope",status:e.status,json:t.json,fields:t.fields}),u(i.error||i.message,{hint:i.hint,status:e.status,json:t.json,fields:t.fields})}function zc(e){let t=e.mailbox?.name||e.mailbox?.address||"";return[he.default.dim(e.id),t,(e.title||e.summary||"").slice(0,70),e.attention?.deadline||""]}function Yc(e,t){if(t.json)return w(e,t.fields);d(),S("Today");let i=[["now","Now"],["needs_you","Needs you"],["waiting","Waiting"],["upcoming","Upcoming"],["handled","Handled"]],s=0;for(let[r,o]of i){let a=e.sections&&typeof e.sections=="object"?e.sections:e,l=Array.isArray(a[r])?a[r]:[];l.length&&(s+=l.length,console.log(` ${he.default.bold(o)} ${he.default.dim(`(${l.length})`)}`),Z(["ID","Who","Summary","Deadline"],l.map(zc)),d())}s||console.log(he.default.dim(" Nothing needs you right now."));let n=typeof e.as_of=="string"?e.as_of:void 0;n&&console.log(he.default.dim(` As of ${n}`)),d()}function $a(e,t){if(t.json)return w(e,t.fields);let i=e.work_item||e;if(d(),S("Work item"),c("ID",i.id),c("Version",String(i.version??"")),c("Status",i.status||""),c("Mailbox",i.mailbox?.name?`${i.mailbox.name} <${i.mailbox.address||""}>`:i.mailbox?.address||""),i.title&&c("Title",i.title),c("Summary",i.summary||""),i.attention?.reason&&c("Why",i.attention.reason),i.attention?.deadline&&c("Deadline",i.attention.deadline),i.source?.event_id&&c("Source",`${i.source.type||"mail"} ${i.source.event_id}`),i.decision?.options?.length){d(),console.log(` ${he.default.bold("Decision")} ${he.default.dim(`${i.decision.id} v${i.decision.version??1}`)}`);for(let s of i.decision.options)console.log(` ${he.default.dim(s.id)} ${s.label}${s.recommended?he.default.green(" recommended"):""}`);console.log(he.default.dim(` Choose with: domani assistant choose ${i.id} --version ${i.version??1} --decision ${i.decision.id} --decision-version ${i.decision.version??1} --option <id>`))}i.plan?.id&&c("Plan",`${i.plan.id} (preview with: domani assistant plan ${i.plan.id})`),d()}function Xc(e,t){if(t.json)return w(e,t.fields);d(),S("Mailzero assistant"),c("Enabled",e.enabled?"yes":"no"),c("Shadow",e.shadow_enabled?"yes":"no"),c("Paused",e.paused?"yes":"no"),c("History window",`${e.history_window_days} days`),c("Privacy route",String(e.privacy_route||"")),c("Consent",e.consent?.accepted_version?`${e.consent.accepted_version} at ${e.consent.accepted_at}`:`none (required: ${e.consent?.required_version||qn})`),d();let i=new Set(e.mailbox_ids||[]),s=e.mailboxes||[];s.length&&Z(["ID","Address","AI"],s.map(n=>[he.default.dim(n.id),n.address,i.has(n.id)?he.default.green("on"):he.default.dim("off")])),d()}function Zc(e,t){if(t.json)return w(e,t.fields);let i=e.backfill;if(d(),S("History import"),!i){console.log(he.default.dim(" No import has run yet.")),d();return}c("Status",`${i.status} (${i.phase})`),c("Progress",`${i.processed}/${i.total}${i.percent===null||i.percent===void 0?"":` (${i.percent}%)`}`),c("Failed",String(i.failed??0)),c("Paused",i.paused?"yes":"no"),i.estimated_completion_at&&c("ETA",i.estimated_completion_at),i.can_close_app&&console.log(he.default.dim(" The import continues in the background.")),d()}function Qc(e,t){if(t.json)return w(e,t.fields);let i=e.action_plan||e.plan||e;d(),S("Action preview"),c("ID",i.id),c("Status",i.status||""),i.expires_at&&c("Expires",i.expires_at);for(let s of i.effects||[])d(),console.log(` ${he.default.bold(s.kind||"effect")} ${he.default.dim(`mailbox ${s.mailbox_id||""}`)}${s.reply_to_message_id?he.default.dim(` in reply to ${s.reply_to_message_id}`):""}`),s.body&&console.log(`
206
+ ${String(s.body).split(`
207
+ `).map(n=>` ${n}`).join(`
208
+ `)}
209
+ `);console.log(he.default.dim(` Nothing is sent by this command. Send through the reply endpoint with assistant_plan_id=${i.id} or from the app.`)),d()}function eu(e,t){if(t.json)return w(e,t.fields);let i=e.events||[];d(),S("Assistant activity"),i.length?Z(["When","Kind","Action","Work item"],i.map(s=>[s.occurred_at||"",s.kind||"",s.action||s.type||"",he.default.dim(s.work_item?.id||s.work_item_id||"")])):console.log(he.default.dim(" No activity yet.")),d()}async function _a(e,t,i){let s;try{s=Gc(e,t,i)}catch(g){throw g instanceof we&&u(g.message,{hint:g.hint,code:"validation_error",json:i.json}),g}let n=e||"today",r={},o;s.idempotency&&(o=ct(s.idempotency,s.body||{},i.idempotencyKey),r["Idempotency-Key"]=o.key,s.body&&s.path.endsWith("/interactions")&&(s.body.idempotency_key=o.key));let a={set:"Updating assistant settings",preview:"Recording consent and starting the history import",retry:"Requeuing failed messages",delete:"Deleting derived assistant data"}[n]||(s.method!=="GET"?"Recording your decision":void 0),l=C(!i.json&&!!a);a&&l.start(a);let f=await x(s.path,{method:s.method,headers:r,...s.body?{body:JSON.stringify(s.body)}:{}}),m=await Kc(f,i);switch(o?.complete(),a&&l.stop(`${b.success} Done`),n){case"today":return Yc(m,i);case"settings":return Xc(m,i);case"backfill":return Zc(m,i);case"item":return $a(m,i);case"plan":return Qc(m,i);case"activity":return eu(m,i);case"export":{let g=`${JSON.stringify(m,null,2)}
210
+ `;if(i.out){if((0,ka.writeFileSync)(i.out,g,"utf8"),i.json)return w({exported:!0,path:i.out},i.fields);console.log(`${b.success} Derived assistant data exported to ${i.out}`);return}process.stdout.write(g);return}case"delete":if(i.json)return w(m,i.fields);console.log(`${b.success} Derived assistant data deleted. Source mail is untouched.`);return;default:if(i.json)return w(m,i.fields);if(n==="set"||n==="preview"||n==="retry"){n==="preview"&&console.log(he.default.dim(` Import ${m.preview?.backfill_id||""} runs in the background. Follow it with: domani assistant backfill`)),n==="retry"&&console.log(` Requeued ${m.retried??m.requeued??0} messages`),n==="set"&&console.log(` enabled=${m.enabled?"yes":"no"} shadow=${m.shadow_enabled?"yes":"no"} paused=${m.paused?"yes":"no"} mailboxes=${(m.mailbox_ids||[]).length}`);return}return m.work_item?$a(m,i):w(m,i.fields)}}var xa=D(M(),1);G();V();async function tu(e,t){let i=await e.json();return e.ok||u(i.error||i.message,{hint:i.hint,status:e.status,json:t.json,fields:t.fields}),i}async function ja(e,t,i,s){let n=`/api/domains/${encodeURIComponent(e)}/hostname-bindings`,r;if(!t||t==="list")r=await x(n);else if(t==="plan")s.hostname||u("--hostname is required",{code:"validation_error",json:s.json}),r=await x(`${n}/plan`,{method:"POST",body:JSON.stringify({hostname:s.hostname,browser_mode:s.browserMode})});else if(t==="create"){s.hostname||u("--hostname is required",{code:"validation_error",json:s.json});let l={hostname:s.hostname,browser_mode:s.browserMode,expected_zone_version:s.expectedZoneVersion,acknowledgements:s.acknowledgements?.split(",").map(m=>m.trim())},f=ct(`binding:create:${e}:${s.hostname}`,l);r=await x(n,{method:"POST",headers:{"Idempotency-Key":f.key},body:JSON.stringify(l)}),r.ok&&f.complete()}else{i||u("Binding ID is required",{hint:`Usage: domani binding ${e} ${t} <id>`,code:"validation_error",json:s.json});let l=`${n}/${encodeURIComponent(i)}`;if(t==="get")r=await x(l);else if(t==="verify")r=await x(`${l}/verify`,{method:"POST"});else if(t==="delete")r=await x(l,{method:"DELETE"});else if(t==="update"){s.browserMode||u("--browser-mode is required",{code:"validation_error",json:s.json});let f={browser_mode:s.browserMode,acknowledgements:s.acknowledgements?.split(",").map(g=>g.trim())},m=ct(`binding:update:${e}:${i}`,f);r=await x(l,{method:"PATCH",headers:{"Idempotency-Key":m.key},body:JSON.stringify(f)}),r.ok&&m.complete()}else return u(`Unknown action: ${t}`,{hint:"Actions: list, plan, create, get, update, verify, delete",code:"validation_error",json:s.json})}if(r.status===204){if(s.json)return w({disabled:!0,id:i},s.fields);console.log("Hostname binding disabled");return}let o=await tu(r,s);if(s.json)return w(o,s.fields);d(),S(t==="plan"?"Hostname Binding Plan":"Hostname Bindings");let a=o.hostname_bindings||(o.hostname_binding?[o.hostname_binding]:[]);if(a.length)for(let l of a)console.log(` ${xa.default.dim(l.id)} ${l.hostname_pattern} ${l.status} ${l.browser_mode}`);else console.log(JSON.stringify(o,null,2));d()}var Sa=D(require("node:readline"),1);gt();function iu(e){return(Array.isArray(e)?e:[e]).filter(i=>!!i&&typeof i=="object")}function Fn(e,t,i,s){return{jsonrpc:"2.0",id:e,error:{code:t,message:i,...s?{data:s}:{}}}}function _i(e,t,i,s){let n=iu(e).filter(r=>Object.prototype.hasOwnProperty.call(r,"id")).map(r=>Fn(r.id??null,t,i,s));if(n.length!==0)return Array.isArray(e)?n:n[0]}function su(e){let t=[];for(let i of e.split(/\r?\n/)){if(!i.startsWith("data:"))continue;let s=i.slice(5).trim();if(!(!s||s==="[DONE]"))try{t.push(JSON.parse(s))}catch{}}return t}async function nu(e,t={}){let i=t.fetchImpl??fetch,s=t.getAuthToken?t.getAuthToken():Ve(),n=(t.apiUrl??Le()).replace(/\/$/,""),r={"Content-Type":"application/json",Accept:"application/json, text/event-stream"};s&&(r.Authorization=`Bearer ${s}`);let o=()=>i(`${n}/mcp`,{method:"POST",headers:r,body:JSON.stringify(e)}),a;try{a=await o()}catch(m){let g=m instanceof Error?m.message:"Unknown network error",y=_i(e,-32002,"Domani MCP is unreachable",{code:"MCP_NETWORK_ERROR",hint:`Check your connection and that ${n} is reachable.`,detail:g});return y===void 0?[]:[y]}if(a.status===401){let m=t.refreshAuthToken?t.refreshAuthToken():t.getAuthToken?void 0:Ve({refreshKeychain:!0});if(m&&m!==s){await a.body?.cancel(),s=m,r.Authorization=`Bearer ${s}`;try{a=await o()}catch(g){let y=g instanceof Error?g.message:"Unknown network error",k=_i(e,-32002,"Domani MCP is unreachable",{code:"MCP_NETWORK_ERROR",hint:`Check your connection and that ${n} is reachable.`,detail:y});return k===void 0?[]:[k]}}}if(a.status===202||a.status===204)return[];let l=await a.text();if(a.status===401){let m=_i(e,-32001,"Domani authentication required",{code:"AUTH_REQUIRED",hint:"Run `npx -y domani-cli@latest login`, approve access in the browser, then retry. Never paste an API key into chat.",fix_command:"npx -y domani-cli@latest login"});return m===void 0?[]:[m]}if(!a.ok){let m=_i(e,-32e3,`Domani MCP request failed (${a.status})`,{code:"MCP_HTTP_ERROR",hint:"Retry once. If the error persists, check https://domani.run/status."});return m===void 0?[]:[m]}if(!l.trim())return[];if((a.headers.get("content-type")??"").includes("text/event-stream"))return su(l);try{return[JSON.parse(l)]}catch{let m=_i(e,-32700,"Domani MCP returned invalid JSON",{code:"MCP_INVALID_RESPONSE"});return m===void 0?[]:[m]}}async function Ca(e={}){let t=e.stderr??process.stderr,i=Sa.default.createInterface({input:process.stdin,crlfDelay:1/0}),s=new Set;e.verbose&&t.write(`domani MCP bridge ready
211
+ `);for await(let n of i){if(!n.trim())continue;let r=(async()=>{let o;try{o=JSON.parse(n)}catch{process.stdout.write(`${JSON.stringify(Fn(null,-32700,"Parse error"))}
212
+ `);return}let a=await nu(o,e);for(let l of a)process.stdout.write(`${JSON.stringify(l)}
208
213
  `)})().catch(o=>{if(e.verbose){let a=o instanceof Error?o.message:String(o);t.write(`domani MCP bridge internal error: ${a}
209
- `)}process.stdout.write(`${JSON.stringify(Dn(null,-32603,"Domani MCP bridge internal error"))}
210
- `)});s.add(r),r.then(()=>s.delete(r))}await Promise.all(s)}process.stdin.setMaxListeners(50);var W=new zn;W.name("domani").description(`Domain names for developers and AI agents - ${Wt}`).version(ke).option("--api-url <url>","Override API base URL").configureOutput({outputError:(e,t)=>{let i=e.replace(/^error:\s*/i,"").trimEnd();if(t(`${lt.default.red("\u2717")} ${i}
211
- `),/unknown option|missing required|expected argument/i.test(i)){let s=process.argv[2],n=s&&!s.startsWith("-")?`domani ${s} --help`:"domani --help";t(`${lt.default.dim(` Run \`${n}\` to see available options.`)}
212
- `)}}}).hook("preAction",async(e,t)=>{let i=e.opts();i.apiUrl&&or(i.apiUrl),process.stdout.isTTY||t.options.some(r=>r.long==="--json")&&t.setOptionValue("json",!0),["login","logout","search","suggest","tlds","whois","schema","update","uninstall","mcp"].includes(t.name())||await Yr()});W.command("login").description(`Log in to ${Wt} (opens browser)`).option("--json","Output as JSON (returns auth_url for non-interactive approval)").option("--no-open","Don't open browser (print URL instead)").option("--scopes <scopes>","Request a comma-separated, least-privilege scope set").option("--mailboxes <addresses>","Confine the credential to these comma-separated mailbox addresses").option("--label <label>","Human-readable label shown on the approval screen").option("--expires-in <seconds>","Delegated credential lifetime in seconds (3600-31536000)").option("--surface <surface>","Attribute onboarding: cli, mcp, plugin, skill, or api","cli").addHelpText("after",`
214
+ `)}process.stdout.write(`${JSON.stringify(Fn(null,-32603,"Domani MCP bridge internal error"))}
215
+ `)});s.add(r),r.then(()=>s.delete(r))}await Promise.all(s)}process.stdin.setMaxListeners(50);var W=new Qn;W.name("domani").description(`Domain names for developers and AI agents - ${Jt}`).version(xe).option("--api-url <url>","Override API base URL").configureOutput({outputError:(e,t)=>{let i=e.replace(/^error:\s*/i,"").trimEnd();if(t(`${ut.default.red("\u2717")} ${i}
216
+ `),/unknown option|missing required|expected argument/i.test(i)){let s=process.argv[2],n=s&&!s.startsWith("-")?`domani ${s} --help`:"domani --help";t(`${ut.default.dim(` Run \`${n}\` to see available options.`)}
217
+ `)}}}).hook("preAction",async(e,t)=>{let i=e.opts();i.apiUrl&&cr(i.apiUrl),process.stdout.isTTY||t.options.some(r=>r.long==="--json")&&t.setOptionValue("json",!0),["login","logout","search","suggest","tlds","whois","schema","update","uninstall","mcp"].includes(t.name())||await eo()});W.command("login").description(`Log in to ${Jt} (opens browser)`).option("--json","Output as JSON (returns auth_url for non-interactive approval)").option("--no-open","Don't open browser (print URL instead)").option("--scopes <scopes>","Request a comma-separated, least-privilege scope set").option("--mailboxes <addresses>","Confine the credential to these comma-separated mailbox addresses").option("--label <label>","Human-readable label shown on the approval screen").option("--expires-in <seconds>","Delegated credential lifetime in seconds (3600-31536000)").option("--surface <surface>","Attribute onboarding: cli, mcp, plugin, skill, or api","cli").addHelpText("after",`
213
218
  Examples:
214
219
  domani login # interactive login (opens browser)
215
220
  domani login --scopes domains:read,search --label "Project agent" --expires-in 86400
@@ -218,54 +223,54 @@ Examples:
218
223
  domani login --surface plugin # authenticate the Domani agent plugin
219
224
  domani login --json # non-interactive (returns auth_url)
220
225
  domani login --no-open # print login URL without opening browser
221
- DOMANI_API_KEY=domani_sk_xxx domani list # skip login, use env var`).action(Xr);W.command("logout").description("Clear saved credentials").option("--yes","Skip confirmation").option("--json","Output as JSON").action(Zr);W.command("me").description("Show account info").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
226
+ DOMANI_API_KEY=domani_sk_xxx domani list # skip login, use env var`).action(to);W.command("logout").description("Clear saved credentials").option("--yes","Skip confirmation").option("--json","Output as JSON").action(io);W.command("me").description("Show account info").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
222
227
  Examples:
223
228
  domani me # show account overview
224
229
  domani me --json # machine-readable account info
225
- domani me --json --fields email,plan # just email and plan`).action(eo);W.command("invoices").description("List payment invoices").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--limit <n>","Max invoices to show (default 20)").action(Yo);W.command("card [action]").description("Manage payment methods (list, add, remove)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--yes","Skip confirmation prompt (for remove)").action(async(e,t)=>{if(!e||e==="list")return la(t);if(e==="add")return da(t);if(e==="remove")return ca(t);u(`Unknown action: ${e}`,{hint:"Use: domani card list, domani card add, or domani card remove"})});W.command("upgrade").description("Upgrade to Agent ($19/month)").option("--json","Output as JSON (returns checkout URL)").action(Zo);W.command("cancel").description("Cancel your paid subscription (access continues until end of billing period)").option("--json","Output as JSON").action(Qo);W.command("billing",{hidden:!0}).option("--json","Output as JSON (returns checkout URL)").action(Xo);W.command("token").description("Print your API key (masked on a terminal; --reveal for the full key)").option("--json","Output as JSON").option("--reveal","Print the full key even on an interactive terminal").action(Eo);W.command("mcp [action]").description("Run the secure local MCP bridge (stdio)").option("--verbose","Write bridge lifecycle messages to stderr").addHelpText("after",`
230
+ domani me --json --fields email,plan # just email and plan`).action(no);W.command("invoices").description("List payment invoices").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--limit <n>","Max invoices to show (default 20)").action(ea);W.command("card [action]").description("Manage payment methods (list, add, remove)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").option("--yes","Skip confirmation prompt (for remove)").action(async(e,t)=>{if(!e||e==="list")return ma(t);if(e==="add")return fa(t);if(e==="remove")return pa(t);u(`Unknown action: ${e}`,{hint:"Use: domani card list, domani card add, or domani card remove"})});W.command("upgrade").description("Upgrade to Agent ($19/month)").option("--json","Output as JSON (returns checkout URL)").action(ia);W.command("cancel").description("Cancel your paid subscription (access continues until end of billing period)").option("--json","Output as JSON").action(sa);W.command("billing",{hidden:!0}).option("--json","Output as JSON (returns checkout URL)").action(ta);W.command("token").description("Print your API key (masked on a terminal; --reveal for the full key)").option("--json","Output as JSON").option("--reveal","Print the full key even on an interactive terminal").action(No);W.command("mcp [action]").description("Run the secure local MCP bridge (stdio)").option("--verbose","Write bridge lifecycle messages to stderr").addHelpText("after",`
226
231
  Examples:
227
232
  domani login # authenticate once in your browser
228
233
  domani mcp serve # stdio bridge for agent plugins
229
234
 
230
235
  The bridge reads the API token from the OS keychain. It never prints the token
231
- or places it in an MCP/plugin configuration file.`).action(async(e,t)=>{if(e&&e!=="serve"){u(`Unknown action: ${e}`,{hint:"Use: domani mcp serve"});return}await $a({verbose:t.verbose})});W.command("tokens [action]").description("Manage API tokens (list/create/revoke)").option("--name <name>","Token name (for create)").option("--scopes <scopes>","Comma-separated permission scopes (for create)").option("--expires-in <seconds>","Token lifetime in seconds (for create, min 3600)").option("--agent-identity <id>","Bind this token to an owned agent identity").option("--token-id <id>","Token ID (for revoke)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
236
+ or places it in an MCP/plugin configuration file.`).action(async(e,t)=>{if(e&&e!=="serve"){u(`Unknown action: ${e}`,{hint:"Use: domani mcp serve"});return}await Ca({verbose:t.verbose})});W.command("tokens [action]").description("Manage API tokens (list/create/revoke)").option("--name <name>","Token name (for create)").option("--scopes <scopes>","Comma-separated permission scopes (for create)").option("--expires-in <seconds>","Token lifetime in seconds (for create, min 3600)").option("--agent-identity <id>","Bind this token to an owned agent identity").option("--token-id <id>","Token ID (for revoke)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
232
237
  Examples:
233
238
  domani tokens list # list all tokens
234
239
  domani tokens create --name "CI" --scopes "domains:read,search"
235
240
  domani tokens create --name "Support agent" --agent-identity agent_abc123
236
- domani tokens revoke --token-id tok_abc123`).action(To);W.command("search [domain] [tlds...]").description("Check availability - domani search myapp .io .fm .xyz").option("--tlds <tlds>","Comma-separated TLDs (e.g. com,io,dev)").option("--max-price <price>","Maximum price filter").option("--all","Show taken domains too").option("--expand","Check 30+ TLDs including creative/exotic extensions").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
241
+ domani tokens revoke --token-id tok_abc123`).action(Uo);W.command("search [domain] [tlds...]").description("Check availability - domani search myapp .io .fm .xyz").option("--tlds <tlds>","Comma-separated TLDs (e.g. com,io,dev)").option("--max-price <price>","Maximum price filter").option("--all","Show taken domains too").option("--expand","Check 30+ TLDs including creative/exotic extensions").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
237
242
  Examples:
238
243
  domani search myapp # check popular TLDs
239
244
  domani search myapp .io .fm .xyz # specific TLDs
240
245
  domani search myapp --expand # check 30+ TLDs
241
246
  domani search myapp --max-price 20 # only affordable options
242
- domani search myapp --json # machine-readable output`).action(wo);W.command("tlds").description("List all TLDs with pricing").option("--max-price <price>","Maximum registration price").option("--min-price <price>","Minimum registration price").option("--sort <field>","Sort by: price, tld, renewal (default: tld)").option("--search <term>","Filter TLDs by name").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(jo);W.command("whois <domain>").description("WHOIS/RDAP lookup for any domain").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(xo);W.command("suggest [prompt]").description("AI-powered domain name suggestions").option("--count <n>","Number of suggestions (1-20, default 10)").option("--tlds <tlds>","Preferred TLDs, comma-separated (e.g. com,dev,ai)").option("--style <style>","Name style: single, creative, short, brandable, keyword").option("--lang <lang>","Language inspiration: japanese, spanish, french, italian, latin, nordic, arabic, sanskrit").option("--timeout <seconds>","Request timeout in seconds (default: 60)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
247
+ domani search myapp --json # machine-readable output`).action(xo);W.command("tlds").description("List all TLDs with pricing").option("--max-price <price>","Maximum registration price").option("--min-price <price>","Minimum registration price").option("--sort <field>","Sort by: price, tld, renewal (default: tld)").option("--search <term>","Filter TLDs by name").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Oo);W.command("whois <domain>").description("WHOIS/RDAP lookup for any domain").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Io);W.command("suggest [prompt]").description("AI-powered domain name suggestions").option("--count <n>","Number of suggestions (1-20, default 10)").option("--tlds <tlds>","Preferred TLDs, comma-separated (e.g. com,dev,ai)").option("--style <style>","Name style: single, creative, short, brandable, keyword").option("--lang <lang>","Language inspiration: japanese, spanish, french, italian, latin, nordic, arabic, sanskrit").option("--timeout <seconds>","Request timeout in seconds (default: 60)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
243
248
  Examples:
244
249
  domani suggest "cat sitting marketplace"
245
250
  domani suggest "AI code editor" --style creative --tlds ai,dev
246
- domani suggest "meditation app" --lang japanese --count 5`).action(So);W.command("buy [domains...]").description("Purchase one or more domains").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
251
+ domani suggest "meditation app" --lang japanese --count 5`).action(Ro);W.command("buy [domains...]").description("Purchase one or more domains").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
247
252
  Examples:
248
253
  domani buy myapp.dev # buy one domain
249
254
  domani buy myapp.dev myapp.com myapp.ai # buy multiple
250
255
  domani buy myapp.dev --dry-run # preview without buying
251
256
  domani buy myapp.dev --yes # skip confirmation
252
- domani buy myapp.dev --json # machine-readable output`).action(In);W.command("provision <domain>").description("Give an agent a full identity: domain + mailbox + webhook in one call").option("--slug <slug>","Mailbox local part (e.g. 'hi' for hi@domain). Default 'hi'").option("--name <name>","Display name for outbound email").option("--webhook <url>","HTTPS URL to receive inbound email + domain events").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--years <n>","Registration years (1-10, default 1)").option("--payment-method <method>","card, usdc, or balance").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
257
+ domani buy myapp.dev --json # machine-readable output`).action(En);W.command("provision <domain>").description("Give an agent a full identity: domain + mailbox + webhook in one call").option("--slug <slug>","Mailbox local part (e.g. 'hi' for hi@domain). Default 'hi'").option("--name <name>","Display name for outbound email").option("--webhook <url>","HTTPS URL to receive inbound email + domain events").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--years <n>","Registration years (1-10, default 1)").option("--payment-method <method>","card, usdc, or balance").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
253
258
  Examples:
254
259
  domani provision myagent.run # domain + hi@ mailbox
255
260
  domani provision myagent.run --slug hey --name "My Agent" # custom mailbox
256
261
  DOMANI_SENDER_AUTH="Bearer secret" domani provision myagent.run --webhook https://me.dev/inbox --authorization-env DOMANI_SENDER_AUTH
257
- domani provision myagent.run --dry-run # preview`).action(ko);W.command("adopt <domain>").description("Inspect an existing domain and plan the safest connection or transfer").option("--json","Output the complete machine-readable plan as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
262
+ domani provision myagent.run --dry-run # preview`).action(So);W.command("adopt <domain>").description("Inspect an existing domain and plan the safest connection or transfer").option("--json","Output the complete machine-readable plan as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
258
263
  Examples:
259
264
  domani adopt myapp.com
260
- domani adopt myapp.com --json`).action(Io);W.command("transfer <domain>").description("Transfer a domain from another registrar").option("--auth-code <code>","EPP/auth code from current registrar").option("--yes","Skip confirmation prompt").option("--watch","If not eligible: poll until the lock lifts and continue, or register a server watch (email + webhook) for a dated wait").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
265
+ domani adopt myapp.com --json`).action(To);W.command("transfer <domain>").description("Transfer a domain from another registrar").option("--auth-code <code>","EPP/auth code from current registrar").option("--yes","Skip confirmation prompt").option("--watch","If not eligible: poll until the lock lifts and continue, or register a server watch (email + webhook) for a dated wait").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
261
266
  Examples:
262
267
  domani transfer myapp.com --auth-code ABC123XYZ
263
268
  domani transfer myapp.com --auth-code ABC123XYZ --dry-run
264
269
  domani transfer myapp.com --auth-code ABC123XYZ --yes
265
- domani transfer myapp.com --watch --auth-code ABC123XYZ --yes # park it: waits for the unlock, then completes`).action(Oo);W.command("renew [domain]").description("Renew a domain").option("--years <n>","Number of years (1-10, default: 1)").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Ro);W.command("import <domain>").description("Import a domain you own at another registrar").option("--verify","Verify DNS ownership and complete import").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
270
+ domani transfer myapp.com --watch --auth-code ABC123XYZ --yes # park it: waits for the unlock, then completes`).action(Eo);W.command("renew [domain]").description("Renew a domain").option("--years <n>","Number of years (1-10, default: 1)").option("--yes","Skip confirmation prompt").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Po);W.command("import <domain>").description("Import a domain you own at another registrar").option("--verify","Verify DNS ownership and complete import").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
266
271
  Examples:
267
272
  domani import myapp.com # start import (shows TXT record to add)
268
- domani import myapp.com --verify # verify TXT record and complete import`).action(Ao);W.command("sell <domain>").description("List a domain for sale (verify ownership via TXT record)").option("--price <amount>","Sale price in USD").option("--verify","Verify DNS ownership and activate listing").option("--transfer-code <code>","Submit transfer/auth code for an active deal").option("--cancel","Remove domain from sale").option("--status","Check listing status").option("--description <text>","Listing description").option("--yes","Skip confirmation").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
273
+ domani import myapp.com --verify # verify TXT record and complete import`).action(Do);W.command("sell <domain>").description("List a domain for sale (verify ownership via TXT record)").option("--price <amount>","Sale price in USD").option("--verify","Verify DNS ownership and activate listing").option("--transfer-code <code>","Submit transfer/auth code for an active deal").option("--cancel","Remove domain from sale").option("--status","Check listing status").option("--description <text>","Listing description").option("--yes","Skip confirmation").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
269
274
  Examples:
270
275
  domani sell myapp.dev --price 5000 # list for $5,000
271
276
  domani sell myapp.dev --price 5000 --description "Great brand name"
@@ -273,28 +278,57 @@ Examples:
273
278
  domani sell external.com --verify # verify TXT record
274
279
  domani sell myapp.dev --status # check listing status
275
280
  domani sell myapp.dev --cancel # remove from sale
276
- domani sell myapp.dev --transfer-code ABC123 # provide EPP code for a deal`).action(Wo);W.command("route [action] [id]").description("Manage short-lived HTTP routes").option("--hostname <hostname>","Public hostname; omitted only when token policy can auto-assign").option("--upstream <url>","HTTP or HTTPS upstream origin").option("--domain <domain>","Filter routes by owned domain").option("--status <status>","Filter: active, expired, deleted, suspended, all").option("--expires-in <seconds>","Lease duration in seconds (60-86400)").option("--host-header <mode>","Host header mode: public or upstream").option("--upstream-verification <mode>","Verification mode: none or signed_headers").option("--upstream-authorization-env <name>","Read a write-only upstream Authorization value from this environment variable").option("--upstream-api-key-env <name>","Read a write-only upstream X-Api-Key value from this environment variable").option("--clear-upstream-headers","Clear stored write-only upstream authentication headers").option("--idempotency-key <key>","Stable retry key; generated and persisted by default").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
281
+ domani sell myapp.dev --transfer-code ABC123 # provide EPP code for a deal`).action(Go);W.command("route [action] [id]").description("Manage short-lived HTTP routes").option("--hostname <hostname>","Public hostname; omitted only when token policy can auto-assign").option("--upstream <url>","HTTP or HTTPS upstream origin").option("--domain <domain>","Filter routes by owned domain").option("--status <status>","Filter: active, expired, deleted, suspended, all").option("--expires-in <seconds>","Lease duration in seconds (60-86400)").option("--host-header <mode>","Host header mode: public or upstream").option("--upstream-verification <mode>","Verification mode: none or signed_headers").option("--upstream-authorization-env <name>","Read a write-only upstream Authorization value from this environment variable").option("--upstream-api-key-env <name>","Read a write-only upstream X-Api-Key value from this environment variable").option("--clear-upstream-headers","Clear stored write-only upstream authentication headers").option("--idempotency-key <key>","Stable retry key; generated and persisted by default").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
277
282
  Examples:
278
283
  domani route create --hostname preview.example.com --upstream http://bore.pub:45255
279
284
  domani route list --domain example.com --status active
280
285
  domani route refresh route_123 --expires-in 3600
281
286
  domani route rotate-verification route_123
282
287
  domani route rotate-headers route_123 --upstream-authorization-env SPRITES_AUTH
283
- domani route delete route_123`).action(ha);W.command("binding [action] <domain> [id]").description("Manage HTTP edge hostname bindings and certificates").option("--hostname <hostname>","Exact hostname, wildcard, or apex").option("--browser-mode <mode>","stateless, dedicated_site, or trusted_same_site").option("--expected-zone-version <version>","Zone version returned by binding plan").option("--acknowledgements <values>","Comma-separated acknowledgement identifiers").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
288
+ domani route delete route_123`).action(wa);W.command("assistant [action] [id]").description("Mailzero assistant: Today decisions, settings, consent, history import, activity (private preview)").option("--enable","Show Today decisions and prepare drafts on demand (for set)").option("--disable","Stop surfacing decisions; shadow analysis may continue (for set)").option("--shadow","Analyze mail without surfacing decisions (for set)").option("--no-shadow","Stop shadow analysis (for set)").option("--pause","Pause every kind of processing (for set)").option("--resume","Resume processing (for set)").option("--mailboxes <ids>","Comma-separated owned mailbox IDs to process (for set, preview)").option("--none","Disable every mailbox; cancels a running import (for set)").option("--days <n>","History window in days (for set, preview; default 30)").option("--attachment-vision <mode>","on or off: let the model read images in attachments (for set)").option("--consent","Record explicit AI consent (required for preview)").option("--option <id>","Decision option to choose (for choose)").option("--decision <id>","Decision ID (for choose)").option("--decision-version <n>","Decision version (for choose)").option("--item-version <n>","Work item version fence (for choose, instruct, snooze, ignore, take-over, correct)").option("--text <text>","Instruction or corrected value (for instruct, correct)").option("--until <iso>","Snooze until this ISO 8601 date-time (for snooze)").option("--field <name>","Analysis field to correct (for correct)").option("--limit <n>","Number of activity entries (for activity)").option("--out <file>","Write the export to a file instead of stdout (for export)").option("--yes","Confirm deletion of derived data (for delete)").option("--idempotency-key <key>","Stable retry key; generated and persisted by default").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
289
+ Actions:
290
+ today Now, Needs you, Waiting, Upcoming, Handled
291
+ settings Opt-in state, consent, and mailbox scope
292
+ set Change settings (--enable, --shadow, --pause, --mailboxes, --none, --days)
293
+ preview Record consent and start a background history import
294
+ backfill | retry Follow the import or requeue its terminal failures
295
+ item <id> One work item with its Decision and options
296
+ choose | instruct | snooze | ignore | take-over | correct <id>
297
+ Record your decision on a work item (fenced by --item-version)
298
+ plan <id> Exact preview of a prepared reply
299
+ activity Content-free interaction and receipt log
300
+ export | delete Export or delete derived assistant data (source mail is never touched)
301
+
302
+ Examples:
303
+ domani assistant settings
304
+ domani assistant preview --mailboxes mbx_123,mbx_456 --consent
305
+ domani assistant backfill
306
+ domani assistant today
307
+ domani assistant item wi_789
308
+ domani assistant choose wi_789 --item-version 3 --decision dec_1 --decision-version 1 --option opt_send
309
+ domani assistant snooze wi_789 --item-version 3 --until 2026-09-03T09:00:00Z
310
+ domani assistant plan plan_42
311
+ domani assistant set --none
312
+ domani assistant delete --yes
313
+
314
+ This command never sends mail. Choosing an option prepares an exact draft; review it
315
+ with "assistant plan" and send it through the normal reply endpoint
316
+ (POST /api/emails/{address}/messages/{id}/reply with assistant_plan_id) or from the app.
317
+ Tokens need the assistant:read scope for reads and assistant:write for changes.`).action(_a);W.command("binding [action] <domain> [id]").description("Manage HTTP edge hostname bindings and certificates").option("--hostname <hostname>","Exact hostname, wildcard, or apex").option("--browser-mode <mode>","stateless, dedicated_site, or trusted_same_site").option("--expected-zone-version <version>","Zone version returned by binding plan").option("--acknowledgements <values>","Comma-separated acknowledgement identifiers").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
284
318
  Examples:
285
319
  domani binding list example.com
286
320
  domani binding plan example.com --hostname '*.example.com' --browser-mode stateless
287
321
  domani binding create example.com --hostname '*.example.com' --expected-zone-version <version>
288
- domani binding verify example.com binding_123`).action((e,t,i,s)=>ba(t,e,i,s));W.command("list").alias("domains").description("List your domains").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
322
+ domani binding verify example.com binding_123`).action((e,t,i,s)=>ja(t,e,i,s));W.command("list").alias("domains").description("List your domains").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
289
323
  Examples:
290
324
  domani list # list all domains
291
325
  domani domains # alias for list
292
- domani list --json --fields domain,expires_at`).action(_o);W.command("status [domain]").description("Check domain health (DNS, SSL, email, expiry)").option("--timeout <seconds>","Request timeout in seconds (default: 30)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Sn);W.command("connect [domain] [target]").description("Connect domain to a hosting/email provider").option("--provider <name>","Provider name (e.g. vercel, google-workspace)").option("--method <name>","Connection method (e.g. cname-only)").option("--list","List available providers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
326
+ domani list --json --fields domain,expires_at`).action(Co);W.command("status [domain]").description("Check domain health (DNS, SSL, email, expiry)").option("--timeout <seconds>","Request timeout in seconds (default: 30)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(In);W.command("connect [domain] [target]").description("Connect domain to a hosting/email provider").option("--provider <name>","Provider name (e.g. vercel, google-workspace)").option("--method <name>","Connection method (e.g. cname-only)").option("--list","List available providers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
293
327
  Examples:
294
328
  domani connect --list # list providers
295
329
  domani connect myapp.dev vercel # connect to Vercel
296
330
  domani connect myapp.dev --provider google-workspace # connect Google Workspace
297
- domani connect myapp.dev vercel --dry-run # preview DNS changes`).action(bn);W.command("email [action] [arg2]").description("Manage email: inbox lifecycle, mailboxes, send, forwarding, webhooks and setup").addHelpText("after",`
331
+ domani connect myapp.dev vercel --dry-run # preview DNS changes`).action(vn);W.command("email [action] [arg2]").description("Manage email: inbox lifecycle, mailboxes, send, forwarding, webhooks and setup").addHelpText("after",`
298
332
  Examples:
299
333
  domani email list # list all mailboxes
300
334
  domani email create --domain myapp.dev --slug hi # create hi@myapp.dev
@@ -311,7 +345,7 @@ Examples:
311
345
  domani email webhook-test hi@myapp.dev # one signed test; live inbound retries up to 3x
312
346
  domani email setup myapp.dev # setup email for domain
313
347
  domani email status myapp.dev # check email DNS health
314
- domani email delete --domain myapp.dev --slug hi # delete mailbox`).option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug (local part before @)").option("--from <email>","Sender address user@domain (alternative to --domain + --slug)").option("--to <email>","Recipient email address (for send)").option("--cc <emails>","CC recipients, comma-separated (for send)").option("--bcc <emails>","BCC recipients, comma-separated (for send)").option("--subject <s>","Email subject (for send)").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text (for send)").option("--body <t>","Email body text (alias for --text)").option("--send-at <iso>","Schedule the send (ISO 8601, 30s to 30 days out); trash the message to cancel").option("--message-id <id>","Message ID (for escalate/remind)").option("--reason <text>","Why the human is needed (for escalate)").option("--at <iso>","Reminder time, ISO 8601 (for remind)").option("--clear","Clear the escalation flag, reminder, or tone notes").option("--q <query>","Filter contacts by address or name").option("--name <name>","Contact display name (for contact-add)").option("--notes <text>","Contact notes (for contact-add)").option("--set <text>","Tone notes to set on the mailbox (for tone)").option("--in-reply-to <message-id>","Message-ID of email being replied to (for threading)").option("--references <message-ids>","Space-separated Message-ID chain (for threading)").option("--url <url>","Webhook URL (for webhook)").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--clear-headers","Clear custom webhook auth headers (requires --url)").option("--forward-to <email>","Email address to forward inbound emails to (for forward)").option("--direction <dir>","Filter messages: in or out").option("--folder <folder>","System folder: inbox, archive, sent, spam, trash").option("--view <view>","Virtual view: starred, all, or needs_human").option("--message-ids <ids>","Comma-separated message IDs for lifecycle actions").option("--mailbox-ids <ids>","Comma-separated mailbox IDs for shared inbox work").option("--workspace <id>","Create the mailbox inside this workspace (owner-only)").option("--thread-key <key>","Stable email thread key").option("--thread-aliases <keys>","Comma-separated legacy thread keys returned by the inbox").option("--status <status>","Workflow status: open, waiting, or closed").option("--assigned <filter>","Assignment filter: mine, unassigned, or all").option("--assignee-type <type>","Assignee type: member, token, or agent").option("--assignee-id <id>","Assignee ID").option("--conversation-id <id>","Conversation state ID").option("--note <text>","Private note text").option("--if-version <number>","Conversation version for compare-and-set updates").option("--idempotency-key <key>","Stable retry key for mailbox lifecycle actions").option("--client-id <id>","Stable opaque ID for this app installation or agent process").option("--lease-id <id>","Compose lease returned by a presence heartbeat").option("--mode <mode>","Presence mode: viewing or composing").option("--no-acquire-lease","Advertise composing presence without acquiring the primary lease").option("--limit <n>","Limit results").option("--cursor <cursor>","Opaque pagination or synchronization cursor").option("--check","Verify email DNS health (MX, SPF, DKIM, DMARC)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(ui);W.command("workspace [action]").description("Manage shared workspaces, members, and mailbox access").option("--id <id>","Workspace ID").option("--name <name>","Workspace name").option("--email <email>","Collaborator email").option("--role <role>","Workspace role: admin or member").option("--mailboxes <ids>","Comma-separated mailbox IDs").option("--mailbox-role <role>","Mailbox role: viewer, responder, or manager").option("--token <token>","Invitation token").option("--membership-id <id>","Target workspace membership ID").option("--invitation-id <id>","Pending workspace invitation ID").option("--transfer-id <id>","Pending ownership transfer ID").option("--mailbox-id <id>","Mailbox ID to adopt into the workspace").option("--subject <type:id>","Access subject: human:id, agent:id, token:id, service:id, or group:id").option("--resource <type:id>","Access resource: mailbox:id or collection:id").option("--profile <profile>","Access profile: viewer, responder, manager, draft_only, or mail_client").option("--principals <principals>","Comma-separated group principals as type:id").option("--group-id <id>","Existing access group ID to replace").option("--collection-id <id>","Existing mailbox collection ID to replace").option("--grant-id <id>","Canonical access grant ID").option("--apply","Apply an access plan; the default is dry-run").option("--expected-version <n>","Expected grant version for conflict-safe reconciliation").option("--ownership-disposition <mode>","Offer ownership: unchanged or claim").option("--creator-disposition <mode>","After ownership claim: stay, stay_admin, or leave").option("--billing-disposition <mode>","Billing after offer: unchanged, sponsor, or transfer").option("--plan <plan>","Mailzero plan: mail_solo, mail_team, or mail_business").option("--no-open","Do not open checkout in a browser").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
348
+ domani email delete --domain myapp.dev --slug hi # delete mailbox`).option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug (local part before @)").option("--from <email>","Sender address user@domain (alternative to --domain + --slug)").option("--to <email>","Recipient email address (for send)").option("--cc <emails>","CC recipients, comma-separated (for send)").option("--bcc <emails>","BCC recipients, comma-separated (for send)").option("--subject <s>","Email subject (for send)").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text (for send)").option("--body <t>","Email body text (alias for --text)").option("--send-at <iso>","Schedule the send (ISO 8601, 30s to 30 days out); trash the message to cancel").option("--message-id <id>","Message ID (for escalate/remind)").option("--reason <text>","Why the human is needed (for escalate)").option("--at <iso>","Reminder time, ISO 8601 (for remind)").option("--clear","Clear the escalation flag, reminder, or tone notes").option("--q <query>","Filter contacts by address or name").option("--name <name>","Contact display name (for contact-add)").option("--notes <text>","Contact notes (for contact-add)").option("--set <text>","Tone notes to set on the mailbox (for tone)").option("--in-reply-to <message-id>","Message-ID of email being replied to (for threading)").option("--references <message-ids>","Space-separated Message-ID chain (for threading)").option("--url <url>","Webhook URL (for webhook)").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--clear-headers","Clear custom webhook auth headers (requires --url)").option("--forward-to <email>","Email address to forward inbound emails to (for forward)").option("--direction <dir>","Filter messages: in or out").option("--folder <folder>","System folder: inbox, archive, sent, spam, trash").option("--view <view>","Virtual view: starred, all, or needs_human").option("--message-ids <ids>","Comma-separated message IDs for lifecycle actions").option("--mailbox-ids <ids>","Comma-separated mailbox IDs for shared inbox work").option("--workspace <id>","Create the mailbox inside this workspace (owner-only)").option("--thread-key <key>","Stable email thread key").option("--thread-aliases <keys>","Comma-separated legacy thread keys returned by the inbox").option("--status <status>","Workflow status: open, waiting, or closed").option("--assigned <filter>","Assignment filter: mine, unassigned, or all").option("--assignee-type <type>","Assignee type: member, token, or agent").option("--assignee-id <id>","Assignee ID").option("--conversation-id <id>","Conversation state ID").option("--note <text>","Private note text").option("--if-version <number>","Conversation version for compare-and-set updates").option("--idempotency-key <key>","Stable retry key for mailbox lifecycle actions").option("--client-id <id>","Stable opaque ID for this app installation or agent process").option("--lease-id <id>","Compose lease returned by a presence heartbeat").option("--mode <mode>","Presence mode: viewing or composing").option("--no-acquire-lease","Advertise composing presence without acquiring the primary lease").option("--limit <n>","Limit results").option("--cursor <cursor>","Opaque pagination or synchronization cursor").option("--check","Verify email DNS health (MX, SPF, DKIM, DMARC)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(fi);W.command("workspace [action]").description("Manage shared workspaces, members, and mailbox access").option("--id <id>","Workspace ID").option("--name <name>","Workspace name").option("--email <email>","Collaborator email").option("--role <role>","Workspace role: admin or member").option("--mailboxes <ids>","Comma-separated mailbox IDs").option("--mailbox-role <role>","Mailbox role: viewer, responder, or manager").option("--token <token>","Invitation token").option("--membership-id <id>","Target workspace membership ID").option("--invitation-id <id>","Pending workspace invitation ID").option("--transfer-id <id>","Pending ownership transfer ID").option("--mailbox-id <id>","Mailbox ID to adopt into the workspace").option("--subject <type:id>","Access subject: human:id, agent:id, token:id, service:id, or group:id").option("--resource <type:id>","Access resource: mailbox:id or collection:id").option("--profile <profile>","Access profile: viewer, responder, manager, draft_only, or mail_client").option("--principals <principals>","Comma-separated group principals as type:id").option("--group-id <id>","Existing access group ID to replace").option("--collection-id <id>","Existing mailbox collection ID to replace").option("--grant-id <id>","Canonical access grant ID").option("--apply","Apply an access plan; the default is dry-run").option("--expected-version <n>","Expected grant version for conflict-safe reconciliation").option("--ownership-disposition <mode>","Offer ownership: unchanged or claim").option("--creator-disposition <mode>","After ownership claim: stay, stay_admin, or leave").option("--billing-disposition <mode>","Billing after offer: unchanged, sponsor, or transfer").option("--plan <plan>","Mailzero plan: mail_solo, mail_team, or mail_business").option("--no-open","Do not open checkout in a browser").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
315
349
  Examples:
316
350
  domani workspace list
317
351
  domani workspace create --name Acme
@@ -328,28 +362,28 @@ Examples:
328
362
  domani workspace transfer --id ws_123 --membership-id mem_123
329
363
  domani workspace accept-ownership --token <ownership-token>
330
364
  domani workspace adopt-mailbox --id ws_123 --mailbox-id mb_123
331
- domani workspace checkout --id ws_123 --plan mail_team`).action(ua);W.command("dns [domain] [action] [type] [name] [value]").description("Manage DNS records (get/set/delete/snapshot/restore)").option("--type <type>","Record type: A, AAAA, CNAME, MX, TXT, NS, SRV").option("--name <name>","Record name (e.g. www, @, _dmarc)").option("--value <value>","Record value").option("--file <path>","Snapshot file path (for restore)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
365
+ domani workspace checkout --id ws_123 --plan mail_team`).action(ha);W.command("dns [domain] [action] [type] [name] [value]").description("Manage DNS records (get/set/delete/snapshot/restore)").option("--type <type>","Record type: A, AAAA, CNAME, MX, TXT, NS, SRV").option("--name <name>","Record name (e.g. www, @, _dmarc)").option("--value <value>","Record value").option("--file <path>","Snapshot file path (for restore)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
332
366
  Examples:
333
367
  domani dns myapp.dev get # list all records
334
368
  domani dns myapp.dev set --type A --name @ --value 76.76.21.21 # add A record
335
369
  domani dns myapp.dev set --type CNAME --name www --value cname.vercel-dns.com
336
370
  domani dns myapp.dev delete --type A --name @
337
371
  domani dns myapp.dev snapshot # export DNS as JSON
338
- domani dns myapp.dev restore --file dns-backup.json # restore from snapshot`).action(jn);W.command("nameservers [domain] [ns...]").alias("ns").description("Get or set nameservers (--reset for defaults)").option("--set <ns>","Comma-separated nameservers to set").option("--reset","Reset to registrar default nameservers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(ea);W.command("settings [domain]").description("View or update domain settings (auto-renew, WHOIS privacy, security lock)").option("--auto-renew <on|off>","Enable or disable auto-renew").option("--whois-privacy <on|off>","Enable or disable WHOIS privacy").option("--security-lock <on|off>","Lock or unlock domain transfers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
372
+ domani dns myapp.dev restore --file dns-backup.json # restore from snapshot`).action(Cn);W.command("nameservers [domain] [ns...]").alias("ns").description("Get or set nameservers (--reset for defaults)").option("--set <ns>","Comma-separated nameservers to set").option("--reset","Reset to registrar default nameservers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(na);W.command("settings [domain]").description("View or update domain settings (auto-renew, WHOIS privacy, security lock)").option("--auto-renew <on|off>","Enable or disable auto-renew").option("--whois-privacy <on|off>","Enable or disable WHOIS privacy").option("--security-lock <on|off>","Lock or unlock domain transfers").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
339
373
  Examples:
340
374
  domani settings myapp.dev # view current settings
341
375
  domani settings myapp.dev --auto-renew on # enable auto-renew
342
376
  domani settings myapp.dev --whois-privacy on # enable WHOIS privacy
343
- domani settings myapp.dev --security-lock off # unlock for transfer`).action(Po);W.command("auth-code [domain]").description("Get EPP auth code to transfer domain to another registrar").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Do);W.command("transfer-away [domain]").description("Check status of an outbound domain transfer").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(No);W.command("contact [action]").description("View or set WHOIS contact info (required for purchases)").addHelpText("after",`
377
+ domani settings myapp.dev --security-lock off # unlock for transfer`).action(qo);W.command("auth-code [domain]").description("Get EPP auth code to transfer domain to another registrar").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Fo);W.command("transfer-away [domain]").description("Check status of an outbound domain transfer").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Mo);W.command("contact [action]").description("View or set WHOIS contact info (required for purchases)").addHelpText("after",`
344
378
  Examples:
345
379
  domani contact # view current contact info
346
380
  domani contact set --first-name John --last-name Doe --address1 "123 Main St" \\
347
- --city "San Francisco" --state CA --postal-code 94102 --country US --phone +1.5551234567 --email john@example.com`).option("--first-name <name>","First name (for set)").option("--last-name <name>","Last name (for set)").option("--org-name <name>","Organization name (for set, optional)").option("--address1 <addr>","Address line 1 (for set)").option("--address2 <addr>","Address line 2 (for set, optional)").option("--city <city>","City (for set)").option("--state <state>","State/Province (for set)").option("--postal-code <code>","Postal/ZIP code (for set)").option("--country <code>","Country code ISO 3166-1 alpha-2 (for set)").option("--phone <phone>","Phone +CC.NUMBER (for set)").option("--email <email>","Contact email (for set)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Uo);W.command("parking [domain] [action] [value]").description("Manage parking page (enable/disable/price)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
381
+ --city "San Francisco" --state CA --postal-code 94102 --country US --phone +1.5551234567 --email john@example.com`).option("--first-name <name>","First name (for set)").option("--last-name <name>","Last name (for set)").option("--org-name <name>","Organization name (for set, optional)").option("--address1 <addr>","Address line 1 (for set)").option("--address2 <addr>","Address line 2 (for set, optional)").option("--city <city>","City (for set)").option("--state <state>","State/Province (for set)").option("--postal-code <code>","Postal/ZIP code (for set)").option("--country <code>","Country code ISO 3166-1 alpha-2 (for set)").option("--phone <phone>","Phone +CC.NUMBER (for set)").option("--email <email>","Contact email (for set)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Lo);W.command("parking [domain] [action] [value]").description("Manage parking page (enable/disable/price)").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
348
382
  Examples:
349
383
  domani parking myapp.dev # view parking status
350
384
  domani parking myapp.dev enable # enable parking page
351
385
  domani parking myapp.dev disable # disable parking page
352
- domani parking myapp.dev price 500 # set for-sale price to $500`).action(Mo);W.command("analytics [domain]").alias("stats").description("View parking analytics (views, inquiries, conversion)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Lo);W.command("webhooks [action]").alias("webhook").description("Manage webhook endpoints (list/create/update/delete/deliveries/replay/events)").addHelpText("after",`
386
+ domani parking myapp.dev price 500 # set for-sale price to $500`).action(Ho);W.command("analytics [domain]").alias("stats").description("View parking analytics (views, inquiries, conversion)").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Jo);W.command("webhooks [action]").alias("webhook").description("Manage webhook endpoints (list/create/update/delete/deliveries/replay/events)").addHelpText("after",`
353
387
  Examples:
354
388
  domani webhooks list
355
389
  domani webhooks create --url https://example.com/hook --events domain.purchased,domain.expiring
@@ -359,12 +393,12 @@ Examples:
359
393
  domani webhooks delete --webhook-id wh_abc
360
394
  domani webhooks deliveries --webhook-id wh_abc
361
395
  domani webhooks replay --webhook-id wh_abc --delivery-id del_abc --idempotency-key incident-2026-07-25
362
- domani webhooks events # list available event types`).option("--url <url>","Webhook HTTPS URL").option("--events <events>","Comma-separated event types").option("--webhook-id <id>","Webhook ID (for update/delete/deliveries)").option("--delivery-id <id>","Webhook delivery ID (for replay)").option("--idempotency-key <key>","Stable idempotency key (for replay)").option("--active <on|off>","Enable or disable webhook").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--clear-headers","Clear custom webhook auth headers").option("--limit <n>","Limit deliveries returned").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Vo);W.command("deals [id]").description("List marketplace deals or view deal details").option("--role <role>","Filter by role: buyer or seller").option("--status <status>","Filter by status: active, completed, or all").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
396
+ domani webhooks events # list available event types`).option("--url <url>","Webhook HTTPS URL").option("--events <events>","Comma-separated event types").option("--webhook-id <id>","Webhook ID (for update/delete/deliveries)").option("--delivery-id <id>","Webhook delivery ID (for replay)").option("--idempotency-key <key>","Stable idempotency key (for replay)").option("--active <on|off>","Enable or disable webhook").option("--authorization-env <name>","Read the webhook Authorization value from this environment variable").option("--api-key-env <name>","Read the webhook X-API-Key value from this environment variable").option("--clear-headers","Clear custom webhook auth headers").option("--limit <n>","Limit deliveries returned").option("--dry-run","Show what would happen without executing").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Bo);W.command("deals [id]").description("List marketplace deals or view deal details").option("--role <role>","Filter by role: buyer or seller").option("--status <status>","Filter by status: active, completed, or all").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
363
397
  Examples:
364
398
  domani deals # list all your deals
365
399
  domani deals --role seller --status active # your active sales
366
400
  domani deals deal_abc123 # view specific deal
367
- domani deals --json # machine-readable output`).action(Ho);W.command("broker [action] [arg]").description("Acquire a taken, unlisted domain (broker sources + negotiates on your behalf)").option("--max-budget <amount>","Your ceiling in USD for a request").option("--status <status>","Filter the list by status").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
401
+ domani deals --json # machine-readable output`).action(Ko);W.command("broker [action] [arg]").description("Acquire a taken, unlisted domain (broker sources + negotiates on your behalf)").option("--max-budget <amount>","Your ceiling in USD for a request").option("--status <status>","Filter the list by status").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").addHelpText("after",`
368
402
  Actions:
369
403
  request <domain> ask domani to acquire a taken domain (commission-only)
370
404
  list (default) list your acquisition requests
@@ -375,8 +409,8 @@ Examples:
375
409
  domani broker request dream.com --max-budget 5000
376
410
  domani broker # list your requests
377
411
  domani broker status brq_abc123
378
- domani broker cancel brq_abc123`).action((e,t,i)=>Go(e,t,i));W.command("notifications").alias("notifs").description("View notifications or mark all as read").option("--read","Mark all notifications as read").option("--unread","Show only unread notifications").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(zo);W.command("send [arg2]").description("Send an email - shortcut for: domani email send").option("--from <email>","Sender address user@domain").option("--to <email>","Recipient email address").option("--cc <emails>","CC recipients, comma-separated").option("--bcc <emails>","BCC recipients, comma-separated").option("--subject <s>","Email subject").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text").option("--body <t>","Email body text (alias for --text)").option("--in-reply-to <message-id>","Message-ID of email being replied to").option("--references <message-ids>","Space-separated Message-ID chain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((e,t)=>ui("send",e,t));W.command("inbox [arg2]").description("View email inbox - shortcut for: domani email inbox").option("--from <email>","Sender address user@domain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--direction <dir>","Filter messages: in or out").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((e,t)=>ui("inbox",e,t));W.command("schema [command]").description("Show command schemas for AI agent integration").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(aa);W.command("update").description("Update domani CLI to the latest version").option("--json","Output as JSON (check version without updating)").option("--yes","Perform the update even in JSON/non-interactive mode").action(ia);W.command("uninstall").description("Remove domani CLI and config from this machine").action(ra);(async()=>{let e=dr();await W.parseAsync();let t=await e,i=process.stdout.isTTY?"domani update":"domani update --yes";t?.forced?(console.error(`
379
- ${lt.default.red("!")} CLI v${ke} is no longer supported. Run ${lt.default.bold(i)} to upgrade to v${t.update}
412
+ domani broker cancel brq_abc123`).action((e,t,i)=>Xo(e,t,i));W.command("notifications").alias("notifs").description("View notifications or mark all as read").option("--read","Mark all notifications as read").option("--unread","Show only unread notifications").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(Qo);W.command("send [arg2]").description("Send an email - shortcut for: domani email send").option("--from <email>","Sender address user@domain").option("--to <email>","Recipient email address").option("--cc <emails>","CC recipients, comma-separated").option("--bcc <emails>","BCC recipients, comma-separated").option("--subject <s>","Email subject").option("--title <s>","Email subject (alias for --subject)").option("--text <t>","Email body text").option("--body <t>","Email body text (alias for --text)").option("--in-reply-to <message-id>","Message-ID of email being replied to").option("--references <message-ids>","Space-separated Message-ID chain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((e,t)=>fi("send",e,t));W.command("inbox [arg2]").description("View email inbox - shortcut for: domani email inbox").option("--from <email>","Sender address user@domain").option("--domain <domain>","Domain name").option("--slug <slug>","Mailbox slug").option("--direction <dir>","Filter messages: in or out").option("--limit <n>","Limit results").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action((e,t)=>fi("inbox",e,t));W.command("schema [command]").description("Show command schemas for AI agent integration").option("--json","Output as JSON").option("--fields <fields>","Filter JSON output fields (comma-separated)").action(ua);W.command("update").description("Update domani CLI to the latest version").option("--json","Output as JSON (check version without updating)").option("--yes","Perform the update even in JSON/non-interactive mode").action(oa);W.command("uninstall").description("Remove domani CLI and config from this machine").action(da);(async()=>{let e=fr();await W.parseAsync();let t=await e,i=process.stdout.isTTY?"domani update":"domani update --yes";t?.forced?(console.error(`
413
+ ${ut.default.red("!")} CLI v${xe} is no longer supported. Run ${ut.default.bold(i)} to upgrade to v${t.update}
380
414
  `),process.exit(1)):t?.update&&console.error(`
381
- ${lt.default.yellow("!")} Update available: ${lt.default.dim(ke)} ${lt.default.dim("\u2192")} ${lt.default.green(t.update)} Run ${lt.default.bold(i)}
415
+ ${ut.default.yellow("!")} Update available: ${ut.default.dim(xe)} ${ut.default.dim("\u2192")} ${ut.default.green(t.update)} Run ${ut.default.bold(i)}
382
416
  `)})();