create-mastra 0.0.0-vector-query-sources-20250516172905 → 0.0.0-vector-query-tool-provider-options-20250828222356

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 fs 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';
20
+ import { execa } from 'execa';
21
+ import fsExtra2, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
22
+ import prettier from 'prettier';
23
23
  import fsExtra from 'fs-extra';
24
24
 
25
25
  var __filename = fileURLToPath(import.meta.url);
26
- var __dirname = path.dirname(__filename);
26
+ var __dirname = path3.dirname(__filename);
27
+ var analyticsInstance = null;
28
+ function getAnalytics() {
29
+ return analyticsInstance;
30
+ }
27
31
  var PosthogAnalytics = class {
28
32
  sessionId;
29
33
  client;
@@ -35,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,197 @@ 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
+ function getPackageManagerInstallCommand(pm) {
1200
+ switch (pm) {
1201
+ case "npm":
1202
+ return "install";
1203
+ case "yarn":
1204
+ return "add";
1205
+ case "pnpm":
1206
+ return "add";
1207
+ default:
1208
+ return "install";
1209
+ }
1210
+ }
1211
+ var logger = new PinoLogger({
1212
+ name: "Mastra CLI",
1213
+ level: "info"
1214
+ });
1215
+ var exec = util.promisify(child_process.exec);
1216
+ async function cloneTemplate(options) {
1217
+ const { template, projectName, targetDir } = options;
1218
+ const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
1219
+ const spinner5 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
1220
+ try {
1221
+ if (await directoryExists(projectPath)) {
1222
+ spinner5.error(`Directory ${projectName} already exists`);
1223
+ throw new Error(`Directory ${projectName} already exists`);
1224
+ }
1225
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
1226
+ await updatePackageJson(projectPath, projectName);
1227
+ const envExamplePath = path3.join(projectPath, ".env.example");
1228
+ if (await fileExists(envExamplePath)) {
1229
+ await fs.copyFile(envExamplePath, path3.join(projectPath, ".env"));
1230
+ }
1231
+ spinner5.success(`Template "${template.title}" cloned successfully to ${projectName}`);
1232
+ return projectPath;
1233
+ } catch (error) {
1234
+ spinner5.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
1235
+ throw error;
1236
+ }
1237
+ }
1238
+ async function directoryExists(dirPath) {
1239
+ try {
1240
+ const stat = await fs.stat(dirPath);
1241
+ return stat.isDirectory();
1242
+ } catch {
1243
+ return false;
1244
+ }
1245
+ }
1246
+ async function fileExists(filePath) {
1247
+ try {
1248
+ const stat = await fs.stat(filePath);
1249
+ return stat.isFile();
1250
+ } catch {
1251
+ return false;
1252
+ }
1253
+ }
1254
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
1255
+ await fs.mkdir(targetPath, { recursive: true });
1256
+ try {
1257
+ const degitRepo = repoUrl.replace("https://github.com/", "");
1258
+ const degitCommand = shellQuote.quote(["npx", "degit", degitRepo, targetPath]);
1259
+ await exec(degitCommand, {
1260
+ cwd: process.cwd()
1261
+ });
1262
+ } catch {
1263
+ try {
1264
+ const gitCommand = shellQuote.quote(["git", "clone", repoUrl, targetPath]);
1265
+ await exec(gitCommand, {
1266
+ cwd: process.cwd()
1267
+ });
1268
+ const gitDir = path3.join(targetPath, ".git");
1269
+ if (await directoryExists(gitDir)) {
1270
+ await fs.rm(gitDir, { recursive: true, force: true });
858
1271
  }
1272
+ } catch (gitError) {
1273
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
1274
+ }
1275
+ }
1276
+ }
1277
+ async function updatePackageJson(projectPath, projectName) {
1278
+ const packageJsonPath = path3.join(projectPath, "package.json");
1279
+ try {
1280
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
1281
+ const packageJson = JSON.parse(packageJsonContent);
1282
+ packageJson.name = projectName;
1283
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
1284
+ } catch (error) {
1285
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
1286
+ }
1287
+ }
1288
+ async function installDependencies(projectPath, packageManager) {
1289
+ const spinner5 = yoctoSpinner({ text: "Installing dependencies..." }).start();
1290
+ try {
1291
+ const pm = packageManager || getPackageManager();
1292
+ const installCommand = shellQuote.quote([pm, "install"]);
1293
+ await exec(installCommand, {
1294
+ cwd: projectPath
859
1295
  });
1296
+ spinner5.success("Dependencies installed successfully");
1297
+ } catch (error) {
1298
+ spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
1299
+ throw error;
860
1300
  }
861
- async getLogs(transportId) {
862
- if (!transportId || !this.transports[transportId]) {
863
- return [];
1301
+ }
1302
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
1303
+ async function loadTemplates() {
1304
+ try {
1305
+ const response = await fetch(TEMPLATES_API_URL);
1306
+ if (!response.ok) {
1307
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
864
1308
  }
865
- return this.transports[transportId].getLogs();
1309
+ const templates = await response.json();
1310
+ return templates;
1311
+ } catch (error) {
1312
+ console.error("Error loading templates:", error);
1313
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
866
1314
  }
867
- async getLogsByRunId({ runId, transportId }) {
868
- return this.transports[transportId]?.getLogsByRunId({ runId });
1315
+ }
1316
+ function pluralize(count, singular, plural) {
1317
+ return count === 1 ? singular : plural || `${singular}s`;
1318
+ }
1319
+ async function selectTemplate(templates) {
1320
+ const choices = templates.map((template) => {
1321
+ const parts = [];
1322
+ if (template.agents?.length) {
1323
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
1324
+ }
1325
+ if (template.tools?.length) {
1326
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
1327
+ }
1328
+ if (template.workflows?.length) {
1329
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
1330
+ }
1331
+ if (template.mcp?.length) {
1332
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
1333
+ }
1334
+ if (template.networks?.length) {
1335
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
1336
+ }
1337
+ return {
1338
+ value: template,
1339
+ label: template.title,
1340
+ hint: parts.join(", ") || "Template components"
1341
+ };
1342
+ });
1343
+ const selected = await ve({
1344
+ message: "Select a template:",
1345
+ options: choices
1346
+ });
1347
+ if (pD(selected)) {
1348
+ return null;
869
1349
  }
870
- };
871
- function createLogger(options) {
872
- return new Logger(options);
1350
+ return selected;
1351
+ }
1352
+ function findTemplateByName(templates, templateName) {
1353
+ let template = templates.find((t) => t.slug === templateName);
1354
+ if (template) return template;
1355
+ const slugWithPrefix = `template-${templateName}`;
1356
+ template = templates.find((t) => t.slug === slugWithPrefix);
1357
+ if (template) return template;
1358
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
1359
+ if (template) return template;
1360
+ return null;
1361
+ }
1362
+ function getDefaultProjectName(template) {
1363
+ return template.slug.replace(/^template-/, "");
873
1364
  }
874
-
875
1365
  var DepsService = class {
876
1366
  packageManager;
877
1367
  constructor() {
@@ -880,11 +1370,11 @@ var DepsService = class {
880
1370
  findLockFile(dir) {
881
1371
  const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
882
1372
  for (const file of lockFiles) {
883
- if (fs3__default__default.existsSync(path.join(dir, file))) {
1373
+ if (fs4__default__default.existsSync(path3.join(dir, file))) {
884
1374
  return file;
885
1375
  }
886
1376
  }
887
- const parentDir = path.resolve(dir, "..");
1377
+ const parentDir = path3.resolve(dir, "..");
888
1378
  if (parentDir !== dir) {
889
1379
  return this.findLockFile(parentDir);
890
1380
  }
@@ -921,13 +1411,13 @@ var DepsService = class {
921
1411
  }
922
1412
  async checkDependencies(dependencies) {
923
1413
  try {
924
- const packageJsonPath = path.join(process.cwd(), "package.json");
1414
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
925
1415
  try {
926
- await fs4.access(packageJsonPath);
1416
+ await fs.access(packageJsonPath);
927
1417
  } catch {
928
1418
  return "No package.json file found in the current directory";
929
1419
  }
930
- const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
1420
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
931
1421
  for (const dependency of dependencies) {
932
1422
  if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
933
1423
  return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
@@ -941,66 +1431,24 @@ var DepsService = class {
941
1431
  }
942
1432
  async getProjectName() {
943
1433
  try {
944
- const packageJsonPath = path.join(process.cwd(), "package.json");
945
- const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1434
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1435
+ const packageJson = await fs.readFile(packageJsonPath, "utf-8");
946
1436
  const pkg = JSON.parse(packageJson);
947
1437
  return pkg.name;
948
1438
  } catch (err) {
949
1439
  throw err;
950
1440
  }
951
1441
  }
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
1442
  async addScriptsToPackageJson(scripts) {
960
- const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1443
+ const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8"));
961
1444
  packageJson.scripts = {
962
1445
  ...packageJson.scripts,
963
1446
  ...scripts
964
1447
  };
965
- await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1448
+ await fs.writeFile("package.json", JSON.stringify(packageJson, null, 2));
966
1449
  }
967
1450
  };
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"];
1451
+ var args = ["-y", "@mastra/mcp-docs-server"];
1004
1452
  var createMcpConfig = (editor) => {
1005
1453
  if (editor === "vscode") {
1006
1454
  return {
@@ -1019,10 +1467,7 @@ var createMcpConfig = (editor) => {
1019
1467
  }
1020
1468
  return {
1021
1469
  mcpServers: {
1022
- mastra: process.platform === `win32` ? {
1023
- command: "cmd",
1024
- args: ["/c", "npx", ...args]
1025
- } : {
1470
+ mastra: {
1026
1471
  command: "npx",
1027
1472
  args
1028
1473
  }
@@ -1055,15 +1500,19 @@ async function writeMergedConfig(configPath, editor) {
1055
1500
  spaces: 2
1056
1501
  });
1057
1502
  }
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");
1503
+ var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1504
+ var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
1505
+ path3.join(process.cwd(), ".vscode", "mcp.json");
1506
+ var vscodeGlobalMCPConfigPath = path3.join(
1507
+ os.homedir(),
1508
+ 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")
1509
+ );
1061
1510
  async function installMastraDocsMCPServer({ editor, directory }) {
1062
1511
  if (editor === `cursor`) {
1063
- await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"), "cursor");
1512
+ await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
1064
1513
  }
1065
1514
  if (editor === `vscode`) {
1066
- await writeMergedConfig(path.join(directory, ".vscode", "mcp.json"), "vscode");
1515
+ await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
1067
1516
  }
1068
1517
  if (editor === `cursor-global`) {
1069
1518
  const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
@@ -1086,19 +1535,28 @@ async function globalMCPIsAlreadyInstalled(editor) {
1086
1535
  configPath = windsurfGlobalMCPConfigPath;
1087
1536
  } else if (editor === "cursor-global") {
1088
1537
  configPath = cursorGlobalMCPConfigPath;
1538
+ } else if (editor === "vscode") {
1539
+ configPath = vscodeGlobalMCPConfigPath;
1089
1540
  }
1090
1541
  if (!configPath || !existsSync(configPath)) {
1091
1542
  return false;
1092
1543
  }
1093
1544
  try {
1094
1545
  const configContents = await readJSON(configPath);
1546
+ if (!configContents) return false;
1547
+ if (editor === "vscode") {
1548
+ if (!configContents.servers) return false;
1549
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1550
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1551
+ );
1552
+ return hasMastraMCP2;
1553
+ }
1095
1554
  if (!configContents?.mcpServers) return false;
1096
1555
  const hasMastraMCP = Object.values(configContents.mcpServers).some(
1097
1556
  (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1098
1557
  );
1099
1558
  return hasMastraMCP;
1100
- } catch (e) {
1101
- console.error(e);
1559
+ } catch {
1102
1560
  return false;
1103
1561
  }
1104
1562
  }
@@ -1112,7 +1570,7 @@ var FileEnvService = class extends EnvService {
1112
1570
  }
1113
1571
  readFile(filePath) {
1114
1572
  return new Promise((resolve, reject) => {
1115
- fs3__default.readFile(filePath, "utf8", (err, data) => {
1573
+ fs4__default.readFile(filePath, "utf8", (err, data) => {
1116
1574
  if (err) reject(err);
1117
1575
  else resolve(data);
1118
1576
  });
@@ -1120,7 +1578,7 @@ var FileEnvService = class extends EnvService {
1120
1578
  }
1121
1579
  writeFile({ filePath, data }) {
1122
1580
  return new Promise((resolve, reject) => {
1123
- fs3__default.writeFile(filePath, data, "utf8", (err) => {
1581
+ fs4__default.writeFile(filePath, data, "utf8", (err) => {
1124
1582
  if (err) reject(err);
1125
1583
  else resolve();
1126
1584
  });
@@ -1173,25 +1631,25 @@ var FileService = class {
1173
1631
  */
1174
1632
  async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1175
1633
  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) {
1634
+ const __dirname = path3.dirname(__filename);
1635
+ const filePath = path3.resolve(__dirname, "starter-files", inputFile);
1636
+ const fileString = fs4__default__default.readFileSync(filePath, "utf8");
1637
+ if (fs4__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1180
1638
  console.log(`${outputFilePath} already exists`);
1181
1639
  return false;
1182
1640
  }
1183
- await fsExtra3.outputFile(outputFilePath, fileString);
1641
+ await fsExtra2.outputFile(outputFilePath, fileString);
1184
1642
  return true;
1185
1643
  }
1186
1644
  async setupEnvFile({ dbUrl }) {
1187
- const envPath = path.join(process.cwd(), ".env.development");
1188
- await fsExtra3.ensureFile(envPath);
1645
+ const envPath = path3.join(process.cwd(), ".env.development");
1646
+ await fsExtra2.ensureFile(envPath);
1189
1647
  const fileEnvService = new FileEnvService(envPath);
1190
1648
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1191
1649
  }
1192
1650
  getFirstExistingFile(files) {
1193
1651
  for (const f of files) {
1194
- if (fs3__default__default.existsSync(f)) {
1652
+ if (fs4__default__default.existsSync(f)) {
1195
1653
  return f;
1196
1654
  }
1197
1655
  }
@@ -1201,18 +1659,22 @@ var FileService = class {
1201
1659
  filePath,
1202
1660
  replacements
1203
1661
  }) {
1204
- let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1662
+ let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
1205
1663
  replacements.forEach(({ search, replace }) => {
1206
1664
  fileContent = fileContent.replaceAll(search, replace);
1207
1665
  });
1208
- fs3__default__default.writeFileSync(filePath, fileContent);
1666
+ fs4__default__default.writeFileSync(filePath, fileContent);
1667
+ }
1668
+ };
1669
+ var exec2 = util.promisify(child_process.exec);
1670
+ var getAISDKPackageVersion = (llmProvider) => {
1671
+ switch (llmProvider) {
1672
+ case "cerebras":
1673
+ return "^0.2.14";
1674
+ default:
1675
+ return "^1.0.0";
1209
1676
  }
1210
1677
  };
1211
- createLogger({
1212
- name: "Mastra CLI",
1213
- level: "debug"
1214
- });
1215
- var exec = util.promisify(child_process.exec);
1216
1678
  var getAISDKPackage = (llmProvider) => {
1217
1679
  switch (llmProvider) {
1218
1680
  case "openai":
@@ -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,7 +1705,7 @@ 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')`;
@@ -1253,14 +1715,16 @@ var getProviderImportAndModelItem = (llmProvider) => {
1253
1715
  async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1254
1716
  const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1255
1717
  const instructions = `
1256
- You are a helpful weather assistant that provides accurate weather information.
1718
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1257
1719
 
1258
1720
  Your primary function is to help users get weather details for specific locations. When responding:
1259
1721
  - Always ask for a location if none is provided
1260
- - If the location name isn\u2019t in English, please translate it
1722
+ - If the location name isn't in English, please translate it
1261
1723
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1262
1724
  - Include relevant details like humidity, wind conditions, and precipitation
1263
1725
  - Keep responses concise but informative
1726
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1727
+ - If the user asks for activities, respond in the format they request.
1264
1728
 
1265
1729
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1266
1730
  `;
@@ -1269,7 +1733,7 @@ ${providerImport}
1269
1733
  import { Agent } from '@mastra/core/agent';
1270
1734
  import { Memory } from '@mastra/memory';
1271
1735
  import { LibSQLStore } from '@mastra/libsql';
1272
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1736
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1273
1737
 
1274
1738
  export const weatherAgent = new Agent({
1275
1739
  name: 'Weather Agent',
@@ -1279,14 +1743,7 @@ export const weatherAgent = new Agent({
1279
1743
  memory: new Memory({
1280
1744
  storage: new LibSQLStore({
1281
1745
  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
- }
1746
+ })
1290
1747
  })
1291
1748
  });
1292
1749
  `;
@@ -1294,142 +1751,159 @@ export const weatherAgent = new Agent({
1294
1751
  parser: "typescript",
1295
1752
  singleQuote: true
1296
1753
  });
1297
- await fs4.writeFile(destPath, "");
1298
- await fs4.writeFile(destPath, formattedContent);
1754
+ await fs.writeFile(destPath, "");
1755
+ await fs.writeFile(destPath, formattedContent);
1299
1756
  }
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';
1757
+ async function writeWorkflowSample(destPath) {
1758
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1305
1759
  import { z } from 'zod';
1306
1760
 
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
- });
1761
+ const forecastSchema = z.object({
1762
+ date: z.string(),
1763
+ maxTemp: z.number(),
1764
+ minTemp: z.number(),
1765
+ precipitationChance: z.number(),
1766
+ condition: z.string(),
1767
+ location: z.string(),
1768
+ })
1356
1769
 
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
- );
1770
+ function getWeatherCondition(code: number): string {
1771
+ const conditions: Record<number, string> = {
1772
+ 0: 'Clear sky',
1773
+ 1: 'Mainly clear',
1774
+ 2: 'Partly cloudy',
1775
+ 3: 'Overcast',
1776
+ 45: 'Foggy',
1777
+ 48: 'Depositing rime fog',
1778
+ 51: 'Light drizzle',
1779
+ 53: 'Moderate drizzle',
1780
+ 55: 'Dense drizzle',
1781
+ 61: 'Slight rain',
1782
+ 63: 'Moderate rain',
1783
+ 65: 'Heavy rain',
1784
+ 71: 'Slight snow fall',
1785
+ 73: 'Moderate snow fall',
1786
+ 75: 'Heavy snow fall',
1787
+ 95: 'Thunderstorm',
1788
+ }
1789
+ return conditions[code] || 'Unknown'
1790
+ }
1367
1791
 
1368
- const fetchWeather = new Step({
1792
+ const fetchWeather = createStep({
1369
1793
  id: 'fetch-weather',
1370
1794
  description: 'Fetches weather forecast for a given city',
1371
1795
  inputSchema: z.object({
1372
1796
  city: z.string().describe('The city to get the weather for'),
1373
1797
  }),
1374
1798
  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');
1799
+ execute: async ({ inputData }) => {
1800
+ if (!inputData) {
1801
+ throw new Error('Input data not found');
1380
1802
  }
1381
1803
 
1382
- const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(triggerData.city)}&count=1\`;
1804
+ const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
1383
1805
  const geocodingResponse = await fetch(geocodingUrl);
1384
1806
  const geocodingData = (await geocodingResponse.json()) as {
1385
1807
  results: { latitude: number; longitude: number; name: string }[];
1386
1808
  };
1387
1809
 
1388
1810
  if (!geocodingData.results?.[0]) {
1389
- throw new Error(\`Location '\${triggerData.city}' not found\`);
1811
+ throw new Error(\`Location '\${inputData.city}' not found\`);
1390
1812
  }
1391
1813
 
1392
1814
  const { latitude, longitude, name } = geocodingData.results[0];
1393
1815
 
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\`;
1816
+ const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&current=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
1395
1817
  const response = await fetch(weatherUrl);
1396
1818
  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
- };
1819
+ current: {
1820
+ time: string
1821
+ precipitation: number
1822
+ weathercode: number
1823
+ }
1824
+ hourly: {
1825
+ precipitation_probability: number[]
1826
+ temperature_2m: number[]
1827
+ }
1828
+ }
1405
1829
 
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
- }));
1830
+ const forecast = {
1831
+ date: new Date().toISOString(),
1832
+ maxTemp: Math.max(...data.hourly.temperature_2m),
1833
+ minTemp: Math.min(...data.hourly.temperature_2m),
1834
+ condition: getWeatherCondition(data.current.weathercode),
1835
+ precipitationChance: data.hourly.precipitation_probability.reduce(
1836
+ (acc, curr) => Math.max(acc, curr),
1837
+ 0
1838
+ ),
1839
+ location: name
1840
+ }
1414
1841
 
1415
1842
  return forecast;
1416
1843
  },
1417
1844
  });
1418
1845
 
1419
1846
 
1420
- const planActivities = new Step({
1847
+ const planActivities = createStep({
1421
1848
  id: 'plan-activities',
1422
1849
  description: 'Suggests activities based on weather conditions',
1423
- execute: async ({ context, mastra }) => {
1424
- const forecast = context?.getStepResult(fetchWeather);
1850
+ inputSchema: forecastSchema,
1851
+ outputSchema: z.object({
1852
+ activities: z.string(),
1853
+ }),
1854
+ execute: async ({ inputData, mastra }) => {
1855
+ const forecast = inputData
1856
+
1857
+ if (!forecast) {
1858
+ throw new Error('Forecast data not found')
1859
+ }
1425
1860
 
1426
- if (!forecast || forecast.length === 0) {
1427
- throw new Error('Forecast data not found');
1861
+ const agent = mastra?.getAgent('weatherAgent');
1862
+ if (!agent) {
1863
+ throw new Error('Weather agent not found');
1428
1864
  }
1429
1865
 
1430
- const prompt = \`Based on the following weather forecast for \${forecast[0]?.location}, suggest appropriate activities:
1866
+ const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1431
1867
  \${JSON.stringify(forecast, null, 2)}
1432
- \`;
1868
+ For each day in the forecast, structure your response exactly as follows:
1869
+
1870
+ \u{1F4C5} [Day, Month Date, Year]
1871
+ \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
1872
+
1873
+ \u{1F321}\uFE0F WEATHER SUMMARY
1874
+ \u2022 Conditions: [brief description]
1875
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1876
+ \u2022 Precipitation: [X% chance]
1877
+
1878
+ \u{1F305} MORNING ACTIVITIES
1879
+ Outdoor:
1880
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1881
+ Best timing: [specific time range]
1882
+ Note: [relevant weather consideration]
1883
+
1884
+ \u{1F31E} AFTERNOON ACTIVITIES
1885
+ Outdoor:
1886
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1887
+ Best timing: [specific time range]
1888
+ Note: [relevant weather consideration]
1889
+
1890
+ \u{1F3E0} INDOOR ALTERNATIVES
1891
+ \u2022 [Activity Name] - [Brief description including specific venue]
1892
+ Ideal for: [weather condition that would trigger this alternative]
1893
+
1894
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1895
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1896
+
1897
+ Guidelines:
1898
+ - Suggest 2-3 time-specific outdoor activities per day
1899
+ - Include 1-2 indoor backup options
1900
+ - For precipitation >50%, lead with indoor activities
1901
+ - All activities must be specific to the location
1902
+ - Include specific venues, trails, or locations
1903
+ - Consider activity intensity based on temperature
1904
+ - Keep descriptions concise but informative
1905
+
1906
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1433
1907
 
1434
1908
  const response = await agent.stream([
1435
1909
  {
@@ -1439,7 +1913,7 @@ const planActivities = new Step({
1439
1913
  ]);
1440
1914
 
1441
1915
  let activitiesText = '';
1442
-
1916
+
1443
1917
  for await (const chunk of response.textStream) {
1444
1918
  process.stdout.write(chunk);
1445
1919
  activitiesText += chunk;
@@ -1451,35 +1925,16 @@ const planActivities = new Step({
1451
1925
  },
1452
1926
  });
1453
1927
 
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({
1928
+ const weatherWorkflow = createWorkflow({
1929
+ id: 'weather-workflow',
1930
+ inputSchema: z.object({
1479
1931
  city: z.string().describe('The city to get the weather for'),
1480
1932
  }),
1933
+ outputSchema: z.object({
1934
+ activities: z.string(),
1935
+ })
1481
1936
  })
1482
- .step(fetchWeather)
1937
+ .then(fetchWeather)
1483
1938
  .then(planActivities);
1484
1939
 
1485
1940
  weatherWorkflow.commit();
@@ -1490,7 +1945,7 @@ export { weatherWorkflow };`;
1490
1945
  semi: true,
1491
1946
  singleQuote: true
1492
1947
  });
1493
- await fs4.writeFile(destPath, formattedContent);
1948
+ await fs.writeFile(destPath, formattedContent);
1494
1949
  }
1495
1950
  async function writeToolSample(destPath) {
1496
1951
  const fileService = new FileService();
@@ -1503,14 +1958,14 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
1503
1958
  case "tools":
1504
1959
  return writeToolSample(destPath);
1505
1960
  case "workflows":
1506
- return writeWorkflowSample(destPath, llmprovider);
1961
+ return writeWorkflowSample(destPath);
1507
1962
  default:
1508
1963
  return "";
1509
1964
  }
1510
1965
  }
1511
1966
  var createComponentsDir = async (dirPath, component) => {
1512
1967
  const componentPath = dirPath + `/${component}`;
1513
- await fsExtra3.ensureDir(componentPath);
1968
+ await fsExtra2.ensureDir(componentPath);
1514
1969
  };
1515
1970
  var writeIndexFile = async ({
1516
1971
  dirPath,
@@ -1519,15 +1974,15 @@ var writeIndexFile = async ({
1519
1974
  addWorkflow
1520
1975
  }) => {
1521
1976
  const indexPath = dirPath + "/index.ts";
1522
- const destPath = path.join(indexPath);
1977
+ const destPath = path3.join(indexPath);
1523
1978
  try {
1524
- await fs4.writeFile(destPath, "");
1979
+ await fs.writeFile(destPath, "");
1525
1980
  const filteredExports = [
1526
1981
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1527
1982
  addAgent ? `agents: { weatherAgent },` : ""
1528
1983
  ].filter(Boolean);
1529
1984
  if (!addExample) {
1530
- await fs4.writeFile(
1985
+ await fs.writeFile(
1531
1986
  destPath,
1532
1987
  `
1533
1988
  import { Mastra } from '@mastra/core';
@@ -1537,14 +1992,14 @@ export const mastra = new Mastra()
1537
1992
  );
1538
1993
  return;
1539
1994
  }
1540
- await fs4.writeFile(
1995
+ await fs.writeFile(
1541
1996
  destPath,
1542
1997
  `
1543
1998
  import { Mastra } from '@mastra/core/mastra';
1544
- import { createLogger } from '@mastra/core/logger';
1999
+ import { PinoLogger } from '@mastra/loggers';
1545
2000
  import { LibSQLStore } from '@mastra/libsql';
1546
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1547
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
2001
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
2002
+ ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1548
2003
 
1549
2004
  export const mastra = new Mastra({
1550
2005
  ${filteredExports.join("\n ")}
@@ -1552,7 +2007,7 @@ export const mastra = new Mastra({
1552
2007
  // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1553
2008
  url: ":memory:",
1554
2009
  }),
1555
- logger: createLogger({
2010
+ logger: new PinoLogger({
1556
2011
  name: 'Mastra',
1557
2012
  level: 'info',
1558
2013
  }),
@@ -1588,21 +2043,23 @@ var writeAPIKey = async ({
1588
2043
  apiKey = "your-api-key"
1589
2044
  }) => {
1590
2045
  const key = await getAPIKey(provider);
1591
- await exec(`echo ${key}=${apiKey} >> .env.development`);
2046
+ const escapedKey = shellQuote.quote([key]);
2047
+ const escapedApiKey = shellQuote.quote([apiKey]);
2048
+ await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
1592
2049
  };
1593
2050
  var createMastraDir = async (directory) => {
1594
2051
  let dir = directory.trim().split("/").filter((item) => item !== "");
1595
- const dirPath = path.join(process.cwd(), ...dir, "mastra");
2052
+ const dirPath = path3.join(process.cwd(), ...dir, "mastra");
1596
2053
  try {
1597
- await fs4.access(dirPath);
2054
+ await fs.access(dirPath);
1598
2055
  return { ok: false };
1599
2056
  } catch {
1600
- await fsExtra3.ensureDir(dirPath);
2057
+ await fsExtra2.ensureDir(dirPath);
1601
2058
  return { ok: true, dirPath };
1602
2059
  }
1603
2060
  };
1604
2061
  var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1605
- const destPath = dirPath + `/${component}/index.ts`;
2062
+ const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
1606
2063
  try {
1607
2064
  await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1608
2065
  } catch (err) {
@@ -1610,29 +2067,15 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
1610
2067
  }
1611
2068
  };
1612
2069
  var interactivePrompt = async () => {
1613
- pe(color2.inverse("Mastra Init"));
1614
- const mastraProject = await ve(
2070
+ Ie(color2.inverse(" Mastra Init "));
2071
+ const mastraProject = await Ce(
1615
2072
  {
1616
- directory: () => ae({
2073
+ directory: () => he({
1617
2074
  message: "Where should we create the Mastra files? (default: src/)",
1618
2075
  placeholder: "src/",
1619
2076
  defaultValue: "src/"
1620
2077
  }),
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({
2078
+ llmProvider: () => ve({
1636
2079
  message: "Select default provider:",
1637
2080
  options: [
1638
2081
  { value: "openai", label: "OpenAI", hint: "recommended" },
@@ -1643,7 +2086,7 @@ var interactivePrompt = async () => {
1643
2086
  ]
1644
2087
  }),
1645
2088
  llmApiKey: async ({ results: { llmProvider } }) => {
1646
- const keyChoice = await le({
2089
+ const keyChoice = await ve({
1647
2090
  message: `Enter your ${llmProvider} API key?`,
1648
2091
  options: [
1649
2092
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1652,21 +2095,18 @@ var interactivePrompt = async () => {
1652
2095
  initialValue: "skip"
1653
2096
  });
1654
2097
  if (keyChoice === "enter") {
1655
- return ae({
2098
+ return he({
1656
2099
  message: "Enter your API key:",
1657
2100
  placeholder: "sk-..."
1658
2101
  });
1659
2102
  }
1660
2103
  return void 0;
1661
2104
  },
1662
- addExample: () => ce({
1663
- message: "Add example",
1664
- initialValue: false
1665
- }),
1666
2105
  configureEditorWithDocsMCP: async () => {
1667
2106
  const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
1668
2107
  const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
1669
- const editor = await le({
2108
+ const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
2109
+ const editor = await ve({
1670
2110
  message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
1671
2111
  options: [
1672
2112
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1684,24 +2124,34 @@ var interactivePrompt = async () => {
1684
2124
  value: "windsurf",
1685
2125
  label: "Windsurf",
1686
2126
  hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2127
+ },
2128
+ {
2129
+ value: "vscode",
2130
+ label: "VSCode",
2131
+ hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
1687
2132
  }
1688
2133
  ]
1689
2134
  });
1690
2135
  if (editor === `skip`) return void 0;
1691
2136
  if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1692
- v.message(`
2137
+ M.message(`
1693
2138
  Windsurf is already installed, skipping.`);
1694
2139
  return void 0;
1695
2140
  }
2141
+ if (editor === `vscode` && vscodeIsAlreadyInstalled) {
2142
+ M.message(`
2143
+ VSCode is already installed, skipping.`);
2144
+ return void 0;
2145
+ }
1696
2146
  if (editor === `cursor`) {
1697
- v.message(
2147
+ M.message(
1698
2148
  `
1699
2149
  Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1700
2150
  `
1701
2151
  );
1702
2152
  }
1703
2153
  if (editor === `cursor-global`) {
1704
- const confirm2 = await le({
2154
+ const confirm2 = await ve({
1705
2155
  message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
1706
2156
  options: [
1707
2157
  { value: "yes", label: "Yes, I understand" },
@@ -1713,7 +2163,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
1713
2163
  }
1714
2164
  }
1715
2165
  if (editor === `windsurf`) {
1716
- const confirm2 = await le({
2166
+ const confirm2 = await ve({
1717
2167
  message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
1718
2168
  This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
1719
2169
  options: [
@@ -1730,17 +2180,15 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
1730
2180
  },
1731
2181
  {
1732
2182
  onCancel: () => {
1733
- he("Operation cancelled.");
2183
+ xe("Operation cancelled.");
1734
2184
  process.exit(0);
1735
2185
  }
1736
2186
  }
1737
2187
  );
1738
- const { shouldAddTools, components, ...rest } = mastraProject;
1739
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1740
- return { ...rest, components: mastraComponents };
2188
+ return mastraProject;
1741
2189
  };
1742
- var s = _();
1743
- var exec2 = util.promisify(child_process.exec);
2190
+ var s = Y();
2191
+ var exec3 = util.promisify(child_process.exec);
1744
2192
  var init = async ({
1745
2193
  directory,
1746
2194
  addExample = false,
@@ -1782,13 +2230,18 @@ var init = async ({
1782
2230
  if (needsMemory) {
1783
2231
  await depService.installPackages(["@mastra/memory"]);
1784
2232
  }
2233
+ const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2234
+ if (needsLoggers) {
2235
+ await depService.installPackages(["@mastra/loggers"]);
2236
+ }
1785
2237
  }
1786
2238
  const key = await getAPIKey(llmProvider || "openai");
1787
2239
  const aiSdkPackage = getAISDKPackage(llmProvider);
2240
+ const aiSdkPackageVersion = getAISDKPackageVersion(llmProvider);
1788
2241
  const depsService = new DepsService();
1789
2242
  const pm = depsService.packageManager;
1790
2243
  const installCommand = getPackageManagerInstallCommand(pm);
1791
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
2244
+ await exec3(`${pm} ${installCommand} ${aiSdkPackage}@${aiSdkPackageVersion}`);
1792
2245
  if (configureEditorWithDocsMCP) {
1793
2246
  await installMastraDocsMCPServer({
1794
2247
  editor: configureEditorWithDocsMCP,
@@ -1797,14 +2250,14 @@ var init = async ({
1797
2250
  }
1798
2251
  s.stop();
1799
2252
  if (!llmApiKey) {
1800
- me(`
2253
+ Me(`
1801
2254
  ${color2.green("Mastra initialized successfully!")}
1802
2255
 
1803
2256
  Add your ${color2.cyan(key)} as an environment variable
1804
- in your ${color2.cyan(".env.development")} file
2257
+ in your ${color2.cyan(".env")} file
1805
2258
  `);
1806
2259
  } else {
1807
- me(`
2260
+ Me(`
1808
2261
  ${color2.green("Mastra initialized successfully!")}
1809
2262
  `);
1810
2263
  }
@@ -1815,10 +2268,10 @@ var init = async ({
1815
2268
  return { success: false };
1816
2269
  }
1817
2270
  };
1818
- var exec3 = util.promisify(child_process.exec);
2271
+ var exec4 = util.promisify(child_process.exec);
1819
2272
  var execWithTimeout = async (command, timeoutMs) => {
1820
2273
  try {
1821
- const promise = exec3(command, { killSignal: "SIGTERM" });
2274
+ const promise = exec4(command, { killSignal: "SIGTERM" });
1822
2275
  if (!timeoutMs) {
1823
2276
  return await promise;
1824
2277
  }
@@ -1838,7 +2291,6 @@ var execWithTimeout = async (command, timeoutMs) => {
1838
2291
  throw error;
1839
2292
  }
1840
2293
  } catch (error) {
1841
- console.error(error);
1842
2294
  throw error;
1843
2295
  }
1844
2296
  };
@@ -1850,11 +2302,18 @@ async function installMastraDependency(pm, dependency, versionTag, isDev, timeou
1850
2302
  try {
1851
2303
  await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
1852
2304
  } catch (err) {
1853
- console.log("err", err);
1854
2305
  if (versionTag === "@latest") {
1855
- throw err;
2306
+ throw new Error(
2307
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2308
+ );
2309
+ }
2310
+ try {
2311
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2312
+ } catch (fallbackErr) {
2313
+ throw new Error(
2314
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2315
+ );
1856
2316
  }
1857
- await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
1858
2317
  }
1859
2318
  }
1860
2319
  var createMastraProject = async ({
@@ -1862,46 +2321,55 @@ var createMastraProject = async ({
1862
2321
  createVersionTag,
1863
2322
  timeout
1864
2323
  }) => {
1865
- pe(color2.inverse("Mastra Create"));
1866
- const projectName = name ?? await ae({
2324
+ Ie(color2.inverse(" Mastra Create "));
2325
+ const projectName = name ?? await he({
1867
2326
  message: "What do you want to name your project?",
1868
2327
  placeholder: "my-mastra-app",
1869
2328
  defaultValue: "my-mastra-app"
1870
2329
  });
1871
- if (lD(projectName)) {
1872
- he("Operation cancelled");
2330
+ if (pD(projectName)) {
2331
+ xe("Operation cancelled");
1873
2332
  process.exit(0);
1874
2333
  }
1875
- const s2 = _();
1876
- s2.start("Creating project");
2334
+ const s2 = Y();
1877
2335
  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.`
2336
+ s2.start("Creating project");
2337
+ try {
2338
+ await fs.mkdir(projectName);
2339
+ } catch (error) {
2340
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2341
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2342
+ process.exit(1);
2343
+ }
2344
+ throw new Error(
2345
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
1883
2346
  );
1884
- process.exit(1);
1885
2347
  }
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 '{
2348
+ process.chdir(projectName);
2349
+ const pm = getPackageManager();
2350
+ const installCommand = getPackageManagerInstallCommand(pm);
2351
+ s2.message("Initializing project structure");
2352
+ try {
2353
+ await exec4(`npm init -y`);
2354
+ await exec4(`npm pkg set type="module"`);
2355
+ await exec4(`npm pkg set engines.node=">=20.9.0"`);
2356
+ const depsService = new DepsService();
2357
+ await depsService.addScriptsToPackageJson({
2358
+ dev: "mastra dev",
2359
+ build: "mastra build",
2360
+ start: "mastra start"
2361
+ });
2362
+ } catch (error) {
2363
+ throw new Error(
2364
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2365
+ );
2366
+ }
2367
+ s2.stop("Project structure created");
2368
+ s2.start(`Installing ${pm} dependencies`);
2369
+ try {
2370
+ await exec4(`${pm} ${installCommand} zod@^3`);
2371
+ await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
2372
+ await exec4(`echo '{
1905
2373
  "compilerOptions": {
1906
2374
  "target": "ES2022",
1907
2375
  "module": "ES2022",
@@ -1917,31 +2385,60 @@ var createMastraProject = async ({
1917
2385
  "src/**/*"
1918
2386
  ]
1919
2387
  }' > 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 };
2388
+ } catch (error) {
2389
+ throw new Error(
2390
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2391
+ );
2392
+ }
2393
+ s2.stop(`${pm} dependencies installed`);
2394
+ s2.start("Installing mastra");
2395
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2396
+ try {
2397
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2398
+ } catch (error) {
2399
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2400
+ }
2401
+ s2.stop("mastra installed");
2402
+ s2.start("Installing dependencies");
2403
+ try {
2404
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2405
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2406
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2407
+ } catch (error) {
2408
+ throw new Error(
2409
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2410
+ );
2411
+ }
2412
+ s2.stop("Mastra dependencies installed");
2413
+ s2.start("Adding .gitignore");
2414
+ try {
2415
+ await exec4(`echo output.txt >> .gitignore`);
2416
+ await exec4(`echo node_modules >> .gitignore`);
2417
+ await exec4(`echo dist >> .gitignore`);
2418
+ await exec4(`echo .mastra >> .gitignore`);
2419
+ await exec4(`echo .env.development >> .gitignore`);
2420
+ await exec4(`echo .env >> .gitignore`);
2421
+ await exec4(`echo *.db >> .gitignore`);
2422
+ await exec4(`echo *.db-* >> .gitignore`);
2423
+ } catch (error) {
2424
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2425
+ }
2426
+ s2.stop(".gitignore added");
2427
+ Se("Project created successfully");
2428
+ console.log("");
2429
+ return { projectName };
2430
+ } catch (error) {
2431
+ s2.stop();
2432
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2433
+ xe(`Project creation failed: ${errorMessage}`);
2434
+ process.exit(1);
2435
+ }
1943
2436
  };
1944
2437
  var create = async (args2) => {
2438
+ if (args2.template !== void 0) {
2439
+ await createFromTemplate({ ...args2, injectedAnalytics: args2.analytics });
2440
+ return;
2441
+ }
1945
2442
  const { projectName } = await createMastraProject({
1946
2443
  projectName: args2?.projectName,
1947
2444
  createVersionTag: args2?.createVersionTag,
@@ -1952,7 +2449,9 @@ var create = async (args2) => {
1952
2449
  const result = await interactivePrompt();
1953
2450
  await init({
1954
2451
  ...result,
1955
- llmApiKey: result?.llmApiKey
2452
+ llmApiKey: result?.llmApiKey,
2453
+ components: ["agents", "tools", "workflows"],
2454
+ addExample: true
1956
2455
  });
1957
2456
  postCreate({ projectName });
1958
2457
  return;
@@ -1970,18 +2469,172 @@ var create = async (args2) => {
1970
2469
  };
1971
2470
  var postCreate = ({ projectName }) => {
1972
2471
  const packageManager = getPackageManager();
1973
- ge(`
2472
+ Se(`
1974
2473
  ${color2.green("To start your project:")}
1975
2474
 
1976
2475
  ${color2.cyan("cd")} ${projectName}
1977
2476
  ${color2.cyan(`${packageManager} run dev`)}
1978
2477
  `);
1979
2478
  };
2479
+ function isGitHubUrl(url) {
2480
+ try {
2481
+ const parsedUrl = new URL(url);
2482
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2483
+ } catch {
2484
+ return false;
2485
+ }
2486
+ }
2487
+ async function validateGitHubProject(githubUrl) {
2488
+ const errors = [];
2489
+ try {
2490
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2491
+ const owner = urlParts[0];
2492
+ const repo = urlParts[1]?.replace(".git", "");
2493
+ if (!owner || !repo) {
2494
+ throw new Error("Invalid GitHub URL format");
2495
+ }
2496
+ const branches = ["main", "master"];
2497
+ let packageJsonContent = null;
2498
+ let indexContent = null;
2499
+ for (const branch of branches) {
2500
+ try {
2501
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2502
+ const packageJsonResponse = await fetch(packageJsonUrl);
2503
+ if (packageJsonResponse.ok) {
2504
+ packageJsonContent = await packageJsonResponse.text();
2505
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2506
+ const indexResponse = await fetch(indexUrl);
2507
+ if (indexResponse.ok) {
2508
+ indexContent = await indexResponse.text();
2509
+ }
2510
+ break;
2511
+ }
2512
+ } catch {
2513
+ }
2514
+ }
2515
+ if (!packageJsonContent) {
2516
+ errors.push("Could not fetch package.json from repository");
2517
+ return { isValid: false, errors };
2518
+ }
2519
+ try {
2520
+ const packageJson = JSON.parse(packageJsonContent);
2521
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2522
+ if (!hasMastraCore) {
2523
+ errors.push("Missing @mastra/core dependency in package.json");
2524
+ }
2525
+ } catch {
2526
+ errors.push("Invalid package.json format");
2527
+ }
2528
+ if (!indexContent) {
2529
+ errors.push("Missing src/mastra/index.ts file");
2530
+ } else {
2531
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2532
+ if (!hasMastraExport) {
2533
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2534
+ }
2535
+ }
2536
+ return { isValid: errors.length === 0, errors };
2537
+ } catch (error) {
2538
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2539
+ return { isValid: false, errors };
2540
+ }
2541
+ }
2542
+ async function createFromGitHubUrl(url) {
2543
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2544
+ const owner = urlParts[0] || "unknown";
2545
+ const repo = urlParts[1] || "unknown";
2546
+ return {
2547
+ githubUrl: url,
2548
+ title: `${owner}/${repo}`,
2549
+ slug: repo,
2550
+ agents: [],
2551
+ mcp: [],
2552
+ tools: [],
2553
+ networks: [],
2554
+ workflows: []
2555
+ };
2556
+ }
2557
+ async function createFromTemplate(args2) {
2558
+ let selectedTemplate;
2559
+ if (args2.template === true) {
2560
+ const templates = await loadTemplates();
2561
+ const selected = await selectTemplate(templates);
2562
+ if (!selected) {
2563
+ M.info("No template selected. Exiting.");
2564
+ return;
2565
+ }
2566
+ selectedTemplate = selected;
2567
+ } else if (args2.template && typeof args2.template === "string") {
2568
+ if (isGitHubUrl(args2.template)) {
2569
+ const spinner5 = Y();
2570
+ spinner5.start("Validating GitHub repository...");
2571
+ const validation = await validateGitHubProject(args2.template);
2572
+ if (!validation.isValid) {
2573
+ spinner5.stop("Validation failed");
2574
+ M.error("This does not appear to be a valid Mastra project:");
2575
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2576
+ throw new Error("Invalid Mastra project");
2577
+ }
2578
+ spinner5.stop("Valid Mastra project \u2713");
2579
+ selectedTemplate = await createFromGitHubUrl(args2.template);
2580
+ } else {
2581
+ const templates = await loadTemplates();
2582
+ const found = findTemplateByName(templates, args2.template);
2583
+ if (!found) {
2584
+ M.error(`Template "${args2.template}" not found. Available templates:`);
2585
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2586
+ throw new Error(`Template "${args2.template}" not found`);
2587
+ }
2588
+ selectedTemplate = found;
2589
+ }
2590
+ }
2591
+ if (!selectedTemplate) {
2592
+ throw new Error("No template selected");
2593
+ }
2594
+ let projectName = args2.projectName;
2595
+ if (!projectName) {
2596
+ const defaultName = getDefaultProjectName(selectedTemplate);
2597
+ const response = await he({
2598
+ message: "What is your project name?",
2599
+ defaultValue: defaultName,
2600
+ placeholder: defaultName
2601
+ });
2602
+ if (pD(response)) {
2603
+ M.info("Project creation cancelled.");
2604
+ return;
2605
+ }
2606
+ projectName = response;
2607
+ }
2608
+ try {
2609
+ const analytics = args2.injectedAnalytics || getAnalytics();
2610
+ if (analytics) {
2611
+ analytics.trackEvent("cli_template_used", {
2612
+ template_slug: selectedTemplate.slug,
2613
+ template_title: selectedTemplate.title
2614
+ });
2615
+ }
2616
+ const projectPath = await cloneTemplate({
2617
+ template: selectedTemplate,
2618
+ projectName
2619
+ });
2620
+ await installDependencies(projectPath);
2621
+ Me(`
2622
+ ${color2.green("Mastra template installed!")}
2623
+
2624
+ Add the necessary environment
2625
+ variables in your ${color2.cyan(".env")} file
2626
+ `);
2627
+ postCreate({ projectName });
2628
+ } catch (error) {
2629
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
2630
+ throw error;
2631
+ }
2632
+ }
1980
2633
 
1981
2634
  async function getPackageVersion() {
1982
2635
  const __filename = fileURLToPath(import.meta.url);
1983
2636
  const __dirname = dirname(__filename);
1984
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
2637
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
1985
2638
  const content = await fsExtra.readJSON(pkgJsonPath);
1986
2639
  return content.version;
1987
2640
  }
@@ -1990,7 +2643,7 @@ async function getCreateVersionTag() {
1990
2643
  const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
1991
2644
  const json = await fsExtra.readJSON(pkgPath);
1992
2645
  const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
1993
- const tagLine = stdout.split("\n").find((distLine) => distLine.includes(`: ${json.version}`));
2646
+ const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
1994
2647
  const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
1995
2648
  return tag;
1996
2649
  } catch {
@@ -2019,7 +2672,10 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
2019
2672
  program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
2020
2673
  "-p, --project-name <string>",
2021
2674
  "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) => {
2675
+ ).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(
2676
+ "--template [template-name]",
2677
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
2678
+ ).action(async (projectNameArg, args) => {
2023
2679
  const projectName = projectNameArg || args.projectName;
2024
2680
  const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
2025
2681
  if (args.default) {
@@ -2029,7 +2685,10 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2029
2685
  addExample: true,
2030
2686
  createVersionTag,
2031
2687
  timeout,
2032
- mcpServer: args.mcp
2688
+ mcpServer: args.mcp,
2689
+ directory: "src/",
2690
+ template: args.template,
2691
+ analytics
2033
2692
  });
2034
2693
  return;
2035
2694
  }
@@ -2042,7 +2701,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2042
2701
  timeout,
2043
2702
  projectName,
2044
2703
  directory: args.dir,
2045
- mcpServer: args.mcp
2704
+ mcpServer: args.mcp,
2705
+ template: args.template,
2706
+ analytics
2046
2707
  });
2047
2708
  });
2048
2709
  program.parse(process.argv);