domani-cli 0.4.66 → 0.4.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/domani.cjs +2 -2
  2. package/package.json +1 -1
package/dist/domani.cjs CHANGED
@@ -25,7 +25,7 @@ Expecting one of '${s.join("', '")}'`);return this._lifeCycleHooks[t]?this._life
25
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(re.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
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(re.env.NO_COLOR||re.env.FORCE_COLOR==="0"||re.env.FORCE_COLOR==="false")return!1;if(re.env.FORCE_COLOR||re.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((Bu,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.66"});var Vs=pt((Zu,$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
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.67"});var Vs=pt((Zu,$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(`
@@ -208,7 +208,7 @@ ${String(s.body).split(`
208
208
  `).map(n=>` ${n}`).join(`
209
209
  `)}
210
210
  `);console.log(le.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 yu(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||"",le.default.dim(s.work_item?.id||s.work_item_id||"")])):console.log(le.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 pu(m,i);case"backfill":return hu(m,i);case"item":return Ia(m,i);case"brief":return fu(m,i);case"facts":return y(m,i.fields);case"plan":return gu(m,i);case"activity":return yu(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(le.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 bu=["list","token","tokens","revoke-token"],Kt=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AgentsUsageError"}};function wu(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: ${bu.join(", ")}`)}}async function Ta(e,t,i){let s;try{s=wu(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 vu=["providers","connect","connector","import","verify","disconnect"],et=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="MailboxUsageError"}};function $u(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: ${vu.join(", ")}.`)}}function ku(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;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}`:""}`),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=$u(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(`
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(le.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 bu=["list","token","tokens","revoke-token"],Kt=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="AgentsUsageError"}};function wu(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: ${bu.join(", ")}`)}}async function Ta(e,t,i){let s;try{s=wu(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 vu=["providers","connect","connector","import","verify","disconnect"],et=class extends Error{constructor(i,s){super(i);this.hint=s;this.name="MailboxUsageError"}};function $u(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: ${vu.join(", ")}.`)}}function ku(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=$u(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))}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "domani-cli",
3
- "version": "0.4.66",
3
+ "version": "0.4.67",
4
4
  "type": "module",
5
5
  "description": "Domain infrastructure for AI agents. Search, register, DNS, email, connect - all from your terminal. Installs the `domani` command.",
6
6
  "license": "MIT",