create-mastra 0.0.0-course-20250527170450 → 0.0.0-declaration-maps-20250729202623
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/LICENSE.md +11 -42
- package/dist/index.js +705 -354
- package/dist/index.js.map +1 -1
- package/dist/starter-files/config.d.ts +26 -0
- package/dist/starter-files/config.d.ts.map +1 -0
- package/dist/starter-files/tools.d.ts +79 -0
- package/dist/starter-files/tools.d.ts.map +1 -0
- package/dist/templates/dev.entry.d.ts +2 -0
- package/dist/templates/dev.entry.d.ts.map +1 -0
- package/dist/templates/dev.entry.js +7 -7
- package/package.json +17 -17
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 fs from 'node:fs/promises';
|
|
14
16
|
import child_process from 'node:child_process';
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
+
import tty from 'node:tty';
|
|
18
|
+
import pino from 'pino';
|
|
19
|
+
import pretty from 'pino-pretty';
|
|
17
20
|
import { execa } from 'execa';
|
|
18
21
|
import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
|
|
19
22
|
import prettier from 'prettier';
|
|
20
|
-
import pino from 'pino';
|
|
21
|
-
import pretty from 'pino-pretty';
|
|
22
23
|
import fsExtra 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') + '"';
|
|
@@ -540,7 +547,7 @@ function requireParse () {
|
|
|
540
547
|
return matches.map(function (match) {
|
|
541
548
|
var s = match[0];
|
|
542
549
|
if (!s || commented) {
|
|
543
|
-
return void
|
|
550
|
+
return void undefined;
|
|
544
551
|
}
|
|
545
552
|
if (controlRE.test(s)) {
|
|
546
553
|
return { op: s };
|
|
@@ -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
|
|
|
@@ -1079,17 +1088,40 @@ var MastraLogger = class {
|
|
|
1079
1088
|
getTransports() {
|
|
1080
1089
|
return this.transports;
|
|
1081
1090
|
}
|
|
1082
|
-
|
|
1091
|
+
trackException(_error) {
|
|
1092
|
+
}
|
|
1093
|
+
async getLogs(transportId, params) {
|
|
1083
1094
|
if (!transportId || !this.transports.has(transportId)) {
|
|
1084
|
-
return [];
|
|
1095
|
+
return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
|
|
1085
1096
|
}
|
|
1086
|
-
return this.transports.get(transportId).getLogs() ??
|
|
1097
|
+
return this.transports.get(transportId).getLogs(params) ?? {
|
|
1098
|
+
logs: [],
|
|
1099
|
+
total: 0,
|
|
1100
|
+
page: params?.page ?? 1,
|
|
1101
|
+
perPage: params?.perPage ?? 100,
|
|
1102
|
+
hasMore: false
|
|
1103
|
+
};
|
|
1087
1104
|
}
|
|
1088
|
-
async getLogsByRunId({
|
|
1105
|
+
async getLogsByRunId({
|
|
1106
|
+
transportId,
|
|
1107
|
+
runId,
|
|
1108
|
+
fromDate,
|
|
1109
|
+
toDate,
|
|
1110
|
+
logLevel,
|
|
1111
|
+
filters,
|
|
1112
|
+
page,
|
|
1113
|
+
perPage
|
|
1114
|
+
}) {
|
|
1089
1115
|
if (!transportId || !this.transports.has(transportId) || !runId) {
|
|
1090
|
-
return [];
|
|
1116
|
+
return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
|
|
1091
1117
|
}
|
|
1092
|
-
return this.transports.get(transportId).getLogsByRunId({ runId }) ??
|
|
1118
|
+
return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
|
|
1119
|
+
logs: [],
|
|
1120
|
+
total: 0,
|
|
1121
|
+
page: page ?? 1,
|
|
1122
|
+
perPage: perPage ?? 100,
|
|
1123
|
+
hasMore: false
|
|
1124
|
+
};
|
|
1093
1125
|
}
|
|
1094
1126
|
};
|
|
1095
1127
|
|
|
@@ -1113,9 +1145,7 @@ var PinoLogger = class extends MastraLogger {
|
|
|
1113
1145
|
{
|
|
1114
1146
|
name: options.name || "app",
|
|
1115
1147
|
level: options.level || LogLevel.INFO,
|
|
1116
|
-
formatters:
|
|
1117
|
-
level: (label) => ({ level: label })
|
|
1118
|
-
}
|
|
1148
|
+
formatters: options.formatters
|
|
1119
1149
|
},
|
|
1120
1150
|
options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
|
|
1121
1151
|
...transportsAry.map(([, transport]) => ({
|
|
@@ -1143,6 +1173,195 @@ var PinoLogger = class extends MastraLogger {
|
|
|
1143
1173
|
}
|
|
1144
1174
|
};
|
|
1145
1175
|
|
|
1176
|
+
function getPackageManager() {
|
|
1177
|
+
const userAgent = process.env.npm_config_user_agent || "";
|
|
1178
|
+
const execPath = process.env.npm_execpath || "";
|
|
1179
|
+
if (userAgent.includes("yarn")) {
|
|
1180
|
+
return "yarn";
|
|
1181
|
+
}
|
|
1182
|
+
if (userAgent.includes("pnpm")) {
|
|
1183
|
+
return "pnpm";
|
|
1184
|
+
}
|
|
1185
|
+
if (userAgent.includes("npm")) {
|
|
1186
|
+
return "npm";
|
|
1187
|
+
}
|
|
1188
|
+
if (execPath.includes("yarn")) {
|
|
1189
|
+
return "yarn";
|
|
1190
|
+
}
|
|
1191
|
+
if (execPath.includes("pnpm")) {
|
|
1192
|
+
return "pnpm";
|
|
1193
|
+
}
|
|
1194
|
+
if (execPath.includes("npm")) {
|
|
1195
|
+
return "npm";
|
|
1196
|
+
}
|
|
1197
|
+
return "npm";
|
|
1198
|
+
}
|
|
1199
|
+
function getPackageManagerInstallCommand(pm) {
|
|
1200
|
+
switch (pm) {
|
|
1201
|
+
case "npm":
|
|
1202
|
+
return "install";
|
|
1203
|
+
case "yarn":
|
|
1204
|
+
return "add";
|
|
1205
|
+
case "pnpm":
|
|
1206
|
+
return "add";
|
|
1207
|
+
default:
|
|
1208
|
+
return "install";
|
|
1209
|
+
}
|
|
1210
|
+
}
|
|
1211
|
+
var logger = new PinoLogger({
|
|
1212
|
+
name: "Mastra CLI",
|
|
1213
|
+
level: "info"
|
|
1214
|
+
});
|
|
1215
|
+
var exec = util.promisify(child_process.exec);
|
|
1216
|
+
async function cloneTemplate(options) {
|
|
1217
|
+
const { template, projectName, targetDir } = options;
|
|
1218
|
+
const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
|
|
1219
|
+
const spinner5 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
|
|
1220
|
+
try {
|
|
1221
|
+
if (await directoryExists(projectPath)) {
|
|
1222
|
+
spinner5.error(`Directory ${projectName} already exists`);
|
|
1223
|
+
throw new Error(`Directory ${projectName} already exists`);
|
|
1224
|
+
}
|
|
1225
|
+
await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
|
|
1226
|
+
await updatePackageJson(projectPath, projectName);
|
|
1227
|
+
const envExamplePath = path3.join(projectPath, ".env.example");
|
|
1228
|
+
if (await fileExists(envExamplePath)) {
|
|
1229
|
+
await fs.copyFile(envExamplePath, path3.join(projectPath, ".env"));
|
|
1230
|
+
}
|
|
1231
|
+
spinner5.success(`Template "${template.title}" cloned successfully to ${projectName}`);
|
|
1232
|
+
return projectPath;
|
|
1233
|
+
} catch (error) {
|
|
1234
|
+
spinner5.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
1235
|
+
throw error;
|
|
1236
|
+
}
|
|
1237
|
+
}
|
|
1238
|
+
async function directoryExists(dirPath) {
|
|
1239
|
+
try {
|
|
1240
|
+
const stat = await fs.stat(dirPath);
|
|
1241
|
+
return stat.isDirectory();
|
|
1242
|
+
} catch {
|
|
1243
|
+
return false;
|
|
1244
|
+
}
|
|
1245
|
+
}
|
|
1246
|
+
async function fileExists(filePath) {
|
|
1247
|
+
try {
|
|
1248
|
+
const stat = await fs.stat(filePath);
|
|
1249
|
+
return stat.isFile();
|
|
1250
|
+
} catch {
|
|
1251
|
+
return false;
|
|
1252
|
+
}
|
|
1253
|
+
}
|
|
1254
|
+
async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
|
|
1255
|
+
await fs.mkdir(targetPath, { recursive: true });
|
|
1256
|
+
try {
|
|
1257
|
+
const degitRepo = repoUrl.replace("https://github.com/", "");
|
|
1258
|
+
const degitCommand = shellQuote.quote(["npx", "degit", degitRepo, targetPath]);
|
|
1259
|
+
await exec(degitCommand, {
|
|
1260
|
+
cwd: process.cwd()
|
|
1261
|
+
});
|
|
1262
|
+
} catch {
|
|
1263
|
+
try {
|
|
1264
|
+
const gitCommand = shellQuote.quote(["git", "clone", repoUrl, targetPath]);
|
|
1265
|
+
await exec(gitCommand, {
|
|
1266
|
+
cwd: process.cwd()
|
|
1267
|
+
});
|
|
1268
|
+
const gitDir = path3.join(targetPath, ".git");
|
|
1269
|
+
if (await directoryExists(gitDir)) {
|
|
1270
|
+
await fs.rm(gitDir, { recursive: true, force: true });
|
|
1271
|
+
}
|
|
1272
|
+
} catch (gitError) {
|
|
1273
|
+
throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
|
|
1274
|
+
}
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
async function updatePackageJson(projectPath, projectName) {
|
|
1278
|
+
const packageJsonPath = path3.join(projectPath, "package.json");
|
|
1279
|
+
try {
|
|
1280
|
+
const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
|
|
1281
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
1282
|
+
packageJson.name = projectName;
|
|
1283
|
+
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
|
|
1284
|
+
} catch (error) {
|
|
1285
|
+
logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
1286
|
+
}
|
|
1287
|
+
}
|
|
1288
|
+
async function installDependencies(projectPath, packageManager) {
|
|
1289
|
+
const spinner5 = yoctoSpinner({ text: "Installing dependencies..." }).start();
|
|
1290
|
+
try {
|
|
1291
|
+
const pm = packageManager || getPackageManager();
|
|
1292
|
+
const installCommand = shellQuote.quote([pm, "install"]);
|
|
1293
|
+
await exec(installCommand, {
|
|
1294
|
+
cwd: projectPath
|
|
1295
|
+
});
|
|
1296
|
+
spinner5.success("Dependencies installed successfully");
|
|
1297
|
+
} catch (error) {
|
|
1298
|
+
spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
1299
|
+
throw error;
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1302
|
+
var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
|
|
1303
|
+
async function loadTemplates() {
|
|
1304
|
+
try {
|
|
1305
|
+
const response = await fetch(TEMPLATES_API_URL);
|
|
1306
|
+
if (!response.ok) {
|
|
1307
|
+
throw new Error(`Failed to fetch templates: ${response.statusText}`);
|
|
1308
|
+
}
|
|
1309
|
+
const templates = await response.json();
|
|
1310
|
+
return templates;
|
|
1311
|
+
} catch (error) {
|
|
1312
|
+
console.error("Error loading templates:", error);
|
|
1313
|
+
throw new Error("Failed to load templates. Please check your internet connection and try again.");
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
function pluralize(count, singular, plural) {
|
|
1317
|
+
return count === 1 ? singular : plural || `${singular}s`;
|
|
1318
|
+
}
|
|
1319
|
+
async function selectTemplate(templates) {
|
|
1320
|
+
const choices = templates.map((template) => {
|
|
1321
|
+
const parts = [];
|
|
1322
|
+
if (template.agents?.length) {
|
|
1323
|
+
parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
|
|
1324
|
+
}
|
|
1325
|
+
if (template.tools?.length) {
|
|
1326
|
+
parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
|
|
1327
|
+
}
|
|
1328
|
+
if (template.workflows?.length) {
|
|
1329
|
+
parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
|
|
1330
|
+
}
|
|
1331
|
+
if (template.mcp?.length) {
|
|
1332
|
+
parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
|
|
1333
|
+
}
|
|
1334
|
+
if (template.networks?.length) {
|
|
1335
|
+
parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
|
|
1336
|
+
}
|
|
1337
|
+
return {
|
|
1338
|
+
value: template,
|
|
1339
|
+
label: template.title,
|
|
1340
|
+
hint: parts.join(", ") || "Template components"
|
|
1341
|
+
};
|
|
1342
|
+
});
|
|
1343
|
+
const selected = await ve({
|
|
1344
|
+
message: "Select a template:",
|
|
1345
|
+
options: choices
|
|
1346
|
+
});
|
|
1347
|
+
if (pD(selected)) {
|
|
1348
|
+
return null;
|
|
1349
|
+
}
|
|
1350
|
+
return selected;
|
|
1351
|
+
}
|
|
1352
|
+
function findTemplateByName(templates, templateName) {
|
|
1353
|
+
let template = templates.find((t) => t.slug === templateName);
|
|
1354
|
+
if (template) return template;
|
|
1355
|
+
const slugWithPrefix = `template-${templateName}`;
|
|
1356
|
+
template = templates.find((t) => t.slug === slugWithPrefix);
|
|
1357
|
+
if (template) return template;
|
|
1358
|
+
template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
|
|
1359
|
+
if (template) return template;
|
|
1360
|
+
return null;
|
|
1361
|
+
}
|
|
1362
|
+
function getDefaultProjectName(template) {
|
|
1363
|
+
return template.slug.replace(/^template-/, "");
|
|
1364
|
+
}
|
|
1146
1365
|
var DepsService = class {
|
|
1147
1366
|
packageManager;
|
|
1148
1367
|
constructor() {
|
|
@@ -1151,11 +1370,11 @@ var DepsService = class {
|
|
|
1151
1370
|
findLockFile(dir) {
|
|
1152
1371
|
const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
|
|
1153
1372
|
for (const file of lockFiles) {
|
|
1154
|
-
if (
|
|
1373
|
+
if (fs4__default__default.existsSync(path3.join(dir, file))) {
|
|
1155
1374
|
return file;
|
|
1156
1375
|
}
|
|
1157
1376
|
}
|
|
1158
|
-
const parentDir =
|
|
1377
|
+
const parentDir = path3.resolve(dir, "..");
|
|
1159
1378
|
if (parentDir !== dir) {
|
|
1160
1379
|
return this.findLockFile(parentDir);
|
|
1161
1380
|
}
|
|
@@ -1192,13 +1411,13 @@ var DepsService = class {
|
|
|
1192
1411
|
}
|
|
1193
1412
|
async checkDependencies(dependencies) {
|
|
1194
1413
|
try {
|
|
1195
|
-
const packageJsonPath =
|
|
1414
|
+
const packageJsonPath = path3.join(process.cwd(), "package.json");
|
|
1196
1415
|
try {
|
|
1197
|
-
await
|
|
1416
|
+
await fs.access(packageJsonPath);
|
|
1198
1417
|
} catch {
|
|
1199
1418
|
return "No package.json file found in the current directory";
|
|
1200
1419
|
}
|
|
1201
|
-
const packageJson = JSON.parse(await
|
|
1420
|
+
const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
|
|
1202
1421
|
for (const dependency of dependencies) {
|
|
1203
1422
|
if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
|
|
1204
1423
|
return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
|
|
@@ -1212,8 +1431,8 @@ var DepsService = class {
|
|
|
1212
1431
|
}
|
|
1213
1432
|
async getProjectName() {
|
|
1214
1433
|
try {
|
|
1215
|
-
const packageJsonPath =
|
|
1216
|
-
const packageJson = await
|
|
1434
|
+
const packageJsonPath = path3.join(process.cwd(), "package.json");
|
|
1435
|
+
const packageJson = await fs.readFile(packageJsonPath, "utf-8");
|
|
1217
1436
|
const pkg = JSON.parse(packageJson);
|
|
1218
1437
|
return pkg.name;
|
|
1219
1438
|
} catch (err) {
|
|
@@ -1223,55 +1442,20 @@ var DepsService = class {
|
|
|
1223
1442
|
async getPackageVersion() {
|
|
1224
1443
|
const __filename = fileURLToPath(import.meta.url);
|
|
1225
1444
|
const __dirname = dirname(__filename);
|
|
1226
|
-
const pkgJsonPath =
|
|
1445
|
+
const pkgJsonPath = path3.join(__dirname, "..", "package.json");
|
|
1227
1446
|
const content = await fsExtra3.readJSON(pkgJsonPath);
|
|
1228
1447
|
return content.version;
|
|
1229
1448
|
}
|
|
1230
1449
|
async addScriptsToPackageJson(scripts) {
|
|
1231
|
-
const packageJson = JSON.parse(await
|
|
1450
|
+
const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8"));
|
|
1232
1451
|
packageJson.scripts = {
|
|
1233
1452
|
...packageJson.scripts,
|
|
1234
1453
|
...scripts
|
|
1235
1454
|
};
|
|
1236
|
-
await
|
|
1455
|
+
await fs.writeFile("package.json", JSON.stringify(packageJson, null, 2));
|
|
1237
1456
|
}
|
|
1238
1457
|
};
|
|
1239
|
-
|
|
1240
|
-
const userAgent = process.env.npm_config_user_agent || "";
|
|
1241
|
-
const execPath = process.env.npm_execpath || "";
|
|
1242
|
-
if (userAgent.includes("yarn")) {
|
|
1243
|
-
return "yarn";
|
|
1244
|
-
}
|
|
1245
|
-
if (userAgent.includes("pnpm")) {
|
|
1246
|
-
return "pnpm";
|
|
1247
|
-
}
|
|
1248
|
-
if (userAgent.includes("npm")) {
|
|
1249
|
-
return "npm";
|
|
1250
|
-
}
|
|
1251
|
-
if (execPath.includes("yarn")) {
|
|
1252
|
-
return "yarn";
|
|
1253
|
-
}
|
|
1254
|
-
if (execPath.includes("pnpm")) {
|
|
1255
|
-
return "pnpm";
|
|
1256
|
-
}
|
|
1257
|
-
if (execPath.includes("npm")) {
|
|
1258
|
-
return "npm";
|
|
1259
|
-
}
|
|
1260
|
-
return "npm";
|
|
1261
|
-
}
|
|
1262
|
-
function getPackageManagerInstallCommand(pm) {
|
|
1263
|
-
switch (pm) {
|
|
1264
|
-
case "npm":
|
|
1265
|
-
return "install";
|
|
1266
|
-
case "yarn":
|
|
1267
|
-
return "add";
|
|
1268
|
-
case "pnpm":
|
|
1269
|
-
return "add";
|
|
1270
|
-
default:
|
|
1271
|
-
return "install";
|
|
1272
|
-
}
|
|
1273
|
-
}
|
|
1274
|
-
var args = ["-y", "@mastra/mcp-docs-server@latest"];
|
|
1458
|
+
var args = ["-y", "@mastra/mcp-docs-server"];
|
|
1275
1459
|
var createMcpConfig = (editor) => {
|
|
1276
1460
|
if (editor === "vscode") {
|
|
1277
1461
|
return {
|
|
@@ -1290,10 +1474,7 @@ var createMcpConfig = (editor) => {
|
|
|
1290
1474
|
}
|
|
1291
1475
|
return {
|
|
1292
1476
|
mcpServers: {
|
|
1293
|
-
mastra:
|
|
1294
|
-
command: "cmd",
|
|
1295
|
-
args: ["/c", "npx", ...args]
|
|
1296
|
-
} : {
|
|
1477
|
+
mastra: {
|
|
1297
1478
|
command: "npx",
|
|
1298
1479
|
args
|
|
1299
1480
|
}
|
|
@@ -1326,19 +1507,19 @@ async function writeMergedConfig(configPath, editor) {
|
|
|
1326
1507
|
spaces: 2
|
|
1327
1508
|
});
|
|
1328
1509
|
}
|
|
1329
|
-
var windsurfGlobalMCPConfigPath =
|
|
1330
|
-
var cursorGlobalMCPConfigPath =
|
|
1331
|
-
|
|
1332
|
-
var vscodeGlobalMCPConfigPath =
|
|
1510
|
+
var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
|
|
1511
|
+
var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
|
|
1512
|
+
path3.join(process.cwd(), ".vscode", "mcp.json");
|
|
1513
|
+
var vscodeGlobalMCPConfigPath = path3.join(
|
|
1333
1514
|
os.homedir(),
|
|
1334
|
-
process.platform === "win32" ?
|
|
1515
|
+
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")
|
|
1335
1516
|
);
|
|
1336
1517
|
async function installMastraDocsMCPServer({ editor, directory }) {
|
|
1337
1518
|
if (editor === `cursor`) {
|
|
1338
|
-
await writeMergedConfig(
|
|
1519
|
+
await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
|
|
1339
1520
|
}
|
|
1340
1521
|
if (editor === `vscode`) {
|
|
1341
|
-
await writeMergedConfig(
|
|
1522
|
+
await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
|
|
1342
1523
|
}
|
|
1343
1524
|
if (editor === `cursor-global`) {
|
|
1344
1525
|
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
@@ -1369,8 +1550,9 @@ async function globalMCPIsAlreadyInstalled(editor) {
|
|
|
1369
1550
|
}
|
|
1370
1551
|
try {
|
|
1371
1552
|
const configContents = await readJSON(configPath);
|
|
1553
|
+
if (!configContents) return false;
|
|
1372
1554
|
if (editor === "vscode") {
|
|
1373
|
-
if (!configContents
|
|
1555
|
+
if (!configContents.servers) return false;
|
|
1374
1556
|
const hasMastraMCP2 = Object.values(configContents.servers).some(
|
|
1375
1557
|
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1376
1558
|
);
|
|
@@ -1381,8 +1563,7 @@ async function globalMCPIsAlreadyInstalled(editor) {
|
|
|
1381
1563
|
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1382
1564
|
);
|
|
1383
1565
|
return hasMastraMCP;
|
|
1384
|
-
} catch
|
|
1385
|
-
console.error(e);
|
|
1566
|
+
} catch {
|
|
1386
1567
|
return false;
|
|
1387
1568
|
}
|
|
1388
1569
|
}
|
|
@@ -1396,7 +1577,7 @@ var FileEnvService = class extends EnvService {
|
|
|
1396
1577
|
}
|
|
1397
1578
|
readFile(filePath) {
|
|
1398
1579
|
return new Promise((resolve, reject) => {
|
|
1399
|
-
|
|
1580
|
+
fs4__default.readFile(filePath, "utf8", (err, data) => {
|
|
1400
1581
|
if (err) reject(err);
|
|
1401
1582
|
else resolve(data);
|
|
1402
1583
|
});
|
|
@@ -1404,7 +1585,7 @@ var FileEnvService = class extends EnvService {
|
|
|
1404
1585
|
}
|
|
1405
1586
|
writeFile({ filePath, data }) {
|
|
1406
1587
|
return new Promise((resolve, reject) => {
|
|
1407
|
-
|
|
1588
|
+
fs4__default.writeFile(filePath, data, "utf8", (err) => {
|
|
1408
1589
|
if (err) reject(err);
|
|
1409
1590
|
else resolve();
|
|
1410
1591
|
});
|
|
@@ -1457,10 +1638,10 @@ var FileService = class {
|
|
|
1457
1638
|
*/
|
|
1458
1639
|
async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
|
|
1459
1640
|
const __filename = fileURLToPath(import.meta.url);
|
|
1460
|
-
const __dirname =
|
|
1461
|
-
const filePath =
|
|
1462
|
-
const fileString =
|
|
1463
|
-
if (
|
|
1641
|
+
const __dirname = path3.dirname(__filename);
|
|
1642
|
+
const filePath = path3.resolve(__dirname, "starter-files", inputFile);
|
|
1643
|
+
const fileString = fs4__default__default.readFileSync(filePath, "utf8");
|
|
1644
|
+
if (fs4__default__default.existsSync(outputFilePath) && !replaceIfExists) {
|
|
1464
1645
|
console.log(`${outputFilePath} already exists`);
|
|
1465
1646
|
return false;
|
|
1466
1647
|
}
|
|
@@ -1468,14 +1649,14 @@ var FileService = class {
|
|
|
1468
1649
|
return true;
|
|
1469
1650
|
}
|
|
1470
1651
|
async setupEnvFile({ dbUrl }) {
|
|
1471
|
-
const envPath =
|
|
1652
|
+
const envPath = path3.join(process.cwd(), ".env.development");
|
|
1472
1653
|
await fsExtra3.ensureFile(envPath);
|
|
1473
1654
|
const fileEnvService = new FileEnvService(envPath);
|
|
1474
1655
|
await fileEnvService.setEnvValue("DB_URL", dbUrl);
|
|
1475
1656
|
}
|
|
1476
1657
|
getFirstExistingFile(files) {
|
|
1477
1658
|
for (const f of files) {
|
|
1478
|
-
if (
|
|
1659
|
+
if (fs4__default__default.existsSync(f)) {
|
|
1479
1660
|
return f;
|
|
1480
1661
|
}
|
|
1481
1662
|
}
|
|
@@ -1485,18 +1666,14 @@ var FileService = class {
|
|
|
1485
1666
|
filePath,
|
|
1486
1667
|
replacements
|
|
1487
1668
|
}) {
|
|
1488
|
-
let fileContent =
|
|
1669
|
+
let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
|
|
1489
1670
|
replacements.forEach(({ search, replace }) => {
|
|
1490
1671
|
fileContent = fileContent.replaceAll(search, replace);
|
|
1491
1672
|
});
|
|
1492
|
-
|
|
1673
|
+
fs4__default__default.writeFileSync(filePath, fileContent);
|
|
1493
1674
|
}
|
|
1494
1675
|
};
|
|
1495
|
-
|
|
1496
|
-
name: "Mastra CLI",
|
|
1497
|
-
level: "debug"
|
|
1498
|
-
});
|
|
1499
|
-
var exec = util.promisify(child_process.exec);
|
|
1676
|
+
var exec2 = util.promisify(child_process.exec);
|
|
1500
1677
|
var getAISDKPackage = (llmProvider) => {
|
|
1501
1678
|
switch (llmProvider) {
|
|
1502
1679
|
case "openai":
|
|
@@ -1527,7 +1704,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1527
1704
|
modelItem = `groq('llama-3.3-70b-versatile')`;
|
|
1528
1705
|
} else if (llmProvider === "google") {
|
|
1529
1706
|
providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
|
|
1530
|
-
modelItem = `google('gemini-
|
|
1707
|
+
modelItem = `google('gemini-2.5-pro-exp-03-25')`;
|
|
1531
1708
|
} else if (llmProvider === "cerebras") {
|
|
1532
1709
|
providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
|
|
1533
1710
|
modelItem = `cerebras('llama-3.3-70b')`;
|
|
@@ -1537,14 +1714,16 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1537
1714
|
async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
1538
1715
|
const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
|
|
1539
1716
|
const instructions = `
|
|
1540
|
-
You are a helpful weather assistant that provides accurate weather information.
|
|
1717
|
+
You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
|
|
1541
1718
|
|
|
1542
1719
|
Your primary function is to help users get weather details for specific locations. When responding:
|
|
1543
1720
|
- Always ask for a location if none is provided
|
|
1544
|
-
- If the location name isn
|
|
1721
|
+
- If the location name isn't in English, please translate it
|
|
1545
1722
|
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
|
|
1546
1723
|
- Include relevant details like humidity, wind conditions, and precipitation
|
|
1547
1724
|
- Keep responses concise but informative
|
|
1725
|
+
- If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
|
|
1726
|
+
- If the user asks for activities, respond in the format they request.
|
|
1548
1727
|
|
|
1549
1728
|
${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
|
|
1550
1729
|
`;
|
|
@@ -1571,66 +1750,13 @@ export const weatherAgent = new Agent({
|
|
|
1571
1750
|
parser: "typescript",
|
|
1572
1751
|
singleQuote: true
|
|
1573
1752
|
});
|
|
1574
|
-
await
|
|
1575
|
-
await
|
|
1753
|
+
await fs.writeFile(destPath, "");
|
|
1754
|
+
await fs.writeFile(destPath, formattedContent);
|
|
1576
1755
|
}
|
|
1577
|
-
async function writeWorkflowSample(destPath
|
|
1578
|
-
const {
|
|
1579
|
-
const content = `${providerImport}
|
|
1580
|
-
import { Agent } from '@mastra/core/agent';
|
|
1581
|
-
import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1756
|
+
async function writeWorkflowSample(destPath) {
|
|
1757
|
+
const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1582
1758
|
import { z } from 'zod';
|
|
1583
1759
|
|
|
1584
|
-
const llm = ${modelItem};
|
|
1585
|
-
|
|
1586
|
-
const agent = new Agent({
|
|
1587
|
-
name: 'Weather Agent',
|
|
1588
|
-
model: llm,
|
|
1589
|
-
instructions: \`
|
|
1590
|
-
You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
|
|
1591
|
-
|
|
1592
|
-
For each day in the forecast, structure your response exactly as follows:
|
|
1593
|
-
|
|
1594
|
-
\u{1F4C5} [Day, Month Date, Year]
|
|
1595
|
-
\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
|
|
1596
|
-
|
|
1597
|
-
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1598
|
-
\u2022 Conditions: [brief description]
|
|
1599
|
-
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1600
|
-
\u2022 Precipitation: [X% chance]
|
|
1601
|
-
|
|
1602
|
-
\u{1F305} MORNING ACTIVITIES
|
|
1603
|
-
Outdoor:
|
|
1604
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1605
|
-
Best timing: [specific time range]
|
|
1606
|
-
Note: [relevant weather consideration]
|
|
1607
|
-
|
|
1608
|
-
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1609
|
-
Outdoor:
|
|
1610
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1611
|
-
Best timing: [specific time range]
|
|
1612
|
-
Note: [relevant weather consideration]
|
|
1613
|
-
|
|
1614
|
-
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1615
|
-
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1616
|
-
Ideal for: [weather condition that would trigger this alternative]
|
|
1617
|
-
|
|
1618
|
-
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1619
|
-
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1620
|
-
|
|
1621
|
-
Guidelines:
|
|
1622
|
-
- Suggest 2-3 time-specific outdoor activities per day
|
|
1623
|
-
- Include 1-2 indoor backup options
|
|
1624
|
-
- For precipitation >50%, lead with indoor activities
|
|
1625
|
-
- All activities must be specific to the location
|
|
1626
|
-
- Include specific venues, trails, or locations
|
|
1627
|
-
- Consider activity intensity based on temperature
|
|
1628
|
-
- Keep descriptions concise but informative
|
|
1629
|
-
|
|
1630
|
-
Maintain this exact formatting for consistency, using the emoji and section headers as shown.
|
|
1631
|
-
\`,
|
|
1632
|
-
});
|
|
1633
|
-
|
|
1634
1760
|
const forecastSchema = z.object({
|
|
1635
1761
|
date: z.string(),
|
|
1636
1762
|
maxTemp: z.number(),
|
|
@@ -1709,6 +1835,7 @@ const fetchWeather = createStep({
|
|
|
1709
1835
|
(acc, curr) => Math.max(acc, curr),
|
|
1710
1836
|
0
|
|
1711
1837
|
),
|
|
1838
|
+
location: name
|
|
1712
1839
|
}
|
|
1713
1840
|
|
|
1714
1841
|
return forecast;
|
|
@@ -1723,16 +1850,59 @@ const planActivities = createStep({
|
|
|
1723
1850
|
outputSchema: z.object({
|
|
1724
1851
|
activities: z.string(),
|
|
1725
1852
|
}),
|
|
1726
|
-
execute: async ({ inputData }) => {
|
|
1853
|
+
execute: async ({ inputData, mastra }) => {
|
|
1727
1854
|
const forecast = inputData
|
|
1728
1855
|
|
|
1729
1856
|
if (!forecast) {
|
|
1730
1857
|
throw new Error('Forecast data not found')
|
|
1731
1858
|
}
|
|
1732
1859
|
|
|
1860
|
+
const agent = mastra?.getAgent('weatherAgent');
|
|
1861
|
+
if (!agent) {
|
|
1862
|
+
throw new Error('Weather agent not found');
|
|
1863
|
+
}
|
|
1864
|
+
|
|
1733
1865
|
const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
|
|
1734
1866
|
\${JSON.stringify(forecast, null, 2)}
|
|
1735
|
-
|
|
1867
|
+
For each day in the forecast, structure your response exactly as follows:
|
|
1868
|
+
|
|
1869
|
+
\u{1F4C5} [Day, Month Date, Year]
|
|
1870
|
+
\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
|
|
1871
|
+
|
|
1872
|
+
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1873
|
+
\u2022 Conditions: [brief description]
|
|
1874
|
+
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1875
|
+
\u2022 Precipitation: [X% chance]
|
|
1876
|
+
|
|
1877
|
+
\u{1F305} MORNING ACTIVITIES
|
|
1878
|
+
Outdoor:
|
|
1879
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1880
|
+
Best timing: [specific time range]
|
|
1881
|
+
Note: [relevant weather consideration]
|
|
1882
|
+
|
|
1883
|
+
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1884
|
+
Outdoor:
|
|
1885
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1886
|
+
Best timing: [specific time range]
|
|
1887
|
+
Note: [relevant weather consideration]
|
|
1888
|
+
|
|
1889
|
+
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1890
|
+
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1891
|
+
Ideal for: [weather condition that would trigger this alternative]
|
|
1892
|
+
|
|
1893
|
+
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1894
|
+
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1895
|
+
|
|
1896
|
+
Guidelines:
|
|
1897
|
+
- Suggest 2-3 time-specific outdoor activities per day
|
|
1898
|
+
- Include 1-2 indoor backup options
|
|
1899
|
+
- For precipitation >50%, lead with indoor activities
|
|
1900
|
+
- All activities must be specific to the location
|
|
1901
|
+
- Include specific venues, trails, or locations
|
|
1902
|
+
- Consider activity intensity based on temperature
|
|
1903
|
+
- Keep descriptions concise but informative
|
|
1904
|
+
|
|
1905
|
+
Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
|
|
1736
1906
|
|
|
1737
1907
|
const response = await agent.stream([
|
|
1738
1908
|
{
|
|
@@ -1742,7 +1912,7 @@ const planActivities = createStep({
|
|
|
1742
1912
|
]);
|
|
1743
1913
|
|
|
1744
1914
|
let activitiesText = '';
|
|
1745
|
-
|
|
1915
|
+
|
|
1746
1916
|
for await (const chunk of response.textStream) {
|
|
1747
1917
|
process.stdout.write(chunk);
|
|
1748
1918
|
activitiesText += chunk;
|
|
@@ -1774,7 +1944,7 @@ export { weatherWorkflow };`;
|
|
|
1774
1944
|
semi: true,
|
|
1775
1945
|
singleQuote: true
|
|
1776
1946
|
});
|
|
1777
|
-
await
|
|
1947
|
+
await fs.writeFile(destPath, formattedContent);
|
|
1778
1948
|
}
|
|
1779
1949
|
async function writeToolSample(destPath) {
|
|
1780
1950
|
const fileService = new FileService();
|
|
@@ -1787,7 +1957,7 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
|
|
|
1787
1957
|
case "tools":
|
|
1788
1958
|
return writeToolSample(destPath);
|
|
1789
1959
|
case "workflows":
|
|
1790
|
-
return writeWorkflowSample(destPath
|
|
1960
|
+
return writeWorkflowSample(destPath);
|
|
1791
1961
|
default:
|
|
1792
1962
|
return "";
|
|
1793
1963
|
}
|
|
@@ -1803,15 +1973,15 @@ var writeIndexFile = async ({
|
|
|
1803
1973
|
addWorkflow
|
|
1804
1974
|
}) => {
|
|
1805
1975
|
const indexPath = dirPath + "/index.ts";
|
|
1806
|
-
const destPath =
|
|
1976
|
+
const destPath = path3.join(indexPath);
|
|
1807
1977
|
try {
|
|
1808
|
-
await
|
|
1978
|
+
await fs.writeFile(destPath, "");
|
|
1809
1979
|
const filteredExports = [
|
|
1810
1980
|
addWorkflow ? `workflows: { weatherWorkflow },` : "",
|
|
1811
1981
|
addAgent ? `agents: { weatherAgent },` : ""
|
|
1812
1982
|
].filter(Boolean);
|
|
1813
1983
|
if (!addExample) {
|
|
1814
|
-
await
|
|
1984
|
+
await fs.writeFile(
|
|
1815
1985
|
destPath,
|
|
1816
1986
|
`
|
|
1817
1987
|
import { Mastra } from '@mastra/core';
|
|
@@ -1821,7 +1991,7 @@ export const mastra = new Mastra()
|
|
|
1821
1991
|
);
|
|
1822
1992
|
return;
|
|
1823
1993
|
}
|
|
1824
|
-
await
|
|
1994
|
+
await fs.writeFile(
|
|
1825
1995
|
destPath,
|
|
1826
1996
|
`
|
|
1827
1997
|
import { Mastra } from '@mastra/core/mastra';
|
|
@@ -1874,13 +2044,13 @@ var writeAPIKey = async ({
|
|
|
1874
2044
|
const key = await getAPIKey(provider);
|
|
1875
2045
|
const escapedKey = shellQuote.quote([key]);
|
|
1876
2046
|
const escapedApiKey = shellQuote.quote([apiKey]);
|
|
1877
|
-
await
|
|
2047
|
+
await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
|
|
1878
2048
|
};
|
|
1879
2049
|
var createMastraDir = async (directory) => {
|
|
1880
2050
|
let dir = directory.trim().split("/").filter((item) => item !== "");
|
|
1881
|
-
const dirPath =
|
|
2051
|
+
const dirPath = path3.join(process.cwd(), ...dir, "mastra");
|
|
1882
2052
|
try {
|
|
1883
|
-
await
|
|
2053
|
+
await fs.access(dirPath);
|
|
1884
2054
|
return { ok: false };
|
|
1885
2055
|
} catch {
|
|
1886
2056
|
await fsExtra3.ensureDir(dirPath);
|
|
@@ -1896,29 +2066,15 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
|
|
|
1896
2066
|
}
|
|
1897
2067
|
};
|
|
1898
2068
|
var interactivePrompt = async () => {
|
|
1899
|
-
|
|
1900
|
-
const mastraProject = await
|
|
2069
|
+
Ie(color2.inverse(" Mastra Init "));
|
|
2070
|
+
const mastraProject = await Ce(
|
|
1901
2071
|
{
|
|
1902
|
-
directory: () =>
|
|
2072
|
+
directory: () => he({
|
|
1903
2073
|
message: "Where should we create the Mastra files? (default: src/)",
|
|
1904
2074
|
placeholder: "src/",
|
|
1905
2075
|
defaultValue: "src/"
|
|
1906
2076
|
}),
|
|
1907
|
-
|
|
1908
|
-
message: "Choose components to install:",
|
|
1909
|
-
options: [
|
|
1910
|
-
{ value: "agents", label: "Agents", hint: "recommended" },
|
|
1911
|
-
{
|
|
1912
|
-
value: "workflows",
|
|
1913
|
-
label: "Workflows"
|
|
1914
|
-
}
|
|
1915
|
-
]
|
|
1916
|
-
}),
|
|
1917
|
-
shouldAddTools: () => ce({
|
|
1918
|
-
message: "Add tools?",
|
|
1919
|
-
initialValue: false
|
|
1920
|
-
}),
|
|
1921
|
-
llmProvider: () => le({
|
|
2077
|
+
llmProvider: () => ve({
|
|
1922
2078
|
message: "Select default provider:",
|
|
1923
2079
|
options: [
|
|
1924
2080
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
@@ -1929,7 +2085,7 @@ var interactivePrompt = async () => {
|
|
|
1929
2085
|
]
|
|
1930
2086
|
}),
|
|
1931
2087
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
1932
|
-
const keyChoice = await
|
|
2088
|
+
const keyChoice = await ve({
|
|
1933
2089
|
message: `Enter your ${llmProvider} API key?`,
|
|
1934
2090
|
options: [
|
|
1935
2091
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1938,22 +2094,18 @@ var interactivePrompt = async () => {
|
|
|
1938
2094
|
initialValue: "skip"
|
|
1939
2095
|
});
|
|
1940
2096
|
if (keyChoice === "enter") {
|
|
1941
|
-
return
|
|
2097
|
+
return he({
|
|
1942
2098
|
message: "Enter your API key:",
|
|
1943
2099
|
placeholder: "sk-..."
|
|
1944
2100
|
});
|
|
1945
2101
|
}
|
|
1946
2102
|
return void 0;
|
|
1947
2103
|
},
|
|
1948
|
-
addExample: () => ce({
|
|
1949
|
-
message: "Add example",
|
|
1950
|
-
initialValue: false
|
|
1951
|
-
}),
|
|
1952
2104
|
configureEditorWithDocsMCP: async () => {
|
|
1953
2105
|
const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
|
|
1954
2106
|
const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
|
|
1955
2107
|
const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
|
|
1956
|
-
const editor = await
|
|
2108
|
+
const editor = await ve({
|
|
1957
2109
|
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1958
2110
|
options: [
|
|
1959
2111
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1981,24 +2133,24 @@ var interactivePrompt = async () => {
|
|
|
1981
2133
|
});
|
|
1982
2134
|
if (editor === `skip`) return void 0;
|
|
1983
2135
|
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
1984
|
-
|
|
2136
|
+
M.message(`
|
|
1985
2137
|
Windsurf is already installed, skipping.`);
|
|
1986
2138
|
return void 0;
|
|
1987
2139
|
}
|
|
1988
2140
|
if (editor === `vscode` && vscodeIsAlreadyInstalled) {
|
|
1989
|
-
|
|
2141
|
+
M.message(`
|
|
1990
2142
|
VSCode is already installed, skipping.`);
|
|
1991
2143
|
return void 0;
|
|
1992
2144
|
}
|
|
1993
2145
|
if (editor === `cursor`) {
|
|
1994
|
-
|
|
2146
|
+
M.message(
|
|
1995
2147
|
`
|
|
1996
2148
|
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
1997
2149
|
`
|
|
1998
2150
|
);
|
|
1999
2151
|
}
|
|
2000
2152
|
if (editor === `cursor-global`) {
|
|
2001
|
-
const confirm2 = await
|
|
2153
|
+
const confirm2 = await ve({
|
|
2002
2154
|
message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
|
|
2003
2155
|
options: [
|
|
2004
2156
|
{ value: "yes", label: "Yes, I understand" },
|
|
@@ -2010,7 +2162,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
|
|
|
2010
2162
|
}
|
|
2011
2163
|
}
|
|
2012
2164
|
if (editor === `windsurf`) {
|
|
2013
|
-
const confirm2 = await
|
|
2165
|
+
const confirm2 = await ve({
|
|
2014
2166
|
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
2015
2167
|
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
2016
2168
|
options: [
|
|
@@ -2027,17 +2179,15 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
|
|
|
2027
2179
|
},
|
|
2028
2180
|
{
|
|
2029
2181
|
onCancel: () => {
|
|
2030
|
-
|
|
2182
|
+
xe("Operation cancelled.");
|
|
2031
2183
|
process.exit(0);
|
|
2032
2184
|
}
|
|
2033
2185
|
}
|
|
2034
2186
|
);
|
|
2035
|
-
|
|
2036
|
-
const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
|
|
2037
|
-
return { ...rest, components: mastraComponents };
|
|
2187
|
+
return mastraProject;
|
|
2038
2188
|
};
|
|
2039
|
-
var s =
|
|
2040
|
-
var
|
|
2189
|
+
var s = Y();
|
|
2190
|
+
var exec3 = util.promisify(child_process.exec);
|
|
2041
2191
|
var init = async ({
|
|
2042
2192
|
directory,
|
|
2043
2193
|
addExample = false,
|
|
@@ -2089,7 +2239,7 @@ var init = async ({
|
|
|
2089
2239
|
const depsService = new DepsService();
|
|
2090
2240
|
const pm = depsService.packageManager;
|
|
2091
2241
|
const installCommand = getPackageManagerInstallCommand(pm);
|
|
2092
|
-
await
|
|
2242
|
+
await exec3(`${pm} ${installCommand} ${aiSdkPackage}`);
|
|
2093
2243
|
if (configureEditorWithDocsMCP) {
|
|
2094
2244
|
await installMastraDocsMCPServer({
|
|
2095
2245
|
editor: configureEditorWithDocsMCP,
|
|
@@ -2098,14 +2248,14 @@ var init = async ({
|
|
|
2098
2248
|
}
|
|
2099
2249
|
s.stop();
|
|
2100
2250
|
if (!llmApiKey) {
|
|
2101
|
-
|
|
2251
|
+
Me(`
|
|
2102
2252
|
${color2.green("Mastra initialized successfully!")}
|
|
2103
2253
|
|
|
2104
2254
|
Add your ${color2.cyan(key)} as an environment variable
|
|
2105
2255
|
in your ${color2.cyan(".env")} file
|
|
2106
2256
|
`);
|
|
2107
2257
|
} else {
|
|
2108
|
-
|
|
2258
|
+
Me(`
|
|
2109
2259
|
${color2.green("Mastra initialized successfully!")}
|
|
2110
2260
|
`);
|
|
2111
2261
|
}
|
|
@@ -2116,10 +2266,10 @@ var init = async ({
|
|
|
2116
2266
|
return { success: false };
|
|
2117
2267
|
}
|
|
2118
2268
|
};
|
|
2119
|
-
var
|
|
2269
|
+
var exec4 = util.promisify(child_process.exec);
|
|
2120
2270
|
var execWithTimeout = async (command, timeoutMs) => {
|
|
2121
2271
|
try {
|
|
2122
|
-
const promise =
|
|
2272
|
+
const promise = exec4(command, { killSignal: "SIGTERM" });
|
|
2123
2273
|
if (!timeoutMs) {
|
|
2124
2274
|
return await promise;
|
|
2125
2275
|
}
|
|
@@ -2139,7 +2289,6 @@ var execWithTimeout = async (command, timeoutMs) => {
|
|
|
2139
2289
|
throw error;
|
|
2140
2290
|
}
|
|
2141
2291
|
} catch (error) {
|
|
2142
|
-
console.error(error);
|
|
2143
2292
|
throw error;
|
|
2144
2293
|
}
|
|
2145
2294
|
};
|
|
@@ -2151,11 +2300,18 @@ async function installMastraDependency(pm, dependency, versionTag, isDev, timeou
|
|
|
2151
2300
|
try {
|
|
2152
2301
|
await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
|
|
2153
2302
|
} catch (err) {
|
|
2154
|
-
console.log("err", err);
|
|
2155
2303
|
if (versionTag === "@latest") {
|
|
2156
|
-
throw
|
|
2304
|
+
throw new Error(
|
|
2305
|
+
`Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
|
|
2306
|
+
);
|
|
2307
|
+
}
|
|
2308
|
+
try {
|
|
2309
|
+
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
2310
|
+
} catch (fallbackErr) {
|
|
2311
|
+
throw new Error(
|
|
2312
|
+
`Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
|
|
2313
|
+
);
|
|
2157
2314
|
}
|
|
2158
|
-
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
2159
2315
|
}
|
|
2160
2316
|
}
|
|
2161
2317
|
var createMastraProject = async ({
|
|
@@ -2163,46 +2319,55 @@ var createMastraProject = async ({
|
|
|
2163
2319
|
createVersionTag,
|
|
2164
2320
|
timeout
|
|
2165
2321
|
}) => {
|
|
2166
|
-
|
|
2167
|
-
const projectName = name ?? await
|
|
2322
|
+
Ie(color2.inverse(" Mastra Create "));
|
|
2323
|
+
const projectName = name ?? await he({
|
|
2168
2324
|
message: "What do you want to name your project?",
|
|
2169
2325
|
placeholder: "my-mastra-app",
|
|
2170
2326
|
defaultValue: "my-mastra-app"
|
|
2171
2327
|
});
|
|
2172
|
-
if (
|
|
2173
|
-
|
|
2328
|
+
if (pD(projectName)) {
|
|
2329
|
+
xe("Operation cancelled");
|
|
2174
2330
|
process.exit(0);
|
|
2175
2331
|
}
|
|
2176
|
-
const s2 =
|
|
2177
|
-
s2.start("Creating project");
|
|
2332
|
+
const s2 = Y();
|
|
2178
2333
|
try {
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2334
|
+
s2.start("Creating project");
|
|
2335
|
+
try {
|
|
2336
|
+
await fs.mkdir(projectName);
|
|
2337
|
+
} catch (error) {
|
|
2338
|
+
if (error instanceof Error && "code" in error && error.code === "EEXIST") {
|
|
2339
|
+
s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
|
|
2340
|
+
process.exit(1);
|
|
2341
|
+
}
|
|
2342
|
+
throw new Error(
|
|
2343
|
+
`Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2184
2344
|
);
|
|
2185
|
-
process.exit(1);
|
|
2186
2345
|
}
|
|
2187
|
-
|
|
2188
|
-
|
|
2189
|
-
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2198
|
-
|
|
2199
|
-
|
|
2200
|
-
|
|
2201
|
-
|
|
2202
|
-
|
|
2203
|
-
|
|
2204
|
-
|
|
2205
|
-
|
|
2346
|
+
process.chdir(projectName);
|
|
2347
|
+
const pm = getPackageManager();
|
|
2348
|
+
const installCommand = getPackageManagerInstallCommand(pm);
|
|
2349
|
+
s2.message("Initializing project structure");
|
|
2350
|
+
try {
|
|
2351
|
+
await exec4(`npm init -y`);
|
|
2352
|
+
await exec4(`npm pkg set type="module"`);
|
|
2353
|
+
await exec4(`npm pkg set engines.node=">=20.9.0"`);
|
|
2354
|
+
const depsService = new DepsService();
|
|
2355
|
+
await depsService.addScriptsToPackageJson({
|
|
2356
|
+
dev: "mastra dev",
|
|
2357
|
+
build: "mastra build",
|
|
2358
|
+
start: "mastra start"
|
|
2359
|
+
});
|
|
2360
|
+
} catch (error) {
|
|
2361
|
+
throw new Error(
|
|
2362
|
+
`Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2363
|
+
);
|
|
2364
|
+
}
|
|
2365
|
+
s2.stop("Project structure created");
|
|
2366
|
+
s2.start(`Installing ${pm} dependencies`);
|
|
2367
|
+
try {
|
|
2368
|
+
await exec4(`${pm} ${installCommand} zod@^3`);
|
|
2369
|
+
await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
|
|
2370
|
+
await exec4(`echo '{
|
|
2206
2371
|
"compilerOptions": {
|
|
2207
2372
|
"target": "ES2022",
|
|
2208
2373
|
"module": "ES2022",
|
|
@@ -2218,31 +2383,60 @@ var createMastraProject = async ({
|
|
|
2218
2383
|
"src/**/*"
|
|
2219
2384
|
]
|
|
2220
2385
|
}' > tsconfig.json`);
|
|
2221
|
-
|
|
2222
|
-
|
|
2223
|
-
|
|
2224
|
-
|
|
2225
|
-
|
|
2226
|
-
|
|
2227
|
-
|
|
2228
|
-
|
|
2229
|
-
|
|
2230
|
-
|
|
2231
|
-
|
|
2232
|
-
|
|
2233
|
-
|
|
2234
|
-
|
|
2235
|
-
|
|
2236
|
-
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2386
|
+
} catch (error) {
|
|
2387
|
+
throw new Error(
|
|
2388
|
+
`Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2389
|
+
);
|
|
2390
|
+
}
|
|
2391
|
+
s2.stop(`${pm} dependencies installed`);
|
|
2392
|
+
s2.start("Installing mastra");
|
|
2393
|
+
const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
|
|
2394
|
+
try {
|
|
2395
|
+
await installMastraDependency(pm, "mastra", versionTag, true, timeout);
|
|
2396
|
+
} catch (error) {
|
|
2397
|
+
throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2398
|
+
}
|
|
2399
|
+
s2.stop("mastra installed");
|
|
2400
|
+
s2.start("Installing dependencies");
|
|
2401
|
+
try {
|
|
2402
|
+
await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
|
|
2403
|
+
await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
|
|
2404
|
+
await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
|
|
2405
|
+
} catch (error) {
|
|
2406
|
+
throw new Error(
|
|
2407
|
+
`Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2408
|
+
);
|
|
2409
|
+
}
|
|
2410
|
+
s2.stop("Mastra dependencies installed");
|
|
2411
|
+
s2.start("Adding .gitignore");
|
|
2412
|
+
try {
|
|
2413
|
+
await exec4(`echo output.txt >> .gitignore`);
|
|
2414
|
+
await exec4(`echo node_modules >> .gitignore`);
|
|
2415
|
+
await exec4(`echo dist >> .gitignore`);
|
|
2416
|
+
await exec4(`echo .mastra >> .gitignore`);
|
|
2417
|
+
await exec4(`echo .env.development >> .gitignore`);
|
|
2418
|
+
await exec4(`echo .env >> .gitignore`);
|
|
2419
|
+
await exec4(`echo *.db >> .gitignore`);
|
|
2420
|
+
await exec4(`echo *.db-* >> .gitignore`);
|
|
2421
|
+
} catch (error) {
|
|
2422
|
+
throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2423
|
+
}
|
|
2424
|
+
s2.stop(".gitignore added");
|
|
2425
|
+
Se("Project created successfully");
|
|
2426
|
+
console.log("");
|
|
2427
|
+
return { projectName };
|
|
2428
|
+
} catch (error) {
|
|
2429
|
+
s2.stop();
|
|
2430
|
+
const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
2431
|
+
xe(`Project creation failed: ${errorMessage}`);
|
|
2432
|
+
process.exit(1);
|
|
2433
|
+
}
|
|
2244
2434
|
};
|
|
2245
2435
|
var create = async (args2) => {
|
|
2436
|
+
if (args2.template !== void 0) {
|
|
2437
|
+
await createFromTemplate(args2);
|
|
2438
|
+
return;
|
|
2439
|
+
}
|
|
2246
2440
|
const { projectName } = await createMastraProject({
|
|
2247
2441
|
projectName: args2?.projectName,
|
|
2248
2442
|
createVersionTag: args2?.createVersionTag,
|
|
@@ -2253,7 +2447,9 @@ var create = async (args2) => {
|
|
|
2253
2447
|
const result = await interactivePrompt();
|
|
2254
2448
|
await init({
|
|
2255
2449
|
...result,
|
|
2256
|
-
llmApiKey: result?.llmApiKey
|
|
2450
|
+
llmApiKey: result?.llmApiKey,
|
|
2451
|
+
components: ["agents", "tools", "workflows"],
|
|
2452
|
+
addExample: true
|
|
2257
2453
|
});
|
|
2258
2454
|
postCreate({ projectName });
|
|
2259
2455
|
return;
|
|
@@ -2271,18 +2467,167 @@ var create = async (args2) => {
|
|
|
2271
2467
|
};
|
|
2272
2468
|
var postCreate = ({ projectName }) => {
|
|
2273
2469
|
const packageManager = getPackageManager();
|
|
2274
|
-
|
|
2470
|
+
Se(`
|
|
2275
2471
|
${color2.green("To start your project:")}
|
|
2276
2472
|
|
|
2277
2473
|
${color2.cyan("cd")} ${projectName}
|
|
2278
2474
|
${color2.cyan(`${packageManager} run dev`)}
|
|
2279
2475
|
`);
|
|
2280
2476
|
};
|
|
2477
|
+
function isGitHubUrl(url) {
|
|
2478
|
+
try {
|
|
2479
|
+
const parsedUrl = new URL(url);
|
|
2480
|
+
return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
|
|
2481
|
+
} catch {
|
|
2482
|
+
return false;
|
|
2483
|
+
}
|
|
2484
|
+
}
|
|
2485
|
+
async function validateGitHubProject(githubUrl) {
|
|
2486
|
+
const errors = [];
|
|
2487
|
+
try {
|
|
2488
|
+
const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
|
|
2489
|
+
const owner = urlParts[0];
|
|
2490
|
+
const repo = urlParts[1]?.replace(".git", "");
|
|
2491
|
+
if (!owner || !repo) {
|
|
2492
|
+
throw new Error("Invalid GitHub URL format");
|
|
2493
|
+
}
|
|
2494
|
+
const branches = ["main", "master"];
|
|
2495
|
+
let packageJsonContent = null;
|
|
2496
|
+
let indexContent = null;
|
|
2497
|
+
for (const branch of branches) {
|
|
2498
|
+
try {
|
|
2499
|
+
const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
|
|
2500
|
+
const packageJsonResponse = await fetch(packageJsonUrl);
|
|
2501
|
+
if (packageJsonResponse.ok) {
|
|
2502
|
+
packageJsonContent = await packageJsonResponse.text();
|
|
2503
|
+
const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
|
|
2504
|
+
const indexResponse = await fetch(indexUrl);
|
|
2505
|
+
if (indexResponse.ok) {
|
|
2506
|
+
indexContent = await indexResponse.text();
|
|
2507
|
+
}
|
|
2508
|
+
break;
|
|
2509
|
+
}
|
|
2510
|
+
} catch {
|
|
2511
|
+
}
|
|
2512
|
+
}
|
|
2513
|
+
if (!packageJsonContent) {
|
|
2514
|
+
errors.push("Could not fetch package.json from repository");
|
|
2515
|
+
return { isValid: false, errors };
|
|
2516
|
+
}
|
|
2517
|
+
try {
|
|
2518
|
+
const packageJson = JSON.parse(packageJsonContent);
|
|
2519
|
+
const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
|
|
2520
|
+
if (!hasMastraCore) {
|
|
2521
|
+
errors.push("Missing @mastra/core dependency in package.json");
|
|
2522
|
+
}
|
|
2523
|
+
} catch {
|
|
2524
|
+
errors.push("Invalid package.json format");
|
|
2525
|
+
}
|
|
2526
|
+
if (!indexContent) {
|
|
2527
|
+
errors.push("Missing src/mastra/index.ts file");
|
|
2528
|
+
} else {
|
|
2529
|
+
const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
|
|
2530
|
+
if (!hasMastraExport) {
|
|
2531
|
+
errors.push("src/mastra/index.ts does not export a Mastra instance");
|
|
2532
|
+
}
|
|
2533
|
+
}
|
|
2534
|
+
return { isValid: errors.length === 0, errors };
|
|
2535
|
+
} catch (error) {
|
|
2536
|
+
errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2537
|
+
return { isValid: false, errors };
|
|
2538
|
+
}
|
|
2539
|
+
}
|
|
2540
|
+
async function createFromGitHubUrl(url) {
|
|
2541
|
+
const urlParts = new URL(url).pathname.split("/").filter(Boolean);
|
|
2542
|
+
const owner = urlParts[0] || "unknown";
|
|
2543
|
+
const repo = urlParts[1] || "unknown";
|
|
2544
|
+
return {
|
|
2545
|
+
githubUrl: url,
|
|
2546
|
+
title: `${owner}/${repo}`,
|
|
2547
|
+
slug: repo,
|
|
2548
|
+
agents: [],
|
|
2549
|
+
mcp: [],
|
|
2550
|
+
tools: [],
|
|
2551
|
+
networks: [],
|
|
2552
|
+
workflows: []
|
|
2553
|
+
};
|
|
2554
|
+
}
|
|
2555
|
+
async function createFromTemplate(args2) {
|
|
2556
|
+
let selectedTemplate;
|
|
2557
|
+
if (args2.template === true) {
|
|
2558
|
+
const templates = await loadTemplates();
|
|
2559
|
+
const selected = await selectTemplate(templates);
|
|
2560
|
+
if (!selected) {
|
|
2561
|
+
M.info("No template selected. Exiting.");
|
|
2562
|
+
return;
|
|
2563
|
+
}
|
|
2564
|
+
selectedTemplate = selected;
|
|
2565
|
+
} else if (args2.template && typeof args2.template === "string") {
|
|
2566
|
+
if (isGitHubUrl(args2.template)) {
|
|
2567
|
+
const spinner5 = Y();
|
|
2568
|
+
spinner5.start("Validating GitHub repository...");
|
|
2569
|
+
const validation = await validateGitHubProject(args2.template);
|
|
2570
|
+
if (!validation.isValid) {
|
|
2571
|
+
spinner5.stop("Validation failed");
|
|
2572
|
+
M.error("This does not appear to be a valid Mastra project:");
|
|
2573
|
+
validation.errors.forEach((error) => M.error(` - ${error}`));
|
|
2574
|
+
throw new Error("Invalid Mastra project");
|
|
2575
|
+
}
|
|
2576
|
+
spinner5.stop("Valid Mastra project \u2713");
|
|
2577
|
+
selectedTemplate = await createFromGitHubUrl(args2.template);
|
|
2578
|
+
} else {
|
|
2579
|
+
const templates = await loadTemplates();
|
|
2580
|
+
const found = findTemplateByName(templates, args2.template);
|
|
2581
|
+
if (!found) {
|
|
2582
|
+
M.error(`Template "${args2.template}" not found. Available templates:`);
|
|
2583
|
+
templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
|
|
2584
|
+
throw new Error(`Template "${args2.template}" not found`);
|
|
2585
|
+
}
|
|
2586
|
+
selectedTemplate = found;
|
|
2587
|
+
}
|
|
2588
|
+
}
|
|
2589
|
+
if (!selectedTemplate) {
|
|
2590
|
+
throw new Error("No template selected");
|
|
2591
|
+
}
|
|
2592
|
+
let projectName = args2.projectName;
|
|
2593
|
+
if (!projectName) {
|
|
2594
|
+
const defaultName = getDefaultProjectName(selectedTemplate);
|
|
2595
|
+
const response = await he({
|
|
2596
|
+
message: "What is your project name?",
|
|
2597
|
+
defaultValue: defaultName,
|
|
2598
|
+
placeholder: defaultName
|
|
2599
|
+
});
|
|
2600
|
+
if (pD(response)) {
|
|
2601
|
+
M.info("Project creation cancelled.");
|
|
2602
|
+
return;
|
|
2603
|
+
}
|
|
2604
|
+
projectName = response;
|
|
2605
|
+
}
|
|
2606
|
+
try {
|
|
2607
|
+
const analytics = getAnalytics();
|
|
2608
|
+
if (analytics) ;
|
|
2609
|
+
const projectPath = await cloneTemplate({
|
|
2610
|
+
template: selectedTemplate,
|
|
2611
|
+
projectName
|
|
2612
|
+
});
|
|
2613
|
+
await installDependencies(projectPath);
|
|
2614
|
+
Me(`
|
|
2615
|
+
${color2.green("Mastra template installed!")}
|
|
2616
|
+
|
|
2617
|
+
Add the necessary environment
|
|
2618
|
+
variables in your ${color2.cyan(".env")} file
|
|
2619
|
+
`);
|
|
2620
|
+
postCreate({ projectName });
|
|
2621
|
+
} catch (error) {
|
|
2622
|
+
M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2623
|
+
throw error;
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2281
2626
|
|
|
2282
2627
|
async function getPackageVersion() {
|
|
2283
2628
|
const __filename = fileURLToPath(import.meta.url);
|
|
2284
2629
|
const __dirname = dirname(__filename);
|
|
2285
|
-
const pkgJsonPath =
|
|
2630
|
+
const pkgJsonPath = path3.join(__dirname, "..", "package.json");
|
|
2286
2631
|
const content = await fsExtra.readJSON(pkgJsonPath);
|
|
2287
2632
|
return content.version;
|
|
2288
2633
|
}
|
|
@@ -2320,7 +2665,10 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
2320
2665
|
program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
|
|
2321
2666
|
"-p, --project-name <string>",
|
|
2322
2667
|
"Project name that will be used in package.json and as the project directory name."
|
|
2323
|
-
).option("--default", "Quick start with defaults(src, OpenAI,
|
|
2668
|
+
).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(
|
|
2669
|
+
"--template [template-name]",
|
|
2670
|
+
"Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
|
|
2671
|
+
).action(async (projectNameArg, args) => {
|
|
2324
2672
|
const projectName = projectNameArg || args.projectName;
|
|
2325
2673
|
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
2326
2674
|
if (args.default) {
|
|
@@ -2330,7 +2678,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2330
2678
|
addExample: true,
|
|
2331
2679
|
createVersionTag,
|
|
2332
2680
|
timeout,
|
|
2333
|
-
mcpServer: args.mcp
|
|
2681
|
+
mcpServer: args.mcp,
|
|
2682
|
+
directory: "src/",
|
|
2683
|
+
template: args.template
|
|
2334
2684
|
});
|
|
2335
2685
|
return;
|
|
2336
2686
|
}
|
|
@@ -2343,7 +2693,8 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2343
2693
|
timeout,
|
|
2344
2694
|
projectName,
|
|
2345
2695
|
directory: args.dir,
|
|
2346
|
-
mcpServer: args.mcp
|
|
2696
|
+
mcpServer: args.mcp,
|
|
2697
|
+
template: args.template
|
|
2347
2698
|
});
|
|
2348
2699
|
});
|
|
2349
2700
|
program.parse(process.argv);
|