mozyfin-cli 0.2.12 → 0.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +12 -20
  2. package/dist/index.js +61 -44
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -63,23 +63,7 @@ mozyfin ask "compare VNM and MSN margin trend"
63
63
 
64
64
  Mozyfin CLI is a good fit for agent workflows because agents can call small terminal commands instead of loading large tool schemas or internal implementation details.
65
65
 
66
- Example prompt for your agent:
67
-
68
- ```text
69
- Use mozyfin-cli to research VNM.VN.
70
- Start with `mozyfin --help`, then gather profile, news, financials, and recent candles.
71
- Summarize the key risks and catalysts with command outputs as evidence.
72
- ```
73
-
74
- For larger tabular results, ask your agent to use CSV export:
75
-
76
- ```bash
77
- mozyfin ohlcv VNM.VN --timeframe 1d --limit 200 --csv vnm.csv
78
- ```
79
-
80
- ## Agent Skills
81
-
82
- Install the Mozyfin skill into your coding agent so it knows the recommended commands and workflows:
66
+ Install the Mozyfin skill so your agent knows the recommended commands and workflows:
83
67
 
84
68
  ```bash
85
69
  mozyfin skill claude
@@ -100,13 +84,21 @@ mozyfin skill --list # show supported agents and install status
100
84
  mozyfin skill <agent> # install or refresh the skill for one agent
101
85
  mozyfin skill all # install or refresh the skill for all supported agents
102
86
  mozyfin skill <agent> --remove # remove the skill from one agent
87
+ mozyfin update --skill all # force-refresh installed skills after updating
88
+ ```
89
+
90
+ Example prompt for your agent:
91
+
92
+ ```text
93
+ Use mozyfin-cli to research VNM.VN.
94
+ Start with `mozyfin --help`, then gather profile, news, financials, and recent candles.
95
+ Summarize the key risks and catalysts with command outputs as evidence.
103
96
  ```
104
97
 
105
- When updating the CLI, installed skills are refreshed automatically. You can also force a skill refresh:
98
+ For larger tabular results, ask your agent to use CSV export:
106
99
 
107
100
  ```bash
108
- mozyfin update --skill claude
109
- mozyfin update --skill all
101
+ mozyfin ohlcv VNM.VN --timeframe 1d --limit 200 --csv vnm.csv
110
102
  ```
111
103
 
112
104
  ## Commands
package/dist/index.js CHANGED
@@ -1,49 +1,49 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
- var l0=Object.create;var{getPrototypeOf:m0,defineProperty:X0,getOwnPropertyNames:d0}=Object;var r0=Object.prototype.hasOwnProperty;function s0($){return this[$]}var i0,p0,t0=($,q,Q)=>{var z=$!=null&&typeof $==="object";if(z){var J=q?i0??=new WeakMap:p0??=new WeakMap,Y=J.get($);if(Y)return Y}Q=$!=null?l0(m0($)):{};let X=q||!$||!$.__esModule?X0(Q,"default",{value:$,enumerable:!0}):Q;for(let M of d0($))if(!r0.call(X,M))X0(X,M,{get:s0.bind($,M),enumerable:!0});if(z)J.set($,X);return X};var D=($,q)=>()=>(q||$((q={exports:{}}).exports,q),q.exports);var T=import.meta.require;var k=D((n0)=>{class d extends Error{constructor($,q,Q){super(Q);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=q,this.exitCode=$,this.nestedError=void 0}}class Z0 extends d{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}n0.CommanderError=d;n0.InvalidArgumentError=Z0});var C=D((q1)=>{var{InvalidArgumentError:o0}=k();class _0{constructor($,q){switch(this.description=q||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.length>3&&this._name.slice(-3)==="...")this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_concatValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.concat($)}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(q,Q)=>{if(!this.argChoices.includes(q))throw new o0(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(q,Q);return q},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function $1($){let q=$.name()+($.variadic===!0?"...":"");return $.required?"<"+q+">":"["+q+"]"}q1.Argument=_0;q1.humanReadableArgName=$1});var r=D((Y1)=>{var{humanReadableArgName:J1}=C();class U0{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands($){let q=$.commands.filter((z)=>!z._hidden),Q=$._getHelpCommand();if(Q&&!Q._hidden)q.push(Q);if(this.sortSubcommands)q.sort((z,J)=>{return z.name().localeCompare(J.name())});return q}compareOptions($,q){let Q=(z)=>{return z.short?z.short.replace(/^-/,""):z.long.replace(/^--/,"")};return Q($).localeCompare(Q(q))}visibleOptions($){let q=$.options.filter((z)=>!z.hidden),Q=$._getHelpOption();if(Q&&!Q.hidden){let z=Q.short&&$._findOption(Q.short),J=Q.long&&$._findOption(Q.long);if(!z&&!J)q.push(Q);else if(Q.long&&!J)q.push($.createOption(Q.long,Q.description));else if(Q.short&&!z)q.push($.createOption(Q.short,Q.description))}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let q=[];for(let Q=$.parent;Q;Q=Q.parent){let z=Q.options.filter((J)=>!J.hidden);q.push(...z)}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((q)=>{q.description=q.description||$._argsDescription[q.name()]||""});if($.registeredArguments.find((q)=>q.description))return $.registeredArguments;return[]}subcommandTerm($){let q=$.registeredArguments.map((Q)=>J1(Q)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(q?" "+q:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,q){return q.visibleCommands($).reduce((Q,z)=>{return Math.max(Q,q.subcommandTerm(z).length)},0)}longestOptionTermLength($,q){return q.visibleOptions($).reduce((Q,z)=>{return Math.max(Q,q.optionTerm(z).length)},0)}longestGlobalOptionTermLength($,q){return q.visibleGlobalOptions($).reduce((Q,z)=>{return Math.max(Q,q.optionTerm(z).length)},0)}longestArgumentTermLength($,q){return q.visibleArguments($).reduce((Q,z)=>{return Math.max(Q,q.argumentTerm(z).length)},0)}commandUsage($){let q=$._name;if($._aliases[0])q=q+"|"+$._aliases[0];let Q="";for(let z=$.parent;z;z=z.parent)Q=z.name()+" "+Q;return Q+q+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((Q)=>JSON.stringify(Q)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)q.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)q.push(`env: ${$.envVar}`);if(q.length>0)return`${$.description} (${q.join(", ")})`;return $.description}argumentDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((Q)=>JSON.stringify(Q)).join(", ")}`);if($.defaultValue!==void 0)q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(q.length>0){let Q=`(${q.join(", ")})`;if($.description)return`${$.description} ${Q}`;return Q}return $.description}formatHelp($,q){let Q=q.padWidth($,q),z=q.helpWidth||80,J=2,Y=2;function X(G,N){if(N){let m=`${G.padEnd(Q+2)}${N}`;return q.wrap(m,z-2,Q+2)}return G}function M(G){return G.join(`
4
- `).replace(/^/gm," ".repeat(2))}let Z=[`Usage: ${q.commandUsage($)}`,""],_=q.commandDescription($);if(_.length>0)Z=Z.concat([q.wrap(_,z,0),""]);let U=q.visibleArguments($).map((G)=>{return X(q.argumentTerm(G),q.argumentDescription(G))});if(U.length>0)Z=Z.concat(["Arguments:",M(U),""]);let W=q.visibleOptions($).map((G)=>{return X(q.optionTerm(G),q.optionDescription(G))});if(W.length>0)Z=Z.concat(["Options:",M(W),""]);if(this.showGlobalOptions){let G=q.visibleGlobalOptions($).map((N)=>{return X(q.optionTerm(N),q.optionDescription(N))});if(G.length>0)Z=Z.concat(["Global Options:",M(G),""])}let L=q.visibleCommands($).map((G)=>{return X(q.subcommandTerm(G),q.subcommandDescription(G))});if(L.length>0)Z=Z.concat(["Commands:",M(L),""]);return Z.join(`
5
- `)}padWidth($,q){return Math.max(q.longestOptionTermLength($,q),q.longestGlobalOptionTermLength($,q),q.longestSubcommandTermLength($,q),q.longestArgumentTermLength($,q))}wrap($,q,Q,z=40){let Y=new RegExp(`[\\n][${" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF"}]+`);if($.match(Y))return $;let X=q-Q;if(X<z)return $;let M=$.slice(0,Q),Z=$.slice(Q).replace(`\r
3
+ var X$=Object.create;var{getPrototypeOf:Z$,defineProperty:E0,getOwnPropertyNames:J$}=Object;var _$=Object.prototype.hasOwnProperty;function U$($){return this[$]}var G$,K$,B$=($,q,Q)=>{var z=$!=null&&typeof $==="object";if(z){var Y=q?G$??=new WeakMap:K$??=new WeakMap,X=Y.get($);if(X)return X}Q=$!=null?X$(Z$($)):{};let Z=q||!$||!$.__esModule?E0(Q,"default",{value:$,enumerable:!0}):Q;for(let J of J$($))if(!_$.call(Z,J))E0(Z,J,{get:U$.bind($,J),enumerable:!0});if(z)Y.set($,Z);return Z};var f=($,q)=>()=>(q||$((q={exports:{}}).exports,q),q.exports);var D=import.meta.require;var h=f((H$)=>{class o extends Error{constructor($,q,Q){super(Q);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=q,this.exitCode=$,this.nestedError=void 0}}class j0 extends o{constructor($){super(1,"commander.invalidArgument",$);Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name}}H$.CommanderError=o;H$.InvalidArgumentError=j0});var l=f((E$)=>{var{InvalidArgumentError:W$}=h();class F0{constructor($,q){switch(this.description=q||"",this.variadic=!1,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,$[0]){case"<":this.required=!0,this._name=$.slice(1,-1);break;case"[":this.required=!1,this._name=$.slice(1,-1);break;default:this.required=!0,this._name=$;break}if(this._name.length>3&&this._name.slice(-3)==="...")this.variadic=!0,this._name=this._name.slice(0,-3)}name(){return this._name}_concatValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.concat($)}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}argParser($){return this.parseArg=$,this}choices($){return this.argChoices=$.slice(),this.parseArg=(q,Q)=>{if(!this.argChoices.includes(q))throw new W$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(q,Q);return q},this}argRequired(){return this.required=!0,this}argOptional(){return this.required=!1,this}}function L$($){let q=$.name()+($.variadic===!0?"...":"");return $.required?"<"+q+">":"["+q+"]"}E$.Argument=F0;E$.humanReadableArgName=L$});var e=f((I$)=>{var{humanReadableArgName:P$}=l();class P0{constructor(){this.helpWidth=void 0,this.sortSubcommands=!1,this.sortOptions=!1,this.showGlobalOptions=!1}visibleCommands($){let q=$.commands.filter((z)=>!z._hidden),Q=$._getHelpCommand();if(Q&&!Q._hidden)q.push(Q);if(this.sortSubcommands)q.sort((z,Y)=>{return z.name().localeCompare(Y.name())});return q}compareOptions($,q){let Q=(z)=>{return z.short?z.short.replace(/^-/,""):z.long.replace(/^--/,"")};return Q($).localeCompare(Q(q))}visibleOptions($){let q=$.options.filter((z)=>!z.hidden),Q=$._getHelpOption();if(Q&&!Q.hidden){let z=Q.short&&$._findOption(Q.short),Y=Q.long&&$._findOption(Q.long);if(!z&&!Y)q.push(Q);else if(Q.long&&!Y)q.push($.createOption(Q.long,Q.description));else if(Q.short&&!z)q.push($.createOption(Q.short,Q.description))}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleGlobalOptions($){if(!this.showGlobalOptions)return[];let q=[];for(let Q=$.parent;Q;Q=Q.parent){let z=Q.options.filter((Y)=>!Y.hidden);q.push(...z)}if(this.sortOptions)q.sort(this.compareOptions);return q}visibleArguments($){if($._argsDescription)$.registeredArguments.forEach((q)=>{q.description=q.description||$._argsDescription[q.name()]||""});if($.registeredArguments.find((q)=>q.description))return $.registeredArguments;return[]}subcommandTerm($){let q=$.registeredArguments.map((Q)=>P$(Q)).join(" ");return $._name+($._aliases[0]?"|"+$._aliases[0]:"")+($.options.length?" [options]":"")+(q?" "+q:"")}optionTerm($){return $.flags}argumentTerm($){return $.name()}longestSubcommandTermLength($,q){return q.visibleCommands($).reduce((Q,z)=>{return Math.max(Q,q.subcommandTerm(z).length)},0)}longestOptionTermLength($,q){return q.visibleOptions($).reduce((Q,z)=>{return Math.max(Q,q.optionTerm(z).length)},0)}longestGlobalOptionTermLength($,q){return q.visibleGlobalOptions($).reduce((Q,z)=>{return Math.max(Q,q.optionTerm(z).length)},0)}longestArgumentTermLength($,q){return q.visibleArguments($).reduce((Q,z)=>{return Math.max(Q,q.argumentTerm(z).length)},0)}commandUsage($){let q=$._name;if($._aliases[0])q=q+"|"+$._aliases[0];let Q="";for(let z=$.parent;z;z=z.parent)Q=z.name()+" "+Q;return Q+q+" "+$.usage()}commandDescription($){return $.description()}subcommandDescription($){return $.summary()||$.description()}optionDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((Q)=>JSON.stringify(Q)).join(", ")}`);if($.defaultValue!==void 0){if($.required||$.optional||$.isBoolean()&&typeof $.defaultValue==="boolean")q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`)}if($.presetArg!==void 0&&$.optional)q.push(`preset: ${JSON.stringify($.presetArg)}`);if($.envVar!==void 0)q.push(`env: ${$.envVar}`);if(q.length>0)return`${$.description} (${q.join(", ")})`;return $.description}argumentDescription($){let q=[];if($.argChoices)q.push(`choices: ${$.argChoices.map((Q)=>JSON.stringify(Q)).join(", ")}`);if($.defaultValue!==void 0)q.push(`default: ${$.defaultValueDescription||JSON.stringify($.defaultValue)}`);if(q.length>0){let Q=`(${q.join(", ")})`;if($.description)return`${$.description} ${Q}`;return Q}return $.description}formatHelp($,q){let Q=q.padWidth($,q),z=q.helpWidth||80,Y=2,X=2;function Z(B,R){if(R){let P=`${B.padEnd(Q+2)}${R}`;return q.wrap(P,z-2,Q+2)}return B}function J(B){return B.join(`
4
+ `).replace(/^/gm," ".repeat(2))}let _=[`Usage: ${q.commandUsage($)}`,""],U=q.commandDescription($);if(U.length>0)_=_.concat([q.wrap(U,z,0),""]);let G=q.visibleArguments($).map((B)=>{return Z(q.argumentTerm(B),q.argumentDescription(B))});if(G.length>0)_=_.concat(["Arguments:",J(G),""]);let M=q.visibleOptions($).map((B)=>{return Z(q.optionTerm(B),q.optionDescription(B))});if(M.length>0)_=_.concat(["Options:",J(M),""]);if(this.showGlobalOptions){let B=q.visibleGlobalOptions($).map((R)=>{return Z(q.optionTerm(R),q.optionDescription(R))});if(B.length>0)_=_.concat(["Global Options:",J(B),""])}let j=q.visibleCommands($).map((B)=>{return Z(q.subcommandTerm(B),q.subcommandDescription(B))});if(j.length>0)_=_.concat(["Commands:",J(j),""]);return _.join(`
5
+ `)}padWidth($,q){return Math.max(q.longestOptionTermLength($,q),q.longestGlobalOptionTermLength($,q),q.longestSubcommandTermLength($,q),q.longestArgumentTermLength($,q))}wrap($,q,Q,z=40){let X=new RegExp(`[\\n][${" \\f\\t\\v\xA0\u1680\u2000-\u200A\u202F\u205F\u3000\uFEFF"}]+`);if($.match(X))return $;let Z=q-Q;if(Z<z)return $;let J=$.slice(0,Q),_=$.slice(Q).replace(`\r
6
6
  `,`
7
- `),_=" ".repeat(Q),W=`\\s${"\u200B"}`,L=new RegExp(`
8
- |.{1,${X-1}}([${W}]|$)|[^${W}]+?([${W}]|$)`,"g"),G=Z.match(L)||[];return M+G.map((N,m)=>{if(N===`
9
- `)return"";return(m>0?_:"")+N.trimEnd()}).join(`
10
- `)}}Y1.Help=U0});var s=D((U1)=>{var{InvalidArgumentError:X1}=k();class B0{constructor($,q){this.flags=$,this.description=q||"",this.required=$.includes("<"),this.optional=$.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test($),this.mandatory=!1;let Q=_1($);if(this.short=Q.shortFlag,this.long=Q.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}preset($){return this.presetArg=$,this}conflicts($){return this.conflictsWith=this.conflictsWith.concat($),this}implies($){let q=$;if(typeof $==="string")q={[$]:!0};return this.implied=Object.assign(this.implied||{},q),this}env($){return this.envVar=$,this}argParser($){return this.parseArg=$,this}makeOptionMandatory($=!0){return this.mandatory=!!$,this}hideHelp($=!0){return this.hidden=!!$,this}_concatValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.concat($)}choices($){return this.argChoices=$.slice(),this.parseArg=(q,Q)=>{if(!this.argChoices.includes(q))throw new X1(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(q,Q);return q},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){return Z1(this.name().replace(/^no-/,""))}is($){return this.short===$||this.long===$}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class K0{constructor($){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,$.forEach((q)=>{if(q.negate)this.negativeOptions.set(q.attributeName(),q);else this.positiveOptions.set(q.attributeName(),q)}),this.negativeOptions.forEach((q,Q)=>{if(this.positiveOptions.has(Q))this.dualOptions.add(Q)})}valueFromOption($,q){let Q=q.attributeName();if(!this.dualOptions.has(Q))return!0;let z=this.negativeOptions.get(Q).presetArg,J=z!==void 0?z:!1;return q.negate===(J===$)}}function Z1($){return $.split("-").reduce((q,Q)=>{return q+Q[0].toUpperCase()+Q.slice(1)})}function _1($){let q,Q,z=$.split(/[ |,]+/);if(z.length>1&&!/^[[<]/.test(z[1]))q=z.shift();if(Q=z.shift(),!q&&/^-[^-]$/.test(Q))q=Q,Q=void 0;return{shortFlag:q,longFlag:Q}}U1.Option=B0;U1.DualOptions=K0});var G0=D((H1)=>{function G1($,q){if(Math.abs($.length-q.length)>3)return Math.max($.length,q.length);let Q=[];for(let z=0;z<=$.length;z++)Q[z]=[z];for(let z=0;z<=q.length;z++)Q[0][z]=z;for(let z=1;z<=q.length;z++)for(let J=1;J<=$.length;J++){let Y=1;if($[J-1]===q[z-1])Y=0;else Y=1;if(Q[J][z]=Math.min(Q[J-1][z]+1,Q[J][z-1]+1,Q[J-1][z-1]+Y),J>1&&z>1&&$[J-1]===q[z-2]&&$[J-2]===q[z-1])Q[J][z]=Math.min(Q[J][z],Q[J-2][z-2]+1)}return Q[$.length][q.length]}function W1($,q){if(!q||q.length===0)return"";q=Array.from(new Set(q));let Q=$.startsWith("--");if(Q)$=$.slice(2),q=q.map((X)=>X.slice(2));let z=[],J=3,Y=0.4;if(q.forEach((X)=>{if(X.length<=1)return;let M=G1($,X),Z=Math.max($.length,X.length);if((Z-M)/Z>Y){if(M<J)J=M,z=[X];else if(M===J)z.push(X)}}),z.sort((X,M)=>X.localeCompare(M)),Q)z=z.map((X)=>`--${X}`);if(z.length>1)return`
7
+ `),U=" ".repeat(Q),M=`\\s${"\u200B"}`,j=new RegExp(`
8
+ |.{1,${Z-1}}([${M}]|$)|[^${M}]+?([${M}]|$)`,"g"),B=_.match(j)||[];return J+B.map((R,P)=>{if(R===`
9
+ `)return"";return(P>0?U:"")+R.trimEnd()}).join(`
10
+ `)}}I$.Help=P0});var $0=f((y$)=>{var{InvalidArgumentError:D$}=h();class I0{constructor($,q){this.flags=$,this.description=q||"",this.required=$.includes("<"),this.optional=$.includes("["),this.variadic=/\w\.\.\.[>\]]$/.test($),this.mandatory=!1;let Q=V$($);if(this.short=Q.shortFlag,this.long=Q.longFlag,this.negate=!1,this.long)this.negate=this.long.startsWith("--no-");this.defaultValue=void 0,this.defaultValueDescription=void 0,this.presetArg=void 0,this.envVar=void 0,this.parseArg=void 0,this.hidden=!1,this.argChoices=void 0,this.conflictsWith=[],this.implied=void 0}default($,q){return this.defaultValue=$,this.defaultValueDescription=q,this}preset($){return this.presetArg=$,this}conflicts($){return this.conflictsWith=this.conflictsWith.concat($),this}implies($){let q=$;if(typeof $==="string")q={[$]:!0};return this.implied=Object.assign(this.implied||{},q),this}env($){return this.envVar=$,this}argParser($){return this.parseArg=$,this}makeOptionMandatory($=!0){return this.mandatory=!!$,this}hideHelp($=!0){return this.hidden=!!$,this}_concatValue($,q){if(q===this.defaultValue||!Array.isArray(q))return[$];return q.concat($)}choices($){return this.argChoices=$.slice(),this.parseArg=(q,Q)=>{if(!this.argChoices.includes(q))throw new D$(`Allowed choices are ${this.argChoices.join(", ")}.`);if(this.variadic)return this._concatValue(q,Q);return q},this}name(){if(this.long)return this.long.replace(/^--/,"");return this.short.replace(/^-/,"")}attributeName(){return T$(this.name().replace(/^no-/,""))}is($){return this.short===$||this.long===$}isBoolean(){return!this.required&&!this.optional&&!this.negate}}class N0{constructor($){this.positiveOptions=new Map,this.negativeOptions=new Map,this.dualOptions=new Set,$.forEach((q)=>{if(q.negate)this.negativeOptions.set(q.attributeName(),q);else this.positiveOptions.set(q.attributeName(),q)}),this.negativeOptions.forEach((q,Q)=>{if(this.positiveOptions.has(Q))this.dualOptions.add(Q)})}valueFromOption($,q){let Q=q.attributeName();if(!this.dualOptions.has(Q))return!0;let z=this.negativeOptions.get(Q).presetArg,Y=z!==void 0?z:!1;return q.negate===(Y===$)}}function T$($){return $.split("-").reduce((q,Q)=>{return q+Q[0].toUpperCase()+Q.slice(1)})}function V$($){let q,Q,z=$.split(/[ |,]+/);if(z.length>1&&!/^[[<]/.test(z[1]))q=z.shift();if(Q=z.shift(),!q&&/^-[^-]$/.test(Q))q=Q,Q=void 0;return{shortFlag:q,longFlag:Q}}y$.Option=I0;y$.DualOptions=N0});var D0=f((C$)=>{function f$($,q){if(Math.abs($.length-q.length)>3)return Math.max($.length,q.length);let Q=[];for(let z=0;z<=$.length;z++)Q[z]=[z];for(let z=0;z<=q.length;z++)Q[0][z]=z;for(let z=1;z<=q.length;z++)for(let Y=1;Y<=$.length;Y++){let X=1;if($[Y-1]===q[z-1])X=0;else X=1;if(Q[Y][z]=Math.min(Q[Y-1][z]+1,Q[Y][z-1]+1,Q[Y-1][z-1]+X),Y>1&&z>1&&$[Y-1]===q[z-2]&&$[Y-2]===q[z-1])Q[Y][z]=Math.min(Q[Y][z],Q[Y-2][z-2]+1)}return Q[$.length][q.length]}function w$($,q){if(!q||q.length===0)return"";q=Array.from(new Set(q));let Q=$.startsWith("--");if(Q)$=$.slice(2),q=q.map((Z)=>Z.slice(2));let z=[],Y=3,X=0.4;if(q.forEach((Z)=>{if(Z.length<=1)return;let J=f$($,Z),_=Math.max($.length,Z.length);if((_-J)/_>X){if(J<Y)Y=J,z=[Z];else if(J===Y)z.push(Z)}}),z.sort((Z,J)=>Z.localeCompare(J)),Q)z=z.map((Z)=>`--${Z}`);if(z.length>1)return`
11
11
  (Did you mean one of ${z.join(", ")}?)`;if(z.length===1)return`
12
- (Did you mean ${z[0]}?)`;return""}H1.suggestSimilar=W1});var L0=D((j1)=>{var L1=T("events").EventEmitter,i=T("child_process"),P=T("path"),p=T("fs"),H=T("process"),{Argument:y1,humanReadableArgName:E1}=C(),{CommanderError:t}=k(),{Help:T1}=r(),{Option:W0,DualOptions:I1}=s(),{suggestSimilar:H0}=G0();class n extends L1{constructor($){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=$||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:(q)=>H.stdout.write(q),writeErr:(q)=>H.stderr.write(q),getOutHelpWidth:()=>H.stdout.isTTY?H.stdout.columns:void 0,getErrHelpWidth:()=>H.stderr.isTTY?H.stderr.columns:void 0,outputError:(q,Q)=>Q(q)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings($){return this._outputConfiguration=$._outputConfiguration,this._helpOption=$._helpOption,this._helpCommand=$._helpCommand,this._helpConfiguration=$._helpConfiguration,this._exitCallback=$._exitCallback,this._storeOptionsAsProperties=$._storeOptionsAsProperties,this._combineFlagAndOptionalValue=$._combineFlagAndOptionalValue,this._allowExcessArguments=$._allowExcessArguments,this._enablePositionalOptions=$._enablePositionalOptions,this._showHelpAfterError=$._showHelpAfterError,this._showSuggestionAfterError=$._showSuggestionAfterError,this}_getCommandAndAncestors(){let $=[];for(let q=this;q;q=q.parent)$.push(q);return $}command($,q,Q){let z=q,J=Q;if(typeof z==="object"&&z!==null)J=z,z=null;J=J||{};let[,Y,X]=$.match(/([^ ]+) *(.*)/),M=this.createCommand(Y);if(z)M.description(z),M._executableHandler=!0;if(J.isDefault)this._defaultCommandName=M._name;if(M._hidden=!!(J.noHelp||J.hidden),M._executableFile=J.executableFile||null,X)M.arguments(X);if(this._registerCommand(M),M.parent=this,M.copyInheritedSettings(this),z)return this;return M}createCommand($){return new n($)}createHelp(){return Object.assign(new T1,this.configureHelp())}configureHelp($){if($===void 0)return this._helpConfiguration;return this._helpConfiguration=$,this}configureOutput($){if($===void 0)return this._outputConfiguration;return Object.assign(this._outputConfiguration,$),this}showHelpAfterError($=!0){if(typeof $!=="string")$=!!$;return this._showHelpAfterError=$,this}showSuggestionAfterError($=!0){return this._showSuggestionAfterError=!!$,this}addCommand($,q){if(!$._name)throw Error(`Command passed to .addCommand() must have a name
13
- - specify the name in Command constructor or using .name()`);if(q=q||{},q.isDefault)this._defaultCommandName=$._name;if(q.noHelp||q.hidden)$._hidden=!0;return this._registerCommand($),$.parent=this,$._checkForBrokenPassThrough(),this}createArgument($,q){return new y1($,q)}argument($,q,Q,z){let J=this.createArgument($,q);if(typeof Q==="function")J.default(z).argParser(Q);else J.default(Q);return this.addArgument(J),this}arguments($){return $.trim().split(/ +/).forEach((q)=>{this.argument(q)}),this}addArgument($){let q=this.registeredArguments.slice(-1)[0];if(q&&q.variadic)throw Error(`only the last argument can be variadic '${q.name()}'`);if($.required&&$.defaultValue!==void 0&&$.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${$.name()}'`);return this.registeredArguments.push($),this}helpCommand($,q){if(typeof $==="boolean")return this._addImplicitHelpCommand=$,this;$=$??"help [command]";let[,Q,z]=$.match(/([^ ]+) *(.*)/),J=q??"display help for command",Y=this.createCommand(Q);if(Y.helpOption(!1),z)Y.arguments(z);if(J)Y.description(J);return this._addImplicitHelpCommand=!0,this._helpCommand=Y,this}addHelpCommand($,q){if(typeof $!=="object")return this.helpCommand($,q),this;return this._addImplicitHelpCommand=!0,this._helpCommand=$,this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook($,q){let Q=["preSubcommand","preAction","postAction"];if(!Q.includes($))throw Error(`Unexpected value for event passed to hook : '${$}'.
14
- Expecting one of '${Q.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycleHooks[$].push(q);else this._lifeCycleHooks[$]=[q];return this}exitOverride($){if($)this._exitCallback=$;else this._exitCallback=(q)=>{if(q.code!=="commander.executeSubCommandAsync")throw q};return this}_exit($,q,Q){if(this._exitCallback)this._exitCallback(new t($,q,Q));H.exit($)}action($){let q=(Q)=>{let z=this.registeredArguments.length,J=Q.slice(0,z);if(this._storeOptionsAsProperties)J[z]=this;else J[z]=this.opts();return J.push(this),$.apply(this,J)};return this._actionHandler=q,this}createOption($,q){return new W0($,q)}_callParseArg($,q,Q,z){try{return $.parseArg(q,Q)}catch(J){if(J.code==="commander.invalidArgument"){let Y=`${z} ${J.message}`;this.error(Y,{exitCode:J.exitCode,code:J.code})}throw J}}_registerOption($){let q=$.short&&this._findOption($.short)||$.long&&this._findOption($.long);if(q){let Q=$.long&&this._findOption($.long)?$.long:$.short;throw Error(`Cannot add option '${$.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${Q}'
15
- - already used by option '${q.flags}'`)}this.options.push($)}_registerCommand($){let q=(z)=>{return[z.name()].concat(z.aliases())},Q=q($).find((z)=>this._findCommand(z));if(Q){let z=q(this._findCommand(Q)).join("|"),J=q($).join("|");throw Error(`cannot add command '${J}' as already have command '${z}'`)}this.commands.push($)}addOption($){this._registerOption($);let q=$.name(),Q=$.attributeName();if($.negate){let J=$.long.replace(/^--no-/,"--");if(!this._findOption(J))this.setOptionValueWithSource(Q,$.defaultValue===void 0?!0:$.defaultValue,"default")}else if($.defaultValue!==void 0)this.setOptionValueWithSource(Q,$.defaultValue,"default");let z=(J,Y,X)=>{if(J==null&&$.presetArg!==void 0)J=$.presetArg;let M=this.getOptionValue(Q);if(J!==null&&$.parseArg)J=this._callParseArg($,J,M,Y);else if(J!==null&&$.variadic)J=$._concatValue(J,M);if(J==null)if($.negate)J=!1;else if($.isBoolean()||$.optional)J=!0;else J="";this.setOptionValueWithSource(Q,J,X)};if(this.on("option:"+q,(J)=>{let Y=`error: option '${$.flags}' argument '${J}' is invalid.`;z(J,Y,"cli")}),$.envVar)this.on("optionEnv:"+q,(J)=>{let Y=`error: option '${$.flags}' value '${J}' from env '${$.envVar}' is invalid.`;z(J,Y,"env")});return this}_optionEx($,q,Q,z,J){if(typeof q==="object"&&q instanceof W0)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let Y=this.createOption(q,Q);if(Y.makeOptionMandatory(!!$.mandatory),typeof z==="function")Y.default(J).argParser(z);else if(z instanceof RegExp){let X=z;z=(M,Z)=>{let _=X.exec(M);return _?_[0]:Z},Y.default(J).argParser(z)}else Y.default(z);return this.addOption(Y)}option($,q,Q,z){return this._optionEx({},$,q,Q,z)}requiredOption($,q,Q,z){return this._optionEx({mandatory:!0},$,q,Q,z)}combineFlagAndOptionalValue($=!0){return this._combineFlagAndOptionalValue=!!$,this}allowUnknownOption($=!0){return this._allowUnknownOption=!!$,this}allowExcessArguments($=!0){return this._allowExcessArguments=!!$,this}enablePositionalOptions($=!0){return this._enablePositionalOptions=!!$,this}passThroughOptions($=!0){return this._passThroughOptions=!!$,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties($=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!$,this}getOptionValue($){if(this._storeOptionsAsProperties)return this[$];return this._optionValues[$]}setOptionValue($,q){return this.setOptionValueWithSource($,q,void 0)}setOptionValueWithSource($,q,Q){if(this._storeOptionsAsProperties)this[$]=q;else this._optionValues[$]=q;return this._optionValueSources[$]=Q,this}getOptionValueSource($){return this._optionValueSources[$]}getOptionValueSourceWithGlobals($){let q;return this._getCommandAndAncestors().forEach((Q)=>{if(Q.getOptionValueSource($)!==void 0)q=Q.getOptionValueSource($)}),q}_prepareUserArgs($,q){if($!==void 0&&!Array.isArray($))throw Error("first parameter to parse must be array or undefined");if(q=q||{},$===void 0&&q.from===void 0){if(H.versions?.electron)q.from="electron";let z=H.execArgv??[];if(z.includes("-e")||z.includes("--eval")||z.includes("-p")||z.includes("--print"))q.from="eval"}if($===void 0)$=H.argv;this.rawArgs=$.slice();let Q;switch(q.from){case void 0:case"node":this._scriptPath=$[1],Q=$.slice(2);break;case"electron":if(H.defaultApp)this._scriptPath=$[1],Q=$.slice(2);else Q=$.slice(1);break;case"user":Q=$.slice(0);break;case"eval":Q=$.slice(1);break;default:throw Error(`unexpected parse option { from: '${q.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",Q}parse($,q){let Q=this._prepareUserArgs($,q);return this._parseCommand([],Q),this}async parseAsync($,q){let Q=this._prepareUserArgs($,q);return await this._parseCommand([],Q),this}_executeSubCommand($,q){q=q.slice();let Q=!1,z=[".js",".ts",".tsx",".mjs",".cjs"];function J(_,U){let W=P.resolve(_,U);if(p.existsSync(W))return W;if(z.includes(P.extname(U)))return;let L=z.find((G)=>p.existsSync(`${W}${G}`));if(L)return`${W}${L}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let Y=$._executableFile||`${this._name}-${$._name}`,X=this._executableDir||"";if(this._scriptPath){let _;try{_=p.realpathSync(this._scriptPath)}catch(U){_=this._scriptPath}X=P.resolve(P.dirname(_),X)}if(X){let _=J(X,Y);if(!_&&!$._executableFile&&this._scriptPath){let U=P.basename(this._scriptPath,P.extname(this._scriptPath));if(U!==this._name)_=J(X,`${U}-${$._name}`)}Y=_||Y}Q=z.includes(P.extname(Y));let M;if(H.platform!=="win32")if(Q)q.unshift(Y),q=R0(H.execArgv).concat(q),M=i.spawn(H.argv[0],q,{stdio:"inherit"});else M=i.spawn(Y,q,{stdio:"inherit"});else q.unshift(Y),q=R0(H.execArgv).concat(q),M=i.spawn(H.execPath,q,{stdio:"inherit"});if(!M.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((U)=>{H.on(U,()=>{if(M.killed===!1&&M.exitCode===null)M.kill(U)})});let Z=this._exitCallback;M.on("close",(_)=>{if(_=_??1,!Z)H.exit(_);else Z(new t(_,"commander.executeSubCommandAsync","(close)"))}),M.on("error",(_)=>{if(_.code==="ENOENT"){let U=X?`searched for local subcommand relative to directory '${X}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",W=`'${Y}' does not exist
12
+ (Did you mean ${z[0]}?)`;return""}C$.suggestSimilar=w$});var S0=f((u$)=>{var x$=D("events").EventEmitter,q0=D("child_process"),y=D("path"),Q0=D("fs"),L=D("process"),{Argument:b$,humanReadableArgName:O$}=l(),{CommanderError:z0}=h(),{Help:h$}=e(),{Option:T0,DualOptions:v$}=$0(),{suggestSimilar:V0}=D0();class Y0 extends x${constructor($){super();this.commands=[],this.options=[],this.parent=null,this._allowUnknownOption=!1,this._allowExcessArguments=!0,this.registeredArguments=[],this._args=this.registeredArguments,this.args=[],this.rawArgs=[],this.processedArgs=[],this._scriptPath=null,this._name=$||"",this._optionValues={},this._optionValueSources={},this._storeOptionsAsProperties=!1,this._actionHandler=null,this._executableHandler=!1,this._executableFile=null,this._executableDir=null,this._defaultCommandName=null,this._exitCallback=null,this._aliases=[],this._combineFlagAndOptionalValue=!0,this._description="",this._summary="",this._argsDescription=void 0,this._enablePositionalOptions=!1,this._passThroughOptions=!1,this._lifeCycleHooks={},this._showHelpAfterError=!1,this._showSuggestionAfterError=!0,this._outputConfiguration={writeOut:(q)=>L.stdout.write(q),writeErr:(q)=>L.stderr.write(q),getOutHelpWidth:()=>L.stdout.isTTY?L.stdout.columns:void 0,getErrHelpWidth:()=>L.stderr.isTTY?L.stderr.columns:void 0,outputError:(q,Q)=>Q(q)},this._hidden=!1,this._helpOption=void 0,this._addImplicitHelpCommand=void 0,this._helpCommand=void 0,this._helpConfiguration={}}copyInheritedSettings($){return this._outputConfiguration=$._outputConfiguration,this._helpOption=$._helpOption,this._helpCommand=$._helpCommand,this._helpConfiguration=$._helpConfiguration,this._exitCallback=$._exitCallback,this._storeOptionsAsProperties=$._storeOptionsAsProperties,this._combineFlagAndOptionalValue=$._combineFlagAndOptionalValue,this._allowExcessArguments=$._allowExcessArguments,this._enablePositionalOptions=$._enablePositionalOptions,this._showHelpAfterError=$._showHelpAfterError,this._showSuggestionAfterError=$._showSuggestionAfterError,this}_getCommandAndAncestors(){let $=[];for(let q=this;q;q=q.parent)$.push(q);return $}command($,q,Q){let z=q,Y=Q;if(typeof z==="object"&&z!==null)Y=z,z=null;Y=Y||{};let[,X,Z]=$.match(/([^ ]+) *(.*)/),J=this.createCommand(X);if(z)J.description(z),J._executableHandler=!0;if(Y.isDefault)this._defaultCommandName=J._name;if(J._hidden=!!(Y.noHelp||Y.hidden),J._executableFile=Y.executableFile||null,Z)J.arguments(Z);if(this._registerCommand(J),J.parent=this,J.copyInheritedSettings(this),z)return this;return J}createCommand($){return new Y0($)}createHelp(){return Object.assign(new h$,this.configureHelp())}configureHelp($){if($===void 0)return this._helpConfiguration;return this._helpConfiguration=$,this}configureOutput($){if($===void 0)return this._outputConfiguration;return Object.assign(this._outputConfiguration,$),this}showHelpAfterError($=!0){if(typeof $!=="string")$=!!$;return this._showHelpAfterError=$,this}showSuggestionAfterError($=!0){return this._showSuggestionAfterError=!!$,this}addCommand($,q){if(!$._name)throw Error(`Command passed to .addCommand() must have a name
13
+ - specify the name in Command constructor or using .name()`);if(q=q||{},q.isDefault)this._defaultCommandName=$._name;if(q.noHelp||q.hidden)$._hidden=!0;return this._registerCommand($),$.parent=this,$._checkForBrokenPassThrough(),this}createArgument($,q){return new b$($,q)}argument($,q,Q,z){let Y=this.createArgument($,q);if(typeof Q==="function")Y.default(z).argParser(Q);else Y.default(Q);return this.addArgument(Y),this}arguments($){return $.trim().split(/ +/).forEach((q)=>{this.argument(q)}),this}addArgument($){let q=this.registeredArguments.slice(-1)[0];if(q&&q.variadic)throw Error(`only the last argument can be variadic '${q.name()}'`);if($.required&&$.defaultValue!==void 0&&$.parseArg===void 0)throw Error(`a default value for a required argument is never used: '${$.name()}'`);return this.registeredArguments.push($),this}helpCommand($,q){if(typeof $==="boolean")return this._addImplicitHelpCommand=$,this;$=$??"help [command]";let[,Q,z]=$.match(/([^ ]+) *(.*)/),Y=q??"display help for command",X=this.createCommand(Q);if(X.helpOption(!1),z)X.arguments(z);if(Y)X.description(Y);return this._addImplicitHelpCommand=!0,this._helpCommand=X,this}addHelpCommand($,q){if(typeof $!=="object")return this.helpCommand($,q),this;return this._addImplicitHelpCommand=!0,this._helpCommand=$,this}_getHelpCommand(){if(this._addImplicitHelpCommand??(this.commands.length&&!this._actionHandler&&!this._findCommand("help"))){if(this._helpCommand===void 0)this.helpCommand(void 0,void 0);return this._helpCommand}return null}hook($,q){let Q=["preSubcommand","preAction","postAction"];if(!Q.includes($))throw Error(`Unexpected value for event passed to hook : '${$}'.
14
+ Expecting one of '${Q.join("', '")}'`);if(this._lifeCycleHooks[$])this._lifeCycleHooks[$].push(q);else this._lifeCycleHooks[$]=[q];return this}exitOverride($){if($)this._exitCallback=$;else this._exitCallback=(q)=>{if(q.code!=="commander.executeSubCommandAsync")throw q};return this}_exit($,q,Q){if(this._exitCallback)this._exitCallback(new z0($,q,Q));L.exit($)}action($){let q=(Q)=>{let z=this.registeredArguments.length,Y=Q.slice(0,z);if(this._storeOptionsAsProperties)Y[z]=this;else Y[z]=this.opts();return Y.push(this),$.apply(this,Y)};return this._actionHandler=q,this}createOption($,q){return new T0($,q)}_callParseArg($,q,Q,z){try{return $.parseArg(q,Q)}catch(Y){if(Y.code==="commander.invalidArgument"){let X=`${z} ${Y.message}`;this.error(X,{exitCode:Y.exitCode,code:Y.code})}throw Y}}_registerOption($){let q=$.short&&this._findOption($.short)||$.long&&this._findOption($.long);if(q){let Q=$.long&&this._findOption($.long)?$.long:$.short;throw Error(`Cannot add option '${$.flags}'${this._name&&` to command '${this._name}'`} due to conflicting flag '${Q}'
15
+ - already used by option '${q.flags}'`)}this.options.push($)}_registerCommand($){let q=(z)=>{return[z.name()].concat(z.aliases())},Q=q($).find((z)=>this._findCommand(z));if(Q){let z=q(this._findCommand(Q)).join("|"),Y=q($).join("|");throw Error(`cannot add command '${Y}' as already have command '${z}'`)}this.commands.push($)}addOption($){this._registerOption($);let q=$.name(),Q=$.attributeName();if($.negate){let Y=$.long.replace(/^--no-/,"--");if(!this._findOption(Y))this.setOptionValueWithSource(Q,$.defaultValue===void 0?!0:$.defaultValue,"default")}else if($.defaultValue!==void 0)this.setOptionValueWithSource(Q,$.defaultValue,"default");let z=(Y,X,Z)=>{if(Y==null&&$.presetArg!==void 0)Y=$.presetArg;let J=this.getOptionValue(Q);if(Y!==null&&$.parseArg)Y=this._callParseArg($,Y,J,X);else if(Y!==null&&$.variadic)Y=$._concatValue(Y,J);if(Y==null)if($.negate)Y=!1;else if($.isBoolean()||$.optional)Y=!0;else Y="";this.setOptionValueWithSource(Q,Y,Z)};if(this.on("option:"+q,(Y)=>{let X=`error: option '${$.flags}' argument '${Y}' is invalid.`;z(Y,X,"cli")}),$.envVar)this.on("optionEnv:"+q,(Y)=>{let X=`error: option '${$.flags}' value '${Y}' from env '${$.envVar}' is invalid.`;z(Y,X,"env")});return this}_optionEx($,q,Q,z,Y){if(typeof q==="object"&&q instanceof T0)throw Error("To add an Option object use addOption() instead of option() or requiredOption()");let X=this.createOption(q,Q);if(X.makeOptionMandatory(!!$.mandatory),typeof z==="function")X.default(Y).argParser(z);else if(z instanceof RegExp){let Z=z;z=(J,_)=>{let U=Z.exec(J);return U?U[0]:_},X.default(Y).argParser(z)}else X.default(z);return this.addOption(X)}option($,q,Q,z){return this._optionEx({},$,q,Q,z)}requiredOption($,q,Q,z){return this._optionEx({mandatory:!0},$,q,Q,z)}combineFlagAndOptionalValue($=!0){return this._combineFlagAndOptionalValue=!!$,this}allowUnknownOption($=!0){return this._allowUnknownOption=!!$,this}allowExcessArguments($=!0){return this._allowExcessArguments=!!$,this}enablePositionalOptions($=!0){return this._enablePositionalOptions=!!$,this}passThroughOptions($=!0){return this._passThroughOptions=!!$,this._checkForBrokenPassThrough(),this}_checkForBrokenPassThrough(){if(this.parent&&this._passThroughOptions&&!this.parent._enablePositionalOptions)throw Error(`passThroughOptions cannot be used for '${this._name}' without turning on enablePositionalOptions for parent command(s)`)}storeOptionsAsProperties($=!0){if(this.options.length)throw Error("call .storeOptionsAsProperties() before adding options");if(Object.keys(this._optionValues).length)throw Error("call .storeOptionsAsProperties() before setting option values");return this._storeOptionsAsProperties=!!$,this}getOptionValue($){if(this._storeOptionsAsProperties)return this[$];return this._optionValues[$]}setOptionValue($,q){return this.setOptionValueWithSource($,q,void 0)}setOptionValueWithSource($,q,Q){if(this._storeOptionsAsProperties)this[$]=q;else this._optionValues[$]=q;return this._optionValueSources[$]=Q,this}getOptionValueSource($){return this._optionValueSources[$]}getOptionValueSourceWithGlobals($){let q;return this._getCommandAndAncestors().forEach((Q)=>{if(Q.getOptionValueSource($)!==void 0)q=Q.getOptionValueSource($)}),q}_prepareUserArgs($,q){if($!==void 0&&!Array.isArray($))throw Error("first parameter to parse must be array or undefined");if(q=q||{},$===void 0&&q.from===void 0){if(L.versions?.electron)q.from="electron";let z=L.execArgv??[];if(z.includes("-e")||z.includes("--eval")||z.includes("-p")||z.includes("--print"))q.from="eval"}if($===void 0)$=L.argv;this.rawArgs=$.slice();let Q;switch(q.from){case void 0:case"node":this._scriptPath=$[1],Q=$.slice(2);break;case"electron":if(L.defaultApp)this._scriptPath=$[1],Q=$.slice(2);else Q=$.slice(1);break;case"user":Q=$.slice(0);break;case"eval":Q=$.slice(1);break;default:throw Error(`unexpected parse option { from: '${q.from}' }`)}if(!this._name&&this._scriptPath)this.nameFromFilename(this._scriptPath);return this._name=this._name||"program",Q}parse($,q){let Q=this._prepareUserArgs($,q);return this._parseCommand([],Q),this}async parseAsync($,q){let Q=this._prepareUserArgs($,q);return await this._parseCommand([],Q),this}_executeSubCommand($,q){q=q.slice();let Q=!1,z=[".js",".ts",".tsx",".mjs",".cjs"];function Y(U,G){let M=y.resolve(U,G);if(Q0.existsSync(M))return M;if(z.includes(y.extname(G)))return;let j=z.find((B)=>Q0.existsSync(`${M}${B}`));if(j)return`${M}${j}`;return}this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let X=$._executableFile||`${this._name}-${$._name}`,Z=this._executableDir||"";if(this._scriptPath){let U;try{U=Q0.realpathSync(this._scriptPath)}catch(G){U=this._scriptPath}Z=y.resolve(y.dirname(U),Z)}if(Z){let U=Y(Z,X);if(!U&&!$._executableFile&&this._scriptPath){let G=y.basename(this._scriptPath,y.extname(this._scriptPath));if(G!==this._name)U=Y(Z,`${G}-${$._name}`)}X=U||X}Q=z.includes(y.extname(X));let J;if(L.platform!=="win32")if(Q)q.unshift(X),q=y0(L.execArgv).concat(q),J=q0.spawn(L.argv[0],q,{stdio:"inherit"});else J=q0.spawn(X,q,{stdio:"inherit"});else q.unshift(X),q=y0(L.execArgv).concat(q),J=q0.spawn(L.execPath,q,{stdio:"inherit"});if(!J.killed)["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"].forEach((G)=>{L.on(G,()=>{if(J.killed===!1&&J.exitCode===null)J.kill(G)})});let _=this._exitCallback;J.on("close",(U)=>{if(U=U??1,!_)L.exit(U);else _(new z0(U,"commander.executeSubCommandAsync","(close)"))}),J.on("error",(U)=>{if(U.code==="ENOENT"){let G=Z?`searched for local subcommand relative to directory '${Z}'`:"no directory for search for local subcommand, use .executableDir() to supply a custom directory",M=`'${X}' does not exist
16
16
  - if '${$._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
17
17
  - if the default executable name is not suitable, use the executableFile option to supply a custom name or path
18
- - ${U}`;throw Error(W)}else if(_.code==="EACCES")throw Error(`'${Y}' not executable`);if(!Z)H.exit(1);else{let U=new t(1,"commander.executeSubCommandAsync","(error)");U.nestedError=_,Z(U)}}),this.runningCommand=M}_dispatchSubcommand($,q,Q){let z=this._findCommand($);if(!z)this.help({error:!0});let J;return J=this._chainOrCallSubCommandHook(J,z,"preSubcommand"),J=this._chainOrCall(J,()=>{if(z._executableHandler)this._executeSubCommand(z,q.concat(Q));else return z._parseCommand(q,Q)}),J}_dispatchHelpCommand($){if(!$)this.help();let q=this._findCommand($);if(q&&!q._executableHandler)q.help();return this._dispatchSubcommand($,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach(($,q)=>{if($.required&&this.args[q]==null)this.missingArgument($.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let $=(Q,z,J)=>{let Y=z;if(z!==null&&Q.parseArg){let X=`error: command-argument value '${z}' is invalid for argument '${Q.name()}'.`;Y=this._callParseArg(Q,z,J,X)}return Y};this._checkNumberOfArguments();let q=[];this.registeredArguments.forEach((Q,z)=>{let J=Q.defaultValue;if(Q.variadic){if(z<this.args.length){if(J=this.args.slice(z),Q.parseArg)J=J.reduce((Y,X)=>{return $(Q,X,Y)},Q.defaultValue)}else if(J===void 0)J=[]}else if(z<this.args.length){if(J=this.args[z],Q.parseArg)J=$(Q,J,Q.defaultValue)}q[z]=J}),this.processedArgs=q}_chainOrCall($,q){if($&&$.then&&typeof $.then==="function")return $.then(()=>q());return q()}_chainOrCallHooks($,q){let Q=$,z=[];if(this._getCommandAndAncestors().reverse().filter((J)=>J._lifeCycleHooks[q]!==void 0).forEach((J)=>{J._lifeCycleHooks[q].forEach((Y)=>{z.push({hookedCommand:J,callback:Y})})}),q==="postAction")z.reverse();return z.forEach((J)=>{Q=this._chainOrCall(Q,()=>{return J.callback(J.hookedCommand,this)})}),Q}_chainOrCallSubCommandHook($,q,Q){let z=$;if(this._lifeCycleHooks[Q]!==void 0)this._lifeCycleHooks[Q].forEach((J)=>{z=this._chainOrCall(z,()=>{return J(this,q)})});return z}_parseCommand($,q){let Q=this.parseOptions(q);if(this._parseOptionsEnv(),this._parseOptionsImplied(),$=$.concat(Q.operands),q=Q.unknown,this.args=$.concat(q),$&&this._findCommand($[0]))return this._dispatchSubcommand($[0],$.slice(1),q);if(this._getHelpCommand()&&$[0]===this._getHelpCommand().name())return this._dispatchHelpCommand($[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(q),this._dispatchSubcommand(this._defaultCommandName,$,q);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(Q.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let z=()=>{if(Q.unknown.length>0)this.unknownOption(Q.unknown[0])},J=`command:${this.name()}`;if(this._actionHandler){z(),this._processArguments();let Y;if(Y=this._chainOrCallHooks(Y,"preAction"),Y=this._chainOrCall(Y,()=>this._actionHandler(this.processedArgs)),this.parent)Y=this._chainOrCall(Y,()=>{this.parent.emit(J,$,q)});return Y=this._chainOrCallHooks(Y,"postAction"),Y}if(this.parent&&this.parent.listenerCount(J))z(),this._processArguments(),this.parent.emit(J,$,q);else if($.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",$,q);if(this.listenerCount("command:*"))this.emit("command:*",$,q);else if(this.commands.length)this.unknownCommand();else z(),this._processArguments()}else if(this.commands.length)z(),this.help({error:!0});else z(),this._processArguments()}_findCommand($){if(!$)return;return this.commands.find((q)=>q._name===$||q._aliases.includes($))}_findOption($){return this.options.find((q)=>q.is($))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(($)=>{$.options.forEach((q)=>{if(q.mandatory&&$.getOptionValue(q.attributeName())===void 0)$.missingMandatoryOptionValue(q)})})}_checkForConflictingLocalOptions(){let $=this.options.filter((Q)=>{let z=Q.attributeName();if(this.getOptionValue(z)===void 0)return!1;return this.getOptionValueSource(z)!=="default"});$.filter((Q)=>Q.conflictsWith.length>0).forEach((Q)=>{let z=$.find((J)=>Q.conflictsWith.includes(J.attributeName()));if(z)this._conflictingOption(Q,z)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(($)=>{$._checkForConflictingLocalOptions()})}parseOptions($){let q=[],Q=[],z=q,J=$.slice();function Y(M){return M.length>1&&M[0]==="-"}let X=null;while(J.length){let M=J.shift();if(M==="--"){if(z===Q)z.push(M);z.push(...J);break}if(X&&!Y(M)){this.emit(`option:${X.name()}`,M);continue}if(X=null,Y(M)){let Z=this._findOption(M);if(Z){if(Z.required){let _=J.shift();if(_===void 0)this.optionMissingArgument(Z);this.emit(`option:${Z.name()}`,_)}else if(Z.optional){let _=null;if(J.length>0&&!Y(J[0]))_=J.shift();this.emit(`option:${Z.name()}`,_)}else this.emit(`option:${Z.name()}`);X=Z.variadic?Z:null;continue}}if(M.length>2&&M[0]==="-"&&M[1]!=="-"){let Z=this._findOption(`-${M[1]}`);if(Z){if(Z.required||Z.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${Z.name()}`,M.slice(2));else this.emit(`option:${Z.name()}`),J.unshift(`-${M.slice(2)}`);continue}}if(/^--[^=]+=/.test(M)){let Z=M.indexOf("="),_=this._findOption(M.slice(0,Z));if(_&&(_.required||_.optional)){this.emit(`option:${_.name()}`,M.slice(Z+1));continue}}if(Y(M))z=Q;if((this._enablePositionalOptions||this._passThroughOptions)&&q.length===0&&Q.length===0){if(this._findCommand(M)){if(q.push(M),J.length>0)Q.push(...J);break}else if(this._getHelpCommand()&&M===this._getHelpCommand().name()){if(q.push(M),J.length>0)q.push(...J);break}else if(this._defaultCommandName){if(Q.push(M),J.length>0)Q.push(...J);break}}if(this._passThroughOptions){if(z.push(M),J.length>0)z.push(...J);break}z.push(M)}return{operands:q,unknown:Q}}opts(){if(this._storeOptionsAsProperties){let $={},q=this.options.length;for(let Q=0;Q<q;Q++){let z=this.options[Q].attributeName();$[z]=z===this._versionOptionName?this._version:this[z]}return $}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce(($,q)=>Object.assign($,q.opts()),{})}error($,q){if(this._outputConfiguration.outputError(`${$}
18
+ - ${G}`;throw Error(M)}else if(U.code==="EACCES")throw Error(`'${X}' not executable`);if(!_)L.exit(1);else{let G=new z0(1,"commander.executeSubCommandAsync","(error)");G.nestedError=U,_(G)}}),this.runningCommand=J}_dispatchSubcommand($,q,Q){let z=this._findCommand($);if(!z)this.help({error:!0});let Y;return Y=this._chainOrCallSubCommandHook(Y,z,"preSubcommand"),Y=this._chainOrCall(Y,()=>{if(z._executableHandler)this._executeSubCommand(z,q.concat(Q));else return z._parseCommand(q,Q)}),Y}_dispatchHelpCommand($){if(!$)this.help();let q=this._findCommand($);if(q&&!q._executableHandler)q.help();return this._dispatchSubcommand($,[],[this._getHelpOption()?.long??this._getHelpOption()?.short??"--help"])}_checkNumberOfArguments(){if(this.registeredArguments.forEach(($,q)=>{if($.required&&this.args[q]==null)this.missingArgument($.name())}),this.registeredArguments.length>0&&this.registeredArguments[this.registeredArguments.length-1].variadic)return;if(this.args.length>this.registeredArguments.length)this._excessArguments(this.args)}_processArguments(){let $=(Q,z,Y)=>{let X=z;if(z!==null&&Q.parseArg){let Z=`error: command-argument value '${z}' is invalid for argument '${Q.name()}'.`;X=this._callParseArg(Q,z,Y,Z)}return X};this._checkNumberOfArguments();let q=[];this.registeredArguments.forEach((Q,z)=>{let Y=Q.defaultValue;if(Q.variadic){if(z<this.args.length){if(Y=this.args.slice(z),Q.parseArg)Y=Y.reduce((X,Z)=>{return $(Q,Z,X)},Q.defaultValue)}else if(Y===void 0)Y=[]}else if(z<this.args.length){if(Y=this.args[z],Q.parseArg)Y=$(Q,Y,Q.defaultValue)}q[z]=Y}),this.processedArgs=q}_chainOrCall($,q){if($&&$.then&&typeof $.then==="function")return $.then(()=>q());return q()}_chainOrCallHooks($,q){let Q=$,z=[];if(this._getCommandAndAncestors().reverse().filter((Y)=>Y._lifeCycleHooks[q]!==void 0).forEach((Y)=>{Y._lifeCycleHooks[q].forEach((X)=>{z.push({hookedCommand:Y,callback:X})})}),q==="postAction")z.reverse();return z.forEach((Y)=>{Q=this._chainOrCall(Q,()=>{return Y.callback(Y.hookedCommand,this)})}),Q}_chainOrCallSubCommandHook($,q,Q){let z=$;if(this._lifeCycleHooks[Q]!==void 0)this._lifeCycleHooks[Q].forEach((Y)=>{z=this._chainOrCall(z,()=>{return Y(this,q)})});return z}_parseCommand($,q){let Q=this.parseOptions(q);if(this._parseOptionsEnv(),this._parseOptionsImplied(),$=$.concat(Q.operands),q=Q.unknown,this.args=$.concat(q),$&&this._findCommand($[0]))return this._dispatchSubcommand($[0],$.slice(1),q);if(this._getHelpCommand()&&$[0]===this._getHelpCommand().name())return this._dispatchHelpCommand($[1]);if(this._defaultCommandName)return this._outputHelpIfRequested(q),this._dispatchSubcommand(this._defaultCommandName,$,q);if(this.commands.length&&this.args.length===0&&!this._actionHandler&&!this._defaultCommandName)this.help({error:!0});this._outputHelpIfRequested(Q.unknown),this._checkForMissingMandatoryOptions(),this._checkForConflictingOptions();let z=()=>{if(Q.unknown.length>0)this.unknownOption(Q.unknown[0])},Y=`command:${this.name()}`;if(this._actionHandler){z(),this._processArguments();let X;if(X=this._chainOrCallHooks(X,"preAction"),X=this._chainOrCall(X,()=>this._actionHandler(this.processedArgs)),this.parent)X=this._chainOrCall(X,()=>{this.parent.emit(Y,$,q)});return X=this._chainOrCallHooks(X,"postAction"),X}if(this.parent&&this.parent.listenerCount(Y))z(),this._processArguments(),this.parent.emit(Y,$,q);else if($.length){if(this._findCommand("*"))return this._dispatchSubcommand("*",$,q);if(this.listenerCount("command:*"))this.emit("command:*",$,q);else if(this.commands.length)this.unknownCommand();else z(),this._processArguments()}else if(this.commands.length)z(),this.help({error:!0});else z(),this._processArguments()}_findCommand($){if(!$)return;return this.commands.find((q)=>q._name===$||q._aliases.includes($))}_findOption($){return this.options.find((q)=>q.is($))}_checkForMissingMandatoryOptions(){this._getCommandAndAncestors().forEach(($)=>{$.options.forEach((q)=>{if(q.mandatory&&$.getOptionValue(q.attributeName())===void 0)$.missingMandatoryOptionValue(q)})})}_checkForConflictingLocalOptions(){let $=this.options.filter((Q)=>{let z=Q.attributeName();if(this.getOptionValue(z)===void 0)return!1;return this.getOptionValueSource(z)!=="default"});$.filter((Q)=>Q.conflictsWith.length>0).forEach((Q)=>{let z=$.find((Y)=>Q.conflictsWith.includes(Y.attributeName()));if(z)this._conflictingOption(Q,z)})}_checkForConflictingOptions(){this._getCommandAndAncestors().forEach(($)=>{$._checkForConflictingLocalOptions()})}parseOptions($){let q=[],Q=[],z=q,Y=$.slice();function X(J){return J.length>1&&J[0]==="-"}let Z=null;while(Y.length){let J=Y.shift();if(J==="--"){if(z===Q)z.push(J);z.push(...Y);break}if(Z&&!X(J)){this.emit(`option:${Z.name()}`,J);continue}if(Z=null,X(J)){let _=this._findOption(J);if(_){if(_.required){let U=Y.shift();if(U===void 0)this.optionMissingArgument(_);this.emit(`option:${_.name()}`,U)}else if(_.optional){let U=null;if(Y.length>0&&!X(Y[0]))U=Y.shift();this.emit(`option:${_.name()}`,U)}else this.emit(`option:${_.name()}`);Z=_.variadic?_:null;continue}}if(J.length>2&&J[0]==="-"&&J[1]!=="-"){let _=this._findOption(`-${J[1]}`);if(_){if(_.required||_.optional&&this._combineFlagAndOptionalValue)this.emit(`option:${_.name()}`,J.slice(2));else this.emit(`option:${_.name()}`),Y.unshift(`-${J.slice(2)}`);continue}}if(/^--[^=]+=/.test(J)){let _=J.indexOf("="),U=this._findOption(J.slice(0,_));if(U&&(U.required||U.optional)){this.emit(`option:${U.name()}`,J.slice(_+1));continue}}if(X(J))z=Q;if((this._enablePositionalOptions||this._passThroughOptions)&&q.length===0&&Q.length===0){if(this._findCommand(J)){if(q.push(J),Y.length>0)Q.push(...Y);break}else if(this._getHelpCommand()&&J===this._getHelpCommand().name()){if(q.push(J),Y.length>0)q.push(...Y);break}else if(this._defaultCommandName){if(Q.push(J),Y.length>0)Q.push(...Y);break}}if(this._passThroughOptions){if(z.push(J),Y.length>0)z.push(...Y);break}z.push(J)}return{operands:q,unknown:Q}}opts(){if(this._storeOptionsAsProperties){let $={},q=this.options.length;for(let Q=0;Q<q;Q++){let z=this.options[Q].attributeName();$[z]=z===this._versionOptionName?this._version:this[z]}return $}return this._optionValues}optsWithGlobals(){return this._getCommandAndAncestors().reduce(($,q)=>Object.assign($,q.opts()),{})}error($,q){if(this._outputConfiguration.outputError(`${$}
19
19
  `,this._outputConfiguration.writeErr),typeof this._showHelpAfterError==="string")this._outputConfiguration.writeErr(`${this._showHelpAfterError}
20
20
  `);else if(this._showHelpAfterError)this._outputConfiguration.writeErr(`
21
- `),this.outputHelp({error:!0});let Q=q||{},z=Q.exitCode||1,J=Q.code||"commander.error";this._exit(z,J,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in H.env){let q=$.attributeName();if(this.getOptionValue(q)===void 0||["default","config","env"].includes(this.getOptionValueSource(q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,H.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new I1(this.options),q=(Q)=>{return this.getOptionValue(Q)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(Q))};this.options.filter((Q)=>Q.implied!==void 0&&q(Q.attributeName())&&$.valueFromOption(this.getOptionValue(Q.attributeName()),Q)).forEach((Q)=>{Object.keys(Q.implied).filter((z)=>!q(z)).forEach((z)=>{this.setOptionValueWithSource(z,Q.implied[z],"implied")})})}missingArgument($){let q=`error: missing required argument '${$}'`;this.error(q,{code:"commander.missingArgument"})}optionMissingArgument($){let q=`error: option '${$.flags}' argument missing`;this.error(q,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let q=`error: required option '${$.flags}' not specified`;this.error(q,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,q){let Q=(Y)=>{let X=Y.attributeName(),M=this.getOptionValue(X),Z=this.options.find((U)=>U.negate&&X===U.attributeName()),_=this.options.find((U)=>!U.negate&&X===U.attributeName());if(Z&&(Z.presetArg===void 0&&M===!1||Z.presetArg!==void 0&&M===Z.presetArg))return Z;return _||Y},z=(Y)=>{let X=Q(Y),M=X.attributeName();if(this.getOptionValueSource(M)==="env")return`environment variable '${X.envVar}'`;return`option '${X.flags}'`},J=`error: ${z($)} cannot be used with ${z(q)}`;this.error(J,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let q="";if($.startsWith("--")&&this._showSuggestionAfterError){let z=[],J=this;do{let Y=J.createHelp().visibleOptions(J).filter((X)=>X.long).map((X)=>X.long);z=z.concat(Y),J=J.parent}while(J&&!J._enablePositionalOptions);q=H0($,z)}let Q=`error: unknown option '${$}'${q}`;this.error(Q,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let q=this.registeredArguments.length,Q=q===1?"":"s",J=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${q} argument${Q} but got ${$.length}.`;this.error(J,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],q="";if(this._showSuggestionAfterError){let z=[];this.createHelp().visibleCommands(this).forEach((J)=>{if(z.push(J.name()),J.alias())z.push(J.alias())}),q=H0($,z)}let Q=`error: unknown command '${$}'${q}`;this.error(Q,{code:"commander.unknownCommand"})}version($,q,Q){if($===void 0)return this._version;this._version=$,q=q||"-V, --version",Q=Q||"output the version number";let z=this.createOption(q,Q);return this._versionOptionName=z.attributeName(),this._registerOption(z),this.on("option:"+z.name(),()=>{this._outputConfiguration.writeOut(`${$}
22
- `),this._exit(0,"commander.version",$)}),this}description($,q){if($===void 0&&q===void 0)return this._description;if(this._description=$,q)this._argsDescription=q;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let q=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)q=this.commands[this.commands.length-1];if($===q._name)throw Error("Command alias can't be the same as its name");let Q=this.parent?._findCommand($);if(Q){let z=[Q.name()].concat(Q.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${z}'`)}return q._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((q)=>this.alias(q)),this}usage($){if($===void 0){if(this._usage)return this._usage;let q=this.registeredArguments.map((Q)=>{return E1(Q)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?q:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}nameFromFilename($){return this._name=P.basename($,P.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let q=this.createHelp();if(q.helpWidth===void 0)q.helpWidth=$&&$.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth();return q.formatHelp(this,q)}_getHelpContext($){$=$||{};let q={error:!!$.error},Q;if(q.error)Q=(z)=>this._outputConfiguration.writeErr(z);else Q=(z)=>this._outputConfiguration.writeOut(z);return q.write=$.write||Q,q.command=this,q}outputHelp($){let q;if(typeof $==="function")q=$,$=void 0;let Q=this._getHelpContext($);this._getCommandAndAncestors().reverse().forEach((J)=>J.emit("beforeAllHelp",Q)),this.emit("beforeHelp",Q);let z=this.helpInformation(Q);if(q){if(z=q(z),typeof z!=="string"&&!Buffer.isBuffer(z))throw Error("outputHelp callback must return a string or a Buffer")}if(Q.write(z),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",Q),this._getCommandAndAncestors().forEach((J)=>J.emit("afterAllHelp",Q))}helpOption($,q){if(typeof $==="boolean"){if($)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return $=$??"-h, --help",q=q??"display help for command",this._helpOption=this.createOption($,q),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this}help($){this.outputHelp($);let q=H.exitCode||0;if(q===0&&$&&typeof $!=="function"&&$.error)q=1;this._exit(q,"commander.help","(outputHelp)")}addHelpText($,q){let Q=["beforeAll","before","after","afterAll"];if(!Q.includes($))throw Error(`Unexpected value for position to addHelpText.
23
- Expecting one of '${Q.join("', '")}'`);let z=`${$}Help`;return this.on(z,(J)=>{let Y;if(typeof q==="function")Y=q({error:J.error,command:J.command});else Y=q;if(Y)J.write(`${Y}
24
- `)}),this}_outputHelpIfRequested($){let q=this._getHelpOption();if(q&&$.find((z)=>q.is(z)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function R0($){return $.map((q)=>{if(!q.startsWith("--inspect"))return q;let Q,z="127.0.0.1",J="9229",Y;if((Y=q.match(/^(--inspect(-brk)?)$/))!==null)Q=Y[1];else if((Y=q.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Q=Y[1],/^\d+$/.test(Y[3]))J=Y[3];else z=Y[3];else if((Y=q.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Q=Y[1],z=Y[3],J=Y[4];if(Q&&J!=="0")return`${Q}=${z}:${parseInt(J)+1}`;return q})}j1.Command=n});var I0=D((D1)=>{var{Argument:y0}=C(),{Command:a}=L0(),{CommanderError:F1,InvalidArgumentError:E0}=k(),{Help:N1}=r(),{Option:T0}=s();D1.program=new a;D1.createCommand=($)=>new a($);D1.createOption=($,q)=>new T0($,q);D1.createArgument=($,q)=>new y0($,q);D1.Command=a;D1.Option=T0;D1.Argument=y0;D1.Help=N1;D1.CommanderError=F1;D1.InvalidArgumentError=E0;D1.InvalidOptionArgumentError=E0});import{spawnSync as u0}from"child_process";import{cpSync as c,existsSync as y,mkdirSync as f,readFileSync as u,rmSync as g}from"fs";import{mkdir as a1,readFile as e1,writeFile as o1}from"fs/promises";import{homedir as F}from"os";import{dirname as l,join as K}from"path";import{fileURLToPath as $$}from"url";var j0=t0(I0(),1),{program:H$,createCommand:R$,createArgument:L$,createOption:y$,CommanderError:E$,InvalidArgumentError:T$,InvalidOptionArgumentError:I$,Command:P0,Argument:j$,Option:P$,Help:F$}=j0.default;function o($){return $.map((q)=>Number(q.close??q.c)).filter(Number.isFinite)}function F0($,q){return $.map((Q,z)=>{if(z+1<q)return null;let J=$.slice(z+1-q,z+1);return w(J)})}function e($,q){let Q=2/(q+1),z=null;return $.map((J,Y)=>{return z=Y===0||z===null?J:J*Q+z*(1-Q),z})}function N0($,q=14){return $.map((Q,z)=>{if(z<q)return null;let J=$.slice(z+1-q,z+1).map((Z,_,U)=>_===0?0:Z-U[_-1]),Y=J.filter((Z)=>Z>0),X=J.filter((Z)=>Z<0).map(Math.abs);return 100-100/(1+w(Y)/(w(X)||0.000000001))})}function D0($){let q=e($,12),Q=e($,26),z=q.map((Y,X)=>Y-Q[X]),J=e(z,9);return z.map((Y,X)=>({macd:Y,signal:J[X],histogram:Y-J[X]}))}function V0($,q=0){let Q=$.slice(1).map((M,Z)=>M/$[Z]-1).filter(Number.isFinite),z=w(Q),J=v1(Q)*Math.sqrt(252),Y=z*252,X=J===0?null:(Y-q)/J;return{count:$.length,annualReturn:Y,volatility:J,sharpe:X,maxDrawdown:u1($)}}function w($){return $.length?$.reduce((q,Q)=>q+Q,0)/$.length:0}function v1($){let q=w($);return Math.sqrt(w($.map((Q)=>(Q-q)**2)))}function u1($){let q=$[0]??0,Q=0;for(let z of $)q=Math.max(q,z),Q=Math.min(Q,z/q-1);return Q}import{mkdir as g1,readFile as c1,rm as l1,writeFile as m1}from"fs/promises";import{dirname as d1,join as S0}from"path";var w0=process.env.HOME??process.cwd(),V=S0(w0,".config","mozyfin-cli","config.json"),O=S0(w0,".config","mozyfin-cli","version-cache.json"),x="https://api.mozyfin.com";async function $0(){try{return JSON.parse(await c1(V,"utf8"))}catch{return{}}}async function A0($){await g1(d1(V),{recursive:!0}),await m1(V,`${JSON.stringify($,null,2)}
25
- `,{mode:384})}async function f0(){await l1(V,{force:!0})}async function b0($){let q=await $0();return $??process.env.MOZYFIN_API_KEY??q.apiKey}function h(){return"Missing API key. Run `mozyfin login --api-key <key>` or create one at https://research.mozyfin.com/settings"}var k0=0;async function r1($=Date.now()){let q=Math.max(0,1000-($-k0));if(q>0)await new Promise((Q)=>setTimeout(Q,q));k0=Date.now()}function s1($,q,Q={}){let z=new URL(q,$);for(let[J,Y]of Object.entries(Q)){if(Y===void 0||Y==="")continue;if(Array.isArray(Y))for(let X of Y)z.searchParams.append(J,X);else z.searchParams.set(J,String(Y))}return z}function i1($){let q=$?.data?.t;return Array.isArray(q)&&q.length>0}function q0($){let q=$?.data;if(!q||!Array.isArray(q.t))return $;let Q=q.t.map((z,J)=>({timestamp:z,open:q.o?.[J],high:q.h?.[J],low:q.l?.[J],close:q.c?.[J],volume:q.v?.[J]}));return Q.reverse(),{...$,data:Q}}class v{baseUrl;apiKey;constructor($={}){this.baseUrl=$.baseUrl??x,this.apiKey=$.apiKey}static async fromConfig($){let q=await $0();return new v({baseUrl:q.baseUrl??x,apiKey:await b0($)})}async request($,q={}){if(q.auth!==!1&&!this.apiKey)throw Error(h());await r1();let Q=await fetch(s1(this.baseUrl,$,q.query),{method:q.method??"GET",headers:{"content-type":"application/json",...this.apiKey?{"X-API-Key":this.apiKey,authorization:`Bearer ${this.apiKey}`}:{}},body:q.body?JSON.stringify(q.body):void 0}),z=await Q.text(),J=z?JSON.parse(z):null;if(!Q.ok)throw Error(J?.message??J?.detail??`HTTP ${Q.status}`);return J}entities($){return this.request("/api/v1/market/exchange/entity",{query:$})}entity($){return this.request(`/api/v1/market/exchange/entity/${$}`)}news($){return this.request("/api/v1/news",{query:$})}marketIndices(){return this.request("/api/v1/market/market-index")}async ohlcv($,q){let Q=null,z=null;try{if(Q=await this.request(`/api/v2/market/exchange/entity/${$}/ohlcv`,{query:q}),i1(Q))return q0(Q)}catch(J){z=J}try{let J=await this.request(`/api/v2/market/market-index/${$}/ohlcv`,{query:q});return q0(J)}catch(J){if(Q)return q0(Q);throw z??J}}historicalQuote($,q){return this.request(`/api/v1/market/exchange/entity/${$}/historical-quote`,{query:q})}offices($){return this.request(`/api/v1/market/exchange/entity/${$}/office`)}subsidiaries($){return this.request(`/api/v1/market/exchange/entity/${$}/subsidiary`)}holders($,q){return this.request(`/api/v1/market/exchange/entity/${$}/holder`,{query:q})}holderTransactions($,q){return this.request(`/api/v1/market/exchange/entity/${$}/holder-transaction`,{query:q})}financialStatements($,q){return this.request(`/api/v1/market/exchange/entity/${$}/financial-statement`,{query:q})}financialStatistics($,q){return this.request(`/api/v1/market/exchange/entity/${$}/financial-statistic`,{query:q})}usage(){return this.request("/api/v1/subscription/usage")}createChat(){return this.request("/api/v1/chat",{method:"POST",body:{title:"mozyfin-cli",mode:"auto"}})}sendMessage($,q){return this.request(`/api/v1/chat/${$}/message`,{method:"POST",body:{content:q}})}getMessage($){return this.request(`/api/v1/chat/messages/${$}`)}queryReport($){return this.request("/api/v1/document/query-report",{method:"POST",body:{query:$}})}}import{writeFile as p1}from"fs/promises";function Q0($){return $?.data??$?.result??$}function j($){let q=Q0($);if(Array.isArray(q))return q;if(Array.isArray(q?.items))return q.items;if(Array.isArray(q?.results))return q.results;if(Array.isArray(q?.data))return q.data;return q?[q]:[]}function S($){let q=j($);if(q.length===0)return"_No data_";return z0(q,Object.keys(q[0]).slice(0,8))}function z0($,q){let Q=j($);if(Q.length===0)return"_No data_";let z=q.filter((M)=>Q.some((Z)=>Z?.[M]!==void 0));if(z.length===0)return S($);let J=`| ${z.join(" | ")} |`,Y=`| ${z.map(()=>"---").join(" | ")} |`,X=Q.map((M)=>`| ${z.map((Z)=>O0(M?.[Z])).join(" | ")} |`).join(`
26
- `);return`${J}
27
- ${Y}
28
- ${X}`}function x0($,q){let[Q]=j($);if(!Q)return"_No data_";return(q?.filter((J)=>Q[J]!==void 0)??Object.keys(Q)).map((J)=>`- ${J}: ${O0(Q[J])}`).join(`
29
- `)}function C0($,q="content"){let Q=j($)[0]??Q0($);return Q?.[q]??Q?.message?.[q]??Q?.data?.[q]??"_No content_"}function O0($){if($===null||$===void 0)return"";if(typeof $==="object"){let q=$,Q=q.symbol??q.id??q.name??q.title;if(Q!==void 0)return String(Q).replaceAll("|","\\|");return JSON.stringify($).replaceAll("|","\\|").slice(0,120)}return String($).replaceAll("|","\\|")}function t1($){let q=j($);if(q.length===0)return"";let Q=Array.from(new Set(q.flatMap((z)=>Object.keys(z))));return[Q.join(","),...q.map((z)=>Q.map((J)=>n1(z[J])).join(","))].join(`
30
- `)}function n1($){let q=$===null||$===void 0?"":typeof $==="object"?JSON.stringify($):String($);return/[",\n]/.test(q)?`"${q.replaceAll('"','""')}"`:q}function h0($){let q=Q0($),Q=[],z=q?.entities??[];if(z.length>0)Q.push(`### Entities (${z.length})
21
+ `),this.outputHelp({error:!0});let Q=q||{},z=Q.exitCode||1,Y=Q.code||"commander.error";this._exit(z,Y,$)}_parseOptionsEnv(){this.options.forEach(($)=>{if($.envVar&&$.envVar in L.env){let q=$.attributeName();if(this.getOptionValue(q)===void 0||["default","config","env"].includes(this.getOptionValueSource(q)))if($.required||$.optional)this.emit(`optionEnv:${$.name()}`,L.env[$.envVar]);else this.emit(`optionEnv:${$.name()}`)}})}_parseOptionsImplied(){let $=new v$(this.options),q=(Q)=>{return this.getOptionValue(Q)!==void 0&&!["default","implied"].includes(this.getOptionValueSource(Q))};this.options.filter((Q)=>Q.implied!==void 0&&q(Q.attributeName())&&$.valueFromOption(this.getOptionValue(Q.attributeName()),Q)).forEach((Q)=>{Object.keys(Q.implied).filter((z)=>!q(z)).forEach((z)=>{this.setOptionValueWithSource(z,Q.implied[z],"implied")})})}missingArgument($){let q=`error: missing required argument '${$}'`;this.error(q,{code:"commander.missingArgument"})}optionMissingArgument($){let q=`error: option '${$.flags}' argument missing`;this.error(q,{code:"commander.optionMissingArgument"})}missingMandatoryOptionValue($){let q=`error: required option '${$.flags}' not specified`;this.error(q,{code:"commander.missingMandatoryOptionValue"})}_conflictingOption($,q){let Q=(X)=>{let Z=X.attributeName(),J=this.getOptionValue(Z),_=this.options.find((G)=>G.negate&&Z===G.attributeName()),U=this.options.find((G)=>!G.negate&&Z===G.attributeName());if(_&&(_.presetArg===void 0&&J===!1||_.presetArg!==void 0&&J===_.presetArg))return _;return U||X},z=(X)=>{let Z=Q(X),J=Z.attributeName();if(this.getOptionValueSource(J)==="env")return`environment variable '${Z.envVar}'`;return`option '${Z.flags}'`},Y=`error: ${z($)} cannot be used with ${z(q)}`;this.error(Y,{code:"commander.conflictingOption"})}unknownOption($){if(this._allowUnknownOption)return;let q="";if($.startsWith("--")&&this._showSuggestionAfterError){let z=[],Y=this;do{let X=Y.createHelp().visibleOptions(Y).filter((Z)=>Z.long).map((Z)=>Z.long);z=z.concat(X),Y=Y.parent}while(Y&&!Y._enablePositionalOptions);q=V0($,z)}let Q=`error: unknown option '${$}'${q}`;this.error(Q,{code:"commander.unknownOption"})}_excessArguments($){if(this._allowExcessArguments)return;let q=this.registeredArguments.length,Q=q===1?"":"s",Y=`error: too many arguments${this.parent?` for '${this.name()}'`:""}. Expected ${q} argument${Q} but got ${$.length}.`;this.error(Y,{code:"commander.excessArguments"})}unknownCommand(){let $=this.args[0],q="";if(this._showSuggestionAfterError){let z=[];this.createHelp().visibleCommands(this).forEach((Y)=>{if(z.push(Y.name()),Y.alias())z.push(Y.alias())}),q=V0($,z)}let Q=`error: unknown command '${$}'${q}`;this.error(Q,{code:"commander.unknownCommand"})}version($,q,Q){if($===void 0)return this._version;this._version=$,q=q||"-V, --version",Q=Q||"output the version number";let z=this.createOption(q,Q);return this._versionOptionName=z.attributeName(),this._registerOption(z),this.on("option:"+z.name(),()=>{this._outputConfiguration.writeOut(`${$}
22
+ `),this._exit(0,"commander.version",$)}),this}description($,q){if($===void 0&&q===void 0)return this._description;if(this._description=$,q)this._argsDescription=q;return this}summary($){if($===void 0)return this._summary;return this._summary=$,this}alias($){if($===void 0)return this._aliases[0];let q=this;if(this.commands.length!==0&&this.commands[this.commands.length-1]._executableHandler)q=this.commands[this.commands.length-1];if($===q._name)throw Error("Command alias can't be the same as its name");let Q=this.parent?._findCommand($);if(Q){let z=[Q.name()].concat(Q.aliases()).join("|");throw Error(`cannot add alias '${$}' to command '${this.name()}' as already have command '${z}'`)}return q._aliases.push($),this}aliases($){if($===void 0)return this._aliases;return $.forEach((q)=>this.alias(q)),this}usage($){if($===void 0){if(this._usage)return this._usage;let q=this.registeredArguments.map((Q)=>{return O$(Q)});return[].concat(this.options.length||this._helpOption!==null?"[options]":[],this.commands.length?"[command]":[],this.registeredArguments.length?q:[]).join(" ")}return this._usage=$,this}name($){if($===void 0)return this._name;return this._name=$,this}nameFromFilename($){return this._name=y.basename($,y.extname($)),this}executableDir($){if($===void 0)return this._executableDir;return this._executableDir=$,this}helpInformation($){let q=this.createHelp();if(q.helpWidth===void 0)q.helpWidth=$&&$.error?this._outputConfiguration.getErrHelpWidth():this._outputConfiguration.getOutHelpWidth();return q.formatHelp(this,q)}_getHelpContext($){$=$||{};let q={error:!!$.error},Q;if(q.error)Q=(z)=>this._outputConfiguration.writeErr(z);else Q=(z)=>this._outputConfiguration.writeOut(z);return q.write=$.write||Q,q.command=this,q}outputHelp($){let q;if(typeof $==="function")q=$,$=void 0;let Q=this._getHelpContext($);this._getCommandAndAncestors().reverse().forEach((Y)=>Y.emit("beforeAllHelp",Q)),this.emit("beforeHelp",Q);let z=this.helpInformation(Q);if(q){if(z=q(z),typeof z!=="string"&&!Buffer.isBuffer(z))throw Error("outputHelp callback must return a string or a Buffer")}if(Q.write(z),this._getHelpOption()?.long)this.emit(this._getHelpOption().long);this.emit("afterHelp",Q),this._getCommandAndAncestors().forEach((Y)=>Y.emit("afterAllHelp",Q))}helpOption($,q){if(typeof $==="boolean"){if($)this._helpOption=this._helpOption??void 0;else this._helpOption=null;return this}return $=$??"-h, --help",q=q??"display help for command",this._helpOption=this.createOption($,q),this}_getHelpOption(){if(this._helpOption===void 0)this.helpOption(void 0,void 0);return this._helpOption}addHelpOption($){return this._helpOption=$,this}help($){this.outputHelp($);let q=L.exitCode||0;if(q===0&&$&&typeof $!=="function"&&$.error)q=1;this._exit(q,"commander.help","(outputHelp)")}addHelpText($,q){let Q=["beforeAll","before","after","afterAll"];if(!Q.includes($))throw Error(`Unexpected value for position to addHelpText.
23
+ Expecting one of '${Q.join("', '")}'`);let z=`${$}Help`;return this.on(z,(Y)=>{let X;if(typeof q==="function")X=q({error:Y.error,command:Y.command});else X=q;if(X)Y.write(`${X}
24
+ `)}),this}_outputHelpIfRequested($){let q=this._getHelpOption();if(q&&$.find((z)=>q.is(z)))this.outputHelp(),this._exit(0,"commander.helpDisplayed","(outputHelp)")}}function y0($){return $.map((q)=>{if(!q.startsWith("--inspect"))return q;let Q,z="127.0.0.1",Y="9229",X;if((X=q.match(/^(--inspect(-brk)?)$/))!==null)Q=X[1];else if((X=q.match(/^(--inspect(-brk|-port)?)=([^:]+)$/))!==null)if(Q=X[1],/^\d+$/.test(X[3]))Y=X[3];else z=X[3];else if((X=q.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/))!==null)Q=X[1],z=X[3],Y=X[4];if(Q&&Y!=="0")return`${Q}=${z}:${parseInt(Y)+1}`;return q})}u$.Command=Y0});var C0=f((l$)=>{var{Argument:A0}=l(),{Command:X0}=S0(),{CommanderError:c$,InvalidArgumentError:f0}=h(),{Help:m$}=e(),{Option:w0}=$0();l$.program=new X0;l$.createCommand=($)=>new X0($);l$.createOption=($,q)=>new w0($,q);l$.createArgument=($,q)=>new A0($,q);l$.Command=X0;l$.Option=w0;l$.Argument=A0;l$.Help=m$;l$.CommanderError=c$;l$.InvalidArgumentError=f0;l$.InvalidOptionArgumentError=f0});import{spawnSync as R0}from"child_process";import{cpSync as n,existsSync as I,mkdirSync as b,readFileSync as i,rmSync as t}from"fs";import{mkdir as R1,readFile as M1,writeFile as W1}from"fs/promises";import{homedir as S}from"os";import{dirname as a,join as W}from"path";import{emitKeypressEvents as L1}from"readline";import{createInterface as E1}from"readline/promises";import{fileURLToPath as j1}from"url";var k0=B$(C0(),1),{program:i1,createCommand:t1,createArgument:n1,createOption:a1,CommanderError:o1,InvalidArgumentError:e1,InvalidOptionArgumentError:$2,Command:x0,Argument:q2,Option:Q2,Help:z2}=k0.default;function v($){return $.map((q)=>Number(q.close??q.c)).filter(Number.isFinite)}function J0($,q){return $.map((Q,z)=>{if(z+1<q)return null;let Y=$.slice(z+1-q,z+1);return C(Y)})}function Z0($,q){let Q=2/(q+1),z=null;return $.map((Y,X)=>{return z=X===0||z===null?Y:Y*Q+z*(1-Q),z})}function b0($,q=14){return $.map((Q,z)=>{if(z<q)return null;let Y=$.slice(z+1-q,z+1).map((_,U,G)=>U===0?0:_-G[U-1]),X=Y.filter((_)=>_>0),Z=Y.filter((_)=>_<0).map(Math.abs);return 100-100/(1+C(X)/(C(Z)||0.000000001))})}function O0($){let q=Z0($,12),Q=Z0($,26),z=q.map((X,Z)=>X-Q[Z]),Y=Z0(z,9);return z.map((X,Z)=>({macd:X,signal:Y[Z],histogram:X-Y[Z]}))}function _0($,q=0){let Q=$.slice(1).map((J,_)=>J/$[_]-1).filter(Number.isFinite),z=C(Q),Y=q1(Q)*Math.sqrt(252),X=z*252,Z=Y===0?null:(X-q)/Y;return{count:$.length,annualReturn:X,volatility:Y,sharpe:Z,maxDrawdown:Q1($)}}function C($){return $.length?$.reduce((q,Q)=>q+Q,0)/$.length:0}function q1($){let q=C($);return Math.sqrt(C($.map((Q)=>(Q-q)**2)))}function Q1($){let q=$[0]??0,Q=0;for(let z of $)q=Math.max(q,z),Q=Math.min(Q,z/q-1);return Q}import{mkdir as z1,readFile as Y1,rm as X1,writeFile as Z1}from"fs/promises";import{dirname as J1,join as h0}from"path";var v0=process.env.HOME??process.cwd(),A=h0(v0,".config","mozyfin-cli","config.json"),d=h0(v0,".config","mozyfin-cli","version-cache.json"),u="https://api.mozyfin.com";async function U0(){try{return JSON.parse(await Y1(A,"utf8"))}catch{return{}}}async function u0($){await z1(J1(A),{recursive:!0}),await Z1(A,`${JSON.stringify($,null,2)}
25
+ `,{mode:384})}async function g0(){await X1(A,{force:!0})}async function c0($){let q=await U0();return $??process.env.MOZYFIN_API_KEY??q.apiKey}function r(){return"Missing API key. Run `mozyfin login --api-key <key>` or create one at https://research.mozyfin.com/settings"}var m0=0;async function _1($=Date.now()){let q=Math.max(0,1000-($-m0));if(q>0)await new Promise((Q)=>setTimeout(Q,q));m0=Date.now()}function U1($,q,Q={}){let z=new URL(q,$);for(let[Y,X]of Object.entries(Q)){if(X===void 0||X==="")continue;if(Array.isArray(X))for(let Z of X)z.searchParams.append(Y,Z);else z.searchParams.set(Y,String(X))}return z}function G1($){let q=$?.data?.t;return Array.isArray(q)&&q.length>0}function G0($){let q=$?.data;if(!q||!Array.isArray(q.t))return $;let Q=q.t.map((z,Y)=>({timestamp:z,open:q.o?.[Y],high:q.h?.[Y],low:q.l?.[Y],close:q.c?.[Y],volume:q.v?.[Y]}));return Q.reverse(),{...$,data:Q}}class s{baseUrl;apiKey;constructor($={}){this.baseUrl=$.baseUrl??u,this.apiKey=$.apiKey}static async fromConfig($){let q=await U0();return new s({baseUrl:q.baseUrl??u,apiKey:await c0($)})}async request($,q={}){if(q.auth!==!1&&!this.apiKey)throw Error(r());await _1();let Q=await fetch(U1(this.baseUrl,$,q.query),{method:q.method??"GET",headers:{"content-type":"application/json",...this.apiKey?{"X-API-Key":this.apiKey,authorization:`Bearer ${this.apiKey}`}:{}},body:q.body?JSON.stringify(q.body):void 0,signal:q.signal}),z=await Q.text(),Y=z?JSON.parse(z):null;if(!Q.ok)throw Error(Y?.message??Y?.detail??`HTTP ${Q.status}`);return Y}entities($){return this.request("/api/v1/market/exchange/entity",{query:$})}entity($){return this.request(`/api/v1/market/exchange/entity/${$}`)}news($){return this.request("/api/v1/news",{query:$})}marketIndices(){return this.request("/api/v1/market/market-index")}async ohlcv($,q){let Q=null,z=null;try{if(Q=await this.request(`/api/v2/market/exchange/entity/${$}/ohlcv`,{query:q}),G1(Q))return G0(Q)}catch(Y){z=Y}try{let Y=await this.request(`/api/v2/market/market-index/${$}/ohlcv`,{query:q});return G0(Y)}catch(Y){if(Q)return G0(Q);throw z??Y}}historicalQuote($,q){return this.request(`/api/v1/market/exchange/entity/${$}/historical-quote`,{query:q})}offices($){return this.request(`/api/v1/market/exchange/entity/${$}/office`)}subsidiaries($){return this.request(`/api/v1/market/exchange/entity/${$}/subsidiary`)}holders($,q){return this.request(`/api/v1/market/exchange/entity/${$}/holder`,{query:q})}holderTransactions($,q){return this.request(`/api/v1/market/exchange/entity/${$}/holder-transaction`,{query:q})}financialStatements($,q){return this.request(`/api/v1/market/exchange/entity/${$}/financial-statement`,{query:q})}financialStatistics($,q){return this.request(`/api/v1/market/exchange/entity/${$}/financial-statistic`,{query:q})}usage(){return this.request("/api/v1/subscription/usage")}createChat(){return this.request("/api/v1/chat",{method:"POST",body:{title:"mozyfin-cli",mode:"auto"}})}sendMessage($,q,Q){return this.request(`/api/v1/chat/${$}/message`,{method:"POST",body:{content:q},signal:Q})}getMessage($,q){return this.request(`/api/v1/chat/messages/${$}`,{signal:q})}queryReport($){return this.request("/api/v1/document/query-report",{method:"POST",body:{query:$}})}}import{writeFile as K1}from"fs/promises";function K0($){return $?.data??$?.result??$}function T($){let q=K0($);if(Array.isArray(q))return q;if(Array.isArray(q?.items))return q.items;if(Array.isArray(q?.results))return q.results;if(Array.isArray(q?.data))return q.data;return q?[q]:[]}function w($){let q=T($);if(q.length===0)return"_No data_";return F(q,Object.keys(q[0]).slice(0,8))}function F($,q){let Q=T($);if(Q.length===0)return"_No data_";let z=q.filter((J)=>Q.some((_)=>_?.[J]!==void 0));if(z.length===0)return w($);let Y=`| ${z.join(" | ")} |`,X=`| ${z.map(()=>"---").join(" | ")} |`,Z=Q.map((J)=>`| ${z.map((_)=>d0(J?.[_])).join(" | ")} |`).join(`
26
+ `);return`${Y}
27
+ ${X}
28
+ ${Z}`}function k($,q){let[Q]=T($);if(!Q)return"_No data_";return(q?.filter((Y)=>Q[Y]!==void 0)??Object.keys(Q)).map((Y)=>`- ${Y}: ${d0(Q[Y])}`).join(`
29
+ `)}function l0($,q="content"){let Q=T($)[0]??K0($);return Q?.[q]??Q?.message?.[q]??Q?.data?.[q]??"_No content_"}function d0($){if($===null||$===void 0)return"";if(typeof $==="object"){let q=$,Q=q.symbol??q.id??q.name??q.title;if(Q!==void 0)return String(Q).replaceAll("|","\\|");return JSON.stringify($).replaceAll("|","\\|").slice(0,120)}return String($).replaceAll("|","\\|")}function B1($){let q=T($);if(q.length===0)return"";let Q=Array.from(new Set(q.flatMap((z)=>Object.keys(z))));return[Q.join(","),...q.map((z)=>Q.map((Y)=>H1(z[Y])).join(","))].join(`
30
+ `)}function H1($){let q=$===null||$===void 0?"":typeof $==="object"?JSON.stringify($):String($);return/[",\n]/.test(q)?`"${q.replaceAll('"','""')}"`:q}function B0($){let q=K0($),Q=[],z=q?.entities??[];if(z.length>0)Q.push(`### Entities (${z.length})
31
31
 
32
- ${S(z)}`);let J=q?.relationships??[];if(J.length>0)Q.push(`
33
- ### Relationships (${J.length})
32
+ ${w(z)}`);let Y=q?.relationships??[];if(Y.length>0)Q.push(`
33
+ ### Relationships (${Y.length})
34
34
 
35
- ${S(J)}`);let Y=q?.chunks??[];if(Y.length>0)Q.push(`
36
- ### Document Chunks (${Y.length})
35
+ ${w(Y)}`);let X=q?.chunks??[];if(X.length>0)Q.push(`
36
+ ### Document Chunks (${X.length})
37
37
 
38
- ${S(Y)}`);let X=q?.references??[];if(X.length>0)Q.push(`
39
- ### References (${X.length})
38
+ ${w(X)}`);let Z=q?.references??[];if(Z.length>0)Q.push(`
39
+ ### References (${Z.length})
40
40
 
41
- ${S(X)}`);if(q?.instructions)Q.push(`
41
+ ${w(Z)}`);if(q?.instructions)Q.push(`
42
42
  ### Context
43
43
 
44
44
  ${q.instructions}`);return Q.length>0?Q.join(`
45
- `):"_No data_"}async function A($,q){if(q.csv){await p1(q.csv,`${t1($)}
46
- `),console.log(S([{ok:!0,file:q.csv,rows:j($).length}]));return}console.log(S($))}var J0=l($$(import.meta.url)),Y0=JSON.parse(u(K(J0,"..","package.json"),"utf8")),B=new P0;B.name("mozyfin").description("Vietnam stock market CLI for humans and AI agents").version(Y0.version).showHelpAfterError().addHelpText("after",`
45
+ `):"_No data_"}async function x($,q){if(q.csv){await K1(q.csv,`${B1($)}
46
+ `),console.log(w([{ok:!0,file:q.csv,rows:T($).length}]));return}console.log(w($))}var M0=a(j1(import.meta.url)),g=JSON.parse(i(W(M0,"..","package.json"),"utf8")),H=new x0;H.name("mozyfin").description("Vietnam stock market CLI for humans and AI agents").version(g.version).showHelpAfterError().addHelpText("after",`
47
47
 
48
48
  Examples:
49
49
  $ mozyfin login --api-key <key>
@@ -53,24 +53,41 @@ Examples:
53
53
  $ mozyfin ta VNM.VN --sma 20,50 --rsi 14 --macd --csv vnm-ta.csv
54
54
  $ mozyfin doc "VNM Q4 2024 earnings analysis"
55
55
  $ mozyfin ask "compare VNM and MSN margin trend"
56
- `).option("--api-key <key>","API key, or set MOZYFIN_API_KEY").option("--base-url <url>","API base URL",x).option("--no-color","reserved for scripts/agents; output stays plain text");function E($){return $.option("-m, --md","print Markdown table (default)").option("--csv <file>","write rows to CSV file")}async function R(){let $=B.opts(),q=await v.fromConfig($.apiKey);if(q.baseUrl=$.baseUrl,!q.apiKey)throw Error(h());return q}function v0($){if(!$)return;let q=$.split(",").map((Q)=>Q.trim()).filter(Boolean);return q.length?q:void 0}function g0($,q,Q){if(!q.includes($))throw Error(`${Q} must be one of: ${q.join(", ")}`);return $}async function I($,q,Q){if(q.csv)return A($,q);console.log(z0($,Q))}async function M0($,q,Q){if(q.csv)return A($,q);console.log(x0($,Q))}function q$($){return j($).map((q)=>{let Q=q.values??{};return{year:q.year,quarter:q.quarter,type:q.type,net_sales:Q["Net sales"]??Q.Sales,gross_profit:Q["Gross Profit"],profit_after_tax:Q["Net profit/(loss) after tax"],total_assets:Q["Total Assets"],owner_equity:Q["Owner's Equity"],net_operating_cash_flow:Q["Net cash inflows/(outflows) from operating activities"],public_at:q.public_at}})}B.command("login").description("Save API key locally").option("--api-key <key>").action(async($)=>{let q=$.apiKey??B.opts().apiKey;if(!q)throw Error("Missing --api-key <key>");await A0({apiKey:q,baseUrl:B.opts().baseUrl}),await A([{ok:!0,configPath:V}],{})});B.command("logout").description("Remove saved API key").action(async()=>{await f0(),await A([{ok:!0}],{})});E(B.command("search").description("Search companies/entities by ticker, name or text")).option("-q, --query [text]","search query; empty means all","").action(async($)=>I(await(await R()).entities({search:$.query}),$,["symbol","ticker","name","exchange","market","price","market_cap","id"]));E(B.command("profile").argument("<tickerOrEntityId>").description("Company profile/entity details")).action(async($,q)=>M0(await(await R()).entity($),q,["symbol","ticker","name","exchange","market","sector","industry","website","description","entity_id","id"]));E(B.command("news").description("Market headlines and article search")).option("--query <text>","search query; empty means all","").option("--entities <ids>","comma-separated entity ids; OR semantics").option("--topics <topics>","comma-separated topics: stock,crypto,forex,tariff,economic,earning,tech,housing,mergers_and_ipo; OR semantics").option("--limit <n>","max rows","20").option("--page <n>","page hint for APIs that support it","1").action(async($)=>I(await(await R()).news(Q$($)),$,["published_at","created_at","title","source","topics","entities","url","id"]));function Q$($){let q=["stock","crypto","forex","tariff","economic","earning","tech","housing","mergers_and_ipo"],Q=v0($.topics);for(let z of Q??[])g0(z,q,"topic");return{search:$.query,entities:v0($.entities),topics:Q,limit:$.limit,page:$.page}}E(B.command("indices").description("List supported market indices (use the returned id with `ohlcv`)")).action(async($)=>I(await(await R()).marketIndices(),$,["symbol","name","current_value","change_value","change_percent","id"]));E(B.command("ohlcv").argument("<entity>").description("Historical OHLCV candles")).option("--timeframe <value>","1h, 1d, 1w, 1mo, 1y","1d").option("--to <timestamp>","end timestamp").option("--limit <n>","max rows").action(async($,q)=>{return g0(q.timeframe,["1h","1d","1w","1mo","1y"],"timeframe"),I(await(await R()).ohlcv($,q),q,["timestamp","time","date","open","high","low","close","volume"])});E(B.command("quote").argument("<entity>").description("Latest daily quote snapshot")).option("--to <timestamp>","end timestamp").option("--limit <n>","max rows","1").action(async($,q)=>I(await(await R()).historicalQuote($,{to:q.to,limit:q.limit}),q,["timestamp","total_volume","deal_volume","total_value","buy_foreign_quantity","sell_foreign_quantity","current_foreign_room"]));E(B.command("officers").argument("<entity>").description("Company officers/directors")).action(async($,q)=>I(await(await R()).offices($),q,["name","position","is_foreigner","sort_order"]));E(B.command("subsidiary").argument("<entity>").description("Company subsidiaries")).action(async($,q)=>I(await(await R()).subsidiaries($),q,["name","symbol","ownership_rate","charter_capital","business_area","id"]));E(B.command("holder").argument("<entity>").description("Major shareholders")).option("--is-organization <true|false>","filter organization holders").option("--is-foreigner <true|false>","filter foreign holders").action(async($,q)=>I(await(await R()).holders($,{is_organization:q.isOrganization,is_foreigner:q.isForeigner}),q,["name","holder_name","ownership_rate","shares","is_organization","is_foreigner"]));E(B.command("holder-tx").argument("<entity>").description("Shareholder transactions")).option("--cursor <cursor>","pagination cursor").option("--limit <n>","max rows","100").option("--transaction-type <type>","transaction type filter").action(async($,q)=>I(await(await R()).holderTransactions($,{cursor:q.cursor,limit:q.limit,transaction_type:q.transactionType}),q,["name","type","registered_volume","execution_volume","start_at","end_at","position"]));E(B.command("financials").argument("<entity>").description("Financial statements")).option("--year <year>","report year").option("--quarter <quarter>","report quarter").option("--statement-type <type>","statement type filter").action(async($,q)=>I(q$(await(await R()).financialStatements($,{year:q.year,quarter:q.quarter,statement_type:q.statementType})),q,["year","quarter","type","net_sales","gross_profit","profit_after_tax","total_assets","owner_equity","net_operating_cash_flow"]));E(B.command("stats").argument("<entity>").description("Financial statistics/ratios")).option("--year <year>","report year").option("--quarter <quarter>","report quarter").action(async($,q)=>I(await(await R()).financialStatistics($,{year:q.year,quarter:q.quarter}),q,["year","quarter","pe","pb","roe","roa","gross_margin","market_cap"]));E(B.command("ta").argument("<tickerOrEntityId>").description("Technical indicators over OHLCV close prices")).option("--sma <list>","comma-separated SMA periods","20").option("--rsi <n>","RSI period").option("--macd","include MACD").option("--limit <n>","max candles","300").action(async($,q)=>{let Q=await(await R()).ohlcv($,{timeframe:"1d",limit:q.limit}),J=[...j(Q)].reverse(),Y=o(J),X=String(q.sma).split(",").map(Number).filter(Number.isFinite),M=Object.fromEntries(X.map((W)=>[W,F0(Y,W)])),Z=q.rsi?N0(Y,Number(q.rsi)):[],_=q.macd?D0(Y):[],U=J.map((W,L)=>({...W,...Object.fromEntries(X.map((G)=>[`sma_${G}`,M[G][L]])),...q.rsi?{[`rsi_${q.rsi}`]:Z[L]}:{},...q.macd?_[L]:{}})).reverse();await I(U,q,["timestamp","time","date","close",...X.map((W)=>`sma_${W}`),...q.rsi?[`rsi_${q.rsi}`]:[],...q.macd?["macd","signal","histogram"]:[]])});B.command("risk").argument("<tickerOrEntityId>").description("Risk/performance metrics: return, volatility, Sharpe, max drawdown").option("--limit <n>","max candles","252").option("--risk-free <n>","annual risk-free rate","0").action(async($,q)=>{let Q=await(await R()).ohlcv($,{timeframe:"1d",limit:q.limit});await M0([V0(o([...j(Q)].reverse()),Number(q.riskFree))],{},["count","annualReturn","volatility","sharpe","maxDrawdown"])});B.command("doc").argument("<query...>").description("Query analysis reports using natural language").action(async($)=>{let q=await(await R()).queryReport($.join(" "));console.log(h0(q))});B.command("ask").argument("<prompt...>").description("Ask Mozyfin agent in auto mode (one focused question per call \u2014 avoid multi-question prompts)").option("--timeout <seconds>","max wait time in seconds (default 300 = 5 minutes)","300").action(async($,q)=>{let Q=await R(),z=await Q.createChat(),J=z?.data?.id??z?.id;if(!J)throw Error("Could not create chat");let X=await Q.sendMessage(J,$.join(" ")),M=X?.data?.id??X?.id,Z=Date.now()+Number(q.timeout)*1000;while(M&&Date.now()<Z){let _=X?.data?.status??X?.status;if(_&&_!=="thinking"&&_!=="streaming")break;await new Promise((U)=>setTimeout(U,2000)),X=await Q.getMessage(M)}console.log(C0(X))});B.command("credits").description("Check subscription usage/credits").action(async()=>M0(await(await R()).usage(),{},["credits_used","credits_cap","remaining","plan"]));B.command("doctor").description("Check runtime, config and API health").action(async()=>{let $=u0("bun",["--version"],{encoding:"utf8"}).stdout.trim(),q=await R(),Q=await q.request("/health",{auth:!1});await A([{bun:$,configPath:V,baseUrl:q.baseUrl,health:Q}],{})});B.command("update").description("Upgrade CLI to latest version; auto-updates skills for any agents that already have it installed").option("--skill [agent]","Force update skill for specific agent (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, or 'all')").action(async($)=>{let q=B.version(),Q=await fetch("https://registry.npmjs.org/mozyfin-cli/latest").then((X)=>X.json()).then((X)=>X.version).catch(()=>null);if(console.log(`Current version: ${q}`),Q)if(console.log(`Latest version: ${Q}`),q===Q)console.log(`
56
+ `).option("--api-key <key>","API key, or set MOZYFIN_API_KEY").option("--base-url <url>","API base URL",u).option("--no-color","reserved for scripts/agents; output stays plain text");function N($){return $.option("-m, --md","print Markdown table (default)").option("--csv <file>","write rows to CSV file")}async function E(){let $=H.opts(),q=await s.fromConfig($.apiKey);if(q.baseUrl=$.baseUrl,!q.apiKey)throw Error(r());return q}function r0($){if(!$)return;let q=$.split(",").map((Q)=>Q.trim()).filter(Boolean);return q.length?q:void 0}function a0($,q,Q){if(!q.includes($))throw Error(`${Q} must be one of: ${q.join(", ")}`);return $}async function V($,q,Q){if(q.csv)return x($,q);console.log(F($,Q))}async function W0($,q,Q){if(q.csv)return x($,q);console.log(k($,Q))}async function o0($,q){await new Promise((Q,z)=>{let Y=setTimeout(Q,$);q?.addEventListener("abort",()=>{clearTimeout(Y),z(new DOMException("Aborted","AbortError"))},{once:!0})})}async function e0($,q,Q,z,Y,X){let J=await $.sendMessage(q,Q,X),_=J?.data?.id??J?.id,U=Date.now()+z*1000;while(_&&Date.now()<U){X?.throwIfAborted();let G=J?.data?.status??J?.status;if(G&&G!=="thinking"&&G!=="streaming")break;Y?.(G??"thinking"),await o0(2000,X),J=await $.getMessage(_,X)}return l0(J)}async function H0($){let q=await $.createChat(),Q=q?.data?.id??q?.id;if(!Q)throw Error("Could not create chat");return Q}function F1(){return process.stdout.isTTY&&process.env.NO_COLOR===void 0}function K($,q){return F1()?`\x1B[${q}m${$}\x1B[0m`:$}var $$=["/help","/clear","/new","/exit","/search <query>","/profile <ticker>","/indices","/news <query>","/doc <query>","/quote <ticker>","/ohlcv <ticker>","/officers <ticker>","/subsidiary <ticker>","/holder <ticker>","/holder-tx <ticker>","/financials <ticker>","/stats <ticker>","/ta <ticker>","/risk <ticker>","/credits","/doctor"],s0=$$.map(($)=>$.split(" ")[0]),P1={"/help":"show commands","/clear":"clear current screen","/new":"start a new chat thread","/exit":"quit TUI","/search":"search ticker/company","/profile":"company profile","/indices":"market indices","/news":"news search","/doc":"query research docs","/quote":"latest quote rows","/ohlcv":"daily candles","/officers":"company officers","/subsidiary":"subsidiaries","/holder":"major holders","/holder-tx":"holder transactions","/financials":"financial statements","/stats":"financial ratios","/ta":"technical indicators","/risk":"risk metrics","/credits":"subscription usage","/doctor":"runtime/API health"};function I1(){return[K("\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2557","1;38;5;51"),K("\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2588\u2554\u255D\u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551","1;38;5;45"),K("\u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2554\u255D \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551\u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551","1;38;5;39"),K("\u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2554\u255D \u255A\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551","1;38;5;37"),K("\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551","1;38;5;36"),K("\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D","1;38;5;31"),"",`${K("Market chat TUI","1;38;5;118")} ${K(`v${g.version}`,"38;5;250")}`,K("Esc stops the current response \u2022 \u2191 recalls history \u2022 /help lists commands","38;5;244")].join(`
57
+ `)}function p0(){return[I1(),"",K("/help","1;38;5;118")+K(" for commands \u2022 ","38;5;244")+K("/new","1;38;5;118")+K(" new thread \u2022 ","38;5;244")+K("/clear","1;38;5;118")+K(" clear screen","38;5;244")].join(`
58
+ `)}function N1($){let q=$.codePointAt(0)??0;if(q>=768&&q<=879||q>=6832&&q<=6911||q>=7616&&q<=7679||q>=8400&&q<=8447||q>=65056&&q<=65071)return 0;if(q>=4352&&(q<=4447||q===9001||q===9002||q>=11904&&q<=42191||q>=44032&&q<=55203||q>=63744&&q<=64255||q>=65040&&q<=65049||q>=65072&&q<=65135||q>=65280&&q<=65376||q>=65504&&q<=65510))return 2;return 1}var D1=new RegExp(`${String.fromCharCode(27)}\\[[0-9;]*m`,"g");function L0($){return[...$.replace(D1,"")].reduce((q,Q)=>q+N1(Q),0)}function T1($,q){return $+" ".repeat(Math.max(0,q-L0($)))}function V1(){return Math.max(48,Math.min(process.stdout.columns??88,120))}function i0($,q=V1()-4){let Q=$.split(/\s+/).filter(Boolean),z=[],Y="";for(let X of Q){let Z=Y?`${Y} ${X}`:X;if(L0(Z)>q&&Y)z.push(Y),Y=X;else Y=Z}if(Y)z.push(Y);return z.length?z:[""]}function y1($){return $.trim().replace(/^`|`$/g,"").replace(/\*\*/g,"")}function S1($){return $.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(y1)}function q$($){return/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test($)}function A1($){let q=$.filter((Z)=>!q$(Z)).map(S1),Q=q.reduce((Z,J)=>{return J.forEach((_,U)=>{Z[U]=Math.max(Z[U]??0,L0(_))}),Z},[]),z=`${K("\u250C","38;5;238")}${Q.map((Z)=>"\u2500".repeat(Z+2)).join(K("\u252C","38;5;238"))}${K("\u2510","38;5;238")}`,Y=`${K("\u251C","38;5;238")}${Q.map((Z)=>"\u2500".repeat(Z+2)).join(K("\u253C","38;5;238"))}${K("\u2524","38;5;238")}`,X=`${K("\u2514","38;5;238")}${Q.map((Z)=>"\u2500".repeat(Z+2)).join(K("\u2534","38;5;238"))}${K("\u2518","38;5;238")}`;return[z,...q.flatMap((Z,J)=>[`${K("\u2502","38;5;238")} ${Z.map((_,U)=>T1(J===0?K(_,"1;38;5;153"):_,Q[U])).join(` ${K("\u2502","38;5;238")} `)} ${K("\u2502","38;5;238")}`,...J===0&&q.length>1?[Y]:[]]),X].join(`
59
+ `)}function f1($){let q=$.replace(/\r\n/g,`
60
+ `).split(`
61
+ `),Q=[];for(let z=0;z<q.length;z++){let Y=q[z];if(Y.trim().startsWith("|")&&q$(q[z+1]??"")){let X=[Y,q[z+1]];z+=2;while(z<q.length&&q[z].trim().startsWith("|"))X.push(q[z++]);z--,Q.push(A1(X));continue}if(/^#{1,6}\s+/.test(Y)){Q.push(K(Y.replace(/^#{1,6}\s+/,""),"1;38;5;51"));continue}if(/^\s*[-*]\s+/.test(Y)){let X=Y.replace(/^\s*[-*]\s+/,"");Q.push(...i0(X).map((Z,J)=>`${J===0?K("\u2022","38;5;118"):" "} ${Z}`));continue}if(!Y.trim()){Q.push("");continue}Q.push(...i0(Y.replace(/\*\*(.*?)\*\*/g,"$1")))}return Q.join(`
62
+ `).replace(/\n{3,}/g,`
63
+
64
+ `).trimEnd()}function p($,q){let Q=$==="you"?"you":$==="mozyfin"?"mozyfin":"system",z=$==="you"?"38;5;45":$==="mozyfin"?"38;5;118":"38;5;214",Y=$==="you"?"\u25B8":$==="mozyfin"?"\u25C6":"!",X=$==="mozyfin"?f1(q):q.trim();return`
65
+ ${K(`${Y} ${Q}`,`1;${z}`)}
66
+ ${X||"_No content_"}`}function t0(){return`${K("mozyfin","1;38;5;51")} ${K("\u276F","38;5;118")} `}async function w1($,q){let Q=["\xB7 ","\xB7\xB7 ","\xB7\xB7\xB7"," \xB7\xB7"," \xB7"],z=0;while(!q.aborted)process.stdout.write(`\r${K("\u25C6","1;38;5;118")} ${$} ${Q[z++%Q.length]} ${K("Esc to stop","38;5;244")}`),await o0(120,q).catch(()=>{return});process.stdout.write("\r\x1B[K")}function n0(){return["Available commands:",...$$.map(($)=>{let q=$.split(" ")[0];return`- ${$} \u2014 ${P1[q]??""}`})].join(`
67
+ `)}async function C1($,q){let[Q,...z]=$.slice(1).trim().split(/\s+/),Y=z.join(" ");switch(Q){case"help":return n0();case"credits":return k(await q.usage(),["credits_used","credits_cap","remaining","plan"]);case"search":return F(await q.entities({search:Y}),["symbol","ticker","name","exchange","market","price","market_cap","id"]);case"profile":return k(await q.entity(Y),["symbol","ticker","name","exchange","market","sector","industry","website","description","entity_id","id"]);case"indices":return F(await q.marketIndices(),["symbol","name","current_value","change_value","change_percent","id"]);case"news":return F(await q.news({search:Y,limit:10}),["published_at","created_at","title","source","topics","entities","url","id"]);case"doc":return B0(await q.queryReport(Y));case"quote":return F(await q.historicalQuote(Y,{limit:10}),["timestamp","total_volume","deal_volume","total_value","buy_foreign_quantity","sell_foreign_quantity","current_foreign_room"]);case"ohlcv":return F(await q.ohlcv(Y,{timeframe:"1d",limit:20}),["timestamp","time","date","open","high","low","close","volume"]);case"officers":return F(await q.offices(Y),["name","position","is_foreigner","sort_order"]);case"subsidiary":return F(await q.subsidiaries(Y),["name","symbol","ownership_rate","charter_capital","business_area","id"]);case"holder":return F(await q.holders(Y,{}),["name","holder_name","ownership_rate","shares","is_organization","is_foreigner"]);case"holder-tx":return F(await q.holderTransactions(Y,{limit:100}),["name","type","registered_volume","execution_volume","start_at","end_at","position"]);case"financials":return F(Q$(await q.financialStatements(Y,{})),["year","quarter","type","net_sales","gross_profit","profit_after_tax","total_assets","owner_equity","net_operating_cash_flow"]);case"stats":return F(await q.financialStatistics(Y,{}),["year","quarter","pe","pb","roe","roa","gross_margin","market_cap"]);case"ta":{let X=await q.ohlcv(Y,{timeframe:"1d",limit:80}),J=[...T(X)].reverse(),_=v(J),U=J0(_,20);return F(J.map((G,M)=>({...G,sma_20:U[M]})).reverse().slice(0,20),["timestamp","time","date","close","sma_20"])}case"risk":{let X=await q.ohlcv(Y,{timeframe:"1d",limit:252});return k([_0(v([...T(X)].reverse()),0)],["count","annualReturn","volatility","sharpe","maxDrawdown"])}case"doctor":{let X=R0("bun",["--version"],{encoding:"utf8"}).stdout.trim(),Z=await q.request("/health",{auth:!1});return k([{bun:X,configPath:A,baseUrl:q.baseUrl,health:Z}])}default:return`Unknown command: /${Q}
68
+
69
+ ${n0()}`}}async function k1($,q){let Q=await E(),z=await H0(Q),Y=Number(q.timeout),X=null,Z=()=>K(`v${g.version} \u2022 thread ${z} \u2022 Tab autocomplete \u2022 Esc stop`,"38;5;244"),J=()=>process.stdout.rows??30,_=()=>Math.max(1,J()-3),U=()=>{if(!process.stdout.isTTY)return;process.stdout.write(`\x1B[1;${_()}r`)},G=()=>{if(!process.stdout.isTTY)return;process.stdout.write(`\x1B[${_()};1H\x1B[2K`)},M=()=>{if(!process.stdout.isTTY)return`${t0()}
70
+ ${Z()}
71
+ `;return`\x1B[${J()-1};1H\x1B[2K${Z()}
72
+ \x1B[2K${t0()}`},j=async(R)=>{G(),console.log(p("you",R));let P=new AbortController;X=P;let c=process.stdout.isTTY?w1("Mozyfin is working",P.signal):Promise.resolve();try{let m=R.startsWith("/")?await C1(R,Q):await e0(Q,z,R,Y,void 0,P.signal);P.abort(),await c,console.log(p("mozyfin",m))}catch(m){P.abort(),await c;let Y$=m?.name==="AbortError"?"Stopped. Press Enter to continue.":m.message;console.log(p("system",Y$))}finally{X=null}};if(console.log(p0()),$)await j($);if(q.once||!process.stdin.isTTY)return;if(U(),L1(process.stdin),process.stdin.setRawMode)process.stdin.setRawMode(!0);let B=E1({input:process.stdin,output:process.stdout,terminal:!0,completer:(R)=>{if(!R.startsWith("/"))return[[],R];let P=s0.filter((c)=>c.startsWith(R));return[P.length?P:s0,R]}});B.on("SIGINT",()=>B.close()),process.stdin.on("keypress",(R,P)=>{if(P.name==="escape"&&X)X.abort()});try{while(!0){let R=(await B.question(M())).trim();if(!R||R==="/exit"||R==="/quit")break;if(R==="/clear"){process.stdout.write("\x1B[r"),console.clear(),console.log(p0()),U();continue}if(R==="/new"){z=await H0(Q),G(),console.log(p("system","Started a new chat thread."));continue}await j(R)}}finally{if(process.stdin.setRawMode)process.stdin.setRawMode(!1);B.close(),process.stdout.write(`\x1B[r\x1B[?25h
73
+ `)}}function Q$($){return T($).map((q)=>{let Q=q.values??{};return{year:q.year,quarter:q.quarter,type:q.type,net_sales:Q["Net sales"]??Q.Sales,gross_profit:Q["Gross Profit"],profit_after_tax:Q["Net profit/(loss) after tax"],total_assets:Q["Total Assets"],owner_equity:Q["Owner's Equity"],net_operating_cash_flow:Q["Net cash inflows/(outflows) from operating activities"],public_at:q.public_at}})}H.command("login").description("Save API key locally").option("--api-key <key>").action(async($)=>{let q=$.apiKey??H.opts().apiKey;if(!q)throw Error("Missing --api-key <key>");await u0({apiKey:q,baseUrl:H.opts().baseUrl}),await x([{ok:!0,configPath:A}],{})});H.command("logout").description("Remove saved API key").action(async()=>{await g0(),await x([{ok:!0}],{})});N(H.command("search").description("Search companies/entities by ticker, name or text")).option("-q, --query [text]","search query; empty means all","").action(async($)=>V(await(await E()).entities({search:$.query}),$,["symbol","ticker","name","exchange","market","price","market_cap","id"]));N(H.command("profile").argument("<tickerOrEntityId>").description("Company profile/entity details")).action(async($,q)=>W0(await(await E()).entity($),q,["symbol","ticker","name","exchange","market","sector","industry","website","description","entity_id","id"]));N(H.command("news").description("Market headlines and article search")).option("--query <text>","search query; empty means all","").option("--entities <ids>","comma-separated entity ids; OR semantics").option("--topics <topics>","comma-separated topics: stock,crypto,forex,tariff,economic,earning,tech,housing,mergers_and_ipo; OR semantics").option("--limit <n>","max rows","20").option("--page <n>","page hint for APIs that support it","1").action(async($)=>V(await(await E()).news(x1($)),$,["published_at","created_at","title","source","topics","entities","url","id"]));function x1($){let q=["stock","crypto","forex","tariff","economic","earning","tech","housing","mergers_and_ipo"],Q=r0($.topics);for(let z of Q??[])a0(z,q,"topic");return{search:$.query,entities:r0($.entities),topics:Q,limit:$.limit,page:$.page}}N(H.command("indices").description("List supported market indices (use the returned id with `ohlcv`)")).action(async($)=>V(await(await E()).marketIndices(),$,["symbol","name","current_value","change_value","change_percent","id"]));N(H.command("ohlcv").argument("<entity>").description("Historical OHLCV candles")).option("--timeframe <value>","1h, 1d, 1w, 1mo, 1y","1d").option("--to <timestamp>","end timestamp").option("--limit <n>","max rows").action(async($,q)=>{return a0(q.timeframe,["1h","1d","1w","1mo","1y"],"timeframe"),V(await(await E()).ohlcv($,q),q,["timestamp","time","date","open","high","low","close","volume"])});N(H.command("quote").argument("<entity>").description("Latest daily quote snapshot")).option("--to <timestamp>","end timestamp").option("--limit <n>","max rows","1").action(async($,q)=>V(await(await E()).historicalQuote($,{to:q.to,limit:q.limit}),q,["timestamp","total_volume","deal_volume","total_value","buy_foreign_quantity","sell_foreign_quantity","current_foreign_room"]));N(H.command("officers").argument("<entity>").description("Company officers/directors")).action(async($,q)=>V(await(await E()).offices($),q,["name","position","is_foreigner","sort_order"]));N(H.command("subsidiary").argument("<entity>").description("Company subsidiaries")).action(async($,q)=>V(await(await E()).subsidiaries($),q,["name","symbol","ownership_rate","charter_capital","business_area","id"]));N(H.command("holder").argument("<entity>").description("Major shareholders")).option("--is-organization <true|false>","filter organization holders").option("--is-foreigner <true|false>","filter foreign holders").action(async($,q)=>V(await(await E()).holders($,{is_organization:q.isOrganization,is_foreigner:q.isForeigner}),q,["name","holder_name","ownership_rate","shares","is_organization","is_foreigner"]));N(H.command("holder-tx").argument("<entity>").description("Shareholder transactions")).option("--cursor <cursor>","pagination cursor").option("--limit <n>","max rows","100").option("--transaction-type <type>","transaction type filter").action(async($,q)=>V(await(await E()).holderTransactions($,{cursor:q.cursor,limit:q.limit,transaction_type:q.transactionType}),q,["name","type","registered_volume","execution_volume","start_at","end_at","position"]));N(H.command("financials").argument("<entity>").description("Financial statements")).option("--year <year>","report year").option("--quarter <quarter>","report quarter").option("--statement-type <type>","statement type filter").action(async($,q)=>V(Q$(await(await E()).financialStatements($,{year:q.year,quarter:q.quarter,statement_type:q.statementType})),q,["year","quarter","type","net_sales","gross_profit","profit_after_tax","total_assets","owner_equity","net_operating_cash_flow"]));N(H.command("stats").argument("<entity>").description("Financial statistics/ratios")).option("--year <year>","report year").option("--quarter <quarter>","report quarter").action(async($,q)=>V(await(await E()).financialStatistics($,{year:q.year,quarter:q.quarter}),q,["year","quarter","pe","pb","roe","roa","gross_margin","market_cap"]));N(H.command("ta").argument("<tickerOrEntityId>").description("Technical indicators over OHLCV close prices")).option("--sma <list>","comma-separated SMA periods","20").option("--rsi <n>","RSI period").option("--macd","include MACD").option("--limit <n>","max candles","300").action(async($,q)=>{let Q=await(await E()).ohlcv($,{timeframe:"1d",limit:q.limit}),Y=[...T(Q)].reverse(),X=v(Y),Z=String(q.sma).split(",").map(Number).filter(Number.isFinite),J=Object.fromEntries(Z.map((M)=>[M,J0(X,M)])),_=q.rsi?b0(X,Number(q.rsi)):[],U=q.macd?O0(X):[],G=Y.map((M,j)=>({...M,...Object.fromEntries(Z.map((B)=>[`sma_${B}`,J[B][j]])),...q.rsi?{[`rsi_${q.rsi}`]:_[j]}:{},...q.macd?U[j]:{}})).reverse();await V(G,q,["timestamp","time","date","close",...Z.map((M)=>`sma_${M}`),...q.rsi?[`rsi_${q.rsi}`]:[],...q.macd?["macd","signal","histogram"]:[]])});H.command("risk").argument("<tickerOrEntityId>").description("Risk/performance metrics: return, volatility, Sharpe, max drawdown").option("--limit <n>","max candles","252").option("--risk-free <n>","annual risk-free rate","0").action(async($,q)=>{let Q=await(await E()).ohlcv($,{timeframe:"1d",limit:q.limit});await W0([_0(v([...T(Q)].reverse()),Number(q.riskFree))],{},["count","annualReturn","volatility","sharpe","maxDrawdown"])});H.command("doc").argument("<query...>").description("Query analysis reports using natural language").action(async($)=>{let q=await(await E()).queryReport($.join(" "));console.log(B0(q))});H.command("ask").argument("<prompt...>").description("Ask Mozyfin agent in auto mode (one focused question per call \u2014 avoid multi-question prompts)").option("--timeout <seconds>","max wait time in seconds (default 300 = 5 minutes)","300").action(async($,q)=>{let Q=await E(),z=await H0(Q);console.log(await e0(Q,z,$.join(" "),Number(q.timeout)))});H.command("tui").argument("[prompt...]","optional first message to send").description("Open a polished Mozyfin terminal chat UI").option("--timeout <seconds>","max wait time per response in seconds","300").option("--once","send the optional prompt and exit; useful for scripts/tests").action(async($,q)=>{await k1($?.join(" ")||void 0,q)});H.command("credits").description("Check subscription usage/credits").action(async()=>W0(await(await E()).usage(),{},["credits_used","credits_cap","remaining","plan"]));H.command("doctor").description("Check runtime, config and API health").action(async()=>{let $=R0("bun",["--version"],{encoding:"utf8"}).stdout.trim(),q=await E(),Q=await q.request("/health",{auth:!1});await x([{bun:$,configPath:A,baseUrl:q.baseUrl,health:Q}],{})});H.command("update").description("Upgrade CLI to latest version; auto-updates skills for any agents that already have it installed").option("--skill [agent]","Force update skill for specific agent (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, or 'all')").action(async($)=>{let q=H.version(),Q=await fetch("https://registry.npmjs.org/mozyfin-cli/latest").then((Z)=>Z.json()).then((Z)=>Z.version).catch(()=>null);if(console.log(`Current version: ${q}`),Q)if(console.log(`Latest version: ${Q}`),q===Q)console.log(`
57
74
  You're already on the latest version!`);else if(console.log(`
58
- Updating CLI...`),u0("npm",["install","-g","mozyfin-cli@latest"],{encoding:"utf8",stdio:"inherit"}).status===0)console.log(`
75
+ Updating CLI...`),R0("npm",["install","-g","mozyfin-cli@latest"],{encoding:"utf8",stdio:"inherit"}).status===0)console.log(`
59
76
  \u2713 CLI updated successfully!`);else console.log(`
60
- \u2717 CLI update failed. Try running manually:`),console.log(" npm install -g mozyfin-cli@latest");let z=K(J0,"..","agent-skills","mozyfin-cli"),J="mozyfin-cli",Y=[];if($.skill){let X=$.skill===!0?"all":$.skill;Y=X==="all"?Object.keys(b):[X]}else for(let[X,M]of Object.entries(b)){let Z=!1;if(M.format==="directory")Z=y(K(M.path,J,"SKILL.md"));else if(M.format==="file")Z=y(K(M.path,`${J}.md`));else if(M.format==="append"){if(y(M.path))Z=u(M.path,"utf8").includes(`<!-- ${J} -->`)}if(Z)Y.push(X)}if(Y.length===0)return;if(!y(z)){console.log(`
77
+ \u2717 CLI update failed. Try running manually:`),console.log(" npm install -g mozyfin-cli@latest");let z=W(M0,"..","agent-skills","mozyfin-cli"),Y="mozyfin-cli",X=[];if($.skill){let Z=$.skill===!0?"all":$.skill;X=Z==="all"?Object.keys(O):[Z]}else for(let[Z,J]of Object.entries(O)){let _=!1;if(J.format==="directory")_=I(W(J.path,Y,"SKILL.md"));else if(J.format==="file")_=I(W(J.path,`${Y}.md`));else if(J.format==="append"){if(I(J.path))_=i(J.path,"utf8").includes(`<!-- ${Y} -->`)}if(_)X.push(Z)}if(X.length===0)return;if(!I(z)){console.log(`
61
78
  \u2717 Skill source not found in package`);return}console.log(`
62
- Updating skills for: ${Y.join(", ")}`);for(let X of Y){let M=b[X];if(!M){console.log(`\u2717 Unknown agent: ${X}`);continue}let{path:Z,format:_}=M;try{if(_==="append"){f(l(Z),{recursive:!0});let U=u(K(z,"SKILL.md"),"utf8"),G=`${(y(Z)?u(Z,"utf8"):"").replace(new RegExp(`<!-- ${J} -->[\\s\\S]*<!-- /${J} -->`,"g"),"").trim()}
79
+ Updating skills for: ${X.join(", ")}`);for(let Z of X){let J=O[Z];if(!J){console.log(`\u2717 Unknown agent: ${Z}`);continue}let{path:_,format:U}=J;try{if(U==="append"){b(a(_),{recursive:!0});let G=i(W(z,"SKILL.md"),"utf8"),B=`${(I(_)?i(_,"utf8"):"").replace(new RegExp(`<!-- ${Y} -->[\\s\\S]*<!-- /${Y} -->`,"g"),"").trim()}
63
80
 
64
- <!-- ${J} -->
65
- ${U}
66
- <!-- /${J} -->
67
- `;T("fs").writeFileSync(Z,G),console.log(`\u2713 Updated skill for ${X}`)}else if(_==="file"){f(Z,{recursive:!0});let U=K(Z,`${J}.md`);c(K(z,"SKILL.md"),U),console.log(`\u2713 Updated skill for ${X}`)}else if(_==="directory"){let U=K(Z,J);g(U,{recursive:!0,force:!0}),f(Z,{recursive:!0}),c(z,U,{recursive:!0}),console.log(`\u2713 Updated skill for ${X}`)}}catch(U){console.log(`\u2717 Failed to update skill for ${X}: ${U}`)}}});var b={claude:{path:K(F(),".claude","skills"),format:"directory"},cursor:{path:K(F(),".cursor","commands"),format:"file"},copilot:{path:K(F(),".github","copilot-instructions.md"),format:"append"},windsurf:{path:K(F(),".windsurf","workflows"),format:"file"},codex:{path:K(F(),".agents","skills"),format:"directory"},gemini:{path:K(F(),".gemini","instructions"),format:"file"},hermes:{path:K(F(),".hermes","skills"),format:"directory"},openclaw:{path:K(F(),".openclaw","skills"),format:"directory"},antigravity:{path:K(F(),".gemini","antigravity","skills"),format:"directory"}};B.command("skill").description("Install mozyfin-cli skill into AI agents (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity)").argument("[agent]","Target agent (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity) or 'all'").option("--list","List available agents").option("--remove","Remove skill from agent").action(($,q)=>{let Q=K(J0,"..","agent-skills","mozyfin-cli"),z="mozyfin-cli";if(q.list){console.log(`Available agents:
68
- `);for(let[Y,X]of Object.entries(b)){let M=!1;if(X.format==="directory")M=y(K(X.path,"mozyfin-cli","SKILL.md"));else if(X.format==="file")M=y(K(X.path,"mozyfin-cli.md"));else if(X.format==="append"){if(y(X.path))M=T("fs").readFileSync(X.path,"utf8").includes("<!-- mozyfin-cli -->")}console.log(` ${Y.padEnd(10)} ${M?"\u2713 installed":"\u25CB not installed"}`),console.log(` ${X.path}`)}return}if(!$){console.log("Usage: mozyfin skill <agent>"),console.log(`
81
+ <!-- ${Y} -->
82
+ ${G}
83
+ <!-- /${Y} -->
84
+ `;D("fs").writeFileSync(_,B),console.log(`\u2713 Updated skill for ${Z}`)}else if(U==="file"){b(_,{recursive:!0});let G=W(_,`${Y}.md`);n(W(z,"SKILL.md"),G),console.log(`\u2713 Updated skill for ${Z}`)}else if(U==="directory"){let G=W(_,Y);t(G,{recursive:!0,force:!0}),b(_,{recursive:!0}),n(z,G,{recursive:!0}),console.log(`\u2713 Updated skill for ${Z}`)}}catch(G){console.log(`\u2717 Failed to update skill for ${Z}: ${G}`)}}});var O={claude:{path:W(S(),".claude","skills"),format:"directory"},cursor:{path:W(S(),".cursor","commands"),format:"file"},copilot:{path:W(S(),".github","copilot-instructions.md"),format:"append"},windsurf:{path:W(S(),".windsurf","workflows"),format:"file"},codex:{path:W(S(),".agents","skills"),format:"directory"},gemini:{path:W(S(),".gemini","instructions"),format:"file"},hermes:{path:W(S(),".hermes","skills"),format:"directory"},openclaw:{path:W(S(),".openclaw","skills"),format:"directory"},antigravity:{path:W(S(),".gemini","antigravity","skills"),format:"directory"}};H.command("skill").description("Install mozyfin-cli skill into AI agents (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity)").argument("[agent]","Target agent (claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity) or 'all'").option("--list","List available agents").option("--remove","Remove skill from agent").action(($,q)=>{let Q=W(M0,"..","agent-skills","mozyfin-cli"),z="mozyfin-cli";if(q.list){console.log(`Available agents:
85
+ `);for(let[X,Z]of Object.entries(O)){let J=!1;if(Z.format==="directory")J=I(W(Z.path,"mozyfin-cli","SKILL.md"));else if(Z.format==="file")J=I(W(Z.path,"mozyfin-cli.md"));else if(Z.format==="append"){if(I(Z.path))J=D("fs").readFileSync(Z.path,"utf8").includes("<!-- mozyfin-cli -->")}console.log(` ${X.padEnd(10)} ${J?"\u2713 installed":"\u25CB not installed"}`),console.log(` ${Z.path}`)}return}if(!$){console.log("Usage: mozyfin skill <agent>"),console.log(`
69
86
  Available agents: claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity, all`),console.log(`
70
- Options:`),console.log(" --list List available agents"),console.log(" --remove Remove skill from agent");return}let J=$==="all"?Object.keys(b):[$];for(let Y of J){let X=b[Y];if(!X){console.log(`Unknown agent: ${Y}`),console.log("Available: claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity");continue}let{path:M,format:Z}=X;if(q.remove){if(Z==="append")if(y(M)){let U=T("fs").readFileSync(M,"utf8").replace(new RegExp("<!-- mozyfin-cli -->[\\s\\S]*<!-- /mozyfin-cli -->","g"),"").trim();T("fs").writeFileSync(M,U),console.log(`\u2713 Removed skill from ${Y}`)}else console.log(`Skill not installed in ${Y}`);else if(Z==="file"){let _=K(M,"mozyfin-cli.md");if(y(_))g(_),console.log(`\u2713 Removed skill from ${Y}`);else console.log(`Skill not installed in ${Y}`)}else if(Z==="directory"){let _=K(M,"mozyfin-cli");if(y(_))g(_,{recursive:!0,force:!0}),console.log(`\u2713 Removed skill from ${Y}`);else console.log(`Skill not installed in ${Y}`)}continue}if(!y(Q)){console.log(`Skill directory not found: ${Q}`);continue}if(Z==="append"){f(l(M),{recursive:!0});let _=T("fs").readFileSync(K(Q,"SKILL.md"),"utf8"),L=`${(y(M)?T("fs").readFileSync(M,"utf8"):"").replace(new RegExp("<!-- mozyfin-cli -->[\\s\\S]*<!-- /mozyfin-cli -->","g"),"").trim()}
87
+ Options:`),console.log(" --list List available agents"),console.log(" --remove Remove skill from agent");return}let Y=$==="all"?Object.keys(O):[$];for(let X of Y){let Z=O[X];if(!Z){console.log(`Unknown agent: ${X}`),console.log("Available: claude, cursor, copilot, windsurf, codex, gemini, hermes, openclaw, antigravity");continue}let{path:J,format:_}=Z;if(q.remove){if(_==="append")if(I(J)){let G=D("fs").readFileSync(J,"utf8").replace(new RegExp("<!-- mozyfin-cli -->[\\s\\S]*<!-- /mozyfin-cli -->","g"),"").trim();D("fs").writeFileSync(J,G),console.log(`\u2713 Removed skill from ${X}`)}else console.log(`Skill not installed in ${X}`);else if(_==="file"){let U=W(J,"mozyfin-cli.md");if(I(U))t(U),console.log(`\u2713 Removed skill from ${X}`);else console.log(`Skill not installed in ${X}`)}else if(_==="directory"){let U=W(J,"mozyfin-cli");if(I(U))t(U,{recursive:!0,force:!0}),console.log(`\u2713 Removed skill from ${X}`);else console.log(`Skill not installed in ${X}`)}continue}if(!I(Q)){console.log(`Skill directory not found: ${Q}`);continue}if(_==="append"){b(a(J),{recursive:!0});let U=D("fs").readFileSync(W(Q,"SKILL.md"),"utf8"),j=`${(I(J)?D("fs").readFileSync(J,"utf8"):"").replace(new RegExp("<!-- mozyfin-cli -->[\\s\\S]*<!-- /mozyfin-cli -->","g"),"").trim()}
71
88
 
72
89
  <!-- mozyfin-cli -->
73
- ${_}
90
+ ${U}
74
91
  <!-- /mozyfin-cli -->
75
- `;T("fs").writeFileSync(M,L),console.log(`\u2713 Installed skill to ${Y}`)}else if(Z==="file"){f(M,{recursive:!0});let _=K(M,"mozyfin-cli.md");c(K(Q,"SKILL.md"),_),console.log(`\u2713 Installed skill to ${Y}`)}else if(Z==="directory"){let _=K(M,"mozyfin-cli");g(_,{recursive:!0,force:!0}),f(M,{recursive:!0}),c(Q,_,{recursive:!0}),console.log(`\u2713 Installed skill to ${Y}`)}}});var z$=86400000;async function J$(){try{let $=new AbortController,q=setTimeout(()=>$.abort(),1000),Q=await fetch("https://registry.npmjs.org/mozyfin-cli/latest",{signal:$.signal});clearTimeout(q);let z=await Q.json();if(!z.version)return null;return await a1(l(O),{recursive:!0}),await o1(O,JSON.stringify({latestVersion:z.version,checkedAt:Date.now()})),z.version}catch{return null}}async function Y$(){try{let $=JSON.parse(await e1(O,"utf8"));if($?.latestVersion&&Date.now()-($.checkedAt??0)<z$&&c0(Y0.version,$.latestVersion)<=0)return $.latestVersion}catch{}return J$()}function c0($,q){let Q=$.split(".").map((J)=>Number.parseInt(J,10)||0),z=q.split(".").map((J)=>Number.parseInt(J,10)||0);for(let J=0;J<3;J++){let Y=(Q[J]??0)-(z[J]??0);if(Y!==0)return Y}return 0}async function M$(){if(process.env.MOZYFIN_DISABLE_UPDATE_CHECK)return;if(process.argv.slice(2).find((z)=>!z.startsWith("-"))==="update")return;let q=await Y$(),Q=Y0.version;if(q&&c0(Q,q)<0)console.error(`
76
- \u26A0\uFE0F mozyfin-cli v${Q} is outdated (latest: v${q}). Run \`mozyfin update\` to upgrade.`)}B.parseAsync().catch(($)=>{console.error(`Error: ${$.message}`),process.exitCode=1}).finally(()=>M$());
92
+ `;D("fs").writeFileSync(J,j),console.log(`\u2713 Installed skill to ${X}`)}else if(_==="file"){b(J,{recursive:!0});let U=W(J,"mozyfin-cli.md");n(W(Q,"SKILL.md"),U),console.log(`\u2713 Installed skill to ${X}`)}else if(_==="directory"){let U=W(J,"mozyfin-cli");t(U,{recursive:!0,force:!0}),b(J,{recursive:!0}),n(Q,U,{recursive:!0}),console.log(`\u2713 Installed skill to ${X}`)}}});var b1=86400000;async function O1(){try{let $=new AbortController,q=setTimeout(()=>$.abort(),1000),Q=await fetch("https://registry.npmjs.org/mozyfin-cli/latest",{signal:$.signal});clearTimeout(q);let z=await Q.json();if(!z.version)return null;return await R1(a(d),{recursive:!0}),await W1(d,JSON.stringify({latestVersion:z.version,checkedAt:Date.now()})),z.version}catch{return null}}async function h1(){try{let $=JSON.parse(await M1(d,"utf8"));if($?.latestVersion&&Date.now()-($.checkedAt??0)<b1&&z$(g.version,$.latestVersion)<=0)return $.latestVersion}catch{}return O1()}function z$($,q){let Q=$.split(".").map((Y)=>Number.parseInt(Y,10)||0),z=q.split(".").map((Y)=>Number.parseInt(Y,10)||0);for(let Y=0;Y<3;Y++){let X=(Q[Y]??0)-(z[Y]??0);if(X!==0)return X}return 0}async function v1(){if(process.env.MOZYFIN_DISABLE_UPDATE_CHECK)return;if(process.argv.slice(2).find((z)=>!z.startsWith("-"))==="update")return;let q=await h1(),Q=g.version;if(q&&z$(Q,q)<0)console.error(`
93
+ \u26A0\uFE0F mozyfin-cli v${Q} is outdated (latest: v${q}). Run \`mozyfin update\` to upgrade.`)}H.parseAsync().catch(($)=>{console.error(`Error: ${$.message}`),process.exitCode=1}).finally(()=>v1());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mozyfin-cli",
3
- "version": "0.2.12",
3
+ "version": "0.2.13",
4
4
  "description": "Human- and agent-friendly CLI for Vietnamese market data via Mozyfin/Antofin APIs.",
5
5
  "type": "module",
6
6
  "bin": {