create-mastra 0.0.0-trigger-playground-ui-package-20250506151043 → 0.0.0-tsconfig-compile-20250703214351
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/README.md +0 -1
- package/dist/index.js +777 -421
- package/dist/index.js.map +1 -1
- package/dist/templates/dev.entry.js +0 -5
- package/package.json +15 -15
package/dist/index.js
CHANGED
|
@@ -4,26 +4,26 @@ import { randomUUID } from 'node:crypto';
|
|
|
4
4
|
import * as fs3__default from 'node:fs';
|
|
5
5
|
import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
6
6
|
import os from 'node:os';
|
|
7
|
-
import
|
|
7
|
+
import path2, { 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';
|
|
14
15
|
import child_process from 'node:child_process';
|
|
15
|
-
import util from 'node:util';
|
|
16
16
|
import fs4 from 'node:fs/promises';
|
|
17
17
|
import { execa } from 'execa';
|
|
18
18
|
import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
|
|
19
19
|
import prettier from 'prettier';
|
|
20
|
-
import
|
|
20
|
+
import tty from 'node:tty';
|
|
21
21
|
import pino from 'pino';
|
|
22
22
|
import pretty from 'pino-pretty';
|
|
23
23
|
import fsExtra from 'fs-extra';
|
|
24
24
|
|
|
25
25
|
var __filename = fileURLToPath(import.meta.url);
|
|
26
|
-
var __dirname =
|
|
26
|
+
var __dirname = path2.dirname(__filename);
|
|
27
27
|
var PosthogAnalytics = class {
|
|
28
28
|
sessionId;
|
|
29
29
|
client;
|
|
@@ -35,7 +35,7 @@ var PosthogAnalytics = class {
|
|
|
35
35
|
host = "https://app.posthog.com"
|
|
36
36
|
}) {
|
|
37
37
|
this.version = version;
|
|
38
|
-
const cliConfigPath =
|
|
38
|
+
const cliConfigPath = path2.join(__dirname, "mastra-cli.json");
|
|
39
39
|
if (existsSync(cliConfigPath)) {
|
|
40
40
|
try {
|
|
41
41
|
const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
|
|
@@ -63,7 +63,7 @@ var PosthogAnalytics = class {
|
|
|
63
63
|
}
|
|
64
64
|
writeCliConfig({ distinctId, sessionId }) {
|
|
65
65
|
try {
|
|
66
|
-
writeFileSync(
|
|
66
|
+
writeFileSync(path2.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
|
|
67
67
|
} catch {
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -349,72 +349,335 @@ function requirePicocolors () {
|
|
|
349
349
|
var picocolorsExports = /*@__PURE__*/ requirePicocolors();
|
|
350
350
|
var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
|
|
351
351
|
|
|
352
|
-
function q({onlyFirst:e=false}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,e?void 0:"g")}const J=q();function S(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(J,"")}function T$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var j$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(t){var s=t.charCodeAt(0),C=t.length==2?t.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=C&&C<=57343&&(s&=1023,C&=1023,D=s<<10|C,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(t){var s=this.eastAsianWidth(t);return s=="F"||s=="W"||s=="A"?2:1};function F(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(t){for(var s=F(t),C=0,D=0;D<s.length;D++)C=C+this.characterLength(s[D]);return C},u.slice=function(t,s,C){textLen=u.length(t),s=s||0,C=C||1,s<0&&(s=textLen+s),C<0&&(C=textLen+C);for(var D="",i=0,n=F(t),E=0;E<n.length;E++){var h=n[E],o=u.length(h);if(i>=s-(o==2?1:0))if(i+o<=C)D+=h;else break;i+=o;}return D};})(j$1);var Q$1=j$1.exports;const X=T$1(Q$1);var DD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const uD=T$1(DD);function A(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=S(e),e.length===0))return 0;e=e.replace(uD()," ");const F=u.ambiguousIsNarrow?1:2;let t=0;for(const s of e){const C=s.codePointAt(0);if(C<=31||C>=127&&C<=159||C>=768&&C<=879)continue;switch(X.eastAsianWidth(s)){case "F":case "W":t+=2;break;case "A":t+=F;break;default:t+=1;}}return t}const d=10,M$1=(e=0)=>u=>`\x1B[${u+e}m`,P$1=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,W=(e=0)=>(u,F,t)=>`\x1B[${38+e};2;${u};${F};${t}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const FD=Object.keys(r.color),eD=Object.keys(r.bgColor);[...FD,...eD];function tD(){const e=new Map;for(const[u,F]of Object.entries(r)){for(const[t,s]of Object.entries(F))r[t]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},F[t]=r[t],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:F,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=M$1(),r.color.ansi256=P$1(),r.color.ansi16m=W(),r.bgColor.ansi=M$1(d),r.bgColor.ansi256=P$1(d),r.bgColor.ansi16m=W(d),Object.defineProperties(r,{rgbToAnsi256:{value:(u,F,t)=>u===F&&F===t?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(F/255*5)+Math.round(t/255*5),enumerable:false},hexToRgb:{value:u=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!F)return [0,0,0];let[t]=F;t.length===3&&(t=[...t].map(C=>C+C).join(""));const s=Number.parseInt(t,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let F,t,s;if(u>=232)F=((u-232)*10+8)/255,t=F,s=F;else {u-=16;const i=u%36;F=Math.floor(u/36)/5,t=Math.floor(i/6)/5,s=i%6/5;}const C=Math.max(F,t,s)*2;if(C===0)return 30;let D=30+(Math.round(s)<<2|Math.round(t)<<1|Math.round(F));return C===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,F,t)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,F,t)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const sD=tD(),g=new Set(["\x1B","\x9B"]),CD=39,b$1="\x07",O="[",iD="]",I$1="m",w=`${iD}8;;`,N=e=>`${g.values().next().value}${O}${e}${I$1}`,L=e=>`${g.values().next().value}${w}${e}${b$1}`,rD=e=>e.split(" ").map(u=>A(u)),y$1=(e,u,F)=>{const t=[...u];let s=false,C=false,D=A(S(e[e.length-1]));for(const[i,n]of t.entries()){const E=A(n);if(D+E<=F?e[e.length-1]+=n:(e.push(n),D=0),g.has(n)&&(s=true,C=t.slice(i+1).join("").startsWith(w)),s){C?n===b$1&&(s=false,C=false):n===I$1&&(s=false);continue}D+=E,D===F&&i<t.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},ED=e=>{const u=e.split(" ");let F=u.length;for(;F>0&&!(A(u[F-1])>0);)F--;return F===u.length?e:u.slice(0,F).join(" ")+u.slice(F).join("")},oD=(e,u,F={})=>{if(F.trim!==false&&e.trim()==="")return "";let t="",s,C;const D=rD(e);let i=[""];for(const[E,h]of e.split(" ").entries()){F.trim!==false&&(i[i.length-1]=i[i.length-1].trimStart());let o=A(i[i.length-1]);if(E!==0&&(o>=u&&(F.wordWrap===false||F.trim===false)&&(i.push(""),o=0),(o>0||F.trim===false)&&(i[i.length-1]+=" ",o++)),F.hard&&D[E]>u){const B=u-o,p=1+Math.floor((D[E]-B-1)/u);Math.floor((D[E]-1)/u)<p&&i.push(""),y$1(i,h,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(F.wordWrap===false&&o<u){y$1(i,h,u);continue}i.push("");}if(o+D[E]>u&&F.wordWrap===false){y$1(i,h,u);continue}i[i.length-1]+=h;}F.trim!==false&&(i=i.map(E=>ED(E)));const n=[...i.join(`
|
|
353
|
-
`)];for(const[E,
|
|
354
|
-
`?(
|
|
355
|
-
`&&(s&&o&&(
|
|
352
|
+
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(`
|
|
353
|
+
`)];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]===`
|
|
354
|
+
`?(i&&(F+=K$1("")),s&&o&&(F+=z(o))):a===`
|
|
355
|
+
`&&(s&&o&&(F+=z(s)),i&&(F+=K$1(i)));}return F};function Y$1(e,u,t){return String(e).normalize().replace(/\r\n/g,`
|
|
356
356
|
`).split(`
|
|
357
|
-
`).map(
|
|
358
|
-
`)}
|
|
359
|
-
`),
|
|
360
|
-
`),s=[];for(let
|
|
361
|
-
`),
|
|
362
|
-
`).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=
|
|
363
|
-
`);this.output.write(s[
|
|
364
|
-
`).slice(
|
|
365
|
-
`)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}
|
|
366
|
-
|
|
367
|
-
function
|
|
368
|
-
${
|
|
369
|
-
`,t
|
|
370
|
-
${color2.yellow(
|
|
371
|
-
${color2.yellow(
|
|
372
|
-
`;case "submit":return `${n}${color2.gray(
|
|
373
|
-
|
|
374
|
-
${color2.cyan(
|
|
375
|
-
`}}}).prompt(),
|
|
376
|
-
${
|
|
377
|
-
|
|
378
|
-
${color2.gray(
|
|
379
|
-
${color2.cyan(
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
${color2.gray(a)}`;default:return `${t}${color2.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:s.maxItems,style:(i,r)=>n(i,r?"active":"inactive")}).join(`
|
|
384
|
-
${color2.cyan(a)} `)}
|
|
385
|
-
${color2.cyan($)}
|
|
386
|
-
`}}}).prompt()},$e=s=>{const n=(t,i)=>{const r=t.label??String(t.value);return i==="active"?`${color2.cyan(j)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="selected"?`${color2.green(b)} ${color2.dim(r)}`:i==="cancelled"?`${color2.strikethrough(color2.dim(r))}`:i==="active-selected"?`${color2.green(b)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="submitted"?`${color2.dim(r)}`:`${color2.dim(B)} ${color2.dim(r)}`};return new vD({options:s.options,initialValues:s.initialValues,required:s.required??true,cursorAt:s.cursorAt,validate(t){if(this.required&&t.length===0)return `Please select at least one option.
|
|
387
|
-
${color2.reset(color2.dim(`Press ${color2.gray(color2.bgWhite(color2.inverse(" space ")))} to select, ${color2.gray(color2.bgWhite(color2.inverse(" enter ")))} to submit`))}`},render(){let t=`${color2.gray(a)}
|
|
388
|
-
${y(this.state)} ${s.message}
|
|
389
|
-
`;const i=(r,o)=>{const c=this.value.includes(r.value);return o&&c?n(r,"active-selected"):c?n(r,"selected"):n(r,o?"active":"inactive")};switch(this.state){case "submit":return `${t}${color2.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>n(r,"submitted")).join(color2.dim(", "))||color2.dim("none")}`;case "cancel":{const r=this.options.filter(({value:o})=>this.value.includes(o)).map(o=>n(o,"cancelled")).join(color2.dim(", "));return `${t}${color2.gray(a)} ${r.trim()?`${r}
|
|
390
|
-
${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
|
|
391
|
-
`).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
|
|
392
|
-
`);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
393
|
-
${color2.yellow(a)} `)+`
|
|
394
|
-
`+r+`
|
|
395
|
-
`}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
396
|
-
${color2.cyan(a)} `)}
|
|
397
|
-
${color2.cyan($)}
|
|
398
|
-
`}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
|
|
399
|
-
${s}
|
|
357
|
+
`).map(F=>lD(F,u,t)).join(`
|
|
358
|
+
`)}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(`
|
|
359
|
+
`),F=u.split(`
|
|
360
|
+
`),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(`
|
|
361
|
+
`),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(`
|
|
362
|
+
`).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(`
|
|
363
|
+
`);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(`
|
|
364
|
+
`).slice(F);this.output.write(s.join(`
|
|
365
|
+
`)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}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);});}}
|
|
366
|
+
|
|
367
|
+
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)}
|
|
368
|
+
${b(this.state)} ${t.message}
|
|
369
|
+
`,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()}
|
|
370
|
+
${color2.yellow(o)} ${i}
|
|
371
|
+
${color2.yellow(d)} ${color2.yellow(this.error)}
|
|
372
|
+
`;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()?`
|
|
373
|
+
${color2.gray(o)}`:""}`;default:return `${n}${color2.cyan(o)} ${i}
|
|
374
|
+
${color2.cyan(d)}
|
|
375
|
+
`}}}).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)}
|
|
376
|
+
${b(this.state)} ${t.message}
|
|
377
|
+
`;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")}
|
|
378
|
+
${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(`
|
|
379
|
+
${color2.cyan(o)} `)}
|
|
380
|
+
${color2.cyan(d)}
|
|
381
|
+
`}}}).prompt()},Me=(t="",n="")=>{const r=`
|
|
382
|
+
${t}
|
|
400
383
|
`.split(`
|
|
401
|
-
`),i=
|
|
402
|
-
`);process.stdout.write(`${color2.gray(
|
|
403
|
-
${color2.green(
|
|
404
|
-
${
|
|
405
|
-
${color2.gray(
|
|
406
|
-
`);},
|
|
407
|
-
|
|
408
|
-
`);},
|
|
409
|
-
`);},
|
|
410
|
-
${color2.gray(
|
|
411
|
-
|
|
412
|
-
`);},
|
|
413
|
-
`);
|
|
384
|
+
`),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(`
|
|
385
|
+
`);process.stdout.write(`${color2.gray(o)}
|
|
386
|
+
${color2.green(C)} ${color2.reset(n)} ${color2.gray(_.repeat(Math.max(s-i-1,1))+me)}
|
|
387
|
+
${c}
|
|
388
|
+
${color2.gray(de+_.repeat(s+2)+pe)}
|
|
389
|
+
`);},xe=(t="")=>{process.stdout.write(`${color2.gray(d)} ${color2.red(t)}
|
|
390
|
+
|
|
391
|
+
`);},Ie=(t="")=>{process.stdout.write(`${color2.gray(ue)} ${t}
|
|
392
|
+
`);},Se=(t="")=>{process.stdout.write(`${color2.gray(o)}
|
|
393
|
+
${color2.gray(d)} ${t}
|
|
394
|
+
|
|
395
|
+
`);},M={message:(t="",{symbol:n=color2.gray(o)}={})=>{const r=[`${color2.gray(o)}`];if(t){const[i,...s]=t.split(`
|
|
396
|
+
`);r.push(`${n} ${i}`,...s.map(c=>`${color2.gray(o)} ${c}`));}process.stdout.write(`${r.join(`
|
|
414
397
|
`)}
|
|
415
|
-
`);},info:
|
|
416
|
-
`);
|
|
417
|
-
`),
|
|
398
|
+
`);},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(`
|
|
399
|
+
`);const m=$.split(`
|
|
400
|
+
`);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)}
|
|
401
|
+
`);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)}
|
|
402
|
+
`):process.stdout.write(`${w} ${l}
|
|
403
|
+
`),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};
|
|
404
|
+
|
|
405
|
+
var shellQuote$1 = {};
|
|
406
|
+
|
|
407
|
+
var quote;
|
|
408
|
+
var hasRequiredQuote;
|
|
409
|
+
|
|
410
|
+
function requireQuote () {
|
|
411
|
+
if (hasRequiredQuote) return quote;
|
|
412
|
+
hasRequiredQuote = 1;
|
|
413
|
+
|
|
414
|
+
quote = function quote(xs) {
|
|
415
|
+
return xs.map(function (s) {
|
|
416
|
+
if (s === '') {
|
|
417
|
+
return '\'\'';
|
|
418
|
+
}
|
|
419
|
+
if (s && typeof s === 'object') {
|
|
420
|
+
return s.op.replace(/(.)/g, '\\$1');
|
|
421
|
+
}
|
|
422
|
+
if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
|
|
423
|
+
return "'" + s.replace(/(['])/g, '\\$1') + "'";
|
|
424
|
+
}
|
|
425
|
+
if ((/["'\s]/).test(s)) {
|
|
426
|
+
return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
|
|
427
|
+
}
|
|
428
|
+
return String(s).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2');
|
|
429
|
+
}).join(' ');
|
|
430
|
+
};
|
|
431
|
+
return quote;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
var parse;
|
|
435
|
+
var hasRequiredParse;
|
|
436
|
+
|
|
437
|
+
function requireParse () {
|
|
438
|
+
if (hasRequiredParse) return parse;
|
|
439
|
+
hasRequiredParse = 1;
|
|
440
|
+
|
|
441
|
+
// '<(' is process substitution operator and
|
|
442
|
+
// can be parsed the same as control operator
|
|
443
|
+
var CONTROL = '(?:' + [
|
|
444
|
+
'\\|\\|',
|
|
445
|
+
'\\&\\&',
|
|
446
|
+
';;',
|
|
447
|
+
'\\|\\&',
|
|
448
|
+
'\\<\\(',
|
|
449
|
+
'\\<\\<\\<',
|
|
450
|
+
'>>',
|
|
451
|
+
'>\\&',
|
|
452
|
+
'<\\&',
|
|
453
|
+
'[&;()|<>]'
|
|
454
|
+
].join('|') + ')';
|
|
455
|
+
var controlRE = new RegExp('^' + CONTROL + '$');
|
|
456
|
+
var META = '|&;()<> \\t';
|
|
457
|
+
var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"';
|
|
458
|
+
var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'';
|
|
459
|
+
var hash = /^#$/;
|
|
460
|
+
|
|
461
|
+
var SQ = "'";
|
|
462
|
+
var DQ = '"';
|
|
463
|
+
var DS = '$';
|
|
464
|
+
|
|
465
|
+
var TOKEN = '';
|
|
466
|
+
var mult = 0x100000000; // Math.pow(16, 8);
|
|
467
|
+
for (var i = 0; i < 4; i++) {
|
|
468
|
+
TOKEN += (mult * Math.random()).toString(16);
|
|
469
|
+
}
|
|
470
|
+
var startsWithToken = new RegExp('^' + TOKEN);
|
|
471
|
+
|
|
472
|
+
function matchAll(s, r) {
|
|
473
|
+
var origIndex = r.lastIndex;
|
|
474
|
+
|
|
475
|
+
var matches = [];
|
|
476
|
+
var matchObj;
|
|
477
|
+
|
|
478
|
+
while ((matchObj = r.exec(s))) {
|
|
479
|
+
matches.push(matchObj);
|
|
480
|
+
if (r.lastIndex === matchObj.index) {
|
|
481
|
+
r.lastIndex += 1;
|
|
482
|
+
}
|
|
483
|
+
}
|
|
484
|
+
|
|
485
|
+
r.lastIndex = origIndex;
|
|
486
|
+
|
|
487
|
+
return matches;
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
function getVar(env, pre, key) {
|
|
491
|
+
var r = typeof env === 'function' ? env(key) : env[key];
|
|
492
|
+
if (typeof r === 'undefined' && key != '') {
|
|
493
|
+
r = '';
|
|
494
|
+
} else if (typeof r === 'undefined') {
|
|
495
|
+
r = '$';
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
if (typeof r === 'object') {
|
|
499
|
+
return pre + TOKEN + JSON.stringify(r) + TOKEN;
|
|
500
|
+
}
|
|
501
|
+
return pre + r;
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
function parseInternal(string, env, opts) {
|
|
505
|
+
if (!opts) {
|
|
506
|
+
opts = {};
|
|
507
|
+
}
|
|
508
|
+
var BS = opts.escape || '\\';
|
|
509
|
+
var BAREWORD = '(\\' + BS + '[\'"' + META + ']|[^\\s\'"' + META + '])+';
|
|
510
|
+
|
|
511
|
+
var chunker = new RegExp([
|
|
512
|
+
'(' + CONTROL + ')', // control chars
|
|
513
|
+
'(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+'
|
|
514
|
+
].join('|'), 'g');
|
|
515
|
+
|
|
516
|
+
var matches = matchAll(string, chunker);
|
|
517
|
+
|
|
518
|
+
if (matches.length === 0) {
|
|
519
|
+
return [];
|
|
520
|
+
}
|
|
521
|
+
if (!env) {
|
|
522
|
+
env = {};
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
var commented = false;
|
|
526
|
+
|
|
527
|
+
return matches.map(function (match) {
|
|
528
|
+
var s = match[0];
|
|
529
|
+
if (!s || commented) {
|
|
530
|
+
return void undefined;
|
|
531
|
+
}
|
|
532
|
+
if (controlRE.test(s)) {
|
|
533
|
+
return { op: s };
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Hand-written scanner/parser for Bash quoting rules:
|
|
537
|
+
//
|
|
538
|
+
// 1. inside single quotes, all characters are printed literally.
|
|
539
|
+
// 2. inside double quotes, all characters are printed literally
|
|
540
|
+
// except variables prefixed by '$' and backslashes followed by
|
|
541
|
+
// either a double quote or another backslash.
|
|
542
|
+
// 3. outside of any quotes, backslashes are treated as escape
|
|
543
|
+
// characters and not printed (unless they are themselves escaped)
|
|
544
|
+
// 4. quote context can switch mid-token if there is no whitespace
|
|
545
|
+
// between the two quote contexts (e.g. all'one'"token" parses as
|
|
546
|
+
// "allonetoken")
|
|
547
|
+
var quote = false;
|
|
548
|
+
var esc = false;
|
|
549
|
+
var out = '';
|
|
550
|
+
var isGlob = false;
|
|
551
|
+
var i;
|
|
552
|
+
|
|
553
|
+
function parseEnvVar() {
|
|
554
|
+
i += 1;
|
|
555
|
+
var varend;
|
|
556
|
+
var varname;
|
|
557
|
+
var char = s.charAt(i);
|
|
558
|
+
|
|
559
|
+
if (char === '{') {
|
|
560
|
+
i += 1;
|
|
561
|
+
if (s.charAt(i) === '}') {
|
|
562
|
+
throw new Error('Bad substitution: ' + s.slice(i - 2, i + 1));
|
|
563
|
+
}
|
|
564
|
+
varend = s.indexOf('}', i);
|
|
565
|
+
if (varend < 0) {
|
|
566
|
+
throw new Error('Bad substitution: ' + s.slice(i));
|
|
567
|
+
}
|
|
568
|
+
varname = s.slice(i, varend);
|
|
569
|
+
i = varend;
|
|
570
|
+
} else if ((/[*@#?$!_-]/).test(char)) {
|
|
571
|
+
varname = char;
|
|
572
|
+
i += 1;
|
|
573
|
+
} else {
|
|
574
|
+
var slicedFromI = s.slice(i);
|
|
575
|
+
varend = slicedFromI.match(/[^\w\d_]/);
|
|
576
|
+
if (!varend) {
|
|
577
|
+
varname = slicedFromI;
|
|
578
|
+
i = s.length;
|
|
579
|
+
} else {
|
|
580
|
+
varname = slicedFromI.slice(0, varend.index);
|
|
581
|
+
i += varend.index - 1;
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
return getVar(env, '', varname);
|
|
585
|
+
}
|
|
586
|
+
|
|
587
|
+
for (i = 0; i < s.length; i++) {
|
|
588
|
+
var c = s.charAt(i);
|
|
589
|
+
isGlob = isGlob || (!quote && (c === '*' || c === '?'));
|
|
590
|
+
if (esc) {
|
|
591
|
+
out += c;
|
|
592
|
+
esc = false;
|
|
593
|
+
} else if (quote) {
|
|
594
|
+
if (c === quote) {
|
|
595
|
+
quote = false;
|
|
596
|
+
} else if (quote == SQ) {
|
|
597
|
+
out += c;
|
|
598
|
+
} else { // Double quote
|
|
599
|
+
if (c === BS) {
|
|
600
|
+
i += 1;
|
|
601
|
+
c = s.charAt(i);
|
|
602
|
+
if (c === DQ || c === BS || c === DS) {
|
|
603
|
+
out += c;
|
|
604
|
+
} else {
|
|
605
|
+
out += BS + c;
|
|
606
|
+
}
|
|
607
|
+
} else if (c === DS) {
|
|
608
|
+
out += parseEnvVar();
|
|
609
|
+
} else {
|
|
610
|
+
out += c;
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
} else if (c === DQ || c === SQ) {
|
|
614
|
+
quote = c;
|
|
615
|
+
} else if (controlRE.test(c)) {
|
|
616
|
+
return { op: s };
|
|
617
|
+
} else if (hash.test(c)) {
|
|
618
|
+
commented = true;
|
|
619
|
+
var commentObj = { comment: string.slice(match.index + i + 1) };
|
|
620
|
+
if (out.length) {
|
|
621
|
+
return [out, commentObj];
|
|
622
|
+
}
|
|
623
|
+
return [commentObj];
|
|
624
|
+
} else if (c === BS) {
|
|
625
|
+
esc = true;
|
|
626
|
+
} else if (c === DS) {
|
|
627
|
+
out += parseEnvVar();
|
|
628
|
+
} else {
|
|
629
|
+
out += c;
|
|
630
|
+
}
|
|
631
|
+
}
|
|
632
|
+
|
|
633
|
+
if (isGlob) {
|
|
634
|
+
return { op: 'glob', pattern: out };
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
return out;
|
|
638
|
+
}).reduce(function (prev, arg) { // finalize parsed arguments
|
|
639
|
+
// TODO: replace this whole reduce with a concat
|
|
640
|
+
return typeof arg === 'undefined' ? prev : prev.concat(arg);
|
|
641
|
+
}, []);
|
|
642
|
+
}
|
|
643
|
+
|
|
644
|
+
parse = function parse(s, env, opts) {
|
|
645
|
+
var mapped = parseInternal(s, env, opts);
|
|
646
|
+
if (typeof env !== 'function') {
|
|
647
|
+
return mapped;
|
|
648
|
+
}
|
|
649
|
+
return mapped.reduce(function (acc, s) {
|
|
650
|
+
if (typeof s === 'object') {
|
|
651
|
+
return acc.concat(s);
|
|
652
|
+
}
|
|
653
|
+
var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));
|
|
654
|
+
if (xs.length === 1) {
|
|
655
|
+
return acc.concat(xs[0]);
|
|
656
|
+
}
|
|
657
|
+
return acc.concat(xs.filter(Boolean).map(function (x) {
|
|
658
|
+
if (startsWithToken.test(x)) {
|
|
659
|
+
return JSON.parse(x.split(TOKEN)[1]);
|
|
660
|
+
}
|
|
661
|
+
return x;
|
|
662
|
+
}));
|
|
663
|
+
}, []);
|
|
664
|
+
};
|
|
665
|
+
return parse;
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
var hasRequiredShellQuote;
|
|
669
|
+
|
|
670
|
+
function requireShellQuote () {
|
|
671
|
+
if (hasRequiredShellQuote) return shellQuote$1;
|
|
672
|
+
hasRequiredShellQuote = 1;
|
|
673
|
+
|
|
674
|
+
shellQuote$1.quote = requireQuote();
|
|
675
|
+
shellQuote$1.parse = requireParse();
|
|
676
|
+
return shellQuote$1;
|
|
677
|
+
}
|
|
678
|
+
|
|
679
|
+
var shellQuoteExports = requireShellQuote();
|
|
680
|
+
var shellQuote = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
|
|
418
681
|
|
|
419
682
|
// eslint-disable-next-line no-warning-comments
|
|
420
683
|
// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
|
|
@@ -549,18 +812,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
|
|
|
549
812
|
yellowBright: yellowBright
|
|
550
813
|
});
|
|
551
814
|
|
|
552
|
-
const isUnicodeSupported =
|
|
815
|
+
const isUnicodeSupported = y$1.platform !== 'win32'
|
|
816
|
+
|| Boolean(y$1.env.WT_SESSION) // Windows Terminal
|
|
817
|
+
|| y$1.env.TERM_PROGRAM === 'vscode';
|
|
553
818
|
|
|
554
819
|
const isInteractive = stream => Boolean(
|
|
555
820
|
stream.isTTY
|
|
556
|
-
&&
|
|
557
|
-
&& !('CI' in
|
|
821
|
+
&& y$1.env.TERM !== 'dumb'
|
|
822
|
+
&& !('CI' in y$1.env),
|
|
558
823
|
);
|
|
559
824
|
|
|
560
825
|
const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
|
|
561
826
|
const successSymbol = green(isUnicodeSupported ? '✔' : '√');
|
|
562
827
|
const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
|
|
563
|
-
const errorSymbol = red(isUnicodeSupported ? '
|
|
828
|
+
const errorSymbol = red(isUnicodeSupported ? '✖' : '×');
|
|
564
829
|
|
|
565
830
|
const defaultSpinner = {
|
|
566
831
|
frames: isUnicodeSupported
|
|
@@ -603,7 +868,7 @@ class YoctoSpinner {
|
|
|
603
868
|
this.#frames = spinner.frames;
|
|
604
869
|
this.#interval = spinner.interval;
|
|
605
870
|
this.#text = options.text ?? '';
|
|
606
|
-
this.#stream = options.stream ??
|
|
871
|
+
this.#stream = options.stream ?? y$1.stderr;
|
|
607
872
|
this.#color = options.color ?? 'cyan';
|
|
608
873
|
this.#isInteractive = isInteractive(this.#stream);
|
|
609
874
|
this.#exitHandlerBound = this.#exitHandler.bind(this);
|
|
@@ -675,8 +940,8 @@ class YoctoSpinner {
|
|
|
675
940
|
return this.#text;
|
|
676
941
|
}
|
|
677
942
|
|
|
678
|
-
set text(value
|
|
679
|
-
this.#text = value;
|
|
943
|
+
set text(value) {
|
|
944
|
+
this.#text = value ?? '';
|
|
680
945
|
this.#render();
|
|
681
946
|
}
|
|
682
947
|
|
|
@@ -740,7 +1005,7 @@ class YoctoSpinner {
|
|
|
740
1005
|
|
|
741
1006
|
#lineCount(text) {
|
|
742
1007
|
const width = this.#stream.columns ?? 80;
|
|
743
|
-
const lines = text.split('\n');
|
|
1008
|
+
const lines = stripVTControlCharacters(text).split('\n');
|
|
744
1009
|
|
|
745
1010
|
let lineCount = 0;
|
|
746
1011
|
for (const line of lines) {
|
|
@@ -763,13 +1028,13 @@ class YoctoSpinner {
|
|
|
763
1028
|
}
|
|
764
1029
|
|
|
765
1030
|
#subscribeToProcessEvents() {
|
|
766
|
-
|
|
767
|
-
|
|
1031
|
+
y$1.once('SIGINT', this.#exitHandlerBound);
|
|
1032
|
+
y$1.once('SIGTERM', this.#exitHandlerBound);
|
|
768
1033
|
}
|
|
769
1034
|
|
|
770
1035
|
#unsubscribeFromProcessEvents() {
|
|
771
|
-
|
|
772
|
-
|
|
1036
|
+
y$1.off('SIGINT', this.#exitHandlerBound);
|
|
1037
|
+
y$1.off('SIGTERM', this.#exitHandlerBound);
|
|
773
1038
|
}
|
|
774
1039
|
|
|
775
1040
|
#exitHandler(signal) {
|
|
@@ -780,7 +1045,7 @@ class YoctoSpinner {
|
|
|
780
1045
|
// SIGINT: 128 + 2
|
|
781
1046
|
// SIGTERM: 128 + 15
|
|
782
1047
|
const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
|
|
783
|
-
|
|
1048
|
+
y$1.exit(exitCode);
|
|
784
1049
|
}
|
|
785
1050
|
}
|
|
786
1051
|
|
|
@@ -789,46 +1054,86 @@ function yoctoSpinner(options) {
|
|
|
789
1054
|
}
|
|
790
1055
|
|
|
791
1056
|
var LogLevel = {
|
|
792
|
-
INFO: "info"
|
|
793
|
-
|
|
794
|
-
|
|
1057
|
+
INFO: "info",
|
|
1058
|
+
ERROR: "error"};
|
|
1059
|
+
var MastraLogger = class {
|
|
1060
|
+
name;
|
|
1061
|
+
level;
|
|
795
1062
|
transports;
|
|
796
1063
|
constructor(options = {}) {
|
|
797
|
-
this.
|
|
798
|
-
|
|
799
|
-
this.
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
1064
|
+
this.name = options.name || "Mastra";
|
|
1065
|
+
this.level = options.level || LogLevel.ERROR;
|
|
1066
|
+
this.transports = new Map(Object.entries(options.transports || {}));
|
|
1067
|
+
}
|
|
1068
|
+
getTransports() {
|
|
1069
|
+
return this.transports;
|
|
1070
|
+
}
|
|
1071
|
+
trackException(_error) {
|
|
1072
|
+
}
|
|
1073
|
+
async getLogs(transportId, params) {
|
|
1074
|
+
if (!transportId || !this.transports.has(transportId)) {
|
|
1075
|
+
return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
|
|
1076
|
+
}
|
|
1077
|
+
return this.transports.get(transportId).getLogs(params) ?? {
|
|
1078
|
+
logs: [],
|
|
1079
|
+
total: 0,
|
|
1080
|
+
page: params?.page ?? 1,
|
|
1081
|
+
perPage: params?.perPage ?? 100,
|
|
1082
|
+
hasMore: false
|
|
1083
|
+
};
|
|
1084
|
+
}
|
|
1085
|
+
async getLogsByRunId({
|
|
1086
|
+
transportId,
|
|
1087
|
+
runId,
|
|
1088
|
+
fromDate,
|
|
1089
|
+
toDate,
|
|
1090
|
+
logLevel,
|
|
1091
|
+
filters,
|
|
1092
|
+
page,
|
|
1093
|
+
perPage
|
|
1094
|
+
}) {
|
|
1095
|
+
if (!transportId || !this.transports.has(transportId) || !runId) {
|
|
1096
|
+
return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
|
|
1097
|
+
}
|
|
1098
|
+
return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
|
|
1099
|
+
logs: [],
|
|
1100
|
+
total: 0,
|
|
1101
|
+
page: page ?? 1,
|
|
1102
|
+
perPage: perPage ?? 100,
|
|
1103
|
+
hasMore: false
|
|
1104
|
+
};
|
|
1105
|
+
}
|
|
1106
|
+
};
|
|
1107
|
+
|
|
1108
|
+
var PinoLogger = class extends MastraLogger {
|
|
1109
|
+
logger;
|
|
1110
|
+
constructor(options = {}) {
|
|
1111
|
+
super(options);
|
|
1112
|
+
let prettyStream = void 0;
|
|
1113
|
+
if (!options.overrideDefaultTransports) {
|
|
1114
|
+
prettyStream = pretty({
|
|
812
1115
|
colorize: true,
|
|
813
1116
|
levelFirst: true,
|
|
814
1117
|
ignore: "pid,hostname",
|
|
815
1118
|
colorizeObjects: true,
|
|
816
1119
|
translateTime: "SYS:standard",
|
|
817
1120
|
singleLine: false
|
|
818
|
-
})
|
|
1121
|
+
});
|
|
1122
|
+
}
|
|
1123
|
+
const transportsAry = [...this.getTransports().entries()];
|
|
1124
|
+
this.logger = pino(
|
|
1125
|
+
{
|
|
1126
|
+
name: options.name || "app",
|
|
1127
|
+
level: options.level || LogLevel.INFO,
|
|
1128
|
+
formatters: options.formatters
|
|
1129
|
+
},
|
|
1130
|
+
options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
|
|
819
1131
|
...transportsAry.map(([, transport]) => ({
|
|
820
1132
|
stream: transport,
|
|
821
1133
|
level: options.level || LogLevel.INFO
|
|
822
1134
|
})),
|
|
823
1135
|
{
|
|
824
|
-
stream:
|
|
825
|
-
colorize: true,
|
|
826
|
-
levelFirst: true,
|
|
827
|
-
ignore: "pid,hostname",
|
|
828
|
-
colorizeObjects: true,
|
|
829
|
-
translateTime: "SYS:standard",
|
|
830
|
-
singleLine: false
|
|
831
|
-
}),
|
|
1136
|
+
stream: prettyStream,
|
|
832
1137
|
level: options.level || LogLevel.INFO
|
|
833
1138
|
}
|
|
834
1139
|
])
|
|
@@ -846,31 +1151,7 @@ var Logger = class {
|
|
|
846
1151
|
error(message, args = {}) {
|
|
847
1152
|
this.logger.error(args, message);
|
|
848
1153
|
}
|
|
849
|
-
// Stream creation for process output handling
|
|
850
|
-
createStream() {
|
|
851
|
-
return new Transform({
|
|
852
|
-
transform: (chunk, _encoding, callback) => {
|
|
853
|
-
const line = chunk.toString().trim();
|
|
854
|
-
if (line) {
|
|
855
|
-
this.info(line);
|
|
856
|
-
}
|
|
857
|
-
callback(null, chunk);
|
|
858
|
-
}
|
|
859
|
-
});
|
|
860
|
-
}
|
|
861
|
-
async getLogs(transportId) {
|
|
862
|
-
if (!transportId || !this.transports[transportId]) {
|
|
863
|
-
return [];
|
|
864
|
-
}
|
|
865
|
-
return this.transports[transportId].getLogs();
|
|
866
|
-
}
|
|
867
|
-
async getLogsByRunId({ runId, transportId }) {
|
|
868
|
-
return this.transports[transportId]?.getLogsByRunId({ runId });
|
|
869
|
-
}
|
|
870
1154
|
};
|
|
871
|
-
function createLogger(options) {
|
|
872
|
-
return new Logger(options);
|
|
873
|
-
}
|
|
874
1155
|
|
|
875
1156
|
var DepsService = class {
|
|
876
1157
|
packageManager;
|
|
@@ -880,11 +1161,11 @@ var DepsService = class {
|
|
|
880
1161
|
findLockFile(dir) {
|
|
881
1162
|
const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
|
|
882
1163
|
for (const file of lockFiles) {
|
|
883
|
-
if (fs3__default__default.existsSync(
|
|
1164
|
+
if (fs3__default__default.existsSync(path2.join(dir, file))) {
|
|
884
1165
|
return file;
|
|
885
1166
|
}
|
|
886
1167
|
}
|
|
887
|
-
const parentDir =
|
|
1168
|
+
const parentDir = path2.resolve(dir, "..");
|
|
888
1169
|
if (parentDir !== dir) {
|
|
889
1170
|
return this.findLockFile(parentDir);
|
|
890
1171
|
}
|
|
@@ -921,7 +1202,7 @@ var DepsService = class {
|
|
|
921
1202
|
}
|
|
922
1203
|
async checkDependencies(dependencies) {
|
|
923
1204
|
try {
|
|
924
|
-
const packageJsonPath =
|
|
1205
|
+
const packageJsonPath = path2.join(process.cwd(), "package.json");
|
|
925
1206
|
try {
|
|
926
1207
|
await fs4.access(packageJsonPath);
|
|
927
1208
|
} catch {
|
|
@@ -941,7 +1222,7 @@ var DepsService = class {
|
|
|
941
1222
|
}
|
|
942
1223
|
async getProjectName() {
|
|
943
1224
|
try {
|
|
944
|
-
const packageJsonPath =
|
|
1225
|
+
const packageJsonPath = path2.join(process.cwd(), "package.json");
|
|
945
1226
|
const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
|
|
946
1227
|
const pkg = JSON.parse(packageJson);
|
|
947
1228
|
return pkg.name;
|
|
@@ -952,7 +1233,7 @@ var DepsService = class {
|
|
|
952
1233
|
async getPackageVersion() {
|
|
953
1234
|
const __filename = fileURLToPath(import.meta.url);
|
|
954
1235
|
const __dirname = dirname(__filename);
|
|
955
|
-
const pkgJsonPath =
|
|
1236
|
+
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
956
1237
|
const content = await fsExtra3.readJSON(pkgJsonPath);
|
|
957
1238
|
return content.version;
|
|
958
1239
|
}
|
|
@@ -1000,57 +1281,85 @@ function getPackageManagerInstallCommand(pm) {
|
|
|
1000
1281
|
return "install";
|
|
1001
1282
|
}
|
|
1002
1283
|
}
|
|
1003
|
-
var args = ["-y", "@mastra/mcp-docs-server
|
|
1004
|
-
var
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1284
|
+
var args = ["-y", "@mastra/mcp-docs-server"];
|
|
1285
|
+
var createMcpConfig = (editor) => {
|
|
1286
|
+
if (editor === "vscode") {
|
|
1287
|
+
return {
|
|
1288
|
+
servers: {
|
|
1289
|
+
mastra: process.platform === `win32` ? {
|
|
1290
|
+
command: "cmd",
|
|
1291
|
+
args: ["/c", "npx", ...args],
|
|
1292
|
+
type: "stdio"
|
|
1293
|
+
} : {
|
|
1294
|
+
command: "npx",
|
|
1295
|
+
args,
|
|
1296
|
+
type: "stdio"
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
};
|
|
1013
1300
|
}
|
|
1301
|
+
return {
|
|
1302
|
+
mcpServers: {
|
|
1303
|
+
mastra: {
|
|
1304
|
+
command: "npx",
|
|
1305
|
+
args
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
};
|
|
1014
1309
|
};
|
|
1015
|
-
function makeConfig(original) {
|
|
1310
|
+
function makeConfig(original, editor) {
|
|
1311
|
+
if (editor === "vscode") {
|
|
1312
|
+
return {
|
|
1313
|
+
...original,
|
|
1314
|
+
servers: {
|
|
1315
|
+
...original?.servers || {},
|
|
1316
|
+
...createMcpConfig(editor).servers
|
|
1317
|
+
}
|
|
1318
|
+
};
|
|
1319
|
+
}
|
|
1016
1320
|
return {
|
|
1017
1321
|
...original,
|
|
1018
1322
|
mcpServers: {
|
|
1019
1323
|
...original?.mcpServers || {},
|
|
1020
|
-
...
|
|
1324
|
+
...createMcpConfig(editor).mcpServers
|
|
1021
1325
|
}
|
|
1022
1326
|
};
|
|
1023
1327
|
}
|
|
1024
|
-
async function writeMergedConfig(configPath) {
|
|
1328
|
+
async function writeMergedConfig(configPath, editor) {
|
|
1025
1329
|
const configExists = existsSync(configPath);
|
|
1026
|
-
const config = makeConfig(configExists ? await readJSON(configPath) : {});
|
|
1330
|
+
const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
|
|
1027
1331
|
await ensureFile(configPath);
|
|
1028
1332
|
await writeJSON(configPath, config, {
|
|
1029
1333
|
spaces: 2
|
|
1030
1334
|
});
|
|
1031
1335
|
}
|
|
1032
|
-
var windsurfGlobalMCPConfigPath =
|
|
1033
|
-
var cursorGlobalMCPConfigPath =
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1336
|
+
var windsurfGlobalMCPConfigPath = path2.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
|
|
1337
|
+
var cursorGlobalMCPConfigPath = path2.join(os.homedir(), ".cursor", "mcp.json");
|
|
1338
|
+
path2.join(process.cwd(), ".vscode", "mcp.json");
|
|
1339
|
+
var vscodeGlobalMCPConfigPath = path2.join(
|
|
1340
|
+
os.homedir(),
|
|
1341
|
+
process.platform === "win32" ? path2.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path2.join("Library", "Application Support", "Code", "User", "settings.json") : path2.join(".config", "Code", "User", "settings.json")
|
|
1342
|
+
);
|
|
1343
|
+
async function installMastraDocsMCPServer({ editor, directory }) {
|
|
1038
1344
|
if (editor === `cursor`) {
|
|
1039
|
-
await writeMergedConfig(
|
|
1345
|
+
await writeMergedConfig(path2.join(directory, ".cursor", "mcp.json"), "cursor");
|
|
1346
|
+
}
|
|
1347
|
+
if (editor === `vscode`) {
|
|
1348
|
+
await writeMergedConfig(path2.join(directory, ".vscode", "mcp.json"), "vscode");
|
|
1040
1349
|
}
|
|
1041
1350
|
if (editor === `cursor-global`) {
|
|
1042
1351
|
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
1043
1352
|
if (alreadyInstalled) {
|
|
1044
1353
|
return;
|
|
1045
1354
|
}
|
|
1046
|
-
await writeMergedConfig(cursorGlobalMCPConfigPath);
|
|
1355
|
+
await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
|
|
1047
1356
|
}
|
|
1048
1357
|
if (editor === `windsurf`) {
|
|
1049
1358
|
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
1050
1359
|
if (alreadyInstalled) {
|
|
1051
1360
|
return;
|
|
1052
1361
|
}
|
|
1053
|
-
await writeMergedConfig(windsurfGlobalMCPConfigPath);
|
|
1362
|
+
await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
|
|
1054
1363
|
}
|
|
1055
1364
|
}
|
|
1056
1365
|
async function globalMCPIsAlreadyInstalled(editor) {
|
|
@@ -1059,19 +1368,28 @@ async function globalMCPIsAlreadyInstalled(editor) {
|
|
|
1059
1368
|
configPath = windsurfGlobalMCPConfigPath;
|
|
1060
1369
|
} else if (editor === "cursor-global") {
|
|
1061
1370
|
configPath = cursorGlobalMCPConfigPath;
|
|
1371
|
+
} else if (editor === "vscode") {
|
|
1372
|
+
configPath = vscodeGlobalMCPConfigPath;
|
|
1062
1373
|
}
|
|
1063
1374
|
if (!configPath || !existsSync(configPath)) {
|
|
1064
1375
|
return false;
|
|
1065
1376
|
}
|
|
1066
1377
|
try {
|
|
1067
1378
|
const configContents = await readJSON(configPath);
|
|
1379
|
+
if (!configContents) return false;
|
|
1380
|
+
if (editor === "vscode") {
|
|
1381
|
+
if (!configContents.servers) return false;
|
|
1382
|
+
const hasMastraMCP2 = Object.values(configContents.servers).some(
|
|
1383
|
+
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1384
|
+
);
|
|
1385
|
+
return hasMastraMCP2;
|
|
1386
|
+
}
|
|
1068
1387
|
if (!configContents?.mcpServers) return false;
|
|
1069
1388
|
const hasMastraMCP = Object.values(configContents.mcpServers).some(
|
|
1070
1389
|
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1071
1390
|
);
|
|
1072
1391
|
return hasMastraMCP;
|
|
1073
|
-
} catch
|
|
1074
|
-
console.error(e);
|
|
1392
|
+
} catch {
|
|
1075
1393
|
return false;
|
|
1076
1394
|
}
|
|
1077
1395
|
}
|
|
@@ -1146,8 +1464,8 @@ var FileService = class {
|
|
|
1146
1464
|
*/
|
|
1147
1465
|
async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
|
|
1148
1466
|
const __filename = fileURLToPath(import.meta.url);
|
|
1149
|
-
const __dirname =
|
|
1150
|
-
const filePath =
|
|
1467
|
+
const __dirname = path2.dirname(__filename);
|
|
1468
|
+
const filePath = path2.resolve(__dirname, "starter-files", inputFile);
|
|
1151
1469
|
const fileString = fs3__default__default.readFileSync(filePath, "utf8");
|
|
1152
1470
|
if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
|
|
1153
1471
|
console.log(`${outputFilePath} already exists`);
|
|
@@ -1157,7 +1475,7 @@ var FileService = class {
|
|
|
1157
1475
|
return true;
|
|
1158
1476
|
}
|
|
1159
1477
|
async setupEnvFile({ dbUrl }) {
|
|
1160
|
-
const envPath =
|
|
1478
|
+
const envPath = path2.join(process.cwd(), ".env.development");
|
|
1161
1479
|
await fsExtra3.ensureFile(envPath);
|
|
1162
1480
|
const fileEnvService = new FileEnvService(envPath);
|
|
1163
1481
|
await fileEnvService.setEnvValue("DB_URL", dbUrl);
|
|
@@ -1181,9 +1499,9 @@ var FileService = class {
|
|
|
1181
1499
|
fs3__default__default.writeFileSync(filePath, fileContent);
|
|
1182
1500
|
}
|
|
1183
1501
|
};
|
|
1184
|
-
|
|
1502
|
+
new PinoLogger({
|
|
1185
1503
|
name: "Mastra CLI",
|
|
1186
|
-
level: "
|
|
1504
|
+
level: "info"
|
|
1187
1505
|
});
|
|
1188
1506
|
var exec = util.promisify(child_process.exec);
|
|
1189
1507
|
var getAISDKPackage = (llmProvider) => {
|
|
@@ -1207,7 +1525,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1207
1525
|
let modelItem = "";
|
|
1208
1526
|
if (llmProvider === "openai") {
|
|
1209
1527
|
providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
|
|
1210
|
-
modelItem = `openai('gpt-4o')`;
|
|
1528
|
+
modelItem = `openai('gpt-4o-mini')`;
|
|
1211
1529
|
} else if (llmProvider === "anthropic") {
|
|
1212
1530
|
providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
|
|
1213
1531
|
modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
|
|
@@ -1216,7 +1534,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1216
1534
|
modelItem = `groq('llama-3.3-70b-versatile')`;
|
|
1217
1535
|
} else if (llmProvider === "google") {
|
|
1218
1536
|
providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
|
|
1219
|
-
modelItem = `google('gemini-
|
|
1537
|
+
modelItem = `google('gemini-2.5-pro-exp-03-25')`;
|
|
1220
1538
|
} else if (llmProvider === "cerebras") {
|
|
1221
1539
|
providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
|
|
1222
1540
|
modelItem = `cerebras('llama-3.3-70b')`;
|
|
@@ -1226,14 +1544,16 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1226
1544
|
async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
1227
1545
|
const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
|
|
1228
1546
|
const instructions = `
|
|
1229
|
-
You are a helpful weather assistant that provides accurate weather information.
|
|
1547
|
+
You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
|
|
1230
1548
|
|
|
1231
1549
|
Your primary function is to help users get weather details for specific locations. When responding:
|
|
1232
1550
|
- Always ask for a location if none is provided
|
|
1233
|
-
- If the location name isn
|
|
1551
|
+
- If the location name isn't in English, please translate it
|
|
1234
1552
|
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
|
|
1235
1553
|
- Include relevant details like humidity, wind conditions, and precipitation
|
|
1236
1554
|
- Keep responses concise but informative
|
|
1555
|
+
- If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
|
|
1556
|
+
- If the user asks for activities, respond in the format they request.
|
|
1237
1557
|
|
|
1238
1558
|
${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
|
|
1239
1559
|
`;
|
|
@@ -1242,7 +1562,7 @@ ${providerImport}
|
|
|
1242
1562
|
import { Agent } from '@mastra/core/agent';
|
|
1243
1563
|
import { Memory } from '@mastra/memory';
|
|
1244
1564
|
import { LibSQLStore } from '@mastra/libsql';
|
|
1245
|
-
${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
|
|
1565
|
+
${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
|
|
1246
1566
|
|
|
1247
1567
|
export const weatherAgent = new Agent({
|
|
1248
1568
|
name: 'Weather Agent',
|
|
@@ -1252,14 +1572,7 @@ export const weatherAgent = new Agent({
|
|
|
1252
1572
|
memory: new Memory({
|
|
1253
1573
|
storage: new LibSQLStore({
|
|
1254
1574
|
url: "file:../mastra.db", // path is relative to the .mastra/output directory
|
|
1255
|
-
})
|
|
1256
|
-
options: {
|
|
1257
|
-
lastMessages: 10,
|
|
1258
|
-
semanticRecall: false,
|
|
1259
|
-
threads: {
|
|
1260
|
-
generateTitle: false
|
|
1261
|
-
}
|
|
1262
|
-
}
|
|
1575
|
+
})
|
|
1263
1576
|
})
|
|
1264
1577
|
});
|
|
1265
1578
|
`;
|
|
@@ -1270,139 +1583,156 @@ export const weatherAgent = new Agent({
|
|
|
1270
1583
|
await fs4.writeFile(destPath, "");
|
|
1271
1584
|
await fs4.writeFile(destPath, formattedContent);
|
|
1272
1585
|
}
|
|
1273
|
-
async function writeWorkflowSample(destPath
|
|
1274
|
-
const {
|
|
1275
|
-
const content = `${providerImport}
|
|
1276
|
-
import { Agent } from '@mastra/core/agent';
|
|
1277
|
-
import { Step, Workflow } from '@mastra/core/workflows';
|
|
1586
|
+
async function writeWorkflowSample(destPath) {
|
|
1587
|
+
const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1278
1588
|
import { z } from 'zod';
|
|
1279
1589
|
|
|
1280
|
-
const
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
For each day in the forecast, structure your response exactly as follows:
|
|
1289
|
-
|
|
1290
|
-
\u{1F4C5} [Day, Month Date, Year]
|
|
1291
|
-
\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
|
|
1292
|
-
|
|
1293
|
-
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1294
|
-
\u2022 Conditions: [brief description]
|
|
1295
|
-
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1296
|
-
\u2022 Precipitation: [X% chance]
|
|
1297
|
-
|
|
1298
|
-
\u{1F305} MORNING ACTIVITIES
|
|
1299
|
-
Outdoor:
|
|
1300
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1301
|
-
Best timing: [specific time range]
|
|
1302
|
-
Note: [relevant weather consideration]
|
|
1303
|
-
|
|
1304
|
-
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1305
|
-
Outdoor:
|
|
1306
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1307
|
-
Best timing: [specific time range]
|
|
1308
|
-
Note: [relevant weather consideration]
|
|
1309
|
-
|
|
1310
|
-
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1311
|
-
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1312
|
-
Ideal for: [weather condition that would trigger this alternative]
|
|
1313
|
-
|
|
1314
|
-
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1315
|
-
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1316
|
-
|
|
1317
|
-
Guidelines:
|
|
1318
|
-
- Suggest 2-3 time-specific outdoor activities per day
|
|
1319
|
-
- Include 1-2 indoor backup options
|
|
1320
|
-
- For precipitation >50%, lead with indoor activities
|
|
1321
|
-
- All activities must be specific to the location
|
|
1322
|
-
- Include specific venues, trails, or locations
|
|
1323
|
-
- Consider activity intensity based on temperature
|
|
1324
|
-
- Keep descriptions concise but informative
|
|
1325
|
-
|
|
1326
|
-
Maintain this exact formatting for consistency, using the emoji and section headers as shown.
|
|
1327
|
-
\`,
|
|
1328
|
-
});
|
|
1590
|
+
const forecastSchema = z.object({
|
|
1591
|
+
date: z.string(),
|
|
1592
|
+
maxTemp: z.number(),
|
|
1593
|
+
minTemp: z.number(),
|
|
1594
|
+
precipitationChance: z.number(),
|
|
1595
|
+
condition: z.string(),
|
|
1596
|
+
location: z.string(),
|
|
1597
|
+
})
|
|
1329
1598
|
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1599
|
+
function getWeatherCondition(code: number): string {
|
|
1600
|
+
const conditions: Record<number, string> = {
|
|
1601
|
+
0: 'Clear sky',
|
|
1602
|
+
1: 'Mainly clear',
|
|
1603
|
+
2: 'Partly cloudy',
|
|
1604
|
+
3: 'Overcast',
|
|
1605
|
+
45: 'Foggy',
|
|
1606
|
+
48: 'Depositing rime fog',
|
|
1607
|
+
51: 'Light drizzle',
|
|
1608
|
+
53: 'Moderate drizzle',
|
|
1609
|
+
55: 'Dense drizzle',
|
|
1610
|
+
61: 'Slight rain',
|
|
1611
|
+
63: 'Moderate rain',
|
|
1612
|
+
65: 'Heavy rain',
|
|
1613
|
+
71: 'Slight snow fall',
|
|
1614
|
+
73: 'Moderate snow fall',
|
|
1615
|
+
75: 'Heavy snow fall',
|
|
1616
|
+
95: 'Thunderstorm',
|
|
1617
|
+
}
|
|
1618
|
+
return conditions[code] || 'Unknown'
|
|
1619
|
+
}
|
|
1340
1620
|
|
|
1341
|
-
const fetchWeather =
|
|
1621
|
+
const fetchWeather = createStep({
|
|
1342
1622
|
id: 'fetch-weather',
|
|
1343
1623
|
description: 'Fetches weather forecast for a given city',
|
|
1344
1624
|
inputSchema: z.object({
|
|
1345
1625
|
city: z.string().describe('The city to get the weather for'),
|
|
1346
1626
|
}),
|
|
1347
1627
|
outputSchema: forecastSchema,
|
|
1348
|
-
execute: async ({
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
if (!triggerData) {
|
|
1352
|
-
throw new Error('Trigger data not found');
|
|
1628
|
+
execute: async ({ inputData }) => {
|
|
1629
|
+
if (!inputData) {
|
|
1630
|
+
throw new Error('Input data not found');
|
|
1353
1631
|
}
|
|
1354
1632
|
|
|
1355
|
-
const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(
|
|
1633
|
+
const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
|
|
1356
1634
|
const geocodingResponse = await fetch(geocodingUrl);
|
|
1357
1635
|
const geocodingData = (await geocodingResponse.json()) as {
|
|
1358
1636
|
results: { latitude: number; longitude: number; name: string }[];
|
|
1359
1637
|
};
|
|
1360
1638
|
|
|
1361
1639
|
if (!geocodingData.results?.[0]) {
|
|
1362
|
-
throw new Error(\`Location '\${
|
|
1640
|
+
throw new Error(\`Location '\${inputData.city}' not found\`);
|
|
1363
1641
|
}
|
|
1364
1642
|
|
|
1365
1643
|
const { latitude, longitude, name } = geocodingData.results[0];
|
|
1366
1644
|
|
|
1367
|
-
const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&
|
|
1645
|
+
const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}¤t=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
|
|
1368
1646
|
const response = await fetch(weatherUrl);
|
|
1369
1647
|
const data = (await response.json()) as {
|
|
1370
|
-
|
|
1371
|
-
time: string
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1648
|
+
current: {
|
|
1649
|
+
time: string
|
|
1650
|
+
precipitation: number
|
|
1651
|
+
weathercode: number
|
|
1652
|
+
}
|
|
1653
|
+
hourly: {
|
|
1654
|
+
precipitation_probability: number[]
|
|
1655
|
+
temperature_2m: number[]
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1378
1658
|
|
|
1379
|
-
const forecast =
|
|
1380
|
-
date,
|
|
1381
|
-
maxTemp: data.
|
|
1382
|
-
minTemp: data.
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1659
|
+
const forecast = {
|
|
1660
|
+
date: new Date().toISOString(),
|
|
1661
|
+
maxTemp: Math.max(...data.hourly.temperature_2m),
|
|
1662
|
+
minTemp: Math.min(...data.hourly.temperature_2m),
|
|
1663
|
+
condition: getWeatherCondition(data.current.weathercode),
|
|
1664
|
+
precipitationChance: data.hourly.precipitation_probability.reduce(
|
|
1665
|
+
(acc, curr) => Math.max(acc, curr),
|
|
1666
|
+
0
|
|
1667
|
+
),
|
|
1668
|
+
location: name
|
|
1669
|
+
}
|
|
1387
1670
|
|
|
1388
1671
|
return forecast;
|
|
1389
1672
|
},
|
|
1390
1673
|
});
|
|
1391
1674
|
|
|
1392
1675
|
|
|
1393
|
-
const planActivities =
|
|
1676
|
+
const planActivities = createStep({
|
|
1394
1677
|
id: 'plan-activities',
|
|
1395
1678
|
description: 'Suggests activities based on weather conditions',
|
|
1396
|
-
|
|
1397
|
-
|
|
1679
|
+
inputSchema: forecastSchema,
|
|
1680
|
+
outputSchema: z.object({
|
|
1681
|
+
activities: z.string(),
|
|
1682
|
+
}),
|
|
1683
|
+
execute: async ({ inputData, mastra }) => {
|
|
1684
|
+
const forecast = inputData
|
|
1685
|
+
|
|
1686
|
+
if (!forecast) {
|
|
1687
|
+
throw new Error('Forecast data not found')
|
|
1688
|
+
}
|
|
1398
1689
|
|
|
1399
|
-
|
|
1400
|
-
|
|
1690
|
+
const agent = mastra?.getAgent('weatherAgent');
|
|
1691
|
+
if (!agent) {
|
|
1692
|
+
throw new Error('Weather agent not found');
|
|
1401
1693
|
}
|
|
1402
1694
|
|
|
1403
|
-
const prompt = \`Based on the following weather forecast for \${forecast
|
|
1695
|
+
const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
|
|
1404
1696
|
\${JSON.stringify(forecast, null, 2)}
|
|
1405
|
-
|
|
1697
|
+
For each day in the forecast, structure your response exactly as follows:
|
|
1698
|
+
|
|
1699
|
+
\u{1F4C5} [Day, Month Date, Year]
|
|
1700
|
+
\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
|
|
1701
|
+
|
|
1702
|
+
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1703
|
+
\u2022 Conditions: [brief description]
|
|
1704
|
+
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1705
|
+
\u2022 Precipitation: [X% chance]
|
|
1706
|
+
|
|
1707
|
+
\u{1F305} MORNING ACTIVITIES
|
|
1708
|
+
Outdoor:
|
|
1709
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1710
|
+
Best timing: [specific time range]
|
|
1711
|
+
Note: [relevant weather consideration]
|
|
1712
|
+
|
|
1713
|
+
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1714
|
+
Outdoor:
|
|
1715
|
+
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1716
|
+
Best timing: [specific time range]
|
|
1717
|
+
Note: [relevant weather consideration]
|
|
1718
|
+
|
|
1719
|
+
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1720
|
+
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1721
|
+
Ideal for: [weather condition that would trigger this alternative]
|
|
1722
|
+
|
|
1723
|
+
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1724
|
+
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1725
|
+
|
|
1726
|
+
Guidelines:
|
|
1727
|
+
- Suggest 2-3 time-specific outdoor activities per day
|
|
1728
|
+
- Include 1-2 indoor backup options
|
|
1729
|
+
- For precipitation >50%, lead with indoor activities
|
|
1730
|
+
- All activities must be specific to the location
|
|
1731
|
+
- Include specific venues, trails, or locations
|
|
1732
|
+
- Consider activity intensity based on temperature
|
|
1733
|
+
- Keep descriptions concise but informative
|
|
1734
|
+
|
|
1735
|
+
Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
|
|
1406
1736
|
|
|
1407
1737
|
const response = await agent.stream([
|
|
1408
1738
|
{
|
|
@@ -1412,7 +1742,7 @@ const planActivities = new Step({
|
|
|
1412
1742
|
]);
|
|
1413
1743
|
|
|
1414
1744
|
let activitiesText = '';
|
|
1415
|
-
|
|
1745
|
+
|
|
1416
1746
|
for await (const chunk of response.textStream) {
|
|
1417
1747
|
process.stdout.write(chunk);
|
|
1418
1748
|
activitiesText += chunk;
|
|
@@ -1424,35 +1754,16 @@ const planActivities = new Step({
|
|
|
1424
1754
|
},
|
|
1425
1755
|
});
|
|
1426
1756
|
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
1: 'Mainly clear',
|
|
1431
|
-
2: 'Partly cloudy',
|
|
1432
|
-
3: 'Overcast',
|
|
1433
|
-
45: 'Foggy',
|
|
1434
|
-
48: 'Depositing rime fog',
|
|
1435
|
-
51: 'Light drizzle',
|
|
1436
|
-
53: 'Moderate drizzle',
|
|
1437
|
-
55: 'Dense drizzle',
|
|
1438
|
-
61: 'Slight rain',
|
|
1439
|
-
63: 'Moderate rain',
|
|
1440
|
-
65: 'Heavy rain',
|
|
1441
|
-
71: 'Slight snow fall',
|
|
1442
|
-
73: 'Moderate snow fall',
|
|
1443
|
-
75: 'Heavy snow fall',
|
|
1444
|
-
95: 'Thunderstorm',
|
|
1445
|
-
};
|
|
1446
|
-
return conditions[code] || 'Unknown';
|
|
1447
|
-
}
|
|
1448
|
-
|
|
1449
|
-
const weatherWorkflow = new Workflow({
|
|
1450
|
-
name: 'weather-workflow',
|
|
1451
|
-
triggerSchema: z.object({
|
|
1757
|
+
const weatherWorkflow = createWorkflow({
|
|
1758
|
+
id: 'weather-workflow',
|
|
1759
|
+
inputSchema: z.object({
|
|
1452
1760
|
city: z.string().describe('The city to get the weather for'),
|
|
1453
1761
|
}),
|
|
1762
|
+
outputSchema: z.object({
|
|
1763
|
+
activities: z.string(),
|
|
1764
|
+
})
|
|
1454
1765
|
})
|
|
1455
|
-
.
|
|
1766
|
+
.then(fetchWeather)
|
|
1456
1767
|
.then(planActivities);
|
|
1457
1768
|
|
|
1458
1769
|
weatherWorkflow.commit();
|
|
@@ -1476,7 +1787,7 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
|
|
|
1476
1787
|
case "tools":
|
|
1477
1788
|
return writeToolSample(destPath);
|
|
1478
1789
|
case "workflows":
|
|
1479
|
-
return writeWorkflowSample(destPath
|
|
1790
|
+
return writeWorkflowSample(destPath);
|
|
1480
1791
|
default:
|
|
1481
1792
|
return "";
|
|
1482
1793
|
}
|
|
@@ -1492,7 +1803,7 @@ var writeIndexFile = async ({
|
|
|
1492
1803
|
addWorkflow
|
|
1493
1804
|
}) => {
|
|
1494
1805
|
const indexPath = dirPath + "/index.ts";
|
|
1495
|
-
const destPath =
|
|
1806
|
+
const destPath = path2.join(indexPath);
|
|
1496
1807
|
try {
|
|
1497
1808
|
await fs4.writeFile(destPath, "");
|
|
1498
1809
|
const filteredExports = [
|
|
@@ -1514,10 +1825,10 @@ export const mastra = new Mastra()
|
|
|
1514
1825
|
destPath,
|
|
1515
1826
|
`
|
|
1516
1827
|
import { Mastra } from '@mastra/core/mastra';
|
|
1517
|
-
import {
|
|
1828
|
+
import { PinoLogger } from '@mastra/loggers';
|
|
1518
1829
|
import { LibSQLStore } from '@mastra/libsql';
|
|
1519
|
-
${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
|
|
1520
|
-
${addAgent ? `import { weatherAgent } from './agents';` : ""}
|
|
1830
|
+
${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
|
|
1831
|
+
${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
|
|
1521
1832
|
|
|
1522
1833
|
export const mastra = new Mastra({
|
|
1523
1834
|
${filteredExports.join("\n ")}
|
|
@@ -1525,7 +1836,7 @@ export const mastra = new Mastra({
|
|
|
1525
1836
|
// stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
|
|
1526
1837
|
url: ":memory:",
|
|
1527
1838
|
}),
|
|
1528
|
-
logger:
|
|
1839
|
+
logger: new PinoLogger({
|
|
1529
1840
|
name: 'Mastra',
|
|
1530
1841
|
level: 'info',
|
|
1531
1842
|
}),
|
|
@@ -1561,11 +1872,13 @@ var writeAPIKey = async ({
|
|
|
1561
1872
|
apiKey = "your-api-key"
|
|
1562
1873
|
}) => {
|
|
1563
1874
|
const key = await getAPIKey(provider);
|
|
1564
|
-
|
|
1875
|
+
const escapedKey = shellQuote.quote([key]);
|
|
1876
|
+
const escapedApiKey = shellQuote.quote([apiKey]);
|
|
1877
|
+
await exec(`echo ${escapedKey}=${escapedApiKey} >> .env`);
|
|
1565
1878
|
};
|
|
1566
1879
|
var createMastraDir = async (directory) => {
|
|
1567
1880
|
let dir = directory.trim().split("/").filter((item) => item !== "");
|
|
1568
|
-
const dirPath =
|
|
1881
|
+
const dirPath = path2.join(process.cwd(), ...dir, "mastra");
|
|
1569
1882
|
try {
|
|
1570
1883
|
await fs4.access(dirPath);
|
|
1571
1884
|
return { ok: false };
|
|
@@ -1575,7 +1888,7 @@ var createMastraDir = async (directory) => {
|
|
|
1575
1888
|
}
|
|
1576
1889
|
};
|
|
1577
1890
|
var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
|
|
1578
|
-
const destPath = dirPath + `/${component}/
|
|
1891
|
+
const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
|
|
1579
1892
|
try {
|
|
1580
1893
|
await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
|
|
1581
1894
|
} catch (err) {
|
|
@@ -1583,29 +1896,15 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
|
|
|
1583
1896
|
}
|
|
1584
1897
|
};
|
|
1585
1898
|
var interactivePrompt = async () => {
|
|
1586
|
-
|
|
1587
|
-
const mastraProject = await
|
|
1899
|
+
Ie(color2.inverse(" Mastra Init "));
|
|
1900
|
+
const mastraProject = await Ce(
|
|
1588
1901
|
{
|
|
1589
|
-
directory: () =>
|
|
1902
|
+
directory: () => he({
|
|
1590
1903
|
message: "Where should we create the Mastra files? (default: src/)",
|
|
1591
1904
|
placeholder: "src/",
|
|
1592
1905
|
defaultValue: "src/"
|
|
1593
1906
|
}),
|
|
1594
|
-
|
|
1595
|
-
message: "Choose components to install:",
|
|
1596
|
-
options: [
|
|
1597
|
-
{ value: "agents", label: "Agents", hint: "recommended" },
|
|
1598
|
-
{
|
|
1599
|
-
value: "workflows",
|
|
1600
|
-
label: "Workflows"
|
|
1601
|
-
}
|
|
1602
|
-
]
|
|
1603
|
-
}),
|
|
1604
|
-
shouldAddTools: () => ce({
|
|
1605
|
-
message: "Add tools?",
|
|
1606
|
-
initialValue: false
|
|
1607
|
-
}),
|
|
1608
|
-
llmProvider: () => le({
|
|
1907
|
+
llmProvider: () => ve({
|
|
1609
1908
|
message: "Select default provider:",
|
|
1610
1909
|
options: [
|
|
1611
1910
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
@@ -1616,7 +1915,7 @@ var interactivePrompt = async () => {
|
|
|
1616
1915
|
]
|
|
1617
1916
|
}),
|
|
1618
1917
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
1619
|
-
const keyChoice = await
|
|
1918
|
+
const keyChoice = await ve({
|
|
1620
1919
|
message: `Enter your ${llmProvider} API key?`,
|
|
1621
1920
|
options: [
|
|
1622
1921
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1625,21 +1924,18 @@ var interactivePrompt = async () => {
|
|
|
1625
1924
|
initialValue: "skip"
|
|
1626
1925
|
});
|
|
1627
1926
|
if (keyChoice === "enter") {
|
|
1628
|
-
return
|
|
1927
|
+
return he({
|
|
1629
1928
|
message: "Enter your API key:",
|
|
1630
1929
|
placeholder: "sk-..."
|
|
1631
1930
|
});
|
|
1632
1931
|
}
|
|
1633
1932
|
return void 0;
|
|
1634
1933
|
},
|
|
1635
|
-
addExample: () => ce({
|
|
1636
|
-
message: "Add example",
|
|
1637
|
-
initialValue: false
|
|
1638
|
-
}),
|
|
1639
1934
|
configureEditorWithDocsMCP: async () => {
|
|
1640
1935
|
const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
|
|
1641
1936
|
const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
|
|
1642
|
-
const
|
|
1937
|
+
const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
|
|
1938
|
+
const editor = await ve({
|
|
1643
1939
|
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1644
1940
|
options: [
|
|
1645
1941
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1657,24 +1953,34 @@ var interactivePrompt = async () => {
|
|
|
1657
1953
|
value: "windsurf",
|
|
1658
1954
|
label: "Windsurf",
|
|
1659
1955
|
hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
|
|
1956
|
+
},
|
|
1957
|
+
{
|
|
1958
|
+
value: "vscode",
|
|
1959
|
+
label: "VSCode",
|
|
1960
|
+
hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
|
|
1660
1961
|
}
|
|
1661
1962
|
]
|
|
1662
1963
|
});
|
|
1663
1964
|
if (editor === `skip`) return void 0;
|
|
1664
1965
|
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
1665
|
-
|
|
1966
|
+
M.message(`
|
|
1666
1967
|
Windsurf is already installed, skipping.`);
|
|
1667
1968
|
return void 0;
|
|
1668
1969
|
}
|
|
1970
|
+
if (editor === `vscode` && vscodeIsAlreadyInstalled) {
|
|
1971
|
+
M.message(`
|
|
1972
|
+
VSCode is already installed, skipping.`);
|
|
1973
|
+
return void 0;
|
|
1974
|
+
}
|
|
1669
1975
|
if (editor === `cursor`) {
|
|
1670
|
-
|
|
1976
|
+
M.message(
|
|
1671
1977
|
`
|
|
1672
1978
|
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
1673
1979
|
`
|
|
1674
1980
|
);
|
|
1675
1981
|
}
|
|
1676
1982
|
if (editor === `cursor-global`) {
|
|
1677
|
-
const confirm2 = await
|
|
1983
|
+
const confirm2 = await ve({
|
|
1678
1984
|
message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
|
|
1679
1985
|
options: [
|
|
1680
1986
|
{ value: "yes", label: "Yes, I understand" },
|
|
@@ -1686,7 +1992,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
|
|
|
1686
1992
|
}
|
|
1687
1993
|
}
|
|
1688
1994
|
if (editor === `windsurf`) {
|
|
1689
|
-
const confirm2 = await
|
|
1995
|
+
const confirm2 = await ve({
|
|
1690
1996
|
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
1691
1997
|
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
1692
1998
|
options: [
|
|
@@ -1703,16 +2009,14 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
|
|
|
1703
2009
|
},
|
|
1704
2010
|
{
|
|
1705
2011
|
onCancel: () => {
|
|
1706
|
-
|
|
2012
|
+
xe("Operation cancelled.");
|
|
1707
2013
|
process.exit(0);
|
|
1708
2014
|
}
|
|
1709
2015
|
}
|
|
1710
2016
|
);
|
|
1711
|
-
|
|
1712
|
-
const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
|
|
1713
|
-
return { ...rest, components: mastraComponents };
|
|
2017
|
+
return mastraProject;
|
|
1714
2018
|
};
|
|
1715
|
-
var s =
|
|
2019
|
+
var s = Y();
|
|
1716
2020
|
var exec2 = util.promisify(child_process.exec);
|
|
1717
2021
|
var init = async ({
|
|
1718
2022
|
directory,
|
|
@@ -1755,6 +2059,10 @@ var init = async ({
|
|
|
1755
2059
|
if (needsMemory) {
|
|
1756
2060
|
await depService.installPackages(["@mastra/memory"]);
|
|
1757
2061
|
}
|
|
2062
|
+
const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
|
|
2063
|
+
if (needsLoggers) {
|
|
2064
|
+
await depService.installPackages(["@mastra/loggers"]);
|
|
2065
|
+
}
|
|
1758
2066
|
}
|
|
1759
2067
|
const key = await getAPIKey(llmProvider || "openai");
|
|
1760
2068
|
const aiSdkPackage = getAISDKPackage(llmProvider);
|
|
@@ -1770,14 +2078,14 @@ var init = async ({
|
|
|
1770
2078
|
}
|
|
1771
2079
|
s.stop();
|
|
1772
2080
|
if (!llmApiKey) {
|
|
1773
|
-
|
|
2081
|
+
Me(`
|
|
1774
2082
|
${color2.green("Mastra initialized successfully!")}
|
|
1775
2083
|
|
|
1776
2084
|
Add your ${color2.cyan(key)} as an environment variable
|
|
1777
|
-
in your ${color2.cyan(".env
|
|
2085
|
+
in your ${color2.cyan(".env")} file
|
|
1778
2086
|
`);
|
|
1779
2087
|
} else {
|
|
1780
|
-
|
|
2088
|
+
Me(`
|
|
1781
2089
|
${color2.green("Mastra initialized successfully!")}
|
|
1782
2090
|
`);
|
|
1783
2091
|
}
|
|
@@ -1811,7 +2119,6 @@ var execWithTimeout = async (command, timeoutMs) => {
|
|
|
1811
2119
|
throw error;
|
|
1812
2120
|
}
|
|
1813
2121
|
} catch (error) {
|
|
1814
|
-
console.error(error);
|
|
1815
2122
|
throw error;
|
|
1816
2123
|
}
|
|
1817
2124
|
};
|
|
@@ -1823,11 +2130,18 @@ async function installMastraDependency(pm, dependency, versionTag, isDev, timeou
|
|
|
1823
2130
|
try {
|
|
1824
2131
|
await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
|
|
1825
2132
|
} catch (err) {
|
|
1826
|
-
console.log("err", err);
|
|
1827
2133
|
if (versionTag === "@latest") {
|
|
1828
|
-
throw
|
|
2134
|
+
throw new Error(
|
|
2135
|
+
`Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
|
|
2136
|
+
);
|
|
2137
|
+
}
|
|
2138
|
+
try {
|
|
2139
|
+
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
2140
|
+
} catch (fallbackErr) {
|
|
2141
|
+
throw new Error(
|
|
2142
|
+
`Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
|
|
2143
|
+
);
|
|
1829
2144
|
}
|
|
1830
|
-
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
1831
2145
|
}
|
|
1832
2146
|
}
|
|
1833
2147
|
var createMastraProject = async ({
|
|
@@ -1835,45 +2149,55 @@ var createMastraProject = async ({
|
|
|
1835
2149
|
createVersionTag,
|
|
1836
2150
|
timeout
|
|
1837
2151
|
}) => {
|
|
1838
|
-
|
|
1839
|
-
const projectName = name ?? await
|
|
2152
|
+
Ie(color2.inverse(" Mastra Create "));
|
|
2153
|
+
const projectName = name ?? await he({
|
|
1840
2154
|
message: "What do you want to name your project?",
|
|
1841
2155
|
placeholder: "my-mastra-app",
|
|
1842
2156
|
defaultValue: "my-mastra-app"
|
|
1843
2157
|
});
|
|
1844
|
-
if (
|
|
1845
|
-
|
|
2158
|
+
if (pD(projectName)) {
|
|
2159
|
+
xe("Operation cancelled");
|
|
1846
2160
|
process.exit(0);
|
|
1847
2161
|
}
|
|
1848
|
-
const s2 =
|
|
1849
|
-
s2.start("Creating project");
|
|
2162
|
+
const s2 = Y();
|
|
1850
2163
|
try {
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
2164
|
+
s2.start("Creating project");
|
|
2165
|
+
try {
|
|
2166
|
+
await fs4.mkdir(projectName);
|
|
2167
|
+
} catch (error) {
|
|
2168
|
+
if (error instanceof Error && "code" in error && error.code === "EEXIST") {
|
|
2169
|
+
s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
|
|
2170
|
+
process.exit(1);
|
|
2171
|
+
}
|
|
2172
|
+
throw new Error(
|
|
2173
|
+
`Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
1856
2174
|
);
|
|
1857
|
-
process.exit(1);
|
|
1858
2175
|
}
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
2176
|
+
process.chdir(projectName);
|
|
2177
|
+
const pm = getPackageManager();
|
|
2178
|
+
const installCommand = getPackageManagerInstallCommand(pm);
|
|
2179
|
+
s2.message("Initializing project structure");
|
|
2180
|
+
try {
|
|
2181
|
+
await exec3(`npm init -y`);
|
|
2182
|
+
await exec3(`npm pkg set type="module"`);
|
|
2183
|
+
await exec3(`npm pkg set engines.node=">=20.9.0"`);
|
|
2184
|
+
const depsService = new DepsService();
|
|
2185
|
+
await depsService.addScriptsToPackageJson({
|
|
2186
|
+
dev: "mastra dev",
|
|
2187
|
+
build: "mastra build",
|
|
2188
|
+
start: "mastra start"
|
|
2189
|
+
});
|
|
2190
|
+
} catch (error) {
|
|
2191
|
+
throw new Error(
|
|
2192
|
+
`Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2193
|
+
);
|
|
2194
|
+
}
|
|
2195
|
+
s2.stop("Project structure created");
|
|
2196
|
+
s2.start(`Installing ${pm} dependencies`);
|
|
2197
|
+
try {
|
|
2198
|
+
await exec3(`${pm} ${installCommand} zod`);
|
|
2199
|
+
await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
|
|
2200
|
+
await exec3(`echo '{
|
|
1877
2201
|
"compilerOptions": {
|
|
1878
2202
|
"target": "ES2022",
|
|
1879
2203
|
"module": "ES2022",
|
|
@@ -1889,29 +2213,54 @@ var createMastraProject = async ({
|
|
|
1889
2213
|
"src/**/*"
|
|
1890
2214
|
]
|
|
1891
2215
|
}' > tsconfig.json`);
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
2216
|
+
} catch (error) {
|
|
2217
|
+
throw new Error(
|
|
2218
|
+
`Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2219
|
+
);
|
|
2220
|
+
}
|
|
2221
|
+
s2.stop(`${pm} dependencies installed`);
|
|
2222
|
+
s2.start("Installing mastra");
|
|
2223
|
+
const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
|
|
2224
|
+
try {
|
|
2225
|
+
await installMastraDependency(pm, "mastra", versionTag, true, timeout);
|
|
2226
|
+
} catch (error) {
|
|
2227
|
+
throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2228
|
+
}
|
|
2229
|
+
s2.stop("mastra installed");
|
|
2230
|
+
s2.start("Installing dependencies");
|
|
2231
|
+
try {
|
|
2232
|
+
await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
|
|
2233
|
+
await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
|
|
2234
|
+
await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
|
|
2235
|
+
} catch (error) {
|
|
2236
|
+
throw new Error(
|
|
2237
|
+
`Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
2238
|
+
);
|
|
2239
|
+
}
|
|
2240
|
+
s2.stop("Mastra dependencies installed");
|
|
2241
|
+
s2.start("Adding .gitignore");
|
|
2242
|
+
try {
|
|
2243
|
+
await exec3(`echo output.txt >> .gitignore`);
|
|
2244
|
+
await exec3(`echo node_modules >> .gitignore`);
|
|
2245
|
+
await exec3(`echo dist >> .gitignore`);
|
|
2246
|
+
await exec3(`echo .mastra >> .gitignore`);
|
|
2247
|
+
await exec3(`echo .env.development >> .gitignore`);
|
|
2248
|
+
await exec3(`echo .env >> .gitignore`);
|
|
2249
|
+
await exec3(`echo *.db >> .gitignore`);
|
|
2250
|
+
await exec3(`echo *.db-* >> .gitignore`);
|
|
2251
|
+
} catch (error) {
|
|
2252
|
+
throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
2253
|
+
}
|
|
2254
|
+
s2.stop(".gitignore added");
|
|
2255
|
+
Se("Project created successfully");
|
|
2256
|
+
console.log("");
|
|
2257
|
+
return { projectName };
|
|
2258
|
+
} catch (error) {
|
|
2259
|
+
s2.stop();
|
|
2260
|
+
const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
|
|
2261
|
+
xe(`Project creation failed: ${errorMessage}`);
|
|
2262
|
+
process.exit(1);
|
|
2263
|
+
}
|
|
1915
2264
|
};
|
|
1916
2265
|
var create = async (args2) => {
|
|
1917
2266
|
const { projectName } = await createMastraProject({
|
|
@@ -1924,7 +2273,9 @@ var create = async (args2) => {
|
|
|
1924
2273
|
const result = await interactivePrompt();
|
|
1925
2274
|
await init({
|
|
1926
2275
|
...result,
|
|
1927
|
-
llmApiKey: result?.llmApiKey
|
|
2276
|
+
llmApiKey: result?.llmApiKey,
|
|
2277
|
+
components: ["agents", "tools", "workflows"],
|
|
2278
|
+
addExample: true
|
|
1928
2279
|
});
|
|
1929
2280
|
postCreate({ projectName });
|
|
1930
2281
|
return;
|
|
@@ -1935,23 +2286,25 @@ var create = async (args2) => {
|
|
|
1935
2286
|
components,
|
|
1936
2287
|
llmProvider,
|
|
1937
2288
|
addExample,
|
|
1938
|
-
llmApiKey
|
|
2289
|
+
llmApiKey,
|
|
2290
|
+
configureEditorWithDocsMCP: args2.mcpServer
|
|
1939
2291
|
});
|
|
1940
2292
|
postCreate({ projectName });
|
|
1941
2293
|
};
|
|
1942
2294
|
var postCreate = ({ projectName }) => {
|
|
1943
|
-
|
|
2295
|
+
const packageManager = getPackageManager();
|
|
2296
|
+
Se(`
|
|
1944
2297
|
${color2.green("To start your project:")}
|
|
1945
2298
|
|
|
1946
2299
|
${color2.cyan("cd")} ${projectName}
|
|
1947
|
-
${color2.cyan(
|
|
2300
|
+
${color2.cyan(`${packageManager} run dev`)}
|
|
1948
2301
|
`);
|
|
1949
2302
|
};
|
|
1950
2303
|
|
|
1951
2304
|
async function getPackageVersion() {
|
|
1952
2305
|
const __filename = fileURLToPath(import.meta.url);
|
|
1953
2306
|
const __dirname = dirname(__filename);
|
|
1954
|
-
const pkgJsonPath =
|
|
2307
|
+
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
1955
2308
|
const content = await fsExtra.readJSON(pkgJsonPath);
|
|
1956
2309
|
return content.version;
|
|
1957
2310
|
}
|
|
@@ -1960,7 +2313,7 @@ async function getCreateVersionTag() {
|
|
|
1960
2313
|
const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
|
|
1961
2314
|
const json = await fsExtra.readJSON(pkgPath);
|
|
1962
2315
|
const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
|
|
1963
|
-
const tagLine = stdout.split("\n").find((distLine) => distLine.
|
|
2316
|
+
const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
|
|
1964
2317
|
const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
|
|
1965
2318
|
return tag;
|
|
1966
2319
|
} catch {
|
|
@@ -1989,16 +2342,18 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
1989
2342
|
program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
|
|
1990
2343
|
"-p, --project-name <string>",
|
|
1991
2344
|
"Project name that will be used in package.json and as the project directory name."
|
|
1992
|
-
).option("--default", "Quick start with defaults(src, OpenAI,
|
|
2345
|
+
).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)").action(async (projectNameArg, args) => {
|
|
1993
2346
|
const projectName = projectNameArg || args.projectName;
|
|
1994
2347
|
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
1995
2348
|
if (args.default) {
|
|
1996
2349
|
await create({
|
|
1997
2350
|
components: ["agents", "tools", "workflows"],
|
|
1998
2351
|
llmProvider: "openai",
|
|
1999
|
-
addExample:
|
|
2352
|
+
addExample: true,
|
|
2000
2353
|
createVersionTag,
|
|
2001
|
-
timeout
|
|
2354
|
+
timeout,
|
|
2355
|
+
mcpServer: args.mcp,
|
|
2356
|
+
directory: "src/"
|
|
2002
2357
|
});
|
|
2003
2358
|
return;
|
|
2004
2359
|
}
|
|
@@ -2010,7 +2365,8 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2010
2365
|
createVersionTag,
|
|
2011
2366
|
timeout,
|
|
2012
2367
|
projectName,
|
|
2013
|
-
directory: args.dir
|
|
2368
|
+
directory: args.dir,
|
|
2369
|
+
mcpServer: args.mcp
|
|
2014
2370
|
});
|
|
2015
2371
|
});
|
|
2016
2372
|
program.parse(process.argv);
|