create-mastra 0.0.0-vector-sources-20250516175436 → 0.0.0-vector-extension-schema-20250922130418

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,29 +1,33 @@
1
1
  #! /usr/bin/env node
2
2
  import { Command } from 'commander';
3
3
  import { randomUUID } from 'node:crypto';
4
- import * as fs3__default from 'node:fs';
5
- import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import * as fs4__default from 'node:fs';
5
+ import fs4__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import os from 'node:os';
7
- import path, { dirname } from 'node:path';
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';
10
+ import util, { stripVTControlCharacters } from 'node:util';
11
+ import y$1, { stdout, stdin } from 'node:process';
12
+ import * as g from 'node:readline';
13
+ import g__default from 'node:readline';
14
+ import { Writable } from 'node:stream';
15
+ import fs5 from 'node:fs/promises';
14
16
  import child_process from 'node:child_process';
15
- import util from 'node:util';
16
- import fs4 from 'node:fs/promises';
17
- import { execa } from 'execa';
18
- import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
19
- import prettier from 'prettier';
20
- import { Transform } from 'node:stream';
17
+ import tty from 'node:tty';
21
18
  import pino from 'pino';
22
19
  import pretty from 'pino-pretty';
23
- import fsExtra from 'fs-extra';
20
+ import { execa } from 'execa';
21
+ import fsExtra, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
22
+ import prettier from 'prettier';
23
+ import fsExtra$1 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
  }
@@ -113,6 +117,22 @@ var PosthogAnalytics = class {
113
117
  }
114
118
  });
115
119
  }
120
+ trackEvent(eventName, properties) {
121
+ try {
122
+ if (!this.client) {
123
+ return;
124
+ }
125
+ this.client.capture({
126
+ distinctId: this.distinctId,
127
+ event: eventName,
128
+ properties: {
129
+ ...this.getSystemProperties(),
130
+ ...properties
131
+ }
132
+ });
133
+ } catch {
134
+ }
135
+ }
116
136
  trackCommand(options) {
117
137
  try {
118
138
  if (!this.client) {
@@ -349,72 +369,335 @@ function requirePicocolors () {
349
369
  var picocolorsExports = /*@__PURE__*/ requirePicocolors();
350
370
  var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
351
371
 
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,`
372
+ function DD({onlyFirst:e=false}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}const uD=DD();function P$1(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(uD,"")}function L$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var W$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(F){var s=F.charCodeAt(0),i=F.length==2?F.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(F){var s=this.eastAsianWidth(F);return s=="F"||s=="W"||s=="A"?2:1};function t(F){return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(F){for(var s=t(F),i=0,D=0;D<s.length;D++)i=i+this.characterLength(s[D]);return i},u.slice=function(F,s,i){textLen=u.length(F),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var D="",C=0,n=t(F),E=0;E<n.length;E++){var a=n[E],o=u.length(a);if(C>=s-(o==2?1:0))if(C+o<=i)D+=a;else break;C+=o;}return D};})(W$1);var tD=W$1.exports;const eD=L$1(tD);var FD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const sD=L$1(FD);function p(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=P$1(e),e.length===0))return 0;e=e.replace(sD()," ");const t=u.ambiguousIsNarrow?1:2;let F=0;for(const s of e){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(eD.eastAsianWidth(s)){case "F":case "W":F+=2;break;case "A":F+=t;break;default:F+=1;}}return F}const w=10,N=(e=0)=>u=>`\x1B[${u+e}m`,I=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,R=(e=0)=>(u,t,F)=>`\x1B[${38+e};2;${u};${t};${F}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const iD=Object.keys(r.color),CD=Object.keys(r.bgColor);[...iD,...CD];function rD(){const e=new Map;for(const[u,t]of Object.entries(r)){for(const[F,s]of Object.entries(t))r[F]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[F]=r[F],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:t,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=N(),r.color.ansi256=I(),r.color.ansi16m=R(),r.bgColor.ansi=N(w),r.bgColor.ansi256=I(w),r.bgColor.ansi16m=R(w),Object.defineProperties(r,{rgbToAnsi256:{value:(u,t,F)=>u===t&&t===F?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(F/255*5),enumerable:false},hexToRgb:{value:u=>{const t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!t)return [0,0,0];let[F]=t;F.length===3&&(F=[...F].map(i=>i+i).join(""));const s=Number.parseInt(F,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,F,s;if(u>=232)t=((u-232)*10+8)/255,F=t,s=t;else {u-=16;const C=u%36;t=Math.floor(u/36)/5,F=Math.floor(C/6)/5,s=C%6/5;}const i=Math.max(t,F,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(F)<<1|Math.round(t));return i===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,t,F)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,t,F)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const ED=rD(),d$1=new Set(["\x1B","\x9B"]),oD=39,y="\x07",V$1="[",nD="]",G$1="m",_$1=`${nD}8;;`,z=e=>`${d$1.values().next().value}${V$1}${e}${G$1}`,K$1=e=>`${d$1.values().next().value}${_$1}${e}${y}`,aD=e=>e.split(" ").map(u=>p(u)),k$1=(e,u,t)=>{const F=[...u];let s=false,i=false,D=p(P$1(e[e.length-1]));for(const[C,n]of F.entries()){const E=p(n);if(D+E<=t?e[e.length-1]+=n:(e.push(n),D=0),d$1.has(n)&&(s=true,i=F.slice(C+1).join("").startsWith(_$1)),s){i?n===y&&(s=false,i=false):n===G$1&&(s=false);continue}D+=E,D===t&&C<F.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},hD=e=>{const u=e.split(" ");let t=u.length;for(;t>0&&!(p(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(" ")+u.slice(t).join("")},lD=(e,u,t={})=>{if(t.trim!==false&&e.trim()==="")return "";let F="",s,i;const D=aD(e);let C=[""];for(const[E,a]of e.split(" ").entries()){t.trim!==false&&(C[C.length-1]=C[C.length-1].trimStart());let o=p(C[C.length-1]);if(E!==0&&(o>=u&&(t.wordWrap===false||t.trim===false)&&(C.push(""),o=0),(o>0||t.trim===false)&&(C[C.length-1]+=" ",o++)),t.hard&&D[E]>u){const c=u-o,f=1+Math.floor((D[E]-c-1)/u);Math.floor((D[E]-1)/u)<f&&C.push(""),k$1(C,a,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(t.wordWrap===false&&o<u){k$1(C,a,u);continue}C.push("");}if(o+D[E]>u&&t.wordWrap===false){k$1(C,a,u);continue}C[C.length-1]+=a;}t.trim!==false&&(C=C.map(E=>hD(E)));const n=[...C.join(`
373
+ `)];for(const[E,a]of n.entries()){if(F+=a,d$1.has(a)){const{groups:c}=new RegExp(`(?:\\${V$1}(?<code>\\d+)m|\\${_$1}(?<uri>.*)${y})`).exec(n.slice(E).join(""))||{groups:{}};if(c.code!==void 0){const f=Number.parseFloat(c.code);s=f===oD?void 0:f;}else c.uri!==void 0&&(i=c.uri.length===0?void 0:c.uri);}const o=ED.codes.get(Number(s));n[E+1]===`
374
+ `?(i&&(F+=K$1("")),s&&o&&(F+=z(o))):a===`
375
+ `&&(s&&o&&(F+=z(s)),i&&(F+=K$1(i)));}return F};function Y$1(e,u,t){return String(e).normalize().replace(/\r\n/g,`
356
376
  `).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}
377
+ `).map(F=>lD(F,u,t)).join(`
378
+ `)}const xD=["up","down","left","right","space","enter","cancel"],B={actions:new Set(xD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function $(e,u){if(typeof e=="string")return B.aliases.get(e)===u;for(const t of e)if(t!==void 0&&$(t,u))return true;return false}function BD(e,u){if(e===u)return;const t=e.split(`
379
+ `),F=u.split(`
380
+ `),s=[];for(let i=0;i<Math.max(t.length,F.length);i++)t[i]!==F[i]&&s.push(i);return s}const AD=globalThis.process.platform.startsWith("win"),S=Symbol("clack:cancel");function pD(e){return e===S}function m(e,u){const t=e;t.isTTY&&t.setRawMode(u);}function fD({input:e=stdin,output:u=stdout,overwrite:t=true,hideCursor:F=true}={}){const s=g.createInterface({input:e,output:u,prompt:"",tabSize:1});g.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const i=(D,{name:C,sequence:n})=>{const E=String(D);if($([E,C,n],"cancel")){F&&u.write(srcExports.cursor.show),process.exit(0);return}if(!t)return;const a=C==="return"?0:-1,o=C==="return"?-1:0;g.moveCursor(u,a,o,()=>{g.clearLine(u,1,()=>{e.once("keypress",i);});});};return F&&u.write(srcExports.cursor.hide),e.once("keypress",i),()=>{e.off("keypress",i),F&&u.write(srcExports.cursor.show),e.isTTY&&!AD&&e.setRawMode(false),s.terminal=false,s.close();}}var gD=Object.defineProperty,vD=(e,u,t)=>u in e?gD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,h=(e,u,t)=>(vD(e,typeof u!="symbol"?u+"":u,t),t);class x{constructor(u,t=true){h(this,"input"),h(this,"output"),h(this,"_abortSignal"),h(this,"rl"),h(this,"opts"),h(this,"_render"),h(this,"_track",false),h(this,"_prevFrame",""),h(this,"_subscribers",new Map),h(this,"_cursor",0),h(this,"state","initial"),h(this,"error",""),h(this,"value");const{input:F=stdin,output:s=stdout,render:i,signal:D,...C}=u;this.opts=C,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=D,this.input=F,this.output=s;}unsubscribe(){this._subscribers.clear();}setSubscriber(u,t){const F=this._subscribers.get(u)??[];F.push(t),this._subscribers.set(u,F);}on(u,t){this.setSubscriber(u,{cb:t});}once(u,t){this.setSubscriber(u,{cb:t,once:true});}emit(u,...t){const F=this._subscribers.get(u)??[],s=[];for(const i of F)i.cb(...t),i.once&&s.push(()=>F.splice(F.indexOf(i),1));for(const i of s)i();}prompt(){return new Promise((u,t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),u(S);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close();},{once:true});}const F=new Writable;F._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D();},this.input.pipe(F),this.rl=g__default.createInterface({input:this.input,output:F,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:true}),g__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),m(this.input,true),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(S);});})}onKeypress(u,t){if(this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&B.aliases.has(t.name)&&this.emit("cursor",B.aliases.get(t.name)),B.actions.has(t.name)&&this.emit("cursor",t.name)),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),t?.name==="return"){if(this.opts.validate){const F=this.opts.validate(this.value);F&&(this.error=F instanceof Error?F.message:F,this.state="error",this.rl?.write(this.value));}this.state!=="error"&&(this.state="submit");}$([u,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
381
+ `),m(this.input,false),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=Y$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
382
+ `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=Y$1(this._render(this)??"",process.stdout.columns,{hard:true});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(srcExports.cursor.hide);else {const t=BD(this._prevFrame,u);if(this.restoreCursor(),t&&t?.length===1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
383
+ `);this.output.write(s[F]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-F-1));return}if(t&&t?.length>1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.down());const s=u.split(`
384
+ `).slice(F);this.output.write(s.join(`
385
+ `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}var OD=Object.defineProperty,PD=(e,u,t)=>u in e?OD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,J=(e,u,t)=>(PD(e,typeof u!="symbol"?u+"":u,t),t);class LD extends x{constructor(u){super(u,false),J(this,"options"),J(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:t})=>t===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",t=>{switch(t){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue();});}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value;}}class RD extends x{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return `${this.value}\u2588`;const u=this.value.slice(0,this.cursor),[t,...F]=this.value.slice(this.cursor);return `${u}${color2.inverse(t)}${F.join("")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on("finalize",()=>{this.value||(this.value=u.defaultValue);});}}
386
+
387
+ function ce(){return y$1.platform!=="win32"?y$1.env.TERM!=="linux":!!y$1.env.CI||!!y$1.env.WT_SESSION||!!y$1.env.TERMINUS_SUBLIME||y$1.env.ConEmuTask==="{cmd::Cmder}"||y$1.env.TERM_PROGRAM==="Terminus-Sublime"||y$1.env.TERM_PROGRAM==="vscode"||y$1.env.TERM==="xterm-256color"||y$1.env.TERM==="alacritty"||y$1.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const V=ce(),u=(t,n)=>V?t:n,le=u("\u25C6","*"),L=u("\u25A0","x"),W=u("\u25B2","x"),C=u("\u25C7","o"),ue=u("\u250C","T"),o=u("\u2502","|"),d=u("\u2514","\u2014"),k=u("\u25CF",">"),P=u("\u25CB"," "),_=u("\u2500","-"),me=u("\u256E","+"),de=u("\u251C","+"),pe=u("\u256F","+"),q=u("\u25CF","\u2022"),D=u("\u25C6","*"),U=u("\u25B2","!"),K=u("\u25A0","x"),b=t=>{switch(t){case "initial":case "active":return color2.cyan(le);case "cancel":return color2.red(L);case "error":return color2.yellow(W);case "submit":return color2.green(C)}},G=t=>{const{cursor:n,options:r,style:i}=t,s=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),a=Math.min(c,Math.max(s,5));let l=0;n>=l+a-3?l=Math.max(Math.min(n-a+3,r.length-a),0):n<l+2&&(l=Math.max(n-2,0));const $=a<r.length&&l>0,g=a<r.length&&l+a<r.length;return r.slice(l,l+a).map((p,v,f)=>{const j=v===0&&$,E=v===f.length-1&&g;return j||E?color2.dim("..."):i(p,v+l===n)})},he=t=>new RD({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${color2.gray(o)}
388
+ ${b(this.state)} ${t.message}
389
+ `,r=t.placeholder?color2.inverse(t.placeholder[0])+color2.dim(t.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:r;switch(this.state){case "error":return `${n.trim()}
390
+ ${color2.yellow(o)} ${i}
391
+ ${color2.yellow(d)} ${color2.yellow(this.error)}
392
+ `;case "submit":return `${n}${color2.gray(o)} ${color2.dim(this.value||t.placeholder)}`;case "cancel":return `${n}${color2.gray(o)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
393
+ ${color2.gray(o)}`:""}`;default:return `${n}${color2.cyan(o)} ${i}
394
+ ${color2.cyan(d)}
395
+ `}}}).prompt(),ve=t=>{const n=(r,i)=>{const s=r.label??String(r.value);switch(i){case "selected":return `${color2.dim(s)}`;case "active":return `${color2.green(k)} ${s} ${r.hint?color2.dim(`(${r.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(s))}`;default:return `${color2.dim(P)} ${color2.dim(s)}`}};return new LD({options:t.options,initialValue:t.initialValue,render(){const r=`${color2.gray(o)}
396
+ ${b(this.state)} ${t.message}
397
+ `;switch(this.state){case "submit":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"cancelled")}
398
+ ${color2.gray(o)}`;default:return `${r}${color2.cyan(o)} ${G({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,s)=>n(i,s?"active":"inactive")}).join(`
399
+ ${color2.cyan(o)} `)}
400
+ ${color2.cyan(d)}
401
+ `}}}).prompt()},Me=(t="",n="")=>{const r=`
402
+ ${t}
400
403
  `.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(`
404
+ `),i=stripVTControlCharacters(n).length,s=Math.max(r.reduce((a,l)=>{const $=stripVTControlCharacters(l);return $.length>a?$.length:a},0),i)+2,c=r.map(a=>`${color2.gray(o)} ${color2.dim(a)}${" ".repeat(s-stripVTControlCharacters(a).length)}${color2.gray(o)}`).join(`
405
+ `);process.stdout.write(`${color2.gray(o)}
406
+ ${color2.green(C)} ${color2.reset(n)} ${color2.gray(_.repeat(Math.max(s-i-1,1))+me)}
407
+ ${c}
408
+ ${color2.gray(de+_.repeat(s+2)+pe)}
409
+ `);},xe=(t="")=>{process.stdout.write(`${color2.gray(d)} ${color2.red(t)}
410
+
411
+ `);},Ie=(t="")=>{process.stdout.write(`${color2.gray(ue)} ${t}
412
+ `);},Se=(t="")=>{process.stdout.write(`${color2.gray(o)}
413
+ ${color2.gray(d)} ${t}
414
+
415
+ `);},M={message:(t="",{symbol:n=color2.gray(o)}={})=>{const r=[`${color2.gray(o)}`];if(t){const[i,...s]=t.split(`
416
+ `);r.push(`${n} ${i}`,...s.map(c=>`${color2.gray(o)} ${c}`));}process.stdout.write(`${r.join(`
414
417
  `)}
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};
418
+ `);},info:t=>{M.message(t,{symbol:color2.blue(q)});},success:t=>{M.message(t,{symbol:color2.green(D)});},step:t=>{M.message(t,{symbol:color2.green(C)});},warn:t=>{M.message(t,{symbol:color2.yellow(U)});},warning:t=>{M.warn(t);},error:t=>{M.message(t,{symbol:color2.red(K)});}};`${color2.gray(o)} `;const Y=({indicator:t="dots"}={})=>{const n=V?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],r=V?80:120,i=process.env.CI==="true";let s,c,a=false,l="",$,g=performance.now();const p=m=>{const h=m>1?"Something went wrong":"Canceled";a&&N(h,m);},v=()=>p(2),f=()=>p(1),j=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",f),process.on("SIGTERM",f),process.on("exit",p);},E=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",f),process.removeListener("SIGTERM",f),process.removeListener("exit",p);},B=()=>{if($===void 0)return;i&&process.stdout.write(`
419
+ `);const m=$.split(`
420
+ `);process.stdout.write(srcExports.cursor.move(-999,m.length-1)),process.stdout.write(srcExports.erase.down(m.length));},R=m=>m.replace(/\.+$/,""),O=m=>{const h=(performance.now()-m)/1e3,w=Math.floor(h/60),I=Math.floor(h%60);return w>0?`[${w}m ${I}s]`:`[${I}s]`},H=(m="")=>{a=true,s=fD(),l=R(m),g=performance.now(),process.stdout.write(`${color2.gray(o)}
421
+ `);let h=0,w=0;j(),c=setInterval(()=>{if(i&&l===$)return;B(),$=l;const I=color2.magenta(n[h]);if(i)process.stdout.write(`${I} ${l}...`);else if(t==="timer")process.stdout.write(`${I} ${l} ${O(g)}`);else {const z=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(`${I} ${l}${z}`);}h=h+1<n.length?h+1:0,w=w<n.length?w+.125:0;},r);},N=(m="",h=0)=>{a=false,clearInterval(c),B();const w=h===0?color2.green(C):h===1?color2.red(L):color2.red(W);l=R(m??l),t==="timer"?process.stdout.write(`${w} ${l} ${O(g)}
422
+ `):process.stdout.write(`${w} ${l}
423
+ `),E(),s();};return {start:H,stop:N,message:(m="")=>{l=R(m??l);}}},Ce=async(t,n)=>{const r={},i=Object.keys(t);for(const s of i){const c=t[s],a=await c({results:r})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&pD(a)){r[s]="canceled",n.onCancel({results:r});continue}r[s]=a;}return r};
424
+
425
+ var shellQuote$1 = {};
426
+
427
+ var quote;
428
+ var hasRequiredQuote;
429
+
430
+ function requireQuote () {
431
+ if (hasRequiredQuote) return quote;
432
+ hasRequiredQuote = 1;
433
+
434
+ quote = function quote(xs) {
435
+ return xs.map(function (s) {
436
+ if (s === '') {
437
+ return '\'\'';
438
+ }
439
+ if (s && typeof s === 'object') {
440
+ return s.op.replace(/(.)/g, '\\$1');
441
+ }
442
+ if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
443
+ return "'" + s.replace(/(['])/g, '\\$1') + "'";
444
+ }
445
+ if ((/["'\s]/).test(s)) {
446
+ return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
447
+ }
448
+ return String(s).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2');
449
+ }).join(' ');
450
+ };
451
+ return quote;
452
+ }
453
+
454
+ var parse;
455
+ var hasRequiredParse;
456
+
457
+ function requireParse () {
458
+ if (hasRequiredParse) return parse;
459
+ hasRequiredParse = 1;
460
+
461
+ // '<(' is process substitution operator and
462
+ // can be parsed the same as control operator
463
+ var CONTROL = '(?:' + [
464
+ '\\|\\|',
465
+ '\\&\\&',
466
+ ';;',
467
+ '\\|\\&',
468
+ '\\<\\(',
469
+ '\\<\\<\\<',
470
+ '>>',
471
+ '>\\&',
472
+ '<\\&',
473
+ '[&;()|<>]'
474
+ ].join('|') + ')';
475
+ var controlRE = new RegExp('^' + CONTROL + '$');
476
+ var META = '|&;()<> \\t';
477
+ var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"';
478
+ var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'';
479
+ var hash = /^#$/;
480
+
481
+ var SQ = "'";
482
+ var DQ = '"';
483
+ var DS = '$';
484
+
485
+ var TOKEN = '';
486
+ var mult = 0x100000000; // Math.pow(16, 8);
487
+ for (var i = 0; i < 4; i++) {
488
+ TOKEN += (mult * Math.random()).toString(16);
489
+ }
490
+ var startsWithToken = new RegExp('^' + TOKEN);
491
+
492
+ function matchAll(s, r) {
493
+ var origIndex = r.lastIndex;
494
+
495
+ var matches = [];
496
+ var matchObj;
497
+
498
+ while ((matchObj = r.exec(s))) {
499
+ matches.push(matchObj);
500
+ if (r.lastIndex === matchObj.index) {
501
+ r.lastIndex += 1;
502
+ }
503
+ }
504
+
505
+ r.lastIndex = origIndex;
506
+
507
+ return matches;
508
+ }
509
+
510
+ function getVar(env, pre, key) {
511
+ var r = typeof env === 'function' ? env(key) : env[key];
512
+ if (typeof r === 'undefined' && key != '') {
513
+ r = '';
514
+ } else if (typeof r === 'undefined') {
515
+ r = '$';
516
+ }
517
+
518
+ if (typeof r === 'object') {
519
+ return pre + TOKEN + JSON.stringify(r) + TOKEN;
520
+ }
521
+ return pre + r;
522
+ }
523
+
524
+ function parseInternal(string, env, opts) {
525
+ if (!opts) {
526
+ opts = {};
527
+ }
528
+ var BS = opts.escape || '\\';
529
+ var BAREWORD = '(\\' + BS + '[\'"' + META + ']|[^\\s\'"' + META + '])+';
530
+
531
+ var chunker = new RegExp([
532
+ '(' + CONTROL + ')', // control chars
533
+ '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+'
534
+ ].join('|'), 'g');
535
+
536
+ var matches = matchAll(string, chunker);
537
+
538
+ if (matches.length === 0) {
539
+ return [];
540
+ }
541
+ if (!env) {
542
+ env = {};
543
+ }
544
+
545
+ var commented = false;
546
+
547
+ return matches.map(function (match) {
548
+ var s = match[0];
549
+ if (!s || commented) {
550
+ return void undefined;
551
+ }
552
+ if (controlRE.test(s)) {
553
+ return { op: s };
554
+ }
555
+
556
+ // Hand-written scanner/parser for Bash quoting rules:
557
+ //
558
+ // 1. inside single quotes, all characters are printed literally.
559
+ // 2. inside double quotes, all characters are printed literally
560
+ // except variables prefixed by '$' and backslashes followed by
561
+ // either a double quote or another backslash.
562
+ // 3. outside of any quotes, backslashes are treated as escape
563
+ // characters and not printed (unless they are themselves escaped)
564
+ // 4. quote context can switch mid-token if there is no whitespace
565
+ // between the two quote contexts (e.g. all'one'"token" parses as
566
+ // "allonetoken")
567
+ var quote = false;
568
+ var esc = false;
569
+ var out = '';
570
+ var isGlob = false;
571
+ var i;
572
+
573
+ function parseEnvVar() {
574
+ i += 1;
575
+ var varend;
576
+ var varname;
577
+ var char = s.charAt(i);
578
+
579
+ if (char === '{') {
580
+ i += 1;
581
+ if (s.charAt(i) === '}') {
582
+ throw new Error('Bad substitution: ' + s.slice(i - 2, i + 1));
583
+ }
584
+ varend = s.indexOf('}', i);
585
+ if (varend < 0) {
586
+ throw new Error('Bad substitution: ' + s.slice(i));
587
+ }
588
+ varname = s.slice(i, varend);
589
+ i = varend;
590
+ } else if ((/[*@#?$!_-]/).test(char)) {
591
+ varname = char;
592
+ i += 1;
593
+ } else {
594
+ var slicedFromI = s.slice(i);
595
+ varend = slicedFromI.match(/[^\w\d_]/);
596
+ if (!varend) {
597
+ varname = slicedFromI;
598
+ i = s.length;
599
+ } else {
600
+ varname = slicedFromI.slice(0, varend.index);
601
+ i += varend.index - 1;
602
+ }
603
+ }
604
+ return getVar(env, '', varname);
605
+ }
606
+
607
+ for (i = 0; i < s.length; i++) {
608
+ var c = s.charAt(i);
609
+ isGlob = isGlob || (!quote && (c === '*' || c === '?'));
610
+ if (esc) {
611
+ out += c;
612
+ esc = false;
613
+ } else if (quote) {
614
+ if (c === quote) {
615
+ quote = false;
616
+ } else if (quote == SQ) {
617
+ out += c;
618
+ } else { // Double quote
619
+ if (c === BS) {
620
+ i += 1;
621
+ c = s.charAt(i);
622
+ if (c === DQ || c === BS || c === DS) {
623
+ out += c;
624
+ } else {
625
+ out += BS + c;
626
+ }
627
+ } else if (c === DS) {
628
+ out += parseEnvVar();
629
+ } else {
630
+ out += c;
631
+ }
632
+ }
633
+ } else if (c === DQ || c === SQ) {
634
+ quote = c;
635
+ } else if (controlRE.test(c)) {
636
+ return { op: s };
637
+ } else if (hash.test(c)) {
638
+ commented = true;
639
+ var commentObj = { comment: string.slice(match.index + i + 1) };
640
+ if (out.length) {
641
+ return [out, commentObj];
642
+ }
643
+ return [commentObj];
644
+ } else if (c === BS) {
645
+ esc = true;
646
+ } else if (c === DS) {
647
+ out += parseEnvVar();
648
+ } else {
649
+ out += c;
650
+ }
651
+ }
652
+
653
+ if (isGlob) {
654
+ return { op: 'glob', pattern: out };
655
+ }
656
+
657
+ return out;
658
+ }).reduce(function (prev, arg) { // finalize parsed arguments
659
+ // TODO: replace this whole reduce with a concat
660
+ return typeof arg === 'undefined' ? prev : prev.concat(arg);
661
+ }, []);
662
+ }
663
+
664
+ parse = function parse(s, env, opts) {
665
+ var mapped = parseInternal(s, env, opts);
666
+ if (typeof env !== 'function') {
667
+ return mapped;
668
+ }
669
+ return mapped.reduce(function (acc, s) {
670
+ if (typeof s === 'object') {
671
+ return acc.concat(s);
672
+ }
673
+ var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));
674
+ if (xs.length === 1) {
675
+ return acc.concat(xs[0]);
676
+ }
677
+ return acc.concat(xs.filter(Boolean).map(function (x) {
678
+ if (startsWithToken.test(x)) {
679
+ return JSON.parse(x.split(TOKEN)[1]);
680
+ }
681
+ return x;
682
+ }));
683
+ }, []);
684
+ };
685
+ return parse;
686
+ }
687
+
688
+ var hasRequiredShellQuote;
689
+
690
+ function requireShellQuote () {
691
+ if (hasRequiredShellQuote) return shellQuote$1;
692
+ hasRequiredShellQuote = 1;
693
+
694
+ shellQuote$1.quote = requireQuote();
695
+ shellQuote$1.parse = requireParse();
696
+ return shellQuote$1;
697
+ }
698
+
699
+ var shellQuoteExports = requireShellQuote();
700
+ var shellQuote = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
418
701
 
419
702
  // eslint-disable-next-line no-warning-comments
420
703
  // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
@@ -549,18 +832,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
549
832
  yellowBright: yellowBright
550
833
  });
551
834
 
552
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
835
+ const isUnicodeSupported = y$1.platform !== 'win32'
836
+ || Boolean(y$1.env.WT_SESSION) // Windows Terminal
837
+ || y$1.env.TERM_PROGRAM === 'vscode';
553
838
 
554
839
  const isInteractive = stream => Boolean(
555
840
  stream.isTTY
556
- && h.env.TERM !== 'dumb'
557
- && !('CI' in h.env),
841
+ && y$1.env.TERM !== 'dumb'
842
+ && !('CI' in y$1.env),
558
843
  );
559
844
 
560
845
  const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
561
846
  const successSymbol = green(isUnicodeSupported ? '✔' : '√');
562
847
  const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
563
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
848
+ const errorSymbol = red(isUnicodeSupported ? '' : '×');
564
849
 
565
850
  const defaultSpinner = {
566
851
  frames: isUnicodeSupported
@@ -603,7 +888,7 @@ class YoctoSpinner {
603
888
  this.#frames = spinner.frames;
604
889
  this.#interval = spinner.interval;
605
890
  this.#text = options.text ?? '';
606
- this.#stream = options.stream ?? h.stderr;
891
+ this.#stream = options.stream ?? y$1.stderr;
607
892
  this.#color = options.color ?? 'cyan';
608
893
  this.#isInteractive = isInteractive(this.#stream);
609
894
  this.#exitHandlerBound = this.#exitHandler.bind(this);
@@ -675,8 +960,8 @@ class YoctoSpinner {
675
960
  return this.#text;
676
961
  }
677
962
 
678
- set text(value = '') {
679
- this.#text = value;
963
+ set text(value) {
964
+ this.#text = value ?? '';
680
965
  this.#render();
681
966
  }
682
967
 
@@ -740,7 +1025,7 @@ class YoctoSpinner {
740
1025
 
741
1026
  #lineCount(text) {
742
1027
  const width = this.#stream.columns ?? 80;
743
- const lines = text.split('\n');
1028
+ const lines = stripVTControlCharacters(text).split('\n');
744
1029
 
745
1030
  let lineCount = 0;
746
1031
  for (const line of lines) {
@@ -763,13 +1048,13 @@ class YoctoSpinner {
763
1048
  }
764
1049
 
765
1050
  #subscribeToProcessEvents() {
766
- h.once('SIGINT', this.#exitHandlerBound);
767
- h.once('SIGTERM', this.#exitHandlerBound);
1051
+ y$1.once('SIGINT', this.#exitHandlerBound);
1052
+ y$1.once('SIGTERM', this.#exitHandlerBound);
768
1053
  }
769
1054
 
770
1055
  #unsubscribeFromProcessEvents() {
771
- h.off('SIGINT', this.#exitHandlerBound);
772
- h.off('SIGTERM', this.#exitHandlerBound);
1056
+ y$1.off('SIGINT', this.#exitHandlerBound);
1057
+ y$1.off('SIGTERM', this.#exitHandlerBound);
773
1058
  }
774
1059
 
775
1060
  #exitHandler(signal) {
@@ -780,7 +1065,7 @@ class YoctoSpinner {
780
1065
  // SIGINT: 128 + 2
781
1066
  // SIGTERM: 128 + 15
782
1067
  const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
783
- h.exit(exitCode);
1068
+ y$1.exit(exitCode);
784
1069
  }
785
1070
  }
786
1071
 
@@ -789,46 +1074,86 @@ function yoctoSpinner(options) {
789
1074
  }
790
1075
 
791
1076
  var LogLevel = {
792
- INFO: "info"};
793
- var Logger = class {
794
- logger;
1077
+ INFO: "info",
1078
+ ERROR: "error"};
1079
+ var MastraLogger = class {
1080
+ name;
1081
+ level;
795
1082
  transports;
796
1083
  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({
1084
+ this.name = options.name || "Mastra";
1085
+ this.level = options.level || LogLevel.ERROR;
1086
+ this.transports = new Map(Object.entries(options.transports || {}));
1087
+ }
1088
+ getTransports() {
1089
+ return this.transports;
1090
+ }
1091
+ trackException(_error) {
1092
+ }
1093
+ async getLogs(transportId, params) {
1094
+ if (!transportId || !this.transports.has(transportId)) {
1095
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
1096
+ }
1097
+ return this.transports.get(transportId).getLogs(params) ?? {
1098
+ logs: [],
1099
+ total: 0,
1100
+ page: params?.page ?? 1,
1101
+ perPage: params?.perPage ?? 100,
1102
+ hasMore: false
1103
+ };
1104
+ }
1105
+ async getLogsByRunId({
1106
+ transportId,
1107
+ runId,
1108
+ fromDate,
1109
+ toDate,
1110
+ logLevel,
1111
+ filters,
1112
+ page,
1113
+ perPage
1114
+ }) {
1115
+ if (!transportId || !this.transports.has(transportId) || !runId) {
1116
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
1117
+ }
1118
+ return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
1119
+ logs: [],
1120
+ total: 0,
1121
+ page: page ?? 1,
1122
+ perPage: perPage ?? 100,
1123
+ hasMore: false
1124
+ };
1125
+ }
1126
+ };
1127
+
1128
+ var PinoLogger = class extends MastraLogger {
1129
+ logger;
1130
+ constructor(options = {}) {
1131
+ super(options);
1132
+ let prettyStream = void 0;
1133
+ if (!options.overrideDefaultTransports) {
1134
+ prettyStream = pretty({
812
1135
  colorize: true,
813
1136
  levelFirst: true,
814
1137
  ignore: "pid,hostname",
815
1138
  colorizeObjects: true,
816
1139
  translateTime: "SYS:standard",
817
1140
  singleLine: false
818
- }) : pino.multistream([
1141
+ });
1142
+ }
1143
+ const transportsAry = [...this.getTransports().entries()];
1144
+ this.logger = pino(
1145
+ {
1146
+ name: options.name || "app",
1147
+ level: options.level || LogLevel.INFO,
1148
+ formatters: options.formatters
1149
+ },
1150
+ options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
819
1151
  ...transportsAry.map(([, transport]) => ({
820
1152
  stream: transport,
821
1153
  level: options.level || LogLevel.INFO
822
1154
  })),
823
1155
  {
824
- stream: pretty({
825
- colorize: true,
826
- levelFirst: true,
827
- ignore: "pid,hostname",
828
- colorizeObjects: true,
829
- translateTime: "SYS:standard",
830
- singleLine: false
831
- }),
1156
+ stream: prettyStream,
832
1157
  level: options.level || LogLevel.INFO
833
1158
  }
834
1159
  ])
@@ -846,32 +1171,199 @@ var Logger = class {
846
1171
  error(message, args = {}) {
847
1172
  this.logger.error(args, message);
848
1173
  }
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);
1174
+ };
1175
+
1176
+ function getPackageManager() {
1177
+ const userAgent = process.env.npm_config_user_agent || "";
1178
+ const execPath = process.env.npm_execpath || "";
1179
+ if (userAgent.includes("yarn")) {
1180
+ return "yarn";
1181
+ }
1182
+ if (userAgent.includes("pnpm")) {
1183
+ return "pnpm";
1184
+ }
1185
+ if (userAgent.includes("npm")) {
1186
+ return "npm";
1187
+ }
1188
+ if (execPath.includes("yarn")) {
1189
+ return "yarn";
1190
+ }
1191
+ if (execPath.includes("pnpm")) {
1192
+ return "pnpm";
1193
+ }
1194
+ if (execPath.includes("npm")) {
1195
+ return "npm";
1196
+ }
1197
+ return "npm";
1198
+ }
1199
+ var logger = new PinoLogger({
1200
+ name: "Mastra CLI",
1201
+ level: "info"
1202
+ });
1203
+ var exec = util.promisify(child_process.exec);
1204
+ async function cloneTemplate(options) {
1205
+ const { template, projectName, targetDir } = options;
1206
+ const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
1207
+ const spinner5 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
1208
+ try {
1209
+ if (await directoryExists(projectPath)) {
1210
+ spinner5.error(`Directory ${projectName} already exists`);
1211
+ throw new Error(`Directory ${projectName} already exists`);
1212
+ }
1213
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
1214
+ await updatePackageJson(projectPath, projectName);
1215
+ const envExamplePath = path3.join(projectPath, ".env.example");
1216
+ if (await fileExists(envExamplePath)) {
1217
+ await fs5.copyFile(envExamplePath, path3.join(projectPath, ".env"));
1218
+ }
1219
+ spinner5.success(`Template "${template.title}" cloned successfully to ${projectName}`);
1220
+ return projectPath;
1221
+ } catch (error) {
1222
+ spinner5.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
1223
+ throw error;
1224
+ }
1225
+ }
1226
+ async function directoryExists(dirPath) {
1227
+ try {
1228
+ const stat = await fs5.stat(dirPath);
1229
+ return stat.isDirectory();
1230
+ } catch {
1231
+ return false;
1232
+ }
1233
+ }
1234
+ async function fileExists(filePath) {
1235
+ try {
1236
+ const stat = await fs5.stat(filePath);
1237
+ return stat.isFile();
1238
+ } catch {
1239
+ return false;
1240
+ }
1241
+ }
1242
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
1243
+ await fs5.mkdir(targetPath, { recursive: true });
1244
+ try {
1245
+ const degitRepo = repoUrl.replace("https://github.com/", "");
1246
+ const degitCommand = shellQuote.quote(["npx", "degit", degitRepo, targetPath]);
1247
+ await exec(degitCommand, {
1248
+ cwd: process.cwd()
1249
+ });
1250
+ } catch {
1251
+ try {
1252
+ const gitCommand = shellQuote.quote(["git", "clone", repoUrl, targetPath]);
1253
+ await exec(gitCommand, {
1254
+ cwd: process.cwd()
1255
+ });
1256
+ const gitDir = path3.join(targetPath, ".git");
1257
+ if (await directoryExists(gitDir)) {
1258
+ await fs5.rm(gitDir, { recursive: true, force: true });
858
1259
  }
1260
+ } catch (gitError) {
1261
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
1262
+ }
1263
+ }
1264
+ }
1265
+ async function updatePackageJson(projectPath, projectName) {
1266
+ const packageJsonPath = path3.join(projectPath, "package.json");
1267
+ try {
1268
+ const packageJsonContent = await fs5.readFile(packageJsonPath, "utf-8");
1269
+ const packageJson = JSON.parse(packageJsonContent);
1270
+ packageJson.name = projectName;
1271
+ await fs5.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
1272
+ } catch (error) {
1273
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
1274
+ }
1275
+ }
1276
+ async function installDependencies(projectPath, packageManager) {
1277
+ const spinner5 = yoctoSpinner({ text: "Installing dependencies..." }).start();
1278
+ try {
1279
+ const pm = packageManager || getPackageManager();
1280
+ const installCommand = shellQuote.quote([pm, "install"]);
1281
+ await exec(installCommand, {
1282
+ cwd: projectPath
859
1283
  });
1284
+ spinner5.success("Dependencies installed successfully");
1285
+ } catch (error) {
1286
+ spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
1287
+ throw error;
860
1288
  }
861
- async getLogs(transportId) {
862
- if (!transportId || !this.transports[transportId]) {
863
- return [];
1289
+ }
1290
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
1291
+ async function loadTemplates() {
1292
+ try {
1293
+ const response = await fetch(TEMPLATES_API_URL);
1294
+ if (!response.ok) {
1295
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
864
1296
  }
865
- return this.transports[transportId].getLogs();
1297
+ const templates = await response.json();
1298
+ return templates;
1299
+ } catch (error) {
1300
+ console.error("Error loading templates:", error);
1301
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
866
1302
  }
867
- async getLogsByRunId({ runId, transportId }) {
868
- return this.transports[transportId]?.getLogsByRunId({ runId });
1303
+ }
1304
+ function pluralize(count, singular, plural) {
1305
+ return count === 1 ? singular : plural || `${singular}s`;
1306
+ }
1307
+ async function selectTemplate(templates) {
1308
+ const choices = templates.map((template) => {
1309
+ const parts = [];
1310
+ if (template.agents?.length) {
1311
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
1312
+ }
1313
+ if (template.tools?.length) {
1314
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
1315
+ }
1316
+ if (template.workflows?.length) {
1317
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
1318
+ }
1319
+ if (template.mcp?.length) {
1320
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
1321
+ }
1322
+ if (template.networks?.length) {
1323
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
1324
+ }
1325
+ return {
1326
+ value: template,
1327
+ label: template.title,
1328
+ hint: parts.join(", ") || "Template components"
1329
+ };
1330
+ });
1331
+ const selected = await ve({
1332
+ message: "Select a template:",
1333
+ options: choices
1334
+ });
1335
+ if (pD(selected)) {
1336
+ return null;
1337
+ }
1338
+ return selected;
1339
+ }
1340
+ function findTemplateByName(templates, templateName) {
1341
+ let template = templates.find((t) => t.slug === templateName);
1342
+ if (template) return template;
1343
+ const slugWithPrefix = `template-${templateName}`;
1344
+ template = templates.find((t) => t.slug === slugWithPrefix);
1345
+ if (template) return template;
1346
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
1347
+ if (template) return template;
1348
+ return null;
1349
+ }
1350
+ function getDefaultProjectName(template) {
1351
+ return template.slug.replace(/^template-/, "");
1352
+ }
1353
+ function getPackageManagerAddCommand(pm) {
1354
+ switch (pm) {
1355
+ case "npm":
1356
+ return "install --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false";
1357
+ case "yarn":
1358
+ return "add";
1359
+ case "pnpm":
1360
+ return "add --loglevel=error";
1361
+ case "bun":
1362
+ return "add";
1363
+ default:
1364
+ return "add";
869
1365
  }
870
- };
871
- function createLogger(options) {
872
- return new Logger(options);
873
1366
  }
874
-
875
1367
  var DepsService = class {
876
1368
  packageManager;
877
1369
  constructor() {
@@ -880,11 +1372,11 @@ var DepsService = class {
880
1372
  findLockFile(dir) {
881
1373
  const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
882
1374
  for (const file of lockFiles) {
883
- if (fs3__default__default.existsSync(path.join(dir, file))) {
1375
+ if (fs4__default__default.existsSync(path3.join(dir, file))) {
884
1376
  return file;
885
1377
  }
886
1378
  }
887
- const parentDir = path.resolve(dir, "..");
1379
+ const parentDir = path3.resolve(dir, "..");
888
1380
  if (parentDir !== dir) {
889
1381
  return this.findLockFile(parentDir);
890
1382
  }
@@ -906,14 +1398,10 @@ var DepsService = class {
906
1398
  }
907
1399
  }
908
1400
  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
- }
1401
+ const pm = this.packageManager;
1402
+ const installCommand = getPackageManagerAddCommand(pm);
915
1403
  const packageList = packages.join(" ");
916
- return execa(`${runCommand} ${packageList}`, {
1404
+ return execa(`${pm} ${installCommand} ${packageList}`, {
917
1405
  all: true,
918
1406
  shell: true,
919
1407
  stdio: "inherit"
@@ -921,13 +1409,13 @@ var DepsService = class {
921
1409
  }
922
1410
  async checkDependencies(dependencies) {
923
1411
  try {
924
- const packageJsonPath = path.join(process.cwd(), "package.json");
1412
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
925
1413
  try {
926
- await fs4.access(packageJsonPath);
1414
+ await fs5.access(packageJsonPath);
927
1415
  } catch {
928
1416
  return "No package.json file found in the current directory";
929
1417
  }
930
- const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
1418
+ const packageJson = JSON.parse(await fs5.readFile(packageJsonPath, "utf-8"));
931
1419
  for (const dependency of dependencies) {
932
1420
  if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
933
1421
  return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
@@ -941,66 +1429,24 @@ var DepsService = class {
941
1429
  }
942
1430
  async getProjectName() {
943
1431
  try {
944
- const packageJsonPath = path.join(process.cwd(), "package.json");
945
- const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1432
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1433
+ const packageJson = await fs5.readFile(packageJsonPath, "utf-8");
946
1434
  const pkg = JSON.parse(packageJson);
947
1435
  return pkg.name;
948
1436
  } catch (err) {
949
1437
  throw err;
950
1438
  }
951
1439
  }
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
1440
  async addScriptsToPackageJson(scripts) {
960
- const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1441
+ const packageJson = JSON.parse(await fs5.readFile("package.json", "utf-8"));
961
1442
  packageJson.scripts = {
962
1443
  ...packageJson.scripts,
963
1444
  ...scripts
964
1445
  };
965
- await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1446
+ await fs5.writeFile("package.json", JSON.stringify(packageJson, null, 2));
966
1447
  }
967
1448
  };
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"];
1449
+ var args = ["-y", "@mastra/mcp-docs-server"];
1004
1450
  var createMcpConfig = (editor) => {
1005
1451
  if (editor === "vscode") {
1006
1452
  return {
@@ -1019,10 +1465,7 @@ var createMcpConfig = (editor) => {
1019
1465
  }
1020
1466
  return {
1021
1467
  mcpServers: {
1022
- mastra: process.platform === `win32` ? {
1023
- command: "cmd",
1024
- args: ["/c", "npx", ...args]
1025
- } : {
1468
+ mastra: {
1026
1469
  command: "npx",
1027
1470
  args
1028
1471
  }
@@ -1055,15 +1498,19 @@ async function writeMergedConfig(configPath, editor) {
1055
1498
  spaces: 2
1056
1499
  });
1057
1500
  }
1058
- var windsurfGlobalMCPConfigPath = path.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1059
- var cursorGlobalMCPConfigPath = path.join(os.homedir(), ".cursor", "mcp.json");
1060
- path.join(process.cwd(), ".vscode", "mcp.json");
1501
+ var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1502
+ var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
1503
+ path3.join(process.cwd(), ".vscode", "mcp.json");
1504
+ var vscodeGlobalMCPConfigPath = path3.join(
1505
+ os.homedir(),
1506
+ process.platform === "win32" ? path3.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path3.join("Library", "Application Support", "Code", "User", "settings.json") : path3.join(".config", "Code", "User", "settings.json")
1507
+ );
1061
1508
  async function installMastraDocsMCPServer({ editor, directory }) {
1062
1509
  if (editor === `cursor`) {
1063
- await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"), "cursor");
1510
+ await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
1064
1511
  }
1065
1512
  if (editor === `vscode`) {
1066
- await writeMergedConfig(path.join(directory, ".vscode", "mcp.json"), "vscode");
1513
+ await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
1067
1514
  }
1068
1515
  if (editor === `cursor-global`) {
1069
1516
  const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
@@ -1086,19 +1533,28 @@ async function globalMCPIsAlreadyInstalled(editor) {
1086
1533
  configPath = windsurfGlobalMCPConfigPath;
1087
1534
  } else if (editor === "cursor-global") {
1088
1535
  configPath = cursorGlobalMCPConfigPath;
1536
+ } else if (editor === "vscode") {
1537
+ configPath = vscodeGlobalMCPConfigPath;
1089
1538
  }
1090
1539
  if (!configPath || !existsSync(configPath)) {
1091
1540
  return false;
1092
1541
  }
1093
1542
  try {
1094
1543
  const configContents = await readJSON(configPath);
1544
+ if (!configContents) return false;
1545
+ if (editor === "vscode") {
1546
+ if (!configContents.servers) return false;
1547
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1548
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1549
+ );
1550
+ return hasMastraMCP2;
1551
+ }
1095
1552
  if (!configContents?.mcpServers) return false;
1096
1553
  const hasMastraMCP = Object.values(configContents.mcpServers).some(
1097
1554
  (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1098
1555
  );
1099
1556
  return hasMastraMCP;
1100
- } catch (e) {
1101
- console.error(e);
1557
+ } catch {
1102
1558
  return false;
1103
1559
  }
1104
1560
  }
@@ -1112,7 +1568,7 @@ var FileEnvService = class extends EnvService {
1112
1568
  }
1113
1569
  readFile(filePath) {
1114
1570
  return new Promise((resolve, reject) => {
1115
- fs3__default.readFile(filePath, "utf8", (err, data) => {
1571
+ fs4__default.readFile(filePath, "utf8", (err, data) => {
1116
1572
  if (err) reject(err);
1117
1573
  else resolve(data);
1118
1574
  });
@@ -1120,7 +1576,7 @@ var FileEnvService = class extends EnvService {
1120
1576
  }
1121
1577
  writeFile({ filePath, data }) {
1122
1578
  return new Promise((resolve, reject) => {
1123
- fs3__default.writeFile(filePath, data, "utf8", (err) => {
1579
+ fs4__default.writeFile(filePath, data, "utf8", (err) => {
1124
1580
  if (err) reject(err);
1125
1581
  else resolve();
1126
1582
  });
@@ -1140,7 +1596,7 @@ var FileEnvService = class extends EnvService {
1140
1596
  ${key}=${value}`;
1141
1597
  }
1142
1598
  await this.writeFile({ filePath, data });
1143
- console.log(`${key} set to ${value} in ENV file.`);
1599
+ console.info(`${key} set to ${value} in ENV file.`);
1144
1600
  return data;
1145
1601
  }
1146
1602
  async getEnvValue(key) {
@@ -1173,25 +1629,25 @@ var FileService = class {
1173
1629
  */
1174
1630
  async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1175
1631
  const __filename = fileURLToPath(import.meta.url);
1176
- const __dirname = path.dirname(__filename);
1177
- const filePath = path.resolve(__dirname, "starter-files", inputFile);
1178
- const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1179
- if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1180
- console.log(`${outputFilePath} already exists`);
1632
+ const __dirname = path3.dirname(__filename);
1633
+ const filePath = path3.resolve(__dirname, "starter-files", inputFile);
1634
+ const fileString = fs4__default__default.readFileSync(filePath, "utf8");
1635
+ if (fs4__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1636
+ console.info(`${outputFilePath} already exists`);
1181
1637
  return false;
1182
1638
  }
1183
- await fsExtra3.outputFile(outputFilePath, fileString);
1639
+ await fsExtra.outputFile(outputFilePath, fileString);
1184
1640
  return true;
1185
1641
  }
1186
1642
  async setupEnvFile({ dbUrl }) {
1187
- const envPath = path.join(process.cwd(), ".env.development");
1188
- await fsExtra3.ensureFile(envPath);
1643
+ const envPath = path3.join(process.cwd(), ".env.development");
1644
+ await fsExtra.ensureFile(envPath);
1189
1645
  const fileEnvService = new FileEnvService(envPath);
1190
1646
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1191
1647
  }
1192
1648
  getFirstExistingFile(files) {
1193
1649
  for (const f of files) {
1194
- if (fs3__default__default.existsSync(f)) {
1650
+ if (fs4__default__default.existsSync(f)) {
1195
1651
  return f;
1196
1652
  }
1197
1653
  }
@@ -1201,18 +1657,22 @@ var FileService = class {
1201
1657
  filePath,
1202
1658
  replacements
1203
1659
  }) {
1204
- let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1660
+ let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
1205
1661
  replacements.forEach(({ search, replace }) => {
1206
1662
  fileContent = fileContent.replaceAll(search, replace);
1207
1663
  });
1208
- fs3__default__default.writeFileSync(filePath, fileContent);
1664
+ fs4__default__default.writeFileSync(filePath, fileContent);
1665
+ }
1666
+ };
1667
+ var exec2 = util.promisify(child_process.exec);
1668
+ var getAISDKPackageVersion = (llmProvider) => {
1669
+ switch (llmProvider) {
1670
+ case "cerebras":
1671
+ return "^0.2.14";
1672
+ default:
1673
+ return "^1.0.0";
1209
1674
  }
1210
1675
  };
1211
- createLogger({
1212
- name: "Mastra CLI",
1213
- level: "debug"
1214
- });
1215
- var exec = util.promisify(child_process.exec);
1216
1676
  var getAISDKPackage = (llmProvider) => {
1217
1677
  switch (llmProvider) {
1218
1678
  case "openai":
@@ -1225,6 +1685,8 @@ var getAISDKPackage = (llmProvider) => {
1225
1685
  return "@ai-sdk/google";
1226
1686
  case "cerebras":
1227
1687
  return "@ai-sdk/cerebras";
1688
+ case "mistral":
1689
+ return "@ai-sdk/mistral";
1228
1690
  default:
1229
1691
  return "@ai-sdk/openai";
1230
1692
  }
@@ -1234,7 +1696,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
1234
1696
  let modelItem = "";
1235
1697
  if (llmProvider === "openai") {
1236
1698
  providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1237
- modelItem = `openai('gpt-4o')`;
1699
+ modelItem = `openai('gpt-4o-mini')`;
1238
1700
  } else if (llmProvider === "anthropic") {
1239
1701
  providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1240
1702
  modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
@@ -1243,24 +1705,29 @@ var getProviderImportAndModelItem = (llmProvider) => {
1243
1705
  modelItem = `groq('llama-3.3-70b-versatile')`;
1244
1706
  } else if (llmProvider === "google") {
1245
1707
  providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1246
- modelItem = `google('gemini-1.5-pro-latest')`;
1708
+ modelItem = `google('gemini-2.5-pro')`;
1247
1709
  } else if (llmProvider === "cerebras") {
1248
1710
  providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1249
1711
  modelItem = `cerebras('llama-3.3-70b')`;
1712
+ } else if (llmProvider === "mistral") {
1713
+ providerImport = `import { mistral } from '${getAISDKPackage(llmProvider)}';`;
1714
+ modelItem = `mistral('mistral-medium-2508')`;
1250
1715
  }
1251
1716
  return { providerImport, modelItem };
1252
1717
  };
1253
1718
  async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1254
1719
  const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1255
1720
  const instructions = `
1256
- You are a helpful weather assistant that provides accurate weather information.
1721
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1257
1722
 
1258
1723
  Your primary function is to help users get weather details for specific locations. When responding:
1259
1724
  - Always ask for a location if none is provided
1260
- - If the location name isn\u2019t in English, please translate it
1725
+ - If the location name isn't in English, please translate it
1261
1726
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1262
1727
  - Include relevant details like humidity, wind conditions, and precipitation
1263
1728
  - Keep responses concise but informative
1729
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1730
+ - If the user asks for activities, respond in the format they request.
1264
1731
 
1265
1732
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1266
1733
  `;
@@ -1269,7 +1736,7 @@ ${providerImport}
1269
1736
  import { Agent } from '@mastra/core/agent';
1270
1737
  import { Memory } from '@mastra/memory';
1271
1738
  import { LibSQLStore } from '@mastra/libsql';
1272
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1739
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1273
1740
 
1274
1741
  export const weatherAgent = new Agent({
1275
1742
  name: 'Weather Agent',
@@ -1279,14 +1746,7 @@ export const weatherAgent = new Agent({
1279
1746
  memory: new Memory({
1280
1747
  storage: new LibSQLStore({
1281
1748
  url: "file:../mastra.db", // path is relative to the .mastra/output directory
1282
- }),
1283
- options: {
1284
- lastMessages: 10,
1285
- semanticRecall: false,
1286
- threads: {
1287
- generateTitle: false
1288
- }
1289
- }
1749
+ })
1290
1750
  })
1291
1751
  });
1292
1752
  `;
@@ -1294,142 +1754,159 @@ export const weatherAgent = new Agent({
1294
1754
  parser: "typescript",
1295
1755
  singleQuote: true
1296
1756
  });
1297
- await fs4.writeFile(destPath, "");
1298
- await fs4.writeFile(destPath, formattedContent);
1757
+ await fs5.writeFile(destPath, "");
1758
+ await fs5.writeFile(destPath, formattedContent);
1299
1759
  }
1300
- async function writeWorkflowSample(destPath, llmProvider) {
1301
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1302
- const content = `${providerImport}
1303
- import { Agent } from '@mastra/core/agent';
1304
- import { Step, Workflow } from '@mastra/core/workflows';
1760
+ async function writeWorkflowSample(destPath) {
1761
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1305
1762
  import { z } from 'zod';
1306
1763
 
1307
- const llm = ${modelItem};
1308
-
1309
- const agent = new Agent({
1310
- name: 'Weather Agent',
1311
- model: llm,
1312
- instructions: \`
1313
- You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
1314
-
1315
- For each day in the forecast, structure your response exactly as follows:
1316
-
1317
- \u{1F4C5} [Day, Month Date, Year]
1318
- \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
1319
-
1320
- \u{1F321}\uFE0F WEATHER SUMMARY
1321
- \u2022 Conditions: [brief description]
1322
- \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1323
- \u2022 Precipitation: [X% chance]
1324
-
1325
- \u{1F305} MORNING ACTIVITIES
1326
- Outdoor:
1327
- \u2022 [Activity Name] - [Brief description including specific location/route]
1328
- Best timing: [specific time range]
1329
- Note: [relevant weather consideration]
1330
-
1331
- \u{1F31E} AFTERNOON ACTIVITIES
1332
- Outdoor:
1333
- \u2022 [Activity Name] - [Brief description including specific location/route]
1334
- Best timing: [specific time range]
1335
- Note: [relevant weather consideration]
1336
-
1337
- \u{1F3E0} INDOOR ALTERNATIVES
1338
- \u2022 [Activity Name] - [Brief description including specific venue]
1339
- Ideal for: [weather condition that would trigger this alternative]
1340
-
1341
- \u26A0\uFE0F SPECIAL CONSIDERATIONS
1342
- \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1343
-
1344
- Guidelines:
1345
- - Suggest 2-3 time-specific outdoor activities per day
1346
- - Include 1-2 indoor backup options
1347
- - For precipitation >50%, lead with indoor activities
1348
- - All activities must be specific to the location
1349
- - Include specific venues, trails, or locations
1350
- - Consider activity intensity based on temperature
1351
- - Keep descriptions concise but informative
1352
-
1353
- Maintain this exact formatting for consistency, using the emoji and section headers as shown.
1354
- \`,
1355
- });
1764
+ const forecastSchema = z.object({
1765
+ date: z.string(),
1766
+ maxTemp: z.number(),
1767
+ minTemp: z.number(),
1768
+ precipitationChance: z.number(),
1769
+ condition: z.string(),
1770
+ location: z.string(),
1771
+ })
1356
1772
 
1357
- const forecastSchema = z.array(
1358
- z.object({
1359
- date: z.string(),
1360
- maxTemp: z.number(),
1361
- minTemp: z.number(),
1362
- precipitationChance: z.number(),
1363
- condition: z.string(),
1364
- location: z.string(),
1365
- }),
1366
- );
1773
+ function getWeatherCondition(code: number): string {
1774
+ const conditions: Record<number, string> = {
1775
+ 0: 'Clear sky',
1776
+ 1: 'Mainly clear',
1777
+ 2: 'Partly cloudy',
1778
+ 3: 'Overcast',
1779
+ 45: 'Foggy',
1780
+ 48: 'Depositing rime fog',
1781
+ 51: 'Light drizzle',
1782
+ 53: 'Moderate drizzle',
1783
+ 55: 'Dense drizzle',
1784
+ 61: 'Slight rain',
1785
+ 63: 'Moderate rain',
1786
+ 65: 'Heavy rain',
1787
+ 71: 'Slight snow fall',
1788
+ 73: 'Moderate snow fall',
1789
+ 75: 'Heavy snow fall',
1790
+ 95: 'Thunderstorm',
1791
+ }
1792
+ return conditions[code] || 'Unknown'
1793
+ }
1367
1794
 
1368
- const fetchWeather = new Step({
1795
+ const fetchWeather = createStep({
1369
1796
  id: 'fetch-weather',
1370
1797
  description: 'Fetches weather forecast for a given city',
1371
1798
  inputSchema: z.object({
1372
1799
  city: z.string().describe('The city to get the weather for'),
1373
1800
  }),
1374
1801
  outputSchema: forecastSchema,
1375
- execute: async ({ context }) => {
1376
- const triggerData = context?.getStepResult<{ city: string }>('trigger');
1377
-
1378
- if (!triggerData) {
1379
- throw new Error('Trigger data not found');
1802
+ execute: async ({ inputData }) => {
1803
+ if (!inputData) {
1804
+ throw new Error('Input data not found');
1380
1805
  }
1381
1806
 
1382
- const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(triggerData.city)}&count=1\`;
1807
+ const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
1383
1808
  const geocodingResponse = await fetch(geocodingUrl);
1384
1809
  const geocodingData = (await geocodingResponse.json()) as {
1385
1810
  results: { latitude: number; longitude: number; name: string }[];
1386
1811
  };
1387
1812
 
1388
1813
  if (!geocodingData.results?.[0]) {
1389
- throw new Error(\`Location '\${triggerData.city}' not found\`);
1814
+ throw new Error(\`Location '\${inputData.city}' not found\`);
1390
1815
  }
1391
1816
 
1392
1817
  const { latitude, longitude, name } = geocodingData.results[0];
1393
1818
 
1394
- const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_mean,weathercode&timezone=auto\`;
1819
+ const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&current=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
1395
1820
  const response = await fetch(weatherUrl);
1396
1821
  const data = (await response.json()) as {
1397
- daily: {
1398
- time: string[];
1399
- temperature_2m_max: number[];
1400
- temperature_2m_min: number[];
1401
- precipitation_probability_mean: number[];
1402
- weathercode: number[];
1403
- };
1404
- };
1822
+ current: {
1823
+ time: string
1824
+ precipitation: number
1825
+ weathercode: number
1826
+ }
1827
+ hourly: {
1828
+ precipitation_probability: number[]
1829
+ temperature_2m: number[]
1830
+ }
1831
+ }
1405
1832
 
1406
- const forecast = data.daily.time.map((date: string, index: number) => ({
1407
- date,
1408
- maxTemp: data.daily.temperature_2m_max[index],
1409
- minTemp: data.daily.temperature_2m_min[index],
1410
- precipitationChance: data.daily.precipitation_probability_mean[index],
1411
- condition: getWeatherCondition(data.daily.weathercode[index]!),
1412
- location: name,
1413
- }));
1833
+ const forecast = {
1834
+ date: new Date().toISOString(),
1835
+ maxTemp: Math.max(...data.hourly.temperature_2m),
1836
+ minTemp: Math.min(...data.hourly.temperature_2m),
1837
+ condition: getWeatherCondition(data.current.weathercode),
1838
+ precipitationChance: data.hourly.precipitation_probability.reduce(
1839
+ (acc, curr) => Math.max(acc, curr),
1840
+ 0
1841
+ ),
1842
+ location: name
1843
+ }
1414
1844
 
1415
1845
  return forecast;
1416
1846
  },
1417
1847
  });
1418
1848
 
1419
1849
 
1420
- const planActivities = new Step({
1850
+ const planActivities = createStep({
1421
1851
  id: 'plan-activities',
1422
1852
  description: 'Suggests activities based on weather conditions',
1423
- execute: async ({ context, mastra }) => {
1424
- const forecast = context?.getStepResult(fetchWeather);
1853
+ inputSchema: forecastSchema,
1854
+ outputSchema: z.object({
1855
+ activities: z.string(),
1856
+ }),
1857
+ execute: async ({ inputData, mastra }) => {
1858
+ const forecast = inputData
1859
+
1860
+ if (!forecast) {
1861
+ throw new Error('Forecast data not found')
1862
+ }
1425
1863
 
1426
- if (!forecast || forecast.length === 0) {
1427
- throw new Error('Forecast data not found');
1864
+ const agent = mastra?.getAgent('weatherAgent');
1865
+ if (!agent) {
1866
+ throw new Error('Weather agent not found');
1428
1867
  }
1429
1868
 
1430
- const prompt = \`Based on the following weather forecast for \${forecast[0]?.location}, suggest appropriate activities:
1869
+ const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1431
1870
  \${JSON.stringify(forecast, null, 2)}
1432
- \`;
1871
+ For each day in the forecast, structure your response exactly as follows:
1872
+
1873
+ \u{1F4C5} [Day, Month Date, Year]
1874
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
1875
+
1876
+ \u{1F321}\uFE0F WEATHER SUMMARY
1877
+ \u2022 Conditions: [brief description]
1878
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1879
+ \u2022 Precipitation: [X% chance]
1880
+
1881
+ \u{1F305} MORNING ACTIVITIES
1882
+ Outdoor:
1883
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1884
+ Best timing: [specific time range]
1885
+ Note: [relevant weather consideration]
1886
+
1887
+ \u{1F31E} AFTERNOON ACTIVITIES
1888
+ Outdoor:
1889
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1890
+ Best timing: [specific time range]
1891
+ Note: [relevant weather consideration]
1892
+
1893
+ \u{1F3E0} INDOOR ALTERNATIVES
1894
+ \u2022 [Activity Name] - [Brief description including specific venue]
1895
+ Ideal for: [weather condition that would trigger this alternative]
1896
+
1897
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1898
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1899
+
1900
+ Guidelines:
1901
+ - Suggest 2-3 time-specific outdoor activities per day
1902
+ - Include 1-2 indoor backup options
1903
+ - For precipitation >50%, lead with indoor activities
1904
+ - All activities must be specific to the location
1905
+ - Include specific venues, trails, or locations
1906
+ - Consider activity intensity based on temperature
1907
+ - Keep descriptions concise but informative
1908
+
1909
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1433
1910
 
1434
1911
  const response = await agent.stream([
1435
1912
  {
@@ -1439,7 +1916,7 @@ const planActivities = new Step({
1439
1916
  ]);
1440
1917
 
1441
1918
  let activitiesText = '';
1442
-
1919
+
1443
1920
  for await (const chunk of response.textStream) {
1444
1921
  process.stdout.write(chunk);
1445
1922
  activitiesText += chunk;
@@ -1451,35 +1928,16 @@ const planActivities = new Step({
1451
1928
  },
1452
1929
  });
1453
1930
 
1454
- function getWeatherCondition(code: number): string {
1455
- const conditions: Record<number, string> = {
1456
- 0: 'Clear sky',
1457
- 1: 'Mainly clear',
1458
- 2: 'Partly cloudy',
1459
- 3: 'Overcast',
1460
- 45: 'Foggy',
1461
- 48: 'Depositing rime fog',
1462
- 51: 'Light drizzle',
1463
- 53: 'Moderate drizzle',
1464
- 55: 'Dense drizzle',
1465
- 61: 'Slight rain',
1466
- 63: 'Moderate rain',
1467
- 65: 'Heavy rain',
1468
- 71: 'Slight snow fall',
1469
- 73: 'Moderate snow fall',
1470
- 75: 'Heavy snow fall',
1471
- 95: 'Thunderstorm',
1472
- };
1473
- return conditions[code] || 'Unknown';
1474
- }
1475
-
1476
- const weatherWorkflow = new Workflow({
1477
- name: 'weather-workflow',
1478
- triggerSchema: z.object({
1931
+ const weatherWorkflow = createWorkflow({
1932
+ id: 'weather-workflow',
1933
+ inputSchema: z.object({
1479
1934
  city: z.string().describe('The city to get the weather for'),
1480
1935
  }),
1936
+ outputSchema: z.object({
1937
+ activities: z.string(),
1938
+ })
1481
1939
  })
1482
- .step(fetchWeather)
1940
+ .then(fetchWeather)
1483
1941
  .then(planActivities);
1484
1942
 
1485
1943
  weatherWorkflow.commit();
@@ -1490,7 +1948,7 @@ export { weatherWorkflow };`;
1490
1948
  semi: true,
1491
1949
  singleQuote: true
1492
1950
  });
1493
- await fs4.writeFile(destPath, formattedContent);
1951
+ await fs5.writeFile(destPath, formattedContent);
1494
1952
  }
1495
1953
  async function writeToolSample(destPath) {
1496
1954
  const fileService = new FileService();
@@ -1503,14 +1961,14 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
1503
1961
  case "tools":
1504
1962
  return writeToolSample(destPath);
1505
1963
  case "workflows":
1506
- return writeWorkflowSample(destPath, llmprovider);
1964
+ return writeWorkflowSample(destPath);
1507
1965
  default:
1508
1966
  return "";
1509
1967
  }
1510
1968
  }
1511
1969
  var createComponentsDir = async (dirPath, component) => {
1512
1970
  const componentPath = dirPath + `/${component}`;
1513
- await fsExtra3.ensureDir(componentPath);
1971
+ await fsExtra.ensureDir(componentPath);
1514
1972
  };
1515
1973
  var writeIndexFile = async ({
1516
1974
  dirPath,
@@ -1519,15 +1977,15 @@ var writeIndexFile = async ({
1519
1977
  addWorkflow
1520
1978
  }) => {
1521
1979
  const indexPath = dirPath + "/index.ts";
1522
- const destPath = path.join(indexPath);
1980
+ const destPath = path3.join(indexPath);
1523
1981
  try {
1524
- await fs4.writeFile(destPath, "");
1982
+ await fs5.writeFile(destPath, "");
1525
1983
  const filteredExports = [
1526
1984
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1527
1985
  addAgent ? `agents: { weatherAgent },` : ""
1528
1986
  ].filter(Boolean);
1529
1987
  if (!addExample) {
1530
- await fs4.writeFile(
1988
+ await fs5.writeFile(
1531
1989
  destPath,
1532
1990
  `
1533
1991
  import { Mastra } from '@mastra/core';
@@ -1537,14 +1995,14 @@ export const mastra = new Mastra()
1537
1995
  );
1538
1996
  return;
1539
1997
  }
1540
- await fs4.writeFile(
1998
+ await fs5.writeFile(
1541
1999
  destPath,
1542
2000
  `
1543
2001
  import { Mastra } from '@mastra/core/mastra';
1544
- import { createLogger } from '@mastra/core/logger';
2002
+ import { PinoLogger } from '@mastra/loggers';
1545
2003
  import { LibSQLStore } from '@mastra/libsql';
1546
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1547
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
2004
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
2005
+ ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1548
2006
 
1549
2007
  export const mastra = new Mastra({
1550
2008
  ${filteredExports.join("\n ")}
@@ -1552,7 +2010,7 @@ export const mastra = new Mastra({
1552
2010
  // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1553
2011
  url: ":memory:",
1554
2012
  }),
1555
- logger: createLogger({
2013
+ logger: new PinoLogger({
1556
2014
  name: 'Mastra',
1557
2015
  level: 'info',
1558
2016
  }),
@@ -1579,6 +2037,9 @@ var getAPIKey = async (provider) => {
1579
2037
  case "cerebras":
1580
2038
  key = "CEREBRAS_API_KEY";
1581
2039
  return key;
2040
+ case "mistral":
2041
+ key = "MISTRAL_API_KEY";
2042
+ return key;
1582
2043
  default:
1583
2044
  return key;
1584
2045
  }
@@ -1588,21 +2049,23 @@ var writeAPIKey = async ({
1588
2049
  apiKey = "your-api-key"
1589
2050
  }) => {
1590
2051
  const key = await getAPIKey(provider);
1591
- await exec(`echo ${key}=${apiKey} >> .env.development`);
2052
+ const escapedKey = shellQuote.quote([key]);
2053
+ const escapedApiKey = shellQuote.quote([apiKey]);
2054
+ await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
1592
2055
  };
1593
2056
  var createMastraDir = async (directory) => {
1594
2057
  let dir = directory.trim().split("/").filter((item) => item !== "");
1595
- const dirPath = path.join(process.cwd(), ...dir, "mastra");
2058
+ const dirPath = path3.join(process.cwd(), ...dir, "mastra");
1596
2059
  try {
1597
- await fs4.access(dirPath);
2060
+ await fs5.access(dirPath);
1598
2061
  return { ok: false };
1599
2062
  } catch {
1600
- await fsExtra3.ensureDir(dirPath);
2063
+ await fsExtra.ensureDir(dirPath);
1601
2064
  return { ok: true, dirPath };
1602
2065
  }
1603
2066
  };
1604
2067
  var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1605
- const destPath = dirPath + `/${component}/index.ts`;
2068
+ const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
1606
2069
  try {
1607
2070
  await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1608
2071
  } catch (err) {
@@ -1610,40 +2073,27 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
1610
2073
  }
1611
2074
  };
1612
2075
  var interactivePrompt = async () => {
1613
- pe(color2.inverse("Mastra Init"));
1614
- const mastraProject = await ve(
2076
+ Ie(color2.inverse(" Mastra Init "));
2077
+ const mastraProject = await Ce(
1615
2078
  {
1616
- directory: () => ae({
2079
+ directory: () => he({
1617
2080
  message: "Where should we create the Mastra files? (default: src/)",
1618
2081
  placeholder: "src/",
1619
2082
  defaultValue: "src/"
1620
2083
  }),
1621
- components: () => $e({
1622
- message: "Choose components to install:",
1623
- options: [
1624
- { value: "agents", label: "Agents", hint: "recommended" },
1625
- {
1626
- value: "workflows",
1627
- label: "Workflows"
1628
- }
1629
- ]
1630
- }),
1631
- shouldAddTools: () => ce({
1632
- message: "Add tools?",
1633
- initialValue: false
1634
- }),
1635
- llmProvider: () => le({
2084
+ llmProvider: () => ve({
1636
2085
  message: "Select default provider:",
1637
2086
  options: [
1638
2087
  { value: "openai", label: "OpenAI", hint: "recommended" },
1639
2088
  { value: "anthropic", label: "Anthropic" },
1640
2089
  { value: "groq", label: "Groq" },
1641
2090
  { value: "google", label: "Google" },
1642
- { value: "cerebras", label: "Cerebras" }
2091
+ { value: "cerebras", label: "Cerebras" },
2092
+ { value: "mistral", label: "Mistral" }
1643
2093
  ]
1644
2094
  }),
1645
2095
  llmApiKey: async ({ results: { llmProvider } }) => {
1646
- const keyChoice = await le({
2096
+ const keyChoice = await ve({
1647
2097
  message: `Enter your ${llmProvider} API key?`,
1648
2098
  options: [
1649
2099
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1652,21 +2102,18 @@ var interactivePrompt = async () => {
1652
2102
  initialValue: "skip"
1653
2103
  });
1654
2104
  if (keyChoice === "enter") {
1655
- return ae({
2105
+ return he({
1656
2106
  message: "Enter your API key:",
1657
2107
  placeholder: "sk-..."
1658
2108
  });
1659
2109
  }
1660
2110
  return void 0;
1661
2111
  },
1662
- addExample: () => ce({
1663
- message: "Add example",
1664
- initialValue: false
1665
- }),
1666
2112
  configureEditorWithDocsMCP: async () => {
1667
2113
  const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
1668
2114
  const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
1669
- const editor = await le({
2115
+ const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
2116
+ const editor = await ve({
1670
2117
  message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
1671
2118
  options: [
1672
2119
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1684,24 +2131,34 @@ var interactivePrompt = async () => {
1684
2131
  value: "windsurf",
1685
2132
  label: "Windsurf",
1686
2133
  hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2134
+ },
2135
+ {
2136
+ value: "vscode",
2137
+ label: "VSCode",
2138
+ hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
1687
2139
  }
1688
2140
  ]
1689
2141
  });
1690
2142
  if (editor === `skip`) return void 0;
1691
2143
  if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1692
- v.message(`
2144
+ M.message(`
1693
2145
  Windsurf is already installed, skipping.`);
1694
2146
  return void 0;
1695
2147
  }
2148
+ if (editor === `vscode` && vscodeIsAlreadyInstalled) {
2149
+ M.message(`
2150
+ VSCode is already installed, skipping.`);
2151
+ return void 0;
2152
+ }
1696
2153
  if (editor === `cursor`) {
1697
- v.message(
2154
+ M.message(
1698
2155
  `
1699
2156
  Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1700
2157
  `
1701
2158
  );
1702
2159
  }
1703
2160
  if (editor === `cursor-global`) {
1704
- const confirm2 = await le({
2161
+ const confirm2 = await ve({
1705
2162
  message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
1706
2163
  options: [
1707
2164
  { value: "yes", label: "Yes, I understand" },
@@ -1713,7 +2170,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
1713
2170
  }
1714
2171
  }
1715
2172
  if (editor === `windsurf`) {
1716
- const confirm2 = await le({
2173
+ const confirm2 = await ve({
1717
2174
  message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
1718
2175
  This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
1719
2176
  options: [
@@ -1730,17 +2187,15 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
1730
2187
  },
1731
2188
  {
1732
2189
  onCancel: () => {
1733
- he("Operation cancelled.");
2190
+ xe("Operation cancelled.");
1734
2191
  process.exit(0);
1735
2192
  }
1736
2193
  }
1737
2194
  );
1738
- const { shouldAddTools, components, ...rest } = mastraProject;
1739
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1740
- return { ...rest, components: mastraComponents };
2195
+ return mastraProject;
1741
2196
  };
1742
- var s = _();
1743
- var exec2 = util.promisify(child_process.exec);
2197
+ var s = Y();
2198
+ var exec3 = util.promisify(child_process.exec);
1744
2199
  var init = async ({
1745
2200
  directory,
1746
2201
  addExample = false,
@@ -1782,13 +2237,18 @@ var init = async ({
1782
2237
  if (needsMemory) {
1783
2238
  await depService.installPackages(["@mastra/memory"]);
1784
2239
  }
2240
+ const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2241
+ if (needsLoggers) {
2242
+ await depService.installPackages(["@mastra/loggers"]);
2243
+ }
1785
2244
  }
1786
2245
  const key = await getAPIKey(llmProvider || "openai");
1787
2246
  const aiSdkPackage = getAISDKPackage(llmProvider);
2247
+ const aiSdkPackageVersion = getAISDKPackageVersion(llmProvider);
1788
2248
  const depsService = new DepsService();
1789
2249
  const pm = depsService.packageManager;
1790
- const installCommand = getPackageManagerInstallCommand(pm);
1791
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
2250
+ const installCommand = getPackageManagerAddCommand(pm);
2251
+ await exec3(`${pm} ${installCommand} ${aiSdkPackage}@${aiSdkPackageVersion}`);
1792
2252
  if (configureEditorWithDocsMCP) {
1793
2253
  await installMastraDocsMCPServer({
1794
2254
  editor: configureEditorWithDocsMCP,
@@ -1797,14 +2257,14 @@ var init = async ({
1797
2257
  }
1798
2258
  s.stop();
1799
2259
  if (!llmApiKey) {
1800
- me(`
2260
+ Me(`
1801
2261
  ${color2.green("Mastra initialized successfully!")}
1802
2262
 
1803
2263
  Add your ${color2.cyan(key)} as an environment variable
1804
- in your ${color2.cyan(".env.development")} file
2264
+ in your ${color2.cyan(".env")} file
1805
2265
  `);
1806
2266
  } else {
1807
- me(`
2267
+ Me(`
1808
2268
  ${color2.green("Mastra initialized successfully!")}
1809
2269
  `);
1810
2270
  }
@@ -1815,10 +2275,10 @@ var init = async ({
1815
2275
  return { success: false };
1816
2276
  }
1817
2277
  };
1818
- var exec3 = util.promisify(child_process.exec);
2278
+ var exec4 = util.promisify(child_process.exec);
1819
2279
  var execWithTimeout = async (command, timeoutMs) => {
1820
2280
  try {
1821
- const promise = exec3(command, { killSignal: "SIGTERM" });
2281
+ const promise = exec4(command, { killSignal: "SIGTERM" });
1822
2282
  if (!timeoutMs) {
1823
2283
  return await promise;
1824
2284
  }
@@ -1838,23 +2298,29 @@ var execWithTimeout = async (command, timeoutMs) => {
1838
2298
  throw error;
1839
2299
  }
1840
2300
  } catch (error) {
1841
- console.error(error);
1842
2301
  throw error;
1843
2302
  }
1844
2303
  };
1845
2304
  async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
1846
- let installCommand = getPackageManagerInstallCommand(pm);
2305
+ let installCommand = getPackageManagerAddCommand(pm);
1847
2306
  if (isDev) {
1848
- installCommand = `${installCommand} --save-dev`;
2307
+ installCommand = `${installCommand} -D`;
1849
2308
  }
1850
2309
  try {
1851
2310
  await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
1852
2311
  } catch (err) {
1853
- console.log("err", err);
1854
2312
  if (versionTag === "@latest") {
1855
- throw err;
2313
+ throw new Error(
2314
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2315
+ );
2316
+ }
2317
+ try {
2318
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2319
+ } catch (fallbackErr) {
2320
+ throw new Error(
2321
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2322
+ );
1856
2323
  }
1857
- await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
1858
2324
  }
1859
2325
  }
1860
2326
  var createMastraProject = async ({
@@ -1862,46 +2328,55 @@ var createMastraProject = async ({
1862
2328
  createVersionTag,
1863
2329
  timeout
1864
2330
  }) => {
1865
- pe(color2.inverse("Mastra Create"));
1866
- const projectName = name ?? await ae({
2331
+ Ie(color2.inverse(" Mastra Create "));
2332
+ const projectName = name ?? await he({
1867
2333
  message: "What do you want to name your project?",
1868
2334
  placeholder: "my-mastra-app",
1869
2335
  defaultValue: "my-mastra-app"
1870
2336
  });
1871
- if (lD(projectName)) {
1872
- he("Operation cancelled");
2337
+ if (pD(projectName)) {
2338
+ xe("Operation cancelled");
1873
2339
  process.exit(0);
1874
2340
  }
1875
- const s2 = _();
1876
- s2.start("Creating project");
2341
+ const s2 = Y();
1877
2342
  try {
1878
- await fs4.mkdir(projectName);
1879
- } catch (error) {
1880
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1881
- s2.stop(
1882
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
2343
+ s2.start("Creating project");
2344
+ try {
2345
+ await fs5.mkdir(projectName);
2346
+ } catch (error) {
2347
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2348
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2349
+ process.exit(1);
2350
+ }
2351
+ throw new Error(
2352
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
1883
2353
  );
1884
- process.exit(1);
1885
2354
  }
1886
- throw error;
1887
- }
1888
- process.chdir(projectName);
1889
- const pm = getPackageManager();
1890
- const installCommand = getPackageManagerInstallCommand(pm);
1891
- s2.message("Creating project");
1892
- await exec3(`npm init -y`);
1893
- await exec3(`npm pkg set type="module"`);
1894
- await exec3(`npm pkg set engines.node=">=20.9.0"`);
1895
- const depsService = new DepsService();
1896
- await depsService.addScriptsToPackageJson({
1897
- dev: "mastra dev",
1898
- build: "mastra build"
1899
- });
1900
- s2.stop("Project created");
1901
- s2.start(`Installing ${pm} dependencies`);
1902
- await exec3(`${pm} ${installCommand} zod`);
1903
- await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
1904
- await exec3(`echo '{
2355
+ process.chdir(projectName);
2356
+ const pm = getPackageManager();
2357
+ const installCommand = getPackageManagerAddCommand(pm);
2358
+ s2.message("Initializing project structure");
2359
+ try {
2360
+ await exec4(`npm init -y`);
2361
+ await exec4(`npm pkg set type="module"`);
2362
+ await exec4(`npm pkg set engines.node=">=20.9.0"`);
2363
+ const depsService = new DepsService();
2364
+ await depsService.addScriptsToPackageJson({
2365
+ dev: "mastra dev",
2366
+ build: "mastra build",
2367
+ start: "mastra start"
2368
+ });
2369
+ } catch (error) {
2370
+ throw new Error(
2371
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2372
+ );
2373
+ }
2374
+ s2.stop("Project structure created");
2375
+ s2.start(`Installing ${pm} dependencies`);
2376
+ try {
2377
+ await exec4(`${pm} ${installCommand} zod@^3`);
2378
+ await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
2379
+ await exec4(`echo '{
1905
2380
  "compilerOptions": {
1906
2381
  "target": "ES2022",
1907
2382
  "module": "ES2022",
@@ -1917,31 +2392,60 @@ var createMastraProject = async ({
1917
2392
  "src/**/*"
1918
2393
  ]
1919
2394
  }' > tsconfig.json`);
1920
- s2.stop(`${pm} dependencies installed`);
1921
- s2.start("Installing mastra");
1922
- const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
1923
- await installMastraDependency(pm, "mastra", versionTag, true, timeout);
1924
- s2.stop("mastra installed");
1925
- s2.start("Installing dependencies");
1926
- await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
1927
- await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
1928
- await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
1929
- s2.stop("Dependencies installed");
1930
- s2.start("Adding .gitignore");
1931
- await exec3(`echo output.txt >> .gitignore`);
1932
- await exec3(`echo node_modules >> .gitignore`);
1933
- await exec3(`echo dist >> .gitignore`);
1934
- await exec3(`echo .mastra >> .gitignore`);
1935
- await exec3(`echo .env.development >> .gitignore`);
1936
- await exec3(`echo .env >> .gitignore`);
1937
- await exec3(`echo *.db >> .gitignore`);
1938
- await exec3(`echo *.db-* >> .gitignore`);
1939
- s2.stop(".gitignore added");
1940
- ge("Project created successfully");
1941
- console.log("");
1942
- return { projectName };
2395
+ } catch (error) {
2396
+ throw new Error(
2397
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2398
+ );
2399
+ }
2400
+ s2.stop(`${pm} dependencies installed`);
2401
+ s2.start("Installing mastra");
2402
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2403
+ try {
2404
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2405
+ } catch (error) {
2406
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2407
+ }
2408
+ s2.stop("mastra installed");
2409
+ s2.start("Installing dependencies");
2410
+ try {
2411
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2412
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2413
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2414
+ } catch (error) {
2415
+ throw new Error(
2416
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2417
+ );
2418
+ }
2419
+ s2.stop("Mastra dependencies installed");
2420
+ s2.start("Adding .gitignore");
2421
+ try {
2422
+ await exec4(`echo output.txt >> .gitignore`);
2423
+ await exec4(`echo node_modules >> .gitignore`);
2424
+ await exec4(`echo dist >> .gitignore`);
2425
+ await exec4(`echo .mastra >> .gitignore`);
2426
+ await exec4(`echo .env.development >> .gitignore`);
2427
+ await exec4(`echo .env >> .gitignore`);
2428
+ await exec4(`echo *.db >> .gitignore`);
2429
+ await exec4(`echo *.db-* >> .gitignore`);
2430
+ } catch (error) {
2431
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2432
+ }
2433
+ s2.stop(".gitignore added");
2434
+ Se("Project created successfully");
2435
+ console.info("");
2436
+ return { projectName };
2437
+ } catch (error) {
2438
+ s2.stop();
2439
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2440
+ xe(`Project creation failed: ${errorMessage}`);
2441
+ process.exit(1);
2442
+ }
1943
2443
  };
1944
2444
  var create = async (args2) => {
2445
+ if (args2.template !== void 0) {
2446
+ await createFromTemplate({ ...args2, injectedAnalytics: args2.analytics });
2447
+ return;
2448
+ }
1945
2449
  const { projectName } = await createMastraProject({
1946
2450
  projectName: args2?.projectName,
1947
2451
  createVersionTag: args2?.createVersionTag,
@@ -1952,7 +2456,9 @@ var create = async (args2) => {
1952
2456
  const result = await interactivePrompt();
1953
2457
  await init({
1954
2458
  ...result,
1955
- llmApiKey: result?.llmApiKey
2459
+ llmApiKey: result?.llmApiKey,
2460
+ components: ["agents", "tools", "workflows"],
2461
+ addExample: true
1956
2462
  });
1957
2463
  postCreate({ projectName });
1958
2464
  return;
@@ -1970,27 +2476,181 @@ var create = async (args2) => {
1970
2476
  };
1971
2477
  var postCreate = ({ projectName }) => {
1972
2478
  const packageManager = getPackageManager();
1973
- ge(`
2479
+ Se(`
1974
2480
  ${color2.green("To start your project:")}
1975
2481
 
1976
2482
  ${color2.cyan("cd")} ${projectName}
1977
2483
  ${color2.cyan(`${packageManager} run dev`)}
1978
2484
  `);
1979
2485
  };
2486
+ function isGitHubUrl(url) {
2487
+ try {
2488
+ const parsedUrl = new URL(url);
2489
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2490
+ } catch {
2491
+ return false;
2492
+ }
2493
+ }
2494
+ async function validateGitHubProject(githubUrl) {
2495
+ const errors = [];
2496
+ try {
2497
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2498
+ const owner = urlParts[0];
2499
+ const repo = urlParts[1]?.replace(".git", "");
2500
+ if (!owner || !repo) {
2501
+ throw new Error("Invalid GitHub URL format");
2502
+ }
2503
+ const branches = ["main", "master"];
2504
+ let packageJsonContent = null;
2505
+ let indexContent = null;
2506
+ for (const branch of branches) {
2507
+ try {
2508
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2509
+ const packageJsonResponse = await fetch(packageJsonUrl);
2510
+ if (packageJsonResponse.ok) {
2511
+ packageJsonContent = await packageJsonResponse.text();
2512
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2513
+ const indexResponse = await fetch(indexUrl);
2514
+ if (indexResponse.ok) {
2515
+ indexContent = await indexResponse.text();
2516
+ }
2517
+ break;
2518
+ }
2519
+ } catch {
2520
+ }
2521
+ }
2522
+ if (!packageJsonContent) {
2523
+ errors.push("Could not fetch package.json from repository");
2524
+ return { isValid: false, errors };
2525
+ }
2526
+ try {
2527
+ const packageJson = JSON.parse(packageJsonContent);
2528
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2529
+ if (!hasMastraCore) {
2530
+ errors.push("Missing @mastra/core dependency in package.json");
2531
+ }
2532
+ } catch {
2533
+ errors.push("Invalid package.json format");
2534
+ }
2535
+ if (!indexContent) {
2536
+ errors.push("Missing src/mastra/index.ts file");
2537
+ } else {
2538
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2539
+ if (!hasMastraExport) {
2540
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2541
+ }
2542
+ }
2543
+ return { isValid: errors.length === 0, errors };
2544
+ } catch (error) {
2545
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2546
+ return { isValid: false, errors };
2547
+ }
2548
+ }
2549
+ async function createFromGitHubUrl(url) {
2550
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2551
+ const owner = urlParts[0] || "unknown";
2552
+ const repo = urlParts[1] || "unknown";
2553
+ return {
2554
+ githubUrl: url,
2555
+ title: `${owner}/${repo}`,
2556
+ slug: repo,
2557
+ agents: [],
2558
+ mcp: [],
2559
+ tools: [],
2560
+ networks: [],
2561
+ workflows: []
2562
+ };
2563
+ }
2564
+ async function createFromTemplate(args2) {
2565
+ let selectedTemplate;
2566
+ if (args2.template === true) {
2567
+ const templates = await loadTemplates();
2568
+ const selected = await selectTemplate(templates);
2569
+ if (!selected) {
2570
+ M.info("No template selected. Exiting.");
2571
+ return;
2572
+ }
2573
+ selectedTemplate = selected;
2574
+ } else if (args2.template && typeof args2.template === "string") {
2575
+ if (isGitHubUrl(args2.template)) {
2576
+ const spinner5 = Y();
2577
+ spinner5.start("Validating GitHub repository...");
2578
+ const validation = await validateGitHubProject(args2.template);
2579
+ if (!validation.isValid) {
2580
+ spinner5.stop("Validation failed");
2581
+ M.error("This does not appear to be a valid Mastra project:");
2582
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2583
+ throw new Error("Invalid Mastra project");
2584
+ }
2585
+ spinner5.stop("Valid Mastra project \u2713");
2586
+ selectedTemplate = await createFromGitHubUrl(args2.template);
2587
+ } else {
2588
+ const templates = await loadTemplates();
2589
+ const found = findTemplateByName(templates, args2.template);
2590
+ if (!found) {
2591
+ M.error(`Template "${args2.template}" not found. Available templates:`);
2592
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2593
+ throw new Error(`Template "${args2.template}" not found`);
2594
+ }
2595
+ selectedTemplate = found;
2596
+ }
2597
+ }
2598
+ if (!selectedTemplate) {
2599
+ throw new Error("No template selected");
2600
+ }
2601
+ let projectName = args2.projectName;
2602
+ if (!projectName) {
2603
+ const defaultName = getDefaultProjectName(selectedTemplate);
2604
+ const response = await he({
2605
+ message: "What is your project name?",
2606
+ defaultValue: defaultName,
2607
+ placeholder: defaultName
2608
+ });
2609
+ if (pD(response)) {
2610
+ M.info("Project creation cancelled.");
2611
+ return;
2612
+ }
2613
+ projectName = response;
2614
+ }
2615
+ try {
2616
+ const analytics = args2.injectedAnalytics || getAnalytics();
2617
+ if (analytics) {
2618
+ analytics.trackEvent("cli_template_used", {
2619
+ template_slug: selectedTemplate.slug,
2620
+ template_title: selectedTemplate.title
2621
+ });
2622
+ }
2623
+ const projectPath = await cloneTemplate({
2624
+ template: selectedTemplate,
2625
+ projectName
2626
+ });
2627
+ await installDependencies(projectPath);
2628
+ Me(`
2629
+ ${color2.green("Mastra template installed!")}
2630
+
2631
+ Add the necessary environment
2632
+ variables in your ${color2.cyan(".env")} file
2633
+ `);
2634
+ postCreate({ projectName });
2635
+ } catch (error) {
2636
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
2637
+ throw error;
2638
+ }
2639
+ }
1980
2640
 
1981
2641
  async function getPackageVersion() {
1982
2642
  const __filename = fileURLToPath(import.meta.url);
1983
2643
  const __dirname = dirname(__filename);
1984
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
1985
- const content = await fsExtra.readJSON(pkgJsonPath);
2644
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
2645
+ const content = await fsExtra$1.readJSON(pkgJsonPath);
1986
2646
  return content.version;
1987
2647
  }
1988
2648
  async function getCreateVersionTag() {
1989
2649
  try {
1990
2650
  const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
1991
- const json = await fsExtra.readJSON(pkgPath);
2651
+ const json = await fsExtra$1.readJSON(pkgPath);
1992
2652
  const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
1993
- const tagLine = stdout.split("\n").find((distLine) => distLine.includes(`: ${json.version}`));
2653
+ const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
1994
2654
  const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
1995
2655
  return tag;
1996
2656
  } catch {
@@ -2012,14 +2672,17 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
2012
2672
  analytics.trackCommand({
2013
2673
  command: "version"
2014
2674
  });
2015
- console.log(`create-mastra ${version}`);
2675
+ console.info(`create-mastra ${version}`);
2016
2676
  } catch {
2017
2677
  }
2018
2678
  });
2019
2679
  program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
2020
2680
  "-p, --project-name <string>",
2021
2681
  "Project name that will be used in package.json and as the project directory name."
2022
- ).option("--default", "Quick start with defaults(src, OpenAI, no examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode)").action(async (projectNameArg, args) => {
2682
+ ).option("--default", "Quick start with defaults(src, OpenAI, examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode)").option(
2683
+ "--template [template-name]",
2684
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
2685
+ ).action(async (projectNameArg, args) => {
2023
2686
  const projectName = projectNameArg || args.projectName;
2024
2687
  const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
2025
2688
  if (args.default) {
@@ -2029,7 +2692,10 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2029
2692
  addExample: true,
2030
2693
  createVersionTag,
2031
2694
  timeout,
2032
- mcpServer: args.mcp
2695
+ mcpServer: args.mcp,
2696
+ directory: "src/",
2697
+ template: args.template,
2698
+ analytics
2033
2699
  });
2034
2700
  return;
2035
2701
  }
@@ -2042,7 +2708,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2042
2708
  timeout,
2043
2709
  projectName,
2044
2710
  directory: args.dir,
2045
- mcpServer: args.mcp
2711
+ mcpServer: args.mcp,
2712
+ template: args.template,
2713
+ analytics
2046
2714
  });
2047
2715
  });
2048
2716
  program.parse(process.argv);