create-mastra 0.0.0-cli-debug-2-20250611100354 → 0.0.0-cloud-deployer-for-core-0.19.1-20251001164939
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/CHANGELOG.md +1827 -0
- package/LICENSE.md +11 -42
- package/README.md +2 -8
- package/dist/index.js +714 -373
- package/dist/index.js.map +1 -1
- package/dist/templates/dev.entry.js +12 -2
- package/package.json +27 -19
- package/dist/starter-files/config.ts +0 -25
- package/dist/starter-files/mastra-pg.docker-compose.yaml +0 -15
package/dist/index.js
CHANGED
|
@@ -1,28 +1,33 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
2
|
import { Command } from 'commander';
|
|
3
3
|
import { randomUUID } from 'node:crypto';
|
|
4
|
-
import * as
|
|
5
|
-
import
|
|
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
|
|
7
|
+
import path3, { dirname } from 'node:path';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
9
|
import { PostHog } from 'posthog-node';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
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
|
|
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';
|
|
17
|
+
import tty from 'node:tty';
|
|
20
18
|
import pino from 'pino';
|
|
21
19
|
import pretty from 'pino-pretty';
|
|
22
|
-
import
|
|
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';
|
|
23
24
|
|
|
24
25
|
var __filename = fileURLToPath(import.meta.url);
|
|
25
|
-
var __dirname =
|
|
26
|
+
var __dirname = path3.dirname(__filename);
|
|
27
|
+
var analyticsInstance = null;
|
|
28
|
+
function getAnalytics() {
|
|
29
|
+
return analyticsInstance;
|
|
30
|
+
}
|
|
26
31
|
var PosthogAnalytics = class {
|
|
27
32
|
sessionId;
|
|
28
33
|
client;
|
|
@@ -34,7 +39,7 @@ var PosthogAnalytics = class {
|
|
|
34
39
|
host = "https://app.posthog.com"
|
|
35
40
|
}) {
|
|
36
41
|
this.version = version;
|
|
37
|
-
const cliConfigPath =
|
|
42
|
+
const cliConfigPath = path3.join(__dirname, "mastra-cli.json");
|
|
38
43
|
if (existsSync(cliConfigPath)) {
|
|
39
44
|
try {
|
|
40
45
|
const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
|
|
@@ -62,7 +67,7 @@ var PosthogAnalytics = class {
|
|
|
62
67
|
}
|
|
63
68
|
writeCliConfig({ distinctId, sessionId }) {
|
|
64
69
|
try {
|
|
65
|
-
writeFileSync(
|
|
70
|
+
writeFileSync(path3.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
|
|
66
71
|
} catch {
|
|
67
72
|
}
|
|
68
73
|
}
|
|
@@ -112,6 +117,22 @@ var PosthogAnalytics = class {
|
|
|
112
117
|
}
|
|
113
118
|
});
|
|
114
119
|
}
|
|
120
|
+
trackEvent(eventName, properties) {
|
|
121
|
+
try {
|
|
122
|
+
if (!this.client) {
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.client.capture({
|
|
126
|
+
distinctId: this.distinctId,
|
|
127
|
+
event: eventName,
|
|
128
|
+
properties: {
|
|
129
|
+
...this.getSystemProperties(),
|
|
130
|
+
...properties
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
} catch {
|
|
134
|
+
}
|
|
135
|
+
}
|
|
115
136
|
trackCommand(options) {
|
|
116
137
|
try {
|
|
117
138
|
if (!this.client) {
|
|
@@ -348,72 +369,58 @@ function requirePicocolors () {
|
|
|
348
369
|
var picocolorsExports = /*@__PURE__*/ requirePicocolors();
|
|
349
370
|
var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
|
|
350
371
|
|
|
351
|
-
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(`
|
|
352
|
-
`)];for(const[E,
|
|
353
|
-
`?(
|
|
354
|
-
`&&(s&&o&&(
|
|
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,`
|
|
355
376
|
`).split(`
|
|
356
|
-
`).map(
|
|
357
|
-
`)}
|
|
358
|
-
`),
|
|
359
|
-
`),s=[];for(let
|
|
360
|
-
`),
|
|
361
|
-
`).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=
|
|
362
|
-
`);this.output.write(s[
|
|
363
|
-
`).slice(
|
|
364
|
-
`)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}
|
|
365
|
-
|
|
366
|
-
function
|
|
367
|
-
${
|
|
368
|
-
`,t
|
|
369
|
-
${color2.yellow(
|
|
370
|
-
${color2.yellow(
|
|
371
|
-
`;case "submit":return `${n}${color2.gray(
|
|
372
|
-
|
|
373
|
-
${color2.cyan(
|
|
374
|
-
`}}}).prompt(),
|
|
375
|
-
${
|
|
376
|
-
|
|
377
|
-
${color2.gray(
|
|
378
|
-
${color2.cyan(
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
${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(`
|
|
383
|
-
${color2.cyan(a)} `)}
|
|
384
|
-
${color2.cyan($)}
|
|
385
|
-
`}}}).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.
|
|
386
|
-
${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)}
|
|
387
|
-
${y(this.state)} ${s.message}
|
|
388
|
-
`;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}
|
|
389
|
-
${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
|
|
390
|
-
`).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
|
|
391
|
-
`);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
392
|
-
${color2.yellow(a)} `)+`
|
|
393
|
-
`+r+`
|
|
394
|
-
`}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
395
|
-
${color2.cyan(a)} `)}
|
|
396
|
-
${color2.cyan($)}
|
|
397
|
-
`}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
|
|
398
|
-
${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}
|
|
399
403
|
`.split(`
|
|
400
|
-
`),i=
|
|
401
|
-
`);process.stdout.write(`${color2.gray(
|
|
402
|
-
${color2.green(
|
|
403
|
-
${
|
|
404
|
-
${color2.gray(
|
|
405
|
-
`);},
|
|
406
|
-
|
|
407
|
-
`);},
|
|
408
|
-
`);},
|
|
409
|
-
${color2.gray(
|
|
410
|
-
|
|
411
|
-
`);},
|
|
412
|
-
`);
|
|
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(`
|
|
413
417
|
`)}
|
|
414
|
-
`);},info:
|
|
415
|
-
`);
|
|
416
|
-
`),
|
|
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};
|
|
417
424
|
|
|
418
425
|
var shellQuote$1 = {};
|
|
419
426
|
|
|
@@ -432,8 +439,8 @@ function requireQuote () {
|
|
|
432
439
|
if (s && typeof s === 'object') {
|
|
433
440
|
return s.op.replace(/(.)/g, '\\$1');
|
|
434
441
|
}
|
|
435
|
-
if ((/["\s]/).test(s) && !(/'/).test(s)) {
|
|
436
|
-
return "'" + s.replace(/(['
|
|
442
|
+
if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
|
|
443
|
+
return "'" + s.replace(/(['])/g, '\\$1') + "'";
|
|
437
444
|
}
|
|
438
445
|
if ((/["'\s]/).test(s)) {
|
|
439
446
|
return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
|
|
@@ -825,18 +832,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
|
|
|
825
832
|
yellowBright: yellowBright
|
|
826
833
|
});
|
|
827
834
|
|
|
828
|
-
const isUnicodeSupported =
|
|
835
|
+
const isUnicodeSupported = y$1.platform !== 'win32'
|
|
836
|
+
|| Boolean(y$1.env.WT_SESSION) // Windows Terminal
|
|
837
|
+
|| y$1.env.TERM_PROGRAM === 'vscode';
|
|
829
838
|
|
|
830
839
|
const isInteractive = stream => Boolean(
|
|
831
840
|
stream.isTTY
|
|
832
|
-
&&
|
|
833
|
-
&& !('CI' in
|
|
841
|
+
&& y$1.env.TERM !== 'dumb'
|
|
842
|
+
&& !('CI' in y$1.env),
|
|
834
843
|
);
|
|
835
844
|
|
|
836
845
|
const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
|
|
837
846
|
const successSymbol = green(isUnicodeSupported ? '✔' : '√');
|
|
838
847
|
const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
|
|
839
|
-
const errorSymbol = red(isUnicodeSupported ? '
|
|
848
|
+
const errorSymbol = red(isUnicodeSupported ? '✖' : '×');
|
|
840
849
|
|
|
841
850
|
const defaultSpinner = {
|
|
842
851
|
frames: isUnicodeSupported
|
|
@@ -879,7 +888,7 @@ class YoctoSpinner {
|
|
|
879
888
|
this.#frames = spinner.frames;
|
|
880
889
|
this.#interval = spinner.interval;
|
|
881
890
|
this.#text = options.text ?? '';
|
|
882
|
-
this.#stream = options.stream ??
|
|
891
|
+
this.#stream = options.stream ?? y$1.stderr;
|
|
883
892
|
this.#color = options.color ?? 'cyan';
|
|
884
893
|
this.#isInteractive = isInteractive(this.#stream);
|
|
885
894
|
this.#exitHandlerBound = this.#exitHandler.bind(this);
|
|
@@ -951,8 +960,8 @@ class YoctoSpinner {
|
|
|
951
960
|
return this.#text;
|
|
952
961
|
}
|
|
953
962
|
|
|
954
|
-
set text(value
|
|
955
|
-
this.#text = value;
|
|
963
|
+
set text(value) {
|
|
964
|
+
this.#text = value ?? '';
|
|
956
965
|
this.#render();
|
|
957
966
|
}
|
|
958
967
|
|
|
@@ -1016,7 +1025,7 @@ class YoctoSpinner {
|
|
|
1016
1025
|
|
|
1017
1026
|
#lineCount(text) {
|
|
1018
1027
|
const width = this.#stream.columns ?? 80;
|
|
1019
|
-
const lines = text.split('\n');
|
|
1028
|
+
const lines = stripVTControlCharacters(text).split('\n');
|
|
1020
1029
|
|
|
1021
1030
|
let lineCount = 0;
|
|
1022
1031
|
for (const line of lines) {
|
|
@@ -1039,13 +1048,13 @@ class YoctoSpinner {
|
|
|
1039
1048
|
}
|
|
1040
1049
|
|
|
1041
1050
|
#subscribeToProcessEvents() {
|
|
1042
|
-
|
|
1043
|
-
|
|
1051
|
+
y$1.once('SIGINT', this.#exitHandlerBound);
|
|
1052
|
+
y$1.once('SIGTERM', this.#exitHandlerBound);
|
|
1044
1053
|
}
|
|
1045
1054
|
|
|
1046
1055
|
#unsubscribeFromProcessEvents() {
|
|
1047
|
-
|
|
1048
|
-
|
|
1056
|
+
y$1.off('SIGINT', this.#exitHandlerBound);
|
|
1057
|
+
y$1.off('SIGTERM', this.#exitHandlerBound);
|
|
1049
1058
|
}
|
|
1050
1059
|
|
|
1051
1060
|
#exitHandler(signal) {
|
|
@@ -1056,7 +1065,7 @@ class YoctoSpinner {
|
|
|
1056
1065
|
// SIGINT: 128 + 2
|
|
1057
1066
|
// SIGTERM: 128 + 15
|
|
1058
1067
|
const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
|
|
1059
|
-
|
|
1068
|
+
y$1.exit(exitCode);
|
|
1060
1069
|
}
|
|
1061
1070
|
}
|
|
1062
1071
|
|
|
@@ -1136,9 +1145,7 @@ var PinoLogger = class extends MastraLogger {
|
|
|
1136
1145
|
{
|
|
1137
1146
|
name: options.name || "app",
|
|
1138
1147
|
level: options.level || LogLevel.INFO,
|
|
1139
|
-
formatters:
|
|
1140
|
-
level: (label) => ({ level: label })
|
|
1141
|
-
}
|
|
1148
|
+
formatters: options.formatters
|
|
1142
1149
|
},
|
|
1143
1150
|
options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
|
|
1144
1151
|
...transportsAry.map(([, transport]) => ({
|
|
@@ -1166,6 +1173,197 @@ var PinoLogger = class extends MastraLogger {
|
|
|
1166
1173
|
}
|
|
1167
1174
|
};
|
|
1168
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 });
|
|
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
|
|
1283
|
+
});
|
|
1284
|
+
spinner5.success("Dependencies installed successfully");
|
|
1285
|
+
} catch (error) {
|
|
1286
|
+
spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
1287
|
+
throw error;
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
|
|
1291
|
+
async function loadTemplates() {
|
|
1292
|
+
try {
|
|
1293
|
+
const response = await fetch(TEMPLATES_API_URL);
|
|
1294
|
+
if (!response.ok) {
|
|
1295
|
+
throw new Error(`Failed to fetch templates: ${response.statusText}`);
|
|
1296
|
+
}
|
|
1297
|
+
const templates = await response.json();
|
|
1298
|
+
return templates;
|
|
1299
|
+
} catch (error) {
|
|
1300
|
+
console.error("Error loading templates:", error);
|
|
1301
|
+
throw new Error("Failed to load templates. Please check your internet connection and try again.");
|
|
1302
|
+
}
|
|
1303
|
+
}
|
|
1304
|
+
function pluralize(count, singular, plural) {
|
|
1305
|
+
return count === 1 ? singular : plural || `${singular}s`;
|
|
1306
|
+
}
|
|
1307
|
+
async function selectTemplate(templates) {
|
|
1308
|
+
const choices = templates.map((template) => {
|
|
1309
|
+
const parts = [];
|
|
1310
|
+
if (template.agents?.length) {
|
|
1311
|
+
parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
|
|
1312
|
+
}
|
|
1313
|
+
if (template.tools?.length) {
|
|
1314
|
+
parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
|
|
1315
|
+
}
|
|
1316
|
+
if (template.workflows?.length) {
|
|
1317
|
+
parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
|
|
1318
|
+
}
|
|
1319
|
+
if (template.mcp?.length) {
|
|
1320
|
+
parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
|
|
1321
|
+
}
|
|
1322
|
+
if (template.networks?.length) {
|
|
1323
|
+
parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
|
|
1324
|
+
}
|
|
1325
|
+
return {
|
|
1326
|
+
value: template,
|
|
1327
|
+
label: template.title,
|
|
1328
|
+
hint: parts.join(", ") || "Template components"
|
|
1329
|
+
};
|
|
1330
|
+
});
|
|
1331
|
+
const selected = await ve({
|
|
1332
|
+
message: "Select a template:",
|
|
1333
|
+
options: choices
|
|
1334
|
+
});
|
|
1335
|
+
if (pD(selected)) {
|
|
1336
|
+
return null;
|
|
1337
|
+
}
|
|
1338
|
+
return selected;
|
|
1339
|
+
}
|
|
1340
|
+
function findTemplateByName(templates, templateName) {
|
|
1341
|
+
let template = templates.find((t) => t.slug === templateName);
|
|
1342
|
+
if (template) return template;
|
|
1343
|
+
const slugWithPrefix = `template-${templateName}`;
|
|
1344
|
+
template = templates.find((t) => t.slug === slugWithPrefix);
|
|
1345
|
+
if (template) return template;
|
|
1346
|
+
template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
|
|
1347
|
+
if (template) return template;
|
|
1348
|
+
return null;
|
|
1349
|
+
}
|
|
1350
|
+
function getDefaultProjectName(template) {
|
|
1351
|
+
return template.slug.replace(/^template-/, "");
|
|
1352
|
+
}
|
|
1353
|
+
function getPackageManagerAddCommand(pm) {
|
|
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";
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1169
1367
|
var DepsService = class {
|
|
1170
1368
|
packageManager;
|
|
1171
1369
|
constructor() {
|
|
@@ -1174,11 +1372,11 @@ var DepsService = class {
|
|
|
1174
1372
|
findLockFile(dir) {
|
|
1175
1373
|
const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
|
|
1176
1374
|
for (const file of lockFiles) {
|
|
1177
|
-
if (
|
|
1375
|
+
if (fs4__default__default.existsSync(path3.join(dir, file))) {
|
|
1178
1376
|
return file;
|
|
1179
1377
|
}
|
|
1180
1378
|
}
|
|
1181
|
-
const parentDir =
|
|
1379
|
+
const parentDir = path3.resolve(dir, "..");
|
|
1182
1380
|
if (parentDir !== dir) {
|
|
1183
1381
|
return this.findLockFile(parentDir);
|
|
1184
1382
|
}
|
|
@@ -1200,14 +1398,10 @@ var DepsService = class {
|
|
|
1200
1398
|
}
|
|
1201
1399
|
}
|
|
1202
1400
|
async installPackages(packages) {
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
runCommand = `${this.packageManager} i`;
|
|
1206
|
-
} else {
|
|
1207
|
-
runCommand = `${this.packageManager} add`;
|
|
1208
|
-
}
|
|
1401
|
+
const pm = this.packageManager;
|
|
1402
|
+
const installCommand = getPackageManagerAddCommand(pm);
|
|
1209
1403
|
const packageList = packages.join(" ");
|
|
1210
|
-
return execa(`${
|
|
1404
|
+
return execa(`${pm} ${installCommand} ${packageList}`, {
|
|
1211
1405
|
all: true,
|
|
1212
1406
|
shell: true,
|
|
1213
1407
|
stdio: "inherit"
|
|
@@ -1215,13 +1409,13 @@ var DepsService = class {
|
|
|
1215
1409
|
}
|
|
1216
1410
|
async checkDependencies(dependencies) {
|
|
1217
1411
|
try {
|
|
1218
|
-
const packageJsonPath =
|
|
1412
|
+
const packageJsonPath = path3.join(process.cwd(), "package.json");
|
|
1219
1413
|
try {
|
|
1220
|
-
await
|
|
1414
|
+
await fs5.access(packageJsonPath);
|
|
1221
1415
|
} catch {
|
|
1222
1416
|
return "No package.json file found in the current directory";
|
|
1223
1417
|
}
|
|
1224
|
-
const packageJson = JSON.parse(await
|
|
1418
|
+
const packageJson = JSON.parse(await fs5.readFile(packageJsonPath, "utf-8"));
|
|
1225
1419
|
for (const dependency of dependencies) {
|
|
1226
1420
|
if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
|
|
1227
1421
|
return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
|
|
@@ -1235,65 +1429,23 @@ var DepsService = class {
|
|
|
1235
1429
|
}
|
|
1236
1430
|
async getProjectName() {
|
|
1237
1431
|
try {
|
|
1238
|
-
const packageJsonPath =
|
|
1239
|
-
const packageJson = await
|
|
1432
|
+
const packageJsonPath = path3.join(process.cwd(), "package.json");
|
|
1433
|
+
const packageJson = await fs5.readFile(packageJsonPath, "utf-8");
|
|
1240
1434
|
const pkg = JSON.parse(packageJson);
|
|
1241
1435
|
return pkg.name;
|
|
1242
1436
|
} catch (err) {
|
|
1243
1437
|
throw err;
|
|
1244
1438
|
}
|
|
1245
1439
|
}
|
|
1246
|
-
async getPackageVersion() {
|
|
1247
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
1248
|
-
const __dirname = dirname(__filename);
|
|
1249
|
-
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
1250
|
-
const content = await fsExtra3.readJSON(pkgJsonPath);
|
|
1251
|
-
return content.version;
|
|
1252
|
-
}
|
|
1253
1440
|
async addScriptsToPackageJson(scripts) {
|
|
1254
|
-
const packageJson = JSON.parse(await
|
|
1441
|
+
const packageJson = JSON.parse(await fs5.readFile("package.json", "utf-8"));
|
|
1255
1442
|
packageJson.scripts = {
|
|
1256
1443
|
...packageJson.scripts,
|
|
1257
1444
|
...scripts
|
|
1258
1445
|
};
|
|
1259
|
-
await
|
|
1446
|
+
await fs5.writeFile("package.json", JSON.stringify(packageJson, null, 2));
|
|
1260
1447
|
}
|
|
1261
1448
|
};
|
|
1262
|
-
function getPackageManager() {
|
|
1263
|
-
const userAgent = process.env.npm_config_user_agent || "";
|
|
1264
|
-
const execPath = process.env.npm_execpath || "";
|
|
1265
|
-
if (userAgent.includes("yarn")) {
|
|
1266
|
-
return "yarn";
|
|
1267
|
-
}
|
|
1268
|
-
if (userAgent.includes("pnpm")) {
|
|
1269
|
-
return "pnpm";
|
|
1270
|
-
}
|
|
1271
|
-
if (userAgent.includes("npm")) {
|
|
1272
|
-
return "npm";
|
|
1273
|
-
}
|
|
1274
|
-
if (execPath.includes("yarn")) {
|
|
1275
|
-
return "yarn";
|
|
1276
|
-
}
|
|
1277
|
-
if (execPath.includes("pnpm")) {
|
|
1278
|
-
return "pnpm";
|
|
1279
|
-
}
|
|
1280
|
-
if (execPath.includes("npm")) {
|
|
1281
|
-
return "npm";
|
|
1282
|
-
}
|
|
1283
|
-
return "npm";
|
|
1284
|
-
}
|
|
1285
|
-
function getPackageManagerInstallCommand(pm) {
|
|
1286
|
-
switch (pm) {
|
|
1287
|
-
case "npm":
|
|
1288
|
-
return "install";
|
|
1289
|
-
case "yarn":
|
|
1290
|
-
return "add";
|
|
1291
|
-
case "pnpm":
|
|
1292
|
-
return "add";
|
|
1293
|
-
default:
|
|
1294
|
-
return "install";
|
|
1295
|
-
}
|
|
1296
|
-
}
|
|
1297
1449
|
var args = ["-y", "@mastra/mcp-docs-server"];
|
|
1298
1450
|
var createMcpConfig = (editor) => {
|
|
1299
1451
|
if (editor === "vscode") {
|
|
@@ -1346,19 +1498,19 @@ async function writeMergedConfig(configPath, editor) {
|
|
|
1346
1498
|
spaces: 2
|
|
1347
1499
|
});
|
|
1348
1500
|
}
|
|
1349
|
-
var windsurfGlobalMCPConfigPath =
|
|
1350
|
-
var cursorGlobalMCPConfigPath =
|
|
1351
|
-
|
|
1352
|
-
var vscodeGlobalMCPConfigPath =
|
|
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(
|
|
1353
1505
|
os.homedir(),
|
|
1354
|
-
process.platform === "win32" ?
|
|
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")
|
|
1355
1507
|
);
|
|
1356
1508
|
async function installMastraDocsMCPServer({ editor, directory }) {
|
|
1357
1509
|
if (editor === `cursor`) {
|
|
1358
|
-
await writeMergedConfig(
|
|
1510
|
+
await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
|
|
1359
1511
|
}
|
|
1360
1512
|
if (editor === `vscode`) {
|
|
1361
|
-
await writeMergedConfig(
|
|
1513
|
+
await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
|
|
1362
1514
|
}
|
|
1363
1515
|
if (editor === `cursor-global`) {
|
|
1364
1516
|
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
@@ -1389,8 +1541,9 @@ async function globalMCPIsAlreadyInstalled(editor) {
|
|
|
1389
1541
|
}
|
|
1390
1542
|
try {
|
|
1391
1543
|
const configContents = await readJSON(configPath);
|
|
1544
|
+
if (!configContents) return false;
|
|
1392
1545
|
if (editor === "vscode") {
|
|
1393
|
-
if (!configContents
|
|
1546
|
+
if (!configContents.servers) return false;
|
|
1394
1547
|
const hasMastraMCP2 = Object.values(configContents.servers).some(
|
|
1395
1548
|
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1396
1549
|
);
|
|
@@ -1401,8 +1554,7 @@ async function globalMCPIsAlreadyInstalled(editor) {
|
|
|
1401
1554
|
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1402
1555
|
);
|
|
1403
1556
|
return hasMastraMCP;
|
|
1404
|
-
} catch
|
|
1405
|
-
console.error(e);
|
|
1557
|
+
} catch {
|
|
1406
1558
|
return false;
|
|
1407
1559
|
}
|
|
1408
1560
|
}
|
|
@@ -1416,7 +1568,7 @@ var FileEnvService = class extends EnvService {
|
|
|
1416
1568
|
}
|
|
1417
1569
|
readFile(filePath) {
|
|
1418
1570
|
return new Promise((resolve, reject) => {
|
|
1419
|
-
|
|
1571
|
+
fs4__default.readFile(filePath, "utf8", (err, data) => {
|
|
1420
1572
|
if (err) reject(err);
|
|
1421
1573
|
else resolve(data);
|
|
1422
1574
|
});
|
|
@@ -1424,7 +1576,7 @@ var FileEnvService = class extends EnvService {
|
|
|
1424
1576
|
}
|
|
1425
1577
|
writeFile({ filePath, data }) {
|
|
1426
1578
|
return new Promise((resolve, reject) => {
|
|
1427
|
-
|
|
1579
|
+
fs4__default.writeFile(filePath, data, "utf8", (err) => {
|
|
1428
1580
|
if (err) reject(err);
|
|
1429
1581
|
else resolve();
|
|
1430
1582
|
});
|
|
@@ -1444,7 +1596,7 @@ var FileEnvService = class extends EnvService {
|
|
|
1444
1596
|
${key}=${value}`;
|
|
1445
1597
|
}
|
|
1446
1598
|
await this.writeFile({ filePath, data });
|
|
1447
|
-
console.
|
|
1599
|
+
console.info(`${key} set to ${value} in ENV file.`);
|
|
1448
1600
|
return data;
|
|
1449
1601
|
}
|
|
1450
1602
|
async getEnvValue(key) {
|
|
@@ -1477,25 +1629,25 @@ var FileService = class {
|
|
|
1477
1629
|
*/
|
|
1478
1630
|
async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
|
|
1479
1631
|
const __filename = fileURLToPath(import.meta.url);
|
|
1480
|
-
const __dirname =
|
|
1481
|
-
const filePath =
|
|
1482
|
-
const fileString =
|
|
1483
|
-
if (
|
|
1484
|
-
console.
|
|
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`);
|
|
1485
1637
|
return false;
|
|
1486
1638
|
}
|
|
1487
|
-
await
|
|
1639
|
+
await fsExtra.outputFile(outputFilePath, fileString);
|
|
1488
1640
|
return true;
|
|
1489
1641
|
}
|
|
1490
1642
|
async setupEnvFile({ dbUrl }) {
|
|
1491
|
-
const envPath =
|
|
1492
|
-
await
|
|
1643
|
+
const envPath = path3.join(process.cwd(), ".env.development");
|
|
1644
|
+
await fsExtra.ensureFile(envPath);
|
|
1493
1645
|
const fileEnvService = new FileEnvService(envPath);
|
|
1494
1646
|
await fileEnvService.setEnvValue("DB_URL", dbUrl);
|
|
1495
1647
|
}
|
|
1496
1648
|
getFirstExistingFile(files) {
|
|
1497
1649
|
for (const f of files) {
|
|
1498
|
-
if (
|
|
1650
|
+
if (fs4__default__default.existsSync(f)) {
|
|
1499
1651
|
return f;
|
|
1500
1652
|
}
|
|
1501
1653
|
}
|
|
@@ -1505,18 +1657,22 @@ var FileService = class {
|
|
|
1505
1657
|
filePath,
|
|
1506
1658
|
replacements
|
|
1507
1659
|
}) {
|
|
1508
|
-
let fileContent =
|
|
1660
|
+
let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
|
|
1509
1661
|
replacements.forEach(({ search, replace }) => {
|
|
1510
1662
|
fileContent = fileContent.replaceAll(search, replace);
|
|
1511
1663
|
});
|
|
1512
|
-
|
|
1664
|
+
fs4__default__default.writeFileSync(filePath, fileContent);
|
|
1665
|
+
}
|
|
1666
|
+
};
|
|
1667
|
+
var exec2 = util.promisify(child_process.exec);
|
|
1668
|
+
var getAISDKPackageVersion = (llmProvider) => {
|
|
1669
|
+
switch (llmProvider) {
|
|
1670
|
+
case "cerebras":
|
|
1671
|
+
return "^0.2.14";
|
|
1672
|
+
default:
|
|
1673
|
+
return "^1.0.0";
|
|
1513
1674
|
}
|
|
1514
1675
|
};
|
|
1515
|
-
new PinoLogger({
|
|
1516
|
-
name: "Mastra CLI",
|
|
1517
|
-
level: "debug"
|
|
1518
|
-
});
|
|
1519
|
-
var exec = util.promisify(child_process.exec);
|
|
1520
1676
|
var getAISDKPackage = (llmProvider) => {
|
|
1521
1677
|
switch (llmProvider) {
|
|
1522
1678
|
case "openai":
|
|
@@ -1529,6 +1685,8 @@ var getAISDKPackage = (llmProvider) => {
|
|
|
1529
1685
|
return "@ai-sdk/google";
|
|
1530
1686
|
case "cerebras":
|
|
1531
1687
|
return "@ai-sdk/cerebras";
|
|
1688
|
+
case "mistral":
|
|
1689
|
+
return "@ai-sdk/mistral";
|
|
1532
1690
|
default:
|
|
1533
1691
|
return "@ai-sdk/openai";
|
|
1534
1692
|
}
|
|
@@ -1547,24 +1705,29 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1547
1705
|
modelItem = `groq('llama-3.3-70b-versatile')`;
|
|
1548
1706
|
} else if (llmProvider === "google") {
|
|
1549
1707
|
providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
|
|
1550
|
-
modelItem = `google('gemini-
|
|
1708
|
+
modelItem = `google('gemini-2.5-pro')`;
|
|
1551
1709
|
} else if (llmProvider === "cerebras") {
|
|
1552
1710
|
providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
|
|
1553
1711
|
modelItem = `cerebras('llama-3.3-70b')`;
|
|
1712
|
+
} else if (llmProvider === "mistral") {
|
|
1713
|
+
providerImport = `import { mistral } from '${getAISDKPackage(llmProvider)}';`;
|
|
1714
|
+
modelItem = `mistral('mistral-medium-2508')`;
|
|
1554
1715
|
}
|
|
1555
1716
|
return { providerImport, modelItem };
|
|
1556
1717
|
};
|
|
1557
1718
|
async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
1558
1719
|
const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
|
|
1559
1720
|
const instructions = `
|
|
1560
|
-
You are a helpful weather assistant that provides accurate weather information.
|
|
1721
|
+
You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
|
|
1561
1722
|
|
|
1562
1723
|
Your primary function is to help users get weather details for specific locations. When responding:
|
|
1563
1724
|
- Always ask for a location if none is provided
|
|
1564
|
-
- If the location name isn
|
|
1725
|
+
- If the location name isn't in English, please translate it
|
|
1565
1726
|
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
|
|
1566
1727
|
- Include relevant details like humidity, wind conditions, and precipitation
|
|
1567
1728
|
- Keep responses concise but informative
|
|
1729
|
+
- If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
|
|
1730
|
+
- If the user asks for activities, respond in the format they request.
|
|
1568
1731
|
|
|
1569
1732
|
${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
|
|
1570
1733
|
`;
|
|
@@ -1591,66 +1754,13 @@ export const weatherAgent = new Agent({
|
|
|
1591
1754
|
parser: "typescript",
|
|
1592
1755
|
singleQuote: true
|
|
1593
1756
|
});
|
|
1594
|
-
await
|
|
1595
|
-
await
|
|
1757
|
+
await fs5.writeFile(destPath, "");
|
|
1758
|
+
await fs5.writeFile(destPath, formattedContent);
|
|
1596
1759
|
}
|
|
1597
|
-
async function writeWorkflowSample(destPath
|
|
1598
|
-
const {
|
|
1599
|
-
const content = `${providerImport}
|
|
1600
|
-
import { Agent } from '@mastra/core/agent';
|
|
1601
|
-
import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1760
|
+
async function writeWorkflowSample(destPath) {
|
|
1761
|
+
const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1602
1762
|
import { z } from 'zod';
|
|
1603
1763
|
|
|
1604
|
-
const llm = ${modelItem};
|
|
1605
|
-
|
|
1606
|
-
const agent = new Agent({
|
|
1607
|
-
name: 'Weather Agent',
|
|
1608
|
-
model: llm,
|
|
1609
|
-
instructions: \`
|
|
1610
|
-
You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
|
|
1611
|
-
|
|
1612
|
-
For each day in the forecast, structure your response exactly as follows:
|
|
1613
|
-
|
|
1614
|
-
\u{1F4C5} [Day, Month Date, Year]
|
|
1615
|
-
\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
|
|
1616
|
-
|
|
1617
|
-
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1618
|
-
\u2022 Conditions: [brief description]
|
|
1619
|
-
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1620
|
-
\u2022 Precipitation: [X% chance]
|
|
1621
|
-
|
|
1622
|
-
\u{1F305} MORNING ACTIVITIES
|
|
1623
|
-
Outdoor:
|
|
1624
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1625
|
-
Best timing: [specific time range]
|
|
1626
|
-
Note: [relevant weather consideration]
|
|
1627
|
-
|
|
1628
|
-
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1629
|
-
Outdoor:
|
|
1630
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1631
|
-
Best timing: [specific time range]
|
|
1632
|
-
Note: [relevant weather consideration]
|
|
1633
|
-
|
|
1634
|
-
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1635
|
-
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1636
|
-
Ideal for: [weather condition that would trigger this alternative]
|
|
1637
|
-
|
|
1638
|
-
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1639
|
-
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1640
|
-
|
|
1641
|
-
Guidelines:
|
|
1642
|
-
- Suggest 2-3 time-specific outdoor activities per day
|
|
1643
|
-
- Include 1-2 indoor backup options
|
|
1644
|
-
- For precipitation >50%, lead with indoor activities
|
|
1645
|
-
- All activities must be specific to the location
|
|
1646
|
-
- Include specific venues, trails, or locations
|
|
1647
|
-
- Consider activity intensity based on temperature
|
|
1648
|
-
- Keep descriptions concise but informative
|
|
1649
|
-
|
|
1650
|
-
Maintain this exact formatting for consistency, using the emoji and section headers as shown.
|
|
1651
|
-
\`,
|
|
1652
|
-
});
|
|
1653
|
-
|
|
1654
1764
|
const forecastSchema = z.object({
|
|
1655
1765
|
date: z.string(),
|
|
1656
1766
|
maxTemp: z.number(),
|
|
@@ -1744,16 +1854,59 @@ const planActivities = createStep({
|
|
|
1744
1854
|
outputSchema: z.object({
|
|
1745
1855
|
activities: z.string(),
|
|
1746
1856
|
}),
|
|
1747
|
-
execute: async ({ inputData }) => {
|
|
1857
|
+
execute: async ({ inputData, mastra }) => {
|
|
1748
1858
|
const forecast = inputData
|
|
1749
1859
|
|
|
1750
1860
|
if (!forecast) {
|
|
1751
1861
|
throw new Error('Forecast data not found')
|
|
1752
1862
|
}
|
|
1753
1863
|
|
|
1864
|
+
const agent = mastra?.getAgent('weatherAgent');
|
|
1865
|
+
if (!agent) {
|
|
1866
|
+
throw new Error('Weather agent not found');
|
|
1867
|
+
}
|
|
1868
|
+
|
|
1754
1869
|
const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
|
|
1755
1870
|
\${JSON.stringify(forecast, null, 2)}
|
|
1756
|
-
|
|
1871
|
+
For each day in the forecast, structure your response exactly as follows:
|
|
1872
|
+
|
|
1873
|
+
\u{1F4C5} [Day, Month Date, Year]
|
|
1874
|
+
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
1875
|
+
|
|
1876
|
+
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1877
|
+
\u2022 Conditions: [brief description]
|
|
1878
|
+
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1879
|
+
\u2022 Precipitation: [X% chance]
|
|
1880
|
+
|
|
1881
|
+
\u{1F305} MORNING ACTIVITIES
|
|
1882
|
+
Outdoor:
|
|
1883
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1884
|
+
Best timing: [specific time range]
|
|
1885
|
+
Note: [relevant weather consideration]
|
|
1886
|
+
|
|
1887
|
+
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1888
|
+
Outdoor:
|
|
1889
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1890
|
+
Best timing: [specific time range]
|
|
1891
|
+
Note: [relevant weather consideration]
|
|
1892
|
+
|
|
1893
|
+
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1894
|
+
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1895
|
+
Ideal for: [weather condition that would trigger this alternative]
|
|
1896
|
+
|
|
1897
|
+
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1898
|
+
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1899
|
+
|
|
1900
|
+
Guidelines:
|
|
1901
|
+
- Suggest 2-3 time-specific outdoor activities per day
|
|
1902
|
+
- Include 1-2 indoor backup options
|
|
1903
|
+
- For precipitation >50%, lead with indoor activities
|
|
1904
|
+
- All activities must be specific to the location
|
|
1905
|
+
- Include specific venues, trails, or locations
|
|
1906
|
+
- Consider activity intensity based on temperature
|
|
1907
|
+
- Keep descriptions concise but informative
|
|
1908
|
+
|
|
1909
|
+
Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
|
|
1757
1910
|
|
|
1758
1911
|
const response = await agent.stream([
|
|
1759
1912
|
{
|
|
@@ -1795,7 +1948,7 @@ export { weatherWorkflow };`;
|
|
|
1795
1948
|
semi: true,
|
|
1796
1949
|
singleQuote: true
|
|
1797
1950
|
});
|
|
1798
|
-
await
|
|
1951
|
+
await fs5.writeFile(destPath, formattedContent);
|
|
1799
1952
|
}
|
|
1800
1953
|
async function writeToolSample(destPath) {
|
|
1801
1954
|
const fileService = new FileService();
|
|
@@ -1808,14 +1961,14 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
|
|
|
1808
1961
|
case "tools":
|
|
1809
1962
|
return writeToolSample(destPath);
|
|
1810
1963
|
case "workflows":
|
|
1811
|
-
return writeWorkflowSample(destPath
|
|
1964
|
+
return writeWorkflowSample(destPath);
|
|
1812
1965
|
default:
|
|
1813
1966
|
return "";
|
|
1814
1967
|
}
|
|
1815
1968
|
}
|
|
1816
1969
|
var createComponentsDir = async (dirPath, component) => {
|
|
1817
1970
|
const componentPath = dirPath + `/${component}`;
|
|
1818
|
-
await
|
|
1971
|
+
await fsExtra.ensureDir(componentPath);
|
|
1819
1972
|
};
|
|
1820
1973
|
var writeIndexFile = async ({
|
|
1821
1974
|
dirPath,
|
|
@@ -1824,15 +1977,15 @@ var writeIndexFile = async ({
|
|
|
1824
1977
|
addWorkflow
|
|
1825
1978
|
}) => {
|
|
1826
1979
|
const indexPath = dirPath + "/index.ts";
|
|
1827
|
-
const destPath =
|
|
1980
|
+
const destPath = path3.join(indexPath);
|
|
1828
1981
|
try {
|
|
1829
|
-
await
|
|
1982
|
+
await fs5.writeFile(destPath, "");
|
|
1830
1983
|
const filteredExports = [
|
|
1831
1984
|
addWorkflow ? `workflows: { weatherWorkflow },` : "",
|
|
1832
1985
|
addAgent ? `agents: { weatherAgent },` : ""
|
|
1833
1986
|
].filter(Boolean);
|
|
1834
1987
|
if (!addExample) {
|
|
1835
|
-
await
|
|
1988
|
+
await fs5.writeFile(
|
|
1836
1989
|
destPath,
|
|
1837
1990
|
`
|
|
1838
1991
|
import { Mastra } from '@mastra/core';
|
|
@@ -1842,7 +1995,7 @@ export const mastra = new Mastra()
|
|
|
1842
1995
|
);
|
|
1843
1996
|
return;
|
|
1844
1997
|
}
|
|
1845
|
-
await
|
|
1998
|
+
await fs5.writeFile(
|
|
1846
1999
|
destPath,
|
|
1847
2000
|
`
|
|
1848
2001
|
import { Mastra } from '@mastra/core/mastra';
|
|
@@ -1884,6 +2037,9 @@ var getAPIKey = async (provider) => {
|
|
|
1884
2037
|
case "cerebras":
|
|
1885
2038
|
key = "CEREBRAS_API_KEY";
|
|
1886
2039
|
return key;
|
|
2040
|
+
case "mistral":
|
|
2041
|
+
key = "MISTRAL_API_KEY";
|
|
2042
|
+
return key;
|
|
1887
2043
|
default:
|
|
1888
2044
|
return key;
|
|
1889
2045
|
}
|
|
@@ -1895,16 +2051,16 @@ var writeAPIKey = async ({
|
|
|
1895
2051
|
const key = await getAPIKey(provider);
|
|
1896
2052
|
const escapedKey = shellQuote.quote([key]);
|
|
1897
2053
|
const escapedApiKey = shellQuote.quote([apiKey]);
|
|
1898
|
-
await
|
|
2054
|
+
await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
|
|
1899
2055
|
};
|
|
1900
2056
|
var createMastraDir = async (directory) => {
|
|
1901
2057
|
let dir = directory.trim().split("/").filter((item) => item !== "");
|
|
1902
|
-
const dirPath =
|
|
2058
|
+
const dirPath = path3.join(process.cwd(), ...dir, "mastra");
|
|
1903
2059
|
try {
|
|
1904
|
-
await
|
|
2060
|
+
await fs5.access(dirPath);
|
|
1905
2061
|
return { ok: false };
|
|
1906
2062
|
} catch {
|
|
1907
|
-
await
|
|
2063
|
+
await fsExtra.ensureDir(dirPath);
|
|
1908
2064
|
return { ok: true, dirPath };
|
|
1909
2065
|
}
|
|
1910
2066
|
};
|
|
@@ -1917,40 +2073,27 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
|
|
|
1917
2073
|
}
|
|
1918
2074
|
};
|
|
1919
2075
|
var interactivePrompt = async () => {
|
|
1920
|
-
|
|
1921
|
-
const mastraProject = await
|
|
2076
|
+
Ie(color2.inverse(" Mastra Init "));
|
|
2077
|
+
const mastraProject = await Ce(
|
|
1922
2078
|
{
|
|
1923
|
-
directory: () =>
|
|
2079
|
+
directory: () => he({
|
|
1924
2080
|
message: "Where should we create the Mastra files? (default: src/)",
|
|
1925
2081
|
placeholder: "src/",
|
|
1926
2082
|
defaultValue: "src/"
|
|
1927
2083
|
}),
|
|
1928
|
-
|
|
1929
|
-
message: "Choose components to install:",
|
|
1930
|
-
options: [
|
|
1931
|
-
{ value: "agents", label: "Agents", hint: "recommended" },
|
|
1932
|
-
{
|
|
1933
|
-
value: "workflows",
|
|
1934
|
-
label: "Workflows"
|
|
1935
|
-
}
|
|
1936
|
-
]
|
|
1937
|
-
}),
|
|
1938
|
-
shouldAddTools: () => ce({
|
|
1939
|
-
message: "Add tools?",
|
|
1940
|
-
initialValue: false
|
|
1941
|
-
}),
|
|
1942
|
-
llmProvider: () => le({
|
|
2084
|
+
llmProvider: () => ve({
|
|
1943
2085
|
message: "Select default provider:",
|
|
1944
2086
|
options: [
|
|
1945
2087
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
1946
2088
|
{ value: "anthropic", label: "Anthropic" },
|
|
1947
2089
|
{ value: "groq", label: "Groq" },
|
|
1948
2090
|
{ value: "google", label: "Google" },
|
|
1949
|
-
{ value: "cerebras", label: "Cerebras" }
|
|
2091
|
+
{ value: "cerebras", label: "Cerebras" },
|
|
2092
|
+
{ value: "mistral", label: "Mistral" }
|
|
1950
2093
|
]
|
|
1951
2094
|
}),
|
|
1952
2095
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
1953
|
-
const keyChoice = await
|
|
2096
|
+
const keyChoice = await ve({
|
|
1954
2097
|
message: `Enter your ${llmProvider} API key?`,
|
|
1955
2098
|
options: [
|
|
1956
2099
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1959,22 +2102,18 @@ var interactivePrompt = async () => {
|
|
|
1959
2102
|
initialValue: "skip"
|
|
1960
2103
|
});
|
|
1961
2104
|
if (keyChoice === "enter") {
|
|
1962
|
-
return
|
|
2105
|
+
return he({
|
|
1963
2106
|
message: "Enter your API key:",
|
|
1964
2107
|
placeholder: "sk-..."
|
|
1965
2108
|
});
|
|
1966
2109
|
}
|
|
1967
2110
|
return void 0;
|
|
1968
2111
|
},
|
|
1969
|
-
addExample: () => ce({
|
|
1970
|
-
message: "Add example",
|
|
1971
|
-
initialValue: false
|
|
1972
|
-
}),
|
|
1973
2112
|
configureEditorWithDocsMCP: async () => {
|
|
1974
2113
|
const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
|
|
1975
2114
|
const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
|
|
1976
2115
|
const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
|
|
1977
|
-
const editor = await
|
|
2116
|
+
const editor = await ve({
|
|
1978
2117
|
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1979
2118
|
options: [
|
|
1980
2119
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -2002,24 +2141,24 @@ var interactivePrompt = async () => {
|
|
|
2002
2141
|
});
|
|
2003
2142
|
if (editor === `skip`) return void 0;
|
|
2004
2143
|
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
2005
|
-
|
|
2144
|
+
M.message(`
|
|
2006
2145
|
Windsurf is already installed, skipping.`);
|
|
2007
2146
|
return void 0;
|
|
2008
2147
|
}
|
|
2009
2148
|
if (editor === `vscode` && vscodeIsAlreadyInstalled) {
|
|
2010
|
-
|
|
2149
|
+
M.message(`
|
|
2011
2150
|
VSCode is already installed, skipping.`);
|
|
2012
2151
|
return void 0;
|
|
2013
2152
|
}
|
|
2014
2153
|
if (editor === `cursor`) {
|
|
2015
|
-
|
|
2154
|
+
M.message(
|
|
2016
2155
|
`
|
|
2017
2156
|
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
2018
2157
|
`
|
|
2019
2158
|
);
|
|
2020
2159
|
}
|
|
2021
2160
|
if (editor === `cursor-global`) {
|
|
2022
|
-
const confirm2 = await
|
|
2161
|
+
const confirm2 = await ve({
|
|
2023
2162
|
message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
|
|
2024
2163
|
options: [
|
|
2025
2164
|
{ value: "yes", label: "Yes, I understand" },
|
|
@@ -2031,7 +2170,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
|
|
|
2031
2170
|
}
|
|
2032
2171
|
}
|
|
2033
2172
|
if (editor === `windsurf`) {
|
|
2034
|
-
const confirm2 = await
|
|
2173
|
+
const confirm2 = await ve({
|
|
2035
2174
|
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
2036
2175
|
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
2037
2176
|
options: [
|
|
@@ -2048,17 +2187,15 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
|
|
|
2048
2187
|
},
|
|
2049
2188
|
{
|
|
2050
2189
|
onCancel: () => {
|
|
2051
|
-
|
|
2190
|
+
xe("Operation cancelled.");
|
|
2052
2191
|
process.exit(0);
|
|
2053
2192
|
}
|
|
2054
2193
|
}
|
|
2055
2194
|
);
|
|
2056
|
-
|
|
2057
|
-
const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
|
|
2058
|
-
return { ...rest, components: mastraComponents };
|
|
2195
|
+
return mastraProject;
|
|
2059
2196
|
};
|
|
2060
|
-
var s =
|
|
2061
|
-
var
|
|
2197
|
+
var s = Y();
|
|
2198
|
+
var exec3 = util.promisify(child_process.exec);
|
|
2062
2199
|
var init = async ({
|
|
2063
2200
|
directory,
|
|
2064
2201
|
addExample = false,
|
|
@@ -2107,10 +2244,11 @@ var init = async ({
|
|
|
2107
2244
|
}
|
|
2108
2245
|
const key = await getAPIKey(llmProvider || "openai");
|
|
2109
2246
|
const aiSdkPackage = getAISDKPackage(llmProvider);
|
|
2247
|
+
const aiSdkPackageVersion = getAISDKPackageVersion(llmProvider);
|
|
2110
2248
|
const depsService = new DepsService();
|
|
2111
2249
|
const pm = depsService.packageManager;
|
|
2112
|
-
const installCommand =
|
|
2113
|
-
await
|
|
2250
|
+
const installCommand = getPackageManagerAddCommand(pm);
|
|
2251
|
+
await exec3(`${pm} ${installCommand} ${aiSdkPackage}@${aiSdkPackageVersion}`);
|
|
2114
2252
|
if (configureEditorWithDocsMCP) {
|
|
2115
2253
|
await installMastraDocsMCPServer({
|
|
2116
2254
|
editor: configureEditorWithDocsMCP,
|
|
@@ -2119,14 +2257,14 @@ var init = async ({
|
|
|
2119
2257
|
}
|
|
2120
2258
|
s.stop();
|
|
2121
2259
|
if (!llmApiKey) {
|
|
2122
|
-
|
|
2260
|
+
Me(`
|
|
2123
2261
|
${color2.green("Mastra initialized successfully!")}
|
|
2124
2262
|
|
|
2125
2263
|
Add your ${color2.cyan(key)} as an environment variable
|
|
2126
2264
|
in your ${color2.cyan(".env")} file
|
|
2127
2265
|
`);
|
|
2128
2266
|
} else {
|
|
2129
|
-
|
|
2267
|
+
Me(`
|
|
2130
2268
|
${color2.green("Mastra initialized successfully!")}
|
|
2131
2269
|
`);
|
|
2132
2270
|
}
|
|
@@ -2137,10 +2275,10 @@ var init = async ({
|
|
|
2137
2275
|
return { success: false };
|
|
2138
2276
|
}
|
|
2139
2277
|
};
|
|
2140
|
-
var
|
|
2278
|
+
var exec4 = util.promisify(child_process.exec);
|
|
2141
2279
|
var execWithTimeout = async (command, timeoutMs) => {
|
|
2142
2280
|
try {
|
|
2143
|
-
const promise =
|
|
2281
|
+
const promise = exec4(command, { killSignal: "SIGTERM" });
|
|
2144
2282
|
if (!timeoutMs) {
|
|
2145
2283
|
return await promise;
|
|
2146
2284
|
}
|
|
@@ -2160,23 +2298,29 @@ var execWithTimeout = async (command, timeoutMs) => {
|
|
|
2160
2298
|
throw error;
|
|
2161
2299
|
}
|
|
2162
2300
|
} catch (error) {
|
|
2163
|
-
console.error(error);
|
|
2164
2301
|
throw error;
|
|
2165
2302
|
}
|
|
2166
2303
|
};
|
|
2167
2304
|
async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
|
|
2168
|
-
let installCommand =
|
|
2305
|
+
let installCommand = getPackageManagerAddCommand(pm);
|
|
2169
2306
|
if (isDev) {
|
|
2170
|
-
installCommand = `${installCommand}
|
|
2307
|
+
installCommand = `${installCommand} -D`;
|
|
2171
2308
|
}
|
|
2172
2309
|
try {
|
|
2173
2310
|
await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
|
|
2174
2311
|
} catch (err) {
|
|
2175
|
-
console.log("err", err);
|
|
2176
2312
|
if (versionTag === "@latest") {
|
|
2177
|
-
throw
|
|
2313
|
+
throw new Error(
|
|
2314
|
+
`Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
|
|
2315
|
+
);
|
|
2316
|
+
}
|
|
2317
|
+
try {
|
|
2318
|
+
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
2319
|
+
} catch (fallbackErr) {
|
|
2320
|
+
throw new Error(
|
|
2321
|
+
`Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
|
|
2322
|
+
);
|
|
2178
2323
|
}
|
|
2179
|
-
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
2180
2324
|
}
|
|
2181
2325
|
}
|
|
2182
2326
|
var createMastraProject = async ({
|
|
@@ -2184,47 +2328,55 @@ var createMastraProject = async ({
|
|
|
2184
2328
|
createVersionTag,
|
|
2185
2329
|
timeout
|
|
2186
2330
|
}) => {
|
|
2187
|
-
|
|
2188
|
-
const projectName = name ?? await
|
|
2331
|
+
Ie(color2.inverse(" Mastra Create "));
|
|
2332
|
+
const projectName = name ?? await he({
|
|
2189
2333
|
message: "What do you want to name your project?",
|
|
2190
2334
|
placeholder: "my-mastra-app",
|
|
2191
2335
|
defaultValue: "my-mastra-app"
|
|
2192
2336
|
});
|
|
2193
|
-
if (
|
|
2194
|
-
|
|
2337
|
+
if (pD(projectName)) {
|
|
2338
|
+
xe("Operation cancelled");
|
|
2195
2339
|
process.exit(0);
|
|
2196
2340
|
}
|
|
2197
|
-
const s2 =
|
|
2198
|
-
s2.start("Creating project");
|
|
2341
|
+
const s2 = Y();
|
|
2199
2342
|
try {
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2343
|
+
s2.start("Creating project");
|
|
2344
|
+
try {
|
|
2345
|
+
await fs5.mkdir(projectName);
|
|
2346
|
+
} catch (error) {
|
|
2347
|
+
if (error instanceof Error && "code" in error && error.code === "EEXIST") {
|
|
2348
|
+
s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
|
|
2349
|
+
process.exit(1);
|
|
2350
|
+
}
|
|
2351
|
+
throw new Error(
|
|
2352
|
+
`Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2205
2353
|
);
|
|
2206
|
-
process.exit(1);
|
|
2207
2354
|
}
|
|
2208
|
-
|
|
2209
|
-
|
|
2210
|
-
|
|
2211
|
-
|
|
2212
|
-
|
|
2213
|
-
|
|
2214
|
-
|
|
2215
|
-
|
|
2216
|
-
|
|
2217
|
-
|
|
2218
|
-
|
|
2219
|
-
|
|
2220
|
-
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2355
|
+
process.chdir(projectName);
|
|
2356
|
+
const pm = getPackageManager();
|
|
2357
|
+
const installCommand = getPackageManagerAddCommand(pm);
|
|
2358
|
+
s2.message("Initializing project structure");
|
|
2359
|
+
try {
|
|
2360
|
+
await exec4(`npm init -y`);
|
|
2361
|
+
await exec4(`npm pkg set type="module"`);
|
|
2362
|
+
await exec4(`npm pkg set engines.node=">=20.9.0"`);
|
|
2363
|
+
const depsService = new DepsService();
|
|
2364
|
+
await depsService.addScriptsToPackageJson({
|
|
2365
|
+
dev: "mastra dev",
|
|
2366
|
+
build: "mastra build",
|
|
2367
|
+
start: "mastra start"
|
|
2368
|
+
});
|
|
2369
|
+
} catch (error) {
|
|
2370
|
+
throw new Error(
|
|
2371
|
+
`Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2372
|
+
);
|
|
2373
|
+
}
|
|
2374
|
+
s2.stop("Project structure created");
|
|
2375
|
+
s2.start(`Installing ${pm} dependencies`);
|
|
2376
|
+
try {
|
|
2377
|
+
await exec4(`${pm} ${installCommand} zod@^3`);
|
|
2378
|
+
await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
|
|
2379
|
+
await exec4(`echo '{
|
|
2228
2380
|
"compilerOptions": {
|
|
2229
2381
|
"target": "ES2022",
|
|
2230
2382
|
"module": "ES2022",
|
|
@@ -2240,47 +2392,75 @@ var createMastraProject = async ({
|
|
|
2240
2392
|
"src/**/*"
|
|
2241
2393
|
]
|
|
2242
2394
|
}' > tsconfig.json`);
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
|
|
2255
|
-
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2260
|
-
|
|
2261
|
-
|
|
2262
|
-
|
|
2263
|
-
|
|
2264
|
-
|
|
2265
|
-
|
|
2395
|
+
} catch (error) {
|
|
2396
|
+
throw new Error(
|
|
2397
|
+
`Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2398
|
+
);
|
|
2399
|
+
}
|
|
2400
|
+
s2.stop(`${pm} dependencies installed`);
|
|
2401
|
+
s2.start("Installing mastra");
|
|
2402
|
+
const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
|
|
2403
|
+
try {
|
|
2404
|
+
await installMastraDependency(pm, "mastra", versionTag, true, timeout);
|
|
2405
|
+
} catch (error) {
|
|
2406
|
+
throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2407
|
+
}
|
|
2408
|
+
s2.stop("mastra installed");
|
|
2409
|
+
s2.start("Installing dependencies");
|
|
2410
|
+
try {
|
|
2411
|
+
await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
|
|
2412
|
+
await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
|
|
2413
|
+
await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
|
|
2414
|
+
} catch (error) {
|
|
2415
|
+
throw new Error(
|
|
2416
|
+
`Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2417
|
+
);
|
|
2418
|
+
}
|
|
2419
|
+
s2.stop("Mastra dependencies installed");
|
|
2420
|
+
s2.start("Adding .gitignore");
|
|
2421
|
+
try {
|
|
2422
|
+
await exec4(`echo output.txt >> .gitignore`);
|
|
2423
|
+
await exec4(`echo node_modules >> .gitignore`);
|
|
2424
|
+
await exec4(`echo dist >> .gitignore`);
|
|
2425
|
+
await exec4(`echo .mastra >> .gitignore`);
|
|
2426
|
+
await exec4(`echo .env.development >> .gitignore`);
|
|
2427
|
+
await exec4(`echo .env >> .gitignore`);
|
|
2428
|
+
await exec4(`echo *.db >> .gitignore`);
|
|
2429
|
+
await exec4(`echo *.db-* >> .gitignore`);
|
|
2430
|
+
} catch (error) {
|
|
2431
|
+
throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2432
|
+
}
|
|
2433
|
+
s2.stop(".gitignore added");
|
|
2434
|
+
Se("Project created successfully");
|
|
2435
|
+
console.info("");
|
|
2436
|
+
return { projectName };
|
|
2437
|
+
} catch (error) {
|
|
2438
|
+
s2.stop();
|
|
2439
|
+
const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
2440
|
+
xe(`Project creation failed: ${errorMessage}`);
|
|
2441
|
+
process.exit(1);
|
|
2442
|
+
}
|
|
2266
2443
|
};
|
|
2267
2444
|
var create = async (args2) => {
|
|
2445
|
+
if (args2.template !== void 0) {
|
|
2446
|
+
await createFromTemplate({ ...args2, injectedAnalytics: args2.analytics });
|
|
2447
|
+
return;
|
|
2448
|
+
}
|
|
2268
2449
|
const { projectName } = await createMastraProject({
|
|
2269
2450
|
projectName: args2?.projectName,
|
|
2270
2451
|
createVersionTag: args2?.createVersionTag,
|
|
2271
2452
|
timeout: args2?.timeout
|
|
2272
2453
|
});
|
|
2273
2454
|
const directory = args2.directory || "src/";
|
|
2274
|
-
console.log("args", args2);
|
|
2275
2455
|
if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
|
|
2276
|
-
console.log("got to interactive prompt");
|
|
2277
2456
|
const result = await interactivePrompt();
|
|
2278
2457
|
await init({
|
|
2279
2458
|
...result,
|
|
2280
|
-
llmApiKey: result?.llmApiKey
|
|
2459
|
+
llmApiKey: result?.llmApiKey,
|
|
2460
|
+
components: ["agents", "tools", "workflows"],
|
|
2461
|
+
addExample: true
|
|
2281
2462
|
});
|
|
2282
2463
|
postCreate({ projectName });
|
|
2283
|
-
console.log("done with interactive prompt");
|
|
2284
2464
|
return;
|
|
2285
2465
|
}
|
|
2286
2466
|
const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
|
|
@@ -2296,25 +2476,179 @@ var create = async (args2) => {
|
|
|
2296
2476
|
};
|
|
2297
2477
|
var postCreate = ({ projectName }) => {
|
|
2298
2478
|
const packageManager = getPackageManager();
|
|
2299
|
-
|
|
2479
|
+
Se(`
|
|
2300
2480
|
${color2.green("To start your project:")}
|
|
2301
2481
|
|
|
2302
2482
|
${color2.cyan("cd")} ${projectName}
|
|
2303
2483
|
${color2.cyan(`${packageManager} run dev`)}
|
|
2304
2484
|
`);
|
|
2305
2485
|
};
|
|
2486
|
+
function isGitHubUrl(url) {
|
|
2487
|
+
try {
|
|
2488
|
+
const parsedUrl = new URL(url);
|
|
2489
|
+
return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
|
|
2490
|
+
} catch {
|
|
2491
|
+
return false;
|
|
2492
|
+
}
|
|
2493
|
+
}
|
|
2494
|
+
async function validateGitHubProject(githubUrl) {
|
|
2495
|
+
const errors = [];
|
|
2496
|
+
try {
|
|
2497
|
+
const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
|
|
2498
|
+
const owner = urlParts[0];
|
|
2499
|
+
const repo = urlParts[1]?.replace(".git", "");
|
|
2500
|
+
if (!owner || !repo) {
|
|
2501
|
+
throw new Error("Invalid GitHub URL format");
|
|
2502
|
+
}
|
|
2503
|
+
const branches = ["main", "master"];
|
|
2504
|
+
let packageJsonContent = null;
|
|
2505
|
+
let indexContent = null;
|
|
2506
|
+
for (const branch of branches) {
|
|
2507
|
+
try {
|
|
2508
|
+
const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
|
|
2509
|
+
const packageJsonResponse = await fetch(packageJsonUrl);
|
|
2510
|
+
if (packageJsonResponse.ok) {
|
|
2511
|
+
packageJsonContent = await packageJsonResponse.text();
|
|
2512
|
+
const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
|
|
2513
|
+
const indexResponse = await fetch(indexUrl);
|
|
2514
|
+
if (indexResponse.ok) {
|
|
2515
|
+
indexContent = await indexResponse.text();
|
|
2516
|
+
}
|
|
2517
|
+
break;
|
|
2518
|
+
}
|
|
2519
|
+
} catch {
|
|
2520
|
+
}
|
|
2521
|
+
}
|
|
2522
|
+
if (!packageJsonContent) {
|
|
2523
|
+
errors.push("Could not fetch package.json from repository");
|
|
2524
|
+
return { isValid: false, errors };
|
|
2525
|
+
}
|
|
2526
|
+
try {
|
|
2527
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
2528
|
+
const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
|
|
2529
|
+
if (!hasMastraCore) {
|
|
2530
|
+
errors.push("Missing @mastra/core dependency in package.json");
|
|
2531
|
+
}
|
|
2532
|
+
} catch {
|
|
2533
|
+
errors.push("Invalid package.json format");
|
|
2534
|
+
}
|
|
2535
|
+
if (!indexContent) {
|
|
2536
|
+
errors.push("Missing src/mastra/index.ts file");
|
|
2537
|
+
} else {
|
|
2538
|
+
const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
|
|
2539
|
+
if (!hasMastraExport) {
|
|
2540
|
+
errors.push("src/mastra/index.ts does not export a Mastra instance");
|
|
2541
|
+
}
|
|
2542
|
+
}
|
|
2543
|
+
return { isValid: errors.length === 0, errors };
|
|
2544
|
+
} catch (error) {
|
|
2545
|
+
errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2546
|
+
return { isValid: false, errors };
|
|
2547
|
+
}
|
|
2548
|
+
}
|
|
2549
|
+
async function createFromGitHubUrl(url) {
|
|
2550
|
+
const urlParts = new URL(url).pathname.split("/").filter(Boolean);
|
|
2551
|
+
const owner = urlParts[0] || "unknown";
|
|
2552
|
+
const repo = urlParts[1] || "unknown";
|
|
2553
|
+
return {
|
|
2554
|
+
githubUrl: url,
|
|
2555
|
+
title: `${owner}/${repo}`,
|
|
2556
|
+
slug: repo,
|
|
2557
|
+
agents: [],
|
|
2558
|
+
mcp: [],
|
|
2559
|
+
tools: [],
|
|
2560
|
+
networks: [],
|
|
2561
|
+
workflows: []
|
|
2562
|
+
};
|
|
2563
|
+
}
|
|
2564
|
+
async function createFromTemplate(args2) {
|
|
2565
|
+
let selectedTemplate;
|
|
2566
|
+
if (args2.template === true) {
|
|
2567
|
+
const templates = await loadTemplates();
|
|
2568
|
+
const selected = await selectTemplate(templates);
|
|
2569
|
+
if (!selected) {
|
|
2570
|
+
M.info("No template selected. Exiting.");
|
|
2571
|
+
return;
|
|
2572
|
+
}
|
|
2573
|
+
selectedTemplate = selected;
|
|
2574
|
+
} else if (args2.template && typeof args2.template === "string") {
|
|
2575
|
+
if (isGitHubUrl(args2.template)) {
|
|
2576
|
+
const spinner5 = Y();
|
|
2577
|
+
spinner5.start("Validating GitHub repository...");
|
|
2578
|
+
const validation = await validateGitHubProject(args2.template);
|
|
2579
|
+
if (!validation.isValid) {
|
|
2580
|
+
spinner5.stop("Validation failed");
|
|
2581
|
+
M.error("This does not appear to be a valid Mastra project:");
|
|
2582
|
+
validation.errors.forEach((error) => M.error(` - ${error}`));
|
|
2583
|
+
throw new Error("Invalid Mastra project");
|
|
2584
|
+
}
|
|
2585
|
+
spinner5.stop("Valid Mastra project \u2713");
|
|
2586
|
+
selectedTemplate = await createFromGitHubUrl(args2.template);
|
|
2587
|
+
} else {
|
|
2588
|
+
const templates = await loadTemplates();
|
|
2589
|
+
const found = findTemplateByName(templates, args2.template);
|
|
2590
|
+
if (!found) {
|
|
2591
|
+
M.error(`Template "${args2.template}" not found. Available templates:`);
|
|
2592
|
+
templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
|
|
2593
|
+
throw new Error(`Template "${args2.template}" not found`);
|
|
2594
|
+
}
|
|
2595
|
+
selectedTemplate = found;
|
|
2596
|
+
}
|
|
2597
|
+
}
|
|
2598
|
+
if (!selectedTemplate) {
|
|
2599
|
+
throw new Error("No template selected");
|
|
2600
|
+
}
|
|
2601
|
+
let projectName = args2.projectName;
|
|
2602
|
+
if (!projectName) {
|
|
2603
|
+
const defaultName = getDefaultProjectName(selectedTemplate);
|
|
2604
|
+
const response = await he({
|
|
2605
|
+
message: "What is your project name?",
|
|
2606
|
+
defaultValue: defaultName,
|
|
2607
|
+
placeholder: defaultName
|
|
2608
|
+
});
|
|
2609
|
+
if (pD(response)) {
|
|
2610
|
+
M.info("Project creation cancelled.");
|
|
2611
|
+
return;
|
|
2612
|
+
}
|
|
2613
|
+
projectName = response;
|
|
2614
|
+
}
|
|
2615
|
+
try {
|
|
2616
|
+
const analytics = args2.injectedAnalytics || getAnalytics();
|
|
2617
|
+
if (analytics) {
|
|
2618
|
+
analytics.trackEvent("cli_template_used", {
|
|
2619
|
+
template_slug: selectedTemplate.slug,
|
|
2620
|
+
template_title: selectedTemplate.title
|
|
2621
|
+
});
|
|
2622
|
+
}
|
|
2623
|
+
const projectPath = await cloneTemplate({
|
|
2624
|
+
template: selectedTemplate,
|
|
2625
|
+
projectName
|
|
2626
|
+
});
|
|
2627
|
+
await installDependencies(projectPath);
|
|
2628
|
+
Me(`
|
|
2629
|
+
${color2.green("Mastra template installed!")}
|
|
2630
|
+
|
|
2631
|
+
Add the necessary environment
|
|
2632
|
+
variables in your ${color2.cyan(".env")} file
|
|
2633
|
+
`);
|
|
2634
|
+
postCreate({ projectName });
|
|
2635
|
+
} catch (error) {
|
|
2636
|
+
M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2637
|
+
throw error;
|
|
2638
|
+
}
|
|
2639
|
+
}
|
|
2306
2640
|
|
|
2307
2641
|
async function getPackageVersion() {
|
|
2308
2642
|
const __filename = fileURLToPath(import.meta.url);
|
|
2309
2643
|
const __dirname = dirname(__filename);
|
|
2310
|
-
const pkgJsonPath =
|
|
2311
|
-
const content = await fsExtra.readJSON(pkgJsonPath);
|
|
2644
|
+
const pkgJsonPath = path3.join(__dirname, "..", "package.json");
|
|
2645
|
+
const content = await fsExtra$1.readJSON(pkgJsonPath);
|
|
2312
2646
|
return content.version;
|
|
2313
2647
|
}
|
|
2314
2648
|
async function getCreateVersionTag() {
|
|
2315
2649
|
try {
|
|
2316
2650
|
const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
|
|
2317
|
-
const json = await fsExtra.readJSON(pkgPath);
|
|
2651
|
+
const json = await fsExtra$1.readJSON(pkgPath);
|
|
2318
2652
|
const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
|
|
2319
2653
|
const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
|
|
2320
2654
|
const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
|
|
@@ -2338,14 +2672,17 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
2338
2672
|
analytics.trackCommand({
|
|
2339
2673
|
command: "version"
|
|
2340
2674
|
});
|
|
2341
|
-
console.
|
|
2675
|
+
console.info(`create-mastra ${version}`);
|
|
2342
2676
|
} catch {
|
|
2343
2677
|
}
|
|
2344
2678
|
});
|
|
2345
2679
|
program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
|
|
2346
2680
|
"-p, --project-name <string>",
|
|
2347
2681
|
"Project name that will be used in package.json and as the project directory name."
|
|
2348
|
-
).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)").
|
|
2682
|
+
).option("--default", "Quick start with defaults(src, OpenAI, examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode)").option(
|
|
2683
|
+
"--template [template-name]",
|
|
2684
|
+
"Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
|
|
2685
|
+
).action(async (projectNameArg, args) => {
|
|
2349
2686
|
const projectName = projectNameArg || args.projectName;
|
|
2350
2687
|
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
2351
2688
|
if (args.default) {
|
|
@@ -2356,7 +2693,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2356
2693
|
createVersionTag,
|
|
2357
2694
|
timeout,
|
|
2358
2695
|
mcpServer: args.mcp,
|
|
2359
|
-
directory: "src/"
|
|
2696
|
+
directory: "src/",
|
|
2697
|
+
template: args.template,
|
|
2698
|
+
analytics
|
|
2360
2699
|
});
|
|
2361
2700
|
return;
|
|
2362
2701
|
}
|
|
@@ -2369,7 +2708,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2369
2708
|
timeout,
|
|
2370
2709
|
projectName,
|
|
2371
2710
|
directory: args.dir,
|
|
2372
|
-
mcpServer: args.mcp
|
|
2711
|
+
mcpServer: args.mcp,
|
|
2712
|
+
template: args.template,
|
|
2713
|
+
analytics
|
|
2373
2714
|
});
|
|
2374
2715
|
});
|
|
2375
2716
|
program.parse(process.argv);
|