create-mastra 0.0.0-trigger-playground-ui-package-20250506151043 → 0.0.0-type-testing-20260120105120

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