create-mastra 0.0.0-storage-20250225005900 → 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/{LICENSE → LICENSE.md} +3 -1
- package/README.md +1 -2
- package/dist/index.js +1037 -469
- package/dist/index.js.map +1 -1
- package/dist/templates/dev.entry.js +13 -12
- package/package.json +20 -19
- package/dist/starter-files/workflow.ts +0 -182
- package/starter-files/config.ts +0 -28
- package/starter-files/mastra-pg.docker-compose.yaml +0 -15
- package/starter-files/tools.ts +0 -95
- package/starter-files/workflow.ts +0 -183
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
|
|
8
|
-
import { PostHog } from 'posthog-node';
|
|
7
|
+
import path2, { dirname } from 'node:path';
|
|
9
8
|
import { fileURLToPath } from 'node:url';
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
9
|
+
import { PostHog } from 'posthog-node';
|
|
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
|
-
import prettier from 'prettier';
|
|
17
|
-
import fsExtra3 from 'fs-extra/esm';
|
|
18
16
|
import fs4 from 'node:fs/promises';
|
|
19
17
|
import { execa } from 'execa';
|
|
18
|
+
import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
|
|
19
|
+
import prettier from 'prettier';
|
|
20
|
+
import tty from 'node:tty';
|
|
20
21
|
import pino from 'pino';
|
|
21
22
|
import pretty from 'pino-pretty';
|
|
22
|
-
import { Transform } from 'node:stream';
|
|
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,13 +35,13 @@ 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"));
|
|
42
42
|
this.distinctId = distinctId;
|
|
43
43
|
this.sessionId = sessionId;
|
|
44
|
-
} catch
|
|
44
|
+
} catch {
|
|
45
45
|
this.sessionId = randomUUID();
|
|
46
46
|
this.distinctId = this.getDistinctId();
|
|
47
47
|
}
|
|
@@ -63,15 +63,16 @@ var PosthogAnalytics = class {
|
|
|
63
63
|
}
|
|
64
64
|
writeCliConfig({ distinctId, sessionId }) {
|
|
65
65
|
try {
|
|
66
|
-
writeFileSync(
|
|
67
|
-
} catch
|
|
66
|
+
writeFileSync(path2.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
|
|
67
|
+
} catch {
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
initializePostHog(apiKey, host) {
|
|
71
71
|
this.client = new PostHog(apiKey, {
|
|
72
72
|
host,
|
|
73
73
|
flushAt: 1,
|
|
74
|
-
flushInterval: 0
|
|
74
|
+
flushInterval: 0,
|
|
75
|
+
disableGeoip: false
|
|
75
76
|
});
|
|
76
77
|
this.captureSessionStart();
|
|
77
78
|
process.on("exit", () => {
|
|
@@ -80,7 +81,7 @@ var PosthogAnalytics = class {
|
|
|
80
81
|
});
|
|
81
82
|
}
|
|
82
83
|
isTelemetryEnabled() {
|
|
83
|
-
if (process.env.
|
|
84
|
+
if (process.env.MASTRA_TELEMETRY_DISABLED) {
|
|
84
85
|
return false;
|
|
85
86
|
}
|
|
86
87
|
return true;
|
|
@@ -135,17 +136,19 @@ var PosthogAnalytics = class {
|
|
|
135
136
|
event: "cli_command",
|
|
136
137
|
properties: {
|
|
137
138
|
...this.getSystemProperties(),
|
|
138
|
-
...commandData
|
|
139
|
+
...commandData,
|
|
140
|
+
origin: options?.origin || "oss"
|
|
139
141
|
}
|
|
140
142
|
});
|
|
141
|
-
} catch
|
|
143
|
+
} catch {
|
|
142
144
|
}
|
|
143
145
|
}
|
|
144
146
|
// Helper method to wrap command execution with timing
|
|
145
147
|
async trackCommandExecution({
|
|
146
148
|
command,
|
|
147
149
|
args,
|
|
148
|
-
execution
|
|
150
|
+
execution,
|
|
151
|
+
origin
|
|
149
152
|
}) {
|
|
150
153
|
const startTime = process.hrtime();
|
|
151
154
|
try {
|
|
@@ -156,7 +159,8 @@ var PosthogAnalytics = class {
|
|
|
156
159
|
command,
|
|
157
160
|
args,
|
|
158
161
|
durationMs,
|
|
159
|
-
status: "success"
|
|
162
|
+
status: "success",
|
|
163
|
+
origin
|
|
160
164
|
});
|
|
161
165
|
return result;
|
|
162
166
|
} catch (error) {
|
|
@@ -167,7 +171,8 @@ var PosthogAnalytics = class {
|
|
|
167
171
|
args,
|
|
168
172
|
durationMs,
|
|
169
173
|
status: "error",
|
|
170
|
-
error: error instanceof Error ? error.message : String(error)
|
|
174
|
+
error: error instanceof Error ? error.message : String(error),
|
|
175
|
+
origin
|
|
171
176
|
});
|
|
172
177
|
throw error;
|
|
173
178
|
}
|
|
@@ -179,7 +184,7 @@ var PosthogAnalytics = class {
|
|
|
179
184
|
}
|
|
180
185
|
try {
|
|
181
186
|
await this.client.shutdown();
|
|
182
|
-
} catch
|
|
187
|
+
} catch {
|
|
183
188
|
}
|
|
184
189
|
}
|
|
185
190
|
};
|
|
@@ -344,69 +349,335 @@ function requirePicocolors () {
|
|
|
344
349
|
var picocolorsExports = /*@__PURE__*/ requirePicocolors();
|
|
345
350
|
var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
|
|
346
351
|
|
|
347
|
-
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(`
|
|
348
|
-
`)];for(const[E,
|
|
349
|
-
`?(
|
|
350
|
-
`&&(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,`
|
|
351
356
|
`).split(`
|
|
352
|
-
`).map(
|
|
353
|
-
`)}
|
|
354
|
-
`),
|
|
355
|
-
`),s=[];for(let
|
|
356
|
-
`),
|
|
357
|
-
`).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=
|
|
358
|
-
`);this.output.write(s[
|
|
359
|
-
`).slice(
|
|
360
|
-
`)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}
|
|
361
|
-
|
|
362
|
-
function
|
|
363
|
-
${
|
|
364
|
-
`,t
|
|
365
|
-
${color2.yellow(
|
|
366
|
-
${color2.yellow(
|
|
367
|
-
`;case "submit":return `${n}${color2.gray(
|
|
368
|
-
|
|
369
|
-
${color2.cyan(
|
|
370
|
-
`}}}).prompt(),
|
|
371
|
-
${
|
|
372
|
-
|
|
373
|
-
${color2.gray(
|
|
374
|
-
${color2.cyan(
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
${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(`
|
|
379
|
-
${color2.cyan(a)} `)}
|
|
380
|
-
${color2.cyan($)}
|
|
381
|
-
`}}}).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.
|
|
382
|
-
${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)}
|
|
383
|
-
${y(this.state)} ${s.message}
|
|
384
|
-
`;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}
|
|
385
|
-
${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
|
|
386
|
-
`).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
|
|
387
|
-
`);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
388
|
-
${color2.yellow(a)} `)+`
|
|
389
|
-
`+r+`
|
|
390
|
-
`}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
|
|
391
|
-
${color2.cyan(a)} `)}
|
|
392
|
-
${color2.cyan($)}
|
|
393
|
-
`}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
|
|
394
|
-
${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}
|
|
395
383
|
`.split(`
|
|
396
|
-
`),i=
|
|
397
|
-
`);process.stdout.write(`${color2.gray(
|
|
398
|
-
${color2.green(
|
|
399
|
-
${
|
|
400
|
-
${color2.gray(
|
|
401
|
-
`);},
|
|
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(`
|
|
397
|
+
`)}
|
|
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
|
+
}
|
|
402
636
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
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
|
+
}
|
|
406
643
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
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);
|
|
410
681
|
|
|
411
682
|
// eslint-disable-next-line no-warning-comments
|
|
412
683
|
// TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
|
|
@@ -541,18 +812,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
|
|
|
541
812
|
yellowBright: yellowBright
|
|
542
813
|
});
|
|
543
814
|
|
|
544
|
-
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';
|
|
545
818
|
|
|
546
819
|
const isInteractive = stream => Boolean(
|
|
547
820
|
stream.isTTY
|
|
548
|
-
&&
|
|
549
|
-
&& !('CI' in
|
|
821
|
+
&& y$1.env.TERM !== 'dumb'
|
|
822
|
+
&& !('CI' in y$1.env),
|
|
550
823
|
);
|
|
551
824
|
|
|
552
825
|
const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
|
|
553
826
|
const successSymbol = green(isUnicodeSupported ? '✔' : '√');
|
|
554
827
|
const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
|
|
555
|
-
const errorSymbol = red(isUnicodeSupported ? '
|
|
828
|
+
const errorSymbol = red(isUnicodeSupported ? '✖' : '×');
|
|
556
829
|
|
|
557
830
|
const defaultSpinner = {
|
|
558
831
|
frames: isUnicodeSupported
|
|
@@ -595,7 +868,7 @@ class YoctoSpinner {
|
|
|
595
868
|
this.#frames = spinner.frames;
|
|
596
869
|
this.#interval = spinner.interval;
|
|
597
870
|
this.#text = options.text ?? '';
|
|
598
|
-
this.#stream = options.stream ??
|
|
871
|
+
this.#stream = options.stream ?? y$1.stderr;
|
|
599
872
|
this.#color = options.color ?? 'cyan';
|
|
600
873
|
this.#isInteractive = isInteractive(this.#stream);
|
|
601
874
|
this.#exitHandlerBound = this.#exitHandler.bind(this);
|
|
@@ -667,8 +940,8 @@ class YoctoSpinner {
|
|
|
667
940
|
return this.#text;
|
|
668
941
|
}
|
|
669
942
|
|
|
670
|
-
set text(value
|
|
671
|
-
this.#text = value;
|
|
943
|
+
set text(value) {
|
|
944
|
+
this.#text = value ?? '';
|
|
672
945
|
this.#render();
|
|
673
946
|
}
|
|
674
947
|
|
|
@@ -732,7 +1005,7 @@ class YoctoSpinner {
|
|
|
732
1005
|
|
|
733
1006
|
#lineCount(text) {
|
|
734
1007
|
const width = this.#stream.columns ?? 80;
|
|
735
|
-
const lines = text.split('\n');
|
|
1008
|
+
const lines = stripVTControlCharacters(text).split('\n');
|
|
736
1009
|
|
|
737
1010
|
let lineCount = 0;
|
|
738
1011
|
for (const line of lines) {
|
|
@@ -755,13 +1028,13 @@ class YoctoSpinner {
|
|
|
755
1028
|
}
|
|
756
1029
|
|
|
757
1030
|
#subscribeToProcessEvents() {
|
|
758
|
-
|
|
759
|
-
|
|
1031
|
+
y$1.once('SIGINT', this.#exitHandlerBound);
|
|
1032
|
+
y$1.once('SIGTERM', this.#exitHandlerBound);
|
|
760
1033
|
}
|
|
761
1034
|
|
|
762
1035
|
#unsubscribeFromProcessEvents() {
|
|
763
|
-
|
|
764
|
-
|
|
1036
|
+
y$1.off('SIGINT', this.#exitHandlerBound);
|
|
1037
|
+
y$1.off('SIGTERM', this.#exitHandlerBound);
|
|
765
1038
|
}
|
|
766
1039
|
|
|
767
1040
|
#exitHandler(signal) {
|
|
@@ -772,7 +1045,7 @@ class YoctoSpinner {
|
|
|
772
1045
|
// SIGINT: 128 + 2
|
|
773
1046
|
// SIGTERM: 128 + 15
|
|
774
1047
|
const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
|
|
775
|
-
|
|
1048
|
+
y$1.exit(exitCode);
|
|
776
1049
|
}
|
|
777
1050
|
}
|
|
778
1051
|
|
|
@@ -781,39 +1054,86 @@ function yoctoSpinner(options) {
|
|
|
781
1054
|
}
|
|
782
1055
|
|
|
783
1056
|
var LogLevel = {
|
|
784
|
-
INFO: "info"
|
|
785
|
-
|
|
786
|
-
|
|
1057
|
+
INFO: "info",
|
|
1058
|
+
ERROR: "error"};
|
|
1059
|
+
var MastraLogger = class {
|
|
1060
|
+
name;
|
|
1061
|
+
level;
|
|
787
1062
|
transports;
|
|
788
1063
|
constructor(options = {}) {
|
|
789
|
-
this.
|
|
790
|
-
|
|
791
|
-
this.
|
|
792
|
-
|
|
793
|
-
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
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({
|
|
797
1115
|
colorize: true,
|
|
798
1116
|
levelFirst: true,
|
|
799
1117
|
ignore: "pid,hostname",
|
|
800
1118
|
colorizeObjects: true,
|
|
801
1119
|
translateTime: "SYS:standard",
|
|
802
1120
|
singleLine: false
|
|
803
|
-
})
|
|
804
|
-
|
|
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([
|
|
1131
|
+
...transportsAry.map(([, transport]) => ({
|
|
805
1132
|
stream: transport,
|
|
806
1133
|
level: options.level || LogLevel.INFO
|
|
807
1134
|
})),
|
|
808
1135
|
{
|
|
809
|
-
stream:
|
|
810
|
-
colorize: true,
|
|
811
|
-
levelFirst: true,
|
|
812
|
-
ignore: "pid,hostname",
|
|
813
|
-
colorizeObjects: true,
|
|
814
|
-
translateTime: "SYS:standard",
|
|
815
|
-
singleLine: false
|
|
816
|
-
}),
|
|
1136
|
+
stream: prettyStream,
|
|
817
1137
|
level: options.level || LogLevel.INFO
|
|
818
1138
|
}
|
|
819
1139
|
])
|
|
@@ -831,67 +1151,8 @@ var Logger = class {
|
|
|
831
1151
|
error(message, args = {}) {
|
|
832
1152
|
this.logger.error(args, message);
|
|
833
1153
|
}
|
|
834
|
-
// Stream creation for process output handling
|
|
835
|
-
createStream() {
|
|
836
|
-
return new Transform({
|
|
837
|
-
transform: (chunk, _encoding, callback) => {
|
|
838
|
-
const line = chunk.toString().trim();
|
|
839
|
-
if (line) {
|
|
840
|
-
this.info(line);
|
|
841
|
-
}
|
|
842
|
-
callback(null, chunk);
|
|
843
|
-
}
|
|
844
|
-
});
|
|
845
|
-
}
|
|
846
|
-
async getLogs(transportId) {
|
|
847
|
-
if (!transportId || !this.transports[transportId]) {
|
|
848
|
-
return [];
|
|
849
|
-
}
|
|
850
|
-
return this.transports[transportId].getLogs();
|
|
851
|
-
}
|
|
852
|
-
async getLogsByRunId({ runId, transportId }) {
|
|
853
|
-
return this.transports[transportId]?.getLogsByRunId({ runId });
|
|
854
|
-
}
|
|
855
1154
|
};
|
|
856
|
-
function createLogger(options) {
|
|
857
|
-
return new Logger(options);
|
|
858
|
-
}
|
|
859
1155
|
|
|
860
|
-
function getPackageManager() {
|
|
861
|
-
const userAgent = process.env.npm_config_user_agent || "";
|
|
862
|
-
const execPath = process.env.npm_execpath || "";
|
|
863
|
-
if (userAgent.includes("yarn")) {
|
|
864
|
-
return "yarn";
|
|
865
|
-
}
|
|
866
|
-
if (userAgent.includes("pnpm")) {
|
|
867
|
-
return "pnpm";
|
|
868
|
-
}
|
|
869
|
-
if (userAgent.includes("npm")) {
|
|
870
|
-
return "npm";
|
|
871
|
-
}
|
|
872
|
-
if (execPath.includes("yarn")) {
|
|
873
|
-
return "yarn";
|
|
874
|
-
}
|
|
875
|
-
if (execPath.includes("pnpm")) {
|
|
876
|
-
return "pnpm";
|
|
877
|
-
}
|
|
878
|
-
if (execPath.includes("npm")) {
|
|
879
|
-
return "npm";
|
|
880
|
-
}
|
|
881
|
-
return "npm";
|
|
882
|
-
}
|
|
883
|
-
function getPackageManagerInstallCommand(pm) {
|
|
884
|
-
switch (pm) {
|
|
885
|
-
case "npm":
|
|
886
|
-
return "install";
|
|
887
|
-
case "yarn":
|
|
888
|
-
return "add";
|
|
889
|
-
case "pnpm":
|
|
890
|
-
return "add";
|
|
891
|
-
default:
|
|
892
|
-
return "install";
|
|
893
|
-
}
|
|
894
|
-
}
|
|
895
1156
|
var DepsService = class {
|
|
896
1157
|
packageManager;
|
|
897
1158
|
constructor() {
|
|
@@ -900,11 +1161,11 @@ var DepsService = class {
|
|
|
900
1161
|
findLockFile(dir) {
|
|
901
1162
|
const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
|
|
902
1163
|
for (const file of lockFiles) {
|
|
903
|
-
if (fs3__default__default.existsSync(
|
|
1164
|
+
if (fs3__default__default.existsSync(path2.join(dir, file))) {
|
|
904
1165
|
return file;
|
|
905
1166
|
}
|
|
906
1167
|
}
|
|
907
|
-
const parentDir =
|
|
1168
|
+
const parentDir = path2.resolve(dir, "..");
|
|
908
1169
|
if (parentDir !== dir) {
|
|
909
1170
|
return this.findLockFile(parentDir);
|
|
910
1171
|
}
|
|
@@ -941,7 +1202,7 @@ var DepsService = class {
|
|
|
941
1202
|
}
|
|
942
1203
|
async checkDependencies(dependencies) {
|
|
943
1204
|
try {
|
|
944
|
-
const packageJsonPath =
|
|
1205
|
+
const packageJsonPath = path2.join(process.cwd(), "package.json");
|
|
945
1206
|
try {
|
|
946
1207
|
await fs4.access(packageJsonPath);
|
|
947
1208
|
} catch {
|
|
@@ -961,7 +1222,7 @@ var DepsService = class {
|
|
|
961
1222
|
}
|
|
962
1223
|
async getProjectName() {
|
|
963
1224
|
try {
|
|
964
|
-
const packageJsonPath =
|
|
1225
|
+
const packageJsonPath = path2.join(process.cwd(), "package.json");
|
|
965
1226
|
const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
|
|
966
1227
|
const pkg = JSON.parse(packageJson);
|
|
967
1228
|
return pkg.name;
|
|
@@ -972,7 +1233,7 @@ var DepsService = class {
|
|
|
972
1233
|
async getPackageVersion() {
|
|
973
1234
|
const __filename = fileURLToPath(import.meta.url);
|
|
974
1235
|
const __dirname = dirname(__filename);
|
|
975
|
-
const pkgJsonPath =
|
|
1236
|
+
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
976
1237
|
const content = await fsExtra3.readJSON(pkgJsonPath);
|
|
977
1238
|
return content.version;
|
|
978
1239
|
}
|
|
@@ -985,6 +1246,153 @@ var DepsService = class {
|
|
|
985
1246
|
await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
|
|
986
1247
|
}
|
|
987
1248
|
};
|
|
1249
|
+
function getPackageManager() {
|
|
1250
|
+
const userAgent = process.env.npm_config_user_agent || "";
|
|
1251
|
+
const execPath = process.env.npm_execpath || "";
|
|
1252
|
+
if (userAgent.includes("yarn")) {
|
|
1253
|
+
return "yarn";
|
|
1254
|
+
}
|
|
1255
|
+
if (userAgent.includes("pnpm")) {
|
|
1256
|
+
return "pnpm";
|
|
1257
|
+
}
|
|
1258
|
+
if (userAgent.includes("npm")) {
|
|
1259
|
+
return "npm";
|
|
1260
|
+
}
|
|
1261
|
+
if (execPath.includes("yarn")) {
|
|
1262
|
+
return "yarn";
|
|
1263
|
+
}
|
|
1264
|
+
if (execPath.includes("pnpm")) {
|
|
1265
|
+
return "pnpm";
|
|
1266
|
+
}
|
|
1267
|
+
if (execPath.includes("npm")) {
|
|
1268
|
+
return "npm";
|
|
1269
|
+
}
|
|
1270
|
+
return "npm";
|
|
1271
|
+
}
|
|
1272
|
+
function getPackageManagerInstallCommand(pm) {
|
|
1273
|
+
switch (pm) {
|
|
1274
|
+
case "npm":
|
|
1275
|
+
return "install";
|
|
1276
|
+
case "yarn":
|
|
1277
|
+
return "add";
|
|
1278
|
+
case "pnpm":
|
|
1279
|
+
return "add";
|
|
1280
|
+
default:
|
|
1281
|
+
return "install";
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
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
|
+
};
|
|
1300
|
+
}
|
|
1301
|
+
return {
|
|
1302
|
+
mcpServers: {
|
|
1303
|
+
mastra: {
|
|
1304
|
+
command: "npx",
|
|
1305
|
+
args
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
};
|
|
1309
|
+
};
|
|
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
|
+
}
|
|
1320
|
+
return {
|
|
1321
|
+
...original,
|
|
1322
|
+
mcpServers: {
|
|
1323
|
+
...original?.mcpServers || {},
|
|
1324
|
+
...createMcpConfig(editor).mcpServers
|
|
1325
|
+
}
|
|
1326
|
+
};
|
|
1327
|
+
}
|
|
1328
|
+
async function writeMergedConfig(configPath, editor) {
|
|
1329
|
+
const configExists = existsSync(configPath);
|
|
1330
|
+
const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
|
|
1331
|
+
await ensureFile(configPath);
|
|
1332
|
+
await writeJSON(configPath, config, {
|
|
1333
|
+
spaces: 2
|
|
1334
|
+
});
|
|
1335
|
+
}
|
|
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 }) {
|
|
1344
|
+
if (editor === `cursor`) {
|
|
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");
|
|
1349
|
+
}
|
|
1350
|
+
if (editor === `cursor-global`) {
|
|
1351
|
+
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
1352
|
+
if (alreadyInstalled) {
|
|
1353
|
+
return;
|
|
1354
|
+
}
|
|
1355
|
+
await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
|
|
1356
|
+
}
|
|
1357
|
+
if (editor === `windsurf`) {
|
|
1358
|
+
const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
|
|
1359
|
+
if (alreadyInstalled) {
|
|
1360
|
+
return;
|
|
1361
|
+
}
|
|
1362
|
+
await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
|
|
1363
|
+
}
|
|
1364
|
+
}
|
|
1365
|
+
async function globalMCPIsAlreadyInstalled(editor) {
|
|
1366
|
+
let configPath = ``;
|
|
1367
|
+
if (editor === "windsurf") {
|
|
1368
|
+
configPath = windsurfGlobalMCPConfigPath;
|
|
1369
|
+
} else if (editor === "cursor-global") {
|
|
1370
|
+
configPath = cursorGlobalMCPConfigPath;
|
|
1371
|
+
} else if (editor === "vscode") {
|
|
1372
|
+
configPath = vscodeGlobalMCPConfigPath;
|
|
1373
|
+
}
|
|
1374
|
+
if (!configPath || !existsSync(configPath)) {
|
|
1375
|
+
return false;
|
|
1376
|
+
}
|
|
1377
|
+
try {
|
|
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
|
+
}
|
|
1387
|
+
if (!configContents?.mcpServers) return false;
|
|
1388
|
+
const hasMastraMCP = Object.values(configContents.mcpServers).some(
|
|
1389
|
+
(server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
|
|
1390
|
+
);
|
|
1391
|
+
return hasMastraMCP;
|
|
1392
|
+
} catch {
|
|
1393
|
+
return false;
|
|
1394
|
+
}
|
|
1395
|
+
}
|
|
988
1396
|
var EnvService = class {
|
|
989
1397
|
};
|
|
990
1398
|
var FileEnvService = class extends EnvService {
|
|
@@ -1056,8 +1464,8 @@ var FileService = class {
|
|
|
1056
1464
|
*/
|
|
1057
1465
|
async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
|
|
1058
1466
|
const __filename = fileURLToPath(import.meta.url);
|
|
1059
|
-
const __dirname =
|
|
1060
|
-
const filePath =
|
|
1467
|
+
const __dirname = path2.dirname(__filename);
|
|
1468
|
+
const filePath = path2.resolve(__dirname, "starter-files", inputFile);
|
|
1061
1469
|
const fileString = fs3__default__default.readFileSync(filePath, "utf8");
|
|
1062
1470
|
if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
|
|
1063
1471
|
console.log(`${outputFilePath} already exists`);
|
|
@@ -1067,7 +1475,7 @@ var FileService = class {
|
|
|
1067
1475
|
return true;
|
|
1068
1476
|
}
|
|
1069
1477
|
async setupEnvFile({ dbUrl }) {
|
|
1070
|
-
const envPath =
|
|
1478
|
+
const envPath = path2.join(process.cwd(), ".env.development");
|
|
1071
1479
|
await fsExtra3.ensureFile(envPath);
|
|
1072
1480
|
const fileEnvService = new FileEnvService(envPath);
|
|
1073
1481
|
await fileEnvService.setEnvValue("DB_URL", dbUrl);
|
|
@@ -1091,9 +1499,9 @@ var FileService = class {
|
|
|
1091
1499
|
fs3__default__default.writeFileSync(filePath, fileContent);
|
|
1092
1500
|
}
|
|
1093
1501
|
};
|
|
1094
|
-
|
|
1502
|
+
new PinoLogger({
|
|
1095
1503
|
name: "Mastra CLI",
|
|
1096
|
-
level: "
|
|
1504
|
+
level: "info"
|
|
1097
1505
|
});
|
|
1098
1506
|
var exec = util.promisify(child_process.exec);
|
|
1099
1507
|
var getAISDKPackage = (llmProvider) => {
|
|
@@ -1104,6 +1512,10 @@ var getAISDKPackage = (llmProvider) => {
|
|
|
1104
1512
|
return "@ai-sdk/anthropic";
|
|
1105
1513
|
case "groq":
|
|
1106
1514
|
return "@ai-sdk/groq";
|
|
1515
|
+
case "google":
|
|
1516
|
+
return "@ai-sdk/google";
|
|
1517
|
+
case "cerebras":
|
|
1518
|
+
return "@ai-sdk/cerebras";
|
|
1107
1519
|
default:
|
|
1108
1520
|
return "@ai-sdk/openai";
|
|
1109
1521
|
}
|
|
@@ -1113,39 +1525,55 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1113
1525
|
let modelItem = "";
|
|
1114
1526
|
if (llmProvider === "openai") {
|
|
1115
1527
|
providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
|
|
1116
|
-
modelItem = `openai('gpt-4o')`;
|
|
1528
|
+
modelItem = `openai('gpt-4o-mini')`;
|
|
1117
1529
|
} else if (llmProvider === "anthropic") {
|
|
1118
1530
|
providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
|
|
1119
1531
|
modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
|
|
1120
1532
|
} else if (llmProvider === "groq") {
|
|
1121
1533
|
providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
|
|
1122
|
-
modelItem = `groq('
|
|
1534
|
+
modelItem = `groq('llama-3.3-70b-versatile')`;
|
|
1535
|
+
} else if (llmProvider === "google") {
|
|
1536
|
+
providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
|
|
1537
|
+
modelItem = `google('gemini-2.5-pro-exp-03-25')`;
|
|
1538
|
+
} else if (llmProvider === "cerebras") {
|
|
1539
|
+
providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
|
|
1540
|
+
modelItem = `cerebras('llama-3.3-70b')`;
|
|
1123
1541
|
}
|
|
1124
1542
|
return { providerImport, modelItem };
|
|
1125
1543
|
};
|
|
1126
1544
|
async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
1127
1545
|
const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
|
|
1128
1546
|
const instructions = `
|
|
1129
|
-
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.
|
|
1130
1548
|
|
|
1131
1549
|
Your primary function is to help users get weather details for specific locations. When responding:
|
|
1132
1550
|
- Always ask for a location if none is provided
|
|
1551
|
+
- If the location name isn't in English, please translate it
|
|
1133
1552
|
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
|
|
1134
1553
|
- Include relevant details like humidity, wind conditions, and precipitation
|
|
1135
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.
|
|
1136
1557
|
|
|
1137
1558
|
${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
|
|
1138
1559
|
`;
|
|
1139
1560
|
const content = `
|
|
1140
|
-
${providerImport}
|
|
1561
|
+
${providerImport}
|
|
1141
1562
|
import { Agent } from '@mastra/core/agent';
|
|
1142
|
-
|
|
1563
|
+
import { Memory } from '@mastra/memory';
|
|
1564
|
+
import { LibSQLStore } from '@mastra/libsql';
|
|
1565
|
+
${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
|
|
1143
1566
|
|
|
1144
1567
|
export const weatherAgent = new Agent({
|
|
1145
1568
|
name: 'Weather Agent',
|
|
1146
1569
|
instructions: \`${instructions}\`,
|
|
1147
1570
|
model: ${modelItem},
|
|
1148
1571
|
${addExampleTool ? "tools: { weatherTool }," : ""}
|
|
1572
|
+
memory: new Memory({
|
|
1573
|
+
storage: new LibSQLStore({
|
|
1574
|
+
url: "file:../mastra.db", // path is relative to the .mastra/output directory
|
|
1575
|
+
})
|
|
1576
|
+
})
|
|
1149
1577
|
});
|
|
1150
1578
|
`;
|
|
1151
1579
|
const formattedContent = await prettier.format(content, {
|
|
@@ -1155,138 +1583,156 @@ export const weatherAgent = new Agent({
|
|
|
1155
1583
|
await fs4.writeFile(destPath, "");
|
|
1156
1584
|
await fs4.writeFile(destPath, formattedContent);
|
|
1157
1585
|
}
|
|
1158
|
-
async function writeWorkflowSample(destPath
|
|
1159
|
-
const {
|
|
1160
|
-
const content = `${providerImport}
|
|
1161
|
-
import { Agent } from '@mastra/core/agent';
|
|
1162
|
-
import { Step, Workflow } from '@mastra/core/workflows';
|
|
1586
|
+
async function writeWorkflowSample(destPath) {
|
|
1587
|
+
const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
|
|
1163
1588
|
import { z } from 'zod';
|
|
1164
1589
|
|
|
1165
|
-
const
|
|
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
|
+
})
|
|
1166
1598
|
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
\u{1F31E} AFTERNOON ACTIVITIES
|
|
1190
|
-
Outdoor:
|
|
1191
|
-
\u2022 [Activity Name] - [Brief description including specific location/route]
|
|
1192
|
-
Best timing: [specific time range]
|
|
1193
|
-
Note: [relevant weather consideration]
|
|
1194
|
-
|
|
1195
|
-
\u{1F3E0} INDOOR ALTERNATIVES
|
|
1196
|
-
\u2022 [Activity Name] - [Brief description including specific venue]
|
|
1197
|
-
Ideal for: [weather condition that would trigger this alternative]
|
|
1198
|
-
|
|
1199
|
-
\u26A0\uFE0F SPECIAL CONSIDERATIONS
|
|
1200
|
-
\u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
|
|
1201
|
-
|
|
1202
|
-
Guidelines:
|
|
1203
|
-
- Suggest 2-3 time-specific outdoor activities per day
|
|
1204
|
-
- Include 1-2 indoor backup options
|
|
1205
|
-
- For precipitation >50%, lead with indoor activities
|
|
1206
|
-
- All activities must be specific to the location
|
|
1207
|
-
- Include specific venues, trails, or locations
|
|
1208
|
-
- Consider activity intensity based on temperature
|
|
1209
|
-
- Keep descriptions concise but informative
|
|
1210
|
-
|
|
1211
|
-
Maintain this exact formatting for consistency, using the emoji and section headers as shown.
|
|
1212
|
-
\`,
|
|
1213
|
-
});
|
|
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
|
+
}
|
|
1214
1620
|
|
|
1215
|
-
const fetchWeather =
|
|
1621
|
+
const fetchWeather = createStep({
|
|
1216
1622
|
id: 'fetch-weather',
|
|
1217
1623
|
description: 'Fetches weather forecast for a given city',
|
|
1218
1624
|
inputSchema: z.object({
|
|
1219
1625
|
city: z.string().describe('The city to get the weather for'),
|
|
1220
1626
|
}),
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
throw new Error('Trigger data not found');
|
|
1627
|
+
outputSchema: forecastSchema,
|
|
1628
|
+
execute: async ({ inputData }) => {
|
|
1629
|
+
if (!inputData) {
|
|
1630
|
+
throw new Error('Input data not found');
|
|
1226
1631
|
}
|
|
1227
1632
|
|
|
1228
|
-
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\`;
|
|
1229
1634
|
const geocodingResponse = await fetch(geocodingUrl);
|
|
1230
1635
|
const geocodingData = (await geocodingResponse.json()) as {
|
|
1231
1636
|
results: { latitude: number; longitude: number; name: string }[];
|
|
1232
1637
|
};
|
|
1233
1638
|
|
|
1234
1639
|
if (!geocodingData.results?.[0]) {
|
|
1235
|
-
throw new Error(\`Location '\${
|
|
1640
|
+
throw new Error(\`Location '\${inputData.city}' not found\`);
|
|
1236
1641
|
}
|
|
1237
1642
|
|
|
1238
1643
|
const { latitude, longitude, name } = geocodingData.results[0];
|
|
1239
1644
|
|
|
1240
|
-
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\`;
|
|
1241
1646
|
const response = await fetch(weatherUrl);
|
|
1242
1647
|
const data = (await response.json()) as {
|
|
1243
|
-
|
|
1244
|
-
time: string
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1648
|
+
current: {
|
|
1649
|
+
time: string
|
|
1650
|
+
precipitation: number
|
|
1651
|
+
weathercode: number
|
|
1652
|
+
}
|
|
1653
|
+
hourly: {
|
|
1654
|
+
precipitation_probability: number[]
|
|
1655
|
+
temperature_2m: number[]
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1251
1658
|
|
|
1252
|
-
const forecast =
|
|
1253
|
-
date,
|
|
1254
|
-
maxTemp: data.
|
|
1255
|
-
minTemp: data.
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
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
|
+
}
|
|
1260
1670
|
|
|
1261
1671
|
return forecast;
|
|
1262
1672
|
},
|
|
1263
1673
|
});
|
|
1264
1674
|
|
|
1265
|
-
const forecastSchema = z.array(
|
|
1266
|
-
z.object({
|
|
1267
|
-
date: z.string(),
|
|
1268
|
-
maxTemp: z.number(),
|
|
1269
|
-
minTemp: z.number(),
|
|
1270
|
-
precipitationChance: z.number(),
|
|
1271
|
-
condition: z.string(),
|
|
1272
|
-
location: z.string(),
|
|
1273
|
-
}),
|
|
1274
|
-
);
|
|
1275
1675
|
|
|
1276
|
-
const planActivities =
|
|
1676
|
+
const planActivities = createStep({
|
|
1277
1677
|
id: 'plan-activities',
|
|
1278
1678
|
description: 'Suggests activities based on weather conditions',
|
|
1279
1679
|
inputSchema: forecastSchema,
|
|
1280
|
-
|
|
1281
|
-
|
|
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
|
+
}
|
|
1282
1689
|
|
|
1283
|
-
|
|
1284
|
-
|
|
1690
|
+
const agent = mastra?.getAgent('weatherAgent');
|
|
1691
|
+
if (!agent) {
|
|
1692
|
+
throw new Error('Weather agent not found');
|
|
1285
1693
|
}
|
|
1286
1694
|
|
|
1287
|
-
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:
|
|
1288
1696
|
\${JSON.stringify(forecast, null, 2)}
|
|
1289
|
-
|
|
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.\`;
|
|
1290
1736
|
|
|
1291
1737
|
const response = await agent.stream([
|
|
1292
1738
|
{
|
|
@@ -1295,45 +1741,29 @@ const planActivities = new Step({
|
|
|
1295
1741
|
},
|
|
1296
1742
|
]);
|
|
1297
1743
|
|
|
1744
|
+
let activitiesText = '';
|
|
1745
|
+
|
|
1298
1746
|
for await (const chunk of response.textStream) {
|
|
1299
1747
|
process.stdout.write(chunk);
|
|
1748
|
+
activitiesText += chunk;
|
|
1300
1749
|
}
|
|
1301
1750
|
|
|
1302
1751
|
return {
|
|
1303
|
-
activities:
|
|
1752
|
+
activities: activitiesText,
|
|
1304
1753
|
};
|
|
1305
1754
|
},
|
|
1306
1755
|
});
|
|
1307
1756
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
1: 'Mainly clear',
|
|
1312
|
-
2: 'Partly cloudy',
|
|
1313
|
-
3: 'Overcast',
|
|
1314
|
-
45: 'Foggy',
|
|
1315
|
-
48: 'Depositing rime fog',
|
|
1316
|
-
51: 'Light drizzle',
|
|
1317
|
-
53: 'Moderate drizzle',
|
|
1318
|
-
55: 'Dense drizzle',
|
|
1319
|
-
61: 'Slight rain',
|
|
1320
|
-
63: 'Moderate rain',
|
|
1321
|
-
65: 'Heavy rain',
|
|
1322
|
-
71: 'Slight snow fall',
|
|
1323
|
-
73: 'Moderate snow fall',
|
|
1324
|
-
75: 'Heavy snow fall',
|
|
1325
|
-
95: 'Thunderstorm',
|
|
1326
|
-
};
|
|
1327
|
-
return conditions[code] || 'Unknown';
|
|
1328
|
-
}
|
|
1329
|
-
|
|
1330
|
-
const weatherWorkflow = new Workflow({
|
|
1331
|
-
name: 'weather-workflow',
|
|
1332
|
-
triggerSchema: z.object({
|
|
1757
|
+
const weatherWorkflow = createWorkflow({
|
|
1758
|
+
id: 'weather-workflow',
|
|
1759
|
+
inputSchema: z.object({
|
|
1333
1760
|
city: z.string().describe('The city to get the weather for'),
|
|
1334
1761
|
}),
|
|
1762
|
+
outputSchema: z.object({
|
|
1763
|
+
activities: z.string(),
|
|
1764
|
+
})
|
|
1335
1765
|
})
|
|
1336
|
-
.
|
|
1766
|
+
.then(fetchWeather)
|
|
1337
1767
|
.then(planActivities);
|
|
1338
1768
|
|
|
1339
1769
|
weatherWorkflow.commit();
|
|
@@ -1357,7 +1787,7 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
|
|
|
1357
1787
|
case "tools":
|
|
1358
1788
|
return writeToolSample(destPath);
|
|
1359
1789
|
case "workflows":
|
|
1360
|
-
return writeWorkflowSample(destPath
|
|
1790
|
+
return writeWorkflowSample(destPath);
|
|
1361
1791
|
default:
|
|
1362
1792
|
return "";
|
|
1363
1793
|
}
|
|
@@ -1373,7 +1803,7 @@ var writeIndexFile = async ({
|
|
|
1373
1803
|
addWorkflow
|
|
1374
1804
|
}) => {
|
|
1375
1805
|
const indexPath = dirPath + "/index.ts";
|
|
1376
|
-
const destPath =
|
|
1806
|
+
const destPath = path2.join(indexPath);
|
|
1377
1807
|
try {
|
|
1378
1808
|
await fs4.writeFile(destPath, "");
|
|
1379
1809
|
const filteredExports = [
|
|
@@ -1395,13 +1825,18 @@ export const mastra = new Mastra()
|
|
|
1395
1825
|
destPath,
|
|
1396
1826
|
`
|
|
1397
1827
|
import { Mastra } from '@mastra/core/mastra';
|
|
1398
|
-
import {
|
|
1399
|
-
|
|
1400
|
-
${
|
|
1828
|
+
import { PinoLogger } from '@mastra/loggers';
|
|
1829
|
+
import { LibSQLStore } from '@mastra/libsql';
|
|
1830
|
+
${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
|
|
1831
|
+
${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
|
|
1401
1832
|
|
|
1402
1833
|
export const mastra = new Mastra({
|
|
1403
1834
|
${filteredExports.join("\n ")}
|
|
1404
|
-
|
|
1835
|
+
storage: new LibSQLStore({
|
|
1836
|
+
// stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
|
|
1837
|
+
url: ":memory:",
|
|
1838
|
+
}),
|
|
1839
|
+
logger: new PinoLogger({
|
|
1405
1840
|
name: 'Mastra',
|
|
1406
1841
|
level: 'info',
|
|
1407
1842
|
}),
|
|
@@ -1422,6 +1857,12 @@ var getAPIKey = async (provider) => {
|
|
|
1422
1857
|
case "groq":
|
|
1423
1858
|
key = "GROQ_API_KEY";
|
|
1424
1859
|
return key;
|
|
1860
|
+
case "google":
|
|
1861
|
+
key = "GOOGLE_GENERATIVE_AI_API_KEY";
|
|
1862
|
+
return key;
|
|
1863
|
+
case "cerebras":
|
|
1864
|
+
key = "CEREBRAS_API_KEY";
|
|
1865
|
+
return key;
|
|
1425
1866
|
default:
|
|
1426
1867
|
return key;
|
|
1427
1868
|
}
|
|
@@ -1431,11 +1872,13 @@ var writeAPIKey = async ({
|
|
|
1431
1872
|
apiKey = "your-api-key"
|
|
1432
1873
|
}) => {
|
|
1433
1874
|
const key = await getAPIKey(provider);
|
|
1434
|
-
|
|
1875
|
+
const escapedKey = shellQuote.quote([key]);
|
|
1876
|
+
const escapedApiKey = shellQuote.quote([apiKey]);
|
|
1877
|
+
await exec(`echo ${escapedKey}=${escapedApiKey} >> .env`);
|
|
1435
1878
|
};
|
|
1436
1879
|
var createMastraDir = async (directory) => {
|
|
1437
1880
|
let dir = directory.trim().split("/").filter((item) => item !== "");
|
|
1438
|
-
const dirPath =
|
|
1881
|
+
const dirPath = path2.join(process.cwd(), ...dir, "mastra");
|
|
1439
1882
|
try {
|
|
1440
1883
|
await fs4.access(dirPath);
|
|
1441
1884
|
return { ok: false };
|
|
@@ -1445,7 +1888,7 @@ var createMastraDir = async (directory) => {
|
|
|
1445
1888
|
}
|
|
1446
1889
|
};
|
|
1447
1890
|
var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
|
|
1448
|
-
const destPath = dirPath + `/${component}/
|
|
1891
|
+
const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
|
|
1449
1892
|
try {
|
|
1450
1893
|
await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
|
|
1451
1894
|
} catch (err) {
|
|
@@ -1453,38 +1896,26 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
|
|
|
1453
1896
|
}
|
|
1454
1897
|
};
|
|
1455
1898
|
var interactivePrompt = async () => {
|
|
1456
|
-
|
|
1457
|
-
const mastraProject = await
|
|
1899
|
+
Ie(color2.inverse(" Mastra Init "));
|
|
1900
|
+
const mastraProject = await Ce(
|
|
1458
1901
|
{
|
|
1459
|
-
directory: () =>
|
|
1902
|
+
directory: () => he({
|
|
1460
1903
|
message: "Where should we create the Mastra files? (default: src/)",
|
|
1461
1904
|
placeholder: "src/",
|
|
1462
1905
|
defaultValue: "src/"
|
|
1463
1906
|
}),
|
|
1464
|
-
|
|
1465
|
-
message: "Choose components to install:",
|
|
1466
|
-
options: [
|
|
1467
|
-
{ value: "agents", label: "Agents", hint: "recommended" },
|
|
1468
|
-
{
|
|
1469
|
-
value: "workflows",
|
|
1470
|
-
label: "Workflows"
|
|
1471
|
-
}
|
|
1472
|
-
]
|
|
1473
|
-
}),
|
|
1474
|
-
shouldAddTools: () => ce({
|
|
1475
|
-
message: "Add tools?",
|
|
1476
|
-
initialValue: false
|
|
1477
|
-
}),
|
|
1478
|
-
llmProvider: () => le({
|
|
1907
|
+
llmProvider: () => ve({
|
|
1479
1908
|
message: "Select default provider:",
|
|
1480
1909
|
options: [
|
|
1481
1910
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
1482
1911
|
{ value: "anthropic", label: "Anthropic" },
|
|
1483
|
-
{ value: "groq", label: "Groq" }
|
|
1912
|
+
{ value: "groq", label: "Groq" },
|
|
1913
|
+
{ value: "google", label: "Google" },
|
|
1914
|
+
{ value: "cerebras", label: "Cerebras" }
|
|
1484
1915
|
]
|
|
1485
1916
|
}),
|
|
1486
1917
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
1487
|
-
const keyChoice = await
|
|
1918
|
+
const keyChoice = await ve({
|
|
1488
1919
|
message: `Enter your ${llmProvider} API key?`,
|
|
1489
1920
|
options: [
|
|
1490
1921
|
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
@@ -1493,37 +1924,107 @@ var interactivePrompt = async () => {
|
|
|
1493
1924
|
initialValue: "skip"
|
|
1494
1925
|
});
|
|
1495
1926
|
if (keyChoice === "enter") {
|
|
1496
|
-
return
|
|
1927
|
+
return he({
|
|
1497
1928
|
message: "Enter your API key:",
|
|
1498
1929
|
placeholder: "sk-..."
|
|
1499
1930
|
});
|
|
1500
1931
|
}
|
|
1501
1932
|
return void 0;
|
|
1502
1933
|
},
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1934
|
+
configureEditorWithDocsMCP: async () => {
|
|
1935
|
+
const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
|
|
1936
|
+
const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
|
|
1937
|
+
const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
|
|
1938
|
+
const editor = await ve({
|
|
1939
|
+
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1940
|
+
options: [
|
|
1941
|
+
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
1942
|
+
{
|
|
1943
|
+
value: "cursor",
|
|
1944
|
+
label: "Cursor (project only)",
|
|
1945
|
+
hint: cursorIsAlreadyInstalled ? `Already installed globally` : void 0
|
|
1946
|
+
},
|
|
1947
|
+
{
|
|
1948
|
+
value: "cursor-global",
|
|
1949
|
+
label: "Cursor (global, all projects)",
|
|
1950
|
+
hint: cursorIsAlreadyInstalled ? `Already installed` : void 0
|
|
1951
|
+
},
|
|
1952
|
+
{
|
|
1953
|
+
value: "windsurf",
|
|
1954
|
+
label: "Windsurf",
|
|
1955
|
+
hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
|
|
1956
|
+
},
|
|
1957
|
+
{
|
|
1958
|
+
value: "vscode",
|
|
1959
|
+
label: "VSCode",
|
|
1960
|
+
hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
|
|
1961
|
+
}
|
|
1962
|
+
]
|
|
1963
|
+
});
|
|
1964
|
+
if (editor === `skip`) return void 0;
|
|
1965
|
+
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
1966
|
+
M.message(`
|
|
1967
|
+
Windsurf is already installed, skipping.`);
|
|
1968
|
+
return void 0;
|
|
1969
|
+
}
|
|
1970
|
+
if (editor === `vscode` && vscodeIsAlreadyInstalled) {
|
|
1971
|
+
M.message(`
|
|
1972
|
+
VSCode is already installed, skipping.`);
|
|
1973
|
+
return void 0;
|
|
1974
|
+
}
|
|
1975
|
+
if (editor === `cursor`) {
|
|
1976
|
+
M.message(
|
|
1977
|
+
`
|
|
1978
|
+
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
1979
|
+
`
|
|
1980
|
+
);
|
|
1981
|
+
}
|
|
1982
|
+
if (editor === `cursor-global`) {
|
|
1983
|
+
const confirm2 = await ve({
|
|
1984
|
+
message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
|
|
1985
|
+
options: [
|
|
1986
|
+
{ value: "yes", label: "Yes, I understand" },
|
|
1987
|
+
{ value: "skip", label: "No, skip for now" }
|
|
1988
|
+
]
|
|
1989
|
+
});
|
|
1990
|
+
if (confirm2 !== `yes`) {
|
|
1991
|
+
return void 0;
|
|
1992
|
+
}
|
|
1993
|
+
}
|
|
1994
|
+
if (editor === `windsurf`) {
|
|
1995
|
+
const confirm2 = await ve({
|
|
1996
|
+
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
1997
|
+
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
1998
|
+
options: [
|
|
1999
|
+
{ value: "yes", label: "Yes, I understand" },
|
|
2000
|
+
{ value: "skip", label: "No, skip for now" }
|
|
2001
|
+
]
|
|
2002
|
+
});
|
|
2003
|
+
if (confirm2 !== `yes`) {
|
|
2004
|
+
return void 0;
|
|
2005
|
+
}
|
|
2006
|
+
}
|
|
2007
|
+
return editor;
|
|
2008
|
+
}
|
|
1507
2009
|
},
|
|
1508
2010
|
{
|
|
1509
2011
|
onCancel: () => {
|
|
1510
|
-
|
|
2012
|
+
xe("Operation cancelled.");
|
|
1511
2013
|
process.exit(0);
|
|
1512
2014
|
}
|
|
1513
2015
|
}
|
|
1514
2016
|
);
|
|
1515
|
-
|
|
1516
|
-
const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
|
|
1517
|
-
return { ...rest, components: mastraComponents };
|
|
2017
|
+
return mastraProject;
|
|
1518
2018
|
};
|
|
1519
|
-
var s =
|
|
2019
|
+
var s = Y();
|
|
1520
2020
|
var exec2 = util.promisify(child_process.exec);
|
|
1521
2021
|
var init = async ({
|
|
1522
2022
|
directory,
|
|
1523
2023
|
addExample = false,
|
|
1524
2024
|
components,
|
|
1525
2025
|
llmProvider = "openai",
|
|
1526
|
-
llmApiKey
|
|
2026
|
+
llmApiKey,
|
|
2027
|
+
configureEditorWithDocsMCP
|
|
1527
2028
|
}) => {
|
|
1528
2029
|
s.start("Initializing Mastra");
|
|
1529
2030
|
try {
|
|
@@ -1549,22 +2050,42 @@ var init = async ({
|
|
|
1549
2050
|
(component) => writeCodeSample(dirPath, component, llmProvider, components)
|
|
1550
2051
|
)
|
|
1551
2052
|
]);
|
|
2053
|
+
const depService = new DepsService();
|
|
2054
|
+
const needsLibsql = await depService.checkDependencies(["@mastra/libsql"]) !== `ok`;
|
|
2055
|
+
if (needsLibsql) {
|
|
2056
|
+
await depService.installPackages(["@mastra/libsql"]);
|
|
2057
|
+
}
|
|
2058
|
+
const needsMemory = components.includes(`agents`) && await depService.checkDependencies(["@mastra/memory"]) !== `ok`;
|
|
2059
|
+
if (needsMemory) {
|
|
2060
|
+
await depService.installPackages(["@mastra/memory"]);
|
|
2061
|
+
}
|
|
2062
|
+
const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
|
|
2063
|
+
if (needsLoggers) {
|
|
2064
|
+
await depService.installPackages(["@mastra/loggers"]);
|
|
2065
|
+
}
|
|
1552
2066
|
}
|
|
1553
2067
|
const key = await getAPIKey(llmProvider || "openai");
|
|
1554
2068
|
const aiSdkPackage = getAISDKPackage(llmProvider);
|
|
1555
|
-
const
|
|
2069
|
+
const depsService = new DepsService();
|
|
2070
|
+
const pm = depsService.packageManager;
|
|
1556
2071
|
const installCommand = getPackageManagerInstallCommand(pm);
|
|
1557
2072
|
await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
|
|
2073
|
+
if (configureEditorWithDocsMCP) {
|
|
2074
|
+
await installMastraDocsMCPServer({
|
|
2075
|
+
editor: configureEditorWithDocsMCP,
|
|
2076
|
+
directory: process.cwd()
|
|
2077
|
+
});
|
|
2078
|
+
}
|
|
1558
2079
|
s.stop();
|
|
1559
2080
|
if (!llmApiKey) {
|
|
1560
|
-
|
|
2081
|
+
Me(`
|
|
1561
2082
|
${color2.green("Mastra initialized successfully!")}
|
|
1562
2083
|
|
|
1563
2084
|
Add your ${color2.cyan(key)} as an environment variable
|
|
1564
|
-
in your ${color2.cyan(".env
|
|
2085
|
+
in your ${color2.cyan(".env")} file
|
|
1565
2086
|
`);
|
|
1566
2087
|
} else {
|
|
1567
|
-
|
|
2088
|
+
Me(`
|
|
1568
2089
|
${color2.green("Mastra initialized successfully!")}
|
|
1569
2090
|
`);
|
|
1570
2091
|
}
|
|
@@ -1576,9 +2097,12 @@ var init = async ({
|
|
|
1576
2097
|
}
|
|
1577
2098
|
};
|
|
1578
2099
|
var exec3 = util.promisify(child_process.exec);
|
|
1579
|
-
var execWithTimeout = async (command, timeoutMs
|
|
2100
|
+
var execWithTimeout = async (command, timeoutMs) => {
|
|
1580
2101
|
try {
|
|
1581
2102
|
const promise = exec3(command, { killSignal: "SIGTERM" });
|
|
2103
|
+
if (!timeoutMs) {
|
|
2104
|
+
return await promise;
|
|
2105
|
+
}
|
|
1582
2106
|
let timeoutId;
|
|
1583
2107
|
const timeout = new Promise((_, reject) => {
|
|
1584
2108
|
timeoutId = setTimeout(() => reject(new Error("Command timed out")), timeoutMs);
|
|
@@ -1595,49 +2119,85 @@ var execWithTimeout = async (command, timeoutMs = 18e4) => {
|
|
|
1595
2119
|
throw error;
|
|
1596
2120
|
}
|
|
1597
2121
|
} catch (error) {
|
|
1598
|
-
console.error(error);
|
|
1599
2122
|
throw error;
|
|
1600
2123
|
}
|
|
1601
2124
|
};
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
2125
|
+
async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
|
|
2126
|
+
let installCommand = getPackageManagerInstallCommand(pm);
|
|
2127
|
+
if (isDev) {
|
|
2128
|
+
installCommand = `${installCommand} --save-dev`;
|
|
2129
|
+
}
|
|
2130
|
+
try {
|
|
2131
|
+
await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
|
|
2132
|
+
} catch (err) {
|
|
2133
|
+
if (versionTag === "@latest") {
|
|
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
|
+
);
|
|
2144
|
+
}
|
|
2145
|
+
}
|
|
2146
|
+
}
|
|
2147
|
+
var createMastraProject = async ({
|
|
2148
|
+
projectName: name,
|
|
2149
|
+
createVersionTag,
|
|
2150
|
+
timeout
|
|
2151
|
+
}) => {
|
|
2152
|
+
Ie(color2.inverse(" Mastra Create "));
|
|
2153
|
+
const projectName = name ?? await he({
|
|
1605
2154
|
message: "What do you want to name your project?",
|
|
1606
2155
|
placeholder: "my-mastra-app",
|
|
1607
2156
|
defaultValue: "my-mastra-app"
|
|
1608
2157
|
});
|
|
1609
|
-
if (
|
|
1610
|
-
|
|
2158
|
+
if (pD(projectName)) {
|
|
2159
|
+
xe("Operation cancelled");
|
|
1611
2160
|
process.exit(0);
|
|
1612
2161
|
}
|
|
1613
|
-
const s2 =
|
|
1614
|
-
s2.start("Creating project");
|
|
2162
|
+
const s2 = Y();
|
|
1615
2163
|
try {
|
|
1616
|
-
|
|
1617
|
-
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
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"}`
|
|
1621
2174
|
);
|
|
1622
|
-
process.exit(1);
|
|
1623
2175
|
}
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
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 '{
|
|
1641
2201
|
"compilerOptions": {
|
|
1642
2202
|
"target": "ES2022",
|
|
1643
2203
|
"module": "ES2022",
|
|
@@ -1646,121 +2206,117 @@ var createMastraProject = async ({ createVersionTag }) => {
|
|
|
1646
2206
|
"forceConsistentCasingInFileNames": true,
|
|
1647
2207
|
"strict": true,
|
|
1648
2208
|
"skipLibCheck": true,
|
|
2209
|
+
"noEmit": true,
|
|
1649
2210
|
"outDir": "dist"
|
|
1650
2211
|
},
|
|
1651
2212
|
"include": [
|
|
1652
2213
|
"src/**/*"
|
|
1653
|
-
],
|
|
1654
|
-
"exclude": [
|
|
1655
|
-
"node_modules",
|
|
1656
|
-
"dist",
|
|
1657
|
-
".mastra"
|
|
1658
2214
|
]
|
|
1659
2215
|
}' > tsconfig.json`);
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
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
|
+
}
|
|
1680
2264
|
};
|
|
1681
|
-
var create = async (
|
|
2265
|
+
var create = async (args2) => {
|
|
1682
2266
|
const { projectName } = await createMastraProject({
|
|
1683
|
-
|
|
2267
|
+
projectName: args2?.projectName,
|
|
2268
|
+
createVersionTag: args2?.createVersionTag,
|
|
2269
|
+
timeout: args2?.timeout
|
|
1684
2270
|
});
|
|
1685
|
-
const directory = "/
|
|
1686
|
-
if (
|
|
2271
|
+
const directory = args2.directory || "src/";
|
|
2272
|
+
if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
|
|
1687
2273
|
const result = await interactivePrompt();
|
|
1688
2274
|
await init({
|
|
1689
2275
|
...result,
|
|
1690
|
-
llmApiKey: result?.llmApiKey
|
|
2276
|
+
llmApiKey: result?.llmApiKey,
|
|
2277
|
+
components: ["agents", "tools", "workflows"],
|
|
2278
|
+
addExample: true
|
|
1691
2279
|
});
|
|
1692
2280
|
postCreate({ projectName });
|
|
1693
2281
|
return;
|
|
1694
2282
|
}
|
|
1695
|
-
const { components = [], llmProvider = "openai", addExample = false, llmApiKey } =
|
|
2283
|
+
const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
|
|
1696
2284
|
await init({
|
|
1697
2285
|
directory,
|
|
1698
2286
|
components,
|
|
1699
2287
|
llmProvider,
|
|
1700
2288
|
addExample,
|
|
1701
|
-
llmApiKey
|
|
2289
|
+
llmApiKey,
|
|
2290
|
+
configureEditorWithDocsMCP: args2.mcpServer
|
|
1702
2291
|
});
|
|
1703
2292
|
postCreate({ projectName });
|
|
1704
2293
|
};
|
|
1705
2294
|
var postCreate = ({ projectName }) => {
|
|
1706
|
-
|
|
2295
|
+
const packageManager = getPackageManager();
|
|
2296
|
+
Se(`
|
|
1707
2297
|
${color2.green("To start your project:")}
|
|
1708
2298
|
|
|
1709
2299
|
${color2.cyan("cd")} ${projectName}
|
|
1710
|
-
${color2.cyan(
|
|
2300
|
+
${color2.cyan(`${packageManager} run dev`)}
|
|
1711
2301
|
`);
|
|
1712
2302
|
};
|
|
1713
2303
|
|
|
1714
2304
|
async function getPackageVersion() {
|
|
1715
2305
|
const __filename = fileURLToPath(import.meta.url);
|
|
1716
2306
|
const __dirname = dirname(__filename);
|
|
1717
|
-
const pkgJsonPath =
|
|
2307
|
+
const pkgJsonPath = path2.join(__dirname, "..", "package.json");
|
|
1718
2308
|
const content = await fsExtra.readJSON(pkgJsonPath);
|
|
1719
2309
|
return content.version;
|
|
1720
2310
|
}
|
|
1721
|
-
async function tryReadPackageJson(paths) {
|
|
1722
|
-
let lastError;
|
|
1723
|
-
for (const path2 of paths) {
|
|
1724
|
-
try {
|
|
1725
|
-
const content = await fsExtra.readJSON(path2);
|
|
1726
|
-
if (content.name === "create-mastra") {
|
|
1727
|
-
return content;
|
|
1728
|
-
}
|
|
1729
|
-
} catch (err) {
|
|
1730
|
-
lastError = err;
|
|
1731
|
-
continue;
|
|
1732
|
-
}
|
|
1733
|
-
}
|
|
1734
|
-
throw lastError || new Error("Could not find create-mastra package.json in any of the expected locations");
|
|
1735
|
-
}
|
|
1736
2311
|
async function getCreateVersionTag() {
|
|
1737
2312
|
try {
|
|
1738
|
-
const
|
|
1739
|
-
const
|
|
1740
|
-
const
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
|
|
1744
|
-
|
|
1745
|
-
path.join(binDir, "..", "..", "..", "..", "package.json"),
|
|
1746
|
-
// Standard node_modules paths
|
|
1747
|
-
path.join(binDir, "..", "create-mastra", "package.json"),
|
|
1748
|
-
path.join(binDir, "..", "..", "create-mastra", "package.json"),
|
|
1749
|
-
path.join(binDir, "..", "..", "..", "create-mastra", "package.json"),
|
|
1750
|
-
path.join(binDir, "..", "..", "..", "..", "create-mastra", "package.json"),
|
|
1751
|
-
// pnpm specific paths (.pnpm directory)
|
|
1752
|
-
path.join(binDir, "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
|
|
1753
|
-
path.join(binDir, "..", "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
|
|
1754
|
-
// pnpm dlx specific path
|
|
1755
|
-
path.join(binDir, "..", "..", "package.json"),
|
|
1756
|
-
path.join(binDir, "..", "..", "node_modules", "create-mastra", "package.json")
|
|
1757
|
-
];
|
|
1758
|
-
const content = await tryReadPackageJson(possiblePaths);
|
|
1759
|
-
if (content.version?.includes("-")) {
|
|
1760
|
-
const tag = content.version.split("-")[1].split(".")[0];
|
|
1761
|
-
return tag;
|
|
1762
|
-
}
|
|
1763
|
-
} catch (error) {
|
|
2313
|
+
const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
|
|
2314
|
+
const json = await fsExtra.readJSON(pkgPath);
|
|
2315
|
+
const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
|
|
2316
|
+
const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
|
|
2317
|
+
const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
|
|
2318
|
+
return tag;
|
|
2319
|
+
} catch {
|
|
1764
2320
|
console.error('We could not resolve the create-mastra version tag, falling back to "latest"');
|
|
1765
2321
|
}
|
|
1766
2322
|
return "latest";
|
|
@@ -1780,16 +2336,24 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
1780
2336
|
command: "version"
|
|
1781
2337
|
});
|
|
1782
2338
|
console.log(`create-mastra ${version}`);
|
|
1783
|
-
} catch
|
|
2339
|
+
} catch {
|
|
1784
2340
|
}
|
|
1785
2341
|
});
|
|
1786
|
-
program.name("create-mastra").description("Create a new Mastra project").
|
|
2342
|
+
program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
|
|
2343
|
+
"-p, --project-name <string>",
|
|
2344
|
+
"Project name that will be used in package.json and as the project directory name."
|
|
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) => {
|
|
2346
|
+
const projectName = projectNameArg || args.projectName;
|
|
2347
|
+
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
1787
2348
|
if (args.default) {
|
|
1788
2349
|
await create({
|
|
1789
2350
|
components: ["agents", "tools", "workflows"],
|
|
1790
2351
|
llmProvider: "openai",
|
|
1791
|
-
addExample:
|
|
1792
|
-
createVersionTag
|
|
2352
|
+
addExample: true,
|
|
2353
|
+
createVersionTag,
|
|
2354
|
+
timeout,
|
|
2355
|
+
mcpServer: args.mcp,
|
|
2356
|
+
directory: "src/"
|
|
1793
2357
|
});
|
|
1794
2358
|
return;
|
|
1795
2359
|
}
|
|
@@ -1798,7 +2362,11 @@ program.name("create-mastra").description("Create a new Mastra project").option(
|
|
|
1798
2362
|
llmProvider: args.llm,
|
|
1799
2363
|
addExample: args.example,
|
|
1800
2364
|
llmApiKey: args["llm-api-key"],
|
|
1801
|
-
createVersionTag
|
|
2365
|
+
createVersionTag,
|
|
2366
|
+
timeout,
|
|
2367
|
+
projectName,
|
|
2368
|
+
directory: args.dir,
|
|
2369
|
+
mcpServer: args.mcp
|
|
1802
2370
|
});
|
|
1803
2371
|
});
|
|
1804
2372
|
program.parse(process.argv);
|