create-mastra 0.0.0-trigger-playground-ui-package-20250506151043 → 0.0.0-unified-sidebar-20251010130811

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