create-mastra 0.1.0-alpha.3 → 0.1.0-alpha.30

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/dist/index.js CHANGED
@@ -1,47 +1,1827 @@
1
1
  #! /usr/bin/env node
2
2
  import { Command } from 'commander';
3
- import { PosthogAnalytics } from 'mastra';
4
- import { create } from 'mastra';
5
- import { getPackageVersion } from './utils.js';
6
- const version = await getPackageVersion();
7
- const analytics = new PosthogAnalytics({
8
- apiKey: 'phc_SBLpZVAB6jmHOct9CABq3PF0Yn5FU3G2FgT4xUr2XrT',
9
- host: 'https://us.posthog.com',
10
- version: version,
3
+ import { randomUUID } from 'node:crypto';
4
+ import * as fs3__default from 'node:fs';
5
+ import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
+ import os from 'node:os';
7
+ import path, { dirname } from 'node:path';
8
+ import { PostHog } from 'posthog-node';
9
+ import { fileURLToPath } from 'node:url';
10
+ import h, { stdin, stdout } from 'node:process';
11
+ import * as f from 'node:readline';
12
+ import f__default from 'node:readline';
13
+ import tty, { WriteStream } from 'node:tty';
14
+ 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
+ import fs4 from 'node:fs/promises';
19
+ import { execa } from 'execa';
20
+ import pino from 'pino';
21
+ import pretty from 'pino-pretty';
22
+ import { Transform } from 'node:stream';
23
+ import fsExtra from 'fs-extra';
24
+
25
+ var __filename = fileURLToPath(import.meta.url);
26
+ var __dirname = path.dirname(__filename);
27
+ var PosthogAnalytics = class {
28
+ sessionId;
29
+ client;
30
+ distinctId;
31
+ version;
32
+ constructor({
33
+ version,
34
+ apiKey,
35
+ host = "https://app.posthog.com"
36
+ }) {
37
+ this.version = version;
38
+ const cliConfigPath = path.join(__dirname, "mastra-cli.json");
39
+ if (existsSync(cliConfigPath)) {
40
+ try {
41
+ const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
42
+ this.distinctId = distinctId;
43
+ this.sessionId = sessionId;
44
+ } catch (e) {
45
+ this.sessionId = randomUUID();
46
+ this.distinctId = this.getDistinctId();
47
+ }
48
+ this.writeCliConfig({
49
+ distinctId: this.distinctId,
50
+ sessionId: this.sessionId
51
+ });
52
+ } else {
53
+ this.sessionId = randomUUID();
54
+ this.distinctId = this.getDistinctId();
55
+ this.writeCliConfig({
56
+ distinctId: this.distinctId,
57
+ sessionId: this.sessionId
58
+ });
59
+ }
60
+ if (this.isTelemetryEnabled()) {
61
+ this.initializePostHog(apiKey, host);
62
+ }
63
+ }
64
+ writeCliConfig({ distinctId, sessionId }) {
65
+ try {
66
+ writeFileSync(path.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
67
+ } catch (e) {
68
+ }
69
+ }
70
+ initializePostHog(apiKey, host) {
71
+ this.client = new PostHog(apiKey, {
72
+ host,
73
+ flushAt: 1,
74
+ flushInterval: 0
75
+ });
76
+ this.captureSessionStart();
77
+ process.on("exit", () => {
78
+ this.client?.flush();
79
+ });
80
+ }
81
+ isTelemetryEnabled() {
82
+ if (process.env.NO_MASTRA_TELEMETRY) {
83
+ return false;
84
+ }
85
+ return true;
86
+ }
87
+ getDistinctId() {
88
+ const machineId = os.hostname();
89
+ return `mastra-${machineId}`;
90
+ }
91
+ getSystemProperties() {
92
+ return {
93
+ os: process.platform,
94
+ os_version: os.release(),
95
+ node_version: process.version,
96
+ platform: process.arch,
97
+ session_id: this.sessionId,
98
+ cli_version: this.version || "unknown",
99
+ machine_id: os.hostname()
100
+ };
101
+ }
102
+ captureSessionStart() {
103
+ if (!this.client) {
104
+ return;
105
+ }
106
+ this.client.capture({
107
+ distinctId: this.distinctId,
108
+ event: "cli_session_start",
109
+ properties: {
110
+ ...this.getSystemProperties()
111
+ }
112
+ });
113
+ }
114
+ trackCommand(options) {
115
+ try {
116
+ if (!this.client) {
117
+ return;
118
+ }
119
+ const commandData = {
120
+ command: options.command,
121
+ status: options.status || "success"
122
+ };
123
+ if (options.args) {
124
+ commandData.args = options.args;
125
+ }
126
+ if (options.durationMs) {
127
+ commandData.durationMs = options.durationMs;
128
+ }
129
+ if (options.error) {
130
+ commandData.error = options.error;
131
+ }
132
+ this.client.capture({
133
+ distinctId: this.distinctId,
134
+ event: "cli_command",
135
+ properties: {
136
+ ...this.getSystemProperties(),
137
+ ...commandData
138
+ }
139
+ });
140
+ } catch (e) {
141
+ }
142
+ }
143
+ // Helper method to wrap command execution with timing
144
+ async trackCommandExecution({
145
+ command,
146
+ args,
147
+ execution
148
+ }) {
149
+ const startTime = process.hrtime();
150
+ try {
151
+ const result = await execution();
152
+ const [seconds, nanoseconds] = process.hrtime(startTime);
153
+ const durationMs = seconds * 1e3 + nanoseconds / 1e6;
154
+ this.trackCommand({
155
+ command,
156
+ args,
157
+ durationMs,
158
+ status: "success"
159
+ });
160
+ return result;
161
+ } catch (error) {
162
+ const [seconds, nanoseconds] = process.hrtime(startTime);
163
+ const durationMs = seconds * 1e3 + nanoseconds / 1e6;
164
+ this.trackCommand({
165
+ command,
166
+ args,
167
+ durationMs,
168
+ status: "error",
169
+ error: error instanceof Error ? error.message : String(error)
170
+ });
171
+ throw error;
172
+ }
173
+ }
174
+ // Ensure PostHog client is shutdown properly
175
+ async shutdown() {
176
+ if (!this.client) {
177
+ return;
178
+ }
179
+ try {
180
+ await this.client.shutdown();
181
+ } catch (e) {
182
+ }
183
+ }
184
+ };
185
+
186
+ function getDefaultExportFromCjs (x) {
187
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
188
+ }
189
+
190
+ var src;
191
+ var hasRequiredSrc;
192
+
193
+ function requireSrc () {
194
+ if (hasRequiredSrc) return src;
195
+ hasRequiredSrc = 1;
196
+
197
+ const ESC = '\x1B';
198
+ const CSI = `${ESC}[`;
199
+ const beep = '\u0007';
200
+
201
+ const cursor = {
202
+ to(x, y) {
203
+ if (!y) return `${CSI}${x + 1}G`;
204
+ return `${CSI}${y + 1};${x + 1}H`;
205
+ },
206
+ move(x, y) {
207
+ let ret = '';
208
+
209
+ if (x < 0) ret += `${CSI}${-x}D`;
210
+ else if (x > 0) ret += `${CSI}${x}C`;
211
+
212
+ if (y < 0) ret += `${CSI}${-y}A`;
213
+ else if (y > 0) ret += `${CSI}${y}B`;
214
+
215
+ return ret;
216
+ },
217
+ up: (count = 1) => `${CSI}${count}A`,
218
+ down: (count = 1) => `${CSI}${count}B`,
219
+ forward: (count = 1) => `${CSI}${count}C`,
220
+ backward: (count = 1) => `${CSI}${count}D`,
221
+ nextLine: (count = 1) => `${CSI}E`.repeat(count),
222
+ prevLine: (count = 1) => `${CSI}F`.repeat(count),
223
+ left: `${CSI}G`,
224
+ hide: `${CSI}?25l`,
225
+ show: `${CSI}?25h`,
226
+ save: `${ESC}7`,
227
+ restore: `${ESC}8`
228
+ };
229
+
230
+ const scroll = {
231
+ up: (count = 1) => `${CSI}S`.repeat(count),
232
+ down: (count = 1) => `${CSI}T`.repeat(count)
233
+ };
234
+
235
+ const erase = {
236
+ screen: `${CSI}2J`,
237
+ up: (count = 1) => `${CSI}1J`.repeat(count),
238
+ down: (count = 1) => `${CSI}J`.repeat(count),
239
+ line: `${CSI}2K`,
240
+ lineEnd: `${CSI}K`,
241
+ lineStart: `${CSI}1K`,
242
+ lines(count) {
243
+ let clear = '';
244
+ for (let i = 0; i < count; i++)
245
+ clear += this.line + (i < count - 1 ? cursor.up() : '');
246
+ if (count)
247
+ clear += cursor.left;
248
+ return clear;
249
+ }
250
+ };
251
+
252
+ src = { cursor, scroll, erase, beep };
253
+ return src;
254
+ }
255
+
256
+ var srcExports = requireSrc();
257
+
258
+ var picocolors = {exports: {}};
259
+
260
+ var hasRequiredPicocolors;
261
+
262
+ function requirePicocolors () {
263
+ if (hasRequiredPicocolors) return picocolors.exports;
264
+ hasRequiredPicocolors = 1;
265
+ let p = process || {}, argv = p.argv || [], env = p.env || {};
266
+ let isColorSupported =
267
+ !(!!env.NO_COLOR || argv.includes("--no-color")) &&
268
+ (!!env.FORCE_COLOR || argv.includes("--color") || p.platform === "win32" || ((p.stdout || {}).isTTY && env.TERM !== "dumb") || !!env.CI);
269
+
270
+ let formatter = (open, close, replace = open) =>
271
+ input => {
272
+ let string = "" + input, index = string.indexOf(close, open.length);
273
+ return ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close
274
+ };
275
+
276
+ let replaceClose = (string, close, replace, index) => {
277
+ let result = "", cursor = 0;
278
+ do {
279
+ result += string.substring(cursor, index) + replace;
280
+ cursor = index + close.length;
281
+ index = string.indexOf(close, cursor);
282
+ } while (~index)
283
+ return result + string.substring(cursor)
284
+ };
285
+
286
+ let createColors = (enabled = isColorSupported) => {
287
+ let f = enabled ? formatter : () => String;
288
+ return {
289
+ isColorSupported: enabled,
290
+ reset: f("\x1b[0m", "\x1b[0m"),
291
+ bold: f("\x1b[1m", "\x1b[22m", "\x1b[22m\x1b[1m"),
292
+ dim: f("\x1b[2m", "\x1b[22m", "\x1b[22m\x1b[2m"),
293
+ italic: f("\x1b[3m", "\x1b[23m"),
294
+ underline: f("\x1b[4m", "\x1b[24m"),
295
+ inverse: f("\x1b[7m", "\x1b[27m"),
296
+ hidden: f("\x1b[8m", "\x1b[28m"),
297
+ strikethrough: f("\x1b[9m", "\x1b[29m"),
298
+
299
+ black: f("\x1b[30m", "\x1b[39m"),
300
+ red: f("\x1b[31m", "\x1b[39m"),
301
+ green: f("\x1b[32m", "\x1b[39m"),
302
+ yellow: f("\x1b[33m", "\x1b[39m"),
303
+ blue: f("\x1b[34m", "\x1b[39m"),
304
+ magenta: f("\x1b[35m", "\x1b[39m"),
305
+ cyan: f("\x1b[36m", "\x1b[39m"),
306
+ white: f("\x1b[37m", "\x1b[39m"),
307
+ gray: f("\x1b[90m", "\x1b[39m"),
308
+
309
+ bgBlack: f("\x1b[40m", "\x1b[49m"),
310
+ bgRed: f("\x1b[41m", "\x1b[49m"),
311
+ bgGreen: f("\x1b[42m", "\x1b[49m"),
312
+ bgYellow: f("\x1b[43m", "\x1b[49m"),
313
+ bgBlue: f("\x1b[44m", "\x1b[49m"),
314
+ bgMagenta: f("\x1b[45m", "\x1b[49m"),
315
+ bgCyan: f("\x1b[46m", "\x1b[49m"),
316
+ bgWhite: f("\x1b[47m", "\x1b[49m"),
317
+
318
+ blackBright: f("\x1b[90m", "\x1b[39m"),
319
+ redBright: f("\x1b[91m", "\x1b[39m"),
320
+ greenBright: f("\x1b[92m", "\x1b[39m"),
321
+ yellowBright: f("\x1b[93m", "\x1b[39m"),
322
+ blueBright: f("\x1b[94m", "\x1b[39m"),
323
+ magentaBright: f("\x1b[95m", "\x1b[39m"),
324
+ cyanBright: f("\x1b[96m", "\x1b[39m"),
325
+ whiteBright: f("\x1b[97m", "\x1b[39m"),
326
+
327
+ bgBlackBright: f("\x1b[100m", "\x1b[49m"),
328
+ bgRedBright: f("\x1b[101m", "\x1b[49m"),
329
+ bgGreenBright: f("\x1b[102m", "\x1b[49m"),
330
+ bgYellowBright: f("\x1b[103m", "\x1b[49m"),
331
+ bgBlueBright: f("\x1b[104m", "\x1b[49m"),
332
+ bgMagentaBright: f("\x1b[105m", "\x1b[49m"),
333
+ bgCyanBright: f("\x1b[106m", "\x1b[49m"),
334
+ bgWhiteBright: f("\x1b[107m", "\x1b[49m"),
335
+ }
336
+ };
337
+
338
+ picocolors.exports = createColors();
339
+ picocolors.exports.createColors = createColors;
340
+ return picocolors.exports;
341
+ }
342
+
343
+ var picocolorsExports = /*@__PURE__*/ requirePicocolors();
344
+ var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
345
+
346
+ 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?undefined:"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(`
347
+ `)];for(const[E,h]of n.entries()){if(t+=h,g.has(h)){const{groups:B}=new RegExp(`(?:\\${O}(?<code>\\d+)m|\\${w}(?<uri>.*)${b$1})`).exec(n.slice(E).join(""))||{groups:{}};if(B.code!==undefined){const p=Number.parseFloat(B.code);s=p===CD?undefined:p;}else B.uri!==undefined&&(C=B.uri.length===0?undefined:B.uri);}const o=sD.codes.get(Number(s));n[E+1]===`
348
+ `?(C&&(t+=L("")),s&&o&&(t+=N(o))):h===`
349
+ `&&(s&&o&&(t+=N(s)),C&&(t+=L(C)));}return t};function R$1(e,u,F){return String(e).normalize().replace(/\r\n/g,`
350
+ `).split(`
351
+ `).map(t=>oD(t,u,F)).join(`
352
+ `)}var nD=Object.defineProperty,aD=(e,u,F)=>u in e?nD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,a$1=(e,u,F)=>(aD(e,typeof u!="symbol"?u+"":u,F),F);function hD(e,u){if(e===u)return;const F=e.split(`
353
+ `),t=u.split(`
354
+ `),s=[];for(let C=0;C<Math.max(F.length,t.length);C++)F[C]!==t[C]&&s.push(C);return s}const V$1=Symbol("clack:cancel");function lD(e){return e===V$1}function v(e,u){e.isTTY&&e.setRawMode(u);}const z=new Map([["k","up"],["j","down"],["h","left"],["l","right"]]),xD=new Set(["up","down","left","right","space","enter"]);class x{constructor({render:u,input:F=stdin,output:t=stdout,...s},C=true){a$1(this,"input"),a$1(this,"output"),a$1(this,"rl"),a$1(this,"opts"),a$1(this,"_track",false),a$1(this,"_render"),a$1(this,"_cursor",0),a$1(this,"state","initial"),a$1(this,"value"),a$1(this,"error",""),a$1(this,"subscribers",new Map),a$1(this,"_prevFrame",""),this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=u.bind(this),this._track=C,this.input=F,this.output=t;}prompt(){const u=new WriteStream(0);return u._write=(F,t,s)=>{this._track&&(this.value=this.rl.line.replace(/\t/g,""),this._cursor=this.rl.cursor,this.emit("value",this.value)),s();},this.input.pipe(u),this.rl=f__default.createInterface({input:this.input,output:u,tabSize:2,prompt:"",escapeCodeTimeout:50}),f__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==undefined&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v(this.input,true),this.output.on("resize",this.render),this.render(),new Promise((F,t)=>{this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(V$1);});})}on(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F}),this.subscribers.set(u,t);}once(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F,once:true}),this.subscribers.set(u,t);}emit(u,...F){const t=this.subscribers.get(u)??[],s=[];for(const C of t)C.cb(...F),C.once&&s.push(()=>t.splice(t.indexOf(C),1));for(const C of s)C();}unsubscribe(){this.subscribers.clear();}onKeypress(u,F){if(this.state==="error"&&(this.state="active"),F?.name&&!this._track&&z.has(F.name)&&this.emit("cursor",z.get(F.name)),F?.name&&xD.has(F.name)&&this.emit("cursor",F.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()),F?.name==="return"){if(this.opts.validate){const t=this.opts.validate(this.value);t&&(this.error=t,this.state="error",this.rl.write(this.value));}this.state!=="error"&&(this.state="submit");}u===""&&(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(`
355
+ `),v(this.input,false),this.rl.close(),this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=R$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
356
+ `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=R$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 F=hD(this._prevFrame,u);if(this.restoreCursor(),F&&F?.length===1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
357
+ `);this.output.write(s[t]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-t-1));return}else if(F&&F?.length>1){const t=F[0];this.output.write(srcExports.cursor.move(0,t)),this.output.write(srcExports.erase.down());const s=u.split(`
358
+ `).slice(t);this.output.write(s.join(`
359
+ `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}class BD extends x{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(u){super(u,false),this.value=!!u.initialValue,this.on("value",()=>{this.value=this._value;}),this.on("confirm",F=>{this.output.write(srcExports.cursor.move(0,-1)),this.value=F,this.state="submit",this.close();}),this.on("cursor",()=>{this.value=!this.value;});}}var fD=Object.defineProperty,gD=(e,u,F)=>u in e?fD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,K$1=(e,u,F)=>(gD(e,typeof u!="symbol"?u+"":u,F),F);let vD=class extends x{constructor(u){super(u,false),K$1(this,"options"),K$1(this,"cursor",0),this.options=u.options,this.value=[...u.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:F})=>F===u.cursorAt),0),this.on("key",F=>{F==="a"&&this.toggleAll();}),this.on("cursor",F=>{switch(F){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;case "space":this.toggleValue();break}});}get _value(){return this.options[this.cursor].value}toggleAll(){const u=this.value.length===this.options.length;this.value=u?[]:this.options.map(F=>F.value);}toggleValue(){const u=this.value.includes(this._value);this.value=u?this.value.filter(F=>F!==this._value):[...this.value,this._value];}};var wD=Object.defineProperty,yD=(e,u,F)=>u in e?wD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,Z=(e,u,F)=>(yD(e,typeof u!="symbol"?u+"":u,F),F);let $D=class extends x{constructor(u){super(u,false),Z(this,"options"),Z(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:F})=>F===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",F=>{switch(F){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;}};var TD=Object.defineProperty,jD=(e,u,F)=>u in e?TD(e,u,{enumerable:true,configurable:true,writable:true,value:F}):e[u]=F,MD=(e,u,F)=>(jD(e,u+"",F),F);class PD extends x{constructor(u){super(u),MD(this,"valueWithCursor",""),this.on("finalize",()=>{this.value||(this.value=u.defaultValue),this.valueWithCursor=this.value;}),this.on("value",()=>{if(this.cursor>=this.value.length)this.valueWithCursor=`${this.value}${color2.inverse(color2.hidden("_"))}`;else {const F=this.value.slice(0,this.cursor),t=this.value.slice(this.cursor);this.valueWithCursor=`${F}${color2.inverse(t[0])}${t.slice(1)}`;}});}get cursor(){return this._cursor}}const WD=globalThis.process.platform.startsWith("win");function OD({input:e=stdin,output:u=stdout,overwrite:F=true,hideCursor:t=true}={}){const s=f.createInterface({input:e,output:u,prompt:"",tabSize:1});f.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const C=(D,{name:i})=>{if(String(D)===""){t&&u.write(srcExports.cursor.show),process.exit(0);return}if(!F)return;let n=i==="return"?0:-1,E=i==="return"?-1:0;f.moveCursor(u,n,E,()=>{f.clearLine(u,1,()=>{e.once("keypress",C);});});};return t&&u.write(srcExports.cursor.hide),e.once("keypress",C),()=>{e.off("keypress",C),t&&u.write(srcExports.cursor.show),e.isTTY&&!WD&&e.setRawMode(false),s.terminal=false,s.close();}}
360
+
361
+ function K(){return h.platform!=="win32"?h.env.TERM!=="linux":!!h.env.CI||!!h.env.WT_SESSION||!!h.env.TERMINUS_SUBLIME||h.env.ConEmuTask==="{cmd::Cmder}"||h.env.TERM_PROGRAM==="Terminus-Sublime"||h.env.TERM_PROGRAM==="vscode"||h.env.TERM==="xterm-256color"||h.env.TERM==="alacritty"||h.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const C=K(),u=(s,n)=>C?s:n,Y=u("\u25C6","*"),P=u("\u25A0","x"),V=u("\u25B2","x"),M=u("\u25C7","o"),Q=u("\u250C","T"),a=u("\u2502","|"),$=u("\u2514","\u2014"),I=u("\u25CF",">"),T=u("\u25CB"," "),j=u("\u25FB","[\u2022]"),b=u("\u25FC","[+]"),B=u("\u25FB","[ ]"),G=u("\u2500","-"),H=u("\u256E","+"),ee=u("\u251C","+"),te=u("\u256F","+"),y=s=>{switch(s){case "initial":case "active":return color2.cyan(Y);case "cancel":return color2.red(P);case "error":return color2.yellow(V);case "submit":return color2.green(M)}},E=s=>{const{cursor:n,options:t,style:i}=s,r=s.maxItems??1/0,o=Math.max(process.stdout.rows-4,0),c=Math.min(o,Math.max(r,5));let l=0;n>=l+c-3?l=Math.max(Math.min(n-c+3,t.length-c),0):n<l+2&&(l=Math.max(n-2,0));const d=c<t.length&&l>0,p=c<t.length&&l+c<t.length;return t.slice(l,l+c).map((S,f,x)=>{const g=f===0&&d,m=f===x.length-1&&p;return g||m?color2.dim("..."):i(S,f+l===n)})},ae=s=>new PD({validate:s.validate,placeholder:s.placeholder,defaultValue:s.defaultValue,initialValue:s.initialValue,render(){const n=`${color2.gray(a)}
362
+ ${y(this.state)} ${s.message}
363
+ `,t=s.placeholder?color2.inverse(s.placeholder[0])+color2.dim(s.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:t;switch(this.state){case "error":return `${n.trim()}
364
+ ${color2.yellow(a)} ${i}
365
+ ${color2.yellow($)} ${color2.yellow(this.error)}
366
+ `;case "submit":return `${n}${color2.gray(a)} ${color2.dim(this.value||s.placeholder)}`;case "cancel":return `${n}${color2.gray(a)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
367
+ `+color2.gray(a):""}`;default:return `${n}${color2.cyan(a)} ${i}
368
+ ${color2.cyan($)}
369
+ `}}}).prompt(),ce=s=>{const n=s.active??"Yes",t=s.inactive??"No";return new BD({active:n,inactive:t,initialValue:s.initialValue??true,render(){const i=`${color2.gray(a)}
370
+ ${y(this.state)} ${s.message}
371
+ `,r=this.value?n:t;switch(this.state){case "submit":return `${i}${color2.gray(a)} ${color2.dim(r)}`;case "cancel":return `${i}${color2.gray(a)} ${color2.strikethrough(color2.dim(r))}
372
+ ${color2.gray(a)}`;default:return `${i}${color2.cyan(a)} ${this.value?`${color2.green(I)} ${n}`:`${color2.dim(T)} ${color2.dim(n)}`} ${color2.dim("/")} ${this.value?`${color2.dim(T)} ${color2.dim(t)}`:`${color2.green(I)} ${t}`}
373
+ ${color2.cyan($)}
374
+ `}}}).prompt()},le=s=>{const n=(t,i)=>{const r=t.label??String(t.value);switch(i){case "selected":return `${color2.dim(r)}`;case "active":return `${color2.green(I)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(r))}`;default:return `${color2.dim(T)} ${color2.dim(r)}`}};return new $D({options:s.options,initialValue:s.initialValue,render(){const t=`${color2.gray(a)}
375
+ ${y(this.state)} ${s.message}
376
+ `;switch(this.state){case "submit":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${t}${color2.gray(a)} ${n(this.options[this.cursor],"cancelled")}
377
+ ${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(`
378
+ ${color2.cyan(a)} `)}
379
+ ${color2.cyan($)}
380
+ `}}}).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.
381
+ ${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)}
382
+ ${y(this.state)} ${s.message}
383
+ `;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}
384
+ ${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
385
+ `).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
386
+ `);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
387
+ ${color2.yellow(a)} `)+`
388
+ `+r+`
389
+ `}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
390
+ ${color2.cyan(a)} `)}
391
+ ${color2.cyan($)}
392
+ `}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
393
+ ${s}
394
+ `.split(`
395
+ `),i=R(n).length,r=Math.max(t.reduce((c,l)=>(l=R(l),l.length>c?l.length:c),0),i)+2,o=t.map(c=>`${color2.gray(a)} ${color2.dim(c)}${" ".repeat(r-R(c).length)}${color2.gray(a)}`).join(`
396
+ `);process.stdout.write(`${color2.gray(a)}
397
+ ${color2.green(M)} ${color2.reset(n)} ${color2.gray(G.repeat(Math.max(r-i-1,1))+H)}
398
+ ${o}
399
+ ${color2.gray(ee+G.repeat(r+2)+te)}
400
+ `);},he=(s="")=>{process.stdout.write(`${color2.gray($)} ${color2.red(s)}
401
+
402
+ `);},pe=(s="")=>{process.stdout.write(`${color2.gray(Q)} ${s}
403
+ `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
404
+ ${color2.gray($)} ${s}
405
+
406
+ `);},_=()=>{const s=C?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],n=C?80:120;let t,i,r=false,o="";const c=g=>{const m=g>1?"Something went wrong":"Canceled";r&&x(m,g);},l=()=>c(2),d=()=>c(1),p=()=>{process.on("uncaughtExceptionMonitor",l),process.on("unhandledRejection",l),process.on("SIGINT",d),process.on("SIGTERM",d),process.on("exit",c);},S=()=>{process.removeListener("uncaughtExceptionMonitor",l),process.removeListener("unhandledRejection",l),process.removeListener("SIGINT",d),process.removeListener("SIGTERM",d),process.removeListener("exit",c);},f=(g="")=>{r=true,t=OD(),o=g.replace(/\.+$/,""),process.stdout.write(`${color2.gray(a)}
407
+ `);let m=0,w=0;p(),i=setInterval(()=>{const L=color2.magenta(s[m]),O=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${L} ${o}${O}`),m=m+1<s.length?m+1:0,w=w<s.length?w+.125:0;},n);},x=(g="",m=0)=>{o=g??o,r=false,clearInterval(i);const w=m===0?color2.green(M):m===1?color2.red(P):color2.red(V);process.stdout.write(srcExports.cursor.move(-999,0)),process.stdout.write(srcExports.erase.down(1)),process.stdout.write(`${w} ${o}
408
+ `),S(),t();};return {start:f,stop:x,message:(g="")=>{o=g??o;}}};function ye(){const s=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(s,"g")}const ve=async(s,n)=>{const t={},i=Object.keys(s);for(const r of i){const o=s[r],c=await o({results:t})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&lD(c)){t[r]="canceled",n.onCancel({results:t});continue}t[r]=c;}return t};
409
+
410
+ // eslint-disable-next-line no-warning-comments
411
+ // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
412
+ // Lots of optionals here to support Deno.
413
+ const hasColors = tty?.WriteStream?.prototype?.hasColors?.() ?? false;
414
+
415
+ const format = (open, close) => {
416
+ if (!hasColors) {
417
+ return input => input;
418
+ }
419
+
420
+ const openCode = `\u001B[${open}m`;
421
+ const closeCode = `\u001B[${close}m`;
422
+
423
+ return input => {
424
+ const string = input + ''; // eslint-disable-line no-implicit-coercion -- This is faster.
425
+ let index = string.indexOf(closeCode);
426
+
427
+ if (index === -1) {
428
+ // Note: Intentionally not using string interpolation for performance reasons.
429
+ return openCode + string + closeCode;
430
+ }
431
+
432
+ // Handle nested colors.
433
+
434
+ // We could have done this, but it's too slow (as of Node.js 22).
435
+ // return openCode + string.replaceAll(closeCode, openCode) + closeCode;
436
+
437
+ let result = openCode;
438
+ let lastIndex = 0;
439
+
440
+ while (index !== -1) {
441
+ result += string.slice(lastIndex, index) + openCode;
442
+ lastIndex = index + closeCode.length;
443
+ index = string.indexOf(closeCode, lastIndex);
444
+ }
445
+
446
+ result += string.slice(lastIndex) + closeCode;
447
+
448
+ return result;
449
+ };
450
+ };
451
+
452
+ const reset = format(0, 0);
453
+ const bold = format(1, 22);
454
+ const dim = format(2, 22);
455
+ const italic = format(3, 23);
456
+ const underline = format(4, 24);
457
+ const overline = format(53, 55);
458
+ const inverse = format(7, 27);
459
+ const hidden = format(8, 28);
460
+ const strikethrough = format(9, 29);
461
+
462
+ const black = format(30, 39);
463
+ const red = format(31, 39);
464
+ const green = format(32, 39);
465
+ const yellow = format(33, 39);
466
+ const blue = format(34, 39);
467
+ const magenta = format(35, 39);
468
+ const cyan = format(36, 39);
469
+ const white = format(37, 39);
470
+ const gray = format(90, 39);
471
+
472
+ const bgBlack = format(40, 49);
473
+ const bgRed = format(41, 49);
474
+ const bgGreen = format(42, 49);
475
+ const bgYellow = format(43, 49);
476
+ const bgBlue = format(44, 49);
477
+ const bgMagenta = format(45, 49);
478
+ const bgCyan = format(46, 49);
479
+ const bgWhite = format(47, 49);
480
+ const bgGray = format(100, 49);
481
+
482
+ const redBright = format(91, 39);
483
+ const greenBright = format(92, 39);
484
+ const yellowBright = format(93, 39);
485
+ const blueBright = format(94, 39);
486
+ const magentaBright = format(95, 39);
487
+ const cyanBright = format(96, 39);
488
+ const whiteBright = format(97, 39);
489
+
490
+ const bgRedBright = format(101, 49);
491
+ const bgGreenBright = format(102, 49);
492
+ const bgYellowBright = format(103, 49);
493
+ const bgBlueBright = format(104, 49);
494
+ const bgMagentaBright = format(105, 49);
495
+ const bgCyanBright = format(106, 49);
496
+ const bgWhiteBright = format(107, 49);
497
+
498
+ var yoctocolors = /*#__PURE__*/Object.freeze({
499
+ __proto__: null,
500
+ bgBlack: bgBlack,
501
+ bgBlue: bgBlue,
502
+ bgBlueBright: bgBlueBright,
503
+ bgCyan: bgCyan,
504
+ bgCyanBright: bgCyanBright,
505
+ bgGray: bgGray,
506
+ bgGreen: bgGreen,
507
+ bgGreenBright: bgGreenBright,
508
+ bgMagenta: bgMagenta,
509
+ bgMagentaBright: bgMagentaBright,
510
+ bgRed: bgRed,
511
+ bgRedBright: bgRedBright,
512
+ bgWhite: bgWhite,
513
+ bgWhiteBright: bgWhiteBright,
514
+ bgYellow: bgYellow,
515
+ bgYellowBright: bgYellowBright,
516
+ black: black,
517
+ blue: blue,
518
+ blueBright: blueBright,
519
+ bold: bold,
520
+ cyan: cyan,
521
+ cyanBright: cyanBright,
522
+ dim: dim,
523
+ gray: gray,
524
+ green: green,
525
+ greenBright: greenBright,
526
+ hidden: hidden,
527
+ inverse: inverse,
528
+ italic: italic,
529
+ magenta: magenta,
530
+ magentaBright: magentaBright,
531
+ overline: overline,
532
+ red: red,
533
+ redBright: redBright,
534
+ reset: reset,
535
+ strikethrough: strikethrough,
536
+ underline: underline,
537
+ white: white,
538
+ whiteBright: whiteBright,
539
+ yellow: yellow,
540
+ yellowBright: yellowBright
11
541
  });
12
- const program = new Command();
13
- program
14
- .version(`${version}`, '-v, --version')
15
- .description(`create-mastra ${version}`)
16
- .action(async () => {
542
+
543
+ const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
544
+
545
+ const isInteractive = stream => Boolean(
546
+ stream.isTTY
547
+ && h.env.TERM !== 'dumb'
548
+ && !('CI' in h.env),
549
+ );
550
+
551
+ const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
552
+ const successSymbol = green(isUnicodeSupported ? '✔' : '√');
553
+ const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
554
+ const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
555
+
556
+ const defaultSpinner = {
557
+ frames: isUnicodeSupported
558
+ ? [
559
+ '⠋',
560
+ '⠙',
561
+ '⠹',
562
+ '⠸',
563
+ '⠼',
564
+ '⠴',
565
+ '⠦',
566
+ '⠧',
567
+ '⠇',
568
+ '⠏',
569
+ ]
570
+ : [
571
+ '-',
572
+ '\\',
573
+ '|',
574
+ '/',
575
+ ],
576
+ interval: 80,
577
+ };
578
+
579
+ class YoctoSpinner {
580
+ #frames;
581
+ #interval;
582
+ #currentFrame = -1;
583
+ #timer;
584
+ #text;
585
+ #stream;
586
+ #color;
587
+ #lines = 0;
588
+ #exitHandlerBound;
589
+ #isInteractive;
590
+ #lastSpinnerFrameTime = 0;
591
+
592
+ constructor(options = {}) {
593
+ const spinner = options.spinner ?? defaultSpinner;
594
+ this.#frames = spinner.frames;
595
+ this.#interval = spinner.interval;
596
+ this.#text = options.text ?? '';
597
+ this.#stream = options.stream ?? h.stderr;
598
+ this.#color = options.color ?? 'cyan';
599
+ this.#isInteractive = isInteractive(this.#stream);
600
+ this.#exitHandlerBound = this.#exitHandler.bind(this);
601
+ }
602
+
603
+ start(text) {
604
+ if (text) {
605
+ this.#text = text;
606
+ }
607
+
608
+ if (this.isSpinning) {
609
+ return this;
610
+ }
611
+
612
+ this.#hideCursor();
613
+ this.#render();
614
+ this.#subscribeToProcessEvents();
615
+
616
+ this.#timer = setInterval(() => {
617
+ this.#render();
618
+ }, this.#interval);
619
+
620
+ return this;
621
+ }
622
+
623
+ stop(finalText) {
624
+ if (!this.isSpinning) {
625
+ return this;
626
+ }
627
+
628
+ clearInterval(this.#timer);
629
+ this.#timer = undefined;
630
+ this.#showCursor();
631
+ this.clear();
632
+ this.#unsubscribeFromProcessEvents();
633
+
634
+ if (finalText) {
635
+ this.#stream.write(`${finalText}\n`);
636
+ }
637
+
638
+ return this;
639
+ }
640
+
641
+ #symbolStop(symbol, text) {
642
+ return this.stop(`${symbol} ${text ?? this.#text}`);
643
+ }
644
+
645
+ success(text) {
646
+ return this.#symbolStop(successSymbol, text);
647
+ }
648
+
649
+ error(text) {
650
+ return this.#symbolStop(errorSymbol, text);
651
+ }
652
+
653
+ warning(text) {
654
+ return this.#symbolStop(warningSymbol, text);
655
+ }
656
+
657
+ info(text) {
658
+ return this.#symbolStop(infoSymbol, text);
659
+ }
660
+
661
+ get isSpinning() {
662
+ return this.#timer !== undefined;
663
+ }
664
+
665
+ get text() {
666
+ return this.#text;
667
+ }
668
+
669
+ set text(value = '') {
670
+ this.#text = value;
671
+ this.#render();
672
+ }
673
+
674
+ get color() {
675
+ return this.#color;
676
+ }
677
+
678
+ set color(value) {
679
+ this.#color = value;
680
+ this.#render();
681
+ }
682
+
683
+ clear() {
684
+ if (!this.#isInteractive) {
685
+ return this;
686
+ }
687
+
688
+ this.#stream.cursorTo(0);
689
+
690
+ for (let index = 0; index < this.#lines; index++) {
691
+ if (index > 0) {
692
+ this.#stream.moveCursor(0, -1);
693
+ }
694
+
695
+ this.#stream.clearLine(1);
696
+ }
697
+
698
+ this.#lines = 0;
699
+
700
+ return this;
701
+ }
702
+
703
+ #render() {
704
+ // Ensure we only update the spinner frame at the wanted interval,
705
+ // even if the frame method is called more often.
706
+ const now = Date.now();
707
+ if (this.#currentFrame === -1 || now - this.#lastSpinnerFrameTime >= this.#interval) {
708
+ this.#currentFrame = ++this.#currentFrame % this.#frames.length;
709
+ this.#lastSpinnerFrameTime = now;
710
+ }
711
+
712
+ const applyColor = yoctocolors[this.#color] ?? cyan;
713
+ const frame = this.#frames[this.#currentFrame];
714
+ let string = `${applyColor(frame)} ${this.#text}`;
715
+
716
+ if (!this.#isInteractive) {
717
+ string += '\n';
718
+ }
719
+
720
+ this.clear();
721
+ this.#write(string);
722
+
723
+ if (this.#isInteractive) {
724
+ this.#lines = this.#lineCount(string);
725
+ }
726
+ }
727
+
728
+ #write(text) {
729
+ this.#stream.write(text);
730
+ }
731
+
732
+ #lineCount(text) {
733
+ const width = this.#stream.columns ?? 80;
734
+ const lines = text.split('\n');
735
+
736
+ let lineCount = 0;
737
+ for (const line of lines) {
738
+ lineCount += Math.max(1, Math.ceil(line.length / width));
739
+ }
740
+
741
+ return lineCount;
742
+ }
743
+
744
+ #hideCursor() {
745
+ if (this.#isInteractive) {
746
+ this.#write('\u001B[?25l');
747
+ }
748
+ }
749
+
750
+ #showCursor() {
751
+ if (this.#isInteractive) {
752
+ this.#write('\u001B[?25h');
753
+ }
754
+ }
755
+
756
+ #subscribeToProcessEvents() {
757
+ h.once('SIGINT', this.#exitHandlerBound);
758
+ h.once('SIGTERM', this.#exitHandlerBound);
759
+ }
760
+
761
+ #unsubscribeFromProcessEvents() {
762
+ h.off('SIGINT', this.#exitHandlerBound);
763
+ h.off('SIGTERM', this.#exitHandlerBound);
764
+ }
765
+
766
+ #exitHandler(signal) {
767
+ if (this.isSpinning) {
768
+ this.stop();
769
+ }
770
+
771
+ // SIGINT: 128 + 2
772
+ // SIGTERM: 128 + 15
773
+ const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
774
+ h.exit(exitCode);
775
+ }
776
+ }
777
+
778
+ function yoctoSpinner(options) {
779
+ return new YoctoSpinner(options);
780
+ }
781
+
782
+ function asyncGeneratorStep(n, t, e, r, o, a, c) {
783
+ try {
784
+ var i = n[a](c), u = i.value;
785
+ } catch (n2) {
786
+ return void e(n2);
787
+ }
788
+ i.done ? t(u) : Promise.resolve(u).then(r, o);
789
+ }
790
+ function _asyncToGenerator(n) {
791
+ return function() {
792
+ var t = this, e = arguments;
793
+ return new Promise(function(r, o) {
794
+ var a = n.apply(t, e);
795
+ function _next(n2) {
796
+ asyncGeneratorStep(a, r, o, _next, _throw, "next", n2);
797
+ }
798
+ function _throw(n2) {
799
+ asyncGeneratorStep(a, r, o, _next, _throw, "throw", n2);
800
+ }
801
+ _next(undefined);
802
+ });
803
+ };
804
+ }
805
+ function _regeneratorRuntime() {
806
+ _regeneratorRuntime = function() {
807
+ return e;
808
+ };
809
+ var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function(t2, e2, r2) {
810
+ t2[e2] = r2.value;
811
+ }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag";
812
+ function define(t2, e2, r2) {
813
+ return Object.defineProperty(t2, e2, {
814
+ value: r2,
815
+ enumerable: true,
816
+ configurable: true,
817
+ writable: true
818
+ }), t2[e2];
819
+ }
820
+ try {
821
+ define({}, "");
822
+ } catch (t2) {
823
+ define = function(t3, e2, r2) {
824
+ return t3[e2] = r2;
825
+ };
826
+ }
827
+ function wrap(t2, e2, r2, n2) {
828
+ var i2 = e2 && e2.prototype instanceof Generator ? e2 : Generator, a2 = Object.create(i2.prototype), c2 = new Context(n2 || []);
829
+ return o(a2, "_invoke", {
830
+ value: makeInvokeMethod(t2, r2, c2)
831
+ }), a2;
832
+ }
833
+ function tryCatch(t2, e2, r2) {
17
834
  try {
18
- analytics.trackCommand({
19
- command: 'version',
835
+ return {
836
+ type: "normal",
837
+ arg: t2.call(e2, r2)
838
+ };
839
+ } catch (t3) {
840
+ return {
841
+ type: "throw",
842
+ arg: t3
843
+ };
844
+ }
845
+ }
846
+ e.wrap = wrap;
847
+ var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {};
848
+ function Generator() {
849
+ }
850
+ function GeneratorFunction() {
851
+ }
852
+ function GeneratorFunctionPrototype() {
853
+ }
854
+ var p = {};
855
+ define(p, a, function() {
856
+ return this;
857
+ });
858
+ var d = Object.getPrototypeOf, v = d && d(d(values([])));
859
+ v && v !== r && n.call(v, a) && (p = v);
860
+ var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p);
861
+ function defineIteratorMethods(t2) {
862
+ ["next", "throw", "return"].forEach(function(e2) {
863
+ define(t2, e2, function(t3) {
864
+ return this._invoke(e2, t3);
865
+ });
866
+ });
867
+ }
868
+ function AsyncIterator(t2, e2) {
869
+ function invoke(r3, o2, i2, a2) {
870
+ var c2 = tryCatch(t2[r3], t2, o2);
871
+ if ("throw" !== c2.type) {
872
+ var u2 = c2.arg, h2 = u2.value;
873
+ return h2 && "object" == typeof h2 && n.call(h2, "__await") ? e2.resolve(h2.__await).then(function(t3) {
874
+ invoke("next", t3, i2, a2);
875
+ }, function(t3) {
876
+ invoke("throw", t3, i2, a2);
877
+ }) : e2.resolve(h2).then(function(t3) {
878
+ u2.value = t3, i2(u2);
879
+ }, function(t3) {
880
+ return invoke("throw", t3, i2, a2);
20
881
  });
21
- console.log(`create-mastra ${version}`);
882
+ }
883
+ a2(c2.arg);
884
+ }
885
+ var r2;
886
+ o(this, "_invoke", {
887
+ value: function(t3, n2) {
888
+ function callInvokeWithMethodAndArg() {
889
+ return new e2(function(e3, r3) {
890
+ invoke(t3, n2, e3, r3);
891
+ });
892
+ }
893
+ return r2 = r2 ? r2.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
894
+ }
895
+ });
896
+ }
897
+ function makeInvokeMethod(e2, r2, n2) {
898
+ var o2 = h;
899
+ return function(i2, a2) {
900
+ if (o2 === f) throw Error("Generator is already running");
901
+ if (o2 === s) {
902
+ if ("throw" === i2) throw a2;
903
+ return {
904
+ value: t,
905
+ done: true
906
+ };
907
+ }
908
+ for (n2.method = i2, n2.arg = a2; ; ) {
909
+ var c2 = n2.delegate;
910
+ if (c2) {
911
+ var u2 = maybeInvokeDelegate(c2, n2);
912
+ if (u2) {
913
+ if (u2 === y) continue;
914
+ return u2;
915
+ }
916
+ }
917
+ if ("next" === n2.method) n2.sent = n2._sent = n2.arg;
918
+ else if ("throw" === n2.method) {
919
+ if (o2 === h) throw o2 = s, n2.arg;
920
+ n2.dispatchException(n2.arg);
921
+ } else "return" === n2.method && n2.abrupt("return", n2.arg);
922
+ o2 = f;
923
+ var p2 = tryCatch(e2, r2, n2);
924
+ if ("normal" === p2.type) {
925
+ if (o2 = n2.done ? s : l, p2.arg === y) continue;
926
+ return {
927
+ value: p2.arg,
928
+ done: n2.done
929
+ };
930
+ }
931
+ "throw" === p2.type && (o2 = s, n2.method = "throw", n2.arg = p2.arg);
932
+ }
933
+ };
934
+ }
935
+ function maybeInvokeDelegate(e2, r2) {
936
+ var n2 = r2.method, o2 = e2.iterator[n2];
937
+ if (o2 === t) return r2.delegate = null, "throw" === n2 && e2.iterator.return && (r2.method = "return", r2.arg = t, maybeInvokeDelegate(e2, r2), "throw" === r2.method) || "return" !== n2 && (r2.method = "throw", r2.arg = new TypeError("The iterator does not provide a '" + n2 + "' method")), y;
938
+ var i2 = tryCatch(o2, e2.iterator, r2.arg);
939
+ if ("throw" === i2.type) return r2.method = "throw", r2.arg = i2.arg, r2.delegate = null, y;
940
+ var a2 = i2.arg;
941
+ return a2 ? a2.done ? (r2[e2.resultName] = a2.value, r2.next = e2.nextLoc, "return" !== r2.method && (r2.method = "next", r2.arg = t), r2.delegate = null, y) : a2 : (r2.method = "throw", r2.arg = new TypeError("iterator result is not an object"), r2.delegate = null, y);
942
+ }
943
+ function pushTryEntry(t2) {
944
+ var e2 = {
945
+ tryLoc: t2[0]
946
+ };
947
+ 1 in t2 && (e2.catchLoc = t2[1]), 2 in t2 && (e2.finallyLoc = t2[2], e2.afterLoc = t2[3]), this.tryEntries.push(e2);
948
+ }
949
+ function resetTryEntry(t2) {
950
+ var e2 = t2.completion || {};
951
+ e2.type = "normal", delete e2.arg, t2.completion = e2;
952
+ }
953
+ function Context(t2) {
954
+ this.tryEntries = [{
955
+ tryLoc: "root"
956
+ }], t2.forEach(pushTryEntry, this), this.reset(true);
957
+ }
958
+ function values(e2) {
959
+ if (e2 || "" === e2) {
960
+ var r2 = e2[a];
961
+ if (r2) return r2.call(e2);
962
+ if ("function" == typeof e2.next) return e2;
963
+ if (!isNaN(e2.length)) {
964
+ var o2 = -1, i2 = function next() {
965
+ for (; ++o2 < e2.length; ) if (n.call(e2, o2)) return next.value = e2[o2], next.done = false, next;
966
+ return next.value = t, next.done = true, next;
967
+ };
968
+ return i2.next = i2;
969
+ }
970
+ }
971
+ throw new TypeError(typeof e2 + " is not iterable");
972
+ }
973
+ return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", {
974
+ value: GeneratorFunctionPrototype,
975
+ configurable: true
976
+ }), o(GeneratorFunctionPrototype, "constructor", {
977
+ value: GeneratorFunction,
978
+ configurable: true
979
+ }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function(t2) {
980
+ var e2 = "function" == typeof t2 && t2.constructor;
981
+ return !!e2 && (e2 === GeneratorFunction || "GeneratorFunction" === (e2.displayName || e2.name));
982
+ }, e.mark = function(t2) {
983
+ return Object.setPrototypeOf ? Object.setPrototypeOf(t2, GeneratorFunctionPrototype) : (t2.__proto__ = GeneratorFunctionPrototype, define(t2, u, "GeneratorFunction")), t2.prototype = Object.create(g), t2;
984
+ }, e.awrap = function(t2) {
985
+ return {
986
+ __await: t2
987
+ };
988
+ }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function() {
989
+ return this;
990
+ }), e.AsyncIterator = AsyncIterator, e.async = function(t2, r2, n2, o2, i2) {
991
+ undefined === i2 && (i2 = Promise);
992
+ var a2 = new AsyncIterator(wrap(t2, r2, n2, o2), i2);
993
+ return e.isGeneratorFunction(r2) ? a2 : a2.next().then(function(t3) {
994
+ return t3.done ? t3.value : a2.next();
995
+ });
996
+ }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function() {
997
+ return this;
998
+ }), define(g, "toString", function() {
999
+ return "[object Generator]";
1000
+ }), e.keys = function(t2) {
1001
+ var e2 = Object(t2), r2 = [];
1002
+ for (var n2 in e2) r2.push(n2);
1003
+ return r2.reverse(), function next() {
1004
+ for (; r2.length; ) {
1005
+ var t3 = r2.pop();
1006
+ if (t3 in e2) return next.value = t3, next.done = false, next;
1007
+ }
1008
+ return next.done = true, next;
1009
+ };
1010
+ }, e.values = values, Context.prototype = {
1011
+ constructor: Context,
1012
+ reset: function(e2) {
1013
+ if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = false, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e2) for (var r2 in this) "t" === r2.charAt(0) && n.call(this, r2) && !isNaN(+r2.slice(1)) && (this[r2] = t);
1014
+ },
1015
+ stop: function() {
1016
+ this.done = true;
1017
+ var t2 = this.tryEntries[0].completion;
1018
+ if ("throw" === t2.type) throw t2.arg;
1019
+ return this.rval;
1020
+ },
1021
+ dispatchException: function(e2) {
1022
+ if (this.done) throw e2;
1023
+ var r2 = this;
1024
+ function handle(n2, o3) {
1025
+ return a2.type = "throw", a2.arg = e2, r2.next = n2, o3 && (r2.method = "next", r2.arg = t), !!o3;
1026
+ }
1027
+ for (var o2 = this.tryEntries.length - 1; o2 >= 0; --o2) {
1028
+ var i2 = this.tryEntries[o2], a2 = i2.completion;
1029
+ if ("root" === i2.tryLoc) return handle("end");
1030
+ if (i2.tryLoc <= this.prev) {
1031
+ var c2 = n.call(i2, "catchLoc"), u2 = n.call(i2, "finallyLoc");
1032
+ if (c2 && u2) {
1033
+ if (this.prev < i2.catchLoc) return handle(i2.catchLoc, true);
1034
+ if (this.prev < i2.finallyLoc) return handle(i2.finallyLoc);
1035
+ } else if (c2) {
1036
+ if (this.prev < i2.catchLoc) return handle(i2.catchLoc, true);
1037
+ } else {
1038
+ if (!u2) throw Error("try statement without catch or finally");
1039
+ if (this.prev < i2.finallyLoc) return handle(i2.finallyLoc);
1040
+ }
1041
+ }
1042
+ }
1043
+ },
1044
+ abrupt: function(t2, e2) {
1045
+ for (var r2 = this.tryEntries.length - 1; r2 >= 0; --r2) {
1046
+ var o2 = this.tryEntries[r2];
1047
+ if (o2.tryLoc <= this.prev && n.call(o2, "finallyLoc") && this.prev < o2.finallyLoc) {
1048
+ var i2 = o2;
1049
+ break;
1050
+ }
1051
+ }
1052
+ i2 && ("break" === t2 || "continue" === t2) && i2.tryLoc <= e2 && e2 <= i2.finallyLoc && (i2 = null);
1053
+ var a2 = i2 ? i2.completion : {};
1054
+ return a2.type = t2, a2.arg = e2, i2 ? (this.method = "next", this.next = i2.finallyLoc, y) : this.complete(a2);
1055
+ },
1056
+ complete: function(t2, e2) {
1057
+ if ("throw" === t2.type) throw t2.arg;
1058
+ return "break" === t2.type || "continue" === t2.type ? this.next = t2.arg : "return" === t2.type ? (this.rval = this.arg = t2.arg, this.method = "return", this.next = "end") : "normal" === t2.type && e2 && (this.next = e2), y;
1059
+ },
1060
+ finish: function(t2) {
1061
+ for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) {
1062
+ var r2 = this.tryEntries[e2];
1063
+ if (r2.finallyLoc === t2) return this.complete(r2.completion, r2.afterLoc), resetTryEntry(r2), y;
1064
+ }
1065
+ },
1066
+ catch: function(t2) {
1067
+ for (var e2 = this.tryEntries.length - 1; e2 >= 0; --e2) {
1068
+ var r2 = this.tryEntries[e2];
1069
+ if (r2.tryLoc === t2) {
1070
+ var n2 = r2.completion;
1071
+ if ("throw" === n2.type) {
1072
+ var o2 = n2.arg;
1073
+ resetTryEntry(r2);
1074
+ }
1075
+ return o2;
1076
+ }
1077
+ }
1078
+ throw Error("illegal catch attempt");
1079
+ },
1080
+ delegateYield: function(e2, r2, n2) {
1081
+ return this.delegate = {
1082
+ iterator: values(e2),
1083
+ resultName: r2,
1084
+ nextLoc: n2
1085
+ }, "next" === this.method && (this.arg = t), y;
1086
+ }
1087
+ }, e;
1088
+ }
1089
+ var LogLevel = {
1090
+ DEBUG: "debug",
1091
+ INFO: "info",
1092
+ WARN: "warn",
1093
+ ERROR: "error",
1094
+ NONE: "silent"
1095
+ };
1096
+ var Logger = /* @__PURE__ */ function() {
1097
+ function Logger2(options) {
1098
+ var _options;
1099
+ if (options === undefined) {
1100
+ options = {};
1101
+ }
1102
+ this.logger = undefined;
1103
+ this.transports = undefined;
1104
+ this.transports = options.transports || {};
1105
+ var transportsAry = Object.entries(this.transports);
1106
+ this.logger = pino({
1107
+ name: options.name || "app",
1108
+ level: options.level || LogLevel.INFO
1109
+ }, options.overrideDefaultTransports ? (_options = options) == null || (_options = _options.transports) == null ? undefined : _options["default"] : transportsAry.length === 0 ? pretty({
1110
+ colorize: true,
1111
+ levelFirst: true,
1112
+ ignore: "pid,hostname",
1113
+ colorizeObjects: true,
1114
+ translateTime: "SYS:standard",
1115
+ singleLine: false
1116
+ }) : pino.multistream([].concat(transportsAry.map(function(_ref2) {
1117
+ var transport = _ref2[1];
1118
+ return {
1119
+ stream: transport,
1120
+ level: options.level || LogLevel.INFO
1121
+ };
1122
+ }), [{
1123
+ stream: pretty({
1124
+ colorize: true,
1125
+ levelFirst: true,
1126
+ ignore: "pid,hostname",
1127
+ colorizeObjects: true,
1128
+ translateTime: "SYS:standard",
1129
+ singleLine: false
1130
+ }),
1131
+ level: options.level || LogLevel.INFO
1132
+ }])));
1133
+ }
1134
+ var _proto2 = Logger2.prototype;
1135
+ _proto2.debug = function debug2(message, args) {
1136
+ if (args === undefined) {
1137
+ args = {};
1138
+ }
1139
+ this.logger.debug(args, message);
1140
+ };
1141
+ _proto2.info = function info2(message, args) {
1142
+ if (args === undefined) {
1143
+ args = {};
1144
+ }
1145
+ this.logger.info(args, message);
1146
+ };
1147
+ _proto2.warn = function warn2(message, args) {
1148
+ if (args === undefined) {
1149
+ args = {};
1150
+ }
1151
+ this.logger.warn(args, message);
1152
+ };
1153
+ _proto2.error = function error2(message, args) {
1154
+ if (args === undefined) {
1155
+ args = {};
1156
+ }
1157
+ this.logger.error(args, message);
1158
+ };
1159
+ _proto2.createStream = function createStream() {
1160
+ var _this = this;
1161
+ return new Transform({
1162
+ transform: function transform(chunk, _encoding, callback) {
1163
+ var line = chunk.toString().trim();
1164
+ if (line) {
1165
+ _this.info(line);
1166
+ }
1167
+ callback(null, chunk);
1168
+ }
1169
+ });
1170
+ };
1171
+ _proto2.getLogs = /* @__PURE__ */ function() {
1172
+ var _getLogs2 = /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee3(transportId) {
1173
+ return _regeneratorRuntime().wrap(function _callee3$(_context3) {
1174
+ while (1) switch (_context3.prev = _context3.next) {
1175
+ case 0:
1176
+ if (!(!transportId || !this.transports[transportId])) {
1177
+ _context3.next = 2;
1178
+ break;
1179
+ }
1180
+ return _context3.abrupt("return", []);
1181
+ case 2:
1182
+ return _context3.abrupt("return", this.transports[transportId].getLogs());
1183
+ case 3:
1184
+ case "end":
1185
+ return _context3.stop();
1186
+ }
1187
+ }, _callee3, this);
1188
+ }));
1189
+ function getLogs(_x2) {
1190
+ return _getLogs2.apply(this, arguments);
1191
+ }
1192
+ return getLogs;
1193
+ }();
1194
+ _proto2.getLogsByRunId = /* @__PURE__ */ function() {
1195
+ var _getLogsByRunId2 = /* @__PURE__ */ _asyncToGenerator(/* @__PURE__ */ _regeneratorRuntime().mark(function _callee4(_ref3) {
1196
+ var _this$transports$tran;
1197
+ var runId, transportId;
1198
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
1199
+ while (1) switch (_context4.prev = _context4.next) {
1200
+ case 0:
1201
+ runId = _ref3.runId, transportId = _ref3.transportId;
1202
+ return _context4.abrupt("return", (_this$transports$tran = this.transports[transportId]) == null ? undefined : _this$transports$tran.getLogsByRunId({
1203
+ runId
1204
+ }));
1205
+ case 2:
1206
+ case "end":
1207
+ return _context4.stop();
1208
+ }
1209
+ }, _callee4, this);
1210
+ }));
1211
+ function getLogsByRunId(_x3) {
1212
+ return _getLogsByRunId2.apply(this, arguments);
22
1213
  }
23
- catch (e) { }
1214
+ return getLogsByRunId;
1215
+ }();
1216
+ return Logger2;
1217
+ }();
1218
+ function createLogger(options) {
1219
+ return new Logger(options);
1220
+ }
1221
+
1222
+ var DepsService = class {
1223
+ packageManager;
1224
+ constructor() {
1225
+ this.packageManager = this.getPackageManager();
1226
+ }
1227
+ findLockFile(dir) {
1228
+ const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
1229
+ for (const file of lockFiles) {
1230
+ if (fs3__default__default.existsSync(path.join(dir, file))) {
1231
+ return file;
1232
+ }
1233
+ }
1234
+ const parentDir = path.resolve(dir, "..");
1235
+ if (parentDir !== dir) {
1236
+ return this.findLockFile(parentDir);
1237
+ }
1238
+ return null;
1239
+ }
1240
+ getPackageManager() {
1241
+ const lockFile = this.findLockFile(process.cwd());
1242
+ switch (lockFile) {
1243
+ case "pnpm-lock.yaml":
1244
+ return "pnpm";
1245
+ case "package-lock.json":
1246
+ return "npm";
1247
+ case "yarn.lock":
1248
+ return "yarn";
1249
+ case "bun.lock":
1250
+ return "bun";
1251
+ default:
1252
+ return "npm";
1253
+ }
1254
+ }
1255
+ async installPackages(packages) {
1256
+ let runCommand = this.packageManager;
1257
+ if (this.packageManager === "npm") {
1258
+ runCommand = `${this.packageManager} i`;
1259
+ } else {
1260
+ runCommand = `${this.packageManager} add`;
1261
+ }
1262
+ const packageList = packages.join(" ");
1263
+ return execa(`${runCommand} ${packageList}`, {
1264
+ all: true,
1265
+ shell: true,
1266
+ stdio: "inherit"
1267
+ });
1268
+ }
1269
+ async checkDependencies(dependencies) {
1270
+ try {
1271
+ const packageJsonPath = path.join(process.cwd(), "package.json");
1272
+ try {
1273
+ await fs4.access(packageJsonPath);
1274
+ } catch {
1275
+ return "No package.json file found in the current directory";
1276
+ }
1277
+ const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
1278
+ for (const dependency of dependencies) {
1279
+ if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
1280
+ return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
1281
+ }
1282
+ }
1283
+ return "ok";
1284
+ } catch (err) {
1285
+ console.error(err);
1286
+ return "Could not check dependencies";
1287
+ }
1288
+ }
1289
+ async getProjectName() {
1290
+ try {
1291
+ const packageJsonPath = path.join(process.cwd(), "package.json");
1292
+ const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1293
+ const pkg = JSON.parse(packageJson);
1294
+ return pkg.name;
1295
+ } catch (err) {
1296
+ throw err;
1297
+ }
1298
+ }
1299
+ async getPackageVersion() {
1300
+ const __filename = fileURLToPath(import.meta.url);
1301
+ const __dirname = dirname(__filename);
1302
+ const pkgJsonPath = path.join(__dirname, "..", "package.json");
1303
+ const content = await fsExtra3.readJSON(pkgJsonPath);
1304
+ return content.version;
1305
+ }
1306
+ async addScriptsToPackageJson(scripts) {
1307
+ const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1308
+ packageJson.scripts = {
1309
+ ...packageJson.scripts,
1310
+ ...scripts
1311
+ };
1312
+ await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1313
+ }
1314
+ };
1315
+ var EnvService = class {
1316
+ };
1317
+ var FileEnvService = class extends EnvService {
1318
+ filePath;
1319
+ constructor(filePath) {
1320
+ super();
1321
+ this.filePath = filePath;
1322
+ }
1323
+ readFile(filePath) {
1324
+ return new Promise((resolve, reject) => {
1325
+ fs3__default.readFile(filePath, "utf8", (err, data) => {
1326
+ if (err) reject(err);
1327
+ else resolve(data);
1328
+ });
1329
+ });
1330
+ }
1331
+ writeFile({ filePath, data }) {
1332
+ return new Promise((resolve, reject) => {
1333
+ fs3__default.writeFile(filePath, data, "utf8", (err) => {
1334
+ if (err) reject(err);
1335
+ else resolve();
1336
+ });
1337
+ });
1338
+ }
1339
+ async updateEnvData({
1340
+ key,
1341
+ value,
1342
+ filePath = this.filePath,
1343
+ data
1344
+ }) {
1345
+ const regex = new RegExp(`^${key}=.*$`, "m");
1346
+ if (data.match(regex)) {
1347
+ data = data.replace(regex, `${key}=${value}`);
1348
+ } else {
1349
+ data += `
1350
+ ${key}=${value}`;
1351
+ }
1352
+ await this.writeFile({ filePath, data });
1353
+ console.log(`${key} set to ${value} in ENV file.`);
1354
+ return data;
1355
+ }
1356
+ async getEnvValue(key) {
1357
+ try {
1358
+ const data = await this.readFile(this.filePath);
1359
+ const regex = new RegExp(`^${key}=(.*)$`, "m");
1360
+ const match = data.match(regex);
1361
+ return match?.[1] || null;
1362
+ } catch (err) {
1363
+ console.error(`Error reading ENV value: ${err}`);
1364
+ return null;
1365
+ }
1366
+ }
1367
+ async setEnvValue(key, value) {
1368
+ try {
1369
+ const data = await this.readFile(this.filePath);
1370
+ await this.updateEnvData({ key, value, data });
1371
+ } catch (err) {
1372
+ console.error(`Error writing ENV value: ${err}`);
1373
+ }
1374
+ }
1375
+ };
1376
+ var FileService = class {
1377
+ /**
1378
+ *
1379
+ * @param inputFile the file in the starter files directory to copy
1380
+ * @param outputFilePath the destination path
1381
+ * @param replaceIfExists flag to replace if it exists
1382
+ * @returns
1383
+ */
1384
+ async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1385
+ const __filename = fileURLToPath(import.meta.url);
1386
+ const __dirname = path.dirname(__filename);
1387
+ const filePath = path.resolve(__dirname, "starter-files", inputFile);
1388
+ const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1389
+ if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1390
+ console.log(`${outputFilePath} already exists`);
1391
+ return false;
1392
+ }
1393
+ await fsExtra3.outputFile(outputFilePath, fileString);
1394
+ return true;
1395
+ }
1396
+ async setupEnvFile({ dbUrl }) {
1397
+ const envPath = path.join(process.cwd(), ".env.development");
1398
+ await fsExtra3.ensureFile(envPath);
1399
+ const fileEnvService = new FileEnvService(envPath);
1400
+ await fileEnvService.setEnvValue("DB_URL", dbUrl);
1401
+ }
1402
+ getFirstExistingFile(files) {
1403
+ for (const f of files) {
1404
+ if (fs3__default__default.existsSync(f)) {
1405
+ return f;
1406
+ }
1407
+ }
1408
+ throw new Error("Missing required file, checked the following paths: " + files.join(", "));
1409
+ }
1410
+ replaceValuesInFile({
1411
+ filePath,
1412
+ replacements
1413
+ }) {
1414
+ let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1415
+ replacements.forEach(({ search, replace }) => {
1416
+ fileContent = fileContent.replaceAll(search, replace);
1417
+ });
1418
+ fs3__default__default.writeFileSync(filePath, fileContent);
1419
+ }
1420
+ };
1421
+ createLogger({
1422
+ name: "Mastra CLI",
1423
+ level: "debug"
1424
+ });
1425
+ var exec = util.promisify(child_process.exec);
1426
+ var modelToConfigMap = {
1427
+ openai: { provider: "OPEN_AI", name: "gpt-4o", toolChoice: "auto" },
1428
+ anthropic: { provider: "ANTHROPIC", name: "claude-3-5-sonnet-20241022", toolChoice: "auto" },
1429
+ groq: { provider: "GROQ", name: "llama3-groq-70b-8192-tool-use-preview", toolChoice: "auto" }
1430
+ };
1431
+ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1432
+ const model = modelToConfigMap[llmProvider];
1433
+ const instructions = `
1434
+ You are a helpful weather assistant that provides accurate weather information.
1435
+
1436
+ Your primary function is to help users get weather details for specific locations. When responding:
1437
+ - Always ask for a location if none is provided
1438
+ - Include relevant details like humidity, wind conditions, and precipitation
1439
+ - Keep responses concise but informative
1440
+
1441
+ ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1442
+ `;
1443
+ const content = `
1444
+ import { Agent } from '@mastra/core';
1445
+ ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1446
+
1447
+ export const weatherAgent = new Agent({
1448
+ name: 'Weather Agent',
1449
+ instructions: \`${instructions}\`,
1450
+ model: ${JSON.stringify(model, null, 2)},
1451
+ ${addExampleTool ? "tools: { weatherTool }," : ""}
1452
+ });
1453
+ `;
1454
+ const formattedContent = await prettier.format(content, {
1455
+ parser: "typescript",
1456
+ singleQuote: true
1457
+ });
1458
+ await fs4.writeFile(destPath, "");
1459
+ await fs4.writeFile(destPath, formattedContent);
1460
+ }
1461
+ async function writeWorkflowSample(destPath) {
1462
+ const fileService = new FileService();
1463
+ await fileService.copyStarterFile("workflow.ts", destPath);
1464
+ }
1465
+ async function writeToolSample(destPath) {
1466
+ const fileService = new FileService();
1467
+ await fileService.copyStarterFile("tools.ts", destPath);
1468
+ }
1469
+ async function writeCodeSampleForComponents(llmprovider, component, destPath, components) {
1470
+ switch (component) {
1471
+ case "agents":
1472
+ return writeAgentSample(llmprovider, destPath, components.includes("tools"));
1473
+ case "tools":
1474
+ return writeToolSample(destPath);
1475
+ case "workflows":
1476
+ return writeWorkflowSample(destPath);
1477
+ default:
1478
+ return "";
1479
+ }
1480
+ }
1481
+ var createComponentsDir = async (dirPath, component) => {
1482
+ const componentPath = dirPath + `/${component}`;
1483
+ await fsExtra3.ensureDir(componentPath);
1484
+ };
1485
+ var writeIndexFile = async ({
1486
+ dirPath,
1487
+ addAgent,
1488
+ addExample,
1489
+ addWorkflow
1490
+ }) => {
1491
+ const indexPath = dirPath + "/index.ts";
1492
+ const destPath = path.join(indexPath);
1493
+ try {
1494
+ await fs4.writeFile(destPath, "");
1495
+ const filteredExports = [
1496
+ addWorkflow ? `workflows: { weatherWorkflow },` : "",
1497
+ addAgent ? `agents: { weatherAgent },` : ""
1498
+ ].filter(Boolean);
1499
+ if (!addExample) {
1500
+ await fs4.writeFile(
1501
+ destPath,
1502
+ `
1503
+ import { Mastra } from '@mastra/core';
1504
+
1505
+ export const mastra = new Mastra()
1506
+ `
1507
+ );
1508
+ return;
1509
+ }
1510
+ await fs4.writeFile(
1511
+ destPath,
1512
+ `
1513
+ import { Mastra } from '@mastra/core';
1514
+ import { createLogger } from '@mastra/core/logger';
1515
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1516
+ ${addAgent ? `import { weatherAgent } from './agents';` : ""}
1517
+
1518
+ export const mastra = new Mastra({
1519
+ ${filteredExports.join("\n ")}
1520
+ logger: createLogger({
1521
+ name: 'Mastra',
1522
+ level: 'info',
1523
+ }),
24
1524
  });
25
- program
26
- .name('create-mastra')
27
- .description('Create a new Mastra project')
28
- .option('--default', 'Quick start with defaults(src, OpenAI, no examples)')
29
- .option('-c, --components <components>', 'Comma-separated list of components (agents, tools, workflows)')
30
- .option('-l, --llm <model-provider>', 'Default model provider (openai, anthropic, or groq)')
31
- .option('-e, --example', 'Include example code')
32
- .action(async (args) => {
33
- if (args.default) {
34
- await create({
35
- components: ['agents', 'tools', 'workflows'],
36
- llmProvider: 'openai',
37
- addExample: false,
1525
+ `
1526
+ );
1527
+ } catch (err) {
1528
+ throw err;
1529
+ }
1530
+ };
1531
+ yoctoSpinner({ text: "Installing Mastra core dependencies\n" });
1532
+ var getAPIKey = async (provider) => {
1533
+ let key = "OPENAI_API_KEY";
1534
+ switch (provider) {
1535
+ case "anthropic":
1536
+ key = "ANTHROPIC_API_KEY";
1537
+ return key;
1538
+ case "groq":
1539
+ key = "GROQ_API_KEY";
1540
+ return key;
1541
+ default:
1542
+ return key;
1543
+ }
1544
+ };
1545
+ var writeAPIKey = async ({
1546
+ provider,
1547
+ apiKey = "your-api-key"
1548
+ }) => {
1549
+ const key = await getAPIKey(provider);
1550
+ await exec(`echo ${key}=${apiKey} >> .env.development`);
1551
+ };
1552
+ var createMastraDir = async (directory) => {
1553
+ let dir = directory.trim().split("/").filter((item) => item !== "");
1554
+ const dirPath = path.join(process.cwd(), ...dir, "mastra");
1555
+ try {
1556
+ await fs4.access(dirPath);
1557
+ return { ok: false };
1558
+ } catch {
1559
+ await fsExtra3.ensureDir(dirPath);
1560
+ return { ok: true, dirPath };
1561
+ }
1562
+ };
1563
+ var writeCodeSample = async (dirPath, component, llmProvider, components) => {
1564
+ const destPath = dirPath + `/${component}/index.ts`;
1565
+ try {
1566
+ await writeCodeSampleForComponents(llmProvider, component, destPath, components);
1567
+ } catch (err) {
1568
+ throw err;
1569
+ }
1570
+ };
1571
+ var interactivePrompt = async () => {
1572
+ pe(color2.inverse("Mastra Init"));
1573
+ const mastraProject = await ve(
1574
+ {
1575
+ directory: () => ae({
1576
+ message: "Where should we create the Mastra files? (default: src/)",
1577
+ placeholder: "src/",
1578
+ defaultValue: "src/"
1579
+ }),
1580
+ components: () => $e({
1581
+ message: "Choose components to install:",
1582
+ options: [
1583
+ { value: "agents", label: "Agents", hint: "recommended" },
1584
+ {
1585
+ value: "workflows",
1586
+ label: "Workflows"
1587
+ }
1588
+ ]
1589
+ }),
1590
+ shouldAddTools: () => ce({
1591
+ message: "Add tools?",
1592
+ initialValue: false
1593
+ }),
1594
+ llmProvider: () => le({
1595
+ message: "Select default provider:",
1596
+ options: [
1597
+ { value: "openai", label: "OpenAI", hint: "recommended" },
1598
+ { value: "anthropic", label: "Anthropic" },
1599
+ { value: "groq", label: "Groq" }
1600
+ ]
1601
+ }),
1602
+ llmApiKey: async ({ results: { llmProvider } }) => {
1603
+ const keyChoice = await le({
1604
+ message: `Enter your ${llmProvider} API key?`,
1605
+ options: [
1606
+ { value: "skip", label: "Skip for now", hint: "default" },
1607
+ { value: "enter", label: "Enter API key" }
1608
+ ],
1609
+ initialValue: "skip"
38
1610
  });
39
- return;
1611
+ if (keyChoice === "enter") {
1612
+ return ae({
1613
+ message: "Enter your API key:",
1614
+ placeholder: "sk-..."
1615
+ });
1616
+ }
1617
+ return undefined;
1618
+ },
1619
+ addExample: () => ce({
1620
+ message: "Add example",
1621
+ initialValue: false
1622
+ })
1623
+ },
1624
+ {
1625
+ onCancel: () => {
1626
+ he("Operation cancelled.");
1627
+ process.exit(0);
1628
+ }
1629
+ }
1630
+ );
1631
+ const { shouldAddTools, components, ...rest } = mastraProject;
1632
+ const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1633
+ return { ...rest, components: mastraComponents };
1634
+ };
1635
+ var s = _();
1636
+ var init = async ({
1637
+ directory,
1638
+ addExample = false,
1639
+ components,
1640
+ llmProvider = "openai",
1641
+ llmApiKey
1642
+ }) => {
1643
+ s.start("Initializing Mastra");
1644
+ try {
1645
+ const result = await createMastraDir(directory);
1646
+ if (!result.ok) {
1647
+ s.stop(color2.inverse(" Mastra already initialized "));
1648
+ return { success: false };
1649
+ }
1650
+ const dirPath = result.dirPath;
1651
+ await Promise.all([
1652
+ writeIndexFile({
1653
+ dirPath,
1654
+ addExample,
1655
+ addWorkflow: components.includes("workflows"),
1656
+ addAgent: components.includes("agents")
1657
+ }),
1658
+ ...components.map((component) => createComponentsDir(dirPath, component)),
1659
+ writeAPIKey({ provider: llmProvider, apiKey: llmApiKey })
1660
+ ]);
1661
+ if (addExample) {
1662
+ await Promise.all([
1663
+ components.map(
1664
+ (component) => writeCodeSample(dirPath, component, llmProvider, components)
1665
+ )
1666
+ ]);
1667
+ }
1668
+ const key = await getAPIKey(llmProvider || "openai");
1669
+ s.stop();
1670
+ if (!llmApiKey) {
1671
+ me(`
1672
+ ${color2.green("Mastra initialized successfully!")}
1673
+
1674
+ Add your ${color2.cyan(key)} as an environment variable
1675
+ in your ${color2.cyan(".env.development")} file
1676
+ `);
1677
+ } else {
1678
+ me(`
1679
+ ${color2.green("Mastra initialized successfully!")}
1680
+ `);
40
1681
  }
1682
+ return { success: true };
1683
+ } catch (err) {
1684
+ s.stop(color2.inverse("An error occurred while initializing Mastra"));
1685
+ console.error(err);
1686
+ return { success: false };
1687
+ }
1688
+ };
1689
+ var exec2 = util.promisify(child_process.exec);
1690
+ var createMastraProject = async () => {
1691
+ pe(color2.inverse("Mastra Create"));
1692
+ const projectName = await ae({
1693
+ message: "What do you want to name your project?",
1694
+ placeholder: "my-mastra-app",
1695
+ defaultValue: "my-mastra-app"
1696
+ });
1697
+ if (lD(projectName)) {
1698
+ he("Operation cancelled");
1699
+ process.exit(0);
1700
+ }
1701
+ const s2 = _();
1702
+ s2.start("Creating project");
1703
+ try {
1704
+ await fs4.mkdir(projectName);
1705
+ } catch (error) {
1706
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1707
+ s2.stop(
1708
+ `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
1709
+ );
1710
+ process.exit(1);
1711
+ }
1712
+ throw error;
1713
+ }
1714
+ process.chdir(projectName);
1715
+ s2.message("Creating project");
1716
+ await exec2(`npm init -y`);
1717
+ const depsService = new DepsService();
1718
+ await depsService.addScriptsToPackageJson({
1719
+ dev: "mastra dev"
1720
+ });
1721
+ s2.stop("Project created");
1722
+ s2.start("Installing npm dependencies");
1723
+ await exec2(`npm i zod`);
1724
+ await exec2(`npm i typescript tsx @types/node --save-dev`);
1725
+ await exec2(`echo '{
1726
+ "compilerOptions": {
1727
+ "target": "es2016",
1728
+ "module": "commonjs",
1729
+ "esModuleInterop": true,
1730
+ "forceConsistentCasingInFileNames": true,
1731
+ "strict": true,
1732
+ "skipLibCheck": true,
1733
+ "outDir": "dist"
1734
+ },
1735
+ "include": ["src/**/*"],
1736
+ "exclude": ["node_modules", "dist", ".mastra"]
1737
+ }' > tsconfig.json`);
1738
+ s2.stop("NPM dependencies installed");
1739
+ s2.start("Installing mastra");
1740
+ await exec2(`npm i -D mastra`);
1741
+ s2.stop("mastra installed");
1742
+ s2.start("Installing @mastra/core");
1743
+ await exec2(`npm i @mastra/core@alpha`);
1744
+ s2.stop("@mastra/core installed");
1745
+ s2.start("Adding .gitignore");
1746
+ await exec2(`echo output.txt >> .gitignore`);
1747
+ await exec2(`echo node_modules >> .gitignore`);
1748
+ await exec2(`echo dist >> .gitignore`);
1749
+ await exec2(`echo .mastra >> .gitignore`);
1750
+ s2.stop(".gitignore added");
1751
+ ge("Project created successfully");
1752
+ console.log("");
1753
+ return { projectName };
1754
+ };
1755
+ var create = async (args) => {
1756
+ const { projectName } = await createMastraProject();
1757
+ const directory = "/src";
1758
+ if (!args.components || !args.llmProvider || !args.addExample) {
1759
+ const result = await interactivePrompt();
1760
+ await init({
1761
+ ...result,
1762
+ llmApiKey: result?.llmApiKey
1763
+ });
1764
+ postCreate({ projectName });
1765
+ return;
1766
+ }
1767
+ const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args;
1768
+ await init({
1769
+ directory,
1770
+ components,
1771
+ llmProvider,
1772
+ addExample,
1773
+ llmApiKey
1774
+ });
1775
+ postCreate({ projectName });
1776
+ };
1777
+ var postCreate = ({ projectName }) => {
1778
+ ge(`
1779
+ ${color2.green("To start your project:")}
1780
+
1781
+ ${color2.cyan("cd")} ${projectName}
1782
+ ${color2.cyan("npm run dev")}
1783
+ `);
1784
+ };
1785
+
1786
+ async function getPackageVersion() {
1787
+ const __filename = fileURLToPath(import.meta.url);
1788
+ const __dirname = dirname(__filename);
1789
+ const pkgJsonPath = path.join(__dirname, "..", "package.json");
1790
+ const content = await fsExtra.readJSON(pkgJsonPath);
1791
+ return content.version;
1792
+ }
1793
+
1794
+ const version = await getPackageVersion();
1795
+ const analytics = new PosthogAnalytics({
1796
+ apiKey: "phc_SBLpZVAB6jmHOct9CABq3PF0Yn5FU3G2FgT4xUr2XrT",
1797
+ host: "https://us.posthog.com",
1798
+ version
1799
+ });
1800
+ const program = new Command();
1801
+ program.version(`${version}`, "-v, --version").description(`create-mastra ${version}`).action(async () => {
1802
+ try {
1803
+ analytics.trackCommand({
1804
+ command: "version"
1805
+ });
1806
+ console.log(`create-mastra ${version}`);
1807
+ } catch (e) {
1808
+ }
1809
+ });
1810
+ program.name("create-mastra").description("Create a new Mastra project").option("--default", "Quick start with defaults(src, OpenAI, no examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, or groq)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").action(async (args) => {
1811
+ if (args.default) {
41
1812
  await create({
42
- components: args.components,
43
- llmProvider: args.llm,
44
- addExample: args.example,
1813
+ components: ["agents", "tools", "workflows"],
1814
+ llmProvider: "openai",
1815
+ addExample: false
45
1816
  });
1817
+ return;
1818
+ }
1819
+ await create({
1820
+ components: args.components,
1821
+ llmProvider: args.llm,
1822
+ addExample: args.example,
1823
+ llmApiKey: args["llm-api-key"]
1824
+ });
46
1825
  });
47
1826
  program.parse(process.argv);
1827
+ //# sourceMappingURL=index.js.map