create-mastra 0.0.0-taofeeqInngest-20250603090617 → 0.0.0-testing-cloud-studios-20260114234039

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -4,25 +4,30 @@ import { randomUUID } from 'node:crypto';
4
4
  import * as fs3__default from 'node:fs';
5
5
  import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import os from 'node:os';
7
- import path2, { dirname } from 'node:path';
7
+ import path3, { dirname } from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { PostHog } from 'posthog-node';
10
- import h, { stdin, stdout } from 'node:process';
11
- import * as f from 'node:readline';
12
- import f__default from 'node:readline';
13
- import tty, { WriteStream } from 'node:tty';
14
- import child_process from 'node:child_process';
15
- import util from 'node:util';
16
10
  import fs4 from 'node:fs/promises';
17
- import { execa } from 'execa';
18
- import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
11
+ import util, { stripVTControlCharacters } from 'node:util';
12
+ import y$1, { stdout, stdin } from 'node:process';
13
+ import * as g from 'node:readline';
14
+ import g__default from 'node:readline';
15
+ import { Writable } from 'node:stream';
16
+ import child_process from 'node:child_process';
17
+ import tty from 'node:tty';
18
+ import fsExtra, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
19
19
  import prettier from 'prettier';
20
+ import { execa } from 'execa';
21
+ import fsExtra$1 from 'fs-extra';
20
22
  import pino from 'pino';
21
23
  import pretty from 'pino-pretty';
22
- import fsExtra from 'fs-extra';
23
24
 
24
25
  var __filename = fileURLToPath(import.meta.url);
25
- var __dirname = path2.dirname(__filename);
26
+ var __dirname = path3.dirname(__filename);
27
+ var analyticsInstance = null;
28
+ function getAnalytics() {
29
+ return analyticsInstance;
30
+ }
26
31
  var PosthogAnalytics = class {
27
32
  sessionId;
28
33
  client;
@@ -34,7 +39,7 @@ var PosthogAnalytics = class {
34
39
  host = "https://app.posthog.com"
35
40
  }) {
36
41
  this.version = version;
37
- const cliConfigPath = path2.join(__dirname, "mastra-cli.json");
42
+ const cliConfigPath = path3.join(__dirname, "mastra-cli.json");
38
43
  if (existsSync(cliConfigPath)) {
39
44
  try {
40
45
  const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
@@ -62,7 +67,7 @@ var PosthogAnalytics = class {
62
67
  }
63
68
  writeCliConfig({ distinctId, sessionId }) {
64
69
  try {
65
- writeFileSync(path2.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
70
+ writeFileSync(path3.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
66
71
  } catch {
67
72
  }
68
73
  }
@@ -100,6 +105,10 @@ var PosthogAnalytics = class {
100
105
  machine_id: os.hostname()
101
106
  };
102
107
  }
108
+ getDurationMs(startTime) {
109
+ const [seconds, nanoseconds] = process.hrtime(startTime);
110
+ return seconds * 1e3 + nanoseconds / 1e6;
111
+ }
103
112
  captureSessionStart() {
104
113
  if (!this.client) {
105
114
  return;
@@ -112,6 +121,22 @@ var PosthogAnalytics = class {
112
121
  }
113
122
  });
114
123
  }
124
+ trackEvent(eventName, properties) {
125
+ try {
126
+ if (!this.client) {
127
+ return;
128
+ }
129
+ this.client.capture({
130
+ distinctId: this.distinctId,
131
+ event: eventName,
132
+ properties: {
133
+ ...this.getSystemProperties(),
134
+ ...properties
135
+ }
136
+ });
137
+ } catch {
138
+ }
139
+ }
115
140
  trackCommand(options) {
116
141
  try {
117
142
  if (!this.client) {
@@ -152,8 +177,7 @@ var PosthogAnalytics = class {
152
177
  const startTime = process.hrtime();
153
178
  try {
154
179
  const result = await execution();
155
- const [seconds, nanoseconds] = process.hrtime(startTime);
156
- const durationMs = seconds * 1e3 + nanoseconds / 1e6;
180
+ const durationMs = this.getDurationMs(startTime);
157
181
  this.trackCommand({
158
182
  command,
159
183
  args,
@@ -163,8 +187,7 @@ var PosthogAnalytics = class {
163
187
  });
164
188
  return result;
165
189
  } catch (error) {
166
- const [seconds, nanoseconds] = process.hrtime(startTime);
167
- const durationMs = seconds * 1e3 + nanoseconds / 1e6;
190
+ const durationMs = this.getDurationMs(startTime);
168
191
  this.trackCommand({
169
192
  command,
170
193
  args,
@@ -348,74 +371,65 @@ function requirePicocolors () {
348
371
  var picocolorsExports = /*@__PURE__*/ requirePicocolors();
349
372
  var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
350
373
 
351
- function q({onlyFirst:e=false}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,e?void 0:"g")}const J=q();function S(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(J,"")}function T$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var j$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(t){var s=t.charCodeAt(0),C=t.length==2?t.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=C&&C<=57343&&(s&=1023,C&=1023,D=s<<10|C,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(t){var s=this.eastAsianWidth(t);return s=="F"||s=="W"||s=="A"?2:1};function F(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(t){for(var s=F(t),C=0,D=0;D<s.length;D++)C=C+this.characterLength(s[D]);return C},u.slice=function(t,s,C){textLen=u.length(t),s=s||0,C=C||1,s<0&&(s=textLen+s),C<0&&(C=textLen+C);for(var D="",i=0,n=F(t),E=0;E<n.length;E++){var h=n[E],o=u.length(h);if(i>=s-(o==2?1:0))if(i+o<=C)D+=h;else break;i+=o;}return D};})(j$1);var Q$1=j$1.exports;const X=T$1(Q$1);var DD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const uD=T$1(DD);function A(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=S(e),e.length===0))return 0;e=e.replace(uD()," ");const F=u.ambiguousIsNarrow?1:2;let t=0;for(const s of e){const C=s.codePointAt(0);if(C<=31||C>=127&&C<=159||C>=768&&C<=879)continue;switch(X.eastAsianWidth(s)){case "F":case "W":t+=2;break;case "A":t+=F;break;default:t+=1;}}return t}const d=10,M$1=(e=0)=>u=>`\x1B[${u+e}m`,P$1=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,W=(e=0)=>(u,F,t)=>`\x1B[${38+e};2;${u};${F};${t}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const FD=Object.keys(r.color),eD=Object.keys(r.bgColor);[...FD,...eD];function tD(){const e=new Map;for(const[u,F]of Object.entries(r)){for(const[t,s]of Object.entries(F))r[t]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},F[t]=r[t],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:F,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=M$1(),r.color.ansi256=P$1(),r.color.ansi16m=W(),r.bgColor.ansi=M$1(d),r.bgColor.ansi256=P$1(d),r.bgColor.ansi16m=W(d),Object.defineProperties(r,{rgbToAnsi256:{value:(u,F,t)=>u===F&&F===t?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(F/255*5)+Math.round(t/255*5),enumerable:false},hexToRgb:{value:u=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!F)return [0,0,0];let[t]=F;t.length===3&&(t=[...t].map(C=>C+C).join(""));const s=Number.parseInt(t,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let F,t,s;if(u>=232)F=((u-232)*10+8)/255,t=F,s=F;else {u-=16;const i=u%36;F=Math.floor(u/36)/5,t=Math.floor(i/6)/5,s=i%6/5;}const C=Math.max(F,t,s)*2;if(C===0)return 30;let D=30+(Math.round(s)<<2|Math.round(t)<<1|Math.round(F));return C===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,F,t)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,F,t)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const sD=tD(),g=new Set(["\x1B","\x9B"]),CD=39,b$1="\x07",O="[",iD="]",I$1="m",w=`${iD}8;;`,N=e=>`${g.values().next().value}${O}${e}${I$1}`,L=e=>`${g.values().next().value}${w}${e}${b$1}`,rD=e=>e.split(" ").map(u=>A(u)),y$1=(e,u,F)=>{const t=[...u];let s=false,C=false,D=A(S(e[e.length-1]));for(const[i,n]of t.entries()){const E=A(n);if(D+E<=F?e[e.length-1]+=n:(e.push(n),D=0),g.has(n)&&(s=true,C=t.slice(i+1).join("").startsWith(w)),s){C?n===b$1&&(s=false,C=false):n===I$1&&(s=false);continue}D+=E,D===F&&i<t.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},ED=e=>{const u=e.split(" ");let F=u.length;for(;F>0&&!(A(u[F-1])>0);)F--;return F===u.length?e:u.slice(0,F).join(" ")+u.slice(F).join("")},oD=(e,u,F={})=>{if(F.trim!==false&&e.trim()==="")return "";let t="",s,C;const D=rD(e);let i=[""];for(const[E,h]of e.split(" ").entries()){F.trim!==false&&(i[i.length-1]=i[i.length-1].trimStart());let o=A(i[i.length-1]);if(E!==0&&(o>=u&&(F.wordWrap===false||F.trim===false)&&(i.push(""),o=0),(o>0||F.trim===false)&&(i[i.length-1]+=" ",o++)),F.hard&&D[E]>u){const B=u-o,p=1+Math.floor((D[E]-B-1)/u);Math.floor((D[E]-1)/u)<p&&i.push(""),y$1(i,h,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(F.wordWrap===false&&o<u){y$1(i,h,u);continue}i.push("");}if(o+D[E]>u&&F.wordWrap===false){y$1(i,h,u);continue}i[i.length-1]+=h;}F.trim!==false&&(i=i.map(E=>ED(E)));const n=[...i.join(`
352
- `)];for(const[E,h]of n.entries()){if(t+=h,g.has(h)){const{groups:B}=new RegExp(`(?:\\${O}(?<code>\\d+)m|\\${w}(?<uri>.*)${b$1})`).exec(n.slice(E).join(""))||{groups:{}};if(B.code!==void 0){const p=Number.parseFloat(B.code);s=p===CD?void 0:p;}else B.uri!==void 0&&(C=B.uri.length===0?void 0:B.uri);}const o=sD.codes.get(Number(s));n[E+1]===`
353
- `?(C&&(t+=L("")),s&&o&&(t+=N(o))):h===`
354
- `&&(s&&o&&(t+=N(s)),C&&(t+=L(C)));}return t};function R$1(e,u,F){return String(e).normalize().replace(/\r\n/g,`
374
+ function DD({onlyFirst:e=false}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}const uD=DD();function P$1(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(uD,"")}function L$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var W$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(F){var s=F.charCodeAt(0),i=F.length==2?F.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(F){var s=this.eastAsianWidth(F);return s=="F"||s=="W"||s=="A"?2:1};function t(F){return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(F){for(var s=t(F),i=0,D=0;D<s.length;D++)i=i+this.characterLength(s[D]);return i},u.slice=function(F,s,i){textLen=u.length(F),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var D="",C=0,n=t(F),E=0;E<n.length;E++){var a=n[E],o=u.length(a);if(C>=s-(o==2?1:0))if(C+o<=i)D+=a;else break;C+=o;}return D};})(W$1);var tD=W$1.exports;const eD=L$1(tD);var FD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const sD=L$1(FD);function p(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=P$1(e),e.length===0))return 0;e=e.replace(sD()," ");const t=u.ambiguousIsNarrow?1:2;let F=0;for(const s of e){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(eD.eastAsianWidth(s)){case "F":case "W":F+=2;break;case "A":F+=t;break;default:F+=1;}}return F}const w=10,N=(e=0)=>u=>`\x1B[${u+e}m`,I=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,R=(e=0)=>(u,t,F)=>`\x1B[${38+e};2;${u};${t};${F}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const iD=Object.keys(r.color),CD=Object.keys(r.bgColor);[...iD,...CD];function rD(){const e=new Map;for(const[u,t]of Object.entries(r)){for(const[F,s]of Object.entries(t))r[F]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[F]=r[F],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:t,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=N(),r.color.ansi256=I(),r.color.ansi16m=R(),r.bgColor.ansi=N(w),r.bgColor.ansi256=I(w),r.bgColor.ansi16m=R(w),Object.defineProperties(r,{rgbToAnsi256:{value:(u,t,F)=>u===t&&t===F?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(F/255*5),enumerable:false},hexToRgb:{value:u=>{const t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!t)return [0,0,0];let[F]=t;F.length===3&&(F=[...F].map(i=>i+i).join(""));const s=Number.parseInt(F,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,F,s;if(u>=232)t=((u-232)*10+8)/255,F=t,s=t;else {u-=16;const C=u%36;t=Math.floor(u/36)/5,F=Math.floor(C/6)/5,s=C%6/5;}const i=Math.max(t,F,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(F)<<1|Math.round(t));return i===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,t,F)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,t,F)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const ED=rD(),d$1=new Set(["\x1B","\x9B"]),oD=39,y="\x07",V$1="[",nD="]",G$1="m",_$1=`${nD}8;;`,z=e=>`${d$1.values().next().value}${V$1}${e}${G$1}`,K$1=e=>`${d$1.values().next().value}${_$1}${e}${y}`,aD=e=>e.split(" ").map(u=>p(u)),k$1=(e,u,t)=>{const F=[...u];let s=false,i=false,D=p(P$1(e[e.length-1]));for(const[C,n]of F.entries()){const E=p(n);if(D+E<=t?e[e.length-1]+=n:(e.push(n),D=0),d$1.has(n)&&(s=true,i=F.slice(C+1).join("").startsWith(_$1)),s){i?n===y&&(s=false,i=false):n===G$1&&(s=false);continue}D+=E,D===t&&C<F.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},hD=e=>{const u=e.split(" ");let t=u.length;for(;t>0&&!(p(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(" ")+u.slice(t).join("")},lD=(e,u,t={})=>{if(t.trim!==false&&e.trim()==="")return "";let F="",s,i;const D=aD(e);let C=[""];for(const[E,a]of e.split(" ").entries()){t.trim!==false&&(C[C.length-1]=C[C.length-1].trimStart());let o=p(C[C.length-1]);if(E!==0&&(o>=u&&(t.wordWrap===false||t.trim===false)&&(C.push(""),o=0),(o>0||t.trim===false)&&(C[C.length-1]+=" ",o++)),t.hard&&D[E]>u){const c=u-o,f=1+Math.floor((D[E]-c-1)/u);Math.floor((D[E]-1)/u)<f&&C.push(""),k$1(C,a,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(t.wordWrap===false&&o<u){k$1(C,a,u);continue}C.push("");}if(o+D[E]>u&&t.wordWrap===false){k$1(C,a,u);continue}C[C.length-1]+=a;}t.trim!==false&&(C=C.map(E=>hD(E)));const n=[...C.join(`
375
+ `)];for(const[E,a]of n.entries()){if(F+=a,d$1.has(a)){const{groups:c}=new RegExp(`(?:\\${V$1}(?<code>\\d+)m|\\${_$1}(?<uri>.*)${y})`).exec(n.slice(E).join(""))||{groups:{}};if(c.code!==void 0){const f=Number.parseFloat(c.code);s=f===oD?void 0:f;}else c.uri!==void 0&&(i=c.uri.length===0?void 0:c.uri);}const o=ED.codes.get(Number(s));n[E+1]===`
376
+ `?(i&&(F+=K$1("")),s&&o&&(F+=z(o))):a===`
377
+ `&&(s&&o&&(F+=z(s)),i&&(F+=K$1(i)));}return F};function Y$1(e,u,t){return String(e).normalize().replace(/\r\n/g,`
355
378
  `).split(`
356
- `).map(t=>oD(t,u,F)).join(`
357
- `)}var nD=Object.defineProperty,aD=(e,u,F)=>u in e?nD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,a$1=(e,u,F)=>(aD(e,typeof u!="symbol"?u+"":u,F),F);function hD(e,u){if(e===u)return;const F=e.split(`
358
- `),t=u.split(`
359
- `),s=[];for(let C=0;C<Math.max(F.length,t.length);C++)F[C]!==t[C]&&s.push(C);return s}const V$1=Symbol("clack:cancel");function lD(e){return e===V$1}function v$1(e,u){e.isTTY&&e.setRawMode(u);}const z=new Map([["k","up"],["j","down"],["h","left"],["l","right"]]),xD=new Set(["up","down","left","right","space","enter"]);class x{constructor({render:u,input:F=stdin,output:t=stdout,...s},C=true){a$1(this,"input"),a$1(this,"output"),a$1(this,"rl"),a$1(this,"opts"),a$1(this,"_track",false),a$1(this,"_render"),a$1(this,"_cursor",0),a$1(this,"state","initial"),a$1(this,"value"),a$1(this,"error",""),a$1(this,"subscribers",new Map),a$1(this,"_prevFrame",""),this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=u.bind(this),this._track=C,this.input=F,this.output=t;}prompt(){const u=new WriteStream(0);return u._write=(F,t,s)=>{this._track&&(this.value=this.rl.line.replace(/\t/g,""),this._cursor=this.rl.cursor,this.emit("value",this.value)),s();},this.input.pipe(u),this.rl=f__default.createInterface({input:this.input,output:u,tabSize:2,prompt:"",escapeCodeTimeout:50}),f__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v$1(this.input,true),this.output.on("resize",this.render),this.render(),new Promise((F,t)=>{this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v$1(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v$1(this.input,false),F(V$1);});})}on(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F}),this.subscribers.set(u,t);}once(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F,once:true}),this.subscribers.set(u,t);}emit(u,...F){const t=this.subscribers.get(u)??[],s=[];for(const C of t)C.cb(...F),C.once&&s.push(()=>t.splice(t.indexOf(C),1));for(const C of s)C();}unsubscribe(){this.subscribers.clear();}onKeypress(u,F){if(this.state==="error"&&(this.state="active"),F?.name&&!this._track&&z.has(F.name)&&this.emit("cursor",z.get(F.name)),F?.name&&xD.has(F.name)&&this.emit("cursor",F.name),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),F?.name==="return"){if(this.opts.validate){const t=this.opts.validate(this.value);t&&(this.error=t,this.state="error",this.rl.write(this.value));}this.state!=="error"&&(this.state="submit");}u===""&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
360
- `),v$1(this.input,false),this.rl.close(),this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=R$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
361
- `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=R$1(this._render(this)??"",process.stdout.columns,{hard:true});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(srcExports.cursor.hide);else {const F=hD(this._prevFrame,u);if(this.restoreCursor(),F&&F?.length===1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
362
- `);this.output.write(s[t]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-t-1));return}else if(F&&F?.length>1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.down());const s=u.split(`
363
- `).slice(t);this.output.write(s.join(`
364
- `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}class BD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,false),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value;}),this.on("confirm",F=>{this.output.write(srcExports.cursor.move(0,-1)),this.value=F,this.state="submit",this.close();}),this.on("cursor",()=>{this.value=!this.value;});}}var fD=Object.defineProperty,gD=(e,u,F)=>u in e?fD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,K$1=(e,u,F)=>(gD(e,typeof u!="symbol"?u+"":u,F),F);let vD=class extends x{constructor(u){super(u,false),K$1(this,"options"),K$1(this,"cursor",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll();}),this.on("cursor",F=>{switch(F){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case "space":this.toggleValue();break}});}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(F=>F.value);}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(F=>F!==this._value):[...this.value,this._value];}};var wD=Object.defineProperty,yD=(e,u,F)=>u in e?wD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,Z=(e,u,F)=>(yD(e,typeof u!="symbol"?u+"":u,F),F);let $D=class extends x{constructor(u){super(u,false),Z(this,"options"),Z(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:F})=>F===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue();});}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value;}};var TD=Object.defineProperty,jD=(e,u,F)=>u in e?TD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,MD=(e,u,F)=>(jD(e,u+"",F),F);class PD extends x{constructor(u){super(u),MD(this,"valueWithCursor",""),this.on("finalize",()=>{this.value||(this.value=u.defaultValue),this.valueWithCursor=this.value;}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.value}${color2.inverse(color2.hidden("_"))}`;else {const F=this.value.slice(0,this.cursor),t=this.value.slice(this.cursor);this.valueWithCursor=`${F}${color2.inverse(t[0])}${t.slice(1)}`;}});}get cursor(){return this._cursor}}const WD=globalThis.process.platform.startsWith("win");function OD({input:e=stdin,output:u=stdout,overwrite:F=true,hideCursor:t=true}={}){const s=f.createInterface({input:e,output:u,prompt:"",tabSize:1});f.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const C=(D,{name:i})=>{if(String(D)===""){t&&u.write(srcExports.cursor.show),process.exit(0);return}if(!F)return;let n=i==="return"?0:-1,E=i==="return"?-1:0;f.moveCursor(u,n,E,()=>{f.clearLine(u,1,()=>{e.once("keypress",C);});});};return t&&u.write(srcExports.cursor.hide),e.once("keypress",C),()=>{e.off("keypress",C),t&&u.write(srcExports.cursor.show),e.isTTY&&!WD&&e.setRawMode(false),s.terminal=false,s.close();}}
365
-
366
- function K(){return h.platform!=="win32"?h.env.TERM!=="linux":!!h.env.CI||!!h.env.WT_SESSION||!!h.env.TERMINUS_SUBLIME||h.env.ConEmuTask==="{cmd::Cmder}"||h.env.TERM_PROGRAM==="Terminus-Sublime"||h.env.TERM_PROGRAM==="vscode"||h.env.TERM==="xterm-256color"||h.env.TERM==="alacritty"||h.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const C=K(),u=(s,n)=>C?s:n,Y=u("\u25C6","*"),P=u("\u25A0","x"),V=u("\u25B2","x"),M=u("\u25C7","o"),Q=u("\u250C","T"),a=u("\u2502","|"),$=u("\u2514","\u2014"),I=u("\u25CF",">"),T=u("\u25CB"," "),j=u("\u25FB","[\u2022]"),b=u("\u25FC","[+]"),B=u("\u25FB","[ ]"),G=u("\u2500","-"),H=u("\u256E","+"),ee=u("\u251C","+"),te=u("\u256F","+"),se=u("\u25CF","\u2022"),re=u("\u25C6","*"),ie=u("\u25B2","!"),ne=u("\u25A0","x"),y=s=>{switch(s){case "initial":case "active":return color2.cyan(Y);case "cancel":return color2.red(P);case "error":return color2.yellow(V);case "submit":return color2.green(M)}},E=s=>{const{cursor:n,options:t,style:i}=s,r=s.maxItems??1/0,o=Math.max(process.stdout.rows-4,0),c=Math.min(o,Math.max(r,5));let l=0;n>=l+c-3?l=Math.max(Math.min(n-c+3,t.length-c),0):n<l+2&&(l=Math.max(n-2,0));const d=c<t.length&&l>0,p=c<t.length&&l+c<t.length;return t.slice(l,l+c).map((S,f,x)=>{const g=f===0&&d,m=f===x.length-1&&p;return g||m?color2.dim("..."):i(S,f+l===n)})},ae=s=>new PD({validate:s.validate,placeholder:s.placeholder,defaultValue:s.defaultValue,initialValue:s.initialValue,render(){const n=`${color2.gray(a)}
367
- ${y(this.state)} ${s.message}
368
- `,t=s.placeholder?color2.inverse(s.placeholder[0])+color2.dim(s.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:t;switch(this.state){case "error":return `${n.trim()}
369
- ${color2.yellow(a)} ${i}
370
- ${color2.yellow($)} ${color2.yellow(this.error)}
371
- `;case "submit":return `${n}${color2.gray(a)} ${color2.dim(this.value||s.placeholder)}`;case "cancel":return `${n}${color2.gray(a)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
372
- `+color2.gray(a):""}`;default:return `${n}${color2.cyan(a)} ${i}
373
- ${color2.cyan($)}
374
- `}}}).prompt(),ce=s=>{const n=s.active??"Yes",t=s.inactive??"No";return new BD({active:n,inactive:t,initialValue:s.initialValue??true,render(){const i=`${color2.gray(a)}
375
- ${y(this.state)} ${s.message}
376
- `,r=this.value?n:t;switch(this.state){case "submit":return `${i}${color2.gray(a)} ${color2.dim(r)}`;case "cancel":return `${i}${color2.gray(a)} ${color2.strikethrough(color2.dim(r))}
377
- ${color2.gray(a)}`;default:return `${i}${color2.cyan(a)} ${this.value?`${color2.green(I)} ${n}`:`${color2.dim(T)} ${color2.dim(n)}`} ${color2.dim("/")} ${this.value?`${color2.dim(T)} ${color2.dim(t)}`:`${color2.green(I)} ${t}`}
378
- ${color2.cyan($)}
379
- `}}}).prompt()},le=s=>{const n=(t,i)=>{const r=t.label??String(t.value);switch(i){case "selected":return `${color2.dim(r)}`;case "active":return `${color2.green(I)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(r))}`;default:return `${color2.dim(T)} ${color2.dim(r)}`}};return new $D({options:s.options,initialValue:s.initialValue,render(){const t=`${color2.gray(a)}
380
- ${y(this.state)} ${s.message}
381
- `;switch(this.state){case "submit":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"cancelled")}
382
- ${color2.gray(a)}`;default:return `${t}${color2.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:s.maxItems,style:(i,r)=>n(i,r?"active":"inactive")}).join(`
383
- ${color2.cyan(a)} `)}
384
- ${color2.cyan($)}
385
- `}}}).prompt()},$e=s=>{const n=(t,i)=>{const r=t.label??String(t.value);return i==="active"?`${color2.cyan(j)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="selected"?`${color2.green(b)} ${color2.dim(r)}`:i==="cancelled"?`${color2.strikethrough(color2.dim(r))}`:i==="active-selected"?`${color2.green(b)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="submitted"?`${color2.dim(r)}`:`${color2.dim(B)} ${color2.dim(r)}`};return new vD({options:s.options,initialValues:s.initialValues,required:s.required??true,cursorAt:s.cursorAt,validate(t){if(this.required&&t.length===0)return `Please select at least one option.
386
- ${color2.reset(color2.dim(`Press ${color2.gray(color2.bgWhite(color2.inverse(" space ")))} to select, ${color2.gray(color2.bgWhite(color2.inverse(" enter ")))} to submit`))}`},render(){let t=`${color2.gray(a)}
387
- ${y(this.state)} ${s.message}
388
- `;const i=(r,o)=>{const c=this.value.includes(r.value);return o&&c?n(r,"active-selected"):c?n(r,"selected"):n(r,o?"active":"inactive")};switch(this.state){case "submit":return `${t}${color2.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>n(r,"submitted")).join(color2.dim(", "))||color2.dim("none")}`;case "cancel":{const r=this.options.filter(({value:o})=>this.value.includes(o)).map(o=>n(o,"cancelled")).join(color2.dim(", "));return `${t}${color2.gray(a)} ${r.trim()?`${r}
389
- ${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
390
- `).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
391
- `);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
392
- ${color2.yellow(a)} `)+`
393
- `+r+`
394
- `}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
395
- ${color2.cyan(a)} `)}
396
- ${color2.cyan($)}
397
- `}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
398
- ${s}
379
+ `).map(F=>lD(F,u,t)).join(`
380
+ `)}const xD=["up","down","left","right","space","enter","cancel"],B={actions:new Set(xD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function $(e,u){if(typeof e=="string")return B.aliases.get(e)===u;for(const t of e)if(t!==void 0&&$(t,u))return true;return false}function BD(e,u){if(e===u)return;const t=e.split(`
381
+ `),F=u.split(`
382
+ `),s=[];for(let i=0;i<Math.max(t.length,F.length);i++)t[i]!==F[i]&&s.push(i);return s}const AD=globalThis.process.platform.startsWith("win"),S=Symbol("clack:cancel");function pD(e){return e===S}function m(e,u){const t=e;t.isTTY&&t.setRawMode(u);}function fD({input:e=stdin,output:u=stdout,overwrite:t=true,hideCursor:F=true}={}){const s=g.createInterface({input:e,output:u,prompt:"",tabSize:1});g.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const i=(D,{name:C,sequence:n})=>{const E=String(D);if($([E,C,n],"cancel")){F&&u.write(srcExports.cursor.show),process.exit(0);return}if(!t)return;const a=C==="return"?0:-1,o=C==="return"?-1:0;g.moveCursor(u,a,o,()=>{g.clearLine(u,1,()=>{e.once("keypress",i);});});};return F&&u.write(srcExports.cursor.hide),e.once("keypress",i),()=>{e.off("keypress",i),F&&u.write(srcExports.cursor.show),e.isTTY&&!AD&&e.setRawMode(false),s.terminal=false,s.close();}}var gD=Object.defineProperty,vD=(e,u,t)=>u in e?gD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,h=(e,u,t)=>(vD(e,typeof u!="symbol"?u+"":u,t),t);class x{constructor(u,t=true){h(this,"input"),h(this,"output"),h(this,"_abortSignal"),h(this,"rl"),h(this,"opts"),h(this,"_render"),h(this,"_track",false),h(this,"_prevFrame",""),h(this,"_subscribers",new Map),h(this,"_cursor",0),h(this,"state","initial"),h(this,"error",""),h(this,"value");const{input:F=stdin,output:s=stdout,render:i,signal:D,...C}=u;this.opts=C,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=D,this.input=F,this.output=s;}unsubscribe(){this._subscribers.clear();}setSubscriber(u,t){const F=this._subscribers.get(u)??[];F.push(t),this._subscribers.set(u,F);}on(u,t){this.setSubscriber(u,{cb:t});}once(u,t){this.setSubscriber(u,{cb:t,once:true});}emit(u,...t){const F=this._subscribers.get(u)??[],s=[];for(const i of F)i.cb(...t),i.once&&s.push(()=>F.splice(F.indexOf(i),1));for(const i of s)i();}prompt(){return new Promise((u,t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),u(S);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close();},{once:true});}const F=new Writable;F._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D();},this.input.pipe(F),this.rl=g__default.createInterface({input:this.input,output:F,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:true}),g__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),m(this.input,true),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(S);});})}onKeypress(u,t){if(this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&B.aliases.has(t.name)&&this.emit("cursor",B.aliases.get(t.name)),B.actions.has(t.name)&&this.emit("cursor",t.name)),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),t?.name==="return"){if(this.opts.validate){const F=this.opts.validate(this.value);F&&(this.error=F instanceof Error?F.message:F,this.state="error",this.rl?.write(this.value));}this.state!=="error"&&(this.state="submit");}$([u,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
383
+ `),m(this.input,false),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=Y$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
384
+ `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=Y$1(this._render(this)??"",process.stdout.columns,{hard:true});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(srcExports.cursor.hide);else {const t=BD(this._prevFrame,u);if(this.restoreCursor(),t&&t?.length===1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
385
+ `);this.output.write(s[F]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-F-1));return}if(t&&t?.length>1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.down());const s=u.split(`
386
+ `).slice(F);this.output.write(s.join(`
387
+ `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}class dD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,false),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value;}),this.on("confirm",t=>{this.output.write(srcExports.cursor.move(0,-1)),this.value=t,this.state="submit",this.close();}),this.on("cursor",()=>{this.value=!this.value;});}}var OD=Object.defineProperty,PD=(e,u,t)=>u in e?OD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,J=(e,u,t)=>(PD(e,typeof u!="symbol"?u+"":u,t),t);class LD extends x{constructor(u){super(u,false),J(this,"options"),J(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:t})=>t===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",t=>{switch(t){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue();});}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value;}}class RD extends x{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return `${this.value}\u2588`;const u=this.value.slice(0,this.cursor),[t,...F]=this.value.slice(this.cursor);return `${u}${color2.inverse(t)}${F.join("")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on("finalize",()=>{this.value||(this.value=u.defaultValue);});}}
388
+
389
+ function ce(){return y$1.platform!=="win32"?y$1.env.TERM!=="linux":!!y$1.env.CI||!!y$1.env.WT_SESSION||!!y$1.env.TERMINUS_SUBLIME||y$1.env.ConEmuTask==="{cmd::Cmder}"||y$1.env.TERM_PROGRAM==="Terminus-Sublime"||y$1.env.TERM_PROGRAM==="vscode"||y$1.env.TERM==="xterm-256color"||y$1.env.TERM==="alacritty"||y$1.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const V=ce(),u=(t,n)=>V?t:n,le=u("\u25C6","*"),L=u("\u25A0","x"),W=u("\u25B2","x"),C=u("\u25C7","o"),ue=u("\u250C","T"),o=u("\u2502","|"),d=u("\u2514","\u2014"),k=u("\u25CF",">"),P=u("\u25CB"," "),_=u("\u2500","-"),me=u("\u256E","+"),de=u("\u251C","+"),pe=u("\u256F","+"),q=u("\u25CF","\u2022"),D=u("\u25C6","*"),U=u("\u25B2","!"),K=u("\u25A0","x"),b=t=>{switch(t){case "initial":case "active":return color2.cyan(le);case "cancel":return color2.red(L);case "error":return color2.yellow(W);case "submit":return color2.green(C)}},G=t=>{const{cursor:n,options:r,style:i}=t,s=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),a=Math.min(c,Math.max(s,5));let l=0;n>=l+a-3?l=Math.max(Math.min(n-a+3,r.length-a),0):n<l+2&&(l=Math.max(n-2,0));const $=a<r.length&&l>0,g=a<r.length&&l+a<r.length;return r.slice(l,l+a).map((p,v,f)=>{const j=v===0&&$,E=v===f.length-1&&g;return j||E?color2.dim("..."):i(p,v+l===n)})},he=t=>new RD({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${color2.gray(o)}
390
+ ${b(this.state)} ${t.message}
391
+ `,r=t.placeholder?color2.inverse(t.placeholder[0])+color2.dim(t.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:r;switch(this.state){case "error":return `${n.trim()}
392
+ ${color2.yellow(o)} ${i}
393
+ ${color2.yellow(d)} ${color2.yellow(this.error)}
394
+ `;case "submit":return `${n}${color2.gray(o)} ${color2.dim(this.value||t.placeholder)}`;case "cancel":return `${n}${color2.gray(o)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
395
+ ${color2.gray(o)}`:""}`;default:return `${n}${color2.cyan(o)} ${i}
396
+ ${color2.cyan(d)}
397
+ `}}}).prompt(),ye=t=>{const n=t.active??"Yes",r=t.inactive??"No";return new dD({active:n,inactive:r,initialValue:t.initialValue??true,render(){const i=`${color2.gray(o)}
398
+ ${b(this.state)} ${t.message}
399
+ `,s=this.value?n:r;switch(this.state){case "submit":return `${i}${color2.gray(o)} ${color2.dim(s)}`;case "cancel":return `${i}${color2.gray(o)} ${color2.strikethrough(color2.dim(s))}
400
+ ${color2.gray(o)}`;default:return `${i}${color2.cyan(o)} ${this.value?`${color2.green(k)} ${n}`:`${color2.dim(P)} ${color2.dim(n)}`} ${color2.dim("/")} ${this.value?`${color2.dim(P)} ${color2.dim(r)}`:`${color2.green(k)} ${r}`}
401
+ ${color2.cyan(d)}
402
+ `}}}).prompt()},ve=t=>{const n=(r,i)=>{const s=r.label??String(r.value);switch(i){case "selected":return `${color2.dim(s)}`;case "active":return `${color2.green(k)} ${s} ${r.hint?color2.dim(`(${r.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(s))}`;default:return `${color2.dim(P)} ${color2.dim(s)}`}};return new LD({options:t.options,initialValue:t.initialValue,render(){const r=`${color2.gray(o)}
403
+ ${b(this.state)} ${t.message}
404
+ `;switch(this.state){case "submit":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"cancelled")}
405
+ ${color2.gray(o)}`;default:return `${r}${color2.cyan(o)} ${G({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,s)=>n(i,s?"active":"inactive")}).join(`
406
+ ${color2.cyan(o)} `)}
407
+ ${color2.cyan(d)}
408
+ `}}}).prompt()},Me=(t="",n="")=>{const r=`
409
+ ${t}
399
410
  `.split(`
400
- `),i=R(n).length,r=Math.max(t.reduce((c,l)=>(l=R(l),l.length>c?l.length:c),0),i)+2,o=t.map(c=>`${color2.gray(a)} ${color2.dim(c)}${" ".repeat(r-R(c).length)}${color2.gray(a)}`).join(`
401
- `);process.stdout.write(`${color2.gray(a)}
402
- ${color2.green(M)} ${color2.reset(n)} ${color2.gray(G.repeat(Math.max(r-i-1,1))+H)}
403
- ${o}
404
- ${color2.gray(ee+G.repeat(r+2)+te)}
405
- `);},he=(s="")=>{process.stdout.write(`${color2.gray($)} ${color2.red(s)}
406
-
407
- `);},pe=(s="")=>{process.stdout.write(`${color2.gray(Q)} ${s}
408
- `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
409
- ${color2.gray($)} ${s}
410
-
411
- `);},v={message:(s="",{symbol:n=color2.gray(a)}={})=>{const t=[`${color2.gray(a)}`];if(s){const[i,...r]=s.split(`
412
- `);t.push(`${n} ${i}`,...r.map(o=>`${color2.gray(a)} ${o}`));}process.stdout.write(`${t.join(`
411
+ `),i=stripVTControlCharacters(n).length,s=Math.max(r.reduce((a,l)=>{const $=stripVTControlCharacters(l);return $.length>a?$.length:a},0),i)+2,c=r.map(a=>`${color2.gray(o)} ${color2.dim(a)}${" ".repeat(s-stripVTControlCharacters(a).length)}${color2.gray(o)}`).join(`
412
+ `);process.stdout.write(`${color2.gray(o)}
413
+ ${color2.green(C)} ${color2.reset(n)} ${color2.gray(_.repeat(Math.max(s-i-1,1))+me)}
414
+ ${c}
415
+ ${color2.gray(de+_.repeat(s+2)+pe)}
416
+ `);},xe=(t="")=>{process.stdout.write(`${color2.gray(d)} ${color2.red(t)}
417
+
418
+ `);},Ie=(t="")=>{process.stdout.write(`${color2.gray(ue)} ${t}
419
+ `);},Se=(t="")=>{process.stdout.write(`${color2.gray(o)}
420
+ ${color2.gray(d)} ${t}
421
+
422
+ `);},M={message:(t="",{symbol:n=color2.gray(o)}={})=>{const r=[`${color2.gray(o)}`];if(t){const[i,...s]=t.split(`
423
+ `);r.push(`${n} ${i}`,...s.map(c=>`${color2.gray(o)} ${c}`));}process.stdout.write(`${r.join(`
413
424
  `)}
414
- `);},info:s=>{v.message(s,{symbol:color2.blue(se)});},success:s=>{v.message(s,{symbol:color2.green(re)});},step:s=>{v.message(s,{symbol:color2.green(M)});},warn:s=>{v.message(s,{symbol:color2.yellow(ie)});},warning:s=>{v.warn(s);},error:s=>{v.message(s,{symbol:color2.red(ne)});}},_=()=>{const s=C?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],n=C?80:120;let t,i,r=false,o="";const c=g=>{const m=g>1?"Something went wrong":"Canceled";r&&x(m,g);},l=()=>c(2),d=()=>c(1),p=()=>{process.on("uncaughtExceptionMonitor",l),process.on("unhandledRejection",l),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",c);},S=()=>{process.removeListener("uncaughtExceptionMonitor",l),process.removeListener("unhandledRejection",l),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",c);},f=(g="")=>{r=true,t=OD(),o=g.replace(/\.+$/,""),process.stdout.write(`${color2.gray(a)}
415
- `);let m=0,w=0;p(),i=setInterval(()=>{const L=color2.magenta(s[m]),O=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${L} ${o}${O}`),m=m+1<s.length?m+1:0,w=w<s.length?w+.125:0;},n);},x=(g="",m=0)=>{o=g??o,r=false,clearInterval(i);const w=m===0?color2.green(M):m===1?color2.red(P):color2.red(V);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${w} ${o}
416
- `),S(),t();};return {start:f,stop:x,message:(g="")=>{o=g??o;}}};function ye(){const s=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(s,"g")}const ve=async(s,n)=>{const t={},i=Object.keys(s);for(const r of i){const o=s[r],c=await o({results:t})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&lD(c)){t[r]="canceled",n.onCancel({results:t});continue}t[r]=c;}return t};
425
+ `);},info:t=>{M.message(t,{symbol:color2.blue(q)});},success:t=>{M.message(t,{symbol:color2.green(D)});},step:t=>{M.message(t,{symbol:color2.green(C)});},warn:t=>{M.message(t,{symbol:color2.yellow(U)});},warning:t=>{M.warn(t);},error:t=>{M.message(t,{symbol:color2.red(K)});}};`${color2.gray(o)} `;const Y=({indicator:t="dots"}={})=>{const n=V?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],r=V?80:120,i=process.env.CI==="true";let s,c,a=false,l="",$,g=performance.now();const p=m=>{const h=m>1?"Something went wrong":"Canceled";a&&N(h,m);},v=()=>p(2),f=()=>p(1),j=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",f),process.on("SIGTERM",f),process.on("exit",p);},E=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",f),process.removeListener("SIGTERM",f),process.removeListener("exit",p);},B=()=>{if($===void 0)return;i&&process.stdout.write(`
426
+ `);const m=$.split(`
427
+ `);process.stdout.write(srcExports.cursor.move(-999,m.length-1)),process.stdout.write(srcExports.erase.down(m.length));},R=m=>m.replace(/\.+$/,""),O=m=>{const h=(performance.now()-m)/1e3,w=Math.floor(h/60),I=Math.floor(h%60);return w>0?`[${w}m ${I}s]`:`[${I}s]`},H=(m="")=>{a=true,s=fD(),l=R(m),g=performance.now(),process.stdout.write(`${color2.gray(o)}
428
+ `);let h=0,w=0;j(),c=setInterval(()=>{if(i&&l===$)return;B(),$=l;const I=color2.magenta(n[h]);if(i)process.stdout.write(`${I} ${l}...`);else if(t==="timer")process.stdout.write(`${I} ${l} ${O(g)}`);else {const z=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(`${I} ${l}${z}`);}h=h+1<n.length?h+1:0,w=w<n.length?w+.125:0;},r);},N=(m="",h=0)=>{a=false,clearInterval(c),B();const w=h===0?color2.green(C):h===1?color2.red(L):color2.red(W);l=R(m??l),t==="timer"?process.stdout.write(`${w} ${l} ${O(g)}
429
+ `):process.stdout.write(`${w} ${l}
430
+ `),E(),s();};return {start:H,stop:N,message:(m="")=>{l=R(m??l);}}},Ce=async(t,n)=>{const r={},i=Object.keys(t);for(const s of i){const c=t[s],a=await c({results:r})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&pD(a)){r[s]="canceled",n.onCancel({results:r});continue}r[s]=a;}return r};
417
431
 
418
- var shellQuote$1 = {};
432
+ var shellQuote = {};
419
433
 
420
434
  var quote;
421
435
  var hasRequiredQuote;
@@ -432,8 +446,8 @@ function requireQuote () {
432
446
  if (s && typeof s === 'object') {
433
447
  return s.op.replace(/(.)/g, '\\$1');
434
448
  }
435
- if ((/["\s]/).test(s) && !(/'/).test(s)) {
436
- return "'" + s.replace(/(['\\])/g, '\\$1') + "'";
449
+ if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
450
+ return "'" + s.replace(/(['])/g, '\\$1') + "'";
437
451
  }
438
452
  if ((/["'\s]/).test(s)) {
439
453
  return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
@@ -540,7 +554,7 @@ function requireParse () {
540
554
  return matches.map(function (match) {
541
555
  var s = match[0];
542
556
  if (!s || commented) {
543
- return void 0;
557
+ return void undefined;
544
558
  }
545
559
  if (controlRE.test(s)) {
546
560
  return { op: s };
@@ -681,16 +695,16 @@ function requireParse () {
681
695
  var hasRequiredShellQuote;
682
696
 
683
697
  function requireShellQuote () {
684
- if (hasRequiredShellQuote) return shellQuote$1;
698
+ if (hasRequiredShellQuote) return shellQuote;
685
699
  hasRequiredShellQuote = 1;
686
700
 
687
- shellQuote$1.quote = requireQuote();
688
- shellQuote$1.parse = requireParse();
689
- return shellQuote$1;
701
+ shellQuote.quote = requireQuote();
702
+ shellQuote.parse = requireParse();
703
+ return shellQuote;
690
704
  }
691
705
 
692
706
  var shellQuoteExports = requireShellQuote();
693
- var shellQuote = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
707
+ var shellQuote2 = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
694
708
 
695
709
  // eslint-disable-next-line no-warning-comments
696
710
  // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
@@ -717,13 +731,18 @@ const format = (open, close) => {
717
731
  // Handle nested colors.
718
732
 
719
733
  // We could have done this, but it's too slow (as of Node.js 22).
720
- // return openCode + string.replaceAll(closeCode, openCode) + closeCode;
734
+ // return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;
721
735
 
722
736
  let result = openCode;
723
737
  let lastIndex = 0;
724
738
 
739
+ // SGR 22 resets both bold (1) and dim (2). When we encounter a nested
740
+ // close for styles that use 22, we need to re-open the outer style.
741
+ const reopenOnNestedClose = close === 22;
742
+ const replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;
743
+
725
744
  while (index !== -1) {
726
- result += string.slice(lastIndex, index) + openCode;
745
+ result += string.slice(lastIndex, index) + replaceCode;
727
746
  lastIndex = index + closeCode.length;
728
747
  index = string.indexOf(closeCode, lastIndex);
729
748
  }
@@ -825,18 +844,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
825
844
  yellowBright: yellowBright
826
845
  });
827
846
 
828
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
847
+ const isUnicodeSupported = y$1.platform !== 'win32'
848
+ || Boolean(y$1.env.WT_SESSION) // Windows Terminal
849
+ || y$1.env.TERM_PROGRAM === 'vscode';
829
850
 
830
851
  const isInteractive = stream => Boolean(
831
852
  stream.isTTY
832
- && h.env.TERM !== 'dumb'
833
- && !('CI' in h.env),
853
+ && y$1.env.TERM !== 'dumb'
854
+ && !('CI' in y$1.env),
834
855
  );
835
856
 
836
857
  const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
837
858
  const successSymbol = green(isUnicodeSupported ? '✔' : '√');
838
859
  const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
839
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
860
+ const errorSymbol = red(isUnicodeSupported ? '' : '×');
840
861
 
841
862
  const defaultSpinner = {
842
863
  frames: isUnicodeSupported
@@ -873,13 +894,14 @@ class YoctoSpinner {
873
894
  #exitHandlerBound;
874
895
  #isInteractive;
875
896
  #lastSpinnerFrameTime = 0;
897
+ #isSpinning = false;
876
898
 
877
899
  constructor(options = {}) {
878
900
  const spinner = options.spinner ?? defaultSpinner;
879
901
  this.#frames = spinner.frames;
880
902
  this.#interval = spinner.interval;
881
903
  this.#text = options.text ?? '';
882
- this.#stream = options.stream ?? h.stderr;
904
+ this.#stream = options.stream ?? y$1.stderr;
883
905
  this.#color = options.color ?? 'cyan';
884
906
  this.#isInteractive = isInteractive(this.#stream);
885
907
  this.#exitHandlerBound = this.#exitHandler.bind(this);
@@ -894,13 +916,17 @@ class YoctoSpinner {
894
916
  return this;
895
917
  }
896
918
 
919
+ this.#isSpinning = true;
897
920
  this.#hideCursor();
898
921
  this.#render();
899
922
  this.#subscribeToProcessEvents();
900
923
 
901
- this.#timer = setInterval(() => {
902
- this.#render();
903
- }, this.#interval);
924
+ // Only start the timer in interactive mode
925
+ if (this.#isInteractive) {
926
+ this.#timer = setInterval(() => {
927
+ this.#render();
928
+ }, this.#interval);
929
+ }
904
930
 
905
931
  return this;
906
932
  }
@@ -910,8 +936,12 @@ class YoctoSpinner {
910
936
  return this;
911
937
  }
912
938
 
913
- clearInterval(this.#timer);
914
- this.#timer = undefined;
939
+ this.#isSpinning = false;
940
+ if (this.#timer) {
941
+ clearInterval(this.#timer);
942
+ this.#timer = undefined;
943
+ }
944
+
915
945
  this.#showCursor();
916
946
  this.clear();
917
947
  this.#unsubscribeFromProcessEvents();
@@ -944,15 +974,15 @@ class YoctoSpinner {
944
974
  }
945
975
 
946
976
  get isSpinning() {
947
- return this.#timer !== undefined;
977
+ return this.#isSpinning;
948
978
  }
949
979
 
950
980
  get text() {
951
981
  return this.#text;
952
982
  }
953
983
 
954
- set text(value = '') {
955
- this.#text = value;
984
+ set text(value) {
985
+ this.#text = value ?? '';
956
986
  this.#render();
957
987
  }
958
988
 
@@ -1016,7 +1046,7 @@ class YoctoSpinner {
1016
1046
 
1017
1047
  #lineCount(text) {
1018
1048
  const width = this.#stream.columns ?? 80;
1019
- const lines = text.split('\n');
1049
+ const lines = stripVTControlCharacters(text).split('\n');
1020
1050
 
1021
1051
  let lineCount = 0;
1022
1052
  for (const line of lines) {
@@ -1039,13 +1069,13 @@ class YoctoSpinner {
1039
1069
  }
1040
1070
 
1041
1071
  #subscribeToProcessEvents() {
1042
- h.once('SIGINT', this.#exitHandlerBound);
1043
- h.once('SIGTERM', this.#exitHandlerBound);
1072
+ y$1.once('SIGINT', this.#exitHandlerBound);
1073
+ y$1.once('SIGTERM', this.#exitHandlerBound);
1044
1074
  }
1045
1075
 
1046
1076
  #unsubscribeFromProcessEvents() {
1047
- h.off('SIGINT', this.#exitHandlerBound);
1048
- h.off('SIGTERM', this.#exitHandlerBound);
1077
+ y$1.off('SIGINT', this.#exitHandlerBound);
1078
+ y$1.off('SIGTERM', this.#exitHandlerBound);
1049
1079
  }
1050
1080
 
1051
1081
  #exitHandler(signal) {
@@ -1056,7 +1086,7 @@ class YoctoSpinner {
1056
1086
  // SIGINT: 128 + 2
1057
1087
  // SIGTERM: 128 + 15
1058
1088
  const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
1059
- h.exit(exitCode);
1089
+ y$1.exit(exitCode);
1060
1090
  }
1061
1091
  }
1062
1092
 
@@ -1079,24 +1109,52 @@ var MastraLogger = class {
1079
1109
  getTransports() {
1080
1110
  return this.transports;
1081
1111
  }
1082
- async getLogs(transportId) {
1112
+ trackException(_error) {
1113
+ }
1114
+ async listLogs(transportId, params) {
1083
1115
  if (!transportId || !this.transports.has(transportId)) {
1084
- return [];
1116
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
1085
1117
  }
1086
- return this.transports.get(transportId).getLogs() ?? [];
1118
+ return this.transports.get(transportId).listLogs(params) ?? {
1119
+ logs: [],
1120
+ total: 0,
1121
+ page: params?.page ?? 1,
1122
+ perPage: params?.perPage ?? 100,
1123
+ hasMore: false
1124
+ };
1087
1125
  }
1088
- async getLogsByRunId({ transportId, runId }) {
1126
+ async listLogsByRunId({
1127
+ transportId,
1128
+ runId,
1129
+ fromDate,
1130
+ toDate,
1131
+ logLevel,
1132
+ filters,
1133
+ page,
1134
+ perPage
1135
+ }) {
1089
1136
  if (!transportId || !this.transports.has(transportId) || !runId) {
1090
- return [];
1137
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
1091
1138
  }
1092
- return this.transports.get(transportId).getLogsByRunId({ runId }) ?? [];
1139
+ return this.transports.get(transportId).listLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
1140
+ logs: [],
1141
+ total: 0,
1142
+ page: page ?? 1,
1143
+ perPage: perPage ?? 100,
1144
+ hasMore: false
1145
+ };
1093
1146
  }
1094
1147
  };
1095
1148
 
1096
- var PinoLogger = class extends MastraLogger {
1149
+ var PinoLogger = class _PinoLogger extends MastraLogger {
1097
1150
  logger;
1098
1151
  constructor(options = {}) {
1099
1152
  super(options);
1153
+ const internalOptions = options;
1154
+ if (internalOptions._logger) {
1155
+ this.logger = internalOptions._logger;
1156
+ return;
1157
+ }
1100
1158
  let prettyStream = void 0;
1101
1159
  if (!options.overrideDefaultTransports) {
1102
1160
  prettyStream = pretty({
@@ -1113,9 +1171,8 @@ var PinoLogger = class extends MastraLogger {
1113
1171
  {
1114
1172
  name: options.name || "app",
1115
1173
  level: options.level || LogLevel.INFO,
1116
- formatters: {
1117
- level: (label) => ({ level: label })
1118
- }
1174
+ formatters: options.formatters,
1175
+ redact: options.redact
1119
1176
  },
1120
1177
  options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
1121
1178
  ...transportsAry.map(([, transport]) => ({
@@ -1129,6 +1186,38 @@ var PinoLogger = class extends MastraLogger {
1129
1186
  ])
1130
1187
  );
1131
1188
  }
1189
+ /**
1190
+ * Creates a child logger with additional bound context.
1191
+ * All logs from the child logger will include the bound context.
1192
+ *
1193
+ * @param bindings - Key-value pairs to include in all logs from this child logger
1194
+ * @returns A new PinoLogger instance with the bound context
1195
+ *
1196
+ * @example
1197
+ * ```typescript
1198
+ * const baseLogger = new PinoLogger({ name: 'MyApp' });
1199
+ *
1200
+ * // Create module-scoped logger
1201
+ * const serviceLogger = baseLogger.child({ module: 'UserService' });
1202
+ * serviceLogger.info('User created', { userId: '123' });
1203
+ * // Output includes: { module: 'UserService', userId: '123', msg: 'User created' }
1204
+ *
1205
+ * // Create request-scoped logger
1206
+ * const requestLogger = baseLogger.child({ requestId: req.id });
1207
+ * requestLogger.error('Request failed', { err: error });
1208
+ * // Output includes: { requestId: 'abc', msg: 'Request failed', err: {...} }
1209
+ * ```
1210
+ */
1211
+ child(bindings) {
1212
+ const childPino = this.logger.child(bindings);
1213
+ const childOptions = {
1214
+ name: this.name,
1215
+ level: this.level,
1216
+ transports: Object.fromEntries(this.transports),
1217
+ _logger: childPino
1218
+ };
1219
+ return new _PinoLogger(childOptions);
1220
+ }
1132
1221
  debug(message, args = {}) {
1133
1222
  this.logger.debug(args, message);
1134
1223
  }
@@ -1143,6 +1232,22 @@ var PinoLogger = class extends MastraLogger {
1143
1232
  }
1144
1233
  };
1145
1234
 
1235
+ var package_default = {
1236
+ version: "1.0.0-beta.13"};
1237
+ function getPackageManagerAddCommand(pm) {
1238
+ switch (pm) {
1239
+ case "npm":
1240
+ return "install --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false";
1241
+ case "yarn":
1242
+ return "add";
1243
+ case "pnpm":
1244
+ return "add --loglevel=error";
1245
+ case "bun":
1246
+ return "add";
1247
+ default:
1248
+ return "add";
1249
+ }
1250
+ }
1146
1251
  var DepsService = class {
1147
1252
  packageManager;
1148
1253
  constructor() {
@@ -1151,11 +1256,11 @@ var DepsService = class {
1151
1256
  findLockFile(dir) {
1152
1257
  const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
1153
1258
  for (const file of lockFiles) {
1154
- if (fs3__default__default.existsSync(path2.join(dir, file))) {
1259
+ if (fs3__default__default.existsSync(path3.join(dir, file))) {
1155
1260
  return file;
1156
1261
  }
1157
1262
  }
1158
- const parentDir = path2.resolve(dir, "..");
1263
+ const parentDir = path3.resolve(dir, "..");
1159
1264
  if (parentDir !== dir) {
1160
1265
  return this.findLockFile(parentDir);
1161
1266
  }
@@ -1177,14 +1282,10 @@ var DepsService = class {
1177
1282
  }
1178
1283
  }
1179
1284
  async installPackages(packages) {
1180
- let runCommand = this.packageManager;
1181
- if (this.packageManager === "npm") {
1182
- runCommand = `${this.packageManager} i`;
1183
- } else {
1184
- runCommand = `${this.packageManager} add`;
1185
- }
1285
+ const pm = this.packageManager;
1286
+ const installCommand = getPackageManagerAddCommand(pm);
1186
1287
  const packageList = packages.join(" ");
1187
- return execa(`${runCommand} ${packageList}`, {
1288
+ return execa(`${pm} ${installCommand} ${packageList}`, {
1188
1289
  all: true,
1189
1290
  shell: true,
1190
1291
  stdio: "inherit"
@@ -1192,7 +1293,7 @@ var DepsService = class {
1192
1293
  }
1193
1294
  async checkDependencies(dependencies) {
1194
1295
  try {
1195
- const packageJsonPath = path2.join(process.cwd(), "package.json");
1296
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1196
1297
  try {
1197
1298
  await fs4.access(packageJsonPath);
1198
1299
  } catch {
@@ -1212,7 +1313,7 @@ var DepsService = class {
1212
1313
  }
1213
1314
  async getProjectName() {
1214
1315
  try {
1215
- const packageJsonPath = path2.join(process.cwd(), "package.json");
1316
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1216
1317
  const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1217
1318
  const pkg = JSON.parse(packageJson);
1218
1319
  return pkg.name;
@@ -1220,13 +1321,6 @@ var DepsService = class {
1220
1321
  throw err;
1221
1322
  }
1222
1323
  }
1223
- async getPackageVersion() {
1224
- const __filename = fileURLToPath(import.meta.url);
1225
- const __dirname = dirname(__filename);
1226
- const pkgJsonPath = path2.join(__dirname, "..", "package.json");
1227
- const content = await fsExtra3.readJSON(pkgJsonPath);
1228
- return content.version;
1229
- }
1230
1324
  async addScriptsToPackageJson(scripts) {
1231
1325
  const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1232
1326
  packageJson.scripts = {
@@ -1236,156 +1330,6 @@ var DepsService = class {
1236
1330
  await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1237
1331
  }
1238
1332
  };
1239
- function getPackageManager() {
1240
- const userAgent = process.env.npm_config_user_agent || "";
1241
- const execPath = process.env.npm_execpath || "";
1242
- if (userAgent.includes("yarn")) {
1243
- return "yarn";
1244
- }
1245
- if (userAgent.includes("pnpm")) {
1246
- return "pnpm";
1247
- }
1248
- if (userAgent.includes("npm")) {
1249
- return "npm";
1250
- }
1251
- if (execPath.includes("yarn")) {
1252
- return "yarn";
1253
- }
1254
- if (execPath.includes("pnpm")) {
1255
- return "pnpm";
1256
- }
1257
- if (execPath.includes("npm")) {
1258
- return "npm";
1259
- }
1260
- return "npm";
1261
- }
1262
- function getPackageManagerInstallCommand(pm) {
1263
- switch (pm) {
1264
- case "npm":
1265
- return "install";
1266
- case "yarn":
1267
- return "add";
1268
- case "pnpm":
1269
- return "add";
1270
- default:
1271
- return "install";
1272
- }
1273
- }
1274
- var args = ["-y", "@mastra/mcp-docs-server@latest"];
1275
- var createMcpConfig = (editor) => {
1276
- if (editor === "vscode") {
1277
- return {
1278
- servers: {
1279
- mastra: process.platform === `win32` ? {
1280
- command: "cmd",
1281
- args: ["/c", "npx", ...args],
1282
- type: "stdio"
1283
- } : {
1284
- command: "npx",
1285
- args,
1286
- type: "stdio"
1287
- }
1288
- }
1289
- };
1290
- }
1291
- return {
1292
- mcpServers: {
1293
- mastra: process.platform === `win32` ? {
1294
- command: "cmd",
1295
- args: ["/c", "npx", ...args]
1296
- } : {
1297
- command: "npx",
1298
- args
1299
- }
1300
- }
1301
- };
1302
- };
1303
- function makeConfig(original, editor) {
1304
- if (editor === "vscode") {
1305
- return {
1306
- ...original,
1307
- servers: {
1308
- ...original?.servers || {},
1309
- ...createMcpConfig(editor).servers
1310
- }
1311
- };
1312
- }
1313
- return {
1314
- ...original,
1315
- mcpServers: {
1316
- ...original?.mcpServers || {},
1317
- ...createMcpConfig(editor).mcpServers
1318
- }
1319
- };
1320
- }
1321
- async function writeMergedConfig(configPath, editor) {
1322
- const configExists = existsSync(configPath);
1323
- const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
1324
- await ensureFile(configPath);
1325
- await writeJSON(configPath, config, {
1326
- spaces: 2
1327
- });
1328
- }
1329
- var windsurfGlobalMCPConfigPath = path2.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1330
- var cursorGlobalMCPConfigPath = path2.join(os.homedir(), ".cursor", "mcp.json");
1331
- path2.join(process.cwd(), ".vscode", "mcp.json");
1332
- var vscodeGlobalMCPConfigPath = path2.join(
1333
- os.homedir(),
1334
- process.platform === "win32" ? path2.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path2.join("Library", "Application Support", "Code", "User", "settings.json") : path2.join(".config", "Code", "User", "settings.json")
1335
- );
1336
- async function installMastraDocsMCPServer({ editor, directory }) {
1337
- if (editor === `cursor`) {
1338
- await writeMergedConfig(path2.join(directory, ".cursor", "mcp.json"), "cursor");
1339
- }
1340
- if (editor === `vscode`) {
1341
- await writeMergedConfig(path2.join(directory, ".vscode", "mcp.json"), "vscode");
1342
- }
1343
- if (editor === `cursor-global`) {
1344
- const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1345
- if (alreadyInstalled) {
1346
- return;
1347
- }
1348
- await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
1349
- }
1350
- if (editor === `windsurf`) {
1351
- const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1352
- if (alreadyInstalled) {
1353
- return;
1354
- }
1355
- await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
1356
- }
1357
- }
1358
- async function globalMCPIsAlreadyInstalled(editor) {
1359
- let configPath = ``;
1360
- if (editor === "windsurf") {
1361
- configPath = windsurfGlobalMCPConfigPath;
1362
- } else if (editor === "cursor-global") {
1363
- configPath = cursorGlobalMCPConfigPath;
1364
- } else if (editor === "vscode") {
1365
- configPath = vscodeGlobalMCPConfigPath;
1366
- }
1367
- if (!configPath || !existsSync(configPath)) {
1368
- return false;
1369
- }
1370
- try {
1371
- const configContents = await readJSON(configPath);
1372
- if (editor === "vscode") {
1373
- if (!configContents?.servers) return false;
1374
- const hasMastraMCP2 = Object.values(configContents.servers).some(
1375
- (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1376
- );
1377
- return hasMastraMCP2;
1378
- }
1379
- if (!configContents?.mcpServers) return false;
1380
- const hasMastraMCP = Object.values(configContents.mcpServers).some(
1381
- (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1382
- );
1383
- return hasMastraMCP;
1384
- } catch (e) {
1385
- console.error(e);
1386
- return false;
1387
- }
1388
- }
1389
1333
  var EnvService = class {
1390
1334
  };
1391
1335
  var FileEnvService = class extends EnvService {
@@ -1424,7 +1368,7 @@ var FileEnvService = class extends EnvService {
1424
1368
  ${key}=${value}`;
1425
1369
  }
1426
1370
  await this.writeFile({ filePath, data });
1427
- console.log(`${key} set to ${value} in ENV file.`);
1371
+ console.info(`${key} set to ${value} in ENV file.`);
1428
1372
  return data;
1429
1373
  }
1430
1374
  async getEnvValue(key) {
@@ -1457,19 +1401,19 @@ var FileService = class {
1457
1401
  */
1458
1402
  async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1459
1403
  const __filename = fileURLToPath(import.meta.url);
1460
- const __dirname = path2.dirname(__filename);
1461
- const filePath = path2.resolve(__dirname, "starter-files", inputFile);
1404
+ const __dirname = path3.dirname(__filename);
1405
+ const filePath = path3.resolve(__dirname, "starter-files", inputFile);
1462
1406
  const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1463
1407
  if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1464
- console.log(`${outputFilePath} already exists`);
1408
+ console.info(`${outputFilePath} already exists`);
1465
1409
  return false;
1466
1410
  }
1467
- await fsExtra3.outputFile(outputFilePath, fileString);
1411
+ await fsExtra.outputFile(outputFilePath, fileString);
1468
1412
  return true;
1469
1413
  }
1470
1414
  async setupEnvFile({ dbUrl }) {
1471
- const envPath = path2.join(process.cwd(), ".env.development");
1472
- await fsExtra3.ensureFile(envPath);
1415
+ const envPath = path3.join(process.cwd(), ".env.development");
1416
+ await fsExtra.ensureFile(envPath);
1473
1417
  const fileEnvService = new FileEnvService(envPath);
1474
1418
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1475
1419
  }
@@ -1492,144 +1436,217 @@ var FileService = class {
1492
1436
  fs3__default__default.writeFileSync(filePath, fileContent);
1493
1437
  }
1494
1438
  };
1495
- new PinoLogger({
1496
- name: "Mastra CLI",
1497
- level: "debug"
1498
- });
1499
- var exec = util.promisify(child_process.exec);
1500
- var getAISDKPackage = (llmProvider) => {
1501
- switch (llmProvider) {
1502
- case "openai":
1503
- return "@ai-sdk/openai";
1504
- case "anthropic":
1505
- return "@ai-sdk/anthropic";
1506
- case "groq":
1507
- return "@ai-sdk/groq";
1508
- case "google":
1509
- return "@ai-sdk/google";
1510
- case "cerebras":
1511
- return "@ai-sdk/cerebras";
1512
- default:
1513
- return "@ai-sdk/openai";
1514
- }
1439
+ var createArgs = (versionTag) => {
1440
+ const packageName = versionTag ? `@mastra/mcp-docs-server@${versionTag}` : "@mastra/mcp-docs-server";
1441
+ return ["-y", packageName];
1515
1442
  };
1516
- var getProviderImportAndModelItem = (llmProvider) => {
1517
- let providerImport = "";
1518
- let modelItem = "";
1519
- if (llmProvider === "openai") {
1520
- providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1521
- modelItem = `openai('gpt-4o-mini')`;
1522
- } else if (llmProvider === "anthropic") {
1523
- providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1524
- modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
1525
- } else if (llmProvider === "groq") {
1526
- providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
1527
- modelItem = `groq('llama-3.3-70b-versatile')`;
1528
- } else if (llmProvider === "google") {
1529
- providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1530
- modelItem = `google('gemini-1.5-pro-latest')`;
1531
- } else if (llmProvider === "cerebras") {
1532
- providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1533
- modelItem = `cerebras('llama-3.3-70b')`;
1443
+ var createMcpConfig = (editor, versionTag) => {
1444
+ const args = createArgs(versionTag);
1445
+ if (editor === "vscode") {
1446
+ return {
1447
+ servers: {
1448
+ mastra: process.platform === `win32` ? {
1449
+ command: "cmd",
1450
+ args: ["/c", "npx", ...args],
1451
+ type: "stdio"
1452
+ } : {
1453
+ command: "npx",
1454
+ args,
1455
+ type: "stdio"
1456
+ }
1457
+ }
1458
+ };
1534
1459
  }
1535
- return { providerImport, modelItem };
1460
+ return {
1461
+ mcpServers: {
1462
+ mastra: {
1463
+ command: "npx",
1464
+ args
1465
+ }
1466
+ }
1467
+ };
1536
1468
  };
1537
- async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1538
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1539
- const instructions = `
1540
- You are a helpful weather assistant that provides accurate weather information.
1541
-
1542
- Your primary function is to help users get weather details for specific locations. When responding:
1543
- - Always ask for a location if none is provided
1544
- - If the location name isn\u2019t in English, please translate it
1545
- - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1546
- - Include relevant details like humidity, wind conditions, and precipitation
1547
- - Keep responses concise but informative
1548
-
1549
- ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1550
- `;
1551
- const content = `
1552
- ${providerImport}
1553
- import { Agent } from '@mastra/core/agent';
1554
- import { Memory } from '@mastra/memory';
1555
- import { LibSQLStore } from '@mastra/libsql';
1556
- ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1557
-
1558
- export const weatherAgent = new Agent({
1559
- name: 'Weather Agent',
1560
- instructions: \`${instructions}\`,
1561
- model: ${modelItem},
1562
- ${addExampleTool ? "tools: { weatherTool }," : ""}
1563
- memory: new Memory({
1564
- storage: new LibSQLStore({
1565
- url: "file:../mastra.db", // path is relative to the .mastra/output directory
1566
- })
1567
- })
1568
- });
1569
- `;
1570
- const formattedContent = await prettier.format(content, {
1571
- parser: "typescript",
1572
- singleQuote: true
1469
+ function makeConfig(original, editor, versionTag) {
1470
+ if (editor === "vscode") {
1471
+ return {
1472
+ ...original,
1473
+ servers: {
1474
+ ...original?.servers || {},
1475
+ ...createMcpConfig(editor, versionTag).servers
1476
+ }
1477
+ };
1478
+ }
1479
+ return {
1480
+ ...original,
1481
+ mcpServers: {
1482
+ ...original?.mcpServers || {},
1483
+ ...createMcpConfig(editor, versionTag).mcpServers
1484
+ }
1485
+ };
1486
+ }
1487
+ async function writeMergedConfig(configPath, editor, versionTag) {
1488
+ const configExists = existsSync(configPath);
1489
+ const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor, versionTag);
1490
+ await ensureFile(configPath);
1491
+ await writeJSON(configPath, config, {
1492
+ spaces: 2
1573
1493
  });
1574
- await fs4.writeFile(destPath, "");
1575
- await fs4.writeFile(destPath, formattedContent);
1576
1494
  }
1577
- async function writeWorkflowSample(destPath, llmProvider) {
1578
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1579
- const content = `${providerImport}
1580
- import { Agent } from '@mastra/core/agent';
1581
- import { createStep, createWorkflow } from '@mastra/core/workflows';
1582
- import { z } from 'zod';
1583
-
1584
- const llm = ${modelItem};
1585
-
1586
- const agent = new Agent({
1587
- name: 'Weather Agent',
1588
- model: llm,
1589
- instructions: \`
1590
- You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
1591
-
1592
- For each day in the forecast, structure your response exactly as follows:
1593
-
1594
- \u{1F4C5} [Day, Month Date, Year]
1595
- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
1596
-
1597
- \u{1F321}\uFE0F WEATHER SUMMARY
1598
- \u2022 Conditions: [brief description]
1599
- \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1600
- \u2022 Precipitation: [X% chance]
1601
-
1602
- \u{1F305} MORNING ACTIVITIES
1603
- Outdoor:
1604
- \u2022 [Activity Name] - [Brief description including specific location/route]
1605
- Best timing: [specific time range]
1606
- Note: [relevant weather consideration]
1607
-
1608
- \u{1F31E} AFTERNOON ACTIVITIES
1609
- Outdoor:
1610
- \u2022 [Activity Name] - [Brief description including specific location/route]
1611
- Best timing: [specific time range]
1612
- Note: [relevant weather consideration]
1613
-
1614
- \u{1F3E0} INDOOR ALTERNATIVES
1615
- \u2022 [Activity Name] - [Brief description including specific venue]
1616
- Ideal for: [weather condition that would trigger this alternative]
1617
-
1618
- \u26A0\uFE0F SPECIAL CONSIDERATIONS
1619
- \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1620
-
1621
- Guidelines:
1622
- - Suggest 2-3 time-specific outdoor activities per day
1623
- - Include 1-2 indoor backup options
1624
- - For precipitation >50%, lead with indoor activities
1625
- - All activities must be specific to the location
1626
- - Include specific venues, trails, or locations
1627
- - Consider activity intensity based on temperature
1628
- - Keep descriptions concise but informative
1629
-
1630
- Maintain this exact formatting for consistency, using the emoji and section headers as shown.
1631
- \`,
1632
- });
1495
+ var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1496
+ var antigravityGlobalMCPConfigPath = path3.join(os.homedir(), ".gemini", "antigravity", "mcp_config.json");
1497
+ var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
1498
+ path3.join(process.cwd(), ".vscode", "mcp.json");
1499
+ var vscodeGlobalMCPConfigPath = path3.join(
1500
+ os.homedir(),
1501
+ process.platform === "win32" ? path3.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path3.join("Library", "Application Support", "Code", "User", "settings.json") : path3.join(".config", "Code", "User", "settings.json")
1502
+ );
1503
+ async function installMastraDocsMCPServer({
1504
+ editor,
1505
+ directory,
1506
+ versionTag
1507
+ }) {
1508
+ if (editor === `cursor`) {
1509
+ await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor", versionTag);
1510
+ }
1511
+ if (editor === `vscode`) {
1512
+ await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode", versionTag);
1513
+ }
1514
+ if (editor === `cursor-global`) {
1515
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);
1516
+ if (alreadyInstalled) {
1517
+ return;
1518
+ }
1519
+ await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global", versionTag);
1520
+ }
1521
+ if (editor === `windsurf`) {
1522
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);
1523
+ if (alreadyInstalled) {
1524
+ return;
1525
+ }
1526
+ await writeMergedConfig(windsurfGlobalMCPConfigPath, editor, versionTag);
1527
+ }
1528
+ if (editor === `antigravity`) {
1529
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);
1530
+ if (alreadyInstalled) {
1531
+ return;
1532
+ }
1533
+ await writeMergedConfig(antigravityGlobalMCPConfigPath, editor, versionTag);
1534
+ }
1535
+ }
1536
+ async function globalMCPIsAlreadyInstalled(editor, versionTag) {
1537
+ let configPath = ``;
1538
+ if (editor === "windsurf") {
1539
+ configPath = windsurfGlobalMCPConfigPath;
1540
+ } else if (editor === "antigravity") {
1541
+ configPath = antigravityGlobalMCPConfigPath;
1542
+ } else if (editor === "cursor-global") {
1543
+ configPath = cursorGlobalMCPConfigPath;
1544
+ } else if (editor === "vscode") {
1545
+ configPath = vscodeGlobalMCPConfigPath;
1546
+ }
1547
+ if (!configPath || !existsSync(configPath)) {
1548
+ return false;
1549
+ }
1550
+ try {
1551
+ const configContents = await readJSON(configPath);
1552
+ if (!configContents) return false;
1553
+ const expectedPackage = versionTag ? `@mastra/mcp-docs-server@${versionTag}` : "@mastra/mcp-docs-server";
1554
+ if (editor === "vscode") {
1555
+ if (!configContents.servers) return false;
1556
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1557
+ (server) => server?.args?.find((arg) => arg === expectedPackage)
1558
+ );
1559
+ return hasMastraMCP2;
1560
+ }
1561
+ if (!configContents?.mcpServers) return false;
1562
+ const hasMastraMCP = Object.values(configContents.mcpServers).some(
1563
+ (server) => server?.args?.find((arg) => arg === expectedPackage)
1564
+ );
1565
+ return hasMastraMCP;
1566
+ } catch {
1567
+ return false;
1568
+ }
1569
+ }
1570
+ var exec = util.promisify(child_process.exec);
1571
+ var getModelIdentifier = (llmProvider) => {
1572
+ let model = "openai/gpt-4o";
1573
+ if (llmProvider === "anthropic") {
1574
+ model = "anthropic/claude-sonnet-4-5";
1575
+ } else if (llmProvider === "groq") {
1576
+ model = "groq/llama-3.3-70b-versatile";
1577
+ } else if (llmProvider === "google") {
1578
+ model = "google/gemini-2.5-pro";
1579
+ } else if (llmProvider === "cerebras") {
1580
+ model = "cerebras/llama-3.3-70b";
1581
+ } else if (llmProvider === "mistral") {
1582
+ model = "mistral/mistral-medium-2508";
1583
+ }
1584
+ return model;
1585
+ };
1586
+ async function writeAgentSample(llmProvider, destPath, addExampleTool, addScorers) {
1587
+ const modelString = getModelIdentifier(llmProvider);
1588
+ const instructions = `
1589
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1590
+
1591
+ Your primary function is to help users get weather details for specific locations. When responding:
1592
+ - Always ask for a location if none is provided
1593
+ - If the location name isn't in English, please translate it
1594
+ - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1595
+ - Include relevant details like humidity, wind conditions, and precipitation
1596
+ - Keep responses concise but informative
1597
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1598
+ - If the user asks for activities, respond in the format they request.
1599
+
1600
+ ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1601
+ `;
1602
+ const content = `
1603
+ import { Agent } from '@mastra/core/agent';
1604
+ import { Memory } from '@mastra/memory';
1605
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1606
+ ${addScorers ? `import { scorers } from '../scorers/weather-scorer';` : ""}
1607
+
1608
+ export const weatherAgent = new Agent({
1609
+ id: 'weather-agent',
1610
+ name: 'Weather Agent',
1611
+ instructions: \`${instructions}\`,
1612
+ model: '${modelString}',
1613
+ ${addExampleTool ? "tools: { weatherTool }," : ""}
1614
+ ${addScorers ? `scorers: {
1615
+ toolCallAppropriateness: {
1616
+ scorer: scorers.toolCallAppropriatenessScorer,
1617
+ sampling: {
1618
+ type: 'ratio',
1619
+ rate: 1,
1620
+ },
1621
+ },
1622
+ completeness: {
1623
+ scorer: scorers.completenessScorer,
1624
+ sampling: {
1625
+ type: 'ratio',
1626
+ rate: 1,
1627
+ },
1628
+ },
1629
+ translation: {
1630
+ scorer: scorers.translationScorer,
1631
+ sampling: {
1632
+ type: 'ratio',
1633
+ rate: 1,
1634
+ },
1635
+ },
1636
+ },` : ""}
1637
+ memory: new Memory()
1638
+ });
1639
+ `;
1640
+ const formattedContent = await prettier.format(content, {
1641
+ parser: "typescript",
1642
+ singleQuote: true
1643
+ });
1644
+ await fs4.writeFile(destPath, "");
1645
+ await fs4.writeFile(destPath, formattedContent);
1646
+ }
1647
+ async function writeWorkflowSample(destPath) {
1648
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1649
+ import { z } from 'zod';
1633
1650
 
1634
1651
  const forecastSchema = z.object({
1635
1652
  date: z.string(),
@@ -1724,16 +1741,59 @@ const planActivities = createStep({
1724
1741
  outputSchema: z.object({
1725
1742
  activities: z.string(),
1726
1743
  }),
1727
- execute: async ({ inputData }) => {
1744
+ execute: async ({ inputData, mastra }) => {
1728
1745
  const forecast = inputData
1729
1746
 
1730
1747
  if (!forecast) {
1731
1748
  throw new Error('Forecast data not found')
1732
1749
  }
1733
1750
 
1751
+ const agent = mastra?.getAgent('weatherAgent');
1752
+ if (!agent) {
1753
+ throw new Error('Weather agent not found');
1754
+ }
1755
+
1734
1756
  const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1735
1757
  \${JSON.stringify(forecast, null, 2)}
1736
- \`;
1758
+ For each day in the forecast, structure your response exactly as follows:
1759
+
1760
+ \u{1F4C5} [Day, Month Date, Year]
1761
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
1762
+
1763
+ \u{1F321}\uFE0F WEATHER SUMMARY
1764
+ \u2022 Conditions: [brief description]
1765
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1766
+ \u2022 Precipitation: [X% chance]
1767
+
1768
+ \u{1F305} MORNING ACTIVITIES
1769
+ Outdoor:
1770
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1771
+ Best timing: [specific time range]
1772
+ Note: [relevant weather consideration]
1773
+
1774
+ \u{1F31E} AFTERNOON ACTIVITIES
1775
+ Outdoor:
1776
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1777
+ Best timing: [specific time range]
1778
+ Note: [relevant weather consideration]
1779
+
1780
+ \u{1F3E0} INDOOR ALTERNATIVES
1781
+ \u2022 [Activity Name] - [Brief description including specific venue]
1782
+ Ideal for: [weather condition that would trigger this alternative]
1783
+
1784
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1785
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1786
+
1787
+ Guidelines:
1788
+ - Suggest 2-3 time-specific outdoor activities per day
1789
+ - Include 1-2 indoor backup options
1790
+ - For precipitation >50%, lead with indoor activities
1791
+ - All activities must be specific to the location
1792
+ - Include specific venues, trails, or locations
1793
+ - Consider activity intensity based on temperature
1794
+ - Keep descriptions concise but informative
1795
+
1796
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1737
1797
 
1738
1798
  const response = await agent.stream([
1739
1799
  {
@@ -1781,41 +1841,138 @@ async function writeToolSample(destPath) {
1781
1841
  const fileService = new FileService();
1782
1842
  await fileService.copyStarterFile("tools.ts", destPath);
1783
1843
  }
1844
+ async function writeScorersSample(llmProvider, destPath) {
1845
+ const modelString = getModelIdentifier(llmProvider);
1846
+ const content = `import { z } from 'zod';
1847
+ import { createToolCallAccuracyScorerCode } from '@mastra/evals/scorers/prebuilt';
1848
+ import { createCompletenessScorer } from '@mastra/evals/scorers/prebuilt';
1849
+ import { getAssistantMessageFromRunOutput, getUserMessageFromRunInput } from '@mastra/evals/scorers/utils';
1850
+ import { createScorer } from '@mastra/core/evals';
1851
+
1852
+ export const toolCallAppropriatenessScorer = createToolCallAccuracyScorerCode({
1853
+ expectedTool: 'weatherTool',
1854
+ strictMode: false,
1855
+ });
1856
+
1857
+ export const completenessScorer = createCompletenessScorer();
1858
+
1859
+ // Custom LLM-judged scorer: evaluates if non-English locations are translated appropriately
1860
+ export const translationScorer = createScorer({
1861
+ id: 'translation-quality-scorer',
1862
+ name: 'Translation Quality',
1863
+ description: 'Checks that non-English location names are translated and used correctly',
1864
+ type: 'agent',
1865
+ judge: {
1866
+ model: '${modelString}',
1867
+ instructions:
1868
+ 'You are an expert evaluator of translation quality for geographic locations. ' +
1869
+ 'Determine whether the user text mentions a non-English location and whether the assistant correctly uses an English translation of that location. ' +
1870
+ 'Be lenient with transliteration differences and diacritics. ' +
1871
+ 'Return only the structured JSON matching the provided schema.',
1872
+ },
1873
+ })
1874
+ .preprocess(({ run }) => {
1875
+ const userText = getUserMessageFromRunInput(run.input) || '';
1876
+ const assistantText = getAssistantMessageFromRunOutput(run.output) || '';
1877
+ return { userText, assistantText };
1878
+ })
1879
+ .analyze({
1880
+ description: 'Extract location names and detect language/translation adequacy',
1881
+ outputSchema: z.object({
1882
+ nonEnglish: z.boolean(),
1883
+ translated: z.boolean(),
1884
+ confidence: z.number().min(0).max(1).default(1),
1885
+ explanation: z.string().default(''),
1886
+ }),
1887
+ createPrompt: ({ results }) => \`
1888
+ You are evaluating if a weather assistant correctly handled translation of a non-English location.
1889
+ User text:
1890
+ """
1891
+ \${results.preprocessStepResult.userText}
1892
+ """
1893
+ Assistant response:
1894
+ """
1895
+ \${results.preprocessStepResult.assistantText}
1896
+ """
1897
+ Tasks:
1898
+ 1) Identify if the user mentioned a location that appears non-English.
1899
+ 2) If non-English, check whether the assistant used a correct English translation of that location in its response.
1900
+ 3) Be lenient with transliteration differences (e.g., accents/diacritics).
1901
+ Return JSON with fields:
1902
+ {
1903
+ "nonEnglish": boolean,
1904
+ "translated": boolean,
1905
+ "confidence": number, // 0-1
1906
+ "explanation": string
1907
+ }
1908
+ \`,
1909
+ })
1910
+ .generateScore(({ results }) => {
1911
+ const r = (results as any)?.analyzeStepResult || {};
1912
+ if (!r.nonEnglish) return 1; // If not applicable, full credit
1913
+ if (r.translated) return Math.max(0, Math.min(1, 0.7 + 0.3 * (r.confidence ?? 1)));
1914
+ return 0; // Non-English but not translated
1915
+ })
1916
+ .generateReason(({ results, score }) => {
1917
+ const r = (results as any)?.analyzeStepResult || {};
1918
+ return \`Translation scoring: nonEnglish=\${r.nonEnglish ?? false}, translated=\${r.translated ?? false}, confidence=\${r.confidence ?? 0}. Score=\${score}. \${r.explanation ?? ''}\`;
1919
+ });
1920
+
1921
+ export const scorers = {
1922
+ toolCallAppropriatenessScorer,
1923
+ completenessScorer,
1924
+ translationScorer,
1925
+ };`;
1926
+ const formattedContent = await prettier.format(content, {
1927
+ parser: "typescript",
1928
+ singleQuote: true
1929
+ });
1930
+ await fs4.writeFile(destPath, formattedContent);
1931
+ }
1784
1932
  async function writeCodeSampleForComponents(llmprovider, component, destPath, importComponents) {
1785
1933
  switch (component) {
1786
1934
  case "agents":
1787
- return writeAgentSample(llmprovider, destPath, importComponents.includes("tools"));
1935
+ return writeAgentSample(
1936
+ llmprovider,
1937
+ destPath,
1938
+ importComponents.includes("tools"),
1939
+ importComponents.includes("scorers")
1940
+ );
1788
1941
  case "tools":
1789
1942
  return writeToolSample(destPath);
1790
1943
  case "workflows":
1791
- return writeWorkflowSample(destPath, llmprovider);
1944
+ return writeWorkflowSample(destPath);
1945
+ case "scorers":
1946
+ return writeScorersSample(llmprovider, destPath);
1792
1947
  default:
1793
1948
  return "";
1794
1949
  }
1795
1950
  }
1796
1951
  var createComponentsDir = async (dirPath, component) => {
1797
1952
  const componentPath = dirPath + `/${component}`;
1798
- await fsExtra3.ensureDir(componentPath);
1953
+ await fsExtra.ensureDir(componentPath);
1799
1954
  };
1800
1955
  var writeIndexFile = async ({
1801
1956
  dirPath,
1802
1957
  addAgent,
1803
1958
  addExample,
1804
- addWorkflow
1959
+ addWorkflow,
1960
+ addScorers
1805
1961
  }) => {
1806
1962
  const indexPath = dirPath + "/index.ts";
1807
- const destPath = path2.join(indexPath);
1963
+ const destPath = path3.join(indexPath);
1808
1964
  try {
1809
1965
  await fs4.writeFile(destPath, "");
1810
1966
  const filteredExports = [
1811
1967
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1812
- addAgent ? `agents: { weatherAgent },` : ""
1968
+ addAgent ? `agents: { weatherAgent },` : "",
1969
+ addScorers ? `scorers: { toolCallAppropriatenessScorer, completenessScorer, translationScorer },` : ""
1813
1970
  ].filter(Boolean);
1814
1971
  if (!addExample) {
1815
1972
  await fs4.writeFile(
1816
1973
  destPath,
1817
1974
  `
1818
- import { Mastra } from '@mastra/core';
1975
+ import { Mastra } from '@mastra/core/mastra';
1819
1976
 
1820
1977
  export const mastra = new Mastra()
1821
1978
  `
@@ -1828,19 +1985,26 @@ export const mastra = new Mastra()
1828
1985
  import { Mastra } from '@mastra/core/mastra';
1829
1986
  import { PinoLogger } from '@mastra/loggers';
1830
1987
  import { LibSQLStore } from '@mastra/libsql';
1988
+ import { Observability } from '@mastra/observability';
1831
1989
  ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
1832
1990
  ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1991
+ ${addScorers ? `import { toolCallAppropriatenessScorer, completenessScorer, translationScorer } from './scorers/weather-scorer';` : ""}
1833
1992
 
1834
1993
  export const mastra = new Mastra({
1835
1994
  ${filteredExports.join("\n ")}
1836
1995
  storage: new LibSQLStore({
1837
- // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1996
+ id: "mastra-storage",
1997
+ // stores observability, scores, ... into memory storage, if it needs to persist, change to file:../mastra.db
1838
1998
  url: ":memory:",
1839
1999
  }),
1840
2000
  logger: new PinoLogger({
1841
2001
  name: 'Mastra',
1842
2002
  level: 'info',
1843
2003
  }),
2004
+ observability: new Observability({
2005
+ // Enables DefaultExporter and CloudExporter for tracing
2006
+ default: { enabled: true },
2007
+ }),
1844
2008
  });
1845
2009
  `
1846
2010
  );
@@ -1848,7 +2012,6 @@ export const mastra = new Mastra({
1848
2012
  throw err;
1849
2013
  }
1850
2014
  };
1851
- yoctoSpinner({ text: "Installing Mastra core dependencies\n" });
1852
2015
  var getAPIKey = async (provider) => {
1853
2016
  let key = "OPENAI_API_KEY";
1854
2017
  switch (provider) {
@@ -1864,27 +2027,28 @@ var getAPIKey = async (provider) => {
1864
2027
  case "cerebras":
1865
2028
  key = "CEREBRAS_API_KEY";
1866
2029
  return key;
2030
+ case "mistral":
2031
+ key = "MISTRAL_API_KEY";
2032
+ return key;
1867
2033
  default:
1868
2034
  return key;
1869
2035
  }
1870
2036
  };
1871
- var writeAPIKey = async ({
1872
- provider,
1873
- apiKey = "your-api-key"
1874
- }) => {
2037
+ var writeAPIKey = async ({ provider, apiKey }) => {
2038
+ const envFileName = apiKey ? ".env" : ".env.example";
1875
2039
  const key = await getAPIKey(provider);
1876
- const escapedKey = shellQuote.quote([key]);
1877
- const escapedApiKey = shellQuote.quote([apiKey]);
1878
- await exec(`echo ${escapedKey}=${escapedApiKey} >> .env`);
2040
+ const escapedKey = shellQuote2.quote([key]);
2041
+ const escapedApiKey = shellQuote2.quote([apiKey ? apiKey : "your-api-key"]);
2042
+ await exec(`echo ${escapedKey}=${escapedApiKey} >> ${envFileName}`);
1879
2043
  };
1880
2044
  var createMastraDir = async (directory) => {
1881
2045
  let dir = directory.trim().split("/").filter((item) => item !== "");
1882
- const dirPath = path2.join(process.cwd(), ...dir, "mastra");
2046
+ const dirPath = path3.join(process.cwd(), ...dir, "mastra");
1883
2047
  try {
1884
2048
  await fs4.access(dirPath);
1885
2049
  return { ok: false };
1886
2050
  } catch {
1887
- await fsExtra3.ensureDir(dirPath);
2051
+ await fsExtra.ensureDir(dirPath);
1888
2052
  return { ok: true, dirPath };
1889
2053
  }
1890
2054
  };
@@ -1896,42 +2060,35 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
1896
2060
  throw err;
1897
2061
  }
1898
2062
  };
1899
- var interactivePrompt = async () => {
1900
- pe(color2.inverse("Mastra Init"));
1901
- const mastraProject = await ve(
2063
+ var LLM_PROVIDERS = [
2064
+ { value: "openai", label: "OpenAI", hint: "recommended" },
2065
+ { value: "anthropic", label: "Anthropic" },
2066
+ { value: "groq", label: "Groq" },
2067
+ { value: "google", label: "Google" },
2068
+ { value: "cerebras", label: "Cerebras" },
2069
+ { value: "mistral", label: "Mistral" }
2070
+ ];
2071
+ var interactivePrompt = async (args = {}) => {
2072
+ const { skip = {}, options: { showBanner = true } = {} } = args;
2073
+ if (showBanner) {
2074
+ Ie(color2.inverse(" Mastra Init "));
2075
+ }
2076
+ const mastraProject = await Ce(
1902
2077
  {
1903
- directory: () => ae({
2078
+ directory: () => he({
1904
2079
  message: "Where should we create the Mastra files? (default: src/)",
1905
2080
  placeholder: "src/",
1906
2081
  defaultValue: "src/"
1907
2082
  }),
1908
- components: () => $e({
1909
- message: "Choose components to install:",
1910
- options: [
1911
- { value: "agents", label: "Agents", hint: "recommended" },
1912
- {
1913
- value: "workflows",
1914
- label: "Workflows"
1915
- }
1916
- ]
1917
- }),
1918
- shouldAddTools: () => ce({
1919
- message: "Add tools?",
1920
- initialValue: false
1921
- }),
1922
- llmProvider: () => le({
1923
- message: "Select default provider:",
1924
- options: [
1925
- { value: "openai", label: "OpenAI", hint: "recommended" },
1926
- { value: "anthropic", label: "Anthropic" },
1927
- { value: "groq", label: "Groq" },
1928
- { value: "google", label: "Google" },
1929
- { value: "cerebras", label: "Cerebras" }
1930
- ]
2083
+ llmProvider: () => skip?.llmProvider ? void 0 : ve({
2084
+ message: "Select a default provider:",
2085
+ options: LLM_PROVIDERS
1931
2086
  }),
1932
2087
  llmApiKey: async ({ results: { llmProvider } }) => {
1933
- const keyChoice = await le({
1934
- message: `Enter your ${llmProvider} API key?`,
2088
+ if (skip?.llmApiKey) return void 0;
2089
+ const llmName = LLM_PROVIDERS.find((p6) => p6.value === llmProvider)?.label || "provider";
2090
+ const keyChoice = await ve({
2091
+ message: `Enter your ${llmName} API key?`,
1935
2092
  options: [
1936
2093
  { value: "skip", label: "Skip for now", hint: "default" },
1937
2094
  { value: "enter", label: "Enter API key" }
@@ -1939,79 +2096,65 @@ var interactivePrompt = async () => {
1939
2096
  initialValue: "skip"
1940
2097
  });
1941
2098
  if (keyChoice === "enter") {
1942
- return ae({
2099
+ return he({
1943
2100
  message: "Enter your API key:",
1944
- placeholder: "sk-..."
2101
+ placeholder: "sk-...",
2102
+ validate: (value) => {
2103
+ if (value.length === 0) return "API key cannot be empty";
2104
+ }
1945
2105
  });
1946
2106
  }
1947
2107
  return void 0;
1948
2108
  },
1949
- addExample: () => ce({
1950
- message: "Add example",
1951
- initialValue: false
1952
- }),
1953
2109
  configureEditorWithDocsMCP: async () => {
1954
- const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
1955
- const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
1956
- const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
1957
- const editor = await le({
1958
- message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
2110
+ const editor = await ve({
2111
+ message: `Make your IDE into a Mastra expert? (Installs Mastra's MCP server)`,
1959
2112
  options: [
1960
2113
  { value: "skip", label: "Skip for now", hint: "default" },
1961
2114
  {
1962
2115
  value: "cursor",
1963
- label: "Cursor (project only)",
1964
- hint: cursorIsAlreadyInstalled ? `Already installed globally` : void 0
2116
+ label: "Cursor (project only)"
1965
2117
  },
1966
2118
  {
1967
2119
  value: "cursor-global",
1968
- label: "Cursor (global, all projects)",
1969
- hint: cursorIsAlreadyInstalled ? `Already installed` : void 0
2120
+ label: "Cursor (global, all projects)"
1970
2121
  },
1971
2122
  {
1972
2123
  value: "windsurf",
1973
- label: "Windsurf",
1974
- hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2124
+ label: "Windsurf"
1975
2125
  },
1976
2126
  {
1977
2127
  value: "vscode",
1978
- label: "VSCode",
1979
- hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
2128
+ label: "VSCode"
2129
+ },
2130
+ {
2131
+ value: "antigravity",
2132
+ label: "Antigravity"
1980
2133
  }
1981
2134
  ]
1982
2135
  });
1983
2136
  if (editor === `skip`) return void 0;
1984
- if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1985
- v.message(`
1986
- Windsurf is already installed, skipping.`);
1987
- return void 0;
1988
- }
1989
- if (editor === `vscode` && vscodeIsAlreadyInstalled) {
1990
- v.message(`
1991
- VSCode is already installed, skipping.`);
1992
- return void 0;
1993
- }
1994
2137
  if (editor === `cursor`) {
1995
- v.message(
2138
+ M.message(
1996
2139
  `
1997
2140
  Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1998
2141
  `
1999
2142
  );
2000
2143
  }
2001
2144
  if (editor === `cursor-global`) {
2002
- const confirm2 = await le({
2145
+ const confirm3 = await ve({
2003
2146
  message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
2004
2147
  options: [
2005
2148
  { value: "yes", label: "Yes, I understand" },
2006
2149
  { value: "skip", label: "No, skip for now" }
2007
2150
  ]
2008
2151
  });
2009
- if (confirm2 !== `yes`) {
2152
+ if (confirm3 !== `yes`) {
2010
2153
  return void 0;
2011
2154
  }
2012
2155
  }
2013
2156
  if (editor === `windsurf`) {
2014
- const confirm2 = await le({
2157
+ const confirm3 = await ve({
2015
2158
  message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
2016
2159
  This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
2017
2160
  options: [
@@ -2019,35 +2162,281 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
2019
2162
  { value: "skip", label: "No, skip for now" }
2020
2163
  ]
2021
2164
  });
2022
- if (confirm2 !== `yes`) {
2165
+ if (confirm3 !== `yes`) {
2166
+ return void 0;
2167
+ }
2168
+ }
2169
+ if (editor === `antigravity`) {
2170
+ const confirm3 = await ve({
2171
+ message: `Antigravity only supports a global MCP config (at ${antigravityGlobalMCPConfigPath}). Is it ok to add/update that global config?
2172
+ This will make the Mastra docs MCP server available in all Antigravity projects.`,
2173
+ options: [
2174
+ { value: "yes", label: "Yes, I understand" },
2175
+ { value: "skip", label: "No, skip for now" }
2176
+ ]
2177
+ });
2178
+ if (confirm3 !== `yes`) {
2023
2179
  return void 0;
2024
2180
  }
2025
2181
  }
2026
2182
  return editor;
2183
+ },
2184
+ initGit: async () => {
2185
+ if (skip?.gitInit) return false;
2186
+ return ye({
2187
+ message: "Initialize a new git repository?",
2188
+ initialValue: true
2189
+ });
2027
2190
  }
2028
2191
  },
2029
2192
  {
2030
2193
  onCancel: () => {
2031
- he("Operation cancelled.");
2194
+ xe("Operation cancelled.");
2032
2195
  process.exit(0);
2033
2196
  }
2034
2197
  }
2035
2198
  );
2036
- const { shouldAddTools, components, ...rest } = mastraProject;
2037
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
2038
- return { ...rest, components: mastraComponents };
2199
+ return mastraProject;
2039
2200
  };
2040
- var s = _();
2201
+ function getPackageManager() {
2202
+ const userAgent = process.env.npm_config_user_agent || "";
2203
+ const execPath = process.env.npm_execpath || "";
2204
+ if (userAgent.includes("bun")) {
2205
+ return "bun";
2206
+ }
2207
+ if (userAgent.includes("yarn")) {
2208
+ return "yarn";
2209
+ }
2210
+ if (userAgent.includes("pnpm")) {
2211
+ return "pnpm";
2212
+ }
2213
+ if (userAgent.includes("npm")) {
2214
+ return "npm";
2215
+ }
2216
+ if (execPath.includes("bun")) {
2217
+ return "bun";
2218
+ }
2219
+ if (execPath.includes("yarn")) {
2220
+ return "yarn";
2221
+ }
2222
+ if (execPath.includes("pnpm")) {
2223
+ return "pnpm";
2224
+ }
2225
+ if (execPath.includes("npm")) {
2226
+ return "npm";
2227
+ }
2228
+ return "npm";
2229
+ }
2230
+ async function gitInit({ cwd }) {
2231
+ await execa("git", ["init"], { cwd, stdio: "ignore" });
2232
+ await execa("git", ["add", "-A"], { cwd, stdio: "ignore" });
2233
+ await execa(
2234
+ "git",
2235
+ [
2236
+ "commit",
2237
+ "-m",
2238
+ '"Initial commit from Mastra"',
2239
+ '--author="dane-ai-mastra[bot] <dane-ai-mastra[bot]@users.noreply.github.com>"'
2240
+ ],
2241
+ { cwd, stdio: "ignore" }
2242
+ );
2243
+ }
2244
+ var logger = createLogger(false);
2245
+ function createLogger(debug = false) {
2246
+ return new PinoLogger({
2247
+ name: "Mastra CLI",
2248
+ level: debug ? "debug" : "info"
2249
+ });
2250
+ }
2041
2251
  var exec2 = util.promisify(child_process.exec);
2252
+ async function cloneTemplate(options) {
2253
+ const { template, projectName, targetDir, branch, llmProvider } = options;
2254
+ const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
2255
+ const spinner4 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
2256
+ try {
2257
+ if (await directoryExists(projectPath)) {
2258
+ spinner4.error(`Directory ${projectName} already exists`);
2259
+ throw new Error(`Directory ${projectName} already exists`);
2260
+ }
2261
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath, branch);
2262
+ await updatePackageJson(projectPath, projectName);
2263
+ const envExamplePath = path3.join(projectPath, ".env.example");
2264
+ if (await fileExists(envExamplePath)) {
2265
+ const envPath = path3.join(projectPath, ".env");
2266
+ await fs4.copyFile(envExamplePath, envPath);
2267
+ if (llmProvider) {
2268
+ await updateEnvFile(envPath, llmProvider);
2269
+ }
2270
+ }
2271
+ spinner4.success(`Template "${template.title}" cloned successfully to ${projectName}`);
2272
+ return projectPath;
2273
+ } catch (error) {
2274
+ spinner4.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
2275
+ throw error;
2276
+ }
2277
+ }
2278
+ async function directoryExists(dirPath) {
2279
+ try {
2280
+ const stat = await fs4.stat(dirPath);
2281
+ return stat.isDirectory();
2282
+ } catch {
2283
+ return false;
2284
+ }
2285
+ }
2286
+ async function fileExists(filePath) {
2287
+ try {
2288
+ const stat = await fs4.stat(filePath);
2289
+ return stat.isFile();
2290
+ } catch {
2291
+ return false;
2292
+ }
2293
+ }
2294
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath, branch) {
2295
+ await fs4.mkdir(targetPath, { recursive: true });
2296
+ try {
2297
+ const degitRepo = repoUrl.replace("https://github.com/", "");
2298
+ const degitRepoWithBranch = branch ? `${degitRepo}#${branch}` : degitRepo;
2299
+ const degitCommand = shellQuote2.quote(["npx", "degit", degitRepoWithBranch, targetPath]);
2300
+ await exec2(degitCommand, {
2301
+ cwd: process.cwd()
2302
+ });
2303
+ } catch {
2304
+ try {
2305
+ const gitArgs = ["git", "clone"];
2306
+ if (branch) {
2307
+ gitArgs.push("--branch", branch);
2308
+ }
2309
+ gitArgs.push(repoUrl, targetPath);
2310
+ const gitCommand = shellQuote2.quote(gitArgs);
2311
+ await exec2(gitCommand, {
2312
+ cwd: process.cwd()
2313
+ });
2314
+ const gitDir = path3.join(targetPath, ".git");
2315
+ if (await directoryExists(gitDir)) {
2316
+ await fs4.rm(gitDir, { recursive: true, force: true });
2317
+ }
2318
+ } catch (gitError) {
2319
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
2320
+ }
2321
+ }
2322
+ }
2323
+ async function updatePackageJson(projectPath, projectName) {
2324
+ const packageJsonPath = path3.join(projectPath, "package.json");
2325
+ try {
2326
+ const packageJsonContent = await fs4.readFile(packageJsonPath, "utf-8");
2327
+ const packageJson = JSON.parse(packageJsonContent);
2328
+ packageJson.name = projectName;
2329
+ await fs4.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
2330
+ } catch (error) {
2331
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
2332
+ }
2333
+ }
2334
+ async function updateEnvFile(envPath, llmProvider) {
2335
+ try {
2336
+ const envContent = await fs4.readFile(envPath, "utf-8");
2337
+ const modelString = getModelIdentifier(llmProvider);
2338
+ if (!modelString) {
2339
+ logger.warn(`Could not get model identifier for provider: ${llmProvider}`);
2340
+ return;
2341
+ }
2342
+ const modelValue = modelString.replace(/'/g, "");
2343
+ const updatedContent = envContent.replace(/^MODEL=.*/m, `MODEL=${modelValue}`);
2344
+ await fs4.writeFile(envPath, updatedContent, "utf-8");
2345
+ logger.info(`Updated MODEL in .env to ${modelValue}`);
2346
+ } catch (error) {
2347
+ logger.warn(`Could not update .env file: ${error instanceof Error ? error.message : "Unknown error"}`);
2348
+ }
2349
+ }
2350
+ async function installDependencies(projectPath, packageManager) {
2351
+ const spinner4 = yoctoSpinner({ text: "Installing dependencies..." }).start();
2352
+ try {
2353
+ const pm = packageManager || getPackageManager();
2354
+ const installCommand = shellQuote2.quote([pm, "install"]);
2355
+ await exec2(installCommand, {
2356
+ cwd: projectPath
2357
+ });
2358
+ spinner4.success("Dependencies installed successfully");
2359
+ } catch (error) {
2360
+ spinner4.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
2361
+ throw error;
2362
+ }
2363
+ }
2364
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
2365
+ async function loadTemplates() {
2366
+ try {
2367
+ const response = await fetch(TEMPLATES_API_URL);
2368
+ if (!response.ok) {
2369
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
2370
+ }
2371
+ const templates = await response.json();
2372
+ return templates;
2373
+ } catch (error) {
2374
+ console.error("Error loading templates:", error);
2375
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
2376
+ }
2377
+ }
2378
+ function pluralize(count, singular, plural) {
2379
+ return count === 1 ? singular : plural || `${singular}s`;
2380
+ }
2381
+ async function selectTemplate(templates) {
2382
+ const choices = templates.map((template) => {
2383
+ const parts = [];
2384
+ if (template.agents?.length) {
2385
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
2386
+ }
2387
+ if (template.tools?.length) {
2388
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
2389
+ }
2390
+ if (template.workflows?.length) {
2391
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
2392
+ }
2393
+ if (template.mcp?.length) {
2394
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
2395
+ }
2396
+ if (template.networks?.length) {
2397
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
2398
+ }
2399
+ return {
2400
+ value: template,
2401
+ label: template.title,
2402
+ hint: parts.join(", ") || "Template components"
2403
+ };
2404
+ });
2405
+ const selected = await ve({
2406
+ message: "Select a template:",
2407
+ options: choices
2408
+ });
2409
+ if (pD(selected)) {
2410
+ return null;
2411
+ }
2412
+ return selected;
2413
+ }
2414
+ function findTemplateByName(templates, templateName) {
2415
+ let template = templates.find((t) => t.slug === templateName);
2416
+ if (template) return template;
2417
+ const slugWithPrefix = `template-${templateName}`;
2418
+ template = templates.find((t) => t.slug === slugWithPrefix);
2419
+ if (template) return template;
2420
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
2421
+ if (template) return template;
2422
+ return null;
2423
+ }
2424
+ function getDefaultProjectName(template) {
2425
+ return template.slug.replace(/^template-/, "");
2426
+ }
2427
+ var s = Y();
2042
2428
  var init = async ({
2043
- directory,
2044
- addExample = false,
2429
+ directory = "src/",
2045
2430
  components,
2046
2431
  llmProvider = "openai",
2047
2432
  llmApiKey,
2048
- configureEditorWithDocsMCP
2433
+ addExample = false,
2434
+ configureEditorWithDocsMCP,
2435
+ versionTag,
2436
+ initGit = false
2049
2437
  }) => {
2050
2438
  s.start("Initializing Mastra");
2439
+ const packageVersionTag = versionTag ? `@${versionTag}` : "";
2051
2440
  try {
2052
2441
  const result = await createMastraDir(directory);
2053
2442
  if (!result.ok) {
@@ -2060,7 +2449,8 @@ var init = async ({
2060
2449
  dirPath,
2061
2450
  addExample,
2062
2451
  addWorkflow: components.includes("workflows"),
2063
- addAgent: components.includes("agents")
2452
+ addAgent: components.includes("agents"),
2453
+ addScorers: components.includes("scorers")
2064
2454
  }),
2065
2455
  ...components.map((component) => createComponentsDir(dirPath, component)),
2066
2456
  writeAPIKey({ provider: llmProvider, apiKey: llmApiKey })
@@ -2074,39 +2464,53 @@ var init = async ({
2074
2464
  const depService = new DepsService();
2075
2465
  const needsLibsql = await depService.checkDependencies(["@mastra/libsql"]) !== `ok`;
2076
2466
  if (needsLibsql) {
2077
- await depService.installPackages(["@mastra/libsql"]);
2467
+ await depService.installPackages([`@mastra/libsql${packageVersionTag}`]);
2078
2468
  }
2079
2469
  const needsMemory = components.includes(`agents`) && await depService.checkDependencies(["@mastra/memory"]) !== `ok`;
2080
2470
  if (needsMemory) {
2081
- await depService.installPackages(["@mastra/memory"]);
2471
+ await depService.installPackages([`@mastra/memory${packageVersionTag}`]);
2082
2472
  }
2083
2473
  const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2084
2474
  if (needsLoggers) {
2085
- await depService.installPackages(["@mastra/loggers"]);
2475
+ await depService.installPackages([`@mastra/loggers${packageVersionTag}`]);
2476
+ }
2477
+ const needsObservability = await depService.checkDependencies(["@mastra/observability"]) !== `ok`;
2478
+ if (needsObservability) {
2479
+ await depService.installPackages([`@mastra/observability${packageVersionTag}`]);
2480
+ }
2481
+ const needsEvals = components.includes(`scorers`) && await depService.checkDependencies(["@mastra/evals"]) !== `ok`;
2482
+ if (needsEvals) {
2483
+ await depService.installPackages([`@mastra/evals${packageVersionTag}`]);
2086
2484
  }
2087
2485
  }
2088
2486
  const key = await getAPIKey(llmProvider || "openai");
2089
- const aiSdkPackage = getAISDKPackage(llmProvider);
2090
- const depsService = new DepsService();
2091
- const pm = depsService.packageManager;
2092
- const installCommand = getPackageManagerInstallCommand(pm);
2093
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
2094
2487
  if (configureEditorWithDocsMCP) {
2095
2488
  await installMastraDocsMCPServer({
2096
2489
  editor: configureEditorWithDocsMCP,
2097
- directory: process.cwd()
2490
+ directory: process.cwd(),
2491
+ versionTag
2098
2492
  });
2099
2493
  }
2100
2494
  s.stop();
2495
+ if (initGit) {
2496
+ const s2 = Y();
2497
+ try {
2498
+ s2.start("Initializing git repository");
2499
+ await gitInit({ cwd: process.cwd() });
2500
+ s2.stop("Git repository initialized");
2501
+ } catch {
2502
+ s2.stop();
2503
+ }
2504
+ }
2101
2505
  if (!llmApiKey) {
2102
- me(`
2506
+ Me(`
2103
2507
  ${color2.green("Mastra initialized successfully!")}
2104
2508
 
2105
2509
  Add your ${color2.cyan(key)} as an environment variable
2106
2510
  in your ${color2.cyan(".env")} file
2107
2511
  `);
2108
2512
  } else {
2109
- me(`
2513
+ Me(`
2110
2514
  ${color2.green("Mastra initialized successfully!")}
2111
2515
  `);
2112
2516
  }
@@ -2140,71 +2544,128 @@ var execWithTimeout = async (command, timeoutMs) => {
2140
2544
  throw error;
2141
2545
  }
2142
2546
  } catch (error) {
2143
- console.error(error);
2144
2547
  throw error;
2145
2548
  }
2146
2549
  };
2550
+ async function getInitCommand(pm) {
2551
+ switch (pm) {
2552
+ case "npm":
2553
+ return "npm init -y";
2554
+ case "pnpm":
2555
+ return "pnpm init";
2556
+ case "yarn":
2557
+ return "yarn init -y";
2558
+ case "bun":
2559
+ return "bun init -y";
2560
+ default:
2561
+ return "npm init -y";
2562
+ }
2563
+ }
2564
+ async function initializePackageJson(pm) {
2565
+ const initCommand = await getInitCommand(pm);
2566
+ await exec3(initCommand);
2567
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
2568
+ const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
2569
+ packageJson.type = "module";
2570
+ packageJson.engines = {
2571
+ ...packageJson.engines,
2572
+ node: ">=22.13.0"
2573
+ };
2574
+ await fs4.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
2575
+ }
2147
2576
  async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
2148
- let installCommand = getPackageManagerInstallCommand(pm);
2577
+ let installCommand = getPackageManagerAddCommand(pm);
2149
2578
  if (isDev) {
2150
- installCommand = `${installCommand} --save-dev`;
2579
+ installCommand = `${installCommand} -D`;
2151
2580
  }
2152
2581
  try {
2153
2582
  await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
2154
2583
  } catch (err) {
2155
- console.log("err", err);
2156
2584
  if (versionTag === "@latest") {
2157
- throw err;
2585
+ throw new Error(
2586
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2587
+ );
2588
+ }
2589
+ try {
2590
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2591
+ } catch (fallbackErr) {
2592
+ throw new Error(
2593
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2594
+ );
2158
2595
  }
2159
- await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2160
2596
  }
2161
2597
  }
2162
2598
  var createMastraProject = async ({
2163
2599
  projectName: name,
2164
2600
  createVersionTag,
2165
- timeout
2601
+ timeout,
2602
+ llmProvider,
2603
+ llmApiKey,
2604
+ needsInteractive
2166
2605
  }) => {
2167
- pe(color2.inverse("Mastra Create"));
2168
- const projectName = name ?? await ae({
2606
+ Ie(color2.inverse(" Mastra Create "));
2607
+ const projectName = name ?? await he({
2169
2608
  message: "What do you want to name your project?",
2170
2609
  placeholder: "my-mastra-app",
2171
- defaultValue: "my-mastra-app"
2610
+ defaultValue: "my-mastra-app",
2611
+ validate: (value) => {
2612
+ if (value.length === 0) return "Project name cannot be empty";
2613
+ if (fs3__default__default.existsSync(value)) {
2614
+ return `A directory named "${value}" already exists. Please choose a different name.`;
2615
+ }
2616
+ }
2172
2617
  });
2173
- if (lD(projectName)) {
2174
- he("Operation cancelled");
2618
+ if (pD(projectName)) {
2619
+ xe("Operation cancelled");
2175
2620
  process.exit(0);
2176
2621
  }
2177
- const s2 = _();
2178
- s2.start("Creating project");
2622
+ let result = void 0;
2623
+ if (needsInteractive) {
2624
+ result = await interactivePrompt({
2625
+ options: { showBanner: false },
2626
+ skip: { llmProvider: llmProvider !== void 0, llmApiKey: llmApiKey !== void 0 }
2627
+ });
2628
+ }
2629
+ const s2 = Y();
2630
+ const originalCwd = process.cwd();
2631
+ let projectPath = null;
2179
2632
  try {
2180
- await fs4.mkdir(projectName);
2181
- } catch (error) {
2182
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2183
- s2.stop(
2184
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
2633
+ s2.start("Creating project");
2634
+ try {
2635
+ await fs4.mkdir(projectName);
2636
+ projectPath = path3.resolve(originalCwd, projectName);
2637
+ } catch (error) {
2638
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2639
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2640
+ process.exit(1);
2641
+ }
2642
+ throw new Error(
2643
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
2185
2644
  );
2186
- process.exit(1);
2187
2645
  }
2188
- throw error;
2189
- }
2190
- process.chdir(projectName);
2191
- const pm = getPackageManager();
2192
- const installCommand = getPackageManagerInstallCommand(pm);
2193
- s2.message("Creating project");
2194
- await exec3(`npm init -y`);
2195
- await exec3(`npm pkg set type="module"`);
2196
- await exec3(`npm pkg set engines.node=">=20.9.0"`);
2197
- const depsService = new DepsService();
2198
- await depsService.addScriptsToPackageJson({
2199
- dev: "mastra dev",
2200
- build: "mastra build",
2201
- start: "mastra start"
2202
- });
2203
- s2.stop("Project created");
2204
- s2.start(`Installing ${pm} dependencies`);
2205
- await exec3(`${pm} ${installCommand} zod`);
2206
- await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
2207
- await exec3(`echo '{
2646
+ process.chdir(projectName);
2647
+ const pm = getPackageManager();
2648
+ const installCommand = getPackageManagerAddCommand(pm);
2649
+ s2.message("Initializing project structure");
2650
+ try {
2651
+ await initializePackageJson(pm);
2652
+ const depsService = new DepsService();
2653
+ await depsService.addScriptsToPackageJson({
2654
+ dev: "mastra dev",
2655
+ build: "mastra build",
2656
+ start: "mastra start"
2657
+ });
2658
+ } catch (error) {
2659
+ throw new Error(
2660
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2661
+ );
2662
+ }
2663
+ s2.stop("Project structure created");
2664
+ s2.start(`Installing ${pm} dependencies`);
2665
+ try {
2666
+ await exec3(`${pm} ${installCommand} zod@^4`);
2667
+ await exec3(`${pm} ${installCommand} -D typescript @types/node`);
2668
+ await exec3(`echo '{
2208
2669
  "compilerOptions": {
2209
2670
  "target": "ES2022",
2210
2671
  "module": "ES2022",
@@ -2220,78 +2681,338 @@ var createMastraProject = async ({
2220
2681
  "src/**/*"
2221
2682
  ]
2222
2683
  }' > tsconfig.json`);
2223
- s2.stop(`${pm} dependencies installed`);
2224
- s2.start("Installing mastra");
2225
- const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2226
- await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2227
- s2.stop("mastra installed");
2228
- s2.start("Installing dependencies");
2229
- await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2230
- await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2231
- await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2232
- s2.stop("Dependencies installed");
2233
- s2.start("Adding .gitignore");
2234
- await exec3(`echo output.txt >> .gitignore`);
2235
- await exec3(`echo node_modules >> .gitignore`);
2236
- await exec3(`echo dist >> .gitignore`);
2237
- await exec3(`echo .mastra >> .gitignore`);
2238
- await exec3(`echo .env.development >> .gitignore`);
2239
- await exec3(`echo .env >> .gitignore`);
2240
- await exec3(`echo *.db >> .gitignore`);
2241
- await exec3(`echo *.db-* >> .gitignore`);
2242
- s2.stop(".gitignore added");
2243
- ge("Project created successfully");
2244
- console.log("");
2245
- return { projectName };
2684
+ } catch (error) {
2685
+ throw new Error(
2686
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2687
+ );
2688
+ }
2689
+ s2.stop(`${pm} dependencies installed`);
2690
+ s2.start("Installing Mastra CLI");
2691
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2692
+ try {
2693
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2694
+ } catch (error) {
2695
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2696
+ }
2697
+ s2.stop("Mastra CLI installed");
2698
+ s2.start("Installing Mastra dependencies");
2699
+ try {
2700
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2701
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2702
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2703
+ } catch (error) {
2704
+ throw new Error(
2705
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2706
+ );
2707
+ }
2708
+ s2.stop("Mastra dependencies installed");
2709
+ s2.start("Adding .gitignore");
2710
+ try {
2711
+ await exec3(`echo output.txt >> .gitignore`);
2712
+ await exec3(`echo node_modules >> .gitignore`);
2713
+ await exec3(`echo dist >> .gitignore`);
2714
+ await exec3(`echo .mastra >> .gitignore`);
2715
+ await exec3(`echo .env.development >> .gitignore`);
2716
+ await exec3(`echo .env >> .gitignore`);
2717
+ await exec3(`echo *.db >> .gitignore`);
2718
+ await exec3(`echo *.db-* >> .gitignore`);
2719
+ } catch (error) {
2720
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2721
+ }
2722
+ s2.stop(".gitignore added");
2723
+ Se("Project created successfully");
2724
+ console.info("");
2725
+ return { projectName, result };
2726
+ } catch (error) {
2727
+ s2.stop();
2728
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2729
+ xe(`Project creation failed: ${errorMessage}`);
2730
+ if (projectPath && fs3__default__default.existsSync(projectPath)) {
2731
+ try {
2732
+ process.chdir(originalCwd);
2733
+ await fs4.rm(projectPath, { recursive: true, force: true });
2734
+ } catch (cleanupError) {
2735
+ console.error(
2736
+ `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : "Unknown error"}`
2737
+ );
2738
+ }
2739
+ }
2740
+ process.exit(1);
2741
+ }
2246
2742
  };
2247
- var create = async (args2) => {
2248
- const { projectName } = await createMastraProject({
2249
- projectName: args2?.projectName,
2250
- createVersionTag: args2?.createVersionTag,
2251
- timeout: args2?.timeout
2743
+ var version$1 = package_default.version;
2744
+ var create = async (args) => {
2745
+ if (args.template !== void 0) {
2746
+ await createFromTemplate({
2747
+ projectName: args.projectName,
2748
+ template: args.template,
2749
+ timeout: args.timeout,
2750
+ injectedAnalytics: args.analytics,
2751
+ llmProvider: args.llmProvider
2752
+ });
2753
+ return;
2754
+ }
2755
+ const needsInteractive = args.components === void 0 || args.llmProvider === void 0 || args.addExample === void 0;
2756
+ const { projectName, result } = await createMastraProject({
2757
+ projectName: args?.projectName,
2758
+ createVersionTag: args?.createVersionTag,
2759
+ timeout: args?.timeout,
2760
+ llmProvider: args?.llmProvider,
2761
+ llmApiKey: args?.llmApiKey,
2762
+ needsInteractive
2252
2763
  });
2253
- const directory = args2.directory || "src/";
2254
- if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
2255
- const result = await interactivePrompt();
2764
+ const directory = args.directory || "src/";
2765
+ if (needsInteractive && result) {
2256
2766
  await init({
2257
2767
  ...result,
2258
- llmApiKey: result?.llmApiKey
2768
+ llmApiKey: result?.llmApiKey,
2769
+ components: ["agents", "tools", "workflows", "scorers"],
2770
+ addExample: true,
2771
+ versionTag: args.createVersionTag
2259
2772
  });
2260
2773
  postCreate({ projectName });
2261
2774
  return;
2262
2775
  }
2263
- const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
2776
+ const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args;
2264
2777
  await init({
2265
2778
  directory,
2266
2779
  components,
2267
2780
  llmProvider,
2268
2781
  addExample,
2269
2782
  llmApiKey,
2270
- configureEditorWithDocsMCP: args2.mcpServer
2783
+ configureEditorWithDocsMCP: args.mcpServer,
2784
+ versionTag: args.createVersionTag
2271
2785
  });
2272
2786
  postCreate({ projectName });
2273
2787
  };
2274
2788
  var postCreate = ({ projectName }) => {
2275
2789
  const packageManager = getPackageManager();
2276
- ge(`
2790
+ Se(`
2277
2791
  ${color2.green("To start your project:")}
2278
2792
 
2279
2793
  ${color2.cyan("cd")} ${projectName}
2280
2794
  ${color2.cyan(`${packageManager} run dev`)}
2281
2795
  `);
2282
2796
  };
2797
+ function isGitHubUrl(url) {
2798
+ try {
2799
+ const parsedUrl = new URL(url);
2800
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2801
+ } catch {
2802
+ return false;
2803
+ }
2804
+ }
2805
+ async function validateGitHubProject(githubUrl) {
2806
+ const errors = [];
2807
+ try {
2808
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2809
+ const owner = urlParts[0];
2810
+ const repo = urlParts[1]?.replace(".git", "");
2811
+ if (!owner || !repo) {
2812
+ throw new Error("Invalid GitHub URL format");
2813
+ }
2814
+ const branches = ["main", "master"];
2815
+ let packageJsonContent = null;
2816
+ let indexContent = null;
2817
+ for (const branch of branches) {
2818
+ try {
2819
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2820
+ const packageJsonResponse = await fetch(packageJsonUrl);
2821
+ if (packageJsonResponse.ok) {
2822
+ packageJsonContent = await packageJsonResponse.text();
2823
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2824
+ const indexResponse = await fetch(indexUrl);
2825
+ if (indexResponse.ok) {
2826
+ indexContent = await indexResponse.text();
2827
+ }
2828
+ break;
2829
+ }
2830
+ } catch {
2831
+ }
2832
+ }
2833
+ if (!packageJsonContent) {
2834
+ errors.push("Could not fetch package.json from repository");
2835
+ return { isValid: false, errors };
2836
+ }
2837
+ try {
2838
+ const packageJson = JSON.parse(packageJsonContent);
2839
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2840
+ if (!hasMastraCore) {
2841
+ errors.push("Missing @mastra/core dependency in package.json");
2842
+ }
2843
+ } catch {
2844
+ errors.push("Invalid package.json format");
2845
+ }
2846
+ if (!indexContent) {
2847
+ errors.push("Missing src/mastra/index.ts file");
2848
+ } else {
2849
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2850
+ if (!hasMastraExport) {
2851
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2852
+ }
2853
+ }
2854
+ return { isValid: errors.length === 0, errors };
2855
+ } catch (error) {
2856
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2857
+ return { isValid: false, errors };
2858
+ }
2859
+ }
2860
+ async function createFromGitHubUrl(url) {
2861
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2862
+ const owner = urlParts[0] || "unknown";
2863
+ const repo = urlParts[1] || "unknown";
2864
+ return {
2865
+ githubUrl: url,
2866
+ title: `${owner}/${repo}`,
2867
+ slug: repo,
2868
+ agents: [],
2869
+ mcp: [],
2870
+ tools: [],
2871
+ networks: [],
2872
+ workflows: []
2873
+ };
2874
+ }
2875
+ async function createFromTemplate(args) {
2876
+ let selectedTemplate;
2877
+ if (args.template === true) {
2878
+ const templates = await loadTemplates();
2879
+ const selected = await selectTemplate(templates);
2880
+ if (!selected) {
2881
+ M.info("No template selected. Exiting.");
2882
+ return;
2883
+ }
2884
+ selectedTemplate = selected;
2885
+ } else if (args.template && typeof args.template === "string") {
2886
+ if (isGitHubUrl(args.template)) {
2887
+ const spinner4 = Y();
2888
+ spinner4.start("Validating GitHub repository...");
2889
+ const validation = await validateGitHubProject(args.template);
2890
+ if (!validation.isValid) {
2891
+ spinner4.stop("Validation failed");
2892
+ M.error("This does not appear to be a valid Mastra project:");
2893
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2894
+ throw new Error("Invalid Mastra project");
2895
+ }
2896
+ spinner4.stop("Valid Mastra project \u2713");
2897
+ selectedTemplate = await createFromGitHubUrl(args.template);
2898
+ } else {
2899
+ const templates = await loadTemplates();
2900
+ const found = findTemplateByName(templates, args.template);
2901
+ if (!found) {
2902
+ M.error(`Template "${args.template}" not found. Available templates:`);
2903
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2904
+ throw new Error(`Template "${args.template}" not found`);
2905
+ }
2906
+ selectedTemplate = found;
2907
+ }
2908
+ }
2909
+ if (!selectedTemplate) {
2910
+ throw new Error("No template selected");
2911
+ }
2912
+ let projectName = args.projectName;
2913
+ if (!projectName) {
2914
+ const defaultName = getDefaultProjectName(selectedTemplate);
2915
+ const response = await he({
2916
+ message: "What is your project name?",
2917
+ defaultValue: defaultName,
2918
+ placeholder: defaultName
2919
+ });
2920
+ if (pD(response)) {
2921
+ M.info("Project creation cancelled.");
2922
+ return;
2923
+ }
2924
+ projectName = response;
2925
+ }
2926
+ let llmProvider = args.llmProvider;
2927
+ if (!llmProvider) {
2928
+ const providerResponse = await ve({
2929
+ message: "Select a default provider:",
2930
+ options: LLM_PROVIDERS
2931
+ });
2932
+ if (pD(providerResponse)) {
2933
+ M.info("Project creation cancelled.");
2934
+ return;
2935
+ }
2936
+ llmProvider = providerResponse;
2937
+ }
2938
+ let initGit = false;
2939
+ const gitConfirmResult = await ye({
2940
+ message: "Initialize a new git repository?",
2941
+ initialValue: true
2942
+ });
2943
+ if (!pD(gitConfirmResult)) {
2944
+ initGit = gitConfirmResult;
2945
+ }
2946
+ let projectPath = null;
2947
+ try {
2948
+ const analytics = args.injectedAnalytics || getAnalytics();
2949
+ if (analytics) {
2950
+ analytics.trackEvent("cli_template_used", {
2951
+ template_slug: selectedTemplate.slug,
2952
+ template_title: selectedTemplate.title
2953
+ });
2954
+ if (llmProvider) {
2955
+ analytics.trackEvent("cli_model_provider_selected", {
2956
+ provider: llmProvider,
2957
+ selection_method: args.llmProvider ? "cli_args" : "interactive"
2958
+ });
2959
+ }
2960
+ }
2961
+ const isBeta = version$1?.includes("beta") ?? false;
2962
+ const isMastraTemplate = selectedTemplate.githubUrl.includes("github.com/mastra-ai/");
2963
+ const branch = isBeta && isMastraTemplate ? "beta" : void 0;
2964
+ projectPath = await cloneTemplate({
2965
+ template: selectedTemplate,
2966
+ projectName,
2967
+ branch,
2968
+ llmProvider
2969
+ });
2970
+ await installDependencies(projectPath);
2971
+ if (initGit) {
2972
+ const s2 = Y();
2973
+ try {
2974
+ s2.start("Initializing git repository");
2975
+ await gitInit({ cwd: projectPath });
2976
+ s2.stop("Git repository initialized");
2977
+ } catch {
2978
+ s2.stop();
2979
+ }
2980
+ }
2981
+ Me(`
2982
+ ${color2.green("Mastra template installed!")}
2983
+
2984
+ Add the necessary environment
2985
+ variables in your ${color2.cyan(".env")} file
2986
+ `);
2987
+ postCreate({ projectName });
2988
+ } catch (error) {
2989
+ if (projectPath) {
2990
+ try {
2991
+ if (fs3__default__default.existsSync(projectPath)) {
2992
+ await fs4.rm(projectPath, { recursive: true, force: true });
2993
+ }
2994
+ } catch (cleanupError) {
2995
+ console.error(
2996
+ `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : "Unknown error"}`
2997
+ );
2998
+ }
2999
+ }
3000
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
3001
+ throw error;
3002
+ }
3003
+ }
2283
3004
 
2284
3005
  async function getPackageVersion() {
2285
3006
  const __filename = fileURLToPath(import.meta.url);
2286
3007
  const __dirname = dirname(__filename);
2287
- const pkgJsonPath = path2.join(__dirname, "..", "package.json");
2288
- const content = await fsExtra.readJSON(pkgJsonPath);
3008
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
3009
+ const content = await fsExtra$1.readJSON(pkgJsonPath);
2289
3010
  return content.version;
2290
3011
  }
2291
3012
  async function getCreateVersionTag() {
2292
3013
  try {
2293
3014
  const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
2294
- const json = await fsExtra.readJSON(pkgPath);
3015
+ const json = await fsExtra$1.readJSON(pkgPath);
2295
3016
  const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
2296
3017
  const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
2297
3018
  const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
@@ -2315,24 +3036,30 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
2315
3036
  analytics.trackCommand({
2316
3037
  command: "version"
2317
3038
  });
2318
- console.log(`create-mastra ${version}`);
3039
+ console.info(`create-mastra ${version}`);
2319
3040
  } catch {
2320
3041
  }
2321
3042
  });
2322
3043
  program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
2323
3044
  "-p, --project-name <string>",
2324
3045
  "Project name that will be used in package.json and as the project directory name."
2325
- ).option("--default", "Quick start with defaults(src, OpenAI, no examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode)").action(async (projectNameArg, args) => {
3046
+ ).option("--default", "Quick start with defaults (src, OpenAI, examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows, scorers)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode, antigravity)").option(
3047
+ "--template [template-name]",
3048
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
3049
+ ).action(async (projectNameArg, args) => {
2326
3050
  const projectName = projectNameArg || args.projectName;
2327
3051
  const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
2328
3052
  if (args.default) {
2329
3053
  await create({
2330
- components: ["agents", "tools", "workflows"],
3054
+ components: ["agents", "tools", "workflows", "scorers"],
2331
3055
  llmProvider: "openai",
2332
3056
  addExample: true,
2333
3057
  createVersionTag,
2334
3058
  timeout,
2335
- mcpServer: args.mcp
3059
+ mcpServer: args.mcp,
3060
+ directory: "src/",
3061
+ template: args.template,
3062
+ analytics
2336
3063
  });
2337
3064
  return;
2338
3065
  }
@@ -2340,12 +3067,14 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2340
3067
  components: args.components ? args.components.split(",") : [],
2341
3068
  llmProvider: args.llm,
2342
3069
  addExample: args.example,
2343
- llmApiKey: args["llm-api-key"],
3070
+ llmApiKey: args.llmApiKey,
2344
3071
  createVersionTag,
2345
3072
  timeout,
2346
3073
  projectName,
2347
3074
  directory: args.dir,
2348
- mcpServer: args.mcp
3075
+ mcpServer: args.mcp,
3076
+ template: args.template,
3077
+ analytics
2349
3078
  });
2350
3079
  });
2351
3080
  program.parse(process.argv);