create-mastra 0.0.0-storage-20250225005900 → 0.0.0-stream-vnext-usage-20250908171242

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
@@ -1,29 +1,33 @@
1
1
  #! /usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { randomUUID } from 'node:crypto';
4
- import * as fs3__default from 'node:fs';
5
- import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import * as fs4__default from 'node:fs';
5
+ import fs4__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import os from 'node:os';
7
- import path, { dirname } from 'node:path';
8
- import { PostHog } from 'posthog-node';
7
+ import path3, { dirname } from 'node:path';
9
8
  import { fileURLToPath } from 'node:url';
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';
9
+ import { PostHog } from 'posthog-node';
10
+ import util, { stripVTControlCharacters } from 'node:util';
11
+ import y$1, { stdout, stdin } from 'node:process';
12
+ import * as g from 'node:readline';
13
+ import g__default from 'node:readline';
14
+ import { Writable } from 'node:stream';
15
+ import fs from 'node:fs/promises';
14
16
  import child_process from 'node:child_process';
15
- import util from 'node:util';
16
- import prettier from 'prettier';
17
- import fsExtra3 from 'fs-extra/esm';
18
- import fs4 from 'node:fs/promises';
19
- import { execa } from 'execa';
17
+ import tty from 'node:tty';
20
18
  import pino from 'pino';
21
19
  import pretty from 'pino-pretty';
22
- import { Transform } from 'node:stream';
20
+ import { execa } from 'execa';
21
+ import fsExtra2, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
22
+ import prettier from 'prettier';
23
23
  import fsExtra from 'fs-extra';
24
24
 
25
25
  var __filename = fileURLToPath(import.meta.url);
26
- var __dirname = path.dirname(__filename);
26
+ var __dirname = path3.dirname(__filename);
27
+ var analyticsInstance = null;
28
+ function getAnalytics() {
29
+ return analyticsInstance;
30
+ }
27
31
  var PosthogAnalytics = class {
28
32
  sessionId;
29
33
  client;
@@ -35,13 +39,13 @@ var PosthogAnalytics = class {
35
39
  host = "https://app.posthog.com"
36
40
  }) {
37
41
  this.version = version;
38
- const cliConfigPath = path.join(__dirname, "mastra-cli.json");
42
+ const cliConfigPath = path3.join(__dirname, "mastra-cli.json");
39
43
  if (existsSync(cliConfigPath)) {
40
44
  try {
41
45
  const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
42
46
  this.distinctId = distinctId;
43
47
  this.sessionId = sessionId;
44
- } catch (e) {
48
+ } catch {
45
49
  this.sessionId = randomUUID();
46
50
  this.distinctId = this.getDistinctId();
47
51
  }
@@ -63,15 +67,16 @@ var PosthogAnalytics = class {
63
67
  }
64
68
  writeCliConfig({ distinctId, sessionId }) {
65
69
  try {
66
- writeFileSync(path.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
67
- } catch (e) {
70
+ writeFileSync(path3.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
71
+ } catch {
68
72
  }
69
73
  }
70
74
  initializePostHog(apiKey, host) {
71
75
  this.client = new PostHog(apiKey, {
72
76
  host,
73
77
  flushAt: 1,
74
- flushInterval: 0
78
+ flushInterval: 0,
79
+ disableGeoip: false
75
80
  });
76
81
  this.captureSessionStart();
77
82
  process.on("exit", () => {
@@ -80,7 +85,7 @@ var PosthogAnalytics = class {
80
85
  });
81
86
  }
82
87
  isTelemetryEnabled() {
83
- if (process.env.NO_MASTRA_TELEMETRY) {
88
+ if (process.env.MASTRA_TELEMETRY_DISABLED) {
84
89
  return false;
85
90
  }
86
91
  return true;
@@ -112,6 +117,22 @@ var PosthogAnalytics = class {
112
117
  }
113
118
  });
114
119
  }
120
+ trackEvent(eventName, properties) {
121
+ try {
122
+ if (!this.client) {
123
+ return;
124
+ }
125
+ this.client.capture({
126
+ distinctId: this.distinctId,
127
+ event: eventName,
128
+ properties: {
129
+ ...this.getSystemProperties(),
130
+ ...properties
131
+ }
132
+ });
133
+ } catch {
134
+ }
135
+ }
115
136
  trackCommand(options) {
116
137
  try {
117
138
  if (!this.client) {
@@ -135,17 +156,19 @@ var PosthogAnalytics = class {
135
156
  event: "cli_command",
136
157
  properties: {
137
158
  ...this.getSystemProperties(),
138
- ...commandData
159
+ ...commandData,
160
+ origin: options?.origin || "oss"
139
161
  }
140
162
  });
141
- } catch (e) {
163
+ } catch {
142
164
  }
143
165
  }
144
166
  // Helper method to wrap command execution with timing
145
167
  async trackCommandExecution({
146
168
  command,
147
169
  args,
148
- execution
170
+ execution,
171
+ origin
149
172
  }) {
150
173
  const startTime = process.hrtime();
151
174
  try {
@@ -156,7 +179,8 @@ var PosthogAnalytics = class {
156
179
  command,
157
180
  args,
158
181
  durationMs,
159
- status: "success"
182
+ status: "success",
183
+ origin
160
184
  });
161
185
  return result;
162
186
  } catch (error) {
@@ -167,7 +191,8 @@ var PosthogAnalytics = class {
167
191
  args,
168
192
  durationMs,
169
193
  status: "error",
170
- error: error instanceof Error ? error.message : String(error)
194
+ error: error instanceof Error ? error.message : String(error),
195
+ origin
171
196
  });
172
197
  throw error;
173
198
  }
@@ -179,7 +204,7 @@ var PosthogAnalytics = class {
179
204
  }
180
205
  try {
181
206
  await this.client.shutdown();
182
- } catch (e) {
207
+ } catch {
183
208
  }
184
209
  }
185
210
  };
@@ -344,69 +369,335 @@ function requirePicocolors () {
344
369
  var picocolorsExports = /*@__PURE__*/ requirePicocolors();
345
370
  var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
346
371
 
347
- 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(`
348
- `)];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]===`
349
- `?(C&&(t+=L("")),s&&o&&(t+=N(o))):h===`
350
- `&&(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,`
372
+ 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(`
373
+ `)];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]===`
374
+ `?(i&&(F+=K$1("")),s&&o&&(F+=z(o))):a===`
375
+ `&&(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,`
351
376
  `).split(`
352
- `).map(t=>oD(t,u,F)).join(`
353
- `)}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(`
354
- `),t=u.split(`
355
- `),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(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(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(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(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(`
356
- `),v(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(`
357
- `).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(`
358
- `);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(`
359
- `).slice(t);this.output.write(s.join(`
360
- `)),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();}}
361
-
362
- 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","+"),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)}
363
- ${y(this.state)} ${s.message}
364
- `,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()}
365
- ${color2.yellow(a)} ${i}
366
- ${color2.yellow($)} ${color2.yellow(this.error)}
367
- `;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()?`
368
- `+color2.gray(a):""}`;default:return `${n}${color2.cyan(a)} ${i}
369
- ${color2.cyan($)}
370
- `}}}).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)}
371
- ${y(this.state)} ${s.message}
372
- `,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))}
373
- ${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}`}
374
- ${color2.cyan($)}
375
- `}}}).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)}
376
- ${y(this.state)} ${s.message}
377
- `;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")}
378
- ${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(`
379
- ${color2.cyan(a)} `)}
380
- ${color2.cyan($)}
381
- `}}}).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.
382
- ${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)}
383
- ${y(this.state)} ${s.message}
384
- `;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}
385
- ${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
386
- `).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
387
- `);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
388
- ${color2.yellow(a)} `)+`
389
- `+r+`
390
- `}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
391
- ${color2.cyan(a)} `)}
392
- ${color2.cyan($)}
393
- `}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
394
- ${s}
377
+ `).map(F=>lD(F,u,t)).join(`
378
+ `)}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(`
379
+ `),F=u.split(`
380
+ `),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(`
381
+ `),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(`
382
+ `).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(`
383
+ `);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(`
384
+ `).slice(F);this.output.write(s.join(`
385
+ `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}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);});}}
386
+
387
+ 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)}
388
+ ${b(this.state)} ${t.message}
389
+ `,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()}
390
+ ${color2.yellow(o)} ${i}
391
+ ${color2.yellow(d)} ${color2.yellow(this.error)}
392
+ `;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()?`
393
+ ${color2.gray(o)}`:""}`;default:return `${n}${color2.cyan(o)} ${i}
394
+ ${color2.cyan(d)}
395
+ `}}}).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)}
396
+ ${b(this.state)} ${t.message}
397
+ `;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")}
398
+ ${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(`
399
+ ${color2.cyan(o)} `)}
400
+ ${color2.cyan(d)}
401
+ `}}}).prompt()},Me=(t="",n="")=>{const r=`
402
+ ${t}
395
403
  `.split(`
396
- `),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(`
397
- `);process.stdout.write(`${color2.gray(a)}
398
- ${color2.green(M)} ${color2.reset(n)} ${color2.gray(G.repeat(Math.max(r-i-1,1))+H)}
399
- ${o}
400
- ${color2.gray(ee+G.repeat(r+2)+te)}
401
- `);},he=(s="")=>{process.stdout.write(`${color2.gray($)} ${color2.red(s)}
404
+ `),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(`
405
+ `);process.stdout.write(`${color2.gray(o)}
406
+ ${color2.green(C)} ${color2.reset(n)} ${color2.gray(_.repeat(Math.max(s-i-1,1))+me)}
407
+ ${c}
408
+ ${color2.gray(de+_.repeat(s+2)+pe)}
409
+ `);},xe=(t="")=>{process.stdout.write(`${color2.gray(d)} ${color2.red(t)}
410
+
411
+ `);},Ie=(t="")=>{process.stdout.write(`${color2.gray(ue)} ${t}
412
+ `);},Se=(t="")=>{process.stdout.write(`${color2.gray(o)}
413
+ ${color2.gray(d)} ${t}
414
+
415
+ `);},M={message:(t="",{symbol:n=color2.gray(o)}={})=>{const r=[`${color2.gray(o)}`];if(t){const[i,...s]=t.split(`
416
+ `);r.push(`${n} ${i}`,...s.map(c=>`${color2.gray(o)} ${c}`));}process.stdout.write(`${r.join(`
417
+ `)}
418
+ `);},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(`
419
+ `);const m=$.split(`
420
+ `);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)}
421
+ `);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)}
422
+ `):process.stdout.write(`${w} ${l}
423
+ `),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};
424
+
425
+ var shellQuote$1 = {};
426
+
427
+ var quote;
428
+ var hasRequiredQuote;
429
+
430
+ function requireQuote () {
431
+ if (hasRequiredQuote) return quote;
432
+ hasRequiredQuote = 1;
433
+
434
+ quote = function quote(xs) {
435
+ return xs.map(function (s) {
436
+ if (s === '') {
437
+ return '\'\'';
438
+ }
439
+ if (s && typeof s === 'object') {
440
+ return s.op.replace(/(.)/g, '\\$1');
441
+ }
442
+ if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
443
+ return "'" + s.replace(/(['])/g, '\\$1') + "'";
444
+ }
445
+ if ((/["'\s]/).test(s)) {
446
+ return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
447
+ }
448
+ return String(s).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2');
449
+ }).join(' ');
450
+ };
451
+ return quote;
452
+ }
402
453
 
403
- `);},pe=(s="")=>{process.stdout.write(`${color2.gray(Q)} ${s}
404
- `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
405
- ${color2.gray($)} ${s}
454
+ var parse;
455
+ var hasRequiredParse;
456
+
457
+ function requireParse () {
458
+ if (hasRequiredParse) return parse;
459
+ hasRequiredParse = 1;
460
+
461
+ // '<(' is process substitution operator and
462
+ // can be parsed the same as control operator
463
+ var CONTROL = '(?:' + [
464
+ '\\|\\|',
465
+ '\\&\\&',
466
+ ';;',
467
+ '\\|\\&',
468
+ '\\<\\(',
469
+ '\\<\\<\\<',
470
+ '>>',
471
+ '>\\&',
472
+ '<\\&',
473
+ '[&;()|<>]'
474
+ ].join('|') + ')';
475
+ var controlRE = new RegExp('^' + CONTROL + '$');
476
+ var META = '|&;()<> \\t';
477
+ var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"';
478
+ var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'';
479
+ var hash = /^#$/;
480
+
481
+ var SQ = "'";
482
+ var DQ = '"';
483
+ var DS = '$';
484
+
485
+ var TOKEN = '';
486
+ var mult = 0x100000000; // Math.pow(16, 8);
487
+ for (var i = 0; i < 4; i++) {
488
+ TOKEN += (mult * Math.random()).toString(16);
489
+ }
490
+ var startsWithToken = new RegExp('^' + TOKEN);
491
+
492
+ function matchAll(s, r) {
493
+ var origIndex = r.lastIndex;
494
+
495
+ var matches = [];
496
+ var matchObj;
497
+
498
+ while ((matchObj = r.exec(s))) {
499
+ matches.push(matchObj);
500
+ if (r.lastIndex === matchObj.index) {
501
+ r.lastIndex += 1;
502
+ }
503
+ }
504
+
505
+ r.lastIndex = origIndex;
406
506
 
407
- `);},_=()=>{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)}
408
- `);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}
409
- `),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};
507
+ return matches;
508
+ }
509
+
510
+ function getVar(env, pre, key) {
511
+ var r = typeof env === 'function' ? env(key) : env[key];
512
+ if (typeof r === 'undefined' && key != '') {
513
+ r = '';
514
+ } else if (typeof r === 'undefined') {
515
+ r = '$';
516
+ }
517
+
518
+ if (typeof r === 'object') {
519
+ return pre + TOKEN + JSON.stringify(r) + TOKEN;
520
+ }
521
+ return pre + r;
522
+ }
523
+
524
+ function parseInternal(string, env, opts) {
525
+ if (!opts) {
526
+ opts = {};
527
+ }
528
+ var BS = opts.escape || '\\';
529
+ var BAREWORD = '(\\' + BS + '[\'"' + META + ']|[^\\s\'"' + META + '])+';
530
+
531
+ var chunker = new RegExp([
532
+ '(' + CONTROL + ')', // control chars
533
+ '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+'
534
+ ].join('|'), 'g');
535
+
536
+ var matches = matchAll(string, chunker);
537
+
538
+ if (matches.length === 0) {
539
+ return [];
540
+ }
541
+ if (!env) {
542
+ env = {};
543
+ }
544
+
545
+ var commented = false;
546
+
547
+ return matches.map(function (match) {
548
+ var s = match[0];
549
+ if (!s || commented) {
550
+ return void undefined;
551
+ }
552
+ if (controlRE.test(s)) {
553
+ return { op: s };
554
+ }
555
+
556
+ // Hand-written scanner/parser for Bash quoting rules:
557
+ //
558
+ // 1. inside single quotes, all characters are printed literally.
559
+ // 2. inside double quotes, all characters are printed literally
560
+ // except variables prefixed by '$' and backslashes followed by
561
+ // either a double quote or another backslash.
562
+ // 3. outside of any quotes, backslashes are treated as escape
563
+ // characters and not printed (unless they are themselves escaped)
564
+ // 4. quote context can switch mid-token if there is no whitespace
565
+ // between the two quote contexts (e.g. all'one'"token" parses as
566
+ // "allonetoken")
567
+ var quote = false;
568
+ var esc = false;
569
+ var out = '';
570
+ var isGlob = false;
571
+ var i;
572
+
573
+ function parseEnvVar() {
574
+ i += 1;
575
+ var varend;
576
+ var varname;
577
+ var char = s.charAt(i);
578
+
579
+ if (char === '{') {
580
+ i += 1;
581
+ if (s.charAt(i) === '}') {
582
+ throw new Error('Bad substitution: ' + s.slice(i - 2, i + 1));
583
+ }
584
+ varend = s.indexOf('}', i);
585
+ if (varend < 0) {
586
+ throw new Error('Bad substitution: ' + s.slice(i));
587
+ }
588
+ varname = s.slice(i, varend);
589
+ i = varend;
590
+ } else if ((/[*@#?$!_-]/).test(char)) {
591
+ varname = char;
592
+ i += 1;
593
+ } else {
594
+ var slicedFromI = s.slice(i);
595
+ varend = slicedFromI.match(/[^\w\d_]/);
596
+ if (!varend) {
597
+ varname = slicedFromI;
598
+ i = s.length;
599
+ } else {
600
+ varname = slicedFromI.slice(0, varend.index);
601
+ i += varend.index - 1;
602
+ }
603
+ }
604
+ return getVar(env, '', varname);
605
+ }
606
+
607
+ for (i = 0; i < s.length; i++) {
608
+ var c = s.charAt(i);
609
+ isGlob = isGlob || (!quote && (c === '*' || c === '?'));
610
+ if (esc) {
611
+ out += c;
612
+ esc = false;
613
+ } else if (quote) {
614
+ if (c === quote) {
615
+ quote = false;
616
+ } else if (quote == SQ) {
617
+ out += c;
618
+ } else { // Double quote
619
+ if (c === BS) {
620
+ i += 1;
621
+ c = s.charAt(i);
622
+ if (c === DQ || c === BS || c === DS) {
623
+ out += c;
624
+ } else {
625
+ out += BS + c;
626
+ }
627
+ } else if (c === DS) {
628
+ out += parseEnvVar();
629
+ } else {
630
+ out += c;
631
+ }
632
+ }
633
+ } else if (c === DQ || c === SQ) {
634
+ quote = c;
635
+ } else if (controlRE.test(c)) {
636
+ return { op: s };
637
+ } else if (hash.test(c)) {
638
+ commented = true;
639
+ var commentObj = { comment: string.slice(match.index + i + 1) };
640
+ if (out.length) {
641
+ return [out, commentObj];
642
+ }
643
+ return [commentObj];
644
+ } else if (c === BS) {
645
+ esc = true;
646
+ } else if (c === DS) {
647
+ out += parseEnvVar();
648
+ } else {
649
+ out += c;
650
+ }
651
+ }
652
+
653
+ if (isGlob) {
654
+ return { op: 'glob', pattern: out };
655
+ }
656
+
657
+ return out;
658
+ }).reduce(function (prev, arg) { // finalize parsed arguments
659
+ // TODO: replace this whole reduce with a concat
660
+ return typeof arg === 'undefined' ? prev : prev.concat(arg);
661
+ }, []);
662
+ }
663
+
664
+ parse = function parse(s, env, opts) {
665
+ var mapped = parseInternal(s, env, opts);
666
+ if (typeof env !== 'function') {
667
+ return mapped;
668
+ }
669
+ return mapped.reduce(function (acc, s) {
670
+ if (typeof s === 'object') {
671
+ return acc.concat(s);
672
+ }
673
+ var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));
674
+ if (xs.length === 1) {
675
+ return acc.concat(xs[0]);
676
+ }
677
+ return acc.concat(xs.filter(Boolean).map(function (x) {
678
+ if (startsWithToken.test(x)) {
679
+ return JSON.parse(x.split(TOKEN)[1]);
680
+ }
681
+ return x;
682
+ }));
683
+ }, []);
684
+ };
685
+ return parse;
686
+ }
687
+
688
+ var hasRequiredShellQuote;
689
+
690
+ function requireShellQuote () {
691
+ if (hasRequiredShellQuote) return shellQuote$1;
692
+ hasRequiredShellQuote = 1;
693
+
694
+ shellQuote$1.quote = requireQuote();
695
+ shellQuote$1.parse = requireParse();
696
+ return shellQuote$1;
697
+ }
698
+
699
+ var shellQuoteExports = requireShellQuote();
700
+ var shellQuote = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
410
701
 
411
702
  // eslint-disable-next-line no-warning-comments
412
703
  // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
@@ -541,18 +832,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
541
832
  yellowBright: yellowBright
542
833
  });
543
834
 
544
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
835
+ const isUnicodeSupported = y$1.platform !== 'win32'
836
+ || Boolean(y$1.env.WT_SESSION) // Windows Terminal
837
+ || y$1.env.TERM_PROGRAM === 'vscode';
545
838
 
546
839
  const isInteractive = stream => Boolean(
547
840
  stream.isTTY
548
- && h.env.TERM !== 'dumb'
549
- && !('CI' in h.env),
841
+ && y$1.env.TERM !== 'dumb'
842
+ && !('CI' in y$1.env),
550
843
  );
551
844
 
552
845
  const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
553
846
  const successSymbol = green(isUnicodeSupported ? '✔' : '√');
554
847
  const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
555
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
848
+ const errorSymbol = red(isUnicodeSupported ? '' : '×');
556
849
 
557
850
  const defaultSpinner = {
558
851
  frames: isUnicodeSupported
@@ -595,7 +888,7 @@ class YoctoSpinner {
595
888
  this.#frames = spinner.frames;
596
889
  this.#interval = spinner.interval;
597
890
  this.#text = options.text ?? '';
598
- this.#stream = options.stream ?? h.stderr;
891
+ this.#stream = options.stream ?? y$1.stderr;
599
892
  this.#color = options.color ?? 'cyan';
600
893
  this.#isInteractive = isInteractive(this.#stream);
601
894
  this.#exitHandlerBound = this.#exitHandler.bind(this);
@@ -667,8 +960,8 @@ class YoctoSpinner {
667
960
  return this.#text;
668
961
  }
669
962
 
670
- set text(value = '') {
671
- this.#text = value;
963
+ set text(value) {
964
+ this.#text = value ?? '';
672
965
  this.#render();
673
966
  }
674
967
 
@@ -732,7 +1025,7 @@ class YoctoSpinner {
732
1025
 
733
1026
  #lineCount(text) {
734
1027
  const width = this.#stream.columns ?? 80;
735
- const lines = text.split('\n');
1028
+ const lines = stripVTControlCharacters(text).split('\n');
736
1029
 
737
1030
  let lineCount = 0;
738
1031
  for (const line of lines) {
@@ -755,13 +1048,13 @@ class YoctoSpinner {
755
1048
  }
756
1049
 
757
1050
  #subscribeToProcessEvents() {
758
- h.once('SIGINT', this.#exitHandlerBound);
759
- h.once('SIGTERM', this.#exitHandlerBound);
1051
+ y$1.once('SIGINT', this.#exitHandlerBound);
1052
+ y$1.once('SIGTERM', this.#exitHandlerBound);
760
1053
  }
761
1054
 
762
1055
  #unsubscribeFromProcessEvents() {
763
- h.off('SIGINT', this.#exitHandlerBound);
764
- h.off('SIGTERM', this.#exitHandlerBound);
1056
+ y$1.off('SIGINT', this.#exitHandlerBound);
1057
+ y$1.off('SIGTERM', this.#exitHandlerBound);
765
1058
  }
766
1059
 
767
1060
  #exitHandler(signal) {
@@ -772,7 +1065,7 @@ class YoctoSpinner {
772
1065
  // SIGINT: 128 + 2
773
1066
  // SIGTERM: 128 + 15
774
1067
  const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
775
- h.exit(exitCode);
1068
+ y$1.exit(exitCode);
776
1069
  }
777
1070
  }
778
1071
 
@@ -781,39 +1074,86 @@ function yoctoSpinner(options) {
781
1074
  }
782
1075
 
783
1076
  var LogLevel = {
784
- INFO: "info"};
785
- var Logger = class {
786
- logger;
1077
+ INFO: "info",
1078
+ ERROR: "error"};
1079
+ var MastraLogger = class {
1080
+ name;
1081
+ level;
787
1082
  transports;
788
1083
  constructor(options = {}) {
789
- this.transports = options.transports || {};
790
- const transportsAry = Object.entries(this.transports);
791
- this.logger = pino(
792
- {
793
- name: options.name || "app",
794
- level: options.level || LogLevel.INFO
795
- },
796
- options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? pretty({
1084
+ this.name = options.name || "Mastra";
1085
+ this.level = options.level || LogLevel.ERROR;
1086
+ this.transports = new Map(Object.entries(options.transports || {}));
1087
+ }
1088
+ getTransports() {
1089
+ return this.transports;
1090
+ }
1091
+ trackException(_error) {
1092
+ }
1093
+ async getLogs(transportId, params) {
1094
+ if (!transportId || !this.transports.has(transportId)) {
1095
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
1096
+ }
1097
+ return this.transports.get(transportId).getLogs(params) ?? {
1098
+ logs: [],
1099
+ total: 0,
1100
+ page: params?.page ?? 1,
1101
+ perPage: params?.perPage ?? 100,
1102
+ hasMore: false
1103
+ };
1104
+ }
1105
+ async getLogsByRunId({
1106
+ transportId,
1107
+ runId,
1108
+ fromDate,
1109
+ toDate,
1110
+ logLevel,
1111
+ filters,
1112
+ page,
1113
+ perPage
1114
+ }) {
1115
+ if (!transportId || !this.transports.has(transportId) || !runId) {
1116
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
1117
+ }
1118
+ return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
1119
+ logs: [],
1120
+ total: 0,
1121
+ page: page ?? 1,
1122
+ perPage: perPage ?? 100,
1123
+ hasMore: false
1124
+ };
1125
+ }
1126
+ };
1127
+
1128
+ var PinoLogger = class extends MastraLogger {
1129
+ logger;
1130
+ constructor(options = {}) {
1131
+ super(options);
1132
+ let prettyStream = void 0;
1133
+ if (!options.overrideDefaultTransports) {
1134
+ prettyStream = pretty({
797
1135
  colorize: true,
798
1136
  levelFirst: true,
799
1137
  ignore: "pid,hostname",
800
1138
  colorizeObjects: true,
801
1139
  translateTime: "SYS:standard",
802
1140
  singleLine: false
803
- }) : pino.multistream([
804
- ...transportsAry.map(([_, transport]) => ({
1141
+ });
1142
+ }
1143
+ const transportsAry = [...this.getTransports().entries()];
1144
+ this.logger = pino(
1145
+ {
1146
+ name: options.name || "app",
1147
+ level: options.level || LogLevel.INFO,
1148
+ formatters: options.formatters
1149
+ },
1150
+ options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
1151
+ ...transportsAry.map(([, transport]) => ({
805
1152
  stream: transport,
806
1153
  level: options.level || LogLevel.INFO
807
1154
  })),
808
1155
  {
809
- stream: pretty({
810
- colorize: true,
811
- levelFirst: true,
812
- ignore: "pid,hostname",
813
- colorizeObjects: true,
814
- translateTime: "SYS:standard",
815
- singleLine: false
816
- }),
1156
+ stream: prettyStream,
817
1157
  level: options.level || LogLevel.INFO
818
1158
  }
819
1159
  ])
@@ -831,31 +1171,7 @@ var Logger = class {
831
1171
  error(message, args = {}) {
832
1172
  this.logger.error(args, message);
833
1173
  }
834
- // Stream creation for process output handling
835
- createStream() {
836
- return new Transform({
837
- transform: (chunk, _encoding, callback) => {
838
- const line = chunk.toString().trim();
839
- if (line) {
840
- this.info(line);
841
- }
842
- callback(null, chunk);
843
- }
844
- });
845
- }
846
- async getLogs(transportId) {
847
- if (!transportId || !this.transports[transportId]) {
848
- return [];
849
- }
850
- return this.transports[transportId].getLogs();
851
- }
852
- async getLogsByRunId({ runId, transportId }) {
853
- return this.transports[transportId]?.getLogsByRunId({ runId });
854
- }
855
1174
  };
856
- function createLogger(options) {
857
- return new Logger(options);
858
- }
859
1175
 
860
1176
  function getPackageManager() {
861
1177
  const userAgent = process.env.npm_config_user_agent || "";
@@ -880,16 +1196,172 @@ function getPackageManager() {
880
1196
  }
881
1197
  return "npm";
882
1198
  }
883
- function getPackageManagerInstallCommand(pm) {
1199
+ var logger = new PinoLogger({
1200
+ name: "Mastra CLI",
1201
+ level: "info"
1202
+ });
1203
+ var exec = util.promisify(child_process.exec);
1204
+ async function cloneTemplate(options) {
1205
+ const { template, projectName, targetDir } = options;
1206
+ const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
1207
+ const spinner5 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
1208
+ try {
1209
+ if (await directoryExists(projectPath)) {
1210
+ spinner5.error(`Directory ${projectName} already exists`);
1211
+ throw new Error(`Directory ${projectName} already exists`);
1212
+ }
1213
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
1214
+ await updatePackageJson(projectPath, projectName);
1215
+ const envExamplePath = path3.join(projectPath, ".env.example");
1216
+ if (await fileExists(envExamplePath)) {
1217
+ await fs.copyFile(envExamplePath, path3.join(projectPath, ".env"));
1218
+ }
1219
+ spinner5.success(`Template "${template.title}" cloned successfully to ${projectName}`);
1220
+ return projectPath;
1221
+ } catch (error) {
1222
+ spinner5.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
1223
+ throw error;
1224
+ }
1225
+ }
1226
+ async function directoryExists(dirPath) {
1227
+ try {
1228
+ const stat = await fs.stat(dirPath);
1229
+ return stat.isDirectory();
1230
+ } catch {
1231
+ return false;
1232
+ }
1233
+ }
1234
+ async function fileExists(filePath) {
1235
+ try {
1236
+ const stat = await fs.stat(filePath);
1237
+ return stat.isFile();
1238
+ } catch {
1239
+ return false;
1240
+ }
1241
+ }
1242
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
1243
+ await fs.mkdir(targetPath, { recursive: true });
1244
+ try {
1245
+ const degitRepo = repoUrl.replace("https://github.com/", "");
1246
+ const degitCommand = shellQuote.quote(["npx", "degit", degitRepo, targetPath]);
1247
+ await exec(degitCommand, {
1248
+ cwd: process.cwd()
1249
+ });
1250
+ } catch {
1251
+ try {
1252
+ const gitCommand = shellQuote.quote(["git", "clone", repoUrl, targetPath]);
1253
+ await exec(gitCommand, {
1254
+ cwd: process.cwd()
1255
+ });
1256
+ const gitDir = path3.join(targetPath, ".git");
1257
+ if (await directoryExists(gitDir)) {
1258
+ await fs.rm(gitDir, { recursive: true, force: true });
1259
+ }
1260
+ } catch (gitError) {
1261
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
1262
+ }
1263
+ }
1264
+ }
1265
+ async function updatePackageJson(projectPath, projectName) {
1266
+ const packageJsonPath = path3.join(projectPath, "package.json");
1267
+ try {
1268
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
1269
+ const packageJson = JSON.parse(packageJsonContent);
1270
+ packageJson.name = projectName;
1271
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
1272
+ } catch (error) {
1273
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
1274
+ }
1275
+ }
1276
+ async function installDependencies(projectPath, packageManager) {
1277
+ const spinner5 = yoctoSpinner({ text: "Installing dependencies..." }).start();
1278
+ try {
1279
+ const pm = packageManager || getPackageManager();
1280
+ const installCommand = shellQuote.quote([pm, "install"]);
1281
+ await exec(installCommand, {
1282
+ cwd: projectPath
1283
+ });
1284
+ spinner5.success("Dependencies installed successfully");
1285
+ } catch (error) {
1286
+ spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
1287
+ throw error;
1288
+ }
1289
+ }
1290
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
1291
+ async function loadTemplates() {
1292
+ try {
1293
+ const response = await fetch(TEMPLATES_API_URL);
1294
+ if (!response.ok) {
1295
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
1296
+ }
1297
+ const templates = await response.json();
1298
+ return templates;
1299
+ } catch (error) {
1300
+ console.error("Error loading templates:", error);
1301
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
1302
+ }
1303
+ }
1304
+ function pluralize(count, singular, plural) {
1305
+ return count === 1 ? singular : plural || `${singular}s`;
1306
+ }
1307
+ async function selectTemplate(templates) {
1308
+ const choices = templates.map((template) => {
1309
+ const parts = [];
1310
+ if (template.agents?.length) {
1311
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
1312
+ }
1313
+ if (template.tools?.length) {
1314
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
1315
+ }
1316
+ if (template.workflows?.length) {
1317
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
1318
+ }
1319
+ if (template.mcp?.length) {
1320
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
1321
+ }
1322
+ if (template.networks?.length) {
1323
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
1324
+ }
1325
+ return {
1326
+ value: template,
1327
+ label: template.title,
1328
+ hint: parts.join(", ") || "Template components"
1329
+ };
1330
+ });
1331
+ const selected = await ve({
1332
+ message: "Select a template:",
1333
+ options: choices
1334
+ });
1335
+ if (pD(selected)) {
1336
+ return null;
1337
+ }
1338
+ return selected;
1339
+ }
1340
+ function findTemplateByName(templates, templateName) {
1341
+ let template = templates.find((t) => t.slug === templateName);
1342
+ if (template) return template;
1343
+ const slugWithPrefix = `template-${templateName}`;
1344
+ template = templates.find((t) => t.slug === slugWithPrefix);
1345
+ if (template) return template;
1346
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
1347
+ if (template) return template;
1348
+ return null;
1349
+ }
1350
+ function getDefaultProjectName(template) {
1351
+ return template.slug.replace(/^template-/, "");
1352
+ }
1353
+ function getPackageManagerAddCommand(pm) {
884
1354
  switch (pm) {
885
1355
  case "npm":
886
- return "install";
1356
+ return "install --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false";
887
1357
  case "yarn":
888
1358
  return "add";
889
1359
  case "pnpm":
1360
+ return "add --loglevel=error";
1361
+ case "bun":
890
1362
  return "add";
891
1363
  default:
892
- return "install";
1364
+ return "add";
893
1365
  }
894
1366
  }
895
1367
  var DepsService = class {
@@ -900,11 +1372,11 @@ var DepsService = class {
900
1372
  findLockFile(dir) {
901
1373
  const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
902
1374
  for (const file of lockFiles) {
903
- if (fs3__default__default.existsSync(path.join(dir, file))) {
1375
+ if (fs4__default__default.existsSync(path3.join(dir, file))) {
904
1376
  return file;
905
1377
  }
906
1378
  }
907
- const parentDir = path.resolve(dir, "..");
1379
+ const parentDir = path3.resolve(dir, "..");
908
1380
  if (parentDir !== dir) {
909
1381
  return this.findLockFile(parentDir);
910
1382
  }
@@ -926,14 +1398,10 @@ var DepsService = class {
926
1398
  }
927
1399
  }
928
1400
  async installPackages(packages) {
929
- let runCommand = this.packageManager;
930
- if (this.packageManager === "npm") {
931
- runCommand = `${this.packageManager} i`;
932
- } else {
933
- runCommand = `${this.packageManager} add`;
934
- }
1401
+ const pm = this.packageManager;
1402
+ const installCommand = getPackageManagerAddCommand(pm);
935
1403
  const packageList = packages.join(" ");
936
- return execa(`${runCommand} ${packageList}`, {
1404
+ return execa(`${pm} ${installCommand} ${packageList}`, {
937
1405
  all: true,
938
1406
  shell: true,
939
1407
  stdio: "inherit"
@@ -941,13 +1409,13 @@ var DepsService = class {
941
1409
  }
942
1410
  async checkDependencies(dependencies) {
943
1411
  try {
944
- const packageJsonPath = path.join(process.cwd(), "package.json");
1412
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
945
1413
  try {
946
- await fs4.access(packageJsonPath);
1414
+ await fs.access(packageJsonPath);
947
1415
  } catch {
948
1416
  return "No package.json file found in the current directory";
949
1417
  }
950
- const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
1418
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
951
1419
  for (const dependency of dependencies) {
952
1420
  if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
953
1421
  return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
@@ -961,30 +1429,135 @@ var DepsService = class {
961
1429
  }
962
1430
  async getProjectName() {
963
1431
  try {
964
- const packageJsonPath = path.join(process.cwd(), "package.json");
965
- const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1432
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1433
+ const packageJson = await fs.readFile(packageJsonPath, "utf-8");
966
1434
  const pkg = JSON.parse(packageJson);
967
1435
  return pkg.name;
968
1436
  } catch (err) {
969
1437
  throw err;
970
1438
  }
971
1439
  }
972
- async getPackageVersion() {
973
- const __filename = fileURLToPath(import.meta.url);
974
- const __dirname = dirname(__filename);
975
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
976
- const content = await fsExtra3.readJSON(pkgJsonPath);
977
- return content.version;
978
- }
979
1440
  async addScriptsToPackageJson(scripts) {
980
- const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1441
+ const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8"));
981
1442
  packageJson.scripts = {
982
1443
  ...packageJson.scripts,
983
1444
  ...scripts
984
1445
  };
985
- await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1446
+ await fs.writeFile("package.json", JSON.stringify(packageJson, null, 2));
986
1447
  }
987
1448
  };
1449
+ var args = ["-y", "@mastra/mcp-docs-server"];
1450
+ var createMcpConfig = (editor) => {
1451
+ if (editor === "vscode") {
1452
+ return {
1453
+ servers: {
1454
+ mastra: process.platform === `win32` ? {
1455
+ command: "cmd",
1456
+ args: ["/c", "npx", ...args],
1457
+ type: "stdio"
1458
+ } : {
1459
+ command: "npx",
1460
+ args,
1461
+ type: "stdio"
1462
+ }
1463
+ }
1464
+ };
1465
+ }
1466
+ return {
1467
+ mcpServers: {
1468
+ mastra: {
1469
+ command: "npx",
1470
+ args
1471
+ }
1472
+ }
1473
+ };
1474
+ };
1475
+ function makeConfig(original, editor) {
1476
+ if (editor === "vscode") {
1477
+ return {
1478
+ ...original,
1479
+ servers: {
1480
+ ...original?.servers || {},
1481
+ ...createMcpConfig(editor).servers
1482
+ }
1483
+ };
1484
+ }
1485
+ return {
1486
+ ...original,
1487
+ mcpServers: {
1488
+ ...original?.mcpServers || {},
1489
+ ...createMcpConfig(editor).mcpServers
1490
+ }
1491
+ };
1492
+ }
1493
+ async function writeMergedConfig(configPath, editor) {
1494
+ const configExists = existsSync(configPath);
1495
+ const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
1496
+ await ensureFile(configPath);
1497
+ await writeJSON(configPath, config, {
1498
+ spaces: 2
1499
+ });
1500
+ }
1501
+ var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1502
+ var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
1503
+ path3.join(process.cwd(), ".vscode", "mcp.json");
1504
+ var vscodeGlobalMCPConfigPath = path3.join(
1505
+ os.homedir(),
1506
+ 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")
1507
+ );
1508
+ async function installMastraDocsMCPServer({ editor, directory }) {
1509
+ if (editor === `cursor`) {
1510
+ await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
1511
+ }
1512
+ if (editor === `vscode`) {
1513
+ await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
1514
+ }
1515
+ if (editor === `cursor-global`) {
1516
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1517
+ if (alreadyInstalled) {
1518
+ return;
1519
+ }
1520
+ await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
1521
+ }
1522
+ if (editor === `windsurf`) {
1523
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1524
+ if (alreadyInstalled) {
1525
+ return;
1526
+ }
1527
+ await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
1528
+ }
1529
+ }
1530
+ async function globalMCPIsAlreadyInstalled(editor) {
1531
+ let configPath = ``;
1532
+ if (editor === "windsurf") {
1533
+ configPath = windsurfGlobalMCPConfigPath;
1534
+ } else if (editor === "cursor-global") {
1535
+ configPath = cursorGlobalMCPConfigPath;
1536
+ } else if (editor === "vscode") {
1537
+ configPath = vscodeGlobalMCPConfigPath;
1538
+ }
1539
+ if (!configPath || !existsSync(configPath)) {
1540
+ return false;
1541
+ }
1542
+ try {
1543
+ const configContents = await readJSON(configPath);
1544
+ if (!configContents) return false;
1545
+ if (editor === "vscode") {
1546
+ if (!configContents.servers) return false;
1547
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1548
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1549
+ );
1550
+ return hasMastraMCP2;
1551
+ }
1552
+ if (!configContents?.mcpServers) return false;
1553
+ const hasMastraMCP = Object.values(configContents.mcpServers).some(
1554
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1555
+ );
1556
+ return hasMastraMCP;
1557
+ } catch {
1558
+ return false;
1559
+ }
1560
+ }
988
1561
  var EnvService = class {
989
1562
  };
990
1563
  var FileEnvService = class extends EnvService {
@@ -995,7 +1568,7 @@ var FileEnvService = class extends EnvService {
995
1568
  }
996
1569
  readFile(filePath) {
997
1570
  return new Promise((resolve, reject) => {
998
- fs3__default.readFile(filePath, "utf8", (err, data) => {
1571
+ fs4__default.readFile(filePath, "utf8", (err, data) => {
999
1572
  if (err) reject(err);
1000
1573
  else resolve(data);
1001
1574
  });
@@ -1003,7 +1576,7 @@ var FileEnvService = class extends EnvService {
1003
1576
  }
1004
1577
  writeFile({ filePath, data }) {
1005
1578
  return new Promise((resolve, reject) => {
1006
- fs3__default.writeFile(filePath, data, "utf8", (err) => {
1579
+ fs4__default.writeFile(filePath, data, "utf8", (err) => {
1007
1580
  if (err) reject(err);
1008
1581
  else resolve();
1009
1582
  });
@@ -1056,25 +1629,25 @@ var FileService = class {
1056
1629
  */
1057
1630
  async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1058
1631
  const __filename = fileURLToPath(import.meta.url);
1059
- const __dirname = path.dirname(__filename);
1060
- const filePath = path.resolve(__dirname, "starter-files", inputFile);
1061
- const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1062
- if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1632
+ const __dirname = path3.dirname(__filename);
1633
+ const filePath = path3.resolve(__dirname, "starter-files", inputFile);
1634
+ const fileString = fs4__default__default.readFileSync(filePath, "utf8");
1635
+ if (fs4__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1063
1636
  console.log(`${outputFilePath} already exists`);
1064
1637
  return false;
1065
1638
  }
1066
- await fsExtra3.outputFile(outputFilePath, fileString);
1639
+ await fsExtra2.outputFile(outputFilePath, fileString);
1067
1640
  return true;
1068
1641
  }
1069
1642
  async setupEnvFile({ dbUrl }) {
1070
- const envPath = path.join(process.cwd(), ".env.development");
1071
- await fsExtra3.ensureFile(envPath);
1643
+ const envPath = path3.join(process.cwd(), ".env.development");
1644
+ await fsExtra2.ensureFile(envPath);
1072
1645
  const fileEnvService = new FileEnvService(envPath);
1073
1646
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1074
1647
  }
1075
1648
  getFirstExistingFile(files) {
1076
1649
  for (const f of files) {
1077
- if (fs3__default__default.existsSync(f)) {
1650
+ if (fs4__default__default.existsSync(f)) {
1078
1651
  return f;
1079
1652
  }
1080
1653
  }
@@ -1084,18 +1657,22 @@ var FileService = class {
1084
1657
  filePath,
1085
1658
  replacements
1086
1659
  }) {
1087
- let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1660
+ let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
1088
1661
  replacements.forEach(({ search, replace }) => {
1089
1662
  fileContent = fileContent.replaceAll(search, replace);
1090
1663
  });
1091
- fs3__default__default.writeFileSync(filePath, fileContent);
1664
+ fs4__default__default.writeFileSync(filePath, fileContent);
1665
+ }
1666
+ };
1667
+ var exec2 = util.promisify(child_process.exec);
1668
+ var getAISDKPackageVersion = (llmProvider) => {
1669
+ switch (llmProvider) {
1670
+ case "cerebras":
1671
+ return "^0.2.14";
1672
+ default:
1673
+ return "^1.0.0";
1092
1674
  }
1093
1675
  };
1094
- createLogger({
1095
- name: "Mastra CLI",
1096
- level: "debug"
1097
- });
1098
- var exec = util.promisify(child_process.exec);
1099
1676
  var getAISDKPackage = (llmProvider) => {
1100
1677
  switch (llmProvider) {
1101
1678
  case "openai":
@@ -1104,6 +1681,12 @@ var getAISDKPackage = (llmProvider) => {
1104
1681
  return "@ai-sdk/anthropic";
1105
1682
  case "groq":
1106
1683
  return "@ai-sdk/groq";
1684
+ case "google":
1685
+ return "@ai-sdk/google";
1686
+ case "cerebras":
1687
+ return "@ai-sdk/cerebras";
1688
+ case "mistral":
1689
+ return "@ai-sdk/mistral";
1107
1690
  default:
1108
1691
  return "@ai-sdk/openai";
1109
1692
  }
@@ -1113,180 +1696,217 @@ var getProviderImportAndModelItem = (llmProvider) => {
1113
1696
  let modelItem = "";
1114
1697
  if (llmProvider === "openai") {
1115
1698
  providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1116
- modelItem = `openai('gpt-4o')`;
1699
+ modelItem = `openai('gpt-4o-mini')`;
1117
1700
  } else if (llmProvider === "anthropic") {
1118
1701
  providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1119
1702
  modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
1120
1703
  } else if (llmProvider === "groq") {
1121
1704
  providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
1122
- modelItem = `groq('llama3-groq-70b-8192-tool-use-preview')`;
1705
+ modelItem = `groq('llama-3.3-70b-versatile')`;
1706
+ } else if (llmProvider === "google") {
1707
+ providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1708
+ modelItem = `google('gemini-2.5-pro')`;
1709
+ } else if (llmProvider === "cerebras") {
1710
+ providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1711
+ modelItem = `cerebras('llama-3.3-70b')`;
1712
+ } else if (llmProvider === "mistral") {
1713
+ providerImport = `import { mistral } from '${getAISDKPackage(llmProvider)}';`;
1714
+ modelItem = `mistral('mistral-medium-2508')`;
1123
1715
  }
1124
1716
  return { providerImport, modelItem };
1125
1717
  };
1126
1718
  async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1127
1719
  const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1128
1720
  const instructions = `
1129
- You are a helpful weather assistant that provides accurate weather information.
1721
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1130
1722
 
1131
1723
  Your primary function is to help users get weather details for specific locations. When responding:
1132
1724
  - Always ask for a location if none is provided
1725
+ - If the location name isn't in English, please translate it
1133
1726
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1134
1727
  - Include relevant details like humidity, wind conditions, and precipitation
1135
1728
  - Keep responses concise but informative
1729
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1730
+ - If the user asks for activities, respond in the format they request.
1136
1731
 
1137
1732
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1138
1733
  `;
1139
1734
  const content = `
1140
- ${providerImport}
1735
+ ${providerImport}
1141
1736
  import { Agent } from '@mastra/core/agent';
1142
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1737
+ import { Memory } from '@mastra/memory';
1738
+ import { LibSQLStore } from '@mastra/libsql';
1739
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1143
1740
 
1144
1741
  export const weatherAgent = new Agent({
1145
1742
  name: 'Weather Agent',
1146
1743
  instructions: \`${instructions}\`,
1147
1744
  model: ${modelItem},
1148
1745
  ${addExampleTool ? "tools: { weatherTool }," : ""}
1746
+ memory: new Memory({
1747
+ storage: new LibSQLStore({
1748
+ url: "file:../mastra.db", // path is relative to the .mastra/output directory
1749
+ })
1750
+ })
1149
1751
  });
1150
1752
  `;
1151
1753
  const formattedContent = await prettier.format(content, {
1152
1754
  parser: "typescript",
1153
1755
  singleQuote: true
1154
1756
  });
1155
- await fs4.writeFile(destPath, "");
1156
- await fs4.writeFile(destPath, formattedContent);
1757
+ await fs.writeFile(destPath, "");
1758
+ await fs.writeFile(destPath, formattedContent);
1157
1759
  }
1158
- async function writeWorkflowSample(destPath, llmProvider) {
1159
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1160
- const content = `${providerImport}
1161
- import { Agent } from '@mastra/core/agent';
1162
- import { Step, Workflow } from '@mastra/core/workflows';
1760
+ async function writeWorkflowSample(destPath) {
1761
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1163
1762
  import { z } from 'zod';
1164
1763
 
1165
- const llm = ${modelItem};
1764
+ const forecastSchema = z.object({
1765
+ date: z.string(),
1766
+ maxTemp: z.number(),
1767
+ minTemp: z.number(),
1768
+ precipitationChance: z.number(),
1769
+ condition: z.string(),
1770
+ location: z.string(),
1771
+ })
1166
1772
 
1167
- const agent = new Agent({
1168
- name: 'Weather Agent',
1169
- model: llm,
1170
- instructions: \`
1171
- You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
1172
-
1173
- For each day in the forecast, structure your response exactly as follows:
1174
-
1175
- \u{1F4C5} [Day, Month Date, Year]
1176
- \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
1177
-
1178
- \u{1F321}\uFE0F WEATHER SUMMARY
1179
- \u2022 Conditions: [brief description]
1180
- \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1181
- \u2022 Precipitation: [X% chance]
1182
-
1183
- \u{1F305} MORNING ACTIVITIES
1184
- Outdoor:
1185
- \u2022 [Activity Name] - [Brief description including specific location/route]
1186
- Best timing: [specific time range]
1187
- Note: [relevant weather consideration]
1188
-
1189
- \u{1F31E} AFTERNOON ACTIVITIES
1190
- Outdoor:
1191
- \u2022 [Activity Name] - [Brief description including specific location/route]
1192
- Best timing: [specific time range]
1193
- Note: [relevant weather consideration]
1194
-
1195
- \u{1F3E0} INDOOR ALTERNATIVES
1196
- \u2022 [Activity Name] - [Brief description including specific venue]
1197
- Ideal for: [weather condition that would trigger this alternative]
1198
-
1199
- \u26A0\uFE0F SPECIAL CONSIDERATIONS
1200
- \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1201
-
1202
- Guidelines:
1203
- - Suggest 2-3 time-specific outdoor activities per day
1204
- - Include 1-2 indoor backup options
1205
- - For precipitation >50%, lead with indoor activities
1206
- - All activities must be specific to the location
1207
- - Include specific venues, trails, or locations
1208
- - Consider activity intensity based on temperature
1209
- - Keep descriptions concise but informative
1210
-
1211
- Maintain this exact formatting for consistency, using the emoji and section headers as shown.
1212
- \`,
1213
- });
1773
+ function getWeatherCondition(code: number): string {
1774
+ const conditions: Record<number, string> = {
1775
+ 0: 'Clear sky',
1776
+ 1: 'Mainly clear',
1777
+ 2: 'Partly cloudy',
1778
+ 3: 'Overcast',
1779
+ 45: 'Foggy',
1780
+ 48: 'Depositing rime fog',
1781
+ 51: 'Light drizzle',
1782
+ 53: 'Moderate drizzle',
1783
+ 55: 'Dense drizzle',
1784
+ 61: 'Slight rain',
1785
+ 63: 'Moderate rain',
1786
+ 65: 'Heavy rain',
1787
+ 71: 'Slight snow fall',
1788
+ 73: 'Moderate snow fall',
1789
+ 75: 'Heavy snow fall',
1790
+ 95: 'Thunderstorm',
1791
+ }
1792
+ return conditions[code] || 'Unknown'
1793
+ }
1214
1794
 
1215
- const fetchWeather = new Step({
1795
+ const fetchWeather = createStep({
1216
1796
  id: 'fetch-weather',
1217
1797
  description: 'Fetches weather forecast for a given city',
1218
1798
  inputSchema: z.object({
1219
1799
  city: z.string().describe('The city to get the weather for'),
1220
1800
  }),
1221
- execute: async ({ context }) => {
1222
- const triggerData = context?.getStepPayload<{ city: string }>('trigger');
1223
-
1224
- if (!triggerData) {
1225
- throw new Error('Trigger data not found');
1801
+ outputSchema: forecastSchema,
1802
+ execute: async ({ inputData }) => {
1803
+ if (!inputData) {
1804
+ throw new Error('Input data not found');
1226
1805
  }
1227
1806
 
1228
- const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(triggerData.city)}&count=1\`;
1807
+ const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
1229
1808
  const geocodingResponse = await fetch(geocodingUrl);
1230
1809
  const geocodingData = (await geocodingResponse.json()) as {
1231
1810
  results: { latitude: number; longitude: number; name: string }[];
1232
1811
  };
1233
1812
 
1234
1813
  if (!geocodingData.results?.[0]) {
1235
- throw new Error(\`Location '\${triggerData.city}' not found\`);
1814
+ throw new Error(\`Location '\${inputData.city}' not found\`);
1236
1815
  }
1237
1816
 
1238
1817
  const { latitude, longitude, name } = geocodingData.results[0];
1239
1818
 
1240
- const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_mean,weathercode&timezone=auto\`;
1819
+ const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&current=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
1241
1820
  const response = await fetch(weatherUrl);
1242
1821
  const data = (await response.json()) as {
1243
- daily: {
1244
- time: string[];
1245
- temperature_2m_max: number[];
1246
- temperature_2m_min: number[];
1247
- precipitation_probability_mean: number[];
1248
- weathercode: number[];
1249
- };
1250
- };
1822
+ current: {
1823
+ time: string
1824
+ precipitation: number
1825
+ weathercode: number
1826
+ }
1827
+ hourly: {
1828
+ precipitation_probability: number[]
1829
+ temperature_2m: number[]
1830
+ }
1831
+ }
1251
1832
 
1252
- const forecast = data.daily.time.map((date: string, index: number) => ({
1253
- date,
1254
- maxTemp: data.daily.temperature_2m_max[index],
1255
- minTemp: data.daily.temperature_2m_min[index],
1256
- precipitationChance: data.daily.precipitation_probability_mean[index],
1257
- condition: getWeatherCondition(data.daily.weathercode[index]!),
1258
- location: name,
1259
- }));
1833
+ const forecast = {
1834
+ date: new Date().toISOString(),
1835
+ maxTemp: Math.max(...data.hourly.temperature_2m),
1836
+ minTemp: Math.min(...data.hourly.temperature_2m),
1837
+ condition: getWeatherCondition(data.current.weathercode),
1838
+ precipitationChance: data.hourly.precipitation_probability.reduce(
1839
+ (acc, curr) => Math.max(acc, curr),
1840
+ 0
1841
+ ),
1842
+ location: name
1843
+ }
1260
1844
 
1261
1845
  return forecast;
1262
1846
  },
1263
1847
  });
1264
1848
 
1265
- const forecastSchema = z.array(
1266
- z.object({
1267
- date: z.string(),
1268
- maxTemp: z.number(),
1269
- minTemp: z.number(),
1270
- precipitationChance: z.number(),
1271
- condition: z.string(),
1272
- location: z.string(),
1273
- }),
1274
- );
1275
1849
 
1276
- const planActivities = new Step({
1850
+ const planActivities = createStep({
1277
1851
  id: 'plan-activities',
1278
1852
  description: 'Suggests activities based on weather conditions',
1279
1853
  inputSchema: forecastSchema,
1280
- execute: async ({ context, mastra }) => {
1281
- const forecast = context?.getStepPayload<z.infer<typeof forecastSchema>>('fetch-weather');
1854
+ outputSchema: z.object({
1855
+ activities: z.string(),
1856
+ }),
1857
+ execute: async ({ inputData, mastra }) => {
1858
+ const forecast = inputData
1859
+
1860
+ if (!forecast) {
1861
+ throw new Error('Forecast data not found')
1862
+ }
1282
1863
 
1283
- if (!forecast || forecast.length === 0) {
1284
- throw new Error('Forecast data not found');
1864
+ const agent = mastra?.getAgent('weatherAgent');
1865
+ if (!agent) {
1866
+ throw new Error('Weather agent not found');
1285
1867
  }
1286
1868
 
1287
- const prompt = \`Based on the following weather forecast for \${forecast[0]?.location}, suggest appropriate activities:
1869
+ const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1288
1870
  \${JSON.stringify(forecast, null, 2)}
1289
- \`;
1871
+ For each day in the forecast, structure your response exactly as follows:
1872
+
1873
+ \u{1F4C5} [Day, Month Date, Year]
1874
+ \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
1875
+
1876
+ \u{1F321}\uFE0F WEATHER SUMMARY
1877
+ \u2022 Conditions: [brief description]
1878
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1879
+ \u2022 Precipitation: [X% chance]
1880
+
1881
+ \u{1F305} MORNING ACTIVITIES
1882
+ Outdoor:
1883
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1884
+ Best timing: [specific time range]
1885
+ Note: [relevant weather consideration]
1886
+
1887
+ \u{1F31E} AFTERNOON ACTIVITIES
1888
+ Outdoor:
1889
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1890
+ Best timing: [specific time range]
1891
+ Note: [relevant weather consideration]
1892
+
1893
+ \u{1F3E0} INDOOR ALTERNATIVES
1894
+ \u2022 [Activity Name] - [Brief description including specific venue]
1895
+ Ideal for: [weather condition that would trigger this alternative]
1896
+
1897
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1898
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1899
+
1900
+ Guidelines:
1901
+ - Suggest 2-3 time-specific outdoor activities per day
1902
+ - Include 1-2 indoor backup options
1903
+ - For precipitation >50%, lead with indoor activities
1904
+ - All activities must be specific to the location
1905
+ - Include specific venues, trails, or locations
1906
+ - Consider activity intensity based on temperature
1907
+ - Keep descriptions concise but informative
1908
+
1909
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1290
1910
 
1291
1911
  const response = await agent.stream([
1292
1912
  {
@@ -1295,45 +1915,29 @@ const planActivities = new Step({
1295
1915
  },
1296
1916
  ]);
1297
1917
 
1918
+ let activitiesText = '';
1919
+
1298
1920
  for await (const chunk of response.textStream) {
1299
1921
  process.stdout.write(chunk);
1922
+ activitiesText += chunk;
1300
1923
  }
1301
1924
 
1302
1925
  return {
1303
- activities: response.text,
1926
+ activities: activitiesText,
1304
1927
  };
1305
1928
  },
1306
1929
  });
1307
1930
 
1308
- function getWeatherCondition(code: number): string {
1309
- const conditions: Record<number, string> = {
1310
- 0: 'Clear sky',
1311
- 1: 'Mainly clear',
1312
- 2: 'Partly cloudy',
1313
- 3: 'Overcast',
1314
- 45: 'Foggy',
1315
- 48: 'Depositing rime fog',
1316
- 51: 'Light drizzle',
1317
- 53: 'Moderate drizzle',
1318
- 55: 'Dense drizzle',
1319
- 61: 'Slight rain',
1320
- 63: 'Moderate rain',
1321
- 65: 'Heavy rain',
1322
- 71: 'Slight snow fall',
1323
- 73: 'Moderate snow fall',
1324
- 75: 'Heavy snow fall',
1325
- 95: 'Thunderstorm',
1326
- };
1327
- return conditions[code] || 'Unknown';
1328
- }
1329
-
1330
- const weatherWorkflow = new Workflow({
1331
- name: 'weather-workflow',
1332
- triggerSchema: z.object({
1931
+ const weatherWorkflow = createWorkflow({
1932
+ id: 'weather-workflow',
1933
+ inputSchema: z.object({
1333
1934
  city: z.string().describe('The city to get the weather for'),
1334
1935
  }),
1936
+ outputSchema: z.object({
1937
+ activities: z.string(),
1938
+ })
1335
1939
  })
1336
- .step(fetchWeather)
1940
+ .then(fetchWeather)
1337
1941
  .then(planActivities);
1338
1942
 
1339
1943
  weatherWorkflow.commit();
@@ -1344,7 +1948,7 @@ export { weatherWorkflow };`;
1344
1948
  semi: true,
1345
1949
  singleQuote: true
1346
1950
  });
1347
- await fs4.writeFile(destPath, formattedContent);
1951
+ await fs.writeFile(destPath, formattedContent);
1348
1952
  }
1349
1953
  async function writeToolSample(destPath) {
1350
1954
  const fileService = new FileService();
@@ -1357,14 +1961,14 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
1357
1961
  case "tools":
1358
1962
  return writeToolSample(destPath);
1359
1963
  case "workflows":
1360
- return writeWorkflowSample(destPath, llmprovider);
1964
+ return writeWorkflowSample(destPath);
1361
1965
  default:
1362
1966
  return "";
1363
1967
  }
1364
1968
  }
1365
1969
  var createComponentsDir = async (dirPath, component) => {
1366
1970
  const componentPath = dirPath + `/${component}`;
1367
- await fsExtra3.ensureDir(componentPath);
1971
+ await fsExtra2.ensureDir(componentPath);
1368
1972
  };
1369
1973
  var writeIndexFile = async ({
1370
1974
  dirPath,
@@ -1373,15 +1977,15 @@ var writeIndexFile = async ({
1373
1977
  addWorkflow
1374
1978
  }) => {
1375
1979
  const indexPath = dirPath + "/index.ts";
1376
- const destPath = path.join(indexPath);
1980
+ const destPath = path3.join(indexPath);
1377
1981
  try {
1378
- await fs4.writeFile(destPath, "");
1982
+ await fs.writeFile(destPath, "");
1379
1983
  const filteredExports = [
1380
1984
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1381
1985
  addAgent ? `agents: { weatherAgent },` : ""
1382
1986
  ].filter(Boolean);
1383
1987
  if (!addExample) {
1384
- await fs4.writeFile(
1988
+ await fs.writeFile(
1385
1989
  destPath,
1386
1990
  `
1387
1991
  import { Mastra } from '@mastra/core';
@@ -1391,17 +1995,22 @@ export const mastra = new Mastra()
1391
1995
  );
1392
1996
  return;
1393
1997
  }
1394
- await fs4.writeFile(
1998
+ await fs.writeFile(
1395
1999
  destPath,
1396
2000
  `
1397
2001
  import { Mastra } from '@mastra/core/mastra';
1398
- import { createLogger } from '@mastra/core/logger';
1399
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1400
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
2002
+ import { PinoLogger } from '@mastra/loggers';
2003
+ import { LibSQLStore } from '@mastra/libsql';
2004
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
2005
+ ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1401
2006
 
1402
2007
  export const mastra = new Mastra({
1403
2008
  ${filteredExports.join("\n ")}
1404
- logger: createLogger({
2009
+ storage: new LibSQLStore({
2010
+ // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
2011
+ url: ":memory:",
2012
+ }),
2013
+ logger: new PinoLogger({
1405
2014
  name: 'Mastra',
1406
2015
  level: 'info',
1407
2016
  }),
@@ -1422,6 +2031,15 @@ var getAPIKey = async (provider) => {
1422
2031
  case "groq":
1423
2032
  key = "GROQ_API_KEY";
1424
2033
  return key;
2034
+ case "google":
2035
+ key = "GOOGLE_GENERATIVE_AI_API_KEY";
2036
+ return key;
2037
+ case "cerebras":
2038
+ key = "CEREBRAS_API_KEY";
2039
+ return key;
2040
+ case "mistral":
2041
+ key = "MISTRAL_API_KEY";
2042
+ return key;
1425
2043
  default:
1426
2044
  return key;
1427
2045
  }
@@ -1431,21 +2049,23 @@ var writeAPIKey = async ({
1431
2049
  apiKey = "your-api-key"
1432
2050
  }) => {
1433
2051
  const key = await getAPIKey(provider);
1434
- await exec(`echo ${key}=${apiKey} >> .env.development`);
2052
+ const escapedKey = shellQuote.quote([key]);
2053
+ const escapedApiKey = shellQuote.quote([apiKey]);
2054
+ await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
1435
2055
  };
1436
2056
  var createMastraDir = async (directory) => {
1437
2057
  let dir = directory.trim().split("/").filter((item) => item !== "");
1438
- const dirPath = path.join(process.cwd(), ...dir, "mastra");
2058
+ const dirPath = path3.join(process.cwd(), ...dir, "mastra");
1439
2059
  try {
1440
- await fs4.access(dirPath);
2060
+ await fs.access(dirPath);
1441
2061
  return { ok: false };
1442
2062
  } catch {
1443
- await fsExtra3.ensureDir(dirPath);
2063
+ await fsExtra2.ensureDir(dirPath);
1444
2064
  return { ok: true, dirPath };
1445
2065
  }
1446
2066
  };
1447
2067
  var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1448
- const destPath = dirPath + `/${component}/index.ts`;
2068
+ const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
1449
2069
  try {
1450
2070
  await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1451
2071
  } catch (err) {
@@ -1453,38 +2073,27 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
1453
2073
  }
1454
2074
  };
1455
2075
  var interactivePrompt = async () => {
1456
- pe(color2.inverse("Mastra Init"));
1457
- const mastraProject = await ve(
2076
+ Ie(color2.inverse(" Mastra Init "));
2077
+ const mastraProject = await Ce(
1458
2078
  {
1459
- directory: () => ae({
2079
+ directory: () => he({
1460
2080
  message: "Where should we create the Mastra files? (default: src/)",
1461
2081
  placeholder: "src/",
1462
2082
  defaultValue: "src/"
1463
2083
  }),
1464
- components: () => $e({
1465
- message: "Choose components to install:",
1466
- options: [
1467
- { value: "agents", label: "Agents", hint: "recommended" },
1468
- {
1469
- value: "workflows",
1470
- label: "Workflows"
1471
- }
1472
- ]
1473
- }),
1474
- shouldAddTools: () => ce({
1475
- message: "Add tools?",
1476
- initialValue: false
1477
- }),
1478
- llmProvider: () => le({
2084
+ llmProvider: () => ve({
1479
2085
  message: "Select default provider:",
1480
2086
  options: [
1481
2087
  { value: "openai", label: "OpenAI", hint: "recommended" },
1482
2088
  { value: "anthropic", label: "Anthropic" },
1483
- { value: "groq", label: "Groq" }
2089
+ { value: "groq", label: "Groq" },
2090
+ { value: "google", label: "Google" },
2091
+ { value: "cerebras", label: "Cerebras" },
2092
+ { value: "mistral", label: "Mistral" }
1484
2093
  ]
1485
2094
  }),
1486
2095
  llmApiKey: async ({ results: { llmProvider } }) => {
1487
- const keyChoice = await le({
2096
+ const keyChoice = await ve({
1488
2097
  message: `Enter your ${llmProvider} API key?`,
1489
2098
  options: [
1490
2099
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1493,37 +2102,107 @@ var interactivePrompt = async () => {
1493
2102
  initialValue: "skip"
1494
2103
  });
1495
2104
  if (keyChoice === "enter") {
1496
- return ae({
2105
+ return he({
1497
2106
  message: "Enter your API key:",
1498
2107
  placeholder: "sk-..."
1499
2108
  });
1500
2109
  }
1501
2110
  return void 0;
1502
2111
  },
1503
- addExample: () => ce({
1504
- message: "Add example",
1505
- initialValue: false
1506
- })
2112
+ configureEditorWithDocsMCP: async () => {
2113
+ const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
2114
+ const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
2115
+ const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
2116
+ const editor = await ve({
2117
+ message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
2118
+ options: [
2119
+ { value: "skip", label: "Skip for now", hint: "default" },
2120
+ {
2121
+ value: "cursor",
2122
+ label: "Cursor (project only)",
2123
+ hint: cursorIsAlreadyInstalled ? `Already installed globally` : void 0
2124
+ },
2125
+ {
2126
+ value: "cursor-global",
2127
+ label: "Cursor (global, all projects)",
2128
+ hint: cursorIsAlreadyInstalled ? `Already installed` : void 0
2129
+ },
2130
+ {
2131
+ value: "windsurf",
2132
+ label: "Windsurf",
2133
+ hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2134
+ },
2135
+ {
2136
+ value: "vscode",
2137
+ label: "VSCode",
2138
+ hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
2139
+ }
2140
+ ]
2141
+ });
2142
+ if (editor === `skip`) return void 0;
2143
+ if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
2144
+ M.message(`
2145
+ Windsurf is already installed, skipping.`);
2146
+ return void 0;
2147
+ }
2148
+ if (editor === `vscode` && vscodeIsAlreadyInstalled) {
2149
+ M.message(`
2150
+ VSCode is already installed, skipping.`);
2151
+ return void 0;
2152
+ }
2153
+ if (editor === `cursor`) {
2154
+ M.message(
2155
+ `
2156
+ Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
2157
+ `
2158
+ );
2159
+ }
2160
+ if (editor === `cursor-global`) {
2161
+ const confirm2 = await ve({
2162
+ message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
2163
+ options: [
2164
+ { value: "yes", label: "Yes, I understand" },
2165
+ { value: "skip", label: "No, skip for now" }
2166
+ ]
2167
+ });
2168
+ if (confirm2 !== `yes`) {
2169
+ return void 0;
2170
+ }
2171
+ }
2172
+ if (editor === `windsurf`) {
2173
+ const confirm2 = await ve({
2174
+ message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
2175
+ This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
2176
+ options: [
2177
+ { value: "yes", label: "Yes, I understand" },
2178
+ { value: "skip", label: "No, skip for now" }
2179
+ ]
2180
+ });
2181
+ if (confirm2 !== `yes`) {
2182
+ return void 0;
2183
+ }
2184
+ }
2185
+ return editor;
2186
+ }
1507
2187
  },
1508
2188
  {
1509
2189
  onCancel: () => {
1510
- he("Operation cancelled.");
2190
+ xe("Operation cancelled.");
1511
2191
  process.exit(0);
1512
2192
  }
1513
2193
  }
1514
2194
  );
1515
- const { shouldAddTools, components, ...rest } = mastraProject;
1516
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1517
- return { ...rest, components: mastraComponents };
2195
+ return mastraProject;
1518
2196
  };
1519
- var s = _();
1520
- var exec2 = util.promisify(child_process.exec);
2197
+ var s = Y();
2198
+ var exec3 = util.promisify(child_process.exec);
1521
2199
  var init = async ({
1522
2200
  directory,
1523
2201
  addExample = false,
1524
2202
  components,
1525
2203
  llmProvider = "openai",
1526
- llmApiKey
2204
+ llmApiKey,
2205
+ configureEditorWithDocsMCP
1527
2206
  }) => {
1528
2207
  s.start("Initializing Mastra");
1529
2208
  try {
@@ -1549,22 +2228,43 @@ var init = async ({
1549
2228
  (component) => writeCodeSample(dirPath, component, llmProvider, components)
1550
2229
  )
1551
2230
  ]);
2231
+ const depService = new DepsService();
2232
+ const needsLibsql = await depService.checkDependencies(["@mastra/libsql"]) !== `ok`;
2233
+ if (needsLibsql) {
2234
+ await depService.installPackages(["@mastra/libsql"]);
2235
+ }
2236
+ const needsMemory = components.includes(`agents`) && await depService.checkDependencies(["@mastra/memory"]) !== `ok`;
2237
+ if (needsMemory) {
2238
+ await depService.installPackages(["@mastra/memory"]);
2239
+ }
2240
+ const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2241
+ if (needsLoggers) {
2242
+ await depService.installPackages(["@mastra/loggers"]);
2243
+ }
1552
2244
  }
1553
2245
  const key = await getAPIKey(llmProvider || "openai");
1554
2246
  const aiSdkPackage = getAISDKPackage(llmProvider);
1555
- const pm = getPackageManager();
1556
- const installCommand = getPackageManagerInstallCommand(pm);
1557
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
2247
+ const aiSdkPackageVersion = getAISDKPackageVersion(llmProvider);
2248
+ const depsService = new DepsService();
2249
+ const pm = depsService.packageManager;
2250
+ const installCommand = getPackageManagerAddCommand(pm);
2251
+ await exec3(`${pm} ${installCommand} ${aiSdkPackage}@${aiSdkPackageVersion}`);
2252
+ if (configureEditorWithDocsMCP) {
2253
+ await installMastraDocsMCPServer({
2254
+ editor: configureEditorWithDocsMCP,
2255
+ directory: process.cwd()
2256
+ });
2257
+ }
1558
2258
  s.stop();
1559
2259
  if (!llmApiKey) {
1560
- me(`
2260
+ Me(`
1561
2261
  ${color2.green("Mastra initialized successfully!")}
1562
2262
 
1563
2263
  Add your ${color2.cyan(key)} as an environment variable
1564
- in your ${color2.cyan(".env.development")} file
2264
+ in your ${color2.cyan(".env")} file
1565
2265
  `);
1566
2266
  } else {
1567
- me(`
2267
+ Me(`
1568
2268
  ${color2.green("Mastra initialized successfully!")}
1569
2269
  `);
1570
2270
  }
@@ -1575,10 +2275,13 @@ var init = async ({
1575
2275
  return { success: false };
1576
2276
  }
1577
2277
  };
1578
- var exec3 = util.promisify(child_process.exec);
1579
- var execWithTimeout = async (command, timeoutMs = 18e4) => {
2278
+ var exec4 = util.promisify(child_process.exec);
2279
+ var execWithTimeout = async (command, timeoutMs) => {
1580
2280
  try {
1581
- const promise = exec3(command, { killSignal: "SIGTERM" });
2281
+ const promise = exec4(command, { killSignal: "SIGTERM" });
2282
+ if (!timeoutMs) {
2283
+ return await promise;
2284
+ }
1582
2285
  let timeoutId;
1583
2286
  const timeout = new Promise((_, reject) => {
1584
2287
  timeoutId = setTimeout(() => reject(new Error("Command timed out")), timeoutMs);
@@ -1595,49 +2298,85 @@ var execWithTimeout = async (command, timeoutMs = 18e4) => {
1595
2298
  throw error;
1596
2299
  }
1597
2300
  } catch (error) {
1598
- console.error(error);
1599
2301
  throw error;
1600
2302
  }
1601
2303
  };
1602
- var createMastraProject = async ({ createVersionTag }) => {
1603
- pe(color2.inverse("Mastra Create"));
1604
- const projectName = await ae({
2304
+ async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
2305
+ let installCommand = getPackageManagerAddCommand(pm);
2306
+ if (isDev) {
2307
+ installCommand = `${installCommand} -D`;
2308
+ }
2309
+ try {
2310
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
2311
+ } catch (err) {
2312
+ if (versionTag === "@latest") {
2313
+ throw new Error(
2314
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2315
+ );
2316
+ }
2317
+ try {
2318
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2319
+ } catch (fallbackErr) {
2320
+ throw new Error(
2321
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2322
+ );
2323
+ }
2324
+ }
2325
+ }
2326
+ var createMastraProject = async ({
2327
+ projectName: name,
2328
+ createVersionTag,
2329
+ timeout
2330
+ }) => {
2331
+ Ie(color2.inverse(" Mastra Create "));
2332
+ const projectName = name ?? await he({
1605
2333
  message: "What do you want to name your project?",
1606
2334
  placeholder: "my-mastra-app",
1607
2335
  defaultValue: "my-mastra-app"
1608
2336
  });
1609
- if (lD(projectName)) {
1610
- he("Operation cancelled");
2337
+ if (pD(projectName)) {
2338
+ xe("Operation cancelled");
1611
2339
  process.exit(0);
1612
2340
  }
1613
- const s2 = _();
1614
- s2.start("Creating project");
2341
+ const s2 = Y();
1615
2342
  try {
1616
- await fs4.mkdir(projectName);
1617
- } catch (error) {
1618
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1619
- s2.stop(
1620
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
2343
+ s2.start("Creating project");
2344
+ try {
2345
+ await fs.mkdir(projectName);
2346
+ } catch (error) {
2347
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2348
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2349
+ process.exit(1);
2350
+ }
2351
+ throw new Error(
2352
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
1621
2353
  );
1622
- process.exit(1);
1623
2354
  }
1624
- throw error;
1625
- }
1626
- process.chdir(projectName);
1627
- const pm = getPackageManager();
1628
- const installCommand = getPackageManagerInstallCommand(pm);
1629
- s2.message("Creating project");
1630
- await exec3(`npm init -y`);
1631
- await exec3(`npm pkg set type="module"`);
1632
- const depsService = new DepsService();
1633
- await depsService.addScriptsToPackageJson({
1634
- dev: "mastra dev"
1635
- });
1636
- s2.stop("Project created");
1637
- s2.start(`Installing ${pm} dependencies`);
1638
- await exec3(`${pm} ${installCommand} zod`);
1639
- await exec3(`${pm} ${installCommand} typescript tsx @types/node --save-dev`);
1640
- await exec3(`echo '{
2355
+ process.chdir(projectName);
2356
+ const pm = getPackageManager();
2357
+ const installCommand = getPackageManagerAddCommand(pm);
2358
+ s2.message("Initializing project structure");
2359
+ try {
2360
+ await exec4(`npm init -y`);
2361
+ await exec4(`npm pkg set type="module"`);
2362
+ await exec4(`npm pkg set engines.node=">=20.9.0"`);
2363
+ const depsService = new DepsService();
2364
+ await depsService.addScriptsToPackageJson({
2365
+ dev: "mastra dev",
2366
+ build: "mastra build",
2367
+ start: "mastra start"
2368
+ });
2369
+ } catch (error) {
2370
+ throw new Error(
2371
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2372
+ );
2373
+ }
2374
+ s2.stop("Project structure created");
2375
+ s2.start(`Installing ${pm} dependencies`);
2376
+ try {
2377
+ await exec4(`${pm} ${installCommand} zod@^3`);
2378
+ await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
2379
+ await exec4(`echo '{
1641
2380
  "compilerOptions": {
1642
2381
  "target": "ES2022",
1643
2382
  "module": "ES2022",
@@ -1646,121 +2385,275 @@ var createMastraProject = async ({ createVersionTag }) => {
1646
2385
  "forceConsistentCasingInFileNames": true,
1647
2386
  "strict": true,
1648
2387
  "skipLibCheck": true,
2388
+ "noEmit": true,
1649
2389
  "outDir": "dist"
1650
2390
  },
1651
2391
  "include": [
1652
2392
  "src/**/*"
1653
- ],
1654
- "exclude": [
1655
- "node_modules",
1656
- "dist",
1657
- ".mastra"
1658
2393
  ]
1659
2394
  }' > tsconfig.json`);
1660
- s2.stop(`${pm} dependencies installed`);
1661
- s2.start("Installing mastra");
1662
- const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
1663
- await execWithTimeout(`${pm} ${installCommand} mastra${versionTag}`);
1664
- s2.stop("mastra installed");
1665
- s2.start("Installing @mastra/core");
1666
- await execWithTimeout(`${pm} ${installCommand} @mastra/core${versionTag}`);
1667
- s2.stop("@mastra/core installed");
1668
- s2.start("Adding .gitignore");
1669
- await exec3(`echo output.txt >> .gitignore`);
1670
- await exec3(`echo node_modules >> .gitignore`);
1671
- await exec3(`echo dist >> .gitignore`);
1672
- await exec3(`echo .mastra >> .gitignore`);
1673
- await exec3(`echo .env.development >> .gitignore`);
1674
- await exec3(`echo .env >> .gitignore`);
1675
- await exec3(`echo *.db >> .gitignore`);
1676
- s2.stop(".gitignore added");
1677
- ge("Project created successfully");
1678
- console.log("");
1679
- return { projectName };
2395
+ } catch (error) {
2396
+ throw new Error(
2397
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2398
+ );
2399
+ }
2400
+ s2.stop(`${pm} dependencies installed`);
2401
+ s2.start("Installing mastra");
2402
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2403
+ try {
2404
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2405
+ } catch (error) {
2406
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2407
+ }
2408
+ s2.stop("mastra installed");
2409
+ s2.start("Installing dependencies");
2410
+ try {
2411
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2412
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2413
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2414
+ } catch (error) {
2415
+ throw new Error(
2416
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2417
+ );
2418
+ }
2419
+ s2.stop("Mastra dependencies installed");
2420
+ s2.start("Adding .gitignore");
2421
+ try {
2422
+ await exec4(`echo output.txt >> .gitignore`);
2423
+ await exec4(`echo node_modules >> .gitignore`);
2424
+ await exec4(`echo dist >> .gitignore`);
2425
+ await exec4(`echo .mastra >> .gitignore`);
2426
+ await exec4(`echo .env.development >> .gitignore`);
2427
+ await exec4(`echo .env >> .gitignore`);
2428
+ await exec4(`echo *.db >> .gitignore`);
2429
+ await exec4(`echo *.db-* >> .gitignore`);
2430
+ } catch (error) {
2431
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2432
+ }
2433
+ s2.stop(".gitignore added");
2434
+ Se("Project created successfully");
2435
+ console.log("");
2436
+ return { projectName };
2437
+ } catch (error) {
2438
+ s2.stop();
2439
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2440
+ xe(`Project creation failed: ${errorMessage}`);
2441
+ process.exit(1);
2442
+ }
1680
2443
  };
1681
- var create = async (args) => {
2444
+ var create = async (args2) => {
2445
+ if (args2.template !== void 0) {
2446
+ await createFromTemplate({ ...args2, injectedAnalytics: args2.analytics });
2447
+ return;
2448
+ }
1682
2449
  const { projectName } = await createMastraProject({
1683
- createVersionTag: args?.createVersionTag
2450
+ projectName: args2?.projectName,
2451
+ createVersionTag: args2?.createVersionTag,
2452
+ timeout: args2?.timeout
1684
2453
  });
1685
- const directory = "/src";
1686
- if (!args.components || !args.llmProvider || !args.addExample) {
2454
+ const directory = args2.directory || "src/";
2455
+ if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
1687
2456
  const result = await interactivePrompt();
1688
2457
  await init({
1689
2458
  ...result,
1690
- llmApiKey: result?.llmApiKey
2459
+ llmApiKey: result?.llmApiKey,
2460
+ components: ["agents", "tools", "workflows"],
2461
+ addExample: true
1691
2462
  });
1692
2463
  postCreate({ projectName });
1693
2464
  return;
1694
2465
  }
1695
- const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args;
2466
+ const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
1696
2467
  await init({
1697
2468
  directory,
1698
2469
  components,
1699
2470
  llmProvider,
1700
2471
  addExample,
1701
- llmApiKey
2472
+ llmApiKey,
2473
+ configureEditorWithDocsMCP: args2.mcpServer
1702
2474
  });
1703
2475
  postCreate({ projectName });
1704
2476
  };
1705
2477
  var postCreate = ({ projectName }) => {
1706
- ge(`
2478
+ const packageManager = getPackageManager();
2479
+ Se(`
1707
2480
  ${color2.green("To start your project:")}
1708
2481
 
1709
2482
  ${color2.cyan("cd")} ${projectName}
1710
- ${color2.cyan("npm run dev")}
2483
+ ${color2.cyan(`${packageManager} run dev`)}
1711
2484
  `);
1712
2485
  };
1713
-
1714
- async function getPackageVersion() {
1715
- const __filename = fileURLToPath(import.meta.url);
1716
- const __dirname = dirname(__filename);
1717
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
1718
- const content = await fsExtra.readJSON(pkgJsonPath);
1719
- return content.version;
2486
+ function isGitHubUrl(url) {
2487
+ try {
2488
+ const parsedUrl = new URL(url);
2489
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2490
+ } catch {
2491
+ return false;
2492
+ }
1720
2493
  }
1721
- async function tryReadPackageJson(paths) {
1722
- let lastError;
1723
- for (const path2 of paths) {
2494
+ async function validateGitHubProject(githubUrl) {
2495
+ const errors = [];
2496
+ try {
2497
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2498
+ const owner = urlParts[0];
2499
+ const repo = urlParts[1]?.replace(".git", "");
2500
+ if (!owner || !repo) {
2501
+ throw new Error("Invalid GitHub URL format");
2502
+ }
2503
+ const branches = ["main", "master"];
2504
+ let packageJsonContent = null;
2505
+ let indexContent = null;
2506
+ for (const branch of branches) {
2507
+ try {
2508
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2509
+ const packageJsonResponse = await fetch(packageJsonUrl);
2510
+ if (packageJsonResponse.ok) {
2511
+ packageJsonContent = await packageJsonResponse.text();
2512
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2513
+ const indexResponse = await fetch(indexUrl);
2514
+ if (indexResponse.ok) {
2515
+ indexContent = await indexResponse.text();
2516
+ }
2517
+ break;
2518
+ }
2519
+ } catch {
2520
+ }
2521
+ }
2522
+ if (!packageJsonContent) {
2523
+ errors.push("Could not fetch package.json from repository");
2524
+ return { isValid: false, errors };
2525
+ }
1724
2526
  try {
1725
- const content = await fsExtra.readJSON(path2);
1726
- if (content.name === "create-mastra") {
1727
- return content;
2527
+ const packageJson = JSON.parse(packageJsonContent);
2528
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2529
+ if (!hasMastraCore) {
2530
+ errors.push("Missing @mastra/core dependency in package.json");
1728
2531
  }
1729
- } catch (err) {
1730
- lastError = err;
1731
- continue;
2532
+ } catch {
2533
+ errors.push("Invalid package.json format");
1732
2534
  }
2535
+ if (!indexContent) {
2536
+ errors.push("Missing src/mastra/index.ts file");
2537
+ } else {
2538
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2539
+ if (!hasMastraExport) {
2540
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2541
+ }
2542
+ }
2543
+ return { isValid: errors.length === 0, errors };
2544
+ } catch (error) {
2545
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2546
+ return { isValid: false, errors };
1733
2547
  }
1734
- throw lastError || new Error("Could not find create-mastra package.json in any of the expected locations");
1735
2548
  }
1736
- async function getCreateVersionTag() {
2549
+ async function createFromGitHubUrl(url) {
2550
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2551
+ const owner = urlParts[0] || "unknown";
2552
+ const repo = urlParts[1] || "unknown";
2553
+ return {
2554
+ githubUrl: url,
2555
+ title: `${owner}/${repo}`,
2556
+ slug: repo,
2557
+ agents: [],
2558
+ mcp: [],
2559
+ tools: [],
2560
+ networks: [],
2561
+ workflows: []
2562
+ };
2563
+ }
2564
+ async function createFromTemplate(args2) {
2565
+ let selectedTemplate;
2566
+ if (args2.template === true) {
2567
+ const templates = await loadTemplates();
2568
+ const selected = await selectTemplate(templates);
2569
+ if (!selected) {
2570
+ M.info("No template selected. Exiting.");
2571
+ return;
2572
+ }
2573
+ selectedTemplate = selected;
2574
+ } else if (args2.template && typeof args2.template === "string") {
2575
+ if (isGitHubUrl(args2.template)) {
2576
+ const spinner5 = Y();
2577
+ spinner5.start("Validating GitHub repository...");
2578
+ const validation = await validateGitHubProject(args2.template);
2579
+ if (!validation.isValid) {
2580
+ spinner5.stop("Validation failed");
2581
+ M.error("This does not appear to be a valid Mastra project:");
2582
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2583
+ throw new Error("Invalid Mastra project");
2584
+ }
2585
+ spinner5.stop("Valid Mastra project \u2713");
2586
+ selectedTemplate = await createFromGitHubUrl(args2.template);
2587
+ } else {
2588
+ const templates = await loadTemplates();
2589
+ const found = findTemplateByName(templates, args2.template);
2590
+ if (!found) {
2591
+ M.error(`Template "${args2.template}" not found. Available templates:`);
2592
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2593
+ throw new Error(`Template "${args2.template}" not found`);
2594
+ }
2595
+ selectedTemplate = found;
2596
+ }
2597
+ }
2598
+ if (!selectedTemplate) {
2599
+ throw new Error("No template selected");
2600
+ }
2601
+ let projectName = args2.projectName;
2602
+ if (!projectName) {
2603
+ const defaultName = getDefaultProjectName(selectedTemplate);
2604
+ const response = await he({
2605
+ message: "What is your project name?",
2606
+ defaultValue: defaultName,
2607
+ placeholder: defaultName
2608
+ });
2609
+ if (pD(response)) {
2610
+ M.info("Project creation cancelled.");
2611
+ return;
2612
+ }
2613
+ projectName = response;
2614
+ }
1737
2615
  try {
1738
- const binPath = process.argv[1];
1739
- const binDir = dirname(binPath);
1740
- const possiblePaths = [
1741
- // Direct parent paths
1742
- path.join(binDir, "..", "package.json"),
1743
- path.join(binDir, "..", "..", "package.json"),
1744
- path.join(binDir, "..", "..", "..", "package.json"),
1745
- path.join(binDir, "..", "..", "..", "..", "package.json"),
1746
- // Standard node_modules paths
1747
- path.join(binDir, "..", "create-mastra", "package.json"),
1748
- path.join(binDir, "..", "..", "create-mastra", "package.json"),
1749
- path.join(binDir, "..", "..", "..", "create-mastra", "package.json"),
1750
- path.join(binDir, "..", "..", "..", "..", "create-mastra", "package.json"),
1751
- // pnpm specific paths (.pnpm directory)
1752
- path.join(binDir, "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
1753
- path.join(binDir, "..", "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
1754
- // pnpm dlx specific path
1755
- path.join(binDir, "..", "..", "package.json"),
1756
- path.join(binDir, "..", "..", "node_modules", "create-mastra", "package.json")
1757
- ];
1758
- const content = await tryReadPackageJson(possiblePaths);
1759
- if (content.version?.includes("-")) {
1760
- const tag = content.version.split("-")[1].split(".")[0];
1761
- return tag;
2616
+ const analytics = args2.injectedAnalytics || getAnalytics();
2617
+ if (analytics) {
2618
+ analytics.trackEvent("cli_template_used", {
2619
+ template_slug: selectedTemplate.slug,
2620
+ template_title: selectedTemplate.title
2621
+ });
1762
2622
  }
2623
+ const projectPath = await cloneTemplate({
2624
+ template: selectedTemplate,
2625
+ projectName
2626
+ });
2627
+ await installDependencies(projectPath);
2628
+ Me(`
2629
+ ${color2.green("Mastra template installed!")}
2630
+
2631
+ Add the necessary environment
2632
+ variables in your ${color2.cyan(".env")} file
2633
+ `);
2634
+ postCreate({ projectName });
1763
2635
  } catch (error) {
2636
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
2637
+ throw error;
2638
+ }
2639
+ }
2640
+
2641
+ async function getPackageVersion() {
2642
+ const __filename = fileURLToPath(import.meta.url);
2643
+ const __dirname = dirname(__filename);
2644
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
2645
+ const content = await fsExtra.readJSON(pkgJsonPath);
2646
+ return content.version;
2647
+ }
2648
+ async function getCreateVersionTag() {
2649
+ try {
2650
+ const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
2651
+ const json = await fsExtra.readJSON(pkgPath);
2652
+ const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
2653
+ const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
2654
+ const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
2655
+ return tag;
2656
+ } catch {
1764
2657
  console.error('We could not resolve the create-mastra version tag, falling back to "latest"');
1765
2658
  }
1766
2659
  return "latest";
@@ -1780,16 +2673,29 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
1780
2673
  command: "version"
1781
2674
  });
1782
2675
  console.log(`create-mastra ${version}`);
1783
- } catch (e) {
2676
+ } catch {
1784
2677
  }
1785
2678
  });
1786
- program.name("create-mastra").description("Create a new Mastra project").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, or groq)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").action(async (args) => {
2679
+ program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
2680
+ "-p, --project-name <string>",
2681
+ "Project name that will be used in package.json and as the project directory name."
2682
+ ).option("--default", "Quick start with defaults(src, OpenAI, 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)").option(
2683
+ "--template [template-name]",
2684
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
2685
+ ).action(async (projectNameArg, args) => {
2686
+ const projectName = projectNameArg || args.projectName;
2687
+ const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
1787
2688
  if (args.default) {
1788
2689
  await create({
1789
2690
  components: ["agents", "tools", "workflows"],
1790
2691
  llmProvider: "openai",
1791
- addExample: false,
1792
- createVersionTag
2692
+ addExample: true,
2693
+ createVersionTag,
2694
+ timeout,
2695
+ mcpServer: args.mcp,
2696
+ directory: "src/",
2697
+ template: args.template,
2698
+ analytics
1793
2699
  });
1794
2700
  return;
1795
2701
  }
@@ -1798,7 +2704,13 @@ program.name("create-mastra").description("Create a new Mastra project").option(
1798
2704
  llmProvider: args.llm,
1799
2705
  addExample: args.example,
1800
2706
  llmApiKey: args["llm-api-key"],
1801
- createVersionTag
2707
+ createVersionTag,
2708
+ timeout,
2709
+ projectName,
2710
+ directory: args.dir,
2711
+ mcpServer: args.mcp,
2712
+ template: args.template,
2713
+ analytics
1802
2714
  });
1803
2715
  });
1804
2716
  program.parse(process.argv);