domani-cli 0.4.67 → 0.4.69
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/domani.cjs +35 -33
- package/package.json +1 -1
package/dist/domani.cjs
CHANGED
|
@@ -11,21 +11,21 @@ ${o}`)}boxWrap(t,i){if(i<this.minWidthToWrap)return t;let s=t.split(/\r\n|\n/),n
|
|
|
11
11
|
- too many long flags`):new Error(`${a}
|
|
12
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}}Rs.Option=Os;Rs.DualOptions=Is});var Yn=pt(zn=>{function za(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 Ya(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=za(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]}?)`:""}zn.suggestSimilar=Ya});var er=pt(Ns=>{var Xa=require("node:events").EventEmitter,Ts=require("node:child_process"),ht=require("node:path"),Ri=require("node:fs"),
|
|
14
|
+
(Did you mean ${s[0]}?)`:""}zn.suggestSimilar=Ya});var er=pt(Ns=>{var Xa=require("node:events").EventEmitter,Ts=require("node:child_process"),ht=require("node:path"),Ri=require("node:fs"),oe=require("node:process"),{Argument:Za,humanReadableArgName:Qa}=Ii(),{CommanderError:Es}=li(),{Help:el,stripColor:tl}=Cs(),{Option:Xn,DualOptions:il}=As(),{suggestSimilar:Zn}=Yn(),Ps=class e extends Xa{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=>oe.stdout.write(i),writeErr:i=>oe.stderr.write(i),outputError:(i,s)=>s(i),getOutHelpWidth:()=>oe.stdout.isTTY?oe.stdout.columns:void 0,getErrHelpWidth:()=>oe.stderr.isTTY?oe.stderr.columns:void 0,getOutHasColors:()=>Ds()??(oe.stdout.isTTY&&oe.stdout.hasColors?.()),getErrHasColors:()=>Ds()??(oe.stderr.isTTY&&oe.stderr.hasColors?.()),stripColor:i=>tl(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 el,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
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 Za(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 Es(t,i,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 Xn)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){
|
|
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 Es(t,i,s)),oe.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 Xn(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 Xn)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){oe.versions?.electron&&(i.from="electron");let n=oe.execArgv??[];(n.includes("-e")||n.includes("--eval")||n.includes("-p")||n.includes("--print"))&&(i.from="eval")}t===void 0&&(t=oe.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":oe.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
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(Ri.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(m,h){let b=ht.resolve(m,h);if(Ri.existsSync(b))return b;if(n.includes(ht.extname(h)))return;let k=n.find($=>Ri.existsSync(`${b}${$}`));if(k)return`${b}${k}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let m;try{m=Ri.realpathSync(this._scriptPath)}catch{m=this._scriptPath}a=ht.resolve(ht.dirname(m),a)}if(a){let m=r(a,o);if(!m&&!t._executableFile&&this._scriptPath){let h=ht.basename(this._scriptPath,ht.extname(this._scriptPath));h!==this._name&&(m=r(a,`${h}-${t._name}`))}o=m||o}s=n.includes(ht.extname(o));let l;
|
|
21
|
+
- ${n}`;throw new Error(r)}_executeSubCommand(t,i){i=i.slice();let s=!1,n=[".js",".ts",".tsx",".mjs",".cjs"];function r(m,h){let b=ht.resolve(m,h);if(Ri.existsSync(b))return b;if(n.includes(ht.extname(h)))return;let k=n.find($=>Ri.existsSync(`${b}${$}`));if(k)return`${b}${k}`}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let o=t._executableFile||`${this._name}-${t._name}`,a=this._executableDir||"";if(this._scriptPath){let m;try{m=Ri.realpathSync(this._scriptPath)}catch{m=this._scriptPath}a=ht.resolve(ht.dirname(m),a)}if(a){let m=r(a,o);if(!m&&!t._executableFile&&this._scriptPath){let h=ht.basename(this._scriptPath,ht.extname(this._scriptPath));h!==this._name&&(m=r(a,`${h}-${t._name}`))}o=m||o}s=n.includes(ht.extname(o));let l;oe.platform!=="win32"?s?(i.unshift(o),i=Qn(oe.execArgv).concat(i),l=Ts.spawn(oe.argv[0],i,{stdio:"inherit"})):l=Ts.spawn(o,i,{stdio:"inherit"}):(this._checkForMissingExecutable(o,a,t._name),i.unshift(o),i=Qn(oe.execArgv).concat(i),l=Ts.spawn(oe.execPath,i,{stdio:"inherit"})),l.killed||["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach(h=>{oe.on(h,()=>{l.killed===!1&&l.exitCode===null&&l.kill(h)})});let f=this._exitCallback;l.on("close",m=>{m=m??1,f?f(new Es(m,"commander.executeSubCommandAsync","(close)")):oe.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)oe.exit(1);else{let h=new Es(1,"commander.executeSubCommandAsync","(error)");h.nestedError=m,f(h)}}),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
|
|
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=>Qa(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=ht.basename(t,ht.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(
|
|
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 oe.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()}`,oe.env[t.envVar]):this.emit(`optionEnv:${t.name()}`))}})}_parseOptionsImplied(){let t=new il(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(h=>h.negate&&a===h.attributeName()),m=this.options.find(h=>!h.negate&&a===h.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=Zn(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=Zn(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=>Qa(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=ht.basename(t,ht.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(oe.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 Qn(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 Ds(){if(
|
|
28
|
-
`).ok),t&&(Xt=e),t}function fr(){process.platform==="darwin"?Tt("security",["delete-generic-password","-s",Zt,"-a",Qt]):process.platform==="linux"&&Tt("secret-tool",["clear","service",Zt,"account",Qt]),Xt=null}var dr,Zt,Qt,Xt,pr=Te(()=>{"use strict";dr=require("child_process"),Zt="domani-cli",Qt="default"});function yr(e){gr=e}function gt(){try{let e=jt.default.readFileSync(Ms,"utf-8");return JSON.parse(e)}catch{return{}}}function ei(e){e.token&&cr()&&mr(e.token)&&(e={...e,token:void 0,token_in_keychain:!0}),jt.default.mkdirSync(Di,{recursive:!0,mode:448}),jt.default.writeFileSync(Ms,JSON.stringify(e,null,2),{mode:384})}function wr(){fr();try{jt.default.unlinkSync(Ms)}catch{}}function We(){return gr||gt().api_url||di}function He(e={}){if(process.env.DOMANI_API_KEY)return process.env.DOMANI_API_KEY;let t=gt();if(t.token)return t.token;if(t.token_in_keychain)return ur({refresh:e.refreshKeychain})}function dl(){try{let e=jt.default.readFileSync(br,"utf-8");return JSON.parse(e)}catch{return null}}function cl(e){try{jt.default.mkdirSync(Di,{recursive:!0,mode:448}),jt.default.writeFileSync(br,JSON.stringify(e),{mode:384})}catch{}}function Ei(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 vr(){let e=dl();if(e&&Date.now()-e.checkedAt<ll)return Ei(e.version,je)>0?{update:e.version,forced:Ei(je,e.min)<0}:null;try{let t=We(),i=await fetch(`${t}/api/cli/version`,{signal:AbortSignal.timeout(3e3)});if(!i.ok)return null;let s=await i.json();if(cl({version:s.version,min:s.min,checkedAt:Date.now()}),Ei(s.version,je)>0)return{update:s.version,forced:Ei(je,s.min)<0}}catch{}return null}var jt,Pi,hr,Di,Ms,gr,br,ll,Fs,je,yt=Te(()=>{"use strict";jt=D(require("fs"),1),Pi=D(require("path"),1),hr=D(require("os"),1);ci();pr();Di=process.env.DOMANI_CONFIG_DIR||Pi.default.join(hr.default.homedir(),".domani"),Ms=Pi.default.join(Di,"config.json");br=Pi.default.join(Di,"version-check.json"),ll=1440*60*1e3;Fs=process.stdout.isTTY??!1,je="0.4.
|
|
27
|
+
`)}),this}_outputHelpIfRequested(t){let i=this._getHelpOption();i&&t.find(n=>i.is(n))&&(this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)"))}};function Qn(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 Ds(){if(oe.env.NO_COLOR||oe.env.FORCE_COLOR==="0"||oe.env.FORCE_COLOR==="false")return!1;if(oe.env.FORCE_COLOR||oe.env.CLICOLOR_FORCE!==void 0)return!0}Ns.Command=Ps;Ns.useColor=Ds});var nr=pt(Ye=>{var{Argument:tr}=Ii(),{Command:Us}=er(),{CommanderError:sl,InvalidArgumentError:ir}=li(),{Help:nl}=Cs(),{Option:sr}=As();Ye.program=new Us;Ye.createCommand=e=>new Us(e);Ye.createOption=(e,t)=>new sr(e,t);Ye.createArgument=(e,t)=>new tr(e,t);Ye.Command=Us;Ye.Option=sr;Ye.Argument=tr;Ye.Help=nl;Ye.CommanderError=sl;Ye.InvalidArgumentError=ir;Ye.InvalidOptionArgumentError=ir});var F=pt((Gu,qs)=>{var Ti=process||{},ar=Ti.argv||[],Ai=Ti.env||{},rl=!(Ai.NO_COLOR||ar.includes("--no-color"))&&(!!Ai.FORCE_COLOR||ar.includes("--color")||Ti.platform==="win32"||(Ti.stdout||{}).isTTY&&Ai.TERM!=="dumb"||!!Ai.CI),ol=(e,t,i=e)=>s=>{let n=""+s,r=n.indexOf(t,e.length);return~r?e+al(n,t,i,r)+t:e+n+t},al=(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)},lr=(e=rl)=>{let t=e?ol:()=>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")}};qs.exports=lr();qs.exports.createColors=lr});var Yt,di,ci=Te(()=>{"use strict";Yt="domani.run",di=`https://${Yt}`});function Tt(e,t,i){try{let s=(0,dr.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 cr(){return process.platform==="darwin"?!0:process.platform==="linux"?Tt("secret-tool",["--help"]).ok:!1}function ur(e={}){if(e.refresh&&(Xt=void 0),Xt!==void 0)return Xt??void 0;let t;if(process.platform==="darwin"){let i=Tt("security",["find-generic-password","-s",Zt,"-a",Qt,"-w"]);i.ok&&i.stdout&&(t=i.stdout)}else if(process.platform==="linux"){let i=Tt("secret-tool",["lookup","service",Zt,"account",Qt]);i.ok&&i.stdout&&(t=i.stdout)}return Xt=t??null,t}function mr(e){let t=!1;return process.platform==="darwin"?t=Tt("security",["add-generic-password","-U","-s",Zt,"-a",Qt,"-w",e]).ok:process.platform==="linux"&&(t=Tt("secret-tool",["store","--label=domani CLI token","service",Zt,"account",Qt],e+`
|
|
28
|
+
`).ok),t&&(Xt=e),t}function fr(){process.platform==="darwin"?Tt("security",["delete-generic-password","-s",Zt,"-a",Qt]):process.platform==="linux"&&Tt("secret-tool",["clear","service",Zt,"account",Qt]),Xt=null}var dr,Zt,Qt,Xt,pr=Te(()=>{"use strict";dr=require("child_process"),Zt="domani-cli",Qt="default"});function yr(e){gr=e}function gt(){try{let e=jt.default.readFileSync(Ms,"utf-8");return JSON.parse(e)}catch{return{}}}function ei(e){e.token&&cr()&&mr(e.token)&&(e={...e,token:void 0,token_in_keychain:!0}),jt.default.mkdirSync(Di,{recursive:!0,mode:448}),jt.default.writeFileSync(Ms,JSON.stringify(e,null,2),{mode:384})}function wr(){fr();try{jt.default.unlinkSync(Ms)}catch{}}function We(){return gr||gt().api_url||di}function He(e={}){if(process.env.DOMANI_API_KEY)return process.env.DOMANI_API_KEY;let t=gt();if(t.token)return t.token;if(t.token_in_keychain)return ur({refresh:e.refreshKeychain})}function dl(){try{let e=jt.default.readFileSync(br,"utf-8");return JSON.parse(e)}catch{return null}}function cl(e){try{jt.default.mkdirSync(Di,{recursive:!0,mode:448}),jt.default.writeFileSync(br,JSON.stringify(e),{mode:384})}catch{}}function Ei(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 vr(){let e=dl();if(e&&Date.now()-e.checkedAt<ll)return Ei(e.version,je)>0?{update:e.version,forced:Ei(je,e.min)<0}:null;try{let t=We(),i=await fetch(`${t}/api/cli/version`,{signal:AbortSignal.timeout(3e3)});if(!i.ok)return null;let s=await i.json();if(cl({version:s.version,min:s.min,checkedAt:Date.now()}),Ei(s.version,je)>0)return{update:s.version,forced:Ei(je,s.min)<0}}catch{}return null}var jt,Pi,hr,Di,Ms,gr,br,ll,Fs,je,yt=Te(()=>{"use strict";jt=D(require("fs"),1),Pi=D(require("path"),1),hr=D(require("os"),1);ci();pr();Di=process.env.DOMANI_CONFIG_DIR||Pi.default.join(hr.default.homedir(),".domani"),Ms=Pi.default.join(Di,"config.json");br=Pi.default.join(Di,"version-check.json"),ll=1440*60*1e3;Fs=process.stdout.isTTY??!1,je="0.4.69"});var Vs=pt((Qu,$r)=>{"use strict";var Ls={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"},ul={up:(e=1)=>"\x1B[S".repeat(e),down:(e=1)=>"\x1B[T".repeat(e)},ml={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?Ls.up():"");return e&&(t+=Ls.left),t}};$r.exports={cursor:Ls,scroll:ul,erase:ml,beep:"\x07"}});function bt(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?bt(r,t<0?-1:1,i):r}function Gs(e,t,i){return String(e).normalize().replaceAll(`\r
|
|
29
29
|
`,`
|
|
30
30
|
`).split(`
|
|
31
31
|
`).map(s=>xl(s,t,i)).join(`
|
|
@@ -33,7 +33,7 @@ Expecting one of '${s.join("', '")}'`);let n=`${t}Help`;return this.on(n,r=>{let
|
|
|
33
33
|
`),s=t.split(`
|
|
34
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 ce(e){return e===Ks}function Mi(e,t){let i=e;i.isTTY&&i.setRawMode(t)}function Ar({input:e=Et.stdin,output:t=Et.stdout,overwrite:i=!0,hideCursor:s=!0}={}){let n=Ct.createInterface({input:e,output:t,prompt:"",tabSize:1});Ct.emitKeypressEvents(e,n),e instanceof Bs.ReadStream&&e.isTTY&&e.setRawMode(!0);let r=(o,{name:a,sequence:l})=>{let f=String(o);if(Xs([f,a,l],"cancel")){s&&t.write(Ee.cursor.show),process.exit(0);return}if(!i)return;Ct.moveCursor(t,a==="return"?0:-1,a==="return"?-1:0,()=>{Ct.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 Bs.ReadStream&&e.isTTY&&!Cl&&e.setRawMode(!1),n.terminal=!1,n.close()}}function at(e,t,i,s=i){let n=Pt(e??Et.stdout);return Gs(t,n-i.length,{hard:!0,trim:!1}).split(`
|
|
35
35
|
`).map((r,o)=>`${o===0?s:i}${r}`).join(`
|
|
36
|
-
`)}function Ol(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 Il(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function Rl(e,t){if(t)return e?t:t[0]}var St,Et,Ct,jr,Ee,Bs,fl,pl,hl,Ws,Ni,Ui,Hs,qi,gl,yl,Sr,bl,ui,Bi,Cr,wl,zs,Or,vl,Ir,Ys,kr,$l,_r,xr,kl,Js,_l,xl,jl,me,Cl,Ks,Pt,Zs,ot,mi,Fi,Li,Vi,Tr,Wi,Hi,Ji,Qs=Te(()=>{St=D(F(),1),Et=require("node:process"),Ct=D(require("node:readline"),1),jr=D(require("node:readline"),1),Ee=D(Vs(),1),Bs=require("node:tty");fl=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,pl=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,hl=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,Ws=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Ni=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ui=/\t{1,1000}/y,Hs=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"),qi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,gl=new RegExp("\\p{M}+","gu"),yl={limit:1/0,ellipsis:""},Sr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Sr(n,yl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,h=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,$=0,g=0,x=e.length,S=0,O=!1,A=x,W=Math.max(0,s-r),H=0,
|
|
36
|
+
`)}function Ol(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 Il(e,t){return(t.label??String(t.value)).toLowerCase().includes(e.toLowerCase())}function Rl(e,t){if(t)return e?t:t[0]}var St,Et,Ct,jr,Ee,Bs,fl,pl,hl,Ws,Ni,Ui,Hs,qi,gl,yl,Sr,bl,ui,Bi,Cr,wl,zs,Or,vl,Ir,Ys,kr,$l,_r,xr,kl,Js,_l,xl,jl,me,Cl,Ks,Pt,Zs,ot,mi,Fi,Li,Vi,Tr,Wi,Hi,Ji,Qs=Te(()=>{St=D(F(),1),Et=require("node:process"),Ct=D(require("node:readline"),1),jr=D(require("node:readline"),1),Ee=D(Vs(),1),Bs=require("node:tty");fl=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,pl=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,hl=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,Ws=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Ni=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ui=/\t{1,1000}/y,Hs=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"),qi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,gl=new RegExp("\\p{M}+","gu"),yl={limit:1/0,ellipsis:""},Sr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Sr(n,yl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,h=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,$=0,g=0,x=e.length,S=0,O=!1,A=x,W=Math.max(0,s-r),H=0,se=0,P=0,E=0;e:for(;;){if(se>H||g>=x&&g>$){let U=e.slice(H,se)||e.slice($,g);S=0;for(let te of U.replaceAll(gl,"")){let X=te.codePointAt(0)||0;if(pl(X)?E=h:hl(X)?E=k:f!==b&&fl(X)?E=f:E=b,P+E>W&&(A=Math.min(A,Math.max(H,$)+S)),P+E>s){O=!0;break e}S+=te.length,P+=E}H=se=0}if(g>=x)break;if(qi.lastIndex=g,qi.test(e)){if(S=qi.lastIndex-g,E=S*b,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/b))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=qi.lastIndex;continue}if(Ws.lastIndex=g,Ws.test(e)){if(P+o>W&&(A=Math.min(A,g)),P+o>s){O=!0;break}P+=o,H=$,se=g,g=$=Ws.lastIndex;continue}if(Ni.lastIndex=g,Ni.test(e)){if(S=Ni.lastIndex-g,E=S*a,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/a))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=Ni.lastIndex;continue}if(Ui.lastIndex=g,Ui.test(e)){if(S=Ui.lastIndex-g,E=S*l,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/l))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=Ui.lastIndex;continue}if(Hs.lastIndex=g,Hs.test(e)){if(P+m>W&&(A=Math.min(A,g)),P+m>s){O=!0;break}P+=m,H=$,se=g,g=$=Hs.lastIndex;continue}g+=1}return{width:O?W:P,index:O?A:x,truncated:O,ellipsed:O&&s>=r}},bl={limit:1/0,ellipsis:"",ellipsisWidth:0},ui=(e,t={})=>Sr(e,bl,t).width,Bi="\x1B",Cr="\x9B",wl=39,zs="\x07",Or="[",vl="]",Ir="m",Ys=`${vl}8;;`,kr=new RegExp(`(?:\\${Or}(?<code>\\d+)m|\\${Ys}(?<uri>.*)${zs})`,"y"),$l=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=>`${Bi}${Or}${e}${Ir}`,xr=e=>`${Bi}${Ys}${e}${zs}`,kl=e=>e.map(t=>ui(t)),Js=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:ui(o),l=s.next(),f=s.next(),m=0;for(;!l.done;){let h=l.value,b=ui(h);a+b<=i?e[e.length-1]+=h:(e.push(h),a=0),(h===Bi||h===Cr)&&(n=!0,r=t.startsWith(Ys,m+1)),n?r?h===zs&&(n=!1,r=!1):h===Ir&&(n=!1):(a+=b,a===i&&!f.done&&(e.push(""),a=0)),l=f,f=s.next(),m+=h.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},_l=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(ui(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=kl(o),l=[""];for(let[$,g]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let x=ui(l.at(-1)??"");if($!==0&&(x>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),x=0),(x>0||i.trim===!1)&&(l[l.length-1]+=" ",x++)),i.hard&&a[$]>t){let S=t-x,O=1+Math.floor((a[$]-S-1)/t);Math.floor((a[$]-1)/t)<O&&l.push(""),Js(l,g,t);continue}if(x+a[$]>t&&x>0&&a[$]>0){if(i.wordWrap===!1&&x<t){Js(l,g,t);continue}l.push("")}if(x+a[$]>t&&i.wordWrap===!1){Js(l,g,t);continue}l[l.length-1]+=g}i.trim!==!1&&(l=l.map($=>_l($)));let f=l.join(`
|
|
37
37
|
`),m=f[Symbol.iterator](),h=m.next(),b=m.next(),k=0;for(;!h.done;){let $=h.value,g=b.value;if(s+=$,$===Bi||$===Cr){kr.lastIndex=k+1;let S=kr.exec(f)?.groups;if(S?.code!==void 0){let O=Number.parseFloat(S.code);n=O===wl?void 0:O}else S?.uri!==void 0&&(r=S.uri.length===0?void 0:S.uri)}let x=n?$l(n):void 0;g===`
|
|
38
38
|
`?(r&&(s+=xr("")),n&&x&&(s+=_r(x))):$===`
|
|
39
39
|
`&&(n&&x&&(s+=_r(n)),r&&(s+=xr(r))),k+=$.length,h=b,b=m.next()}return s};jl=["up","down","left","right","space","enter","cancel"],me={actions:new Set(jl),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]]),messages:{cancel:"Canceled",error:"Something went wrong"},withGuide:!0};Cl=globalThis.process.platform.startsWith("win"),Ks=Symbol("clack:cancel");Pt=e=>"columns"in e&&typeof e.columns=="number"?e.columns:80,Zs=e=>"rows"in e&&typeof e.rows=="number"?e.rows:20;ot=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=Et.stdin,output:n=Et.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(Ks);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}this.rl=jr.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),Mi(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),Mi(this.input,!1),t(this.value)}),this.once("cancel",()=>{this.output.write(Ee.cursor.show),this.output.off("resize",this.render),Mi(this.input,!1),t(Ks)})})}_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&&me.aliases.has(i.name)&&this.emit("cursor",me.aliases.get(i.name)),me.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")}Xs([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(`
|
|
@@ -41,15 +41,15 @@ Expecting one of '${s.join("', '")}'`);let n=`${t}Help`;return this.on(n,r=>{let
|
|
|
41
41
|
`).length-1;this.output.write(Ee.cursor.move(-999,t*-1))}render(){let t=Gs(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=Sl(this._prevFrame,t),s=Zs(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
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(Ee.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};mi=class extends ot{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#s;#t;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return St.default.inverse(St.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}${St.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??Il;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=bt(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=Rl(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=Ol(this.focusedValue,this.filteredOptions);this.#e=bt(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())}}},Fi=class extends ot{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})}},Li=class extends ot{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}})}},Vi=class extends ot{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?bt(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=bt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=bt(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Tr=class extends ot{_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}${St.default.inverse(St.default.hidden("_"))}`;let t=this.masked,i=t.slice(0,this.cursor),s=t.slice(this.cursor);return`${i}${St.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)})}},Wi=class extends ot{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?bt(s,1,this.options):s,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=bt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=bt(this.cursor,1,this.options);break}this.changeValue()})}},Hi=class extends ot{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"))})}},Ji=class extends ot{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}${St.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 bn={};zt(bn,{S_BAR:()=>T,S_BAR_END:()=>Se,S_BAR_END_RIGHT:()=>Wr,S_BAR_H:()=>es,S_BAR_START:()=>an,S_BAR_START_RIGHT:()=>Vr,S_CHECKBOX_ACTIVE:()=>Qi,S_CHECKBOX_INACTIVE:()=>ii,S_CHECKBOX_SELECTED:()=>Nt,S_CONNECT_LEFT:()=>Jr,S_CORNER_BOTTOM_LEFT:()=>cn,S_CORNER_BOTTOM_RIGHT:()=>dn,S_CORNER_TOP_LEFT:()=>Br,S_CORNER_TOP_RIGHT:()=>ln,S_ERROR:()=>pn,S_INFO:()=>un,S_PASSWORD_MASK:()=>Hr,S_RADIO_ACTIVE:()=>hi,S_RADIO_INACTIVE:()=>qt,S_STEP_ACTIVE:()=>Lr,S_STEP_CANCEL:()=>rn,S_STEP_ERROR:()=>on,S_STEP_SUBMIT:()=>Mt,S_SUCCESS:()=>mn,S_WARN:()=>fn,autocomplete:()=>Zr,autocompleteMultiselect:()=>Bl,box:()=>Yl,cancel:()=>Ql,confirm:()=>Xe,group:()=>Xl,groupMultiselect:()=>Zl,intro:()=>ed,isCI:()=>nn,isCancel:()=>ce,isTTY:()=>Fr,limitOptions:()=>ni,log:()=>Be,multiselect:()=>id,note:()=>rd,outro:()=>td,password:()=>od,path:()=>ad,progress:()=>dd,select:()=>it,selectKey:()=>cd,settings:()=>me,spinner:()=>gi,stream:()=>Dt,symbol:()=>tt,symbolBar:()=>hn,taskLog:()=>fd,tasks:()=>ud,text:()=>Pe,unicode:()=>Zi,unicodeOr:()=>
|
|
44
|
+
`)),this._prevFrame=t;return}}this.output.write(Ee.erase.down())}this.output.write(t),this.state==="initial"&&(this.state="active"),this._prevFrame=t}}};mi=class extends ot{filteredOptions;multiple;isNavigating=!1;selectedValues=[];focusedValue;#e=0;#i="";#s;#t;get cursor(){return this.#e}get userInputWithCursor(){if(!this.userInput)return St.default.inverse(St.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}${St.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??Il;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=bt(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=Rl(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=Ol(this.focusedValue,this.filteredOptions);this.#e=bt(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())}}},Fi=class extends ot{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})}},Li=class extends ot{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}})}},Vi=class extends ot{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?bt(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=bt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=bt(this.cursor,1,this.options);break;case"space":this.toggleValue();break}})}},Tr=class extends ot{_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}${St.default.inverse(St.default.hidden("_"))}`;let t=this.masked,i=t.slice(0,this.cursor),s=t.slice(this.cursor);return`${i}${St.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)})}},Wi=class extends ot{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?bt(s,1,this.options):s,this.changeValue(),this.on("cursor",n=>{switch(n){case"left":case"up":this.cursor=bt(this.cursor,-1,this.options);break;case"down":case"right":this.cursor=bt(this.cursor,1,this.options);break}this.changeValue()})}},Hi=class extends ot{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"))})}},Ji=class extends ot{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}${St.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 bn={};zt(bn,{S_BAR:()=>T,S_BAR_END:()=>Se,S_BAR_END_RIGHT:()=>Wr,S_BAR_H:()=>es,S_BAR_START:()=>an,S_BAR_START_RIGHT:()=>Vr,S_CHECKBOX_ACTIVE:()=>Qi,S_CHECKBOX_INACTIVE:()=>ii,S_CHECKBOX_SELECTED:()=>Nt,S_CONNECT_LEFT:()=>Jr,S_CORNER_BOTTOM_LEFT:()=>cn,S_CORNER_BOTTOM_RIGHT:()=>dn,S_CORNER_TOP_LEFT:()=>Br,S_CORNER_TOP_RIGHT:()=>ln,S_ERROR:()=>pn,S_INFO:()=>un,S_PASSWORD_MASK:()=>Hr,S_RADIO_ACTIVE:()=>hi,S_RADIO_INACTIVE:()=>qt,S_STEP_ACTIVE:()=>Lr,S_STEP_CANCEL:()=>rn,S_STEP_ERROR:()=>on,S_STEP_SUBMIT:()=>Mt,S_SUCCESS:()=>mn,S_WARN:()=>fn,autocomplete:()=>Zr,autocompleteMultiselect:()=>Bl,box:()=>Yl,cancel:()=>Ql,confirm:()=>Xe,group:()=>Xl,groupMultiselect:()=>Zl,intro:()=>ed,isCI:()=>nn,isCancel:()=>ce,isTTY:()=>Fr,limitOptions:()=>ni,log:()=>Be,multiselect:()=>id,note:()=>rd,outro:()=>td,password:()=>od,path:()=>ad,progress:()=>dd,select:()=>it,selectKey:()=>cd,settings:()=>me,spinner:()=>gi,stream:()=>Dt,symbol:()=>tt,symbolBar:()=>hn,taskLog:()=>fd,tasks:()=>ud,text:()=>Pe,unicode:()=>Zi,unicodeOr:()=>le,updateSettings:()=>Rr});function Al(){return Je.default.platform!=="win32"?Je.default.env.TERM!=="linux":!!Je.default.env.CI||!!Je.default.env.WT_SESSION||!!Je.default.env.TERMINUS_SUBLIME||Je.default.env.ConEmuTask==="{cmd::Cmder}"||Je.default.env.TERM_PROGRAM==="Terminus-Sublime"||Je.default.env.TERM_PROGRAM==="vscode"||Je.default.env.TERM==="xterm-256color"||Je.default.env.TERM==="alacritty"||Je.default.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}function si(e,t,i){return String(e).normalize().replaceAll(`\r
|
|
45
45
|
`,`
|
|
46
46
|
`).split(`
|
|
47
47
|
`).map(s=>Wl(s,t,i)).join(`
|
|
48
|
-
`)}function Nr(e){return e.label??String(e.value??"")}function Xr(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 Jl(e,t){let i=[];for(let s of t)e.includes(s.value)&&i.push(s);return i}function Ur(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 dd({style:e="heavy",max:t=100,size:i=40,...s}={}){let n=gi(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 g=Math.floor(r/a*l);return`${f(k)(qr[e].repeat(g))}${p.default.dim(qr[e].repeat(l-g))} ${$}`},h=(k="")=>{o=k,n.start(m("initial",k))},b=(k=1,$)=>{r=Math.min(a,k+r),n.message(m("active",$??o)),o=$??o};return{start:h,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:b,isCancelled:n.isCancelled,message:k=>b(0,k)}}var p,Je,Ut,pi,ti,Xi,Zi,nn,Fr,ae,Lr,rn,on,Mt,an,T,Se,Vr,Wr,hi,qt,Qi,Nt,ii,Hr,es,ln,Jr,dn,cn,Br,un,mn,fn,pn,tt,hn,Tl,El,Pl,en,Gi,Ki,tn,zi,Dl,Nl,Gr,Ul,Ne,ts,Kr,ql,gn,zr,Ml,Yr,yn,Er,Fl,Pr,Dr,Ll,sn,Vl,Wl,Hl,ni,Zr,Bl,Gl,Kl,zl,Yl,Xe,Xl,Zl,Be,Ql,ed,td,fi,id,sd,nd,rd,od,ad,ld,gi,qr,Yi,it,cd,Mr,Dt,ud,md,fd,Pe,Ue=Te(()=>{Qs();Qs();p=D(F(),1),Je=D(require("node:process"),1),Ut=require("node:fs"),pi=require("node:path"),ti=D(Vs(),1),Xi=require("node:util");Zi=Al(),nn=()=>process.env.CI==="true",Fr=e=>e.isTTY===!0,ae=(e,t)=>Zi?e:t,Lr=ae("\u25C6","*"),rn=ae("\u25A0","x"),on=ae("\u25B2","x"),Mt=ae("\u25C7","o"),an=ae("\u250C","T"),T=ae("\u2502","|"),Se=ae("\u2514","\u2014"),Vr=ae("\u2510","T"),Wr=ae("\u2518","\u2014"),hi=ae("\u25CF",">"),qt=ae("\u25CB"," "),Qi=ae("\u25FB","[\u2022]"),Nt=ae("\u25FC","[+]"),ii=ae("\u25FB","[ ]"),Hr=ae("\u25AA","\u2022"),es=ae("\u2500","-"),ln=ae("\u256E","+"),Jr=ae("\u251C","+"),dn=ae("\u256F","+"),cn=ae("\u2570","+"),Br=ae("\u256D","+"),un=ae("\u25CF","\u2022"),mn=ae("\u25C6","*"),fn=ae("\u25B2","!"),pn=ae("\u25A0","x"),tt=e=>{switch(e){case"initial":case"active":return p.default.cyan(Lr);case"cancel":return p.default.red(rn);case"error":return p.default.yellow(on);case"submit":return p.default.green(Mt)}},hn=e=>{switch(e){case"initial":case"active":return p.default.cyan(T);case"cancel":return p.default.red(T);case"error":return p.default.yellow(T);case"submit":return p.default.green(T)}},Tl=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,El=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Pl=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,en=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Gi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ki=/\t{1,1000}/y,tn=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"),zi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Dl=new RegExp("\\p{M}+","gu"),Nl={limit:1/0,ellipsis:""},Gr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Gr(n,Nl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,h=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,$=0,g=0,x=e.length,S=0,O=!1,A=x,W=Math.max(0,s-r),H=0,ie=0,P=0,E=0;e:for(;;){if(ie>H||g>=x&&g>$){let U=e.slice(H,ie)||e.slice($,g);S=0;for(let ee of U.replaceAll(Dl,"")){let X=ee.codePointAt(0)||0;if(El(X)?E=h:Pl(X)?E=k:f!==b&&Tl(X)?E=f:E=b,P+E>W&&(A=Math.min(A,Math.max(H,$)+S)),P+E>s){O=!0;break e}S+=ee.length,P+=E}H=ie=0}if(g>=x)break;if(zi.lastIndex=g,zi.test(e)){if(S=zi.lastIndex-g,E=S*b,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/b))),P+E>s){O=!0;break}P+=E,H=$,ie=g,g=$=zi.lastIndex;continue}if(en.lastIndex=g,en.test(e)){if(P+o>W&&(A=Math.min(A,g)),P+o>s){O=!0;break}P+=o,H=$,ie=g,g=$=en.lastIndex;continue}if(Gi.lastIndex=g,Gi.test(e)){if(S=Gi.lastIndex-g,E=S*a,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/a))),P+E>s){O=!0;break}P+=E,H=$,ie=g,g=$=Gi.lastIndex;continue}if(Ki.lastIndex=g,Ki.test(e)){if(S=Ki.lastIndex-g,E=S*l,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/l))),P+E>s){O=!0;break}P+=E,H=$,ie=g,g=$=Ki.lastIndex;continue}if(tn.lastIndex=g,tn.test(e)){if(P+m>W&&(A=Math.min(A,g)),P+m>s){O=!0;break}P+=m,H=$,ie=g,g=$=tn.lastIndex;continue}g+=1}return{width:O?W:P,index:O?A:x,truncated:O,ellipsed:O&&s>=r}},Ul={limit:1/0,ellipsis:"",ellipsisWidth:0},Ne=(e,t={})=>Gr(e,Ul,t).width,ts="\x1B",Kr="\x9B",ql=39,gn="\x07",zr="[",Ml="]",Yr="m",yn=`${Ml}8;;`,Er=new RegExp(`(?:\\${zr}(?<code>\\d+)m|\\${yn}(?<uri>.*)${gn})`,"y"),Fl=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},Pr=e=>`${ts}${zr}${e}${Yr}`,Dr=e=>`${ts}${yn}${e}${gn}`,Ll=e=>e.map(t=>Ne(t)),sn=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:Ne(o),l=s.next(),f=s.next(),m=0;for(;!l.done;){let h=l.value,b=Ne(h);a+b<=i?e[e.length-1]+=h:(e.push(h),a=0),(h===ts||h===Kr)&&(n=!0,r=t.startsWith(yn,m+1)),n?r?h===gn&&(n=!1,r=!1):h===Yr&&(n=!1):(a+=b,a===i&&!f.done&&(e.push(""),a=0)),l=f,f=s.next(),m+=h.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},Vl=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(Ne(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},Wl=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=Ll(o),l=[""];for(let[$,g]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let x=Ne(l.at(-1)??"");if($!==0&&(x>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),x=0),(x>0||i.trim===!1)&&(l[l.length-1]+=" ",x++)),i.hard&&a[$]>t){let S=t-x,O=1+Math.floor((a[$]-S-1)/t);Math.floor((a[$]-1)/t)<O&&l.push(""),sn(l,g,t);continue}if(x+a[$]>t&&x>0&&a[$]>0){if(i.wordWrap===!1&&x<t){sn(l,g,t);continue}l.push("")}if(x+a[$]>t&&i.wordWrap===!1){sn(l,g,t);continue}l[l.length-1]+=g}i.trim!==!1&&(l=l.map($=>Vl($)));let f=l.join(`
|
|
48
|
+
`)}function Nr(e){return e.label??String(e.value??"")}function Xr(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 Jl(e,t){let i=[];for(let s of t)e.includes(s.value)&&i.push(s);return i}function Ur(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 dd({style:e="heavy",max:t=100,size:i=40,...s}={}){let n=gi(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 g=Math.floor(r/a*l);return`${f(k)(qr[e].repeat(g))}${p.default.dim(qr[e].repeat(l-g))} ${$}`},h=(k="")=>{o=k,n.start(m("initial",k))},b=(k=1,$)=>{r=Math.min(a,k+r),n.message(m("active",$??o)),o=$??o};return{start:h,stop:n.stop,cancel:n.cancel,error:n.error,clear:n.clear,advance:b,isCancelled:n.isCancelled,message:k=>b(0,k)}}var p,Je,Ut,pi,ti,Xi,Zi,nn,Fr,le,Lr,rn,on,Mt,an,T,Se,Vr,Wr,hi,qt,Qi,Nt,ii,Hr,es,ln,Jr,dn,cn,Br,un,mn,fn,pn,tt,hn,Tl,El,Pl,en,Gi,Ki,tn,zi,Dl,Nl,Gr,Ul,Ne,ts,Kr,ql,gn,zr,Ml,Yr,yn,Er,Fl,Pr,Dr,Ll,sn,Vl,Wl,Hl,ni,Zr,Bl,Gl,Kl,zl,Yl,Xe,Xl,Zl,Be,Ql,ed,td,fi,id,sd,nd,rd,od,ad,ld,gi,qr,Yi,it,cd,Mr,Dt,ud,md,fd,Pe,Ue=Te(()=>{Qs();Qs();p=D(F(),1),Je=D(require("node:process"),1),Ut=require("node:fs"),pi=require("node:path"),ti=D(Vs(),1),Xi=require("node:util");Zi=Al(),nn=()=>process.env.CI==="true",Fr=e=>e.isTTY===!0,le=(e,t)=>Zi?e:t,Lr=le("\u25C6","*"),rn=le("\u25A0","x"),on=le("\u25B2","x"),Mt=le("\u25C7","o"),an=le("\u250C","T"),T=le("\u2502","|"),Se=le("\u2514","\u2014"),Vr=le("\u2510","T"),Wr=le("\u2518","\u2014"),hi=le("\u25CF",">"),qt=le("\u25CB"," "),Qi=le("\u25FB","[\u2022]"),Nt=le("\u25FC","[+]"),ii=le("\u25FB","[ ]"),Hr=le("\u25AA","\u2022"),es=le("\u2500","-"),ln=le("\u256E","+"),Jr=le("\u251C","+"),dn=le("\u256F","+"),cn=le("\u2570","+"),Br=le("\u256D","+"),un=le("\u25CF","\u2022"),mn=le("\u25C6","*"),fn=le("\u25B2","!"),pn=le("\u25A0","x"),tt=e=>{switch(e){case"initial":case"active":return p.default.cyan(Lr);case"cancel":return p.default.red(rn);case"error":return p.default.yellow(on);case"submit":return p.default.green(Mt)}},hn=e=>{switch(e){case"initial":case"active":return p.default.cyan(T);case"cancel":return p.default.red(T);case"error":return p.default.yellow(T);case"submit":return p.default.green(T)}},Tl=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,El=e=>e===12288||e>=65281&&e<=65376||e>=65504&&e<=65510,Pl=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,en=/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/y,Gi=/[\x00-\x08\x0A-\x1F\x7F-\x9F]{1,1000}/y,Ki=/\t{1,1000}/y,tn=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"),zi=/(?:[\x20-\x7E\xA0-\xFF](?!\uFE0F)){1,1000}/y,Dl=new RegExp("\\p{M}+","gu"),Nl={limit:1/0,ellipsis:""},Gr=(e,t={},i={})=>{let s=t.limit??1/0,n=t.ellipsis??"",r=t?.ellipsisWidth??(n?Gr(n,Nl,i).width:0),o=i.ansiWidth??0,a=i.controlWidth??0,l=i.tabWidth??8,f=i.ambiguousWidth??1,m=i.emojiWidth??2,h=i.fullWidthWidth??2,b=i.regularWidth??1,k=i.wideWidth??2,$=0,g=0,x=e.length,S=0,O=!1,A=x,W=Math.max(0,s-r),H=0,se=0,P=0,E=0;e:for(;;){if(se>H||g>=x&&g>$){let U=e.slice(H,se)||e.slice($,g);S=0;for(let te of U.replaceAll(Dl,"")){let X=te.codePointAt(0)||0;if(El(X)?E=h:Pl(X)?E=k:f!==b&&Tl(X)?E=f:E=b,P+E>W&&(A=Math.min(A,Math.max(H,$)+S)),P+E>s){O=!0;break e}S+=te.length,P+=E}H=se=0}if(g>=x)break;if(zi.lastIndex=g,zi.test(e)){if(S=zi.lastIndex-g,E=S*b,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/b))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=zi.lastIndex;continue}if(en.lastIndex=g,en.test(e)){if(P+o>W&&(A=Math.min(A,g)),P+o>s){O=!0;break}P+=o,H=$,se=g,g=$=en.lastIndex;continue}if(Gi.lastIndex=g,Gi.test(e)){if(S=Gi.lastIndex-g,E=S*a,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/a))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=Gi.lastIndex;continue}if(Ki.lastIndex=g,Ki.test(e)){if(S=Ki.lastIndex-g,E=S*l,P+E>W&&(A=Math.min(A,g+Math.floor((W-P)/l))),P+E>s){O=!0;break}P+=E,H=$,se=g,g=$=Ki.lastIndex;continue}if(tn.lastIndex=g,tn.test(e)){if(P+m>W&&(A=Math.min(A,g)),P+m>s){O=!0;break}P+=m,H=$,se=g,g=$=tn.lastIndex;continue}g+=1}return{width:O?W:P,index:O?A:x,truncated:O,ellipsed:O&&s>=r}},Ul={limit:1/0,ellipsis:"",ellipsisWidth:0},Ne=(e,t={})=>Gr(e,Ul,t).width,ts="\x1B",Kr="\x9B",ql=39,gn="\x07",zr="[",Ml="]",Yr="m",yn=`${Ml}8;;`,Er=new RegExp(`(?:\\${zr}(?<code>\\d+)m|\\${yn}(?<uri>.*)${gn})`,"y"),Fl=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},Pr=e=>`${ts}${zr}${e}${Yr}`,Dr=e=>`${ts}${yn}${e}${gn}`,Ll=e=>e.map(t=>Ne(t)),sn=(e,t,i)=>{let s=t[Symbol.iterator](),n=!1,r=!1,o=e.at(-1),a=o===void 0?0:Ne(o),l=s.next(),f=s.next(),m=0;for(;!l.done;){let h=l.value,b=Ne(h);a+b<=i?e[e.length-1]+=h:(e.push(h),a=0),(h===ts||h===Kr)&&(n=!0,r=t.startsWith(yn,m+1)),n?r?h===gn&&(n=!1,r=!1):h===Yr&&(n=!1):(a+=b,a===i&&!f.done&&(e.push(""),a=0)),l=f,f=s.next(),m+=h.length}o=e.at(-1),!a&&o!==void 0&&o.length>0&&e.length>1&&(e[e.length-2]+=e.pop())},Vl=e=>{let t=e.split(" "),i=t.length;for(;i>0&&!(Ne(t[i-1])>0);)i--;return i===t.length?e:t.slice(0,i).join(" ")+t.slice(i).join("")},Wl=(e,t,i={})=>{if(i.trim!==!1&&e.trim()==="")return"";let s="",n,r,o=e.split(" "),a=Ll(o),l=[""];for(let[$,g]of o.entries()){i.trim!==!1&&(l[l.length-1]=(l.at(-1)??"").trimStart());let x=Ne(l.at(-1)??"");if($!==0&&(x>=t&&(i.wordWrap===!1||i.trim===!1)&&(l.push(""),x=0),(x>0||i.trim===!1)&&(l[l.length-1]+=" ",x++)),i.hard&&a[$]>t){let S=t-x,O=1+Math.floor((a[$]-S-1)/t);Math.floor((a[$]-1)/t)<O&&l.push(""),sn(l,g,t);continue}if(x+a[$]>t&&x>0&&a[$]>0){if(i.wordWrap===!1&&x<t){sn(l,g,t);continue}l.push("")}if(x+a[$]>t&&i.wordWrap===!1){sn(l,g,t);continue}l[l.length-1]+=g}i.trim!==!1&&(l=l.map($=>Vl($)));let f=l.join(`
|
|
49
49
|
`),m=f[Symbol.iterator](),h=m.next(),b=m.next(),k=0;for(;!h.done;){let $=h.value,g=b.value;if(s+=$,$===ts||$===Kr){Er.lastIndex=k+1;let S=Er.exec(f)?.groups;if(S?.code!==void 0){let O=Number.parseFloat(S.code);n=O===ql?void 0:O}else S?.uri!==void 0&&(r=S.uri.length===0?void 0:S.uri)}let x=n?Fl(n):void 0;g===`
|
|
50
50
|
`?(r&&(s+=Dr("")),n&&x&&(s+=Pr(x))):$===`
|
|
51
51
|
`&&(n&&x&&(s+=Pr(n)),r&&(s+=Dr(r))),k+=$.length,h=b,b=m.next()}return s};Hl=(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}},ni=e=>{let{cursor:t,options:i,style:s}=e,n=e.output??process.stdout,r=Pt(n),o=e.columnPadding??0,a=e.rowPadding??4,l=r-o,f=Zs(n),m=p.default.dim("..."),h=e.maxItems??Number.POSITIVE_INFINITY,b=Math.max(f-a,0),k=Math.max(Math.min(h,b),5),$=0;t>=k-3&&($=Math.max(Math.min(t-k+3,i.length-k),0));let g=k<i.length&&$>0,x=k<i.length&&$+k<i.length,S=Math.min($+k,i.length),O=[],A=0;g&&A++,x&&A++;let W=$+(g?1:0),H=S-(x?1:0);for(let P=W;P<H;P++){let E=si(s(i[P],P===t),l,{hard:!0,trim:!1}).split(`
|
|
52
|
-
`);O.push(E),A+=E.length}if(A>b){let P=0,E=0,U=A,
|
|
52
|
+
`);O.push(E),A+=E.length}if(A>b){let P=0,E=0,U=A,te=t-W,X=(q,re)=>Hl(O,U,q,re,b);g?({lineCount:U,removals:P}=X(0,te),U>b&&({lineCount:U,removals:E}=X(te+1,O.length))):({lineCount:U,removals:E}=X(te+1,O.length),U>b&&({lineCount:U,removals:P}=X(0,te))),P>0&&(g=!0,O.splice(0,P)),E>0&&(x=!0,O.splice(O.length-E,E))}let se=[];g&&se.push(m);for(let P of O)for(let E of P)se.push(E);return x&&se.push(m),se};Zr=e=>new mi({options:e.options,initialValue:e.initialValue?[e.initialValue]:void 0,initialUserInput:e.initialUserInput,filter:e.filter??((t,i)=>Xr(t,i)),signal:e.signal,input:e.input,output:e.output,validate:e.validate,render(){let t=e.withGuide??me.withGuide,i=t?[`${p.default.gray(T)}`,`${tt(this.state)} ${e.message}`]:[`${tt(this.state)} ${e.message}`],s=this.userInput,n=this.options,r=e.placeholder,o=s===""&&r!==void 0,a=(l,f)=>{let m=Nr(l),h=l.hint&&l.value===this.focusedValue?p.default.dim(` (${l.hint})`):"";switch(f){case"active":return`${p.default.green(hi)} ${m}${h}`;case"inactive":return`${p.default.dim(qt)} ${p.default.dim(m)}`;case"disabled":return`${p.default.gray(qt)} ${p.default.strikethrough(p.default.gray(m))}`}};switch(this.state){case"submit":{let l=Jl(this.selectedValues,n),f=l.length>0?` ${p.default.dim(l.map(Nr).join(", "))}`:"",m=t?p.default.gray(T):"";return`${i.join(`
|
|
53
53
|
`)}
|
|
54
54
|
${m}${f}`}case"cancel":{let l=s?` ${p.default.strikethrough(p.default.dim(s))}`:"",f=t?p.default.gray(T):"";return`${i.join(`
|
|
55
55
|
`)}
|
|
@@ -59,9 +59,9 @@ ${tt(this.state)} ${e.message}
|
|
|
59
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(T)} ${p.default.dim(`${this.selectedValues.length} items selected`)}`;case"cancel":return`${s}${p.default.gray(T)} ${p.default.strikethrough(p.default.dim(n))}`;default:{let m=this.state==="error"?p.default.yellow:p.default.cyan,h=[`${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?[`${m(T)} ${p.default.yellow("No matches found")}`]:[],k=this.state==="error"?[`${m(T)} ${p.default.yellow(this.error)}`]:[],$=[...`${s}${m(T)}`.split(`
|
|
60
60
|
`),`${m(T)} ${p.default.dim("Search:")} ${a}${f}`,...b,...k],g=[`${m(T)} ${h.join(" \u2022 ")}`,`${m(Se)}`],x=ni({cursor:this.cursor,options:this.filteredOptions,style:(S,O)=>t(S,O,this.selectedValues,this.focusedValue),maxItems:e.maxItems,output:e.output,rowPadding:$.length+g.length});return[...$,...x.map(S=>`${m(T)} ${S}`),...g].join(`
|
|
61
61
|
`)}}}});return i.prompt()},Gl=[Br,ln,cn,dn],Kl=[an,Vr,Se,Wr];zl=e=>e,Yl=(e="",t="",i)=>{let s=i?.output??process.stdout,n=Pt(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??me.withGuide?`${T} `:"",m=i?.formatBorder??zl,h=(i?.rounded?Gl:Kl).map(m),b=m(es),k=m(T),$=Ne(f),g=Ne(t),x=n-$,S=Math.floor(n*l)-$;if(i?.width==="auto"){let U=e.split(`
|
|
62
|
-
`),
|
|
62
|
+
`),te=g+o*2;for(let q of U){let re=Ne(q)+a*2;re>te&&(te=re)}let X=te+r;X<S&&(S=X)}S%2!==0&&(S<x?S++:S--);let O=S-r,A=O-o*2,W=g>A?`${t.slice(0,A-3)}...`:t,[H,se]=Ur(Ne(W),O,o,i?.titleAlign),P=si(e,O-a*2,{hard:!0,trim:!1});s.write(`${f}${h[0]}${b.repeat(H)}${W}${b.repeat(se)}${h[1]}
|
|
63
63
|
`);let E=P.split(`
|
|
64
|
-
`);for(let U of E){let[
|
|
64
|
+
`);for(let U of E){let[te,X]=Ur(Ne(U),O,a,i?.contentAlign);s.write(`${f}${k}${" ".repeat(te)}${U}${" ".repeat(X)}${k}
|
|
65
65
|
`)}s.write(`${f}${h[2]}${b.repeat(O)}${h[3]}
|
|
66
66
|
`)},Xe=e=>{let t=e.active??"Yes",i=e.inactive??"No";return new Fi({active:t,inactive:i,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue??!0,render(){let s=e.withGuide??me.withGuide,n=`${s?`${p.default.gray(T)}
|
|
67
67
|
`:""}${tt(this.state)} ${e.message}
|
|
@@ -126,12 +126,12 @@ ${o}${p.default.yellow(this.error)}
|
|
|
126
126
|
`}case"submit":{let r=t?`${p.default.gray(T)} `:"",o=n?p.default.dim(n):"";return`${i}${r}${o}`}case"cancel":{let r=t?`${p.default.gray(T)} `:"",o=n?p.default.strikethrough(p.default.dim(n)):"";return`${i}${r}${o}${n&&t?`
|
|
127
127
|
${p.default.gray(T)}`:""}`}default:{let r=t?`${p.default.cyan(T)} `:"",o=t?p.default.cyan(Se):"";return`${i}${r}${s}
|
|
128
128
|
${o}
|
|
129
|
-
`}}}}).prompt(),ad=e=>{let t=e.validate;return Zr({...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,Ut.existsSync)(i)?(0,Ut.lstatSync)(i).isDirectory()?s=i:s=(0,pi.dirname)(i):s=(0,pi.dirname)(i),(0,Ut.readdirSync)(s).map(n=>{let r=(0,pi.join)(s,n),o=(0,Ut.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[]}}})},ld=p.default.magenta,gi=({indicator:e="dots",onCancel:t,output:i=process.stdout,cancelMessage:s,errorMessage:n,frames:r=Zi?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Zi?80:120,signal:a,...l}={})=>{let f=nn(),m,h,b=!1,k=!1,$="",g,x=performance.now(),S=Pt(i),O=l?.styleFrame??ld,A=M=>{let Z=M>1?n??me.messages.error:s??me.messages.cancel;k=M===1,b&&(
|
|
129
|
+
`}}}}).prompt(),ad=e=>{let t=e.validate;return Zr({...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,Ut.existsSync)(i)?(0,Ut.lstatSync)(i).isDirectory()?s=i:s=(0,pi.dirname)(i):s=(0,pi.dirname)(i),(0,Ut.readdirSync)(s).map(n=>{let r=(0,pi.join)(s,n),o=(0,Ut.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[]}}})},ld=p.default.magenta,gi=({indicator:e="dots",onCancel:t,output:i=process.stdout,cancelMessage:s,errorMessage:n,frames:r=Zi?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],delay:o=Zi?80:120,signal:a,...l}={})=>{let f=nn(),m,h,b=!1,k=!1,$="",g,x=performance.now(),S=Pt(i),O=l?.styleFrame??ld,A=M=>{let Z=M>1?n??me.messages.error:s??me.messages.cancel;k=M===1,b&&(re(Z,M),k&&typeof t=="function"&&t())},W=()=>A(2),H=()=>A(1),se=()=>{process.on("uncaughtExceptionMonitor",W),process.on("unhandledRejection",W),process.on("SIGINT",H),process.on("SIGTERM",H),process.on("exit",A),a&&a.addEventListener("abort",H)},P=()=>{process.removeListener("uncaughtExceptionMonitor",W),process.removeListener("unhandledRejection",W),process.removeListener("SIGINT",H),process.removeListener("SIGTERM",H),process.removeListener("exit",A),a&&a.removeEventListener("abort",H)},E=()=>{if(g===void 0)return;f&&i.write(`
|
|
130
130
|
`);let M=si(g,S,{hard:!0,trim:!1}).split(`
|
|
131
|
-
`);M.length>1&&i.write(ti.cursor.up(M.length-1)),i.write(ti.cursor.to(0)),i.write(ti.erase.down())},U=M=>M.replace(/\.+$/,""),
|
|
132
|
-
`);let Z=0,
|
|
131
|
+
`);M.length>1&&i.write(ti.cursor.up(M.length-1)),i.write(ti.cursor.to(0)),i.write(ti.erase.down())},U=M=>M.replace(/\.+$/,""),te=M=>{let Z=(performance.now()-M)/1e3,ie=Math.floor(Z/60),z=Math.floor(Z%60);return ie>0?`[${ie}m ${z}s]`:`[${z}s]`},X=l.withGuide??me.withGuide,q=(M="")=>{b=!0,m=Ar({output:i}),$=U(M),x=performance.now(),X&&i.write(`${p.default.gray(T)}
|
|
132
|
+
`);let Z=0,ie=0;se(),h=setInterval(()=>{if(f&&$===g)return;E(),g=$;let z=O(r[Z]),Ae;if(f)Ae=`${z} ${$}...`;else if(e==="timer")Ae=`${z} ${$} ${te(x)}`;else{let ue=".".repeat(Math.floor(ie)).slice(0,3);Ae=`${z} ${$}${ue}`}let ze=si(Ae,S,{hard:!0,trim:!1});i.write(ze),Z=Z+1<r.length?Z+1:0,ie=ie<4?ie+.125:0},o)},re=(M="",Z=0,ie=!1)=>{if(!b)return;b=!1,clearInterval(h),E();let z=Z===0?p.default.green(Mt):Z===1?p.default.red(rn):p.default.red(on);$=M??$,ie||(e==="timer"?i.write(`${z} ${$} ${te(x)}
|
|
133
133
|
`):i.write(`${z} ${$}
|
|
134
|
-
`)),P(),m()};return{start:q,stop:(M="")=>
|
|
134
|
+
`)),P(),m()};return{start:q,stop:(M="")=>re(M,0),message:(M="")=>{$=U(M??$)},cancel:(M="")=>re(M,1),error:(M="")=>re(M,2),clear:()=>re("",0,!0),get isCancelled(){return k}}},qr={light:le("\u2500","-"),heavy:le("\u2501","="),block:le("\u2588","#")};Yi=(e,t)=>e.includes(`
|
|
135
135
|
`)?e.split(`
|
|
136
136
|
`).map(i=>t(i)).join(`
|
|
137
137
|
`):t(e),it=e=>{let t=(i,s)=>{let n=i.label??String(i.value);switch(s){case"disabled":return`${p.default.gray(qt)} ${Yi(n,p.default.gray)}${i.hint?` ${p.default.dim(`(${i.hint??"disabled"})`)}`:""}`;case"selected":return`${Yi(n,p.default.dim)}`;case"active":return`${p.default.green(hi)} ${n}${i.hint?` ${p.default.dim(`(${i.hint})`)}`:""}`;case"cancelled":return`${Yi(n,r=>p.default.strikethrough(p.default.dim(r)))}`;default:return`${p.default.dim(qt)} ${Yi(n,p.default.dim)}`}};return new Wi({options:e.options,signal:e.signal,input:e.input,output:e.output,initialValue:e.initialValue,render(){let i=e.withGuide??me.withGuide,s=`${tt(this.state)} `,n=`${hn(this.state)} `,r=at(e.output,e.message,n,s),o=`${i?`${p.default.gray(T)}
|
|
@@ -157,8 +157,8 @@ ${Mr}${s.trimStart()}`),i=3+(0,Xi.stripVTControlCharacters)(s.trimStart()).lengt
|
|
|
157
157
|
`),t.write(`${p.default.green(Mt)} ${e.title}
|
|
158
158
|
`);for(let x=0;x<n;x++)t.write(`${s}
|
|
159
159
|
`);let l=[{value:"",full:""}],f=!1,m=x=>{if(l.length===0)return;let S=0;x&&(S+=n+2);for(let O of l){let{value:A,result:W}=O,H=W?.message??A;if(H.length===0)continue;W===void 0&&O.header!==void 0&&O.header!==""&&(H+=`
|
|
160
|
-
${O.header}`);let
|
|
161
|
-
`).reduce((P,E)=>E===""?P+1:P+Math.ceil((E.length+r)/i),0);S+=
|
|
160
|
+
${O.header}`);let se=H.split(`
|
|
161
|
+
`).reduce((P,E)=>E===""?P+1:P+Math.ceil((E.length+r)/i),0);S+=se}S>0&&(S+=1,t.write(ti.erase.lines(S)))},h=(x,S,O)=>{let A=O?`${x.full}
|
|
162
162
|
${x.value}`:x.value;x.header!==void 0&&x.header!==""&&Be.message(x.header.split(`
|
|
163
163
|
`).map(p.default.bold),{output:t,secondarySymbol:s,symbol:s,spacing:0}),Be.message(A.split(`
|
|
164
164
|
`).map(p.default.dim),{output:t,secondarySymbol:s,symbol:s,spacing:S??n})},b=()=>{for(let x of l){let{header:S,value:O,full:A}=x;(S===void 0||S.length===0)&&O.length===0||h(x,void 0,o===!0&&A.length>0)}},k=(x,S,O)=>{if(m(!1),(O?.raw!==!0||!f)&&x.value!==""&&(x.value+=`
|
|
@@ -179,17 +179,17 @@ ${a}
|
|
|
179
179
|
${I.default.bold(o.direction==="out"?"\u2192":"\u2190")} ${o.from} ${I.default.dim(o.created_at.slice(0,16))}${o.labels?.length?` ${I.default.dim(`[${o.labels.join(", ")}]`)}`:""} ${I.default.dim(o.id)}`),o.text&&console.log(` ${o.text.replace(/\s+/g," ").trim().slice(0,300)}`)}async function Jd(e){let{address:t}=It(e,"Usage: domani email label --from hi@myapp.dev --message-ids m1,m2 --add billing[,urgent] [--remove old] | --set a,b"),i=rs(e.messageIds),s=rs(e.add),n=rs(e.remove),r=e.set===void 0?void 0:rs(e.set);(!i.length||!s.length&&!n.length&&r===void 0)&&u("Message IDs and labels required",{hint:"Usage: domani email label --from hi@myapp.dev --message-ids m1,m2 --add billing[,urgent] [--remove old] | --set a,b",code:"validation_error",json:e.json,fields:e.fields});let o={message_ids:i,action:"label",idempotency_key:e.idempotencyKey||(0,On.randomUUID)()};s.length&&(o.add=s),n.length&&(o.remove=n),r!==void 0&&(o.set=r);let a=await _(`/api/emails/${encodeURIComponent(t)}/messages/actions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)}),l=await a.json();if(a.ok||u(l.error||l.message,{hint:l.hint,status:a.status,json:e.json,fields:e.fields}),e.json)return y(l,e.fields);let f=l.results||[];j("Labels"),B(["Message","Result"],f.map(m=>[m.message_id,m.ok?m.changed?"updated":"unchanged":m.error?.message||"failed"]),[30,40])}async function Bd(e,t){let i=t.messageIds||(e&&!e.includes("@")?e:void 0),{address:s}=It(t,"Usage: domani email facts <message_id> --from hi@myapp.dev");i||u("Message ID required",{hint:"Usage: domani email facts <message_id> --from hi@myapp.dev",code:"validation_error",json:t.json,fields:t.fields});let n=await _(`/api/emails/${encodeURIComponent(s)}/messages/${encodeURIComponent(i)}/facts`),r=await n.json();if(n.ok||u(r.error||r.message,{hint:r.hint,status:n.status,json:t.json,fields:t.fields}),t.json)return y(r,t.fields);if(j("Facts"),!r.analysed){d("Analysed","no"),d("Reason",r.reason),ye(r.reason==="not_enabled"?"Enable the mailbox in the assistant: domani assistant set --enable --mailboxes <id>":"The analysis has not happened yet; try again in a minute.");return}d("Analysis",`${r.analysis.id} (${r.analysis.generated_at.slice(0,16)}, ${r.analysis.coverage})`),r.facts.length?B(["Subject","Predicate","Value","Basis"],r.facts.map(o=>[(o.subject||"").slice(0,28),(o.predicate||"").slice(0,28),`${o.value?.value??o.object??""}${o.value?.currency?` ${o.value.currency}`:""}`.slice(0,32),o.basis||""]),[30,30,34,18]):console.log(` ${I.default.dim("No claim recorded.")}`);for(let o of r.commitments)d("Promised",`${o.who}: ${o.what}`);for(let o of r.expectations)d("Awaited",`${o.who}: ${o.what}`)}async function Gd(e,t){let i=t.messageIds||(e&&!e.includes("@")?e:void 0),s=`Usage: domani email extract <message_id> --from hi@myapp.dev --schema '{"type":"object","properties":{"total":{"type":"number"}}}' [--instructions "amounts in EUR"] (or --schema @fields.json)`,{address:n}=It(t,s);(!i||!t.schema)&&u("Message ID and --schema required",{hint:s,code:"validation_error",json:t.json,fields:t.fields});let r;try{let l=t.schema.startsWith("@")?(0,ko.readFileSync)(t.schema.slice(1),"utf8"):t.schema;r=JSON.parse(l)}catch(l){u("Schema must be JSON (inline or @file)",{hint:l instanceof Error?l.message:String(l),code:"validation_error",json:t.json,fields:t.fields})}let o=await _(`/api/emails/${encodeURIComponent(n)}/messages/${encodeURIComponent(i)}/extract`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({schema:r,...t.instructions?{instructions:t.instructions}:{}})}),a=await o.json();if(o.ok||u(a.error||a.message,{hint:a.hint,status:o.status,json:t.json,fields:t.fields}),t.json)return y(a,t.fields);j("Extraction"),d("Confidence",String(a.confidence)),d("Cached",a.cached?"yes":"no"),d("Model",a.model);for(let[l,f]of Object.entries(a.data))d(l,f===null?I.default.dim("null"):typeof f=="object"?JSON.stringify(f):String(f));for(let l of a.evidence_quotes)console.log(` ${I.default.dim(`"${l.slice(0,120)}"`)}`)}async function Kd(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 _(`/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 y(n,e.fields);if(j("Shared Inbox Work"),!n.items.length)return console.log(` ${I.default.dim("No conversations match this queue.")}`);B(["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&&ye("This is a bounded snapshot. Increase --limit or use the API scan_limit when you need a wider queue.")}async function zd(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 _("/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 y(s,e.fields);j("Conversation Updated"),d("Status",s.status),d("Assignee",s.assignee?.label||"Unassigned"),d("Version",s.version)}async function Yd(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 _(`/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 y(i,e.fields);console.log(`${w.success} Private note added`)}async function Xd(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 _(`/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 y(i,e.fields);if(j("Private Notes"),!i.notes.length)return console.log(` ${I.default.dim("No private notes yet.")}`);B(["Author","Created","Note"],i.notes.map(s=>[s.author.label,s.created_at,s.body]),[28,24,64])}async function Zd(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 _(`/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 y(i,e.fields);if(j("Conversation Activity"),!i.activity.length)return console.log(` ${I.default.dim("No activity yet.")}`);B(["Type","Actor","Created"],i.activity.map(s=>[s.type,s.actor.label,s.created_at]),[36,32,24])}async function Qd(e){let t=await Qe(e);if(e.dryRun)return K("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 _(`/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(`${w.success} Email ${n.status==="already_configured"?"already configured":"configured"}`),e.json){y(n,e.fields);return}if(n.records?.length){c(),j(`Email DNS Records ${v.domain(t)}`);let r=n.records.map(o=>[I.default.yellow(o.type),o.name,o.value.length>40?o.value.slice(0,40)+"...":o.value,o.status==="verified"||o.status==="created"?I.default.green(o.status):I.default.yellow(o.status)]);B(["Type","Name","Value","Status"],r,[8,28,44,12])}c(),n.hint&&ye(n.hint),R("Check status:",`domani email status --domain ${t}`),c()}async function ec(e){let t=await Qe(e),i=C(!e.json);i.start(`Checking email status for ${v.domain(t)}`);let s=await _(`/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(`${w.success} Status loaded`),e.json){y(n,e.fields);return}if(j(`Email ${v.domain(t)}`),d("Enabled",n.enabled?I.default.green("yes"):I.default.dim("no")),n.enabled&&(d("Verified",n.verified?I.default.green("yes"):I.default.yellow("pending")),d("Mailboxes",String(n.mailbox_count))),c(),!n.enabled)R("Set up email:",`domani email setup --domain ${t}`),c();else if(!n.verified&&n.records?.length){console.log(` ${I.default.yellow("!")} Add these DNS records to verify:`);for(let r of n.records)console.log(` ${I.default.yellow(r.type)} ${r.name} ${I.default.dim("\u2192")} ${r.value.length>50?r.value.slice(0,50)+"...":r.value}`);c()}}async function tc(e){let t=await Qe(e);if(e.dryRun)return K("email_remove",{domain:t},e.json,e.fields);let i=C(!e.json);i.start(`Removing email from ${v.domain(t)}`);let s=await _(`/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(`${w.success} Email disabled`),e.json){y(n,e.fields);return}n.mailboxes_deleted>0&&console.log(` ${I.default.dim(`${n.mailboxes_deleted} mailbox(es) deleted.`)}`),c()}async function wo(e){let t=C(!e.json);t.start("Loading mailboxes");let i=e.domain?`?domain=${encodeURIComponent(e.domain)}`:"",s=await _(`/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(`${w.success} ${r.length} mailbox(es)`),e.json){y(n,e.fields);return}if(r.length===0){c(),console.log(` ${I.default.dim("No mailboxes.")}`),c(),R("Create one:","domani email create hello@example.com"),c();return}c(),j("Mailboxes");let o=r.map(a=>[I.default.cyan(a.address),String(a.message_count),a.webhook_url?v.url(a.webhook_url):I.default.dim("-"),I.default.dim(new Date(a.created_at).toLocaleDateString())]);B(["Address","Messages","Webhook","Created"],o,[32,10,36,14]),c()}async function ic(e){let t=await Qe(e);if(e.dryRun)return K("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 Pe({message:`Email handle for @${t}:`,placeholder:"hello"});ce(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 _("/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||[],h=[{type:"TXT",name:f?.name||"@",value:f?.value||"",note:"ownership proof"},...m];c(),console.log(" Add these records at your DNS provider:"),c();for(let S of h){let O=S.priority!==void 0?` ${I.default.dim(`priority: ${S.priority}`)}`:"",A=S.note?` ${I.default.dim(`(${S.note})`)}`:"";console.log(` ${I.default.yellow(S.type)} ${I.default.bold(S.name)}${O}${A}`),console.log(` ${I.default.dim("\u2192")} ${I.default.cyan(S.value)}`),c()}ye("DNS propagation typically takes 5\u201330 minutes. Checking automatically..."),c();let b=h.map(S=>({cells:[I.default.yellow(S.type),S.name,S.note?I.default.dim(`(${S.note})`):""],status:"pending"})),k=Lt(["Type","Name",""],b,[6,24,16]);k.start();let $=0;for(;r.status===202&&$<60;)await wt(15e3),$++,r=await _("/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 g=S=>`${S.type}:${S.name}`,x=new Map;h.slice(1).forEach((S,O)=>x.set(g(S),O+1));for(let S=0;S<60;S++){await wt(15e3);let O=await _(`/api/domains/${encodeURIComponent(t)}/email/status`),A=await O.json();if(O.ok&&A.records){for(let W of A.records)if(W.status==="verified"||W.status==="created"){let H=x.get(g(W));H!==void 0&&k.markDone(H)}}if(O.ok&&A.verified)break}k.stop(),c()}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(`${w.success} ${I.default.cyan(o.address)} created`),e.json){y(o,e.fields);return}let a=await _(`/api/domains/${encodeURIComponent(t)}/email/status`),l=await a.json();c(),a.ok&&l.verified?(R("Read inbox:",`domani email inbox ${o.address}`),R("Web inbox:",`${di}/inbox?address=${encodeURIComponent(o.address)}`)):(R("Check propagation:",`domani email status --domain ${t}`),R("Web inbox:",`${di}/inbox?address=${encodeURIComponent(o.address)}`)),c()}async function sc(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 K("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 _(`/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(`${w.success} Mailbox deleted`),e.json){y(r,e.fields);return}console.log(` ${I.default.dim(`${r.address} and all messages deleted.`)}`),c()}async function nc(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 K("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:as(os(e.to))},n=as(os(e.cc)),r=as(os(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 _(`/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 ${I.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"?`${w.success} Scheduled for ${I.default.cyan(e.sendAt||"")} to ${I.default.cyan(f)} ${I.default.dim("(trash the message before then to cancel)")}`:`${w.success} Sent to ${I.default.cyan(f)}`),e.json){y(l,e.fields);return}}function It(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 _o(e,t,i,s,n){let r=C(!i.json);r.start(s);let o=await _(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&&y(a,i.fields)}async function rc(e){let t='Usage: domani email escalate hello@example.com --message-id MSG_ID [--reason "refund over $500"] [--clear]',{address:i}=It(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 _o(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/escalate`,s,e,e.clear?"Clearing escalation":"Flagging for a human",n=>n.needs_human?`${w.success} Flagged for a human ${I.default.dim("(conversation held, email.escalated fired)")}`:`${w.success} Escalation cleared`)}async function oc(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}=It(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 _o(`/api/emails/${encodeURIComponent(i)}/messages/${encodeURIComponent(e.messageId)}/remind`,s,e,e.clear?"Clearing reminder":"Setting follow-up reminder",n=>n.remind_at?`${w.success} Reminder set for ${I.default.cyan(String(n.remind_at))} ${I.default.dim("(fires only if still unanswered)")}`:`${w.success} Reminder cleared`)}async function ac(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 _(`/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){y(s,e.fields);return}let n=s.contacts||[];if(n.length===0){console.log(I.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?` ${I.default.dim(r.name)}`:"",a=r.notes?` ${I.default.dim("-")} ${r.notes}`:"";console.log(`${I.default.cyan(r.address)}${o} ${I.default.dim(`(${r.message_count} msg${r.message_count!==1?"s":""}, last ${r.last_direction||"-"})`)}${a}`)}s.next_cursor&&console.log(I.default.dim(`More: --cursor ${s.next_cursor}`))}function xo(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 lc(e){let i=xo(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 _("/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){y(r,e.fields);return}console.log(`${w.success} Contact ${I.default.cyan(i)} saved.`)}async function dc(e){let i=xo(e,"Usage: domani email contact-remove ada@example.com"),s=await _(`/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){y(n,e.fields);return}console.log(n.deleted?`${w.success} Contact ${I.default.cyan(i)} deleted.`:I.default.dim(`No contact ${i}.`))}async function cc(e){let t='Usage: domani email tone hello@example.com [--set "lowercase, friendly, sign as Ada"] [--clear]',{address:i}=It(e,t),s=encodeURIComponent(i);if(e.set===void 0&&!e.clear){let o=await _(`/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){y({address:i,tone_notes:a.tone_notes??null},e.fields);return}console.log(a.tone_notes?a.tone_notes:I.default.dim(`No tone notes on ${i}. Set them with --set.`));return}let n=await _(`/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){y(r,e.fields);return}console.log(e.clear?`${w.success} Tone notes cleared on ${I.default.cyan(i)}.`:`${w.success} Tone notes set on ${I.default.cyan(i)}.`)}async function uc(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 _(`/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(`${w.success} ${l.length} message(s)`),y(a,e.fields);return}if(l.length===0){n.stop(`${I.default.dim("No messages")}`);return}let f=l.length>1?"s":"";n.stop(`${w.success} ${I.default.cyan(`${e.slug}@${t}`)} ${I.default.dim("\xB7 "+l.length+" message"+f)}`);for(let m of l){let h=m.direction==="in"?I.default.green("in "):I.default.dim("out"),b=m.direction==="in"?m.from:m.to,k=m.subject||"(no subject)",$=I.default.dim(new Date(m.created_at).toLocaleString()),g=k;if(m.text){let x=m.text.replace(/\s+/g," ").trim(),S=x.length>60?x.slice(0,60)+"\u2026":x;g=`${k} ${I.default.dim("- "+S)}`}console.log(` ${h} ${b.padEnd(30)} ${g} ${$}`)}a.next_cursor&&console.log(` ${I.default.dim("\u2026 more available, use --limit to paginate")}`)}async function mc(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 _(`/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 y(n,e.fields);j(`Folders for ${e.slug}@${t}`);for(let r of n.folders||[])d(r.id,`${r.total} total, ${r.unread} unread`);for(let r of n.views||[])d(r.id,`${r.total} total, ${r.unread} unread`)}async function fc(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,On.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 K("email_messages_action",{address:`${t.slug}@${i}`,...n},t.json,t.fields);let r=encodeURIComponent(`${t.slug}@${i}`),o=await _(`/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 y(a,t.fields);let l=(a.results||[]).filter(m=>m.ok).length,f=(a.results||[]).length-l;console.log(`${w.success} ${l} updated${f?I.default.yellow(`, ${f} failed`):""}`),a.operation_id&&(d("Operation",a.operation_id),d("Idempotency key",a.idempotency_key),a.idempotent_replay&&d("Receipt","replayed (no duplicate mutation)"))}async function pc(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=Vt(e)}catch(a){u(a instanceof Error?a.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})}let r;if(e.events!==void 0&&(r=e.events.split(",").map(a=>a.trim()).filter(Boolean),r.length===0&&u("--events needs at least one event",{hint:"Example: --events email.received,email.bounced,email.delivered",code:"validation_error",json:e.json,fields:e.fields}),e.url||u("--url is required when changing webhook events",{hint:"Pass the existing webhook URL together with --events.",code:"validation_error",json:e.json,fields:e.fields})),!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 K("email_webhook",{address:i,webhook_url:e.url||null,...r!==void 0?{events:r}:{},...n!==void 0?{header_names:Wt(n)}:{}},e.json,e.fields);let o=C(!e.json);if(e.url){o.start(`Setting webhook for ${i}`);let a=await _(`/api/emails/${s}/webhook`,{method:"PUT",body:JSON.stringify({url:e.url,...n!==void 0?{headers:n}:{},...r!==void 0?{events:r}:{}})}),l=await a.json();if(a.ok||(o.stop("Failed"),u(l.error||l.message,{hint:l.hint,status:a.status,json:e.json,fields:e.fields})),o.stop(`${w.success} Webhook set`),e.json){y(l,e.fields);return}j(`Mailbox ${l.address}`),d("Webhook",v.url(l.webhook_url)),d("Events",l.events?.join(", ")||I.default.dim("email.received")),d("Auth headers",l.header_names?.join(", ")||I.default.dim("none")),d("Signing secret",I.default.dim(l.signing_secret)),c()}else{o.start(`Removing webhook for ${i}`);let a=await _(`/api/emails/${s}/webhook`,{method:"DELETE"}),l=await a.json();if(a.ok||(o.stop("Failed"),u(l.error||l.message,{hint:l.hint,status:a.status,json:e.json,fields:e.fields})),o.stop(`${w.success} Webhook removed`),e.json){y(l,e.fields);return}j(`Mailbox ${l.address}`),d("Webhook",I.default.dim("none")),c()}}async function hc(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 K("email_webhook_test",{address:i},e.json,e.fields);let s=C(!e.json);s.start(`Testing webhook for ${i}`);let n=await _(`/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(`${w.success} Test delivered`),e.json)return y(r,e.fields);j(`Mailbox ${i}`),d("Delivery",I.default.green("successful")),typeof r.status=="number"&&d("Endpoint",`HTTP ${r.status}`),c()}async function gc(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 K("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 _(`/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(`${w.success} Forward ${s?"set":"removed"}`),e.json){y(o,e.fields);return}j(`Mailbox ${o.address}`),d("Forward to",o.forward_to?I.default.cyan(o.forward_to):I.default.dim("none")),c()}async function vo(e,t,i){let s=C(!t);s.start(`Checking email health for ${v.domain(e)}`);let n=await _(`/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){y(r,i);return}if(j(`Email Health ${v.domain(r.domain)}`),r.provider?d("Provider",I.default.cyan(In(r.provider))):d("Provider",I.default.dim("unknown")),r.mx.configured?d("MX",`${w.success} ${I.default.green("propagated")} ${I.default.dim(`(${r.mx.records.length} record${r.mx.records.length!==1?"s":""})`)}`):d("MX",`${w.error} ${I.default.red("not configured")}`),r.spf.configured?d("SPF",`${w.success} ${I.default.green(r.spf.value)}`):d("SPF",`${w.error} ${I.default.red("missing")}`),r.dmarc.configured){let o=r.dmarc.value.length>50?r.dmarc.value.slice(0,50)+"...":r.dmarc.value;d("DMARC",`${w.success} ${I.default.green(o)}`)}else d("DMARC",`${w.error} ${I.default.red("missing")}`);r.dkim.configured?d("DKIM",`${w.success} ${I.default.green("found")} ${I.default.dim(`(${r.dkim.selectors.join(", ")})`)}`):d("DKIM",`${w.warning} ${I.default.yellow("not found")}`),c(),r.mx.configured?(!r.spf.configured||!r.dmarc.configured)&&(ye("SPF and DMARC protect against email spoofing. Re-run email setup to add them."),c()):(R("Set up email:",`domani email ${e} google`),c())}async function $o(e,t,i,s){return t?So(e,t,i,s):jo(e,i,s)}async function jo(e,t,i){let s=C(!t);s.start("Loading email providers");let n=await _(`/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 it({message:"Choose an email provider",options:o.map(l=>({value:l.name,label:In(l.name)}))});return ce(a)&&process.exit(0),So(e,a,t,i)}async function So(e,t,i,s){if(i){let f=await _(`/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}),y(m,s);return}let n=await _(`/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=In(a);if(j(`Email ${v.domain(e)}`),d("Provider",I.default.cyan(l)),o.length){c(),console.log(` ${I.default.bold("DNS Records")}`);let f=[8,24,40],m=Lt(["Type","Name","Value"],o.map(S=>({cells:Nd(S),status:"pending"})),f);m.start();let h=await _(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),b=await h.json();h.ok||(m.stop(),c(),u(b.error||b.message,{hint:b.hint,status:h.status,json:i,fields:s}));let k=b.records||[];for(let S=0;S<o.length;S++)k.find(A=>A.record.type===o[S].type&&A.record.name===o[S].name&&A.record.value===o[S].value)?.status==="already_set"||await wt(60),m.markDone(S);await wt(80),m.stop();let $=k.filter(S=>S.status==="created"||S.status==="updated").length,g=k.filter(S=>S.status==="already_set").length,x;g===k.length?x=`All ${g} records already set`:g>0?x=`${$} created, ${g} already set`:x=`${$} DNS records set`,c(),console.log(` ${w.success} ${I.default.green(`Email configured - ${x}`)}`)}else{let f=C(!0);f.start("Setting DNS records");let m=await _(`/api/domains/${encodeURIComponent(e)}/connect`,{method:"POST",body:JSON.stringify({target:t})}),h=await m.json();m.ok||(f.stop("Failed"),u(h.error||h.message,{hint:h.hint,status:m.status,json:i,fields:s})),f.stop(`${w.success} Email configured via ${I.default.cyan(l)}`)}c(),R("Verify propagation:",`domani email ${e} --check`),c()}var I,On,ko,Pd,Dd,An=Te(()=>{"use strict";G();ci();I=D(F(),1);Ue();L();be();Ze();On=require("node:crypto"),ko=require("node:fs");ns();Pd=["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","search","threads","thread","label","facts","extract"],Dd={"google-workspace":"Google Workspace",fastmail:"Fastmail",proton:"Proton Mail"}});var Oo={};zt(Oo,{dns:()=>En});async function En(e,t,i,s,n,r){e||(e=await he()),Y(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 h=await _(`/api/domains/${encodeURIComponent(e)}/dns`),b=await h.json();if(h.ok||(m.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:h.status,json:o,fields:r?.fields})),m.stop(`${b.records.length} record(s)`),o){y(b,r?.fields);return}if(b.records.length===0){c(),console.log(` ${Oe.default.dim(`No DNS records for ${e}`)}`),c(),R("Auto-configure DNS:",`domani connect ${e}`),c();return}let k=[8,24,40,8];j(`DNS ${v.domain(e)}`,k.reduce((g,x)=>g+x,0)+k.length-1);let $=b.records.map(g=>{let x=g.priority?Oe.default.dim(` pri=${g.priority}`):"";return[Oe.default.yellow(g.type),g.name,Oe.default.cyan(g.value)+x,Oe.default.dim(String(g.ttl))]});B(["Type","Name","Value","TTL"],$,k),c();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 K("dns_set",{domain:e,record:{type:a.toUpperCase(),name:l,value:f,ttl:3600}},o,r?.fields);let m=C(!o);m.start(`Setting ${Oe.default.yellow(a.toUpperCase())} record`);let h=await _(`/api/domains/${encodeURIComponent(e)}/dns`),b=await h.json(),$=(h.ok?b.records:[]).filter(S=>!(S.type===a.toUpperCase()&&S.name===l));$.push({type:a.toUpperCase(),name:l,value:f,ttl:3600});let g=await _(`/api/domains/${encodeURIComponent(e)}/dns`,{method:"PUT",body:JSON.stringify({records:$})}),x=await g.json();g.ok||(m.stop("Failed"),u(x.error||x.message,{hint:x.hint,status:g.status,json:o,fields:r?.fields})),m.stop(`${w.success} ${Oe.default.yellow(a.toUpperCase())} ${l} ${w.arrow} ${Oe.default.cyan(f)}`),o?y(x,r?.fields):(c(),R("Check propagation:",`domani status ${e}`),c());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 K("dns_delete",{domain:e,record:{type:a.toUpperCase(),name:l}},o,r?.fields);let m=C(!o);m.start(`Deleting ${Oe.default.yellow(a.toUpperCase())} ${l}`);let h=await _(`/api/domains/${encodeURIComponent(e)}/dns?type=${encodeURIComponent(a.toUpperCase())}&name=${encodeURIComponent(l)}`,{method:"DELETE"}),b=await h.json();h.ok||(m.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:h.status,json:o,fields:r?.fields})),m.stop(`${w.success} Deleted ${Oe.default.yellow(a.toUpperCase())} ${l}`),o?y(b,r?.fields):(c(),R("Check propagation:",`domani status ${e}`),c());return}if(t==="snapshot"){if(r?.dryRun)return K("dns_snapshot",{domain:e},o,r?.fields);let m=C(!o);m.start(`Capturing DNS snapshot for ${v.domain(e)}`);let h=await _(`/api/domains/${encodeURIComponent(e)}/dns/snapshot`,{method:"POST"}),b=await h.json();h.ok||(m.stop("Failed"),u(b.error||b.message,{hint:b.hint,status:h.status,json:o,fields:r?.fields}));let k=b.records?.length??0;if(m.stop(`${w.success} Captured ${k} record(s)`),o){y(b,r?.fields);return}let $=`${e}.dns.json`,g=(0,Tn.resolve)(process.cwd(),$);(0,ls.writeFileSync)(g,JSON.stringify(b,null,2)+`
|
|
180
180
|
`),j("DNS Snapshot"),d("Domain",v.domain(b.domain)),d("Records",String(k)),d("Subdomains",String(b.subdomains?.length??0)),d("Sources",(b.sources||[]).join(", ")||"none"),d("Captured",b.capturedAt||b.captured_at||"now"),d("Saved to",Oe.default.cyan($)),c(),R("Restore from this snapshot:",`domani dns ${e} restore --file ${$}`),c();return}if(t==="restore"){if(r?.dryRun)return K("dns_restore",{domain:e,source:r?.file||"server_backup"},o,r?.fields);let m=C(!o),h;if(r?.file){let $=(0,Tn.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 g=(0,ls.readFileSync)($,"utf-8"),x=JSON.parse(g);h=JSON.stringify({snapshot:x}),m.start(`Restoring DNS for ${v.domain(e)} from ${Oe.default.cyan(r.file)}`)}catch(g){u(`Failed to read snapshot file: ${g instanceof Error?g.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 b=await _(`/api/domains/${encodeURIComponent(e)}/dns/restore`,{method:"POST",...h?{body:h}:{}}),k=await b.json();if(b.ok||(m.stop("Failed"),u(k.error||k.message,{hint:k.hint,status:b.status,json:o,fields:r?.fields})),m.stop(`${w.success} Restored DNS`),o){y(k,r?.fields);return}if(j("DNS Restored"),d("Domain",v.domain(k.domain)),d("Applied",Oe.default.green(String(k.applied??0))),d("Skipped",Oe.default.dim(String(k.skipped??0))),k.errors?.length>0){d("Errors",Oe.default.red(String(k.errors.length)));for(let $ of k.errors)console.log(` ${Oe.default.red("\u2022")} ${$}`)}c(),R("Verify DNS records:",`domani dns ${e}`),c();return}u(`Unknown action: ${t}`,{hint:"Use 'get', 'set', 'delete', 'snapshot', or 'restore'.",code:"validation_error",json:o,fields:r?.fields})}var Oe,ls,Tn,Pn=Te(()=>{"use strict";G();Oe=D(F(),1);L();be();Ze();ls=require("node:fs"),Tn=require("node:path")});var Io={};zt(Io,{status:()=>Dn});function yc(e){return[st.default.yellow(e.type),e.name,st.default.cyan(e.value)+(e.priority?st.default.dim(` pri=${e.priority}`):"")]}function bc(e){if(j(`Status ${v.domain(e.domain)}`),e.expires){let t=new Date(e.expires).toLocaleDateString(),i=e.days_until_expiry,s=i!=null&&i<30?st.default.red:i!=null&&i<90?st.default.yellow:st.default.green;d("Expires",`${t} ${st.default.dim("(")}${s(`${i} days`)}${st.default.dim(")")}`)}}async function Dn(e,t){if(e||(e=await he()),Y(e,t),t.json){let h=await _(`/api/domains/${encodeURIComponent(e)}/status`),b=await h.json();h.ok||u(b.error||b.message,{hint:b.hint,status:h.status,json:t.json,fields:t.fields}),y(b,t.fields);return}let i=C(!0);i.start(`Checking ${v.domain(e)}`);let s;try{s=await _(`/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 h=await s.json();u(h.error||h.message,{hint:h.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 h of n){o+=r.decode(h,{stream:!0});let b=o.split(`
|
|
181
181
|
`);o=b.pop()??"";for(let k of b)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,bc($)),m==="records")if(l=$,l.length>0){c(),console.log(` ${st.default.bold("DNS Records")}`);let g=[8,10,34];a=Lt(["Type","Name","Value"],l.map(x=>({cells:yc(x),status:"pending"})),g),a.start()}else c(),d("DNS",st.default.dim("no records")),R("Auto-configure DNS:",`domani connect ${e}`);if(m==="propagation"&&a){let{index:g,propagated:x}=$,S=x?w.success:`${w.warning}`;a.markDone(g,S)}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"),c()}var st,Nn=Te(()=>{"use strict";G();st=D(F(),1);L();be();Ze()});var wi={};zt(wi,{buy:()=>qn});async function Un(e){let t=await it({message:`What's next for ${Me.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(ce(t)||t==="done"){c();return}if(c(),t==="connect"){let{connect:i}=await Promise.resolve().then(()=>(Cn(),bo));await i(e,void 0,{})}else if(t==="email"){let i=await Pe({message:`Mailbox name for ${Me.default.cyan(e)}`,placeholder:"e.g. hey, hello, contact"});if(ce(i)||!i){c();return}c();let{email:s}=await Promise.resolve().then(()=>(An(),Co));await s("create",void 0,{domain:e,slug:i})}else if(t==="dns"){let{dns:i}=await Promise.resolve().then(()=>(Pn(),Oo));await i(e)}else if(t==="status"){let{status:i}=await Promise.resolve().then(()=>(Nn(),Io));await i(e,{})}}async function wc(e,t){Y(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 h=await _(`/api/domains/search?q=${encodeURIComponent(e)}`);i=await h.json(),h.ok||(m.stop("Search failed"),u(i.error,{hint:i.hint,status:h.status,json:t.json,fields:t.fields})),i.available||(m.stop(`${w.error} ${v.domain(e)} is not available`),u(`${e} is not available`,{code:"not_available",json:t.json,fields:t.fields})),m.stop(`${w.success} ${v.domain(e)} ${w.dot} available ${w.dot} ${v.price(i.price)}/yr`)}if(t.dryRun)return K("buy",{domain:e,available:!0,price:i.price,currency:i.currency||"USD"},t.json,t.fields);if(!Ft(t)){let m=await Xe({message:`Purchase ${Me.default.bold(e)} for ${v.price(i.price)}/yr?`});if(!m||typeof m=="symbol"){console.log(` ${Me.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start("Purchasing");let n=await _("/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 h=a.split(`
|
|
182
|
-
`);a=h.pop()??"";for(let b of h)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 ${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?Me.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(s.stop(`${w.success} ${v.domain(r.domain)} is yours!${f}`),t.json){y(r,t.fields);return}Ce?await Un(r.domain):(R("Connect to a service:",`domani connect ${r.domain}`),R("Set up email:",`domani email setup ${r.domain}`),R("Configure DNS:",`domani dns ${r.domain}`),c())}async function vc(e,t){go(e,t);let i=!!t.json,s=C(!i);s.start(`Checking ${e.length} domains`);let n=await Promise.all(e.map(async g=>{try{let x=await _(`/api/domains/search?q=${encodeURIComponent(g)}`),S=await x.json();return{domain:g,available:x.ok&&S.available,price:S.price}}catch{return{domain:g,available:!1,price:void 0}}})),r=n.filter(g=>g.available),o=n.filter(g=>!g.available);r.length===0&&(s.stop(`${w.error} None of the ${e.length} domains are available`),process.exit(1));let a=r.reduce((g,x)=>g+(x.price||0),0);if(s.stop(`${w.success} ${r.length}/${e.length} available ${w.dot} ${v.price(a.toFixed(2))} total`),o.length>0)for(let g of o)console.log(` ${w.error} ${v.domain(g.domain)} ${Me.default.dim("not available")}`);if(t.dryRun)return K("buy_bulk",{domains:r.map(g=>({domain:g.domain,price:g.price})),unavailable:o.map(g=>g.domain),total_price:parseFloat(a.toFixed(2))},t.json,t.fields);if(!Ft(t)){let g=await Xe({message:`Purchase ${Me.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${v.price(a.toFixed(2))}?`});if(!g||typeof g=="symbol"){console.log(` ${Me.default.dim("Cancelled.")}`);return}}c();let l=r.map(g=>({cells:[v.domain(g.domain),g.price?`${v.price(g.price.toFixed(2))}/yr`:""],status:"pending"})),f=Lt(["Domain","Price"],l,[30,12],!i);f.start();let h=await(await _("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(g=>g.domain)})})).json(),b=new Set((h.results||[]).map(g=>g.domain));for(let g=0;g<r.length;g++){let x=r[g].domain.toLowerCase().trim();b.has(x)?f.markDone(g,w.success):f.markDone(g,w.error)}if(f.stop(),i){y(h,t.fields);return}c();let k=h.summary?.succeeded??0,$=h.summary?.failed??0;if(k>0&&console.log(` ${w.success} ${Me.default.green(`${k} domain${k>1?"s":""} registered`)}`),$>0){console.log(` ${w.error} ${Me.default.red(`${$} failed`)}`);for(let g of h.errors||[])console.log(` ${Me.default.dim("\u2500")} ${v.domain(g.domain)}: ${Me.default.dim(g.error)}${g.hint?` ${Me.default.dim(`(${g.hint})`)}`:""}`)}if(c(),k>0&&Ce){let g=(h.results||[]).filter(x=>x.success).map(x=>x.domain);if(g.length===1)await Un(g[0]);else{let x=await it({message:"Set up one of your new domains?",options:[...g.map(S=>({value:S,label:Me.default.cyan(S)})),{value:"done",label:"Done"}]});!ce(x)&&x!=="done"?(c(),await Un(x)):c()}}else k>0&&(R("Connect to a service:","domani connect <domain>"),R("Set up email:","domani email setup <domain>"),c())}async function qn(e,t){let i=e.filter(Boolean);if(i.length===0){Ce||u("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:t.json});let s=await Pe({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(ce(s)||!s)&&process.exit(0),i=s.split(/\s+/).filter(Boolean)}return i.length===1?wc(i[0],t):vc(i,t)}var Me,ri=Te(()=>{"use strict";G();Ue();Me=D(F(),1);L();be()});var rr=D(nr(),1),{program:Du,createCommand:Nu,createArgument:Uu,createOption:qu,CommanderError:Mu,InvalidArgumentError:Fu,InvalidOptionArgumentError:Lu,Command:or,Argument:Vu,Option:Wu,Help:Hu}=rr.default;var mt=D(F(),1);yt();_n();L();ci();yt();var lt=D(F(),1);L();var vd=new Set(["cli","mcp","plugin","skill","api"]);function $d(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(!vd.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 lo(e){let t=We(),i=C(!e.json),s;try{s=$d(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=gt(),a=He();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 ${lt.default.bold($.email)}`),e.json&&y({status:"already_logged_in",email:$.email});return}}catch{}i.stop("Session expired, re-authenticating"),c()}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:h}=await l.json();if(i.stop("Auth code received"),e.json){y({status:"awaiting_approval",code:f,auth_url:m,expires_in:h});return}c(),console.log(` ${lt.default.dim("Verification code:")} ${lt.default.bold(lt.default.cyan(f))}`),e.open!==!1?(console.log(` ${lt.default.dim("Opening browser")} ${w.arrow} ${v.url(m)}`),qe(m)):console.log(` ${lt.default.dim("Open this URL to approve:")} ${v.url(m)}`),c(),i.start("Waiting for approval");let b=120;for(let k=0;k<b;k++){await new Promise(x=>setTimeout(x,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 g=await $.json();if(g.status==="complete"){ei({...gt(),token:g.token,email:g.email,api_url:t}),i.stop(`Logged in as ${lt.default.bold(g.email)}`),c(),console.log(` ${lt.default.bold("Get one real result:")}`),R("1. Create your free inbox:","domani email create YOUR_HANDLE@domani.run"),R("2. Connect your webhook:","domani email webhook YOUR_HANDLE@domani.run --url https://YOUR_AGENT/webhook"),R("3. Prove delivery:","domani email webhook-test YOUR_HANDLE@domani.run"),console.log(` ${lt.default.dim("A custom domain can wait until this loop works.")}`),c();return}g.error&&(i.stop("Login failed"),u(g.error||g.message,{hint:g.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"})}yt();var xn=D(F(),1);L();async function co(e){let t=gt();if(!t.token){e.json?y({status:"not_logged_in"}):console.log(` ${xn.default.dim("Not logged in.")}`);return}let{api_url:i}=t;wr(),i&&ei({api_url:i}),e.json?y({status:"logged_out",email:t.email||null}):console.log(` ${w.success} Logged out${t.email?` ${xn.default.dim(`(${t.email})`)}`:""}`)}G();var yi=D(F(),1);L();async function mo(e){let[t,i]=await Promise.all([_("/api/me"),_("/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){y({...s,activation:n},e.fields);return}if(j("Account"),d("Email",yi.default.bold(s.email)),d("Payment",s.has_payment_method?`${w.success} ${yi.default.green("active")}`:`${w.error} ${yi.default.dim("none")}`),d("Domains",String(s.domain_count)),d("API tokens",String(s.token_count)),d("Referral code",s.referral_code||yi.default.dim("-")),d("Created",new Date(s.created_at).toLocaleDateString()),n){d("Activation",n.status);let r=n.recommended_actions?.[0];r&&d("Next action",r.label)}c()}G();Ue();var N=D(F(),1);L();be();var Ge=10,oi=200,ds=["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"],cs=null;async function Ro(){if(cs)return cs;try{let e=await ve("/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(ds),n=new Set(i),r=[...ds.filter(o=>n.has(o)),...i.filter(o=>!s.has(o))];return cs=r,r}}}catch{}return cs=ds,ds}async function $c(e,t,i,s,n){let r=[],o=[],a=Ge,l=0,f=!0,m=0,h=0,b=!1,k=!1,$=null,g="",x=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],S=0,O=setInterval(()=>{k||!f||(S=(S+1)%x.length,E())},80);function A(){m>0&&(process.stdout.write(`\x1B[${m}A\x1B[0J`),m=0)}function W(){if(f)return[];let M=Ge+h*Ge;return r.length>a||s&&M<n.length?["more","new","skip"]:["new","skip"]}function H(){return r.slice(0,a)}function ie(){let M=W();return Math.max(0,H().length+M.length-1)}let P=6;function E(){A();let M=[],Z=H(),te=!f&&Z.length===0&&o.length>0,z=te?o.slice(0,P):Z,Ae=z.reduce((ue,de)=>Math.max(ue,de.domain.length),0),ze=W();for(let ue=0;ue<z.length;ue++){let de=z[ue];if(te)M.push(`${N.default.dim("\u2502")} ${N.default.dim("\u2715")} ${N.default.dim(de.domain.padEnd(Ae))} ${N.default.dim("taken")}`);else{let xe=ue===l,ft=xe?N.default.green("\u25CF"):N.default.dim("\u25CB"),se=de.domain.padEnd(Ae),rt=xe?N.default.bold(N.default.cyan(se)):se,xt=de.for_sale?N.default.cyan(`$${de.for_sale.price} (for sale)`):N.default.dim(`$${de.price}/yr`);M.push(`${N.default.dim("\u2502")} ${ft} ${rt} ${xt}`)}}if(te&&o.length>P&&M.push(`${N.default.dim("\u2502")} ${N.default.dim(`\u2026 and ${o.length-P} more taken`)}`),f){let ue=g?N.default.dim(`checking ${g}\u2026`):N.default.dim("searching\u2026");M.push(`${N.default.dim("\u2502")} ${N.default.cyan(x[S])} ${ue}`)}else{let ue=Ge+h*Ge;s&&ue>=n.length&&M.push(`${N.default.dim("\u2502")} ${N.default.dim(`All ${Math.min(ue,n.length)} TLDs searched`)}`);for(let xe=0;xe<ze.length;xe++){let rt=H().length+xe===l?N.default.green("\u25CF"):N.default.dim("\u25CB"),xt=ze[xe]==="more"?N.default.dim("More \u2192"):ze[xe]==="new"?N.default.dim("New search \u2192"):N.default.dim("Skip");M.push(`${N.default.dim("\u2502")} ${rt} ${xt}`)}M.push(N.default.dim("\u2514"))}process.stdout.write(M.join(`
|
|
182
|
+
`);a=h.pop()??"";for(let b of h)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 ${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?Me.default.dim(` \xB7 expires ${new Date(r.expires).toLocaleDateString()}`):"";if(s.stop(`${w.success} ${v.domain(r.domain)} is yours!${f}`),t.json){y(r,t.fields);return}Ce?await Un(r.domain):(R("Connect to a service:",`domani connect ${r.domain}`),R("Set up email:",`domani email setup ${r.domain}`),R("Configure DNS:",`domani dns ${r.domain}`),c())}async function vc(e,t){go(e,t);let i=!!t.json,s=C(!i);s.start(`Checking ${e.length} domains`);let n=await Promise.all(e.map(async g=>{try{let x=await _(`/api/domains/search?q=${encodeURIComponent(g)}`),S=await x.json();return{domain:g,available:x.ok&&S.available,price:S.price}}catch{return{domain:g,available:!1,price:void 0}}})),r=n.filter(g=>g.available),o=n.filter(g=>!g.available);r.length===0&&(s.stop(`${w.error} None of the ${e.length} domains are available`),process.exit(1));let a=r.reduce((g,x)=>g+(x.price||0),0);if(s.stop(`${w.success} ${r.length}/${e.length} available ${w.dot} ${v.price(a.toFixed(2))} total`),o.length>0)for(let g of o)console.log(` ${w.error} ${v.domain(g.domain)} ${Me.default.dim("not available")}`);if(t.dryRun)return K("buy_bulk",{domains:r.map(g=>({domain:g.domain,price:g.price})),unavailable:o.map(g=>g.domain),total_price:parseFloat(a.toFixed(2))},t.json,t.fields);if(!Ft(t)){let g=await Xe({message:`Purchase ${Me.default.bold(String(r.length))} domain${r.length>1?"s":""} for ${v.price(a.toFixed(2))}?`});if(!g||typeof g=="symbol"){console.log(` ${Me.default.dim("Cancelled.")}`);return}}c();let l=r.map(g=>({cells:[v.domain(g.domain),g.price?`${v.price(g.price.toFixed(2))}/yr`:""],status:"pending"})),f=Lt(["Domain","Price"],l,[30,12],!i);f.start();let h=await(await _("/api/domains/buy",{method:"POST",body:JSON.stringify({domains:r.map(g=>g.domain)})})).json(),b=new Set((h.results||[]).map(g=>g.domain));for(let g=0;g<r.length;g++){let x=r[g].domain.toLowerCase().trim();b.has(x)?f.markDone(g,w.success):f.markDone(g,w.error)}if(f.stop(),i){y(h,t.fields);return}c();let k=h.summary?.succeeded??0,$=h.summary?.failed??0;if(k>0&&console.log(` ${w.success} ${Me.default.green(`${k} domain${k>1?"s":""} registered`)}`),$>0){console.log(` ${w.error} ${Me.default.red(`${$} failed`)}`);for(let g of h.errors||[])console.log(` ${Me.default.dim("\u2500")} ${v.domain(g.domain)}: ${Me.default.dim(g.error)}${g.hint?` ${Me.default.dim(`(${g.hint})`)}`:""}`)}if(c(),k>0&&Ce){let g=(h.results||[]).filter(x=>x.success).map(x=>x.domain);if(g.length===1)await Un(g[0]);else{let x=await it({message:"Set up one of your new domains?",options:[...g.map(S=>({value:S,label:Me.default.cyan(S)})),{value:"done",label:"Done"}]});!ce(x)&&x!=="done"?(c(),await Un(x)):c()}}else k>0&&(R("Connect to a service:","domani connect <domain>"),R("Set up email:","domani email setup <domain>"),c())}async function qn(e,t){let i=e.filter(Boolean);if(i.length===0){Ce||u("Missing required argument: domain(s)",{hint:"Usage: domani buy <domain> [domain2 ...]",code:"missing_argument",json:t.json});let s=await Pe({message:"Domain to purchase",placeholder:"e.g. myapp.dev (space-separated for multiple)"});(ce(s)||!s)&&process.exit(0),i=s.split(/\s+/).filter(Boolean)}return i.length===1?wc(i[0],t):vc(i,t)}var Me,ri=Te(()=>{"use strict";G();Ue();Me=D(F(),1);L();be()});var rr=D(nr(),1),{program:Nu,createCommand:Uu,createArgument:qu,createOption:Mu,CommanderError:Fu,InvalidArgumentError:Lu,InvalidOptionArgumentError:Vu,Command:or,Argument:Wu,Option:Hu,Help:Ju}=rr.default;var mt=D(F(),1);yt();_n();L();ci();yt();var lt=D(F(),1);L();var vd=new Set(["cli","mcp","plugin","skill","api"]);function $d(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(!vd.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 lo(e){let t=We(),i=C(!e.json),s;try{s=$d(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=gt(),a=He();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 ${lt.default.bold($.email)}`),e.json&&y({status:"already_logged_in",email:$.email});return}}catch{}i.stop("Session expired, re-authenticating"),c()}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:h}=await l.json();if(i.stop("Auth code received"),e.json){y({status:"awaiting_approval",code:f,auth_url:m,expires_in:h});return}c(),console.log(` ${lt.default.dim("Verification code:")} ${lt.default.bold(lt.default.cyan(f))}`),e.open!==!1?(console.log(` ${lt.default.dim("Opening browser")} ${w.arrow} ${v.url(m)}`),qe(m)):console.log(` ${lt.default.dim("Open this URL to approve:")} ${v.url(m)}`),c(),i.start("Waiting for approval");let b=120;for(let k=0;k<b;k++){await new Promise(x=>setTimeout(x,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 g=await $.json();if(g.status==="complete"){ei({...gt(),token:g.token,email:g.email,api_url:t}),i.stop(`Logged in as ${lt.default.bold(g.email)}`),c(),console.log(` ${lt.default.bold("Get one real result:")}`),R("1. Create your free inbox:","domani email create YOUR_HANDLE@domani.run"),R("2. Connect your webhook:","domani email webhook YOUR_HANDLE@domani.run --url https://YOUR_AGENT/webhook"),R("3. Prove delivery:","domani email webhook-test YOUR_HANDLE@domani.run"),console.log(` ${lt.default.dim("A custom domain can wait until this loop works.")}`),c();return}g.error&&(i.stop("Login failed"),u(g.error||g.message,{hint:g.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"})}yt();var xn=D(F(),1);L();async function co(e){let t=gt();if(!t.token){e.json?y({status:"not_logged_in"}):console.log(` ${xn.default.dim("Not logged in.")}`);return}let{api_url:i}=t;wr(),i&&ei({api_url:i}),e.json?y({status:"logged_out",email:t.email||null}):console.log(` ${w.success} Logged out${t.email?` ${xn.default.dim(`(${t.email})`)}`:""}`)}G();var yi=D(F(),1);L();async function mo(e){let[t,i]=await Promise.all([_("/api/me"),_("/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){y({...s,activation:n},e.fields);return}if(j("Account"),d("Email",yi.default.bold(s.email)),d("Payment",s.has_payment_method?`${w.success} ${yi.default.green("active")}`:`${w.error} ${yi.default.dim("none")}`),d("Domains",String(s.domain_count)),d("API tokens",String(s.token_count)),d("Referral code",s.referral_code||yi.default.dim("-")),d("Created",new Date(s.created_at).toLocaleDateString()),n){d("Activation",n.status);let r=n.recommended_actions?.[0];r&&d("Next action",r.label)}c()}G();Ue();var N=D(F(),1);L();be();var Ge=10,oi=200,ds=["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"],cs=null;async function Ro(){if(cs)return cs;try{let e=await ve("/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(ds),n=new Set(i),r=[...ds.filter(o=>n.has(o)),...i.filter(o=>!s.has(o))];return cs=r,r}}}catch{}return cs=ds,ds}async function $c(e,t,i,s,n){let r=[],o=[],a=Ge,l=0,f=!0,m=0,h=0,b=!1,k=!1,$=null,g="",x=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"],S=0,O=setInterval(()=>{k||!f||(S=(S+1)%x.length,E())},80);function A(){m>0&&(process.stdout.write(`\x1B[${m}A\x1B[0J`),m=0)}function W(){if(f)return[];let M=Ge+h*Ge;return r.length>a||s&&M<n.length?["more","new","skip"]:["new","skip"]}function H(){return r.slice(0,a)}function se(){let M=W();return Math.max(0,H().length+M.length-1)}let P=6;function E(){A();let M=[],Z=H(),ie=!f&&Z.length===0&&o.length>0,z=ie?o.slice(0,P):Z,Ae=z.reduce((ue,de)=>Math.max(ue,de.domain.length),0),ze=W();for(let ue=0;ue<z.length;ue++){let de=z[ue];if(ie)M.push(`${N.default.dim("\u2502")} ${N.default.dim("\u2715")} ${N.default.dim(de.domain.padEnd(Ae))} ${N.default.dim("taken")}`);else{let xe=ue===l,ft=xe?N.default.green("\u25CF"):N.default.dim("\u25CB"),ne=de.domain.padEnd(Ae),rt=xe?N.default.bold(N.default.cyan(ne)):ne,xt=de.for_sale?N.default.cyan(`$${de.for_sale.price} (for sale)`):N.default.dim(`$${de.price}/yr`);M.push(`${N.default.dim("\u2502")} ${ft} ${rt} ${xt}`)}}if(ie&&o.length>P&&M.push(`${N.default.dim("\u2502")} ${N.default.dim(`\u2026 and ${o.length-P} more taken`)}`),f){let ue=g?N.default.dim(`checking ${g}\u2026`):N.default.dim("searching\u2026");M.push(`${N.default.dim("\u2502")} ${N.default.cyan(x[S])} ${ue}`)}else{let ue=Ge+h*Ge;s&&ue>=n.length&&M.push(`${N.default.dim("\u2502")} ${N.default.dim(`All ${Math.min(ue,n.length)} TLDs searched`)}`);for(let xe=0;xe<ze.length;xe++){let rt=H().length+xe===l?N.default.green("\u25CF"):N.default.dim("\u25CB"),xt=ze[xe]==="more"?N.default.dim("More \u2192"):ze[xe]==="new"?N.default.dim("New search \u2192"):N.default.dim("Skip");M.push(`${N.default.dim("\u2502")} ${rt} ${xt}`)}M.push(N.default.dim("\u2514"))}process.stdout.write(M.join(`
|
|
183
183
|
`)+`
|
|
184
184
|
`),m=M.length}process.stdout.write(`${N.default.cyan("\u25C6")} Register a domain?
|
|
185
|
-
`),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let U=M=>{let Z=M.toString();if(Z==="\x1B[A")l=Math.max(0,l-1),E();else if(Z==="\x1B[B")l=Math.min(
|
|
186
|
-
`);
|
|
185
|
+
`),process.stdout.write("\x1B[?25l"),process.stdin.setRawMode(!0),process.stdin.resume();let U=M=>{let Z=M.toString();if(Z==="\x1B[A")l=Math.max(0,l-1),E();else if(Z==="\x1B[B")l=Math.min(se(),l+1),E();else if(Z==="\r"){let ie=H();if(f&&ie.length===0)return;if(l<ie.length)$=ie[l]?.domain??null,k=!0;else{let Ae=W()[l-ie.length];Ae==="more"?(a+=Ge,r.length<a?b=!0:(l=Math.min(l,se()),E())):(Ae==="new"&&($="__new__"),k=!0)}}else(Z===""||Z==="\x1B")&&(k=!0)};process.stdin.on("data",U),E();async function te(M){let Z=new TextDecoder,ie="",z="";for await(let Ae of M){if(k)break;ie+=Z.decode(Ae,{stream:!0});let ze=ie.split(`
|
|
186
|
+
`);ie=ze.pop()??"";for(let ue of ze)if(ue.startsWith("event: "))z=ue.slice(7);else if(ue.startsWith("data: ")){let de=JSON.parse(ue.slice(6));if(z==="error"&&(process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdout.write("\x1B[?25h"),u(de.message||de.error||"Search failed",{code:de.code||"error"})),z==="result"&&(g=de.domain),z==="result"&&(de.available||de.for_sale||i)){if(h===0){let xe=r.findIndex(ft=>ft.price>de.price);xe===-1?r.push(de):(r.splice(xe,0,de),xe<=l&&l++)}else r.push(de);E()}else if(z==="result"&&!de.available&&!de.error)o.length<8&&o.push(de);else if(z==="done"){f=!1,l=Math.min(l,se());let xe=Ge+h*Ge;r.length<a&&s&&xe<n.length&&(b=!0),b||E()}}}f=!1}for(await te(e);!k;)if(await new Promise(M=>{let Z=setInterval(()=>{(k||b)&&(clearInterval(Z),M())},16)}),b&&!k){b=!1;let M=Ge+h*Ge,Z=n.slice(M,M+Ge);h++,f=!0,l=Math.min(l,Math.max(0,r.length-1)),E();let ie=new URLSearchParams;ie.set("domains",Z.map(z=>`${t}.${z}`).join(","));try{let z=await ve(`/api/domains/search?${ie}`,{headers:{Accept:"text/event-stream"}});z.ok&&z.body?await te(z.body):(f=!1,E())}catch{f=!1,E()}}clearInterval(O),process.stdin.removeListener("data",U),process.stdin.isTTY&&process.stdin.setRawMode(!1),process.stdin.pause(),process.stdout.write("\x1B[?25h"),A();let X=$==="__new__",q=X?null:$,re=q?r.find(M=>M.domain===q)??null:null;return q?process.stdout.write(`${N.default.dim("\u25C7")} Register a domain?
|
|
187
187
|
${N.default.dim("\u2502")} ${N.default.bold(N.default.cyan(q))}
|
|
188
188
|
${N.default.dim("\u2514")}
|
|
189
189
|
`):process.stdout.write(`${N.default.dim("\u2514")}
|
|
190
|
-
`),{chosen:q,chosenResult:
|
|
191
|
-
`);
|
|
192
|
-
`);P=
|
|
190
|
+
`),{chosen:q,chosenResult:re,searchAgain:X,allTaken:r.length===0&&o.length>0,expanded:h>0}}async function Ao(e,t,i){if(!e){Ce||u("Missing required argument: domain",{hint:"Usage: domani search <domain> [tlds...]",code:"missing_argument",json:i.json});let U=await Pe({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});(ce(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&&ss(r,i),Y(e,i),e.includes(".")&&r.length===0){let U=C(!i.json);U.start(`Checking ${v.domain(e)}`);let[te,X]=await Promise.all([ve(`/api/domains/search?q=${encodeURIComponent(e)}`),ve(`/api/domains/${encodeURIComponent(e)}/og`).catch(()=>null)]),q=await te.json();if(te.ok||(U.stop("Search failed"),u(q.error||q.message,{hint:q.hint,status:te.status,json:i.json,fields:i.fields})),i.json){let re=q.domain.split(".")[0];y({name:re,results:[q],total:1,available:q.available?1:0},i.fields);return}if(q.available)if(U.stop(`${w.success} ${v.domain(q.domain)} ${w.dot} available ${w.dot} ${v.price(q.price)}/yr`),Ce&&!i.json){let{buy:re}=await Promise.resolve().then(()=>(ri(),wi));await re([q.domain],{preChecked:{price:q.price,currency:q.currency}})}else c(),R("Register it:",`domani buy ${q.domain}`),c();else if(q.for_sale?.buyable)if(U.stop(`${w.info} ${v.domain(q.domain)} ${w.dot} ${N.default.cyan("for sale")} ${w.dot} ${v.price(q.for_sale.price)}`),Ce&&!i.json){let{buy:re}=await Promise.resolve().then(()=>(ri(),wi));await re([q.domain],{preChecked:{price:q.for_sale.price,currency:q.for_sale.currency,marketplace:!0}})}else c(),R("Buy it:",`domani buy ${q.domain}`),c();else if(q.error)U.stop(`${N.default.dim("?")} ${v.domain(q.domain)} ${w.dot} ${N.default.dim("lookup failed")}`);else{let re;try{if(X?.ok){let Z=await X.json();Z?.title&&(re=Z.title)}}catch{}let M=re?` ${w.dot} ${N.default.dim(`"${re}"`)}`:"";U.stop(`${w.error} ${v.domain(q.domain)} ${w.dot} ${N.default.red("taken")}${M}`)}return}let o=e.split(".")[0];if(Ce&&!i.json&&r.length>0){let U=new URLSearchParams;U.set("domains",r.map(ne=>`${o}.${ne}`).join(",")),i.maxPrice&&U.set("max_price",i.maxPrice);let te=await ve(`/api/domains/search?${U}`,{headers:{Accept:"text/event-stream"}});if(!te.ok||!te.body){u("Search failed",{json:i.json});return}let X=[],q=new TextDecoder,re="",M="",Z=C(!0);Z.start(`Checking ${r.length} TLD${r.length>1?"s":""}`);for await(let ne of te.body){re+=q.decode(ne,{stream:!0});let rt=re.split(`
|
|
191
|
+
`);re=rt.pop()??"";for(let xt of rt)xt.startsWith("event: ")?M=xt.slice(7):xt.startsWith("data: ")&&M==="result"&&X.push(JSON.parse(xt.slice(6)))}Z.stop("");let ie=Math.max(...r.map(ne=>`${o}.${ne}`.length))+2,z=X.filter(ne=>ne.available),Ae=X.filter(ne=>!ne.available&&!ne.error),ze=X.filter(ne=>!ne.available&&ne.for_sale);for(let ne of[...z,...ze,...Ae.filter(rt=>!rt.for_sale)])ne.available?console.log(` ${N.default.green("\u2713")} ${N.default.bold(N.default.white(ne.domain.padEnd(ie)))} ${N.default.green(v.price(ne.price)+"/yr")}`):ne.for_sale?console.log(` ${N.default.cyan("$")} ${N.default.bold(N.default.white(ne.domain.padEnd(ie)))} ${N.default.cyan(v.price(ne.for_sale.price))} ${N.default.dim("(for sale)")}`):console.log(` ${N.default.dim("\u2717")} ${N.default.dim(ne.domain.padEnd(ie))} ${N.default.dim("taken")}`);if(z.length===0){console.log(` ${N.default.dim("No domains available")}`),c();return}let{buy:ue}=await Promise.resolve().then(()=>(ri(),wi));if(z.length===1){await ue([z[0].domain],{preChecked:{price:z[0].price,currency:z[0].currency}});return}let{select:de,isCancel:xe}=await Promise.resolve().then(()=>(Ue(),bn)),ft=await de({message:"Register one?",options:[...z.map(ne=>({value:ne.domain,label:v.domain(ne.domain),hint:v.price(ne.price)+"/yr"})),{value:"__skip__",label:"Skip"}]});if(!xe(ft)&&ft!=="__skip__"){c();let ne=z.find(rt=>rt.domain===ft);await ue([ft],{preChecked:ne?{price:ne.price,currency:ne.currency}:void 0})}else c();return}if(Ce&&!i.json){let U=await Ro();for(i.expand&&U.length>oi&&console.error(N.default.dim(` (--expand: checking the first ${oi} of ${U.length} TLDs - server limit per request)`));;){let te=i.expand?U.slice(0,oi):U.slice(0,Ge),X=new URLSearchParams;X.set("domains",te.map(de=>`${o}.${de}`).join(",")),i.maxPrice&&X.set("max_price",i.maxPrice);let q=C(!0);q.start(`Searching available domains for ${N.default.bold(o)}`);let re=await ve(`/api/domains/search?${X}`,{headers:{Accept:"text/event-stream"}});if(!re.ok||!re.body){q.stop("Search failed");break}q.stop("");let M=!i.expand,{chosen:Z,chosenResult:ie,searchAgain:z}=await $c(re.body,o,i.all??!1,M,U);if(Z){c();let{buy:de}=await Promise.resolve().then(()=>(ri(),wi)),xe=ie?{price:ie.price,currency:ie.currency}:void 0;await de([Z],{preChecked:xe});return}if(!z)break;let{text:Ae,isCancel:ze}=await Promise.resolve().then(()=>(Ue(),bn)),ue=await Ae({message:"Search for a domain",placeholder:"e.g. myapp or myapp.dev"});if(ze(ue)||!ue)break;o=ue.split(".")[0]}c();return}let a=o,l=await Ro(),f=r.length>0?r:i.expand?l.slice(0,oi):l.slice(0,Ge);i.expand&&r.length===0&&l.length>oi&&console.error(`(--expand: checking the first ${oi} of ${l.length} TLDs - server limit per request; use --tlds to target others)`);let m=f.map(U=>`${a}.${U}`),h=new URLSearchParams;h.set("domains",m.join(",")),i.maxPrice&&h.set("max_price",i.maxPrice);let b=C(!i.json);b.start(`Searching available domains for ${N.default.bold(a)}`);let k=await ve(`/api/domains/search?${h}`,{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 $=k.body;$||(b.stop("Search failed"),u("Empty response",{code:"error",json:i.json,fields:i.fields}));let g=[],x=!1,S=0,O=i.all??!1;function A(){x||(x=!0,b.stop(`Checking TLDs for ${N.default.bold(a)}`),c())}function W(U){A(),U.available?console.log(` ${w.success} ${v.domain(U.domain).padEnd(37)} ${v.price(U.price)}${N.default.dim("/yr")}`):U.for_sale?console.log(` ${w.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(` ${w.error} ${N.default.dim(U.domain.padEnd(38))} ${N.default.red("taken")}`)}function H(){x||b.message(`Checking TLDs for ${N.default.bold(a)} ${N.default.dim(`(${S} checked)`)}`)}let se=new TextDecoder,P="",E="";for await(let U of $){P+=se.decode(U,{stream:!0});let te=P.split(`
|
|
192
|
+
`);P=te.pop()??"";for(let X of te)if(X.startsWith("event: "))E=X.slice(7);else if(X.startsWith("data: ")){let q=JSON.parse(X.slice(6));if(E==="error")b.stop("Search failed"),u(q.message||q.error||"Search failed",{code:q.code||"error",json:i.json,fields:i.fields});else if(E==="result")S++,q.available||q.for_sale||O?(i.json||W(q),g.push(q)):i.json||H();else if(E==="done"){if(i.json){g.sort((ie,z)=>ie.price-z.price),y({name:a,results:g,total:q.total,available:q.available},i.fields);return}x&&console.log(` ${N.default.dim("\u2500".repeat(50))}`);let re=q.total-q.available,M=q.total>=5&&re/q.total>=.5,Z=`Checked ${q.total} TLDs \xB7 ${q.available} available${M?" \xB7 popular name":""}`;console.log(` ${N.default.dim(Z)}`),q.available===0&&!i.expand&&r.length===0&&(c(),R("Try more TLDs:",`domani search ${a} --expand`))}}}c()}ri();G();var vi=D(F(),1);L();be();ns();function To(e,t,i=process.env){let s=Vt(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:Wt(s)}:{}}}}async function Eo(e,t){Y(e,t);let i={domain:e};t.slug&&(i.slug=t.slug),t.name&&(i.name=t.name);let s;try{s=To(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),K("POST /api/agents/provision",a,t.json,t.fields);return}let n=C(!t.json);n.start(`Provisioning ${v.domain(e)}`);let r=await _("/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){y(o,t.fields);return}if(c(),j("Agent identity"),d("Domain",`${o.domain} (${o.domain_status})`),d("Mailbox",o.mailbox?vi.default.green(o.mailbox.address):vi.default.yellow("pending DNS")),d("Webhook",o.webhook?o.webhook.url:vi.default.dim("none")),o.webhook?.header_names.length&&d("Webhook auth",o.webhook.header_names.join(", ")),o.webhook?.secret&&d("Signing secret",o.webhook.secret),o.warnings?.length){c();for(let a of o.warnings)ye(vi.default.yellow(a))}if(o.next_steps?.length){c(),j("Next");for(let a of o.next_steps)ye(a)}c()}G();var $t=D(F(),1);L();async function Po(e){let t=C(!e.json);t.start("Loading domains");let i=await _("/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){y({...s,count:s.domains.length},e.fields);return}if(s.domains.length===0){c(),console.log(` ${$t.default.dim("No domains yet.")} Use: ${$t.default.cyan("domani buy <domain>")}`),c();return}let n=[30,12,12,14];j(`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"?$t.default.green:o.status==="pending"?$t.default.yellow:$t.default.red,f=o.autoRenew?$t.default.green("on"):$t.default.dim("off");return[v.domain(o.domain),l(o.status),f,$t.default.dim(a)]});B(["Domain","Status","Auto-renew","Expires"],r,n),c()}Pn();G();var Ht=D(F(),1);L();async function Do(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 ve(`/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){y(n,e.fields);return}let r=n.tlds;if(r.length===0){c(),console.log(` ${Ht.default.dim("No TLDs match your filters.")}`),c();return}j("TLD Pricing");let o=r.map(a=>[Ht.default.bold(`.${a.tld}`),v.price(a.registration.toFixed(2))+Ht.default.dim("/yr"),Ht.default.dim("renew ")+v.price(a.renewal.toFixed(2))+Ht.default.dim("/yr")]);B(["TLD","Register","Renewal"],o,[22,16,20]),c(),console.log(` ${Ht.default.dim(`${n.total} TLDs total`)}`),c()}G();var Ie=D(F(),1);L();be();async function No(e,t){Y(e,t);let i=C(!t.json);i.start(`Looking up ${v.domain(e)}`);let[s,n]=await Promise.all([ve(`/api/domains/whois?q=${encodeURIComponent(e)}`),ve(`/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){y({...r,...o?{og:o}:{}},t.fields);return}if(j(`WHOIS ${v.domain(r.domain)}`),!r.registered){d("Status",`${w.success} ${Ie.default.green("not registered")}`),c(),R("Register it:",`domani buy ${r.domain}`),c();return}if(d("Status",`${w.error} ${Ie.default.red("registered")}`),(o?.title||o?.description)&&(c(),console.log(` ${Ie.default.bold("Website preview")}`),console.log(` ${Ie.default.dim("\u2500".repeat(50))}`),o.title&&d("Title",o.title),o.description&&d("Description",Ie.default.dim(o.description.length>80?o.description.slice(0,80)+"\u2026":o.description)),c()),r.registrar&&d("Registrar",r.registrar),r.created&&d("Created",r.created),r.expires&&d("Expires",r.expires),r.days_until_expiry!=null){let l=r.days_until_expiry,f=l<30?Ie.default.red:l<90?Ie.default.yellow:Ie.default.green;d("Days left",f(String(l)))}r.updated&&d("Updated",r.updated),d("DNSSEC",r.dnssec?Ie.default.green("yes"):Ie.default.dim("no")),r.nameservers?.length>0&&d("Nameservers",r.nameservers.map(l=>Ie.default.cyan(l)).join(Ie.default.dim(", "))),r.status?.length>0&&d("Status codes",Ie.default.dim(r.status.join(", ")));let a=r.contacts?.registrant;a&&!r.redacted?(c(),console.log(` ${Ie.default.bold("Registrant")}`),console.log(` ${Ie.default.dim("\u2500".repeat(50))}`),a.name&&d("Name",a.name),a.organization&&d("Organization",a.organization),a.email&&d("Email",v.url(a.email)),a.country&&d("Country",a.country)):r.redacted&&d("Contact",Ie.default.dim("redacted (WHOIS privacy)")),c()}G();Ue();var kt=D(F(),1);L();be();async function Uo(e,t){if(!e){Ce||u("Missing required argument: prompt",{hint:'Usage: domani suggest "describe your project"',code:"missing_argument",json:t.json});let g=await Pe({message:"Describe your project or idea",placeholder:"e.g. AI coding assistant, pet food delivery..."});(ce(g)||!g)&&process.exit(0),e=g}let i=new URLSearchParams({prompt:e});if(t.count&&i.set("count",t.count),t.tlds&&i.set("tlds",t.tlds),t.tlds&&ss(t.tlds.split(",").map(g=>g.trim()),t),t.style&&i.set("style",t.style),t.lang&&i.set("lang",t.lang),t.json){let g=C(!1);g.start("Finding available domains");let x=t.timeout?parseInt(t.timeout,10)*1e3:6e4,S;try{S=await ve(`/api/domains/suggest?${i}`,{signal:AbortSignal.timeout(x)})}catch{g.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 S.json();S.ok||(g.stop("Failed"),u(O.error||O.message,{hint:O.hint,status:S.status,json:t.json,fields:t.fields})),y(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 ve(`/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 g=await r.json();u(g.error||g.message||`Server error (${r.status})`,{hint:g.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 h(){f||(f=!0,s.stop("Finding available domains"),c())}let b=new TextDecoder,k="",$="";for await(let g of o){k+=b.decode(g,{stream:!0});let x=k.split(`
|
|
193
193
|
`);k=x.pop()??"";for(let S of x)if(S.startsWith("event: "))$=S.slice(7);else if(S.startsWith("data: "))try{let O=JSON.parse(S.slice(6));if($==="result")m++,O.available?a.push(O):l.push(O),f||s.message(`Finding available domains ${kt.default.dim(`(${m} checked, ${a.length} available)`)}`);else if($==="iteration")f||s.message(`Finding available domains ${kt.default.dim(`(round ${O.n})`)}`);else if($==="done"){h();for(let A of a){let W=A.reason?` ${kt.default.dim(A.reason)}`:"";console.log(` ${w.success} ${v.domain(A.domain).padEnd(37)} ${v.price(A.price)}${kt.default.dim("/yr")}${W}`)}for(let A of l)console.log(` ${w.error} ${kt.default.dim(A.domain.padEnd(38))} ${kt.default.red("taken")}`);console.log(` ${kt.default.dim("\u2500".repeat(50))}`),console.log(` ${kt.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.")),c(),a.length>0&&(R("Register one:",`domani buy ${a[0].domain}`),c())}Cn();Nn();G();Ue();var dt=D(F(),1);L();be();ci();async function qo(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 $i=D(F(),1);L();function ki(e){if(e){c(),console.log(` ${$i.default.bold(`Exit path (${e.managed_via})`)}`),console.log(` ${$i.default.dim("Unlock:")} ${e.unlock}`),console.log(` ${$i.default.dim("Auth code:")} ${e.auth_code}`);for(let t of e.notes||[])console.log(` ${$i.default.yellow("!")} ${t}`)}}var kc=6e4,_c=1440;async function Mo(e,t){Y(e,t);let i=C(!t.json);i.start(`Planning safe adoption for ${v.domain(e)}`);let s=await _(`/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(`${w.success} Eligible for transfer`);else{i.stop(`${w.error} Not eligible`);let a=n.options?.transfer;if(t.watch&&a?.eligible_at){let l=await _("/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){y(f,t.fields);return}j("Transfer Watch Registered"),d("Domain",v.domain(e)),d("Eligible from",f.eligible_at||a.eligible_at),f.hint&&(c(),console.log(` ${dt.default.dim(f.hint)}`)),c();return}if(t.watch){t.json||(console.log(` ${dt.default.dim(a?.reason||"Domain is not eligible for transfer yet.")}`),ki(a?.guidance),c());let l=C(!t.json);l.start(`Watching ${v.domain(e)} until it becomes transferable (every 60s, Ctrl+C to stop)`);let f=await qo({fetchPlan:async()=>{let m=await _(`/api/domains/adoption-plan?domain=${encodeURIComponent(e)}`);return m.ok?m.json():null},isEligible:m=>!!m.options?.transfer?.eligible,sleep:m=>new Promise(h=>setTimeout(h,m)),intervalMs:kc,maxAttempts:_c});f.status!=="eligible"&&(l.stop(`${w.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(`${w.success} Now eligible for transfer`)}else{t.json||ki(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 K("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(!Ft(t)){j("Transfer Safety Plan"),d("Registrar",n.current.registrar||"Unknown"),d("DNS provider",n.current.dns_provider),d("Nameservers",`${n.current.nameservers.length} preserved`),d("DNSSEC",n.current.dnssec_enabled?dt.default.yellow("Enabled, DS will be verified"):"Not enabled"),d("DNS migration","Not requested"),c();let a=n.options.transfer.price!=null?` for ${v.price(n.options.transfer.price.toFixed(2))}`:"",l=await Xe({message:`Transfer ${dt.default.bold(e)} to ${Yt}${a}? Nameservers stay unchanged and 1 year is included.`});if(!l||typeof l=="symbol"){console.log(` ${dt.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(` ${dt.default.dim("Where to get it:")} ${n.options.transfer.guidance.auth_code}`);let a=await Pe({message:"Enter the EPP/auth code from your current registrar:",validate:l=>!l||l.trim().length===0?"Auth code is required":void 0});ce(a)&&process.exit(0),t.authCode=a}i.start(`Initiating transfer for ${v.domain(e)}`);let r=await _("/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(`${w.success} Transfer initiated`),t.json){y(o,t.fields);return}j("Transfer Initiated"),d("Domain",v.domain(o.domain)),d("Status",dt.default.yellow(o.status||"pending")),o.price&&d("Price",v.price(o.price)+dt.default.dim(` ${o.currency||"USD"}`)),o.payment_method&&d("Payment",o.payment_method),o.expires&&d("Expires",new Date(o.expires).toLocaleDateString()),o.hint&&(c(),console.log(` ${dt.default.dim(o.hint)}`)),c(),R("Check transfer progress:",`domani status ${o.domain}`),c()}G();var _i=D(F(),1);L();be();async function Fo(e,t){Y(e,t);let i=C(!t.json);i.start(`Inspecting ${v.domain(e)}`);let s=await _(`/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(`${w.success} Adoption plan ready`),t.json){y(n,t.fields);return}if(j(`Adopt ${v.domain(n.domain)}`),d("Registrar",n.current.registrar||"Unknown"),d("DNS provider",n.current.dns_provider),d("Nameservers",n.current.nameservers.join(", ")||"None detected"),d("DNSSEC",n.current.dnssec_enabled?_i.default.yellow("Enabled"):"Not enabled"),d("Account",n.account_state),d("Recommended",_i.default.cyan(n.recommended_action)),c(),n.recommended_action==="connect"&&R("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}`;R(`Transfer registration for ${r}, preserving nameservers:`,`domani transfer ${n.domain}`),!n.options.transfer.eligible&&n.options.transfer.reason&&(console.log(` ${_i.default.yellow("!")} ${n.options.transfer.reason}`),R("Wait for eligibility and transfer in one go:",`domani transfer ${n.domain} --watch`)),ki(n.options.transfer.guidance)}for(let r of n.warnings||[])console.log(` ${_i.default.yellow("!")} ${r}`);c()}G();Ue();var us=D(F(),1);L();be();Ze();async function Lo(e,t){e||(e=await he()),Y(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 K("renew",{domain:e,years:i},t.json,t.fields);if(!Ft(t)){let o=await Xe({message:`Renew ${us.default.bold(e)} for ${i} year${i>1?"s":""}? You will be charged.`});if(!o||typeof o=="symbol"){console.log(` ${us.default.dim("Cancelled.")}`);return}}let s=C(!t.json);s.start(`Renewing ${v.domain(e)}`);let n=await _(`/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(`${w.success} Domain renewed`),t.json){y(r,t.fields);return}j("Renewal Complete"),d("Domain",v.domain(r.domain)),d("Years",String(r.renewed_years)),d("New expiry",new Date(r.new_expiry).toLocaleDateString()),r.price&&d("Price",v.price(r.price)+us.default.dim(` ${r.currency||"USD"}`)),r.payment_method&&d("Payment",r.payment_method),c(),R("Verify renewal:",`domani status ${r.domain}`),c()}G();var ct=D(F(),1);L();be();async function Vo(e,t){e||u("Domain is required",{hint:`Usage: domani import <domain>
|
|
194
194
|
domani import <domain> --verify`,code:"validation_error",json:t.json,fields:t.fields}),Y(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 _(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(""),y(r,t.fields);return}t.verify?(s.stop(`${w.success} ${v.domain(e)} imported!`),j("Domain Imported"),d("Domain",v.domain(r.domain)),d("Status",ct.default.green(r.status||"active")),r.expires_at&&d("Expires",new Date(r.expires_at).toLocaleDateString()),r.registrar&&d("Registrar",r.registrar),c(),R("Check domain health:",`domani status ${r.domain}`),c()):(s.stop(`${w.success} Verification record ready`),j("Import Domain"),d("Domain",v.domain(r.domain)),d("Status",ct.default.yellow("pending verification")),c(),console.log(" Add this TXT record at your DNS provider:"),c(),console.log(` ${ct.default.dim("Type:")} ${ct.default.bold("TXT")}`),console.log(` ${ct.default.dim("Name:")} ${ct.default.bold(r.txt_record?.name||"@")}`),console.log(` ${ct.default.dim("Value:")} ${ct.default.bold(r.txt_record?.value||`domani-verify=${r.token}`)}`),c(),console.log(` ${ct.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),c(),R("Once the record is set, verify:",`domani import ${e} --verify`),c())}An();yt();L();function Wo(e){let t=He();if(t||(c(),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?y({token:t}):console.log(t)}G();var Fe=D(F(),1);L();async function Ho(e,t){switch(e){case void 0:case"list":return xc(t.json,t.fields);case"create":return jc(t);case"revoke":return Sc(t);default:u(`Unknown action: ${e}`,{hint:"Actions: list, create, revoke",code:"validation_error",json:t.json,fields:t.fields})}}async function xc(e,t){let i=C(!e);i.start("Loading tokens");let s=await _("/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(`${w.success} ${n.tokens.length} token(s)`),e){y(n,t);return}if(n.tokens.length===0){c(),console.log(` ${Fe.default.dim("No tokens.")}`),c(),R("Create one:",'domani tokens create --name "My App"'),c();return}c(),j("API Tokens");let r=n.tokens.map(o=>{let a;o.expired?a=Fe.default.red("Expired"):o.expiresAt?a=Fe.default.dim(`Expires ${new Date(o.expiresAt).toLocaleDateString()}`):a=Fe.default.dim("No expiration");let l=o.scopes.includes("*")?Fe.default.dim("all"):Fe.default.dim(o.scopes.join(", "));return[Fe.default.dim(o.id),Fe.default.bold(o.name),o.agent_identity?Fe.default.dim(o.agent_identity.name||o.agent_identity.slug):Fe.default.dim("\u2014"),l,a]});B(["ID","Name","Agent","Scopes","Expiration"],r,[28,16,18,32,20]),c()}async function jc(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 _("/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(`${w.success} Token created`),e.json){y(n,e.fields);return}c(),j("Token Created"),d("ID",n.id),d("Name",n.name),d("Scopes",n.scopes?.includes("*")?"All (full access)":n.scopes?.join(", ")||"All"),n.agent_identity&&d("Agent",n.agent_identity.name||n.agent_identity.slug),d("Expires",n.expiresAt?new Date(n.expiresAt).toLocaleString():"Never"),c(),console.log(` ${Fe.default.yellow("!")} ${Fe.default.bold("Key:")} ${n.key}`),console.log(` ${Fe.default.dim("Save this key - it will not be shown again.")}`),c()}async function Sc(e){e.tokenId||u("Token ID required",{hint:`Usage: domani tokens revoke --token-id <id>
|
|
195
195
|
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 _(`/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(`${w.success} Token revoked`),e.json){y(s,e.fields);return}console.log(` ${Fe.default.dim("Any applications using this key will need a new one.")}`),c()}G();var Re=D(F(),1);L();be();Ze();async function Jo(e,t){e||(e=await he()),Y(e,t);let i=t.autoRenew!==void 0,s=t.whoisPrivacy!==void 0,n=t.securityLock!==void 0;if(!i&&!s&&!n)return Cc(e,t.json,t.fields);let r={};if(i){let f=Mn(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=Mn(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=Mn(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 K("settings_update",{domain:e,...r},t.json,t.fields);let o=C(!t.json);o.start(`Updating ${v.domain(e)}`);let a=await _(`/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(`${w.success} Settings updated`),t.json){y(l,t.fields);return}j("Settings Updated"),d("Domain",v.domain(l.domain)),l.auto_renew!==void 0&&d("Auto-renew",l.auto_renew?Re.default.green("on"):Re.default.dim("off")),l.whois_privacy!==void 0&&d("WHOIS privacy",l.whois_privacy?Re.default.green("on"):Re.default.dim("off")),l.security_lock!==void 0&&d("Security lock",l.security_lock?Re.default.green("locked"):Re.default.dim("unlocked")),l.hint&&d("",Re.default.dim(l.hint)),c()}async function Cc(e,t,i){let s=C(!t);s.start(`Loading ${v.domain(e)}`);let n=await _(`/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(`${w.success} ${v.domain(e)}`),t){y(r,i);return}j("Domain Settings"),d("Domain",v.domain(r.domain)),d("Status",r.status==="active"?Re.default.green(r.status):Re.default.yellow(r.status)),d("Auto-renew",r.auto_renew?Re.default.green("on"):Re.default.dim("off")),r.registrar&&(d("WHOIS privacy",r.registrar.whois_privacy?Re.default.green("on"):Re.default.dim("off")),d("Security lock",r.registrar.security_lock?Re.default.green("locked"):Re.default.dim("unlocked"))),d("Expires",new Date(r.expires_at).toLocaleDateString()+Re.default.dim(` (${r.days_until_expiry} days)`)),c(),R("Toggle auto-renew:",`domani settings ${e} --auto-renew off`),R("Toggle WHOIS privacy:",`domani settings ${e} --whois-privacy off`),R("Toggle security lock:",`domani settings ${e} --security-lock off`),R("Get transfer auth code:",`domani auth-code ${e}`),c()}function Mn(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 Jt=D(F(),1);L();be();Ze();async function Bo(e,t){e||(e=await he()),Y(e,t);let i=C(!t.json);i.start(`Getting auth code for ${v.domain(e)}`);let s=await _(`/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(`${w.success} Auth code retrieved`),t.json){y(n,t.fields);return}if(j("Auth Code"),d("Domain",v.domain(n.domain)),d("Auth code",Jt.default.bold(Jt.default.green(n.auth_code))),n.was_unlocked&&d("",Jt.default.yellow("Domain was automatically unlocked to allow transfer.")),n.hint&&(c(),console.log(` ${Jt.default.dim(n.hint)}`)),n.next_steps?.length){c();for(let r of n.next_steps)console.log(` ${Jt.default.dim("\u2192")} ${Jt.default.dim(r)}`)}c(),R("Check transfer status:",`domani transfer-away ${e}`),R("Re-lock domain:",`domani settings ${e} --security-lock on`),c()}G();var _t=D(F(),1);L();be();Ze();var Oc={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 Go(e,t){e||(e=await he()),Y(e,t);let i=C(!t.json);i.start(`Checking transfer status for ${v.domain(e)}`);let s=await _(`/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(`${w.success} ${v.domain(e)}`),t.json){y(n,t.fields);return}j("Transfer Away Status"),d("Domain",v.domain(n.domain));let r=Oc[n.status]||_t.default.dim;d("Status",r(n.status)),n.gaining_registrar&&d("New registrar",n.gaining_registrar),n.request_date&&d("Requested",new Date(n.request_date).toLocaleDateString()),n.hint&&(c(),console.log(` ${_t.default.dim(n.hint)}`)),c(),n.status==="none"?R("Get auth code to start:",`domani auth-code ${e}`):n.status==="pending"||n.status==="approved"?R("Check again later:",`domani transfer-away ${e}`):n.status==="completed"?R("Search for a new domain:","domani search <name>"):(n.status==="rejected"||n.status==="expired")&&R("Retry with a new auth code:",`domani auth-code ${e}`),c()}G();Ue();var ms=D(F(),1);L();async function Ko(e,t){return e==="set"?Rc(t):Ic(t)}async function Ic(e){let t=C(!e.json);t.start("Loading contact info");let i=await _("/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(`${w.success} Contact info`),e.json){y(s,e.fields);return}if(j("Contact Info"),!s.has_contact){console.log(` ${w.warning} ${ms.default.yellow("No contact info set.")} Run ${ms.default.bold("domani contact set")} to add.`),c(),console.log(` ${ms.default.dim("Contact info is required before purchasing domains.")}`),c();return}let n=s.contact;d("Name",`${n.first_name} ${n.last_name}`),n.org_name&&d("Organization",n.org_name),d("Address",n.address1),n.address2&&d("",n.address2),d("",`${n.city}, ${n.state} ${n.postal_code}`),d("Country",n.country),d("Phone",n.phone),d("Email",n.email),c()}async function Rc(e){let t={},i=e.firstName||e.lastName||e.address1;if(!Ce&&!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,h=>`-${h.toLowerCase()}`)}`).join(", ")}`,{code:"missing_argument",json:e.json});for(let[m,h]of Object.entries(l)){let b=e[m];b&&(t[h]=b)}}else{let a=await _("/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 h of m){let b=f?.[h.key]||"",k=await Pe({message:h.message,placeholder:h.placeholder,defaultValue:b,validate:h.required?g=>g?.trim()?void 0:`${h.message} is required`:void 0});ce(k)&&process.exit(0);let $=k.trim();$&&(t[h.key]=$)}}if(e.dryRun)return K("contact_set",t,e.json,e.fields);let s=C(!e.json);s.start("Saving contact info");let n=await _("/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(`${w.success} Contact info saved`),e.json){y(r,e.fields);return}j("Contact Saved");let o=r.contact;d("Name",`${o.first_name} ${o.last_name}`),o.org_name&&d("Organization",o.org_name),d("Address",o.address1),o.address2&&d("",o.address2),d("",`${o.city}, ${o.state} ${o.postal_code}`),d("Country",o.country),d("Phone",o.phone),d("Email",o.email),c(),R("Search for a domain:","domani search <name>"),c()}G();var De=D(F(),1);L();be();Ze();async function Xo(e,t,i,s){if(e||(e=await he()),Y(e,s),!t)return Ac(e,s.json,s.fields);switch(t){case"enable":case"on":return s.dryRun?K("parking_enable",{domain:e},s.json,s.fields):zo(e,!0,s.json,s.fields);case"disable":case"off":return s.dryRun?K("parking_disable",{domain:e},s.json,s.fields):zo(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?K("parking_price",{domain:e,price:n},s.json,s.fields):Yo(e,n,s.json,s.fields)}case"unprice":case"unlist":return s.dryRun?K("parking_unlist",{domain:e},s.json,s.fields):Yo(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 ${v.domain(e)}`);let n=await _(`/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(`${w.success} ${v.domain(e)}`),t){y({domain:r.domain,parking_enabled:r.parking_enabled,listing_price:r.listing_price},i);return}j("Parking"),d("Domain",v.domain(r.domain)),d("Parking",r.parking_enabled?De.default.green("enabled"):De.default.dim("disabled")),d("Listing",r.listing_price?`${v.price(r.listing_price)} ${De.default.dim("(for sale)")}`:De.default.dim("not listed")),c(),R("Enable parking:",`domani parking ${e} enable`),R("Set sale price:",`domani parking ${e} price 499`),R("View analytics:",`domani analytics ${e}`),c()}async function zo(e,t,i,s){let n=C(!i);n.start(`${t?"Enabling":"Disabling"} parking for ${v.domain(e)}`);let r=await _(`/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(`${w.warning} DNS records will be replaced`),i){y(o,s);return}console.log(`
|
|
@@ -203,19 +203,19 @@ Run 'domani webhooks events' to see available event types.`,code:"validation_err
|
|
|
203
203
|
domani sell <domain> --status
|
|
204
204
|
domani sell <domain> --cancel
|
|
205
205
|
domani sell <domain> --transfer-code <code>`,code:"validation_error",json:t.json,fields:t.fields})}async function Lc(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 _("/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(""),y(o,t.fields);return}(o.listing?.status??"pending_verification")==="active"?(s.stop(`${w.success} Listed for sale`),j("Sell Domain"),d("Domain",v.domain(o.listing?.domain||e)),d("Price",v.price(i)),d("Status",ke.default.green("active")),c(),console.log(` ${ke.default.dim("Your listing is live on the marketplace.")}`),c()):(s.stop(`${w.success} Verification record ready`),j("Sell Domain"),d("Domain",v.domain(o.listing?.domain||e)),d("Price",v.price(i)),d("Status",ke.default.yellow("pending verification")),c(),console.log(" Add this TXT record at your DNS provider:"),c(),console.log(` ${ke.default.dim("Type:")} ${ke.default.bold("TXT")}`),console.log(` ${ke.default.dim("Name:")} ${ke.default.bold(o.txt_record?.name||"@")}`),console.log(` ${ke.default.dim("Value:")} ${ke.default.bold(o.txt_record?.value||`domani-verify=${o.token}`)}`),c(),console.log(` ${ke.default.dim("DNS propagation may take a few minutes to 48 hours.")}`),c(),R("Once the record is set, verify:",`domani sell ${e} --verify`),c())}async function Vc(e,t){let i=C(!t.json);i.start(`Verifying ownership of ${v.domain(e)}`);let s=await _("/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(""),y(n,t.fields);return}i.stop(`${w.success} ${v.domain(e)} is now listed for sale!`),j("Domain Listed"),d("Domain",v.domain(n.domain||e)),d("Status",ke.default.green(n.status||"active")),n.price&&d("Price",v.price(n.price)),c(),R("Check listing status:",`domani sell ${e} --status`),R("View your deals:","domani deals"),c()}async function Wc(e,t){let i=C(!t.json);i.start(`Checking listing status for ${v.domain(e)}`);let s=await _(`/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(`${w.success} Listing status loaded`),t.json){y(n,t.fields);return}let r=n.listing;if(j("Listing Status"),d("Domain",v.domain(n.domain||e)),r){let o=r.status;d("Status",o==="active"?ke.default.green(o):ke.default.yellow(o||"unknown")),r.price&&d("Price",v.price(r.price)),r.description&&d("Description",r.description),r.created_at&&d("Listed",ke.default.dim(new Date(r.created_at).toLocaleDateString()))}else d("Status",ke.default.dim("No listing found"));n.deal&&d("Deal",`${n.deal.status} ($${n.deal.price})`),c()}async function Hc(e,t){let i=C(!t.json);i.start(`Removing ${v.domain(e)} from sale`);let s=await _(`/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(""),y(n,t.fields);return}i.stop(`${w.success} ${v.domain(e)} removed from sale`),c()}async function Jc(e,t,i){let s=C(!i.json);s.start(`Looking up active deal for ${v.domain(e)}`);let n=await _(`/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(h=>h.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.
|
|
206
|
-
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 ${ke.default.dim(l)}`);let f=await _(`/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(""),y(m,i.fields);return}s.stop(`${w.success} Transfer code submitted for ${v.domain(e)}`),j("Transfer Code Submitted"),d("Domain",v.domain(e)),d("Deal",ke.default.dim(l)),d("Status",ke.default.green(m.status||"code_submitted")),c(),R("Track the deal:",`domani deals ${l}`),c()}G();var _e=D(F(),1);L();async function ta(e,t){return e?Gc(e,t):Bc(t)}async function Bc(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 _(`/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(`${w.success} ${o.length} deal(s)`),e.json){y(r,e.fields);return}if(o.length===0){c(),console.log(` ${_e.default.dim("No deals found.")}`),c(),R("List a domain for sale:","domani sell <domain> --price <amount>"),c();return}c(),j("Deals");let a=o.map(l=>{let f=l.status==="completed"?_e.default.green:l.status==="active"?_e.default.cyan:l.status==="cancelled"?_e.default.red:_e.default.yellow;return[v.domain(l.domain),v.price(l.price),f(l.status),_e.default.dim(l.role||"-"),_e.default.dim(new Date(l.created_at).toLocaleDateString())]});B(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),c()}async function Gc(e,t){let i=C(!t.json);i.start(`Loading deal ${_e.default.dim(e)}`);let s=await _(`/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(`${w.success} Deal loaded`),t.json){y(n,t.fields);return}let r=n.deal||n;j("Deal Details"),d("ID",_e.default.dim(r.id)),d("Domain",v.domain(r.domain)),d("Price",v.price(r.price));let o=r.status==="completed"?_e.default.green:r.status==="active"?_e.default.cyan:r.status==="cancelled"?_e.default.red:_e.default.yellow;d("Status",o(r.status)),r.role&&d("Your Role",r.role),r.buyer&&d("Buyer",_e.default.dim(r.buyer)),r.seller&&d("Seller",_e.default.dim(r.seller)),r.created_at&&d("Created",_e.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&d("Updated",_e.default.dim(new Date(r.updated_at).toLocaleDateString())),c();let a=r.events||[];if(a.length>0){j("Timeline");for(let l of a){let f=_e.default.dim(new Date(l.created_at).toLocaleString()),m=l.status==="completed"?w.success:l.status==="expired"||l.status==="refunded"?w.error:w.info;console.log(` ${m} ${f} ${l.detail||l.status}`)}c()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(R("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),c())}G();var Le=D(F(),1);L();be();async function na(e,t,i){switch(e){case void 0:case"list":case"ls":return Kc(i);case"request":case"acquire":case"new":return ia(t,i);case"status":case"get":return sa(t,i);case"cancel":case"rm":return zc(t,i);default:return e.includes(".")?ia(e,i):sa(e,i)}}async function ia(e,t){e||u("A domain is required.",{hint:"domani broker request dream.com --max-budget 5000",json:t.json}),Y(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 _("/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(`${w.success} Acquisition requested`),t.json)return y(r,t.fields);j("Broker request"),d("Domain",v.domain(o.domain)),d("Status",Fn(o.status)),o.max_budget!=null&&d("Max budget",v.price(o.max_budget)),d("ID",Le.default.dim(o.id)),c(),console.log(` ${Le.default.dim("We'll source the owner and reach out anonymously. Commission-only - you pay nothing unless a deal closes.")}`),c(),R("Check progress:",`domani broker status ${o.id}`),c()}async function Kc(e){let t=C(!e.json);t.start("Loading broker requests");let i=e.status?`?status=${encodeURIComponent(e.status)}`:"",s=await _(`/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(`${w.success} ${r.length} request(s)`),e.json)return y(n,e.fields);if(r.length===0){c(),console.log(` ${Le.default.dim("No broker requests yet.")}`),c(),R("Acquire a taken domain:","domani broker request <domain> --max-budget <amount>"),c();return}c(),j("Broker requests"),B(["Domain","Status","Budget","ID"],r.map(o=>[v.domain(o.domain),Fn(o.status),o.max_budget!=null?v.price(o.max_budget):Le.default.dim("-"),Le.default.dim(o.id)])),c()}async function sa(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 _(`/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(`${w.success} ${v.domain(r.domain)}`),t.json)return y(n,t.fields);j("Broker request"),d("Domain",v.domain(r.domain)),d("Status",Fn(r.status)),r.max_budget!=null&&d("Max budget",v.price(r.max_budget)),d("Contacted",r.contacted?Le.default.green("yes"):Le.default.dim("not yet")),r.failure_reason&&d("Reason",Le.default.yellow(r.failure_reason)),d("ID",Le.default.dim(r.id)),c(),r.negotiation_id?(console.log(` ${Le.default.dim("The owner responded - an anonymous negotiation is open.")}`),c(),R("Review the offer:","domani deals"),c()):["sourcing","contacted","negotiating"].includes(r.status)&&(R("Cancel this request:",`domani broker cancel ${r.id}`),c())}async function zc(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 _(`/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(`${w.success} Request cancelled`),t.json)return y(n,t.fields);c()}function Fn(e){return["completed","agreed"].includes(e)?Le.default.green(e):["negotiating","contacted","sourcing"].includes(e)?Le.default.cyan(e):["declined","no_contact","failed","expired","cancelled"].includes(e)?Le.default.dim(e):e}G();var we=D(F(),1);L();async function oa(e){return e.read?Xc(e):Yc(e)}async function Yc(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 _(`/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(`${w.success} ${o.length} notification(s)${a>0?` ${w.dot} ${we.default.yellow(`${a} unread`)}`:""}`),e.json){y(r,e.fields);return}if(o.length===0){c(),console.log(` ${we.default.dim("No notifications.")}`),c();return}c(),j("Notifications");let l=o.map(f=>{let m=f.read?we.default.dim(w.dot):we.default.cyan(w.info),h=Zc(f.type),b=f.read?we.default.dim(f.title):we.default.white(f.title),k=f.body?f.read?we.default.dim(ra(f.body,40)):we.default.dim(ra(f.body,40)):we.default.dim("-"),$=we.default.dim(new Date(f.created_at).toLocaleDateString());return[m,h,b,k,$]});B(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),c(),a>0&&(console.log(` ${we.default.dim("Mark all as read:")} ${we.default.cyan("domani notifications --read")}`),c())}async function Xc(e){let t=C(!e.json);t.start("Marking all notifications as read");let i=await _("/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(""),y(s,e.fields);return}let n=s.count??0;t.stop(`${w.success} ${n} notification(s) marked as read`),c()}function Zc(e){let t={deal:we.default.cyan,sale:we.default.green,purchase:we.default.green,transfer:we.default.yellow,expiry:we.default.red,security:we.default.red,billing:we.default.yellow,email:we.default.blue},i=e.split(".")[0].split("_")[0];return(t[i]||we.default.dim)(e)}function ra(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}G();var Rt=D(F(),1);L();async function aa(e){let t=e.limit?Number(e.limit):20,i=await _(`/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){y({...s,count:s.invoices.length},e.fields);return}if(s.invoices.length===0){console.log(` ${Rt.default.dim("No invoices yet.")}`);return}j(`Invoices (${s.invoices.length})`),c();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(` ${w.success} ${Rt.default.bold(a)} ${Rt.default.green(r)} ${Rt.default.dim(o)}`),n.description&&console.log(` ${Rt.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${Rt.default.dim(n.hosted_invoice_url)}`)}c(),s.has_more&&(console.log(` ${Rt.default.dim(`Showing ${s.invoices.length} most recent. Use --limit to see more.`)}`),c())}G();var xi=D(F(),1);L();async function la(e){let t=C(!e?.json);t.start("Setting up billing session");let i=await _("/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){y({url:s.url});return}c(),console.log(` ${xi.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${xi.default.dim("Complete payment setup in your browser.")}`),console.log(` ${xi.default.dim(" After setup, you can purchase domains with")} ${xi.default.cyan("domani buy")}`),c()}G();var Ln=D(F(),1);L();async function da(e){let t=C(!e?.json);t.start("Creating upgrade session");let i=await _("/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){y({url:s.url},e?.fields);return}c(),console.log(` ${Ln.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${Ln.default.dim("Complete your plan upgrade in the browser.")}`),c()}G();var Vn=D(F(),1);L();async function ca(e){let t=C(!e?.json);t.start("Cancelling subscription");let i=await _("/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){y(s,e?.fields);return}c();let n=s.cancel_at?new Date(s.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${w.success} ${Vn.default.dim("Subscription cancelled.")} Access continues until ${Vn.default.cyan(n)}.`),c()}G();var nt=D(F(),1);L();be();Ze();async function ua(e,t,i){e||(e=await he()),Y(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 eu(e,s,i);return}await Qc(e,i)}async function Qc(e,t){let i=C(!t.json);i.start(`Fetching nameservers for ${v.domain(e)}`);let s=await _(`/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){y(n,t.fields);return}if(c(),n.nameservers.length===0)console.log(` ${w.warning} ${nt.default.yellow("No nameservers configured.")}`),console.log(` ${nt.default.dim("DNS operations (parking, email, connect) will not work.")}`),c(),R("Set default nameservers:",`domani nameservers ${e} --reset`);else{j("Nameservers");for(let r of n.nameservers)console.log(` ${w.success} ${nt.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(c(),console.log(` ${nt.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(c(),d("Defaults",n.default_nameservers.map(r=>nt.default.dim(r)).join(nt.default.dim(", ")))),c()}async function eu(e,t,i){let s=C(!i.json);if(i.reset){s.start(`Fetching default nameservers for ${v.domain(e)}`);let o=await _(`/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=>nt.default.cyan(l)).join(nt.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 K("nameservers_set",{domain:e,nameservers:t},i.json,i.fields);s.start(`Setting nameservers for ${v.domain(e)}`);let n=await _(`/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(`${w.success} Nameservers updated`),i.json){y(r,i.fields);return}c();for(let o of r.nameservers)console.log(` ${w.success} ${nt.default.cyan(o)}`);c(),console.log(` ${nt.default.dim("Changes may take up to 48 hours to propagate.")}`),c(),R("Check propagation:",`domani status ${e}`),c()}var ma=require("crypto"),fs=D(require("fs"),1);yt();var ji=D(F(),1);L();function tu(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 fa(e){let t=!!e?.json,i=C(!t);i.start("Checking for updates");let s=We();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(tu(o,je)<=0){i.stop(`${w.success} Already up to date (v${je})`),t&&y({current:je,latest:o,up_to_date:!0});return}if(t&&!e?.yes){i.stop(""),y({current:je,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: ${ji.default.cyan(je)} ${w.arrow} ${ji.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 h=await m.text();a&&(0,ma.createHash)("sha256").update(h).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=fs.default.realpathSync(b),$=k+".tmp";if(fs.default.writeFileSync($,h,{mode:493}),fs.default.renameSync($,k),l.stop(`${w.success} Updated to v${o}`),t){y({updated:!0,from:je,to:o});return}c(),console.log(` ${ji.default.dim("Restart your terminal or run")} domani --version ${ji.default.dim("to verify")}`),c()}catch(n){u(`Update failed: ${n instanceof Error?n.message:String(n)}`)}}var ps=D(require("fs"),1),pa=D(require("path"),1),ha=D(require("os"),1);Ue();var Si=D(F(),1);L();async function ga(){let e=process.argv[1],t=e?ps.default.realpathSync(e):null,i=pa.default.join(ha.default.homedir(),".domani");if(c(),console.log(` ${Si.default.bold("This will remove:")}`),t&&console.log(` ${w.dot} CLI binary: ${Si.default.dim(t)}`),console.log(` ${w.dot} Config dir: ${Si.default.dim(i)}`),c(),await Xe({message:"Uninstall domani?"})!==!0){console.log(` ${Si.default.dim("Cancelled.")}`);return}ps.default.rmSync(i,{recursive:!0,force:!0}),t&&ps.default.unlinkSync(t),c(),console.log(` ${w.success} domani uninstalled.`),c()}G();var oe=D(F(),1);L();async function ba(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 ve(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){y(a,s);return}e?su(e,a):iu(a.commands)}function iu(e){j("Commands");let t=Object.entries(e).map(([i,s])=>[oe.default.bold(oe.default.cyan(i)),s.description]);B(["Command","Description"],t,[20,50]),c(),console.log(` ${oe.default.dim("Run")} ${oe.default.cyan("domani schema <command>")} ${oe.default.dim("for full details")}`),c()}function su(e,t){if(j(`domani ${e}`),console.log(` ${t.description}`),c(),console.log(` ${v.label("Usage:")} ${oe.default.cyan(t.usage)}`),t.arguments&&Object.keys(t.arguments).length>0){c(),console.log(` ${oe.default.bold("Arguments")}`);for(let[i,s]of Object.entries(t.arguments)){let n=s.required?oe.default.red("*"):"",r=oe.default.dim(`(${s.type}${s.variadic?", variadic":""})`);console.log(` ${oe.default.cyan(i)}${n} ${r}`),s.description&&console.log(` ${oe.default.dim(s.description)}`)}}if(t.options&&Object.keys(t.options).length>0){c(),console.log(` ${oe.default.bold("Options")}`);for(let[i,s]of Object.entries(t.options)){let n=s.required?oe.default.red("*"):"",r=oe.default.dim(`(${s.type})`),o=s.choices?oe.default.dim(` [${s.choices.join(", ")}]`):"";console.log(` ${oe.default.cyan(`--${i}`)}${n} ${r}${o}`),console.log(` ${oe.default.dim(s.description)}`)}}if(t.api)if(c(),console.log(` ${oe.default.bold("API")}`),nu(t.api))ya(t.api);else for(let[i,s]of Object.entries(t.api))console.log(` ${oe.default.bold(oe.default.yellow(i))}`),ya(s,6);t.errors&&t.errors.length>0&&(c(),console.log(` ${oe.default.bold("Errors")}`),console.log(` ${t.errors.map(i=>oe.default.dim(i)).join(oe.default.dim(", "))}`)),c()}function nu(e){return typeof e=="object"&&e!==null&&"method"in e&&"path"in e}function ya(e,t=4){let i=" ".repeat(t);if(console.log(`${i}${oe.default.green(e.method)} ${oe.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?oe.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=oe.default.dim(`(${o.join(", ")})`);console.log(`${i} ${oe.default.cyan(s)}${r} ${a}`),n.description&&console.log(`${i} ${oe.default.dim(n.description)}`)}}G();var Ve=D(F(),1);Ue();L();async function wa(e){let t=C(!e.json);t.start("Loading payment method");let i=await _("/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(""),y(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"),c(),console.log(` ${Ve.default.dim("Add a card with")} ${Ve.default.cyan("domani card add")}`),c();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"),j("Payment method"),d("Card",`${Ve.default.bold(f)} \u2022\u2022\u2022\u2022 ${Ve.default.bold(r)}`),d("Expires",l),c(),console.log(` ${Ve.default.dim("Update with")} ${Ve.default.cyan("domani card add")}`),c()}async function va(e){let t=C(!e?.json);t.start("Setting up payment session");let i=await _("/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){y({url:s.url},e?.fields);return}c(),console.log(` ${Ve.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${Ve.default.dim("Complete payment setup in your browser.")}`),console.log(` ${Ve.default.dim(" After setup, you can purchase domains with")} ${Ve.default.cyan("domani buy")}`),c()}async function $a(e){if(!e?.yes&&!e?.json){let n=await Xe({message:"Remove your saved payment method?"});if(ce(n)||!n){console.log(` ${Ve.default.dim("Cancelled.")}`);return}}let t=C(!e?.json);t.start("Removing payment method");let i=await _("/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(`${w.success} Payment method removed`),e?.json){y({removed:!0},e?.fields);return}c(),console.log(` ${Ve.default.dim("Add a new card with")} ${Ve.default.cyan("domani card add")}`),c()}var Wn=D(F(),1);G();L();async function pe(e,t,i,s){let n=C(!i.json);n.start(s);let r=await _(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(`${w.success} Done`),o}async function ka(e,t){if(!e||e==="list"){let i=await pe("/api/workspaces",void 0,t,"Loading workspaces");if(t.json)return y(i,t.fields);if(c(),j("Workspaces"),!i.workspaces.length){console.log(` ${Wn.default.dim("No workspaces yet.")}`),R("Create one:","domani workspace create --name Acme");return}B(["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]),c();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 pe("/api/workspaces",{method:"POST",body:JSON.stringify({name:t.name})},t,"Creating workspace");if(t.json)return y(i,t.fields);c(),j("Workspace Created"),d("ID",i.id),d("Name",i.name),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}`,void 0,t,"Loading workspace");if(t.json)return y(i,t.fields);c(),j(i.name),d("Role",i.role),d("Mailboxes",i.mailboxes.length),d("Members",i.members.length),c(),B(["Email","Role","Mailbox grants"],i.members.map(s=>[s.email,s.role,String(s.mailbox_grants.length)]),[42,12,16]),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/access`,void 0,t,"Loading access graph");if(t.json)return y(a,t.fields);c(),j("Access Graph"),d("Principals",a.principals.length),d("Mailboxes",a.mailboxes.length),d("Groups",a.groups.length),d("Collections",a.collections.length),d("Active grants",a.grants.length),d("Pending offers",a.offers.length),c();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 pe(`/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 y(o,t.fields);c(),j(t.apply?"Access Applied":"Access Plan"),d("Action",o.action),d("Changed",String(o.changed)),o.grant_id&&d("Grant",o.grant_id),c();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 pe(`/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 y(s,t.fields);c(),j("Access Group Synced"),d("ID",s.id),d("Principals",s.principal_count),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Collection Synced"),d("ID",i.id),d("Mailboxes",i.mailbox_count),c();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 pe(`/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 y(s,t.fields);c(),j("Access Offered"),d("Email",s.email),d("Expires",s.expires_at),c();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 pe("/api/workspaces/access/offers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting access offer");if(t.json)return y(i,t.fields);c(),j("Access Accepted"),d("Workspace",i.workspace_name),d("Ownership",i.ownership),c();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 pe(`/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 y(i,t.fields);c(),j("Access Revoked"),d("Grant",i.grant_id),d("Version",i.version),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}`,{method:"PATCH",body:JSON.stringify({name:t.name})},t,"Renaming workspace");if(t.json)return y(i,t.fields);c(),j("Workspace Renamed"),d("ID",i.id),d("Name",i.name),c();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 pe(`/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 y(i,t.fields);c(),j("Invitation Sent"),d("Email",i.email),d("Role",i.role),d("Expires",i.expires_at),c();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 pe("/api/workspaces/invitations/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting invitation");if(t.json)return y(i,t.fields);c(),j("Workspace Joined"),d("Workspace",i.workspace_name),d("Role",i.role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/invitations/${encodeURIComponent(t.invitationId)}`,{method:"DELETE"},t,"Revoking invitation");if(t.json)return y(i,t.fields);c(),j("Invitation Revoked"),d("Invitation",i.invitation_id),c();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 pe(`/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 y(i,t.fields);c(),j("Member Updated"),d("Membership",i.id),d("Role",i.role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"DELETE"},t,"Removing member and revoking access");if(t.json)return y(i,t.fields);c(),j("Member Removed"),d("Membership",i.membership_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/members/me`,{method:"DELETE"},t,"Leaving workspace and revoking access");if(t.json)return y(i,t.fields);c(),j("Workspace Left"),d("Workspace",i.workspace_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer`,{method:"POST",body:JSON.stringify({membership_id:t.membershipId})},t,"Requesting ownership transfer");if(t.json)return y(i,t.fields);c(),j("Ownership Transfer Requested"),d("To",i.to_email),d("Expires",i.expires_at),d("Billing",i.billing),c();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 pe("/api/workspaces/ownership-transfers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting ownership");if(t.json)return y(i,t.fields);c(),j("Ownership Transferred"),d("Workspace",i.workspace_id),d("Domains",i.domains_transferred),d("Mailboxes",i.mailboxes_transferred),d("Previous owner",i.previous_owner_role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer/${encodeURIComponent(t.transferId)}`,{method:"DELETE"},t,"Revoking ownership transfer");if(t.json)return y(i,t.fields);c(),j("Ownership Transfer Revoked"),d("Transfer",i.transfer_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes`,{method:"POST",body:JSON.stringify({mailbox_id:t.mailboxId})},t,"Adopting mailbox boundary");if(t.json)return y(i,t.fields);c(),j(i.adopted?"Mailbox Boundary Adopted":"Already in Workspace"),d("Address",i.address),d("Mailboxes",i.mailbox_ids?.length??1),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Access Granted"),d("Membership",i.membership_id),d("Mailbox",i.mailbox_id),d("Role",i.role),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Access Revoked"),d("Membership",i.membership_id),d("Mailbox",i.mailbox_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/billing/checkout`,{method:"POST",body:JSON.stringify({plan:t.plan})},t,"Creating secure checkout");if(t.json)return y(i,t.fields);c(),j("Workspace Checkout"),d("Plan",i.plan),d("URL",i.url),c(),i.url&&t.open!==!1&&(console.log(` ${Wn.default.dim("Opening browser")} ${w.arrow} ${v.url(i.url)}`),qe(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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/billing/cancel`,{method:"POST"},t,"Scheduling cancellation");if(t.json)return y(i,t.fields);c(),j("Cancellation Scheduled"),d("Message",i.message),i.cancel_at&&d("Cancels",i.cancel_at),c();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 bs=D(F(),1);G();var hs=D(require("node:crypto"),1),ai=D(require("node:fs"),1),_a=D(require("node:os"),1),gs=D(require("node:path"),1),ru=process.env.DOMANI_CONFIG_DIR||gs.default.join(_a.default.homedir(),".domani"),xa=gs.default.join(ru,"mutations");function ou(e){return gs.default.join(xa,`${hs.default.createHash("sha256").update(e).digest("hex")}.json`)}function ut(e,t,i){let s=ou(e),n=hs.default.createHash("sha256").update(JSON.stringify(t)).digest("hex");if(!i)try{let o=JSON.parse(ai.default.readFileSync(s,"utf8"));if(o.key&&o.fingerprint===n)return{key:o.key,complete:()=>{try{ai.default.unlinkSync(s)}catch{}}}}catch{}let r=i||`cli-${hs.default.randomUUID()}`;return ai.default.mkdirSync(xa,{recursive:!0,mode:448}),ai.default.writeFileSync(s,JSON.stringify({key:r,fingerprint:n}),{mode:384}),{key:r,complete:()=>{try{ai.default.unlinkSync(s)}catch{}}}}L();function ja(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 Bt(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 ys(e,t){if(t.json)return y(e,t.fields);let i=e.http_route||e;c(),j("HTTP Route"),d("ID",i.id),d("URL",i.url),d("Upstream",i.upstream),d("Status",i.status),d("Expires",i.expires_at),d("Browser mode",i.browser_mode||"stateless"),i.upstream_verification?.secret&&(d("Verification secret",bs.default.yellow(i.upstream_verification.secret)),console.log(bs.default.dim(" Save this secret now. It will not be shown again after this receipt."))),c()}async function Sa(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 Bt(await _(`/api/http-routes${s.size?`?${s}`:""}`),i);if(i.json)return y(n,i.fields);c(),j("HTTP Routes");for(let r of n.http_routes)console.log(` ${bs.default.dim(r.id)} ${r.hostname} ${r.status} ${r.upstream}`);c();return}if(e==="create"){i.upstream||u("--upstream is required",{code:"validation_error",json:i.json});let s=ja(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=ut(`route:create:${i.hostname||"auto"}`,n,i.idempotencyKey),o=C(!i.json);o.start("Creating HTTP route");let a=await Bt(await _("/api/http-routes",{method:"POST",headers:{"Idempotency-Key":r.key},body:JSON.stringify(n)}),i);return r.complete(),o.stop(`${w.success} HTTP route created`),ys(a,i)}if(t||u("Route ID is required",{hint:`Usage: domani route ${e} <id>`,code:"validation_error",json:i.json}),e==="get")return ys(await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}`),i),i);if(e==="delete"){let s=await _(`/api/http-routes/${encodeURIComponent(t)}`,{method:"DELETE"});if(s.ok||await Bt(s,i),i.json)return y({deleted:!0,id:t},i.fields);console.log(`${w.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=ut(`route:refresh:${t}`,s,i.idempotencyKey),r=await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}`,{method:"PATCH",headers:{"Idempotency-Key":n.key},body:JSON.stringify(s)}),i);return n.complete(),ys(r,i)}if(e==="rotate-verification"){let s=ut(`route:rotate-verification:${t}`,{},i.idempotencyKey),n=await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}/upstream-verification/rotate`,{method:"POST",headers:{"Idempotency-Key":s.key}}),i);return s.complete(),i.json?y(n,i.fields):ys(n,i)}if(e==="rotate-headers"){let s=ja(i);s||u("Provide an upstream header environment variable or --clear-upstream-headers",{code:"validation_error",json:i.json});let n=ut(`route:rotate-headers:${t}`,{upstream_headers:s},i.idempotencyKey),r=await Bt(await _(`/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 y(r,i.fields);console.log(`${w.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 le=D(F(),1),Ra=require("node:fs");G();L();var Jn="mailzero-personal-ai.v1",Q=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AssistantUsageError"}},au={choose:"choose",instruct:"instruct","take-over":"take_over",snooze:"snooze",ignore:"ignore",correct:"correct",approve:"approve",reject:"reject"},lu=["today","settings","set","preview","backfill","retry","item","choose","instruct","snooze","ignore","take-over","correct","approve","reject","plan","activity","export","delete","brief","facts","task","lease","release","effects","escalate","report","rules","approvals","suggestions","metrics"];function Hn(e,t,i){if(!e)throw new Q(`${t} is required`,i);try{return JSON.parse(e)}catch{throw new Q(`${t} must be valid JSON`,i)}}function Ca(e){return(e||"").split(",").map(t=>t.trim()).filter(Boolean)}function Oa(e){return(e||"").split(",").map(t=>t.trim()).filter(Boolean)}function Gt(e,t,i){let s=Number(e);if(!Number.isInteger(s)||s<i)throw new Q(`${t} must be an integer of at least ${i}`);return s}function du(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 Q("Use either --enable or --disable");if(i.pause&&i.resume)throw new Q("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=Oa(i.mailboxes)),i.days!==void 0&&(n.history_window_days=Gt(i.days,"--days",1)),i.attachmentVision!==void 0){if(!["on","off"].includes(i.attachmentVision))throw new Q("--attachment-vision must be on or off");n.attachment_vision=i.attachmentVision==="on"}if(!Object.keys(n).length)throw new Q("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 Q("--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 ${Jn}). Nothing is ever sent on your behalf. You can pause or delete derived data at any time.`);let n=Oa(i.mailboxes);if(!n.length)throw new Q("--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:Gt(i.days,"--days",1),consent:!0,consent_version:Jn}}}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 Q("Work item ID is required","Usage: domani assistant item <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}`};case"brief":{if(t)return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}/brief`};if(!i.correspondent)throw new Q("Work item ID or --correspondent is required","Usage: domani assistant brief <id> | domani assistant brief --correspondent ada@example.com [--mailbox hi@myapp.dev]");let n=new URLSearchParams({correspondent:i.correspondent});return i.mailbox&&n.set("mailbox",i.mailbox),{method:"GET",path:`/api/assistant/brief?${n}`}}case"facts":if(!t)throw new Q("Work item ID is required","Usage: domani assistant facts <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}/facts`};case"plan":if(!t)throw new Q("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=${Gt(i.limit,"--limit",1)}`:""}`};case"rules":return{method:"GET",path:"/api/assistant/rules"};case"approvals":return{method:"GET",path:"/api/assistant/approvals"};case"suggestions":return{method:"GET",path:"/api/assistant/suggestions"};case"metrics":return{method:"GET",path:`/api/assistant/metrics${i.days!==void 0?`?window_days=${Gt(i.days,"--days",1)}`:""}`};case"export":return{method:"GET",path:"/api/assistant/data"};case"delete":if(!i.yes)throw new Q("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"task":if(!t)throw new Q("Task ID is required","Usage: domani assistant task <work item id>");return{method:"GET",path:`/api/assistant/tasks/${encodeURIComponent(t)}`};case"lease":{if(!t)throw new Q("Task ID is required","Usage: domani assistant lease <id> [--ttl <seconds>]");let n={};return i.ttl!==void 0&&(n.ttl_seconds=Gt(i.ttl,"--ttl",30)),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/lease`,body:n}}case"release":if(!t)throw new Q("Task ID is required","Usage: domani assistant release <id>");return{method:"DELETE",path:`/api/assistant/tasks/${encodeURIComponent(t)}/lease`};case"effects":{if(!t)throw new Q("Task ID is required","Usage: domani assistant effects <id> --effects '<json array>'");let n=Hn(i.effects,"--effects",`A JSON array of effects, for example: --effects '[{"kind":"label","mailbox_id":"mbx_1","add":["finance"]}]'`);if(!Array.isArray(n)||!n.length)throw new Q("--effects must be a non-empty JSON array","Kinds: reply, forward, label, snooze, resolve, note, request");let r={effects:n};return i.text&&(r.note=i.text),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/effects`,body:r,idempotency:`assistant:effects:${t}`}}case"escalate":{if(!t)throw new Q("Task ID is required","Usage: domani assistant escalate <id> --question '<text>' [--options '<json>'] [--evidence <refs>]");if(!i.question)throw new Q("--question is required","What the owner must decide, with the evidence in --evidence");let n={question:i.question};i.options&&(n.options=Hn(i.options,"--options","A JSON array of { key, label, outcome }"));let r=Ca(i.evidence);return r.length&&(n.evidence_refs=r),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/escalate`,body:n}}case"report":{if(!t)throw new Q("Task ID is required","Usage: domani assistant report <id> --outcome done|blocked|handed_back --summary '<text>' [--claims '<json>'] [--evidence <refs>]");if(!i.outcome||!["done","blocked","handed_back"].includes(i.outcome))throw new Q("--outcome must be done, blocked or handed_back");if(!i.summary)throw new Q("--summary is required","What was done and how it ended, in a few lines");let n={outcome:i.outcome,summary:i.summary};i.claims&&(n.claims=Hn(i.claims,"--claims","A JSON array of { kind, ref } the platform reconciles with its receipts"));let r=Ca(i.evidence);return r.length&&(n.evidence_refs=r),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/report`,body:n}}case"choose":case"instruct":case"snooze":case"ignore":case"take-over":case"correct":case"approve":case"reject":{if(!t)throw new Q("Work item ID is required",`Usage: domani assistant ${s} <id> --item-version <work_item_version>`);if(i.itemVersion===void 0)throw new Q("--item-version is required","Pass the work_item_version shown by: domani assistant item <id>");let n=au[s],r={type:n,work_item_version:Gt(i.itemVersion,"--item-version",1)};if(n==="ignore"&&i.scope){if(!["item","sender","sender_domain","situation"].includes(i.scope))throw new Q("--scope must be item, sender, sender_domain or situation","Example: domani assistant ignore <id> --item-version 3 --scope sender");r.scope=i.scope}if(n==="choose"){if(!i.option||!i.decision||i.decisionVersion===void 0)throw new Q("--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=Gt(i.decisionVersion,"--decision-version",1),r.option_id=i.option}if(n==="instruct"){if(!i.text)throw new Q("--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 Q("--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 Q("--field and --text are required","Name the analysis field to correct and the correct value");r.field=i.field,r.correction=i.text}if(n==="approve"||n==="reject"){if(!i.plan)throw new Q("--plan is required","The waiting action plan shown by: domani assistant task <id>");r.plan_id=i.plan,n==="reject"&&i.text&&(r.reason=i.text)}return{method:"POST",path:`/api/assistant/work-items/${encodeURIComponent(t)}/interactions`,body:r,idempotency:`assistant:${n}:${t}`}}default:throw new Q(`Unknown action: ${s}`,`Actions: ${lu.join(", ")}`)}}async function cu(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 uu(e){let t=e.sender?.name||e.sender?.address?.split("@")[0]||e.mailbox?.name||e.mailbox?.address||"",i=e.recurrence?.count&&e.recurrence.count>1?le.default.dim(`x${e.recurrence.count}`):"";return[le.default.dim(e.id),t,`${(e.title||e.summary||"").slice(0,60)} ${i}`.trim(),e.ask?e.ask.slice(0,50):e.attention?.deadline||""]}function mu(e,t){if(t.json)return y(e,t.fields);c(),j("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(` ${le.default.bold(o)} ${le.default.dim(`(${l.length})`)}`),B(["ID","Who","Summary","Deadline"],l.map(uu)),c())}s||console.log(le.default.dim(" Nothing needs you right now."));let n=typeof e.as_of=="string"?e.as_of:void 0;n&&console.log(le.default.dim(` As of ${n}`)),c()}function fu(e,t){if(t.json)return y(e,t.fields);let i=e.brief??e;if(e.correspondent&&!e.brief){c(),j(`Brief for ${e.correspondent}`),console.log(` ${le.default.dim("Nothing analysed from this person yet.")}`);for(let s of e.recent_mail||[])d(s.received_at.slice(0,10),`${s.subject||""} (${s.mailbox})`);return}c(),j(i.title||"Brief"),i.situation&&d("Status",`${i.situation.status||""}${i.situation.attention?.level?` \xB7 ${i.situation.attention.level}`:""}${i.situation.occurrences&&i.situation.occurrences>1?` \xB7 ${i.situation.occurrences} messages`:""}`),i.situation?.sender?.address&&d("With",`${i.situation.sender.name?`${i.situation.sender.name} `:""}<${i.situation.sender.address}>`),i.summary&&d("Summary",i.summary),i.ask&&d("Ask",i.ask);for(let s of i.story||[])d(s.occurred_at.slice(0,10),`${s.title}${s.analysed?"":le.default.dim(" (not analysed)")}`);for(let s of i.facts||[])d("Fact",`${s.subject||""} ${s.predicate||""} ${s.value?.value??s.object??""}${s.value?.currency?` ${s.value.currency}`:""}`.trim());for(let s of i.awaiting||[])d(s.overdue?le.default.red("Awaited"):"Awaited",`${s.who}: ${s.what} (since ${s.since.slice(0,10)})`);for(let s of i.commitments||[])d(s.overdue?le.default.red("Promised"):"Promised",`${s.who}: ${s.what}`);for(let s of(i.settled||[]).slice(0,5))d("Settled",`${s.what} (${s.status}, ${s.at.slice(0,10)})`);i.decision?.question&&d("Decision",`${i.decision.question} ${(i.decision.options||[]).map(s=>`${s.recommended?"\u2605 ":""}${s.label}`).join(" / ")}`),i.suggested_next&&d("Next",`${i.suggested_next.action} ${le.default.dim(`(${i.suggested_next.reason})`)}`),e.related&&e.related.length&&d("Also",`${e.related.length} other item(s) from this person`)}function Ia(e,t){if(t.json)return y(e,t.fields);let i=e.work_item||e;if(c(),j("Work item"),d("ID",i.id),d("Version",String(i.version??"")),d("Status",i.status||""),d("Mailbox",i.mailbox?.name?`${i.mailbox.name} <${i.mailbox.address||""}>`:i.mailbox?.address||""),i.title&&d("Title",i.title),i.sender?.address&&d("From",`${i.sender.name?`${i.sender.name} `:""}<${i.sender.address}>${i.sender.kind&&i.sender.kind!=="human"?` (${i.sender.kind})`:""}`),i.ask&&d("Ask",i.ask),i.recurrence?.count&&i.recurrence.count>1&&d("Recurrence",`${i.recurrence.count} messages since ${(i.recurrence.first_seen_at||"").slice(0,10)}`),d("Summary",i.summary||""),i.attention?.reason&&d("Why",i.attention.reason),i.attention?.deadline&&d("Deadline",i.attention.deadline),i.source?.event_id&&d("Source",`${i.source.type||"mail"} ${i.source.event_id}`),i.decision?.options?.length){c(),console.log(` ${le.default.bold("Decision")} ${le.default.dim(`${i.decision.id} v${i.decision.version??1}`)}`);for(let s of i.decision.options)console.log(` ${le.default.dim(s.id)} ${s.label}${s.recommended?le.default.green(" recommended"):""}`);console.log(le.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&&d("Plan",`${i.plan.id} (preview with: domani assistant plan ${i.plan.id})`),c()}function pu(e,t){if(t.json)return y(e,t.fields);c(),j("Mailzero assistant"),d("Enabled",e.enabled?"yes":"no"),d("Shadow",e.shadow_enabled?"yes":"no"),d("Paused",e.paused?"yes":"no"),d("History window",`${e.history_window_days} days`),d("Privacy route",String(e.privacy_route||"")),d("Consent",e.consent?.accepted_version?`${e.consent.accepted_version} at ${e.consent.accepted_at}`:`none (required: ${e.consent?.required_version||Jn})`),c();let i=new Set(e.mailbox_ids||[]),s=e.mailboxes||[];s.length&&B(["ID","Address","AI"],s.map(n=>[le.default.dim(n.id),n.address,i.has(n.id)?le.default.green("on"):le.default.dim("off")])),c()}function hu(e,t){if(t.json)return y(e,t.fields);let i=e.backfill;if(c(),j("History import"),!i){console.log(le.default.dim(" No import has run yet.")),c();return}d("Status",`${i.status} (${i.phase})`),d("Progress",`${i.processed}/${i.total}${i.percent===null||i.percent===void 0?"":` (${i.percent}%)`}`),d("Failed",String(i.failed??0)),d("Paused",i.paused?"yes":"no"),i.estimated_completion_at&&d("ETA",i.estimated_completion_at),i.can_close_app&&console.log(le.default.dim(" The import continues in the background.")),c()}function gu(e,t){if(t.json)return y(e,t.fields);let i=e.action_plan||e.plan||e;c(),j("Action preview"),d("ID",i.id),d("Status",i.status||""),i.expires_at&&d("Expires",i.expires_at);for(let s of i.effects||[])c(),console.log(` ${le.default.bold(s.kind||"effect")} ${le.default.dim(`mailbox ${s.mailbox_id||""}`)}${s.reply_to_message_id?le.default.dim(` in reply to ${s.reply_to_message_id}`):""}`),s.body&&console.log(`
|
|
206
|
+
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 ${ke.default.dim(l)}`);let f=await _(`/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(""),y(m,i.fields);return}s.stop(`${w.success} Transfer code submitted for ${v.domain(e)}`),j("Transfer Code Submitted"),d("Domain",v.domain(e)),d("Deal",ke.default.dim(l)),d("Status",ke.default.green(m.status||"code_submitted")),c(),R("Track the deal:",`domani deals ${l}`),c()}G();var _e=D(F(),1);L();async function ta(e,t){return e?Gc(e,t):Bc(t)}async function Bc(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 _(`/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(`${w.success} ${o.length} deal(s)`),e.json){y(r,e.fields);return}if(o.length===0){c(),console.log(` ${_e.default.dim("No deals found.")}`),c(),R("List a domain for sale:","domani sell <domain> --price <amount>"),c();return}c(),j("Deals");let a=o.map(l=>{let f=l.status==="completed"?_e.default.green:l.status==="active"?_e.default.cyan:l.status==="cancelled"?_e.default.red:_e.default.yellow;return[v.domain(l.domain),v.price(l.price),f(l.status),_e.default.dim(l.role||"-"),_e.default.dim(new Date(l.created_at).toLocaleDateString())]});B(["Domain","Price","Status","Role","Created"],a,[28,12,14,10,14]),c()}async function Gc(e,t){let i=C(!t.json);i.start(`Loading deal ${_e.default.dim(e)}`);let s=await _(`/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(`${w.success} Deal loaded`),t.json){y(n,t.fields);return}let r=n.deal||n;j("Deal Details"),d("ID",_e.default.dim(r.id)),d("Domain",v.domain(r.domain)),d("Price",v.price(r.price));let o=r.status==="completed"?_e.default.green:r.status==="active"?_e.default.cyan:r.status==="cancelled"?_e.default.red:_e.default.yellow;d("Status",o(r.status)),r.role&&d("Your Role",r.role),r.buyer&&d("Buyer",_e.default.dim(r.buyer)),r.seller&&d("Seller",_e.default.dim(r.seller)),r.created_at&&d("Created",_e.default.dim(new Date(r.created_at).toLocaleDateString())),r.updated_at&&d("Updated",_e.default.dim(new Date(r.updated_at).toLocaleDateString())),c();let a=r.events||[];if(a.length>0){j("Timeline");for(let l of a){let f=_e.default.dim(new Date(l.created_at).toLocaleString()),m=l.status==="completed"?w.success:l.status==="expired"||l.status==="refunded"?w.error:w.info;console.log(` ${m} ${f} ${l.detail||l.status}`)}c()}(r.status==="escrow_held"||r.status==="epp_pending")&&r.role==="seller"&&(R("Submit transfer code:",`domani sell ${r.domain} --transfer-code <code>`),c())}G();var Le=D(F(),1);L();be();async function na(e,t,i){switch(e){case void 0:case"list":case"ls":return Kc(i);case"request":case"acquire":case"new":return ia(t,i);case"status":case"get":return sa(t,i);case"cancel":case"rm":return zc(t,i);default:return e.includes(".")?ia(e,i):sa(e,i)}}async function ia(e,t){e||u("A domain is required.",{hint:"domani broker request dream.com --max-budget 5000",json:t.json}),Y(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 _("/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(`${w.success} Acquisition requested`),t.json)return y(r,t.fields);j("Broker request"),d("Domain",v.domain(o.domain)),d("Status",Fn(o.status)),o.max_budget!=null&&d("Max budget",v.price(o.max_budget)),d("ID",Le.default.dim(o.id)),c(),console.log(` ${Le.default.dim("We'll source the owner and reach out anonymously. Commission-only - you pay nothing unless a deal closes.")}`),c(),R("Check progress:",`domani broker status ${o.id}`),c()}async function Kc(e){let t=C(!e.json);t.start("Loading broker requests");let i=e.status?`?status=${encodeURIComponent(e.status)}`:"",s=await _(`/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(`${w.success} ${r.length} request(s)`),e.json)return y(n,e.fields);if(r.length===0){c(),console.log(` ${Le.default.dim("No broker requests yet.")}`),c(),R("Acquire a taken domain:","domani broker request <domain> --max-budget <amount>"),c();return}c(),j("Broker requests"),B(["Domain","Status","Budget","ID"],r.map(o=>[v.domain(o.domain),Fn(o.status),o.max_budget!=null?v.price(o.max_budget):Le.default.dim("-"),Le.default.dim(o.id)])),c()}async function sa(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 _(`/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(`${w.success} ${v.domain(r.domain)}`),t.json)return y(n,t.fields);j("Broker request"),d("Domain",v.domain(r.domain)),d("Status",Fn(r.status)),r.max_budget!=null&&d("Max budget",v.price(r.max_budget)),d("Contacted",r.contacted?Le.default.green("yes"):Le.default.dim("not yet")),r.failure_reason&&d("Reason",Le.default.yellow(r.failure_reason)),d("ID",Le.default.dim(r.id)),c(),r.negotiation_id?(console.log(` ${Le.default.dim("The owner responded - an anonymous negotiation is open.")}`),c(),R("Review the offer:","domani deals"),c()):["sourcing","contacted","negotiating"].includes(r.status)&&(R("Cancel this request:",`domani broker cancel ${r.id}`),c())}async function zc(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 _(`/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(`${w.success} Request cancelled`),t.json)return y(n,t.fields);c()}function Fn(e){return["completed","agreed"].includes(e)?Le.default.green(e):["negotiating","contacted","sourcing"].includes(e)?Le.default.cyan(e):["declined","no_contact","failed","expired","cancelled"].includes(e)?Le.default.dim(e):e}G();var we=D(F(),1);L();async function oa(e){return e.read?Xc(e):Yc(e)}async function Yc(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 _(`/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(`${w.success} ${o.length} notification(s)${a>0?` ${w.dot} ${we.default.yellow(`${a} unread`)}`:""}`),e.json){y(r,e.fields);return}if(o.length===0){c(),console.log(` ${we.default.dim("No notifications.")}`),c();return}c(),j("Notifications");let l=o.map(f=>{let m=f.read?we.default.dim(w.dot):we.default.cyan(w.info),h=Zc(f.type),b=f.read?we.default.dim(f.title):we.default.white(f.title),k=f.body?f.read?we.default.dim(ra(f.body,40)):we.default.dim(ra(f.body,40)):we.default.dim("-"),$=we.default.dim(new Date(f.created_at).toLocaleDateString());return[m,h,b,k,$]});B(["","Type","Title","Body","Date"],l,[3,16,28,42,14]),c(),a>0&&(console.log(` ${we.default.dim("Mark all as read:")} ${we.default.cyan("domani notifications --read")}`),c())}async function Xc(e){let t=C(!e.json);t.start("Marking all notifications as read");let i=await _("/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(""),y(s,e.fields);return}let n=s.count??0;t.stop(`${w.success} ${n} notification(s) marked as read`),c()}function Zc(e){let t={deal:we.default.cyan,sale:we.default.green,purchase:we.default.green,transfer:we.default.yellow,expiry:we.default.red,security:we.default.red,billing:we.default.yellow,email:we.default.blue},i=e.split(".")[0].split("_")[0];return(t[i]||we.default.dim)(e)}function ra(e,t){return e.length<=t?e:e.slice(0,t-1)+"\u2026"}G();var Rt=D(F(),1);L();async function aa(e){let t=e.limit?Number(e.limit):20,i=await _(`/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){y({...s,count:s.invoices.length},e.fields);return}if(s.invoices.length===0){console.log(` ${Rt.default.dim("No invoices yet.")}`);return}j(`Invoices (${s.invoices.length})`),c();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(` ${w.success} ${Rt.default.bold(a)} ${Rt.default.green(r)} ${Rt.default.dim(o)}`),n.description&&console.log(` ${Rt.default.dim(n.description)}`),n.hosted_invoice_url&&console.log(` ${Rt.default.dim(n.hosted_invoice_url)}`)}c(),s.has_more&&(console.log(` ${Rt.default.dim(`Showing ${s.invoices.length} most recent. Use --limit to see more.`)}`),c())}G();var xi=D(F(),1);L();async function la(e){let t=C(!e?.json);t.start("Setting up billing session");let i=await _("/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){y({url:s.url});return}c(),console.log(` ${xi.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${xi.default.dim("Complete payment setup in your browser.")}`),console.log(` ${xi.default.dim(" After setup, you can purchase domains with")} ${xi.default.cyan("domani buy")}`),c()}G();var Ln=D(F(),1);L();async function da(e){let t=C(!e?.json);t.start("Creating upgrade session");let i=await _("/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){y({url:s.url},e?.fields);return}c(),console.log(` ${Ln.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${Ln.default.dim("Complete your plan upgrade in the browser.")}`),c()}G();var Vn=D(F(),1);L();async function ca(e){let t=C(!e?.json);t.start("Cancelling subscription");let i=await _("/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){y(s,e?.fields);return}c();let n=s.cancel_at?new Date(s.cancel_at).toLocaleDateString():"end of billing period";console.log(` ${w.success} ${Vn.default.dim("Subscription cancelled.")} Access continues until ${Vn.default.cyan(n)}.`),c()}G();var nt=D(F(),1);L();be();Ze();async function ua(e,t,i){e||(e=await he()),Y(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 eu(e,s,i);return}await Qc(e,i)}async function Qc(e,t){let i=C(!t.json);i.start(`Fetching nameservers for ${v.domain(e)}`);let s=await _(`/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){y(n,t.fields);return}if(c(),n.nameservers.length===0)console.log(` ${w.warning} ${nt.default.yellow("No nameservers configured.")}`),console.log(` ${nt.default.dim("DNS operations (parking, email, connect) will not work.")}`),c(),R("Set default nameservers:",`domani nameservers ${e} --reset`);else{j("Nameservers");for(let r of n.nameservers)console.log(` ${w.success} ${nt.default.cyan(r)}`);n.default_nameservers&&n.nameservers.length===n.default_nameservers.length&&n.nameservers.every(o=>n.default_nameservers.includes(o))&&(c(),console.log(` ${nt.default.dim("Using default nameservers.")}`))}n.default_nameservers?.length&&(c(),d("Defaults",n.default_nameservers.map(r=>nt.default.dim(r)).join(nt.default.dim(", ")))),c()}async function eu(e,t,i){let s=C(!i.json);if(i.reset){s.start(`Fetching default nameservers for ${v.domain(e)}`);let o=await _(`/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=>nt.default.cyan(l)).join(nt.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 K("nameservers_set",{domain:e,nameservers:t},i.json,i.fields);s.start(`Setting nameservers for ${v.domain(e)}`);let n=await _(`/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(`${w.success} Nameservers updated`),i.json){y(r,i.fields);return}c();for(let o of r.nameservers)console.log(` ${w.success} ${nt.default.cyan(o)}`);c(),console.log(` ${nt.default.dim("Changes may take up to 48 hours to propagate.")}`),c(),R("Check propagation:",`domani status ${e}`),c()}var ma=require("crypto"),fs=D(require("fs"),1);yt();var ji=D(F(),1);L();function tu(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 fa(e){let t=!!e?.json,i=C(!t);i.start("Checking for updates");let s=We();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(tu(o,je)<=0){i.stop(`${w.success} Already up to date (v${je})`),t&&y({current:je,latest:o,up_to_date:!0});return}if(t&&!e?.yes){i.stop(""),y({current:je,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: ${ji.default.cyan(je)} ${w.arrow} ${ji.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 h=await m.text();a&&(0,ma.createHash)("sha256").update(h).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=fs.default.realpathSync(b),$=k+".tmp";if(fs.default.writeFileSync($,h,{mode:493}),fs.default.renameSync($,k),l.stop(`${w.success} Updated to v${o}`),t){y({updated:!0,from:je,to:o});return}c(),console.log(` ${ji.default.dim("Restart your terminal or run")} domani --version ${ji.default.dim("to verify")}`),c()}catch(n){u(`Update failed: ${n instanceof Error?n.message:String(n)}`)}}var ps=D(require("fs"),1),pa=D(require("path"),1),ha=D(require("os"),1);Ue();var Si=D(F(),1);L();async function ga(){let e=process.argv[1],t=e?ps.default.realpathSync(e):null,i=pa.default.join(ha.default.homedir(),".domani");if(c(),console.log(` ${Si.default.bold("This will remove:")}`),t&&console.log(` ${w.dot} CLI binary: ${Si.default.dim(t)}`),console.log(` ${w.dot} Config dir: ${Si.default.dim(i)}`),c(),await Xe({message:"Uninstall domani?"})!==!0){console.log(` ${Si.default.dim("Cancelled.")}`);return}ps.default.rmSync(i,{recursive:!0,force:!0}),t&&ps.default.unlinkSync(t),c(),console.log(` ${w.success} domani uninstalled.`),c()}G();var ae=D(F(),1);L();async function ba(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 ve(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){y(a,s);return}e?su(e,a):iu(a.commands)}function iu(e){j("Commands");let t=Object.entries(e).map(([i,s])=>[ae.default.bold(ae.default.cyan(i)),s.description]);B(["Command","Description"],t,[20,50]),c(),console.log(` ${ae.default.dim("Run")} ${ae.default.cyan("domani schema <command>")} ${ae.default.dim("for full details")}`),c()}function su(e,t){if(j(`domani ${e}`),console.log(` ${t.description}`),c(),console.log(` ${v.label("Usage:")} ${ae.default.cyan(t.usage)}`),t.arguments&&Object.keys(t.arguments).length>0){c(),console.log(` ${ae.default.bold("Arguments")}`);for(let[i,s]of Object.entries(t.arguments)){let n=s.required?ae.default.red("*"):"",r=ae.default.dim(`(${s.type}${s.variadic?", variadic":""})`);console.log(` ${ae.default.cyan(i)}${n} ${r}`),s.description&&console.log(` ${ae.default.dim(s.description)}`)}}if(t.options&&Object.keys(t.options).length>0){c(),console.log(` ${ae.default.bold("Options")}`);for(let[i,s]of Object.entries(t.options)){let n=s.required?ae.default.red("*"):"",r=ae.default.dim(`(${s.type})`),o=s.choices?ae.default.dim(` [${s.choices.join(", ")}]`):"";console.log(` ${ae.default.cyan(`--${i}`)}${n} ${r}${o}`),console.log(` ${ae.default.dim(s.description)}`)}}if(t.api)if(c(),console.log(` ${ae.default.bold("API")}`),nu(t.api))ya(t.api);else for(let[i,s]of Object.entries(t.api))console.log(` ${ae.default.bold(ae.default.yellow(i))}`),ya(s,6);t.errors&&t.errors.length>0&&(c(),console.log(` ${ae.default.bold("Errors")}`),console.log(` ${t.errors.map(i=>ae.default.dim(i)).join(ae.default.dim(", "))}`)),c()}function nu(e){return typeof e=="object"&&e!==null&&"method"in e&&"path"in e}function ya(e,t=4){let i=" ".repeat(t);if(console.log(`${i}${ae.default.green(e.method)} ${ae.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?ae.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=ae.default.dim(`(${o.join(", ")})`);console.log(`${i} ${ae.default.cyan(s)}${r} ${a}`),n.description&&console.log(`${i} ${ae.default.dim(n.description)}`)}}G();var Ve=D(F(),1);Ue();L();async function wa(e){let t=C(!e.json);t.start("Loading payment method");let i=await _("/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(""),y(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"),c(),console.log(` ${Ve.default.dim("Add a card with")} ${Ve.default.cyan("domani card add")}`),c();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"),j("Payment method"),d("Card",`${Ve.default.bold(f)} \u2022\u2022\u2022\u2022 ${Ve.default.bold(r)}`),d("Expires",l),c(),console.log(` ${Ve.default.dim("Update with")} ${Ve.default.cyan("domani card add")}`),c()}async function va(e){let t=C(!e?.json);t.start("Setting up payment session");let i=await _("/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){y({url:s.url},e?.fields);return}c(),console.log(` ${Ve.default.dim("Opening browser")} ${w.arrow} ${v.url(s.url)}`),c(),qe(s.url),console.log(` ${w.info} ${Ve.default.dim("Complete payment setup in your browser.")}`),console.log(` ${Ve.default.dim(" After setup, you can purchase domains with")} ${Ve.default.cyan("domani buy")}`),c()}async function $a(e){if(!e?.yes&&!e?.json){let n=await Xe({message:"Remove your saved payment method?"});if(ce(n)||!n){console.log(` ${Ve.default.dim("Cancelled.")}`);return}}let t=C(!e?.json);t.start("Removing payment method");let i=await _("/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(`${w.success} Payment method removed`),e?.json){y({removed:!0},e?.fields);return}c(),console.log(` ${Ve.default.dim("Add a new card with")} ${Ve.default.cyan("domani card add")}`),c()}var Wn=D(F(),1);G();L();async function pe(e,t,i,s){let n=C(!i.json);n.start(s);let r=await _(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(`${w.success} Done`),o}async function ka(e,t){if(!e||e==="list"){let i=await pe("/api/workspaces",void 0,t,"Loading workspaces");if(t.json)return y(i,t.fields);if(c(),j("Workspaces"),!i.workspaces.length){console.log(` ${Wn.default.dim("No workspaces yet.")}`),R("Create one:","domani workspace create --name Acme");return}B(["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]),c();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 pe("/api/workspaces",{method:"POST",body:JSON.stringify({name:t.name})},t,"Creating workspace");if(t.json)return y(i,t.fields);c(),j("Workspace Created"),d("ID",i.id),d("Name",i.name),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}`,void 0,t,"Loading workspace");if(t.json)return y(i,t.fields);c(),j(i.name),d("Role",i.role),d("Mailboxes",i.mailboxes.length),d("Members",i.members.length),c(),B(["Email","Role","Mailbox grants"],i.members.map(s=>[s.email,s.role,String(s.mailbox_grants.length)]),[42,12,16]),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/access`,void 0,t,"Loading access graph");if(t.json)return y(a,t.fields);c(),j("Access Graph"),d("Principals",a.principals.length),d("Mailboxes",a.mailboxes.length),d("Groups",a.groups.length),d("Collections",a.collections.length),d("Active grants",a.grants.length),d("Pending offers",a.offers.length),c();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 pe(`/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 y(o,t.fields);c(),j(t.apply?"Access Applied":"Access Plan"),d("Action",o.action),d("Changed",String(o.changed)),o.grant_id&&d("Grant",o.grant_id),c();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 pe(`/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 y(s,t.fields);c(),j("Access Group Synced"),d("ID",s.id),d("Principals",s.principal_count),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Collection Synced"),d("ID",i.id),d("Mailboxes",i.mailbox_count),c();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 pe(`/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 y(s,t.fields);c(),j("Access Offered"),d("Email",s.email),d("Expires",s.expires_at),c();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 pe("/api/workspaces/access/offers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting access offer");if(t.json)return y(i,t.fields);c(),j("Access Accepted"),d("Workspace",i.workspace_name),d("Ownership",i.ownership),c();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 pe(`/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 y(i,t.fields);c(),j("Access Revoked"),d("Grant",i.grant_id),d("Version",i.version),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}`,{method:"PATCH",body:JSON.stringify({name:t.name})},t,"Renaming workspace");if(t.json)return y(i,t.fields);c(),j("Workspace Renamed"),d("ID",i.id),d("Name",i.name),c();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 pe(`/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 y(i,t.fields);c(),j("Invitation Sent"),d("Email",i.email),d("Role",i.role),d("Expires",i.expires_at),c();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 pe("/api/workspaces/invitations/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting invitation");if(t.json)return y(i,t.fields);c(),j("Workspace Joined"),d("Workspace",i.workspace_name),d("Role",i.role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/invitations/${encodeURIComponent(t.invitationId)}`,{method:"DELETE"},t,"Revoking invitation");if(t.json)return y(i,t.fields);c(),j("Invitation Revoked"),d("Invitation",i.invitation_id),c();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 pe(`/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 y(i,t.fields);c(),j("Member Updated"),d("Membership",i.id),d("Role",i.role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/members/${encodeURIComponent(t.membershipId)}`,{method:"DELETE"},t,"Removing member and revoking access");if(t.json)return y(i,t.fields);c(),j("Member Removed"),d("Membership",i.membership_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/members/me`,{method:"DELETE"},t,"Leaving workspace and revoking access");if(t.json)return y(i,t.fields);c(),j("Workspace Left"),d("Workspace",i.workspace_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer`,{method:"POST",body:JSON.stringify({membership_id:t.membershipId})},t,"Requesting ownership transfer");if(t.json)return y(i,t.fields);c(),j("Ownership Transfer Requested"),d("To",i.to_email),d("Expires",i.expires_at),d("Billing",i.billing),c();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 pe("/api/workspaces/ownership-transfers/accept",{method:"POST",body:JSON.stringify({token:t.token})},t,"Accepting ownership");if(t.json)return y(i,t.fields);c(),j("Ownership Transferred"),d("Workspace",i.workspace_id),d("Domains",i.domains_transferred),d("Mailboxes",i.mailboxes_transferred),d("Previous owner",i.previous_owner_role),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/ownership-transfer/${encodeURIComponent(t.transferId)}`,{method:"DELETE"},t,"Revoking ownership transfer");if(t.json)return y(i,t.fields);c(),j("Ownership Transfer Revoked"),d("Transfer",i.transfer_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/mailboxes`,{method:"POST",body:JSON.stringify({mailbox_id:t.mailboxId})},t,"Adopting mailbox boundary");if(t.json)return y(i,t.fields);c(),j(i.adopted?"Mailbox Boundary Adopted":"Already in Workspace"),d("Address",i.address),d("Mailboxes",i.mailbox_ids?.length??1),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Access Granted"),d("Membership",i.membership_id),d("Mailbox",i.mailbox_id),d("Role",i.role),c();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 pe(`/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 y(i,t.fields);c(),j("Mailbox Access Revoked"),d("Membership",i.membership_id),d("Mailbox",i.mailbox_id),c();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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/billing/checkout`,{method:"POST",body:JSON.stringify({plan:t.plan})},t,"Creating secure checkout");if(t.json)return y(i,t.fields);c(),j("Workspace Checkout"),d("Plan",i.plan),d("URL",i.url),c(),i.url&&t.open!==!1&&(console.log(` ${Wn.default.dim("Opening browser")} ${w.arrow} ${v.url(i.url)}`),qe(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 pe(`/api/workspaces/${encodeURIComponent(t.id)}/billing/cancel`,{method:"POST"},t,"Scheduling cancellation");if(t.json)return y(i,t.fields);c(),j("Cancellation Scheduled"),d("Message",i.message),i.cancel_at&&d("Cancels",i.cancel_at),c();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 bs=D(F(),1);G();var hs=D(require("node:crypto"),1),ai=D(require("node:fs"),1),_a=D(require("node:os"),1),gs=D(require("node:path"),1),ru=process.env.DOMANI_CONFIG_DIR||gs.default.join(_a.default.homedir(),".domani"),xa=gs.default.join(ru,"mutations");function ou(e){return gs.default.join(xa,`${hs.default.createHash("sha256").update(e).digest("hex")}.json`)}function ut(e,t,i){let s=ou(e),n=hs.default.createHash("sha256").update(JSON.stringify(t)).digest("hex");if(!i)try{let o=JSON.parse(ai.default.readFileSync(s,"utf8"));if(o.key&&o.fingerprint===n)return{key:o.key,complete:()=>{try{ai.default.unlinkSync(s)}catch{}}}}catch{}let r=i||`cli-${hs.default.randomUUID()}`;return ai.default.mkdirSync(xa,{recursive:!0,mode:448}),ai.default.writeFileSync(s,JSON.stringify({key:r,fingerprint:n}),{mode:384}),{key:r,complete:()=>{try{ai.default.unlinkSync(s)}catch{}}}}L();function ja(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 Bt(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 ys(e,t){if(t.json)return y(e,t.fields);let i=e.http_route||e;c(),j("HTTP Route"),d("ID",i.id),d("URL",i.url),d("Upstream",i.upstream),d("Status",i.status),d("Expires",i.expires_at),d("Browser mode",i.browser_mode||"stateless"),i.upstream_verification?.secret&&(d("Verification secret",bs.default.yellow(i.upstream_verification.secret)),console.log(bs.default.dim(" Save this secret now. It will not be shown again after this receipt."))),c()}async function Sa(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 Bt(await _(`/api/http-routes${s.size?`?${s}`:""}`),i);if(i.json)return y(n,i.fields);c(),j("HTTP Routes");for(let r of n.http_routes)console.log(` ${bs.default.dim(r.id)} ${r.hostname} ${r.status} ${r.upstream}`);c();return}if(e==="create"){i.upstream||u("--upstream is required",{code:"validation_error",json:i.json});let s=ja(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=ut(`route:create:${i.hostname||"auto"}`,n,i.idempotencyKey),o=C(!i.json);o.start("Creating HTTP route");let a=await Bt(await _("/api/http-routes",{method:"POST",headers:{"Idempotency-Key":r.key},body:JSON.stringify(n)}),i);return r.complete(),o.stop(`${w.success} HTTP route created`),ys(a,i)}if(t||u("Route ID is required",{hint:`Usage: domani route ${e} <id>`,code:"validation_error",json:i.json}),e==="get")return ys(await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}`),i),i);if(e==="delete"){let s=await _(`/api/http-routes/${encodeURIComponent(t)}`,{method:"DELETE"});if(s.ok||await Bt(s,i),i.json)return y({deleted:!0,id:t},i.fields);console.log(`${w.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=ut(`route:refresh:${t}`,s,i.idempotencyKey),r=await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}`,{method:"PATCH",headers:{"Idempotency-Key":n.key},body:JSON.stringify(s)}),i);return n.complete(),ys(r,i)}if(e==="rotate-verification"){let s=ut(`route:rotate-verification:${t}`,{},i.idempotencyKey),n=await Bt(await _(`/api/http-routes/${encodeURIComponent(t)}/upstream-verification/rotate`,{method:"POST",headers:{"Idempotency-Key":s.key}}),i);return s.complete(),i.json?y(n,i.fields):ys(n,i)}if(e==="rotate-headers"){let s=ja(i);s||u("Provide an upstream header environment variable or --clear-upstream-headers",{code:"validation_error",json:i.json});let n=ut(`route:rotate-headers:${t}`,{upstream_headers:s},i.idempotencyKey),r=await Bt(await _(`/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 y(r,i.fields);console.log(`${w.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 ee=D(F(),1),Ra=require("node:fs");G();L();var Jn="mailzero-personal-ai.v1",Q=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AssistantUsageError"}},au={choose:"choose",instruct:"instruct","take-over":"take_over",snooze:"snooze",ignore:"ignore",correct:"correct",approve:"approve",reject:"reject"},lu=["today","settings","set","preview","backfill","retry","item","choose","instruct","snooze","ignore","take-over","correct","approve","reject","plan","activity","export","delete","brief","facts","sender","task","lease","release","effects","escalate","report","rules","approvals","suggestions","metrics"];function Hn(e,t,i){if(!e)throw new Q(`${t} is required`,i);try{return JSON.parse(e)}catch{throw new Q(`${t} must be valid JSON`,i)}}function Ca(e){return(e||"").split(",").map(t=>t.trim()).filter(Boolean)}function Oa(e){return(e||"").split(",").map(t=>t.trim()).filter(Boolean)}function Gt(e,t,i){let s=Number(e);if(!Number.isInteger(s)||s<i)throw new Q(`${t} must be an integer of at least ${i}`);return s}function du(e,t,i){let s=e||"today";switch(s){case"today":return{method:"GET",path:i.category?`/api/assistant/today?category=${encodeURIComponent(i.category.trim().toLowerCase())}`:"/api/assistant/today"};case"settings":return{method:"GET",path:"/api/assistant/settings"};case"set":{let n={};if(i.enable&&i.disable)throw new Q("Use either --enable or --disable");if(i.pause&&i.resume)throw new Q("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=Oa(i.mailboxes)),i.days!==void 0&&(n.history_window_days=Gt(i.days,"--days",1)),i.attachmentVision!==void 0){if(!["on","off"].includes(i.attachmentVision))throw new Q("--attachment-vision must be on or off");n.attachment_vision=i.attachmentVision==="on"}if(!Object.keys(n).length)throw new Q("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 Q("--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 ${Jn}). Nothing is ever sent on your behalf. You can pause or delete derived data at any time.`);let n=Oa(i.mailboxes);if(!n.length)throw new Q("--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:Gt(i.days,"--days",1),consent:!0,consent_version:Jn}}}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 Q("Work item ID is required","Usage: domani assistant item <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}`};case"brief":{if(t)return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}/brief`};if(!i.correspondent)throw new Q("Work item ID or --correspondent is required","Usage: domani assistant brief <id> | domani assistant brief --correspondent ada@example.com [--mailbox hi@myapp.dev]");let n=new URLSearchParams({correspondent:i.correspondent});return i.mailbox&&n.set("mailbox",i.mailbox),{method:"GET",path:`/api/assistant/brief?${n}`}}case"facts":if(!t)throw new Q("Work item ID is required","Usage: domani assistant facts <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}/facts`};case"sender":if(!t)throw new Q("Work item ID is required","Usage: domani assistant sender <id>");return{method:"GET",path:`/api/assistant/work-items/${encodeURIComponent(t)}/sender`};case"plan":if(!t)throw new Q("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=${Gt(i.limit,"--limit",1)}`:""}`};case"rules":return{method:"GET",path:"/api/assistant/rules"};case"approvals":return{method:"GET",path:"/api/assistant/approvals"};case"suggestions":return{method:"GET",path:"/api/assistant/suggestions"};case"metrics":return{method:"GET",path:`/api/assistant/metrics${i.days!==void 0?`?window_days=${Gt(i.days,"--days",1)}`:""}`};case"export":return{method:"GET",path:"/api/assistant/data"};case"delete":if(!i.yes)throw new Q("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"task":if(!t)throw new Q("Task ID is required","Usage: domani assistant task <work item id>");return{method:"GET",path:`/api/assistant/tasks/${encodeURIComponent(t)}`};case"lease":{if(!t)throw new Q("Task ID is required","Usage: domani assistant lease <id> [--ttl <seconds>]");let n={};return i.ttl!==void 0&&(n.ttl_seconds=Gt(i.ttl,"--ttl",30)),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/lease`,body:n}}case"release":if(!t)throw new Q("Task ID is required","Usage: domani assistant release <id>");return{method:"DELETE",path:`/api/assistant/tasks/${encodeURIComponent(t)}/lease`};case"effects":{if(!t)throw new Q("Task ID is required","Usage: domani assistant effects <id> --effects '<json array>'");let n=Hn(i.effects,"--effects",`A JSON array of effects, for example: --effects '[{"kind":"label","mailbox_id":"mbx_1","add":["finance"]}]'`);if(!Array.isArray(n)||!n.length)throw new Q("--effects must be a non-empty JSON array","Kinds: reply, forward, label, snooze, resolve, note, request");let r={effects:n};return i.text&&(r.note=i.text),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/effects`,body:r,idempotency:`assistant:effects:${t}`}}case"escalate":{if(!t)throw new Q("Task ID is required","Usage: domani assistant escalate <id> --question '<text>' [--options '<json>'] [--evidence <refs>]");if(!i.question)throw new Q("--question is required","What the owner must decide, with the evidence in --evidence");let n={question:i.question};i.options&&(n.options=Hn(i.options,"--options","A JSON array of { key, label, outcome }"));let r=Ca(i.evidence);return r.length&&(n.evidence_refs=r),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/escalate`,body:n}}case"report":{if(!t)throw new Q("Task ID is required","Usage: domani assistant report <id> --outcome done|blocked|handed_back --summary '<text>' [--claims '<json>'] [--evidence <refs>]");if(!i.outcome||!["done","blocked","handed_back"].includes(i.outcome))throw new Q("--outcome must be done, blocked or handed_back");if(!i.summary)throw new Q("--summary is required","What was done and how it ended, in a few lines");let n={outcome:i.outcome,summary:i.summary};i.claims&&(n.claims=Hn(i.claims,"--claims","A JSON array of { kind, ref } the platform reconciles with its receipts"));let r=Ca(i.evidence);return r.length&&(n.evidence_refs=r),{method:"POST",path:`/api/assistant/tasks/${encodeURIComponent(t)}/report`,body:n}}case"choose":case"instruct":case"snooze":case"ignore":case"take-over":case"correct":case"approve":case"reject":{if(!t)throw new Q("Work item ID is required",`Usage: domani assistant ${s} <id> --item-version <work_item_version>`);if(i.itemVersion===void 0)throw new Q("--item-version is required","Pass the work_item_version shown by: domani assistant item <id>");let n=au[s],r={type:n,work_item_version:Gt(i.itemVersion,"--item-version",1)};if(n==="ignore"&&i.scope){if(!["item","sender","sender_domain","situation"].includes(i.scope))throw new Q("--scope must be item, sender, sender_domain or situation","Example: domani assistant ignore <id> --item-version 3 --scope sender");r.scope=i.scope}if(n==="choose"){if(!i.option||!i.decision||i.decisionVersion===void 0)throw new Q("--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=Gt(i.decisionVersion,"--decision-version",1),r.option_id=i.option}if(n==="instruct"){if(!i.text)throw new Q("--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 Q("--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 Q("--field and --text are required","Name the analysis field to correct and the correct value");r.field=i.field,r.correction=i.text}if(n==="approve"||n==="reject"){if(!i.plan)throw new Q("--plan is required","The waiting action plan shown by: domani assistant task <id>");r.plan_id=i.plan,n==="reject"&&i.text&&(r.reason=i.text)}return{method:"POST",path:`/api/assistant/work-items/${encodeURIComponent(t)}/interactions`,body:r,idempotency:`assistant:${n}:${t}`}}default:throw new Q(`Unknown action: ${s}`,`Actions: ${lu.join(", ")}`)}}async function cu(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 uu(e){let t=e.sender?.name||e.sender?.address?.split("@")[0]||e.mailbox?.name||e.mailbox?.address||"",i=e.recurrence?.count&&e.recurrence.count>1?ee.default.dim(`x${e.recurrence.count}`):"";return[ee.default.dim(e.id),t,e.category?e.category.replace(/_/g," "):"",`${(e.title||e.summary||"").slice(0,60)} ${i}`.trim(),e.ask?e.ask.slice(0,50):e.attention?.deadline||""]}function mu(e,t){if(t.json)return y(e,t.fields);c(),j("Today");let i=[["now","Now"],["needs_you","Needs you"],["waiting","Waiting"],["upcoming","Upcoming"],["handled","Handled"]],s=0;for(let[o,a]of i){let l=e.sections&&typeof e.sections=="object"?e.sections:e,f=Array.isArray(l[o])?l[o]:[];f.length&&(s+=f.length,console.log(` ${ee.default.bold(a)} ${ee.default.dim(`(${f.length})`)}`),B(["ID","Who","Kind","Summary","Deadline"],f.map(uu)),c())}s||console.log(ee.default.dim(t.category?` Nothing of the kind ${t.category} right now.`:" Nothing needs you right now."));let n=e.categories&&typeof e.categories=="object"?Object.entries(e.categories).sort((o,a)=>a[1]-o[1]):[];n.length>1&&console.log(ee.default.dim(` Kinds: ${n.map(([o,a])=>`${o} ${a}`).join(", ")} (narrow with --category)`));let r=typeof e.as_of=="string"?e.as_of:void 0;r&&console.log(ee.default.dim(` As of ${r}`)),c()}function fu(e,t){if(t.json)return y(e,t.fields);let i=e.brief??e;if(e.correspondent&&!e.brief){c(),j(`Brief for ${e.correspondent}`),console.log(` ${ee.default.dim("Nothing analysed from this person yet.")}`);for(let s of e.recent_mail||[])d(s.received_at.slice(0,10),`${s.subject||""} (${s.mailbox})`);return}c(),j(i.title||"Brief"),i.situation&&d("Status",`${i.situation.status||""}${i.situation.attention?.level?` \xB7 ${i.situation.attention.level}`:""}${i.situation.occurrences&&i.situation.occurrences>1?` \xB7 ${i.situation.occurrences} messages`:""}`),i.situation?.sender?.address&&d("With",`${i.situation.sender.name?`${i.situation.sender.name} `:""}<${i.situation.sender.address}>`),i.summary&&d("Summary",i.summary),i.ask&&d("Ask",i.ask);for(let s of i.story||[])d(s.occurred_at.slice(0,10),`${s.title}${s.analysed?"":ee.default.dim(" (not analysed)")}`);for(let s of i.facts||[])d("Fact",`${s.subject||""} ${s.predicate||""} ${s.value?.value??s.object??""}${s.value?.currency?` ${s.value.currency}`:""}`.trim());for(let s of i.awaiting||[])d(s.overdue?ee.default.red("Awaited"):"Awaited",`${s.who}: ${s.what} (since ${s.since.slice(0,10)})`);for(let s of i.commitments||[])d(s.overdue?ee.default.red("Promised"):"Promised",`${s.who}: ${s.what}`);for(let s of(i.settled||[]).slice(0,5))d("Settled",`${s.what} (${s.status}, ${s.at.slice(0,10)})`);i.decision?.question&&d("Decision",`${i.decision.question} ${(i.decision.options||[]).map(s=>`${s.recommended?"\u2605 ":""}${s.label}`).join(" / ")}`),i.suggested_next&&d("Next",`${i.suggested_next.action} ${ee.default.dim(`(${i.suggested_next.reason})`)}`),e.related&&e.related.length&&d("Also",`${e.related.length} other item(s) from this person`)}function pu(e,t){if(t.json)return y(e,t.fields);let i=e;c(),j(i.sender?`${i.sender.name?`${i.sender.name} `:""}<${i.sender.address}>`:"Sender"),i.organisation?(d("Organisation",`${i.organisation.name||i.sender?.domain||""}${i.organisation.legal_name&&i.organisation.legal_name!==i.organisation.name?` (${i.organisation.legal_name})`:""}${i.organisation.fresh?"":ee.default.dim(" (profile ageing)")}`),i.organisation.pitch&&d("About",i.organisation.pitch),i.organisation.registered_at&&d("Domain since",i.organisation.registered_at.slice(0,10)),d("Mail",`${i.organisation.mail.provider||"unknown provider"} \xB7 spf ${i.organisation.mail.spf===null?"?":i.organisation.mail.spf?"yes":"no"} \xB7 dmarc ${i.organisation.mail.dmarc}`)):i.sender?.shared_domain?d("Organisation",ee.default.dim(`${i.sender.domain} is a shared mail domain`)):i.sender?.domain&&d("Organisation",ee.default.dim(`${i.sender.domain} not analysed yet`));let s=i.relationship;if(s){let n=s.first_received_at&&s.last_received_at?` between ${s.first_received_at.slice(0,10)} and ${s.last_received_at.slice(0,10)}`:"";d("Received",s.received?`${s.received_capped?"50+":s.received} message(s)${n}`:"nothing before this");for(let r of s.matters.slice(0,5))d(r.last_seen_at.slice(0,10),`${r.title} ${ee.default.dim(`(${r.status}, ${r.id})`)}`);s.organisation?.matters.length&&d("Colleagues",`${s.organisation.other_senders.join(", ")}: ${s.organisation.matters.slice(0,3).map(r=>r.title).join(" / ")}`)}for(let n of i.participants||[])d(n.roles.join("+"),`${n.name?`${n.name} `:""}<${n.address}>${n.messages>1?ee.default.dim(` \xD7${n.messages}`):""}${n.same_organisation?"":ee.default.dim(" (outside)")}`)}function Ia(e,t){if(t.json)return y(e,t.fields);let i=e.work_item||e;if(c(),j("Work item"),d("ID",i.id),d("Version",String(i.version??"")),d("Status",i.status||""),d("Mailbox",i.mailbox?.name?`${i.mailbox.name} <${i.mailbox.address||""}>`:i.mailbox?.address||""),i.title&&d("Title",i.title),i.sender?.address&&d("From",`${i.sender.name?`${i.sender.name} `:""}<${i.sender.address}>${i.sender.kind&&i.sender.kind!=="human"?` (${i.sender.kind})`:""}`),i.ask&&d("Ask",i.ask),i.recurrence?.count&&i.recurrence.count>1&&d("Recurrence",`${i.recurrence.count} messages since ${(i.recurrence.first_seen_at||"").slice(0,10)}`),d("Summary",i.summary||""),i.attention?.reason&&d("Why",i.attention.reason),i.attention?.deadline&&d("Deadline",i.attention.deadline),i.source?.event_id&&d("Source",`${i.source.type||"mail"} ${i.source.event_id}`),i.decision?.options?.length){c(),console.log(` ${ee.default.bold("Decision")} ${ee.default.dim(`${i.decision.id} v${i.decision.version??1}`)}`);for(let s of i.decision.options)console.log(` ${ee.default.dim(s.id)} ${s.label}${s.recommended?ee.default.green(" recommended"):""}`);console.log(ee.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&&d("Plan",`${i.plan.id} (preview with: domani assistant plan ${i.plan.id})`),c()}function hu(e,t){if(t.json)return y(e,t.fields);c(),j("Mailzero assistant"),d("Enabled",e.enabled?"yes":"no"),d("Shadow",e.shadow_enabled?"yes":"no"),d("Paused",e.paused?"yes":"no"),d("History window",`${e.history_window_days} days`),d("Privacy route",String(e.privacy_route||"")),d("Consent",e.consent?.accepted_version?`${e.consent.accepted_version} at ${e.consent.accepted_at}`:`none (required: ${e.consent?.required_version||Jn})`),c();let i=new Set(e.mailbox_ids||[]),s=e.mailboxes||[];s.length&&B(["ID","Address","AI"],s.map(n=>[ee.default.dim(n.id),n.address,i.has(n.id)?ee.default.green("on"):ee.default.dim("off")])),c()}function gu(e,t){if(t.json)return y(e,t.fields);let i=e.backfill;if(c(),j("History import"),!i){console.log(ee.default.dim(" No import has run yet.")),c();return}d("Status",`${i.status} (${i.phase})`),d("Progress",`${i.processed}/${i.total}${i.percent===null||i.percent===void 0?"":` (${i.percent}%)`}`),d("Failed",String(i.failed??0)),d("Paused",i.paused?"yes":"no"),i.estimated_completion_at&&d("ETA",i.estimated_completion_at),i.can_close_app&&console.log(ee.default.dim(" The import continues in the background.")),c()}function yu(e,t){if(t.json)return y(e,t.fields);let i=e.action_plan||e.plan||e;c(),j("Action preview"),d("ID",i.id),d("Status",i.status||""),i.expires_at&&d("Expires",i.expires_at);for(let s of i.effects||[])c(),console.log(` ${ee.default.bold(s.kind||"effect")} ${ee.default.dim(`mailbox ${s.mailbox_id||""}`)}${s.reply_to_message_id?ee.default.dim(` in reply to ${s.reply_to_message_id}`):""}`),s.body&&console.log(`
|
|
207
207
|
${String(s.body).split(`
|
|
208
208
|
`).map(n=>` ${n}`).join(`
|
|
209
209
|
`)}
|
|
210
|
-
`);console.log(
|
|
211
|
-
`;if(i.out){if((0,Ra.writeFileSync)(i.out,h,"utf8"),i.json)return y({exported:!0,path:i.out},i.fields);console.log(`${w.success} Derived assistant data exported to ${i.out}`);return}process.stdout.write(h);return}case"delete":if(i.json)return y(m,i.fields);console.log(`${w.success} Derived assistant data deleted. Source mail is untouched.`);return;default:if(i.json)return y(m,i.fields);if(n==="set"||n==="preview"||n==="retry"){n==="preview"&&console.log(
|
|
210
|
+
`);console.log(ee.default.dim(` Nothing is sent by this command. Send through the reply endpoint with assistant_plan_id=${i.id} or from the app.`)),c()}function bu(e,t){if(t.json)return y(e,t.fields);let i=e.events||[];c(),j("Assistant activity"),i.length?B(["When","Kind","Action","Work item"],i.map(s=>[s.occurred_at||"",s.kind||"",s.action||s.type||"",ee.default.dim(s.work_item?.id||s.work_item_id||"")])):console.log(ee.default.dim(" No activity yet.")),c()}async function Aa(e,t,i){let s;try{s=du(e,t,i)}catch(h){throw h instanceof Q&&u(h.message,{hint:h.hint,code:"validation_error",json:i.json}),h}let n=e||"today",r={},o;s.idempotency&&(o=ut(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 _(s.path,{method:s.method,headers:r,...s.body?{body:JSON.stringify(s.body)}:{}}),m=await cu(f,i);switch(o?.complete(),a&&l.stop(`${w.success} Done`),n){case"today":return mu(m,i);case"settings":return hu(m,i);case"backfill":return gu(m,i);case"item":return Ia(m,i);case"brief":return fu(m,i);case"facts":return y(m,i.fields);case"sender":return pu(m,i);case"plan":return yu(m,i);case"activity":return bu(m,i);case"export":{let h=`${JSON.stringify(m,null,2)}
|
|
211
|
+
`;if(i.out){if((0,Ra.writeFileSync)(i.out,h,"utf8"),i.json)return y({exported:!0,path:i.out},i.fields);console.log(`${w.success} Derived assistant data exported to ${i.out}`);return}process.stdout.write(h);return}case"delete":if(i.json)return y(m,i.fields);console.log(`${w.success} Derived assistant data deleted. Source mail is untouched.`);return;default:if(i.json)return y(m,i.fields);if(n==="set"||n==="preview"||n==="retry"){n==="preview"&&console.log(ee.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?Ia(m,i):y(m,i.fields)}}G();var ws=D(F(),1);L();var wu=["list","token","tokens","revoke-token"],Kt=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AgentsUsageError"}};function vu(e,t,i){switch(e||"list"){case"list":return{method:"GET",path:"/api/agents/identity"};case"token":{if(!t)throw new Kt("Agent handle is required",'Usage: domani agents token <slug> [--name "Dave on the pod"] [--mailboxes mb_1,mb_2]');let s=(i.mailboxes||"").split(",").map(n=>n.trim()).filter(Boolean);return{method:"POST",path:`/api/agents/identity/${encodeURIComponent(t)}/tokens`,body:{...i.name?{name:i.name}:{},...s.length?{mailbox_ids:s}:{}}}}case"tokens":if(!t)throw new Kt("Agent handle is required","Usage: domani agents tokens <slug>");return{method:"GET",path:`/api/agents/identity/${encodeURIComponent(t)}/tokens`};case"revoke-token":if(!t||!i.tokenId)throw new Kt("Agent handle and --token-id are required","Usage: domani agents revoke-token <slug> --token-id <id>");return{method:"DELETE",path:`/api/agents/identity/${encodeURIComponent(t)}/tokens/${encodeURIComponent(i.tokenId)}`};default:throw new Kt(`Unknown action: ${e}`,`Actions: ${wu.join(", ")}`)}}async function Ta(e,t,i){let s;try{s=vu(e,t,i)}catch(o){if(o instanceof Kt)return u(o.message,{hint:o.hint,code:"validation_error",json:i.json,fields:i.fields});throw o}let n=await _(s.path,{method:s.method,...s.body?{headers:{"Content-Type":"application/json"},body:JSON.stringify(s.body)}:{}}),r=await n.json().catch(()=>({}));if(!n.ok)return u(r.error||r.message||"Request failed",{hint:r.hint,status:n.status,json:i.json,fields:i.fields});if(i.json)return y(r,i.fields);switch(e||"list"){case"list":{let o=r.identities||r.items||[];if(j("Agent identities"),!o.length){console.log(` ${ws.default.dim("No agent identity yet. Claim one: domani agents claim is on the web at /agents")}`);return}B(["Handle","Name","Email"],o.map(a=>[a.slug,a.name||"",a.email||""]),[24,30,40]);return}case"token":{j("Agent API key"),d("Key",r.key||r.token||""),r.scopes&&d("Scopes",r.scopes.join(", ")),r.mailbox_ids?.length&&d("Mailboxes",r.mailbox_ids.join(", ")),ye("Shown once. The key sees only this agent's mailboxes and the items handed to it.");return}case"tokens":{let o=r.tokens||[];if(j("Agent API keys"),!o.length){console.log(` ${ws.default.dim("No key yet: domani agents token <slug>")}`);return}B(["ID","Name","Scopes","Last used"],o.map(a=>[a.id,a.name||"",(a.scopes||[]).join(","),a.last_used_at||"never"]),[28,24,40,20]);return}case"revoke-token":console.log(`${ws.default.green("\u2713")} Token revoked`);return}}G();var At=D(F(),1);L();var $u=["providers","connect","connector","import","verify","disconnect"],et=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="MailboxUsageError"}};function ku(e,t,i){switch(e){case"providers":return{path:"/api/emails/connect/providers",method:"GET"};case"connect":{if(t==="forwarding"){if(!i.address)throw new et("--address is required.","domani mailbox connect forwarding --address someone@gmail.com");return{path:"/api/emails/connect/forwarding",method:"POST",body:{address:i.address,...i.workspace?{workspace_id:i.workspace}:{}}}}let s=t??"gmail";if(s!=="gmail"&&s!=="outlook")throw new et(`Unknown provider "${t}".`,"gmail or outlook (the APIs), or forwarding (a rule at any provider).");if(i.since&&i.window)throw new et("Use --since or --window, not both.");return{path:`/api/emails/connect/${s}`,method:"POST",body:{...i.since?{since:i.since}:{},...i.window?{window:i.window}:{},...i.workspace?{workspace_id:i.workspace}:{}}}}case"connector":if(!t)throw new et("Address required.","domani mailbox connector someone@gmail.com");return{path:`/api/emails/${encodeURIComponent(t.toLowerCase())}/connector`,method:"GET"};case"import":if(!t)throw new et("Address required.","domani mailbox import someone@gmail.com --since 2026-06-01");if(!i.since)throw new et("--since is required.","The date the import should reach back to, for example --since 2026-06-01.");return{path:`/api/emails/${encodeURIComponent(t.toLowerCase())}/import`,method:"POST",body:{since:i.since}};case"verify":if(!t)throw new et("Address required.","domani mailbox verify someone@gmail.com");return{path:`/api/emails/${encodeURIComponent(t.toLowerCase())}/connector/verify`,method:"POST"};case"disconnect":if(!t)throw new et("Address required.","domani mailbox disconnect someone@gmail.com");return{path:`/api/emails/${encodeURIComponent(t.toLowerCase())}/connector`,method:"DELETE"};default:throw new et(`Unknown action "${e??""}".`,`Actions: ${$u.join(", ")}.`)}}function _u(e){j(`${e.address} (${e.kind})`),d("Status",String(e.status)),d("Phase",String(e.phase)+(e.paused_reason?` (${e.paused_reason})`:"")),d("Imported since",e.import_since?new Date(String(e.import_since)).toLocaleString():"-");let t=e.forwarding;if(t){d("Forward to",String(t.address??"-")),d("Forwarded",`${t.forwarded??0}${t.last_forwarded_at?`, last ${new Date(t.last_forwarded_at).toLocaleString()}`:""}`),t.confirmation&&d("Gmail confirmation",`${At.default.bold(t.confirmation.code)}${t.confirmation.url?` ${t.confirmation.url}`:""}`);let s=t.guide;s&&d("Provider",`${s.name??"unknown"}${s.settings_url?` ${s.settings_url}`:""}${s.limits?.includes("paid_plan")?" (forwarding needs a paid plan there)":""}`),t.probe&&d("Probe",t.probe.returned_at?`came back ${new Date(t.probe.returned_at).toLocaleString()}`:`sent ${new Date(t.probe.sent_at).toLocaleString()}, not back yet`)}let i=e.import_run;i&&d("Import",`${i.status}: ${i.copied} copied, ${i.analysed}/${i.to_analyse} analysed${i.listing_done?"":", still listing"}`),e.source_messages_total&&d("In the source",`${e.source_messages_total} messages`),d("Last sync",e.last_sync_at?new Date(String(e.last_sync_at)).toLocaleString():"never"),e.last_error&&d("Last error",At.default.yellow(String(e.last_error)))}async function Ea(e,t,i){let s;try{s=ku(e,t,i)}catch(o){if(o instanceof et)return u(o.message,{hint:o.hint,code:"validation_error",json:i.json});throw o}let n=await _(s.path,{method:s.method,...s.body?{headers:{"Content-Type":"application/json"},body:JSON.stringify(s.body)}:{}}),r=await n.json().catch(()=>({}));if(!n.ok)return u(r.error||r.message||"Request failed",{hint:r.hint,status:n.status,json:i.json,code:String(r.code??"request_failed")});if(e==="connect"&&t==="forwarding"){if(i.json)return y(r,i.fields);j("Connect your inbox by forwarding"),d("Inbox",String(r.address)),d("Forward to",At.default.cyan(String(r.forwarding_address))),d("Status",String(r.status));let o=r.instructions;for(let[a,l]of Object.entries(o??{}))console.log(`
|
|
212
212
|
${At.default.bold(a==="gmail"?"Gmail":a==="outlook"?"Outlook":"Any provider")}`),l.forEach((f,m)=>console.log(` ${m+1}. ${f}`));ye(`Then: domani mailbox verify ${r.address} sends a probe; domani mailbox connector ${r.address} shows the confirmation code and the status.`);return}if(e==="connect"){if(i.json&&!i.wait)return y(r,i.fields);if(j("Connect your Gmail inbox"),d("Import since",new Date(String(r.import_since)).toLocaleString()),console.log(`
|
|
213
213
|
Open this link in your browser and choose the Google account:
|
|
214
214
|
${At.default.cyan(String(r.auth_url))}
|
|
215
215
|
`),i.open!==!1&&qe(String(r.auth_url)),ye("After consent, the inbox appears as a connected mailbox at its own address; check it with: domani mailbox connector <address>"),i.wait){let o=Date.now();for(let a=0;a<180;a+=1){await wt(5e3);let m=((await(await _("/api/emails?limit=50")).json().catch(()=>({}))).mailboxes??[]).find(h=>h.kind==="connected"&&h.created_at&&Date.parse(h.created_at)>=o-6e4);if(m){let h=m.address??m.email;if(i.json)return y({status:"connected",address:h},i.fields);console.log(`
|
|
216
|
-
${At.default.green("Connected")} ${h}`);return}}return u("No inbox was connected within 15 minutes.",{code:"connect_timeout",json:i.json})}return}if(i.json)return y(r,i.fields);if(e==="providers"){j("Mailbox providers");for(let o of r.providers??[])d(String(o.name),o.configured?`ready (${o.access.join(", ")}${o.imports_history?", imports older mail":""})`:At.default.yellow(`not set up: ${o.reason}`));ye("domani mailbox connect gmail | outlook | forwarding --address me@company.com");return}if(e==="connector")return
|
|
216
|
+
${At.default.green("Connected")} ${h}`);return}}return u("No inbox was connected within 15 minutes.",{code:"connect_timeout",json:i.json})}return}if(i.json)return y(r,i.fields);if(e==="providers"){j("Mailbox providers");for(let o of r.providers??[])d(String(o.name),o.configured?`ready (${o.access.join(", ")}${o.imports_history?", imports older mail":""})`:At.default.yellow(`not set up: ${o.reason}`));ye("domani mailbox connect gmail | outlook | forwarding --address me@company.com");return}if(e==="connector")return _u(r);if(e==="verify"){j("Probe sent"),d("To",String(r.sent_to)),d("Comes back through",String(r.forwarding_address)),ye("When the rule brings it back, the connection is active: domani mailbox connector <address>");return}if(e==="import"){j("Importing older mail"),d("From",new Date(String(r.import_since)).toLocaleString()),d("To",new Date(String(r.import_until)).toLocaleString()),ye(`Progress: domani mailbox connector ${t}`);return}e==="disconnect"&&(j("Disconnected"),d("Address",String(r.address)),d("Removed",`${r.removed_messages} messages, ${r.removed_attachments} attachments`))}var Pa=D(F(),1);G();L();async function xu(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 Da(e,t,i,s){let n=`/api/domains/${encodeURIComponent(e)}/hostname-bindings`,r;if(!t||t==="list")r=await _(n);else if(t==="plan")s.hostname||u("--hostname is required",{code:"validation_error",json:s.json}),r=await _(`${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=ut(`binding:create:${e}:${s.hostname}`,l);r=await _(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 _(l);else if(t==="verify")r=await _(`${l}/verify`,{method:"POST"});else if(t==="delete")r=await _(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(h=>h.trim())},m=ut(`binding:update:${e}:${i}`,f);r=await _(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 y({disabled:!0,id:i},s.fields);console.log("Hostname binding disabled");return}let o=await xu(r,s);if(s.json)return y(o,s.fields);c(),j(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(` ${Pa.default.dim(l.id)} ${l.hostname_pattern} ${l.status} ${l.browser_mode}`);else console.log(JSON.stringify(o,null,2));c()}var Na=D(require("node:readline"),1);yt();function ju(e){return(Array.isArray(e)?e:[e]).filter(i=>!!i&&typeof i=="object")}function Bn(e,t,i,s){return{jsonrpc:"2.0",id:e,error:{code:t,message:i,...s?{data:s}:{}}}}function Ci(e,t,i,s){let n=ju(e).filter(r=>Object.prototype.hasOwnProperty.call(r,"id")).map(r=>Bn(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 Cu(e,t={}){let i=t.fetchImpl??fetch,s=t.getAuthToken?t.getAuthToken():He(),n=(t.apiUrl??We()).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 h=m instanceof Error?m.message:"Unknown network error",b=Ci(e,-32002,"Domani MCP is unreachable",{code:"MCP_NETWORK_ERROR",hint:`Check your connection and that ${n} is reachable.`,detail:h});return b===void 0?[]:[b]}if(a.status===401){let m=t.refreshAuthToken?t.refreshAuthToken():t.getAuthToken?void 0:He({refreshKeychain:!0});if(m&&m!==s){await a.body?.cancel(),s=m,r.Authorization=`Bearer ${s}`;try{a=await o()}catch(h){let b=h instanceof Error?h.message:"Unknown network error",k=Ci(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 m=Ci(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=Ci(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=Ci(e,-32700,"Domani MCP returned invalid JSON",{code:"MCP_INVALID_RESPONSE"});return m===void 0?[]:[m]}}async function Ua(e={}){let t=e.stderr??process.stderr,i=Na.default.createInterface({input:process.stdin,crlfDelay:1/0}),s=new Set;e.verbose&&t.write(`domani MCP bridge ready
|
|
217
217
|
`);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(Bn(null,-32700,"Parse error"))}
|
|
218
|
-
`);return}let a=await
|
|
218
|
+
`);return}let a=await Cu(o,e);for(let l of a)process.stdout.write(`${JSON.stringify(l)}
|
|
219
219
|
`)})().catch(o=>{if(e.verbose){let a=o instanceof Error?o.message:String(o);t.write(`domani MCP bridge internal error: ${a}
|
|
220
220
|
`)}process.stdout.write(`${JSON.stringify(Bn(null,-32603,"Domani MCP bridge internal error"))}
|
|
221
221
|
`)});s.add(r),r.then(()=>s.delete(r))}await Promise.all(s)}process.stdin.setMaxListeners(50);var V=new or;V.name("domani").description(`Domain names for developers and AI agents - ${Yt}`).version(je).option("--api-url <url>","Override API base URL").configureOutput({outputError:(e,t)=>{let i=e.replace(/^error:\s*/i,"").trimEnd();if(t(`${mt.default.red("\u2717")} ${i}
|
|
@@ -291,9 +291,9 @@ Examples:
|
|
|
291
291
|
domani route refresh route_123 --expires-in 3600
|
|
292
292
|
domani route rotate-verification route_123
|
|
293
293
|
domani route rotate-headers route_123 --upstream-authorization-env SPRITES_AUTH
|
|
294
|
-
domani route delete route_123`).action(Sa);V.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("--scope <scope>","With ignore: also mute the sender, sender_domain or situation (default item)").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("--correspondent <email>","The person you are about to answer (for brief)").option("--mailbox <address>","Restrict the correspondent brief to one mailbox (for brief)").option("--yes","Confirm deletion of derived data (for delete)").option("--plan <id>","Action plan to approve or reject (for approve, reject)").option("--ttl <seconds>","How long to hold the task lease, 30 to 3600 (for lease)").option("--effects <json>","JSON array of effects to ask for (for effects)").option("--question <text>","The question for the owner (for escalate)").option("--options <json>","JSON array of { key, label, outcome } the owner may pick (for escalate)").option("--outcome <outcome>","done, blocked or handed_back (for report)").option("--summary <text>","What was done and how it ended (for report)").option("--claims <json>","JSON array of { kind, ref } reconciled with the receipts (for report)").option("--evidence <refs>","Comma-separated evidence refs (for escalate, report)").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",`
|
|
294
|
+
domani route delete route_123`).action(Sa);V.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("--scope <scope>","With ignore: also mute the sender, sender_domain or situation (default item)").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("--correspondent <email>","The person you are about to answer (for brief)").option("--mailbox <address>","Restrict the correspondent brief to one mailbox (for brief)").option("--category <kind>","Only one kind of matter: invoice, meeting_request, newsletter... (for today)").option("--yes","Confirm deletion of derived data (for delete)").option("--plan <id>","Action plan to approve or reject (for approve, reject)").option("--ttl <seconds>","How long to hold the task lease, 30 to 3600 (for lease)").option("--effects <json>","JSON array of effects to ask for (for effects)").option("--question <text>","The question for the owner (for escalate)").option("--options <json>","JSON array of { key, label, outcome } the owner may pick (for escalate)").option("--outcome <outcome>","done, blocked or handed_back (for report)").option("--summary <text>","What was done and how it ended (for report)").option("--claims <json>","JSON array of { kind, ref } reconciled with the receipts (for report)").option("--evidence <refs>","Comma-separated evidence refs (for escalate, report)").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",`
|
|
295
295
|
Actions:
|
|
296
|
-
today Now, Needs you, Waiting, Upcoming, Handled
|
|
296
|
+
today Now, Needs you, Waiting, Upcoming, Handled (--category keeps one kind)
|
|
297
297
|
settings Opt-in state, consent, and mailbox scope
|
|
298
298
|
set Change settings (--enable, --shadow, --pause, --mailboxes, --none, --days)
|
|
299
299
|
preview Record consent and start a background history import
|
|
@@ -302,6 +302,8 @@ Actions:
|
|
|
302
302
|
choose | instruct | snooze | ignore | take-over | correct <id>
|
|
303
303
|
Record your decision on a work item (fenced by --item-version)
|
|
304
304
|
approve | reject <id> Answer a waiting action plan (--plan, fenced by --item-version)
|
|
305
|
+
brief <id> The situation brief of a work item (or --correspondent for a person)
|
|
306
|
+
facts | sender <id> What was established, or who is behind the matter (organisation, people, history)
|
|
305
307
|
task <id> The task envelope an assignee works from: brief, facts, delegation, plans, lease
|
|
306
308
|
lease | release <id> Hold the task while working it, or give it back
|
|
307
309
|
effects <id> Ask for effects on a task (--effects JSON); the level and the grants decide
|