create-mastra 0.0.0-separate-trace-data-from-component-20250501141108 → 0.0.0-support-d1-client-20250701191943
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 +780 -420
- 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
|
`;
|
|
@@ -1241,7 +1561,8 @@ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
|
1241
1561
|
${providerImport}
|
|
1242
1562
|
import { Agent } from '@mastra/core/agent';
|
|
1243
1563
|
import { Memory } from '@mastra/memory';
|
|
1244
|
-
|
|
1564
|
+
import { LibSQLStore } from '@mastra/libsql';
|
|
1565
|
+
${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
|
|
1245
1566
|
|
|
1246
1567
|
export const weatherAgent = new Agent({
|
|
1247
1568
|
name: 'Weather Agent',
|
|
@@ -1249,13 +1570,9 @@ export const weatherAgent = new Agent({
|
|
|
1249
1570
|
model: ${modelItem},
|
|
1250
1571
|
${addExampleTool ? "tools: { weatherTool }," : ""}
|
|
1251
1572
|
memory: new Memory({
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
threads: {
|
|
1256
|
-
generateTitle: false
|
|
1257
|
-
}
|
|
1258
|
-
}
|
|
1573
|
+
storage: new LibSQLStore({
|
|
1574
|
+
url: "file:../mastra.db", // path is relative to the .mastra/output directory
|
|
1575
|
+
})
|
|
1259
1576
|
})
|
|
1260
1577
|
});
|
|
1261
1578
|
`;
|
|
@@ -1266,139 +1583,156 @@ export const weatherAgent = new Agent({
|
|
|
1266
1583
|
await fs4.writeFile(destPath, "");
|
|
1267
1584
|
await fs4.writeFile(destPath, formattedContent);
|
|
1268
1585
|
}
|
|
1269
|
-
async function writeWorkflowSample(destPath
|
|
1270
|
-
const {
|
|
1271
|
-
const content = `${providerImport}
|
|
1272
|
-
import { Agent } from '@mastra/core/agent';
|
|
1273
|
-
import { Step, Workflow } from '@mastra/core/workflows';
|
|
1586
|
+
async function writeWorkflowSample(destPath) {
|
|
1587
|
+
const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1274
1588
|
import { z } from 'zod';
|
|
1275
1589
|
|
|
1276
|
-
const
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
For each day in the forecast, structure your response exactly as follows:
|
|
1285
|
-
|
|
1286
|
-
\u{1F4C5} [Day, Month Date, Year]
|
|
1287
|
-
\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
|
|
1288
|
-
|
|
1289
|
-
\u{1F321}\uFE0F WEATHER SUMMARY
|
|
1290
|
-
\u2022 Conditions: [brief description]
|
|
1291
|
-
\u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
|
|
1292
|
-
\u2022 Precipitation: [X% chance]
|
|
1293
|
-
|
|
1294
|
-
\u{1F305} MORNING ACTIVITIES
|
|
1295
|
-
Outdoor:
|
|
1296
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1297
|
-
Best timing: [specific time range]
|
|
1298
|
-
Note: [relevant weather consideration]
|
|
1299
|
-
|
|
1300
|
-
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1301
|
-
Outdoor:
|
|
1302
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1303
|
-
Best timing: [specific time range]
|
|
1304
|
-
Note: [relevant weather consideration]
|
|
1305
|
-
|
|
1306
|
-
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1307
|
-
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1308
|
-
Ideal for: [weather condition that would trigger this alternative]
|
|
1309
|
-
|
|
1310
|
-
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1311
|
-
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1312
|
-
|
|
1313
|
-
Guidelines:
|
|
1314
|
-
- Suggest 2-3 time-specific outdoor activities per day
|
|
1315
|
-
- Include 1-2 indoor backup options
|
|
1316
|
-
- For precipitation >50%, lead with indoor activities
|
|
1317
|
-
- All activities must be specific to the location
|
|
1318
|
-
- Include specific venues, trails, or locations
|
|
1319
|
-
- Consider activity intensity based on temperature
|
|
1320
|
-
- Keep descriptions concise but informative
|
|
1321
|
-
|
|
1322
|
-
Maintain this exact formatting for consistency, using the emoji and section headers as shown.
|
|
1323
|
-
\`,
|
|
1324
|
-
});
|
|
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
|
+
})
|
|
1325
1598
|
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
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
|
+
}
|
|
1336
1620
|
|
|
1337
|
-
const fetchWeather =
|
|
1621
|
+
const fetchWeather = createStep({
|
|
1338
1622
|
id: 'fetch-weather',
|
|
1339
1623
|
description: 'Fetches weather forecast for a given city',
|
|
1340
1624
|
inputSchema: z.object({
|
|
1341
1625
|
city: z.string().describe('The city to get the weather for'),
|
|
1342
1626
|
}),
|
|
1343
1627
|
outputSchema: forecastSchema,
|
|
1344
|
-
execute: async ({
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
if (!triggerData) {
|
|
1348
|
-
throw new Error('Trigger data not found');
|
|
1628
|
+
execute: async ({ inputData }) => {
|
|
1629
|
+
if (!inputData) {
|
|
1630
|
+
throw new Error('Input data not found');
|
|
1349
1631
|
}
|
|
1350
1632
|
|
|
1351
|
-
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\`;
|
|
1352
1634
|
const geocodingResponse = await fetch(geocodingUrl);
|
|
1353
1635
|
const geocodingData = (await geocodingResponse.json()) as {
|
|
1354
1636
|
results: { latitude: number; longitude: number; name: string }[];
|
|
1355
1637
|
};
|
|
1356
1638
|
|
|
1357
1639
|
if (!geocodingData.results?.[0]) {
|
|
1358
|
-
throw new Error(\`Location '\${
|
|
1640
|
+
throw new Error(\`Location '\${inputData.city}' not found\`);
|
|
1359
1641
|
}
|
|
1360
1642
|
|
|
1361
1643
|
const { latitude, longitude, name } = geocodingData.results[0];
|
|
1362
1644
|
|
|
1363
|
-
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\`;
|
|
1364
1646
|
const response = await fetch(weatherUrl);
|
|
1365
1647
|
const data = (await response.json()) as {
|
|
1366
|
-
|
|
1367
|
-
time: string
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1648
|
+
current: {
|
|
1649
|
+
time: string
|
|
1650
|
+
precipitation: number
|
|
1651
|
+
weathercode: number
|
|
1652
|
+
}
|
|
1653
|
+
hourly: {
|
|
1654
|
+
precipitation_probability: number[]
|
|
1655
|
+
temperature_2m: number[]
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1374
1658
|
|
|
1375
|
-
const forecast =
|
|
1376
|
-
date,
|
|
1377
|
-
maxTemp: data.
|
|
1378
|
-
minTemp: data.
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
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
|
+
}
|
|
1383
1670
|
|
|
1384
1671
|
return forecast;
|
|
1385
1672
|
},
|
|
1386
1673
|
});
|
|
1387
1674
|
|
|
1388
1675
|
|
|
1389
|
-
const planActivities =
|
|
1676
|
+
const planActivities = createStep({
|
|
1390
1677
|
id: 'plan-activities',
|
|
1391
1678
|
description: 'Suggests activities based on weather conditions',
|
|
1392
|
-
|
|
1393
|
-
|
|
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
|
+
}
|
|
1394
1689
|
|
|
1395
|
-
|
|
1396
|
-
|
|
1690
|
+
const agent = mastra?.getAgent('weatherAgent');
|
|
1691
|
+
if (!agent) {
|
|
1692
|
+
throw new Error('Weather agent not found');
|
|
1397
1693
|
}
|
|
1398
1694
|
|
|
1399
|
-
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:
|
|
1400
1696
|
\${JSON.stringify(forecast, null, 2)}
|
|
1401
|
-
|
|
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.\`;
|
|
1402
1736
|
|
|
1403
1737
|
const response = await agent.stream([
|
|
1404
1738
|
{
|
|
@@ -1408,7 +1742,7 @@ const planActivities = new Step({
|
|
|
1408
1742
|
]);
|
|
1409
1743
|
|
|
1410
1744
|
let activitiesText = '';
|
|
1411
|
-
|
|
1745
|
+
|
|
1412
1746
|
for await (const chunk of response.textStream) {
|
|
1413
1747
|
process.stdout.write(chunk);
|
|
1414
1748
|
activitiesText += chunk;
|
|
@@ -1420,35 +1754,16 @@ const planActivities = new Step({
|
|
|
1420
1754
|
},
|
|
1421
1755
|
});
|
|
1422
1756
|
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
1: 'Mainly clear',
|
|
1427
|
-
2: 'Partly cloudy',
|
|
1428
|
-
3: 'Overcast',
|
|
1429
|
-
45: 'Foggy',
|
|
1430
|
-
48: 'Depositing rime fog',
|
|
1431
|
-
51: 'Light drizzle',
|
|
1432
|
-
53: 'Moderate drizzle',
|
|
1433
|
-
55: 'Dense drizzle',
|
|
1434
|
-
61: 'Slight rain',
|
|
1435
|
-
63: 'Moderate rain',
|
|
1436
|
-
65: 'Heavy rain',
|
|
1437
|
-
71: 'Slight snow fall',
|
|
1438
|
-
73: 'Moderate snow fall',
|
|
1439
|
-
75: 'Heavy snow fall',
|
|
1440
|
-
95: 'Thunderstorm',
|
|
1441
|
-
};
|
|
1442
|
-
return conditions[code] || 'Unknown';
|
|
1443
|
-
}
|
|
1444
|
-
|
|
1445
|
-
const weatherWorkflow = new Workflow({
|
|
1446
|
-
name: 'weather-workflow',
|
|
1447
|
-
triggerSchema: z.object({
|
|
1757
|
+
const weatherWorkflow = createWorkflow({
|
|
1758
|
+
id: 'weather-workflow',
|
|
1759
|
+
inputSchema: z.object({
|
|
1448
1760
|
city: z.string().describe('The city to get the weather for'),
|
|
1449
1761
|
}),
|
|
1762
|
+
outputSchema: z.object({
|
|
1763
|
+
activities: z.string(),
|
|
1764
|
+
})
|
|
1450
1765
|
})
|
|
1451
|
-
.
|
|
1766
|
+
.then(fetchWeather)
|
|
1452
1767
|
.then(planActivities);
|
|
1453
1768
|
|
|
1454
1769
|
weatherWorkflow.commit();
|
|
@@ -1472,7 +1787,7 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
|
|
|
1472
1787
|
case "tools":
|
|
1473
1788
|
return writeToolSample(destPath);
|
|
1474
1789
|
case "workflows":
|
|
1475
|
-
return writeWorkflowSample(destPath
|
|
1790
|
+
return writeWorkflowSample(destPath);
|
|
1476
1791
|
default:
|
|
1477
1792
|
return "";
|
|
1478
1793
|
}
|
|
@@ -1488,7 +1803,7 @@ var writeIndexFile = async ({
|
|
|
1488
1803
|
addWorkflow
|
|
1489
1804
|
}) => {
|
|
1490
1805
|
const indexPath = dirPath + "/index.ts";
|
|
1491
|
-
const destPath =
|
|
1806
|
+
const destPath = path2.join(indexPath);
|
|
1492
1807
|
try {
|
|
1493
1808
|
await fs4.writeFile(destPath, "");
|
|
1494
1809
|
const filteredExports = [
|
|
@@ -1510,10 +1825,10 @@ export const mastra = new Mastra()
|
|
|
1510
1825
|
destPath,
|
|
1511
1826
|
`
|
|
1512
1827
|
import { Mastra } from '@mastra/core/mastra';
|
|
1513
|
-
import {
|
|
1828
|
+
import { PinoLogger } from '@mastra/loggers';
|
|
1514
1829
|
import { LibSQLStore } from '@mastra/libsql';
|
|
1515
|
-
${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
|
|
1516
|
-
${addAgent ? `import { weatherAgent } from './agents';` : ""}
|
|
1830
|
+
${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
|
|
1831
|
+
${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
|
|
1517
1832
|
|
|
1518
1833
|
export const mastra = new Mastra({
|
|
1519
1834
|
${filteredExports.join("\n ")}
|
|
@@ -1521,7 +1836,7 @@ export const mastra = new Mastra({
|
|
|
1521
1836
|
// stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
|
|
1522
1837
|
url: ":memory:",
|
|
1523
1838
|
}),
|
|
1524
|
-
logger:
|
|
1839
|
+
logger: new PinoLogger({
|
|
1525
1840
|
name: 'Mastra',
|
|
1526
1841
|
level: 'info',
|
|
1527
1842
|
}),
|
|
@@ -1557,11 +1872,13 @@ var writeAPIKey = async ({
|
|
|
1557
1872
|
apiKey = "your-api-key"
|
|
1558
1873
|
}) => {
|
|
1559
1874
|
const key = await getAPIKey(provider);
|
|
1560
|
-
|
|
1875
|
+
const escapedKey = shellQuote.quote([key]);
|
|
1876
|
+
const escapedApiKey = shellQuote.quote([apiKey]);
|
|
1877
|
+
await exec(`echo ${escapedKey}=${escapedApiKey} >> .env`);
|
|
1561
1878
|
};
|
|
1562
1879
|
var createMastraDir = async (directory) => {
|
|
1563
1880
|
let dir = directory.trim().split("/").filter((item) => item !== "");
|
|
1564
|
-
const dirPath =
|
|
1881
|
+
const dirPath = path2.join(process.cwd(), ...dir, "mastra");
|
|
1565
1882
|
try {
|
|
1566
1883
|
await fs4.access(dirPath);
|
|
1567
1884
|
return { ok: false };
|
|
@@ -1571,7 +1888,7 @@ var createMastraDir = async (directory) => {
|
|
|
1571
1888
|
}
|
|
1572
1889
|
};
|
|
1573
1890
|
var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
|
|
1574
|
-
const destPath = dirPath + `/${component}/
|
|
1891
|
+
const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
|
|
1575
1892
|
try {
|
|
1576
1893
|
await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
|
|
1577
1894
|
} catch (err) {
|
|
@@ -1579,29 +1896,15 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
|
|
|
1579
1896
|
}
|
|
1580
1897
|
};
|
|
1581
1898
|
var interactivePrompt = async () => {
|
|
1582
|
-
|
|
1583
|
-
const mastraProject = await
|
|
1899
|
+
Ie(color2.inverse(" Mastra Init "));
|
|
1900
|
+
const mastraProject = await Ce(
|
|
1584
1901
|
{
|
|
1585
|
-
directory: () =>
|
|
1902
|
+
directory: () => he({
|
|
1586
1903
|
message: "Where should we create the Mastra files? (default: src/)",
|
|
1587
1904
|
placeholder: "src/",
|
|
1588
1905
|
defaultValue: "src/"
|
|
1589
1906
|
}),
|
|
1590
|
-
|
|
1591
|
-
message: "Choose components to install:",
|
|
1592
|
-
options: [
|
|
1593
|
-
{ value: "agents", label: "Agents", hint: "recommended" },
|
|
1594
|
-
{
|
|
1595
|
-
value: "workflows",
|
|
1596
|
-
label: "Workflows"
|
|
1597
|
-
}
|
|
1598
|
-
]
|
|
1599
|
-
}),
|
|
1600
|
-
shouldAddTools: () => ce({
|
|
1601
|
-
message: "Add tools?",
|
|
1602
|
-
initialValue: false
|
|
1603
|
-
}),
|
|
1604
|
-
llmProvider: () => le({
|
|
1907
|
+
llmProvider: () => ve({
|
|
1605
1908
|
message: "Select default provider:",
|
|
1606
1909
|
options: [
|
|
1607
1910
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
@@ -1612,7 +1915,7 @@ var interactivePrompt = async () => {
|
|
|
1612
1915
|
]
|
|
1613
1916
|
}),
|
|
1614
1917
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
1615
|
-
const keyChoice = await
|
|
1918
|
+
const keyChoice = await ve({
|
|
1616
1919
|
message: `Enter your ${llmProvider} API key?`,
|
|
1617
1920
|
options: [
|
|
1618
1921
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1621,21 +1924,18 @@ var interactivePrompt = async () => {
|
|
|
1621
1924
|
initialValue: "skip"
|
|
1622
1925
|
});
|
|
1623
1926
|
if (keyChoice === "enter") {
|
|
1624
|
-
return
|
|
1927
|
+
return he({
|
|
1625
1928
|
message: "Enter your API key:",
|
|
1626
1929
|
placeholder: "sk-..."
|
|
1627
1930
|
});
|
|
1628
1931
|
}
|
|
1629
1932
|
return void 0;
|
|
1630
1933
|
},
|
|
1631
|
-
addExample: () => ce({
|
|
1632
|
-
message: "Add example",
|
|
1633
|
-
initialValue: false
|
|
1634
|
-
}),
|
|
1635
1934
|
configureEditorWithDocsMCP: async () => {
|
|
1636
1935
|
const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
|
|
1637
1936
|
const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
|
|
1638
|
-
const
|
|
1937
|
+
const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
|
|
1938
|
+
const editor = await ve({
|
|
1639
1939
|
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1640
1940
|
options: [
|
|
1641
1941
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1653,24 +1953,34 @@ var interactivePrompt = async () => {
|
|
|
1653
1953
|
value: "windsurf",
|
|
1654
1954
|
label: "Windsurf",
|
|
1655
1955
|
hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
|
|
1956
|
+
},
|
|
1957
|
+
{
|
|
1958
|
+
value: "vscode",
|
|
1959
|
+
label: "VSCode",
|
|
1960
|
+
hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
|
|
1656
1961
|
}
|
|
1657
1962
|
]
|
|
1658
1963
|
});
|
|
1659
1964
|
if (editor === `skip`) return void 0;
|
|
1660
1965
|
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
1661
|
-
|
|
1966
|
+
M.message(`
|
|
1662
1967
|
Windsurf is already installed, skipping.`);
|
|
1663
1968
|
return void 0;
|
|
1664
1969
|
}
|
|
1970
|
+
if (editor === `vscode` && vscodeIsAlreadyInstalled) {
|
|
1971
|
+
M.message(`
|
|
1972
|
+
VSCode is already installed, skipping.`);
|
|
1973
|
+
return void 0;
|
|
1974
|
+
}
|
|
1665
1975
|
if (editor === `cursor`) {
|
|
1666
|
-
|
|
1976
|
+
M.message(
|
|
1667
1977
|
`
|
|
1668
1978
|
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
1669
1979
|
`
|
|
1670
1980
|
);
|
|
1671
1981
|
}
|
|
1672
1982
|
if (editor === `cursor-global`) {
|
|
1673
|
-
const confirm2 = await
|
|
1983
|
+
const confirm2 = await ve({
|
|
1674
1984
|
message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
|
|
1675
1985
|
options: [
|
|
1676
1986
|
{ value: "yes", label: "Yes, I understand" },
|
|
@@ -1682,7 +1992,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
|
|
|
1682
1992
|
}
|
|
1683
1993
|
}
|
|
1684
1994
|
if (editor === `windsurf`) {
|
|
1685
|
-
const confirm2 = await
|
|
1995
|
+
const confirm2 = await ve({
|
|
1686
1996
|
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
1687
1997
|
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
1688
1998
|
options: [
|
|
@@ -1699,16 +2009,14 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
|
|
|
1699
2009
|
},
|
|
1700
2010
|
{
|
|
1701
2011
|
onCancel: () => {
|
|
1702
|
-
|
|
2012
|
+
xe("Operation cancelled.");
|
|
1703
2013
|
process.exit(0);
|
|
1704
2014
|
}
|
|
1705
2015
|
}
|
|
1706
2016
|
);
|
|
1707
|
-
|
|
1708
|
-
const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
|
|
1709
|
-
return { ...rest, components: mastraComponents };
|
|
2017
|
+
return mastraProject;
|
|
1710
2018
|
};
|
|
1711
|
-
var s =
|
|
2019
|
+
var s = Y();
|
|
1712
2020
|
var exec2 = util.promisify(child_process.exec);
|
|
1713
2021
|
var init = async ({
|
|
1714
2022
|
directory,
|
|
@@ -1751,6 +2059,10 @@ var init = async ({
|
|
|
1751
2059
|
if (needsMemory) {
|
|
1752
2060
|
await depService.installPackages(["@mastra/memory"]);
|
|
1753
2061
|
}
|
|
2062
|
+
const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
|
|
2063
|
+
if (needsLoggers) {
|
|
2064
|
+
await depService.installPackages(["@mastra/loggers"]);
|
|
2065
|
+
}
|
|
1754
2066
|
}
|
|
1755
2067
|
const key = await getAPIKey(llmProvider || "openai");
|
|
1756
2068
|
const aiSdkPackage = getAISDKPackage(llmProvider);
|
|
@@ -1766,14 +2078,14 @@ var init = async ({
|
|
|
1766
2078
|
}
|
|
1767
2079
|
s.stop();
|
|
1768
2080
|
if (!llmApiKey) {
|
|
1769
|
-
|
|
2081
|
+
Me(`
|
|
1770
2082
|
${color2.green("Mastra initialized successfully!")}
|
|
1771
2083
|
|
|
1772
2084
|
Add your ${color2.cyan(key)} as an environment variable
|
|
1773
|
-
in your ${color2.cyan(".env
|
|
2085
|
+
in your ${color2.cyan(".env")} file
|
|
1774
2086
|
`);
|
|
1775
2087
|
} else {
|
|
1776
|
-
|
|
2088
|
+
Me(`
|
|
1777
2089
|
${color2.green("Mastra initialized successfully!")}
|
|
1778
2090
|
`);
|
|
1779
2091
|
}
|
|
@@ -1807,7 +2119,6 @@ var execWithTimeout = async (command, timeoutMs) => {
|
|
|
1807
2119
|
throw error;
|
|
1808
2120
|
}
|
|
1809
2121
|
} catch (error) {
|
|
1810
|
-
console.error(error);
|
|
1811
2122
|
throw error;
|
|
1812
2123
|
}
|
|
1813
2124
|
};
|
|
@@ -1819,11 +2130,18 @@ async function installMastraDependency(pm, dependency, versionTag, isDev, timeou
|
|
|
1819
2130
|
try {
|
|
1820
2131
|
await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
|
|
1821
2132
|
} catch (err) {
|
|
1822
|
-
console.log("err", err);
|
|
1823
2133
|
if (versionTag === "@latest") {
|
|
1824
|
-
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
|
+
);
|
|
1825
2144
|
}
|
|
1826
|
-
await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
|
|
1827
2145
|
}
|
|
1828
2146
|
}
|
|
1829
2147
|
var createMastraProject = async ({
|
|
@@ -1831,45 +2149,55 @@ var createMastraProject = async ({
|
|
|
1831
2149
|
createVersionTag,
|
|
1832
2150
|
timeout
|
|
1833
2151
|
}) => {
|
|
1834
|
-
|
|
1835
|
-
const projectName = name ?? await
|
|
2152
|
+
Ie(color2.inverse(" Mastra Create "));
|
|
2153
|
+
const projectName = name ?? await he({
|
|
1836
2154
|
message: "What do you want to name your project?",
|
|
1837
2155
|
placeholder: "my-mastra-app",
|
|
1838
2156
|
defaultValue: "my-mastra-app"
|
|
1839
2157
|
});
|
|
1840
|
-
if (
|
|
1841
|
-
|
|
2158
|
+
if (pD(projectName)) {
|
|
2159
|
+
xe("Operation cancelled");
|
|
1842
2160
|
process.exit(0);
|
|
1843
2161
|
}
|
|
1844
|
-
const s2 =
|
|
1845
|
-
s2.start("Creating project");
|
|
2162
|
+
const s2 = Y();
|
|
1846
2163
|
try {
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
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"}`
|
|
1852
2174
|
);
|
|
1853
|
-
process.exit(1);
|
|
1854
2175
|
}
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
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 '{
|
|
1873
2201
|
"compilerOptions": {
|
|
1874
2202
|
"target": "ES2022",
|
|
1875
2203
|
"module": "ES2022",
|
|
@@ -1885,29 +2213,54 @@ var createMastraProject = async ({
|
|
|
1885
2213
|
"src/**/*"
|
|
1886
2214
|
]
|
|
1887
2215
|
}' > tsconfig.json`);
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
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
|
+
}
|
|
1911
2264
|
};
|
|
1912
2265
|
var create = async (args2) => {
|
|
1913
2266
|
const { projectName } = await createMastraProject({
|
|
@@ -1920,7 +2273,9 @@ var create = async (args2) => {
|
|
|
1920
2273
|
const result = await interactivePrompt();
|
|
1921
2274
|
await init({
|
|
1922
2275
|
...result,
|
|
1923
|
-
llmApiKey: result?.llmApiKey
|
|
2276
|
+
llmApiKey: result?.llmApiKey,
|
|
2277
|
+
components: ["agents", "tools", "workflows"],
|
|
2278
|
+
addExample: true
|
|
1924
2279
|
});
|
|
1925
2280
|
postCreate({ projectName });
|
|
1926
2281
|
return;
|
|
@@ -1931,23 +2286,25 @@ var create = async (args2) => {
|
|
|
1931
2286
|
components,
|
|
1932
2287
|
llmProvider,
|
|
1933
2288
|
addExample,
|
|
1934
|
-
llmApiKey
|
|
2289
|
+
llmApiKey,
|
|
2290
|
+
configureEditorWithDocsMCP: args2.mcpServer
|
|
1935
2291
|
});
|
|
1936
2292
|
postCreate({ projectName });
|
|
1937
2293
|
};
|
|
1938
2294
|
var postCreate = ({ projectName }) => {
|
|
1939
|
-
|
|
2295
|
+
const packageManager = getPackageManager();
|
|
2296
|
+
Se(`
|
|
1940
2297
|
${color2.green("To start your project:")}
|
|
1941
2298
|
|
|
1942
2299
|
${color2.cyan("cd")} ${projectName}
|
|
1943
|
-
${color2.cyan(
|
|
2300
|
+
${color2.cyan(`${packageManager} run dev`)}
|
|
1944
2301
|
`);
|
|
1945
2302
|
};
|
|
1946
2303
|
|
|
1947
2304
|
async function getPackageVersion() {
|
|
1948
2305
|
const __filename = fileURLToPath(import.meta.url);
|
|
1949
2306
|
const __dirname = dirname(__filename);
|
|
1950
|
-
const pkgJsonPath =
|
|
2307
|
+
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
1951
2308
|
const content = await fsExtra.readJSON(pkgJsonPath);
|
|
1952
2309
|
return content.version;
|
|
1953
2310
|
}
|
|
@@ -1956,7 +2313,7 @@ async function getCreateVersionTag() {
|
|
|
1956
2313
|
const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
|
|
1957
2314
|
const json = await fsExtra.readJSON(pkgPath);
|
|
1958
2315
|
const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
|
|
1959
|
-
const tagLine = stdout.split("\n").find((distLine) => distLine.
|
|
2316
|
+
const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
|
|
1960
2317
|
const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
|
|
1961
2318
|
return tag;
|
|
1962
2319
|
} catch {
|
|
@@ -1985,16 +2342,18 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
1985
2342
|
program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
|
|
1986
2343
|
"-p, --project-name <string>",
|
|
1987
2344
|
"Project name that will be used in package.json and as the project directory name."
|
|
1988
|
-
).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) => {
|
|
1989
2346
|
const projectName = projectNameArg || args.projectName;
|
|
1990
2347
|
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
1991
2348
|
if (args.default) {
|
|
1992
2349
|
await create({
|
|
1993
2350
|
components: ["agents", "tools", "workflows"],
|
|
1994
2351
|
llmProvider: "openai",
|
|
1995
|
-
addExample:
|
|
2352
|
+
addExample: true,
|
|
1996
2353
|
createVersionTag,
|
|
1997
|
-
timeout
|
|
2354
|
+
timeout,
|
|
2355
|
+
mcpServer: args.mcp,
|
|
2356
|
+
directory: "src/"
|
|
1998
2357
|
});
|
|
1999
2358
|
return;
|
|
2000
2359
|
}
|
|
@@ -2006,7 +2365,8 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
|
|
|
2006
2365
|
createVersionTag,
|
|
2007
2366
|
timeout,
|
|
2008
2367
|
projectName,
|
|
2009
|
-
directory: args.dir
|
|
2368
|
+
directory: args.dir,
|
|
2369
|
+
mcpServer: args.mcp
|
|
2010
2370
|
});
|
|
2011
2371
|
});
|
|
2012
2372
|
program.parse(process.argv);
|