create-mastra 0.0.0-mcp-server-deploy-20250507160341 → 0.0.0-memory-system-message-error-20250813233316

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.
Files changed (42) hide show
  1. package/LICENSE.md +11 -42
  2. package/README.md +0 -1
  3. package/dist/index.js +1177 -480
  4. package/dist/index.js.map +1 -1
  5. package/dist/starter-files/tools.d.ts +79 -0
  6. package/dist/starter-files/tools.d.ts.map +1 -0
  7. package/dist/templates/dev.entry.d.ts +2 -0
  8. package/dist/templates/dev.entry.d.ts.map +1 -0
  9. package/dist/templates/dev.entry.js +7 -7
  10. package/dist/templates/scorers/answer-relevancy-scorer.d.ts +2 -0
  11. package/dist/templates/scorers/answer-relevancy-scorer.d.ts.map +1 -0
  12. package/dist/templates/scorers/answer-relevancy-scorer.ts +15 -0
  13. package/dist/templates/scorers/bias-detection-scorer.d.ts +2 -0
  14. package/dist/templates/scorers/bias-detection-scorer.d.ts.map +1 -0
  15. package/dist/templates/scorers/bias-detection-scorer.ts +16 -0
  16. package/dist/templates/scorers/completeness-scorer.d.ts +2 -0
  17. package/dist/templates/scorers/completeness-scorer.d.ts.map +1 -0
  18. package/dist/templates/scorers/completeness-scorer.ts +16 -0
  19. package/dist/templates/scorers/content-similarity-scorer.d.ts +2 -0
  20. package/dist/templates/scorers/content-similarity-scorer.d.ts.map +1 -0
  21. package/dist/templates/scorers/content-similarity-scorer.ts +15 -0
  22. package/dist/templates/scorers/faithfulness-scorer.d.ts +2 -0
  23. package/dist/templates/scorers/faithfulness-scorer.d.ts.map +1 -0
  24. package/dist/templates/scorers/faithfulness-scorer.ts +21 -0
  25. package/dist/templates/scorers/hallucination-scorer.d.ts +2 -0
  26. package/dist/templates/scorers/hallucination-scorer.d.ts.map +1 -0
  27. package/dist/templates/scorers/hallucination-scorer.ts +21 -0
  28. package/dist/templates/scorers/keyword-coverage-scorer.d.ts +2 -0
  29. package/dist/templates/scorers/keyword-coverage-scorer.d.ts.map +1 -0
  30. package/dist/templates/scorers/keyword-coverage-scorer.ts +15 -0
  31. package/dist/templates/scorers/textual-difference-scorer.d.ts +2 -0
  32. package/dist/templates/scorers/textual-difference-scorer.d.ts.map +1 -0
  33. package/dist/templates/scorers/textual-difference-scorer.ts +16 -0
  34. package/dist/templates/scorers/tone-consistency-scorer.d.ts +2 -0
  35. package/dist/templates/scorers/tone-consistency-scorer.d.ts.map +1 -0
  36. package/dist/templates/scorers/tone-consistency-scorer.ts +16 -0
  37. package/dist/templates/scorers/toxicity-detection-scorer.d.ts +2 -0
  38. package/dist/templates/scorers/toxicity-detection-scorer.d.ts.map +1 -0
  39. package/dist/templates/scorers/toxicity-detection-scorer.ts +16 -0
  40. package/package.json +17 -17
  41. package/dist/starter-files/config.ts +0 -25
  42. package/dist/starter-files/mastra-pg.docker-compose.yaml +0 -15
package/dist/index.js CHANGED
@@ -1,29 +1,33 @@
1
1
  #! /usr/bin/env node
2
2
  import { Command } from 'commander';
3
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';
4
+ import * as fs4__default from 'node:fs';
5
+ import fs4__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import os from 'node:os';
7
- import path, { dirname } from 'node:path';
7
+ import path3, { dirname } from 'node:path';
8
8
  import { fileURLToPath } from 'node:url';
9
9
  import { PostHog } from 'posthog-node';
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';
10
+ import util, { stripVTControlCharacters } from 'node:util';
11
+ import y$1, { stdout, stdin } from 'node:process';
12
+ import * as g from 'node:readline';
13
+ import g__default from 'node:readline';
14
+ import { Writable } from 'node:stream';
15
+ import fs from 'node:fs/promises';
14
16
  import child_process from 'node:child_process';
15
- import util from 'node:util';
16
- import fs4 from 'node:fs/promises';
17
+ import tty from 'node:tty';
18
+ import pino from 'pino';
19
+ import pretty from 'pino-pretty';
17
20
  import { execa } from 'execa';
18
21
  import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
19
22
  import prettier from 'prettier';
20
- import { Transform } from 'node:stream';
21
- import pino from 'pino';
22
- import pretty from 'pino-pretty';
23
23
  import fsExtra from 'fs-extra';
24
24
 
25
25
  var __filename = fileURLToPath(import.meta.url);
26
- var __dirname = path.dirname(__filename);
26
+ var __dirname = path3.dirname(__filename);
27
+ var analyticsInstance = null;
28
+ function getAnalytics() {
29
+ return analyticsInstance;
30
+ }
27
31
  var PosthogAnalytics = class {
28
32
  sessionId;
29
33
  client;
@@ -35,7 +39,7 @@ var PosthogAnalytics = class {
35
39
  host = "https://app.posthog.com"
36
40
  }) {
37
41
  this.version = version;
38
- const cliConfigPath = path.join(__dirname, "mastra-cli.json");
42
+ const cliConfigPath = path3.join(__dirname, "mastra-cli.json");
39
43
  if (existsSync(cliConfigPath)) {
40
44
  try {
41
45
  const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
@@ -63,7 +67,7 @@ var PosthogAnalytics = class {
63
67
  }
64
68
  writeCliConfig({ distinctId, sessionId }) {
65
69
  try {
66
- writeFileSync(path.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
70
+ writeFileSync(path3.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
67
71
  } catch {
68
72
  }
69
73
  }
@@ -113,6 +117,22 @@ var PosthogAnalytics = class {
113
117
  }
114
118
  });
115
119
  }
120
+ trackEvent(eventName, properties) {
121
+ try {
122
+ if (!this.client) {
123
+ return;
124
+ }
125
+ this.client.capture({
126
+ distinctId: this.distinctId,
127
+ event: eventName,
128
+ properties: {
129
+ ...this.getSystemProperties(),
130
+ ...properties
131
+ }
132
+ });
133
+ } catch {
134
+ }
135
+ }
116
136
  trackCommand(options) {
117
137
  try {
118
138
  if (!this.client) {
@@ -349,72 +369,335 @@ function requirePicocolors () {
349
369
  var picocolorsExports = /*@__PURE__*/ requirePicocolors();
350
370
  var color2 = /*@__PURE__*/getDefaultExportFromCjs(picocolorsExports);
351
371
 
352
- function q({onlyFirst:e=false}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(F,e?void 0:"g")}const J=q();function S(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(J,"")}function T$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var j$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(t){var s=t.charCodeAt(0),C=t.length==2?t.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=C&&C<=57343&&(s&=1023,C&=1023,D=s<<10|C,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(t){var s=this.eastAsianWidth(t);return s=="F"||s=="W"||s=="A"?2:1};function F(t){return t.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(t){for(var s=F(t),C=0,D=0;D<s.length;D++)C=C+this.characterLength(s[D]);return C},u.slice=function(t,s,C){textLen=u.length(t),s=s||0,C=C||1,s<0&&(s=textLen+s),C<0&&(C=textLen+C);for(var D="",i=0,n=F(t),E=0;E<n.length;E++){var h=n[E],o=u.length(h);if(i>=s-(o==2?1:0))if(i+o<=C)D+=h;else break;i+=o;}return D};})(j$1);var Q$1=j$1.exports;const X=T$1(Q$1);var DD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const uD=T$1(DD);function A(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=S(e),e.length===0))return 0;e=e.replace(uD()," ");const F=u.ambiguousIsNarrow?1:2;let t=0;for(const s of e){const C=s.codePointAt(0);if(C<=31||C>=127&&C<=159||C>=768&&C<=879)continue;switch(X.eastAsianWidth(s)){case "F":case "W":t+=2;break;case "A":t+=F;break;default:t+=1;}}return t}const d=10,M$1=(e=0)=>u=>`\x1B[${u+e}m`,P$1=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,W=(e=0)=>(u,F,t)=>`\x1B[${38+e};2;${u};${F};${t}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const FD=Object.keys(r.color),eD=Object.keys(r.bgColor);[...FD,...eD];function tD(){const e=new Map;for(const[u,F]of Object.entries(r)){for(const[t,s]of Object.entries(F))r[t]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},F[t]=r[t],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:F,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=M$1(),r.color.ansi256=P$1(),r.color.ansi16m=W(),r.bgColor.ansi=M$1(d),r.bgColor.ansi256=P$1(d),r.bgColor.ansi16m=W(d),Object.defineProperties(r,{rgbToAnsi256:{value:(u,F,t)=>u===F&&F===t?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(F/255*5)+Math.round(t/255*5),enumerable:false},hexToRgb:{value:u=>{const F=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!F)return [0,0,0];let[t]=F;t.length===3&&(t=[...t].map(C=>C+C).join(""));const s=Number.parseInt(t,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let F,t,s;if(u>=232)F=((u-232)*10+8)/255,t=F,s=F;else {u-=16;const i=u%36;F=Math.floor(u/36)/5,t=Math.floor(i/6)/5,s=i%6/5;}const C=Math.max(F,t,s)*2;if(C===0)return 30;let D=30+(Math.round(s)<<2|Math.round(t)<<1|Math.round(F));return C===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,F,t)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,F,t)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const sD=tD(),g=new Set(["\x1B","\x9B"]),CD=39,b$1="\x07",O="[",iD="]",I$1="m",w=`${iD}8;;`,N=e=>`${g.values().next().value}${O}${e}${I$1}`,L=e=>`${g.values().next().value}${w}${e}${b$1}`,rD=e=>e.split(" ").map(u=>A(u)),y$1=(e,u,F)=>{const t=[...u];let s=false,C=false,D=A(S(e[e.length-1]));for(const[i,n]of t.entries()){const E=A(n);if(D+E<=F?e[e.length-1]+=n:(e.push(n),D=0),g.has(n)&&(s=true,C=t.slice(i+1).join("").startsWith(w)),s){C?n===b$1&&(s=false,C=false):n===I$1&&(s=false);continue}D+=E,D===F&&i<t.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},ED=e=>{const u=e.split(" ");let F=u.length;for(;F>0&&!(A(u[F-1])>0);)F--;return F===u.length?e:u.slice(0,F).join(" ")+u.slice(F).join("")},oD=(e,u,F={})=>{if(F.trim!==false&&e.trim()==="")return "";let t="",s,C;const D=rD(e);let i=[""];for(const[E,h]of e.split(" ").entries()){F.trim!==false&&(i[i.length-1]=i[i.length-1].trimStart());let o=A(i[i.length-1]);if(E!==0&&(o>=u&&(F.wordWrap===false||F.trim===false)&&(i.push(""),o=0),(o>0||F.trim===false)&&(i[i.length-1]+=" ",o++)),F.hard&&D[E]>u){const B=u-o,p=1+Math.floor((D[E]-B-1)/u);Math.floor((D[E]-1)/u)<p&&i.push(""),y$1(i,h,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(F.wordWrap===false&&o<u){y$1(i,h,u);continue}i.push("");}if(o+D[E]>u&&F.wordWrap===false){y$1(i,h,u);continue}i[i.length-1]+=h;}F.trim!==false&&(i=i.map(E=>ED(E)));const n=[...i.join(`
353
- `)];for(const[E,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!==void 0){const p=Number.parseFloat(B.code);s=p===CD?void 0:p;}else B.uri!==void 0&&(C=B.uri.length===0?void 0:B.uri);}const o=sD.codes.get(Number(s));n[E+1]===`
354
- `?(C&&(t+=L("")),s&&o&&(t+=N(o))):h===`
355
- `&&(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,`
372
+ function DD({onlyFirst:e=false}={}){const t=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(t,e?void 0:"g")}const uD=DD();function P$1(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(uD,"")}function L$1(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var W$1={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(F){var s=F.charCodeAt(0),i=F.length==2?F.charCodeAt(1):0,D=s;return 55296<=s&&s<=56319&&56320<=i&&i<=57343&&(s&=1023,i&=1023,D=s<<10|i,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(F){var s=this.eastAsianWidth(F);return s=="F"||s=="W"||s=="A"?2:1};function t(F){return F.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(F){for(var s=t(F),i=0,D=0;D<s.length;D++)i=i+this.characterLength(s[D]);return i},u.slice=function(F,s,i){textLen=u.length(F),s=s||0,i=i||1,s<0&&(s=textLen+s),i<0&&(i=textLen+i);for(var D="",C=0,n=t(F),E=0;E<n.length;E++){var a=n[E],o=u.length(a);if(C>=s-(o==2?1:0))if(C+o<=i)D+=a;else break;C+=o;}return D};})(W$1);var tD=W$1.exports;const eD=L$1(tD);var FD=function(){return /\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g};const sD=L$1(FD);function p(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:true,...u},e=P$1(e),e.length===0))return 0;e=e.replace(sD()," ");const t=u.ambiguousIsNarrow?1:2;let F=0;for(const s of e){const i=s.codePointAt(0);if(i<=31||i>=127&&i<=159||i>=768&&i<=879)continue;switch(eD.eastAsianWidth(s)){case "F":case "W":F+=2;break;case "A":F+=t;break;default:F+=1;}}return F}const w=10,N=(e=0)=>u=>`\x1B[${u+e}m`,I=(e=0)=>u=>`\x1B[${38+e};5;${u}m`,R=(e=0)=>(u,t,F)=>`\x1B[${38+e};2;${u};${t};${F}m`,r={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(r.modifier);const iD=Object.keys(r.color),CD=Object.keys(r.bgColor);[...iD,...CD];function rD(){const e=new Map;for(const[u,t]of Object.entries(r)){for(const[F,s]of Object.entries(t))r[F]={open:`\x1B[${s[0]}m`,close:`\x1B[${s[1]}m`},t[F]=r[F],e.set(s[0],s[1]);Object.defineProperty(r,u,{value:t,enumerable:false});}return Object.defineProperty(r,"codes",{value:e,enumerable:false}),r.color.close="\x1B[39m",r.bgColor.close="\x1B[49m",r.color.ansi=N(),r.color.ansi256=I(),r.color.ansi16m=R(),r.bgColor.ansi=N(w),r.bgColor.ansi256=I(w),r.bgColor.ansi16m=R(w),Object.defineProperties(r,{rgbToAnsi256:{value:(u,t,F)=>u===t&&t===F?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(F/255*5),enumerable:false},hexToRgb:{value:u=>{const t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!t)return [0,0,0];let[F]=t;F.length===3&&(F=[...F].map(i=>i+i).join(""));const s=Number.parseInt(F,16);return [s>>16&255,s>>8&255,s&255]},enumerable:false},hexToAnsi256:{value:u=>r.rgbToAnsi256(...r.hexToRgb(u)),enumerable:false},ansi256ToAnsi:{value:u=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,F,s;if(u>=232)t=((u-232)*10+8)/255,F=t,s=t;else {u-=16;const C=u%36;t=Math.floor(u/36)/5,F=Math.floor(C/6)/5,s=C%6/5;}const i=Math.max(t,F,s)*2;if(i===0)return 30;let D=30+(Math.round(s)<<2|Math.round(F)<<1|Math.round(t));return i===2&&(D+=60),D},enumerable:false},rgbToAnsi:{value:(u,t,F)=>r.ansi256ToAnsi(r.rgbToAnsi256(u,t,F)),enumerable:false},hexToAnsi:{value:u=>r.ansi256ToAnsi(r.hexToAnsi256(u)),enumerable:false}}),r}const ED=rD(),d$1=new Set(["\x1B","\x9B"]),oD=39,y="\x07",V$1="[",nD="]",G$1="m",_$1=`${nD}8;;`,z=e=>`${d$1.values().next().value}${V$1}${e}${G$1}`,K$1=e=>`${d$1.values().next().value}${_$1}${e}${y}`,aD=e=>e.split(" ").map(u=>p(u)),k$1=(e,u,t)=>{const F=[...u];let s=false,i=false,D=p(P$1(e[e.length-1]));for(const[C,n]of F.entries()){const E=p(n);if(D+E<=t?e[e.length-1]+=n:(e.push(n),D=0),d$1.has(n)&&(s=true,i=F.slice(C+1).join("").startsWith(_$1)),s){i?n===y&&(s=false,i=false):n===G$1&&(s=false);continue}D+=E,D===t&&C<F.length-1&&(e.push(""),D=0);}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop());},hD=e=>{const u=e.split(" ");let t=u.length;for(;t>0&&!(p(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(" ")+u.slice(t).join("")},lD=(e,u,t={})=>{if(t.trim!==false&&e.trim()==="")return "";let F="",s,i;const D=aD(e);let C=[""];for(const[E,a]of e.split(" ").entries()){t.trim!==false&&(C[C.length-1]=C[C.length-1].trimStart());let o=p(C[C.length-1]);if(E!==0&&(o>=u&&(t.wordWrap===false||t.trim===false)&&(C.push(""),o=0),(o>0||t.trim===false)&&(C[C.length-1]+=" ",o++)),t.hard&&D[E]>u){const c=u-o,f=1+Math.floor((D[E]-c-1)/u);Math.floor((D[E]-1)/u)<f&&C.push(""),k$1(C,a,u);continue}if(o+D[E]>u&&o>0&&D[E]>0){if(t.wordWrap===false&&o<u){k$1(C,a,u);continue}C.push("");}if(o+D[E]>u&&t.wordWrap===false){k$1(C,a,u);continue}C[C.length-1]+=a;}t.trim!==false&&(C=C.map(E=>hD(E)));const n=[...C.join(`
373
+ `)];for(const[E,a]of n.entries()){if(F+=a,d$1.has(a)){const{groups:c}=new RegExp(`(?:\\${V$1}(?<code>\\d+)m|\\${_$1}(?<uri>.*)${y})`).exec(n.slice(E).join(""))||{groups:{}};if(c.code!==void 0){const f=Number.parseFloat(c.code);s=f===oD?void 0:f;}else c.uri!==void 0&&(i=c.uri.length===0?void 0:c.uri);}const o=ED.codes.get(Number(s));n[E+1]===`
374
+ `?(i&&(F+=K$1("")),s&&o&&(F+=z(o))):a===`
375
+ `&&(s&&o&&(F+=z(s)),i&&(F+=K$1(i)));}return F};function Y$1(e,u,t){return String(e).normalize().replace(/\r\n/g,`
356
376
  `).split(`
357
- `).map(t=>oD(t,u,F)).join(`
358
- `)}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(`
359
- `),t=u.split(`
360
- `),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$1(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!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v$1(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$1(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v$1(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(`
361
- `),v$1(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(`
362
- `).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(`
363
- `);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(`
364
- `).slice(t);this.output.write(s.join(`
365
- `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}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();}}
366
-
367
- 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","+"),se=u("\u25CF","\u2022"),re=u("\u25C6","*"),ie=u("\u25B2","!"),ne=u("\u25A0","x"),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)}
368
- ${y(this.state)} ${s.message}
369
- `,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()}
370
- ${color2.yellow(a)} ${i}
371
- ${color2.yellow($)} ${color2.yellow(this.error)}
372
- `;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()?`
373
- `+color2.gray(a):""}`;default:return `${n}${color2.cyan(a)} ${i}
374
- ${color2.cyan($)}
375
- `}}}).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)}
376
- ${y(this.state)} ${s.message}
377
- `,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))}
378
- ${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}`}
379
- ${color2.cyan($)}
380
- `}}}).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)}
381
- ${y(this.state)} ${s.message}
382
- `;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")}
383
- ${color2.gray(a)}`;default:return `${t}${color2.cyan(a)} ${E({cursor:this.cursor,options:this.options,maxItems:s.maxItems,style:(i,r)=>n(i,r?"active":"inactive")}).join(`
384
- ${color2.cyan(a)} `)}
385
- ${color2.cyan($)}
386
- `}}}).prompt()},$e=s=>{const n=(t,i)=>{const r=t.label??String(t.value);return i==="active"?`${color2.cyan(j)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="selected"?`${color2.green(b)} ${color2.dim(r)}`:i==="cancelled"?`${color2.strikethrough(color2.dim(r))}`:i==="active-selected"?`${color2.green(b)} ${r} ${t.hint?color2.dim(`(${t.hint})`):""}`:i==="submitted"?`${color2.dim(r)}`:`${color2.dim(B)} ${color2.dim(r)}`};return new vD({options:s.options,initialValues:s.initialValues,required:s.required??true,cursorAt:s.cursorAt,validate(t){if(this.required&&t.length===0)return `Please select at least one option.
387
- ${color2.reset(color2.dim(`Press ${color2.gray(color2.bgWhite(color2.inverse(" space ")))} to select, ${color2.gray(color2.bgWhite(color2.inverse(" enter ")))} to submit`))}`},render(){let t=`${color2.gray(a)}
388
- ${y(this.state)} ${s.message}
389
- `;const i=(r,o)=>{const c=this.value.includes(r.value);return o&&c?n(r,"active-selected"):c?n(r,"selected"):n(r,o?"active":"inactive")};switch(this.state){case "submit":return `${t}${color2.gray(a)} ${this.options.filter(({value:r})=>this.value.includes(r)).map(r=>n(r,"submitted")).join(color2.dim(", "))||color2.dim("none")}`;case "cancel":{const r=this.options.filter(({value:o})=>this.value.includes(o)).map(o=>n(o,"cancelled")).join(color2.dim(", "));return `${t}${color2.gray(a)} ${r.trim()?`${r}
390
- ${color2.gray(a)}`:""}`}case "error":{const r=this.error.split(`
391
- `).map((o,c)=>c===0?`${color2.yellow($)} ${color2.yellow(o)}`:` ${o}`).join(`
392
- `);return t+color2.yellow(a)+" "+E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
393
- ${color2.yellow(a)} `)+`
394
- `+r+`
395
- `}default:return `${t}${color2.cyan(a)} ${E({options:this.options,cursor:this.cursor,maxItems:s.maxItems,style:i}).join(`
396
- ${color2.cyan(a)} `)}
397
- ${color2.cyan($)}
398
- `}}}).prompt()},R=s=>s.replace(ye(),""),me=(s="",n="")=>{const t=`
399
- ${s}
377
+ `).map(F=>lD(F,u,t)).join(`
378
+ `)}const xD=["up","down","left","right","space","enter","cancel"],B={actions:new Set(xD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["","cancel"],["escape","cancel"]])};function $(e,u){if(typeof e=="string")return B.aliases.get(e)===u;for(const t of e)if(t!==void 0&&$(t,u))return true;return false}function BD(e,u){if(e===u)return;const t=e.split(`
379
+ `),F=u.split(`
380
+ `),s=[];for(let i=0;i<Math.max(t.length,F.length);i++)t[i]!==F[i]&&s.push(i);return s}const AD=globalThis.process.platform.startsWith("win"),S=Symbol("clack:cancel");function pD(e){return e===S}function m(e,u){const t=e;t.isTTY&&t.setRawMode(u);}function fD({input:e=stdin,output:u=stdout,overwrite:t=true,hideCursor:F=true}={}){const s=g.createInterface({input:e,output:u,prompt:"",tabSize:1});g.emitKeypressEvents(e,s),e.isTTY&&e.setRawMode(true);const i=(D,{name:C,sequence:n})=>{const E=String(D);if($([E,C,n],"cancel")){F&&u.write(srcExports.cursor.show),process.exit(0);return}if(!t)return;const a=C==="return"?0:-1,o=C==="return"?-1:0;g.moveCursor(u,a,o,()=>{g.clearLine(u,1,()=>{e.once("keypress",i);});});};return F&&u.write(srcExports.cursor.hide),e.once("keypress",i),()=>{e.off("keypress",i),F&&u.write(srcExports.cursor.show),e.isTTY&&!AD&&e.setRawMode(false),s.terminal=false,s.close();}}var gD=Object.defineProperty,vD=(e,u,t)=>u in e?gD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,h=(e,u,t)=>(vD(e,typeof u!="symbol"?u+"":u,t),t);class x{constructor(u,t=true){h(this,"input"),h(this,"output"),h(this,"_abortSignal"),h(this,"rl"),h(this,"opts"),h(this,"_render"),h(this,"_track",false),h(this,"_prevFrame",""),h(this,"_subscribers",new Map),h(this,"_cursor",0),h(this,"state","initial"),h(this,"error",""),h(this,"value");const{input:F=stdin,output:s=stdout,render:i,signal:D,...C}=u;this.opts=C,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=i.bind(this),this._track=t,this._abortSignal=D,this.input=F,this.output=s;}unsubscribe(){this._subscribers.clear();}setSubscriber(u,t){const F=this._subscribers.get(u)??[];F.push(t),this._subscribers.set(u,F);}on(u,t){this.setSubscriber(u,{cb:t});}once(u,t){this.setSubscriber(u,{cb:t,once:true});}emit(u,...t){const F=this._subscribers.get(u)??[],s=[];for(const i of F)i.cb(...t),i.once&&s.push(()=>F.splice(F.indexOf(i),1));for(const i of s)i();}prompt(){return new Promise((u,t)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),u(S);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close();},{once:true});}const F=new Writable;F._write=(s,i,D)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),D();},this.input.pipe(F),this.rl=g__default.createInterface({input:this.input,output:F,tabSize:2,prompt:"",escapeCodeTimeout:50,terminal:true}),g__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),m(this.input,true),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),m(this.input,false),u(S);});})}onKeypress(u,t){if(this.state==="error"&&(this.state="active"),t?.name&&(!this._track&&B.aliases.has(t.name)&&this.emit("cursor",B.aliases.get(t.name)),B.actions.has(t.name)&&this.emit("cursor",t.name)),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),t?.name==="return"){if(this.opts.validate){const F=this.opts.validate(this.value);F&&(this.error=F instanceof Error?F.message:F,this.state="error",this.rl?.write(this.value));}this.state!=="error"&&(this.state="submit");}$([u,t?.name,t?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
381
+ `),m(this.input,false),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=Y$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
382
+ `).length-1;this.output.write(srcExports.cursor.move(-999,u*-1));}render(){const u=Y$1(this._render(this)??"",process.stdout.columns,{hard:true});if(u!==this._prevFrame){if(this.state==="initial")this.output.write(srcExports.cursor.hide);else {const t=BD(this._prevFrame,u);if(this.restoreCursor(),t&&t?.length===1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.lines(1));const s=u.split(`
383
+ `);this.output.write(s[F]),this._prevFrame=u,this.output.write(srcExports.cursor.move(0,s.length-F-1));return}if(t&&t?.length>1){const F=t[0];this.output.write(srcExports.cursor.move(0,F)),this.output.write(srcExports.erase.down());const s=u.split(`
384
+ `).slice(F);this.output.write(s.join(`
385
+ `)),this._prevFrame=u;return}this.output.write(srcExports.erase.down());}this.output.write(u),this.state==="initial"&&(this.state="active"),this._prevFrame=u;}}}var OD=Object.defineProperty,PD=(e,u,t)=>u in e?OD(e,u,{enumerable:true,configurable:true,writable:true,value:t}):e[u]=t,J=(e,u,t)=>(PD(e,typeof u!="symbol"?u+"":u,t),t);class LD extends x{constructor(u){super(u,false),J(this,"options"),J(this,"cursor",0),this.options=u.options,this.cursor=this.options.findIndex(({value:t})=>t===u.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",t=>{switch(t){case "left":case "up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case "down":case "right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue();});}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value;}}class RD extends x{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return `${this.value}\u2588`;const u=this.value.slice(0,this.cursor),[t,...F]=this.value.slice(this.cursor);return `${u}${color2.inverse(t)}${F.join("")}`}get cursor(){return this._cursor}constructor(u){super(u),this.on("finalize",()=>{this.value||(this.value=u.defaultValue);});}}
386
+
387
+ function ce(){return y$1.platform!=="win32"?y$1.env.TERM!=="linux":!!y$1.env.CI||!!y$1.env.WT_SESSION||!!y$1.env.TERMINUS_SUBLIME||y$1.env.ConEmuTask==="{cmd::Cmder}"||y$1.env.TERM_PROGRAM==="Terminus-Sublime"||y$1.env.TERM_PROGRAM==="vscode"||y$1.env.TERM==="xterm-256color"||y$1.env.TERM==="alacritty"||y$1.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const V=ce(),u=(t,n)=>V?t:n,le=u("\u25C6","*"),L=u("\u25A0","x"),W=u("\u25B2","x"),C=u("\u25C7","o"),ue=u("\u250C","T"),o=u("\u2502","|"),d=u("\u2514","\u2014"),k=u("\u25CF",">"),P=u("\u25CB"," "),_=u("\u2500","-"),me=u("\u256E","+"),de=u("\u251C","+"),pe=u("\u256F","+"),q=u("\u25CF","\u2022"),D=u("\u25C6","*"),U=u("\u25B2","!"),K=u("\u25A0","x"),b=t=>{switch(t){case "initial":case "active":return color2.cyan(le);case "cancel":return color2.red(L);case "error":return color2.yellow(W);case "submit":return color2.green(C)}},G=t=>{const{cursor:n,options:r,style:i}=t,s=t.maxItems??Number.POSITIVE_INFINITY,c=Math.max(process.stdout.rows-4,0),a=Math.min(c,Math.max(s,5));let l=0;n>=l+a-3?l=Math.max(Math.min(n-a+3,r.length-a),0):n<l+2&&(l=Math.max(n-2,0));const $=a<r.length&&l>0,g=a<r.length&&l+a<r.length;return r.slice(l,l+a).map((p,v,f)=>{const j=v===0&&$,E=v===f.length-1&&g;return j||E?color2.dim("..."):i(p,v+l===n)})},he=t=>new RD({validate:t.validate,placeholder:t.placeholder,defaultValue:t.defaultValue,initialValue:t.initialValue,render(){const n=`${color2.gray(o)}
388
+ ${b(this.state)} ${t.message}
389
+ `,r=t.placeholder?color2.inverse(t.placeholder[0])+color2.dim(t.placeholder.slice(1)):color2.inverse(color2.hidden("_")),i=this.value?this.valueWithCursor:r;switch(this.state){case "error":return `${n.trim()}
390
+ ${color2.yellow(o)} ${i}
391
+ ${color2.yellow(d)} ${color2.yellow(this.error)}
392
+ `;case "submit":return `${n}${color2.gray(o)} ${color2.dim(this.value||t.placeholder)}`;case "cancel":return `${n}${color2.gray(o)} ${color2.strikethrough(color2.dim(this.value??""))}${this.value?.trim()?`
393
+ ${color2.gray(o)}`:""}`;default:return `${n}${color2.cyan(o)} ${i}
394
+ ${color2.cyan(d)}
395
+ `}}}).prompt(),ve=t=>{const n=(r,i)=>{const s=r.label??String(r.value);switch(i){case "selected":return `${color2.dim(s)}`;case "active":return `${color2.green(k)} ${s} ${r.hint?color2.dim(`(${r.hint})`):""}`;case "cancelled":return `${color2.strikethrough(color2.dim(s))}`;default:return `${color2.dim(P)} ${color2.dim(s)}`}};return new LD({options:t.options,initialValue:t.initialValue,render(){const r=`${color2.gray(o)}
396
+ ${b(this.state)} ${t.message}
397
+ `;switch(this.state){case "submit":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"selected")}`;case "cancel":return `${r}${color2.gray(o)} ${n(this.options[this.cursor],"cancelled")}
398
+ ${color2.gray(o)}`;default:return `${r}${color2.cyan(o)} ${G({cursor:this.cursor,options:this.options,maxItems:t.maxItems,style:(i,s)=>n(i,s?"active":"inactive")}).join(`
399
+ ${color2.cyan(o)} `)}
400
+ ${color2.cyan(d)}
401
+ `}}}).prompt()},Me=(t="",n="")=>{const r=`
402
+ ${t}
400
403
  `.split(`
401
- `),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(`
402
- `);process.stdout.write(`${color2.gray(a)}
403
- ${color2.green(M)} ${color2.reset(n)} ${color2.gray(G.repeat(Math.max(r-i-1,1))+H)}
404
- ${o}
405
- ${color2.gray(ee+G.repeat(r+2)+te)}
406
- `);},he=(s="")=>{process.stdout.write(`${color2.gray($)} ${color2.red(s)}
407
-
408
- `);},pe=(s="")=>{process.stdout.write(`${color2.gray(Q)} ${s}
409
- `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
410
- ${color2.gray($)} ${s}
411
-
412
- `);},v={message:(s="",{symbol:n=color2.gray(a)}={})=>{const t=[`${color2.gray(a)}`];if(s){const[i,...r]=s.split(`
413
- `);t.push(`${n} ${i}`,...r.map(o=>`${color2.gray(a)} ${o}`));}process.stdout.write(`${t.join(`
404
+ `),i=stripVTControlCharacters(n).length,s=Math.max(r.reduce((a,l)=>{const $=stripVTControlCharacters(l);return $.length>a?$.length:a},0),i)+2,c=r.map(a=>`${color2.gray(o)} ${color2.dim(a)}${" ".repeat(s-stripVTControlCharacters(a).length)}${color2.gray(o)}`).join(`
405
+ `);process.stdout.write(`${color2.gray(o)}
406
+ ${color2.green(C)} ${color2.reset(n)} ${color2.gray(_.repeat(Math.max(s-i-1,1))+me)}
407
+ ${c}
408
+ ${color2.gray(de+_.repeat(s+2)+pe)}
409
+ `);},xe=(t="")=>{process.stdout.write(`${color2.gray(d)} ${color2.red(t)}
410
+
411
+ `);},Ie=(t="")=>{process.stdout.write(`${color2.gray(ue)} ${t}
412
+ `);},Se=(t="")=>{process.stdout.write(`${color2.gray(o)}
413
+ ${color2.gray(d)} ${t}
414
+
415
+ `);},M={message:(t="",{symbol:n=color2.gray(o)}={})=>{const r=[`${color2.gray(o)}`];if(t){const[i,...s]=t.split(`
416
+ `);r.push(`${n} ${i}`,...s.map(c=>`${color2.gray(o)} ${c}`));}process.stdout.write(`${r.join(`
414
417
  `)}
415
- `);},info:s=>{v.message(s,{symbol:color2.blue(se)});},success:s=>{v.message(s,{symbol:color2.green(re)});},step:s=>{v.message(s,{symbol:color2.green(M)});},warn:s=>{v.message(s,{symbol:color2.yellow(ie)});},warning:s=>{v.warn(s);},error:s=>{v.message(s,{symbol:color2.red(ne)});}},_=()=>{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)}
416
- `);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}
417
- `),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};
418
+ `);},info:t=>{M.message(t,{symbol:color2.blue(q)});},success:t=>{M.message(t,{symbol:color2.green(D)});},step:t=>{M.message(t,{symbol:color2.green(C)});},warn:t=>{M.message(t,{symbol:color2.yellow(U)});},warning:t=>{M.warn(t);},error:t=>{M.message(t,{symbol:color2.red(K)});}};`${color2.gray(o)} `;const Y=({indicator:t="dots"}={})=>{const n=V?["\u25D2","\u25D0","\u25D3","\u25D1"]:["\u2022","o","O","0"],r=V?80:120,i=process.env.CI==="true";let s,c,a=false,l="",$,g=performance.now();const p=m=>{const h=m>1?"Something went wrong":"Canceled";a&&N(h,m);},v=()=>p(2),f=()=>p(1),j=()=>{process.on("uncaughtExceptionMonitor",v),process.on("unhandledRejection",v),process.on("SIGINT",f),process.on("SIGTERM",f),process.on("exit",p);},E=()=>{process.removeListener("uncaughtExceptionMonitor",v),process.removeListener("unhandledRejection",v),process.removeListener("SIGINT",f),process.removeListener("SIGTERM",f),process.removeListener("exit",p);},B=()=>{if($===void 0)return;i&&process.stdout.write(`
419
+ `);const m=$.split(`
420
+ `);process.stdout.write(srcExports.cursor.move(-999,m.length-1)),process.stdout.write(srcExports.erase.down(m.length));},R=m=>m.replace(/\.+$/,""),O=m=>{const h=(performance.now()-m)/1e3,w=Math.floor(h/60),I=Math.floor(h%60);return w>0?`[${w}m ${I}s]`:`[${I}s]`},H=(m="")=>{a=true,s=fD(),l=R(m),g=performance.now(),process.stdout.write(`${color2.gray(o)}
421
+ `);let h=0,w=0;j(),c=setInterval(()=>{if(i&&l===$)return;B(),$=l;const I=color2.magenta(n[h]);if(i)process.stdout.write(`${I} ${l}...`);else if(t==="timer")process.stdout.write(`${I} ${l} ${O(g)}`);else {const z=".".repeat(Math.floor(w)).slice(0,3);process.stdout.write(`${I} ${l}${z}`);}h=h+1<n.length?h+1:0,w=w<n.length?w+.125:0;},r);},N=(m="",h=0)=>{a=false,clearInterval(c),B();const w=h===0?color2.green(C):h===1?color2.red(L):color2.red(W);l=R(m??l),t==="timer"?process.stdout.write(`${w} ${l} ${O(g)}
422
+ `):process.stdout.write(`${w} ${l}
423
+ `),E(),s();};return {start:H,stop:N,message:(m="")=>{l=R(m??l);}}},Ce=async(t,n)=>{const r={},i=Object.keys(t);for(const s of i){const c=t[s],a=await c({results:r})?.catch(l=>{throw l});if(typeof n?.onCancel=="function"&&pD(a)){r[s]="canceled",n.onCancel({results:r});continue}r[s]=a;}return r};
424
+
425
+ var shellQuote$1 = {};
426
+
427
+ var quote;
428
+ var hasRequiredQuote;
429
+
430
+ function requireQuote () {
431
+ if (hasRequiredQuote) return quote;
432
+ hasRequiredQuote = 1;
433
+
434
+ quote = function quote(xs) {
435
+ return xs.map(function (s) {
436
+ if (s === '') {
437
+ return '\'\'';
438
+ }
439
+ if (s && typeof s === 'object') {
440
+ return s.op.replace(/(.)/g, '\\$1');
441
+ }
442
+ if ((/["\s\\]/).test(s) && !(/'/).test(s)) {
443
+ return "'" + s.replace(/(['])/g, '\\$1') + "'";
444
+ }
445
+ if ((/["'\s]/).test(s)) {
446
+ return '"' + s.replace(/(["\\$`!])/g, '\\$1') + '"';
447
+ }
448
+ return String(s).replace(/([A-Za-z]:)?([#!"$&'()*,:;<=>?@[\\\]^`{|}])/g, '$1\\$2');
449
+ }).join(' ');
450
+ };
451
+ return quote;
452
+ }
453
+
454
+ var parse;
455
+ var hasRequiredParse;
456
+
457
+ function requireParse () {
458
+ if (hasRequiredParse) return parse;
459
+ hasRequiredParse = 1;
460
+
461
+ // '<(' is process substitution operator and
462
+ // can be parsed the same as control operator
463
+ var CONTROL = '(?:' + [
464
+ '\\|\\|',
465
+ '\\&\\&',
466
+ ';;',
467
+ '\\|\\&',
468
+ '\\<\\(',
469
+ '\\<\\<\\<',
470
+ '>>',
471
+ '>\\&',
472
+ '<\\&',
473
+ '[&;()|<>]'
474
+ ].join('|') + ')';
475
+ var controlRE = new RegExp('^' + CONTROL + '$');
476
+ var META = '|&;()<> \\t';
477
+ var SINGLE_QUOTE = '"((\\\\"|[^"])*?)"';
478
+ var DOUBLE_QUOTE = '\'((\\\\\'|[^\'])*?)\'';
479
+ var hash = /^#$/;
480
+
481
+ var SQ = "'";
482
+ var DQ = '"';
483
+ var DS = '$';
484
+
485
+ var TOKEN = '';
486
+ var mult = 0x100000000; // Math.pow(16, 8);
487
+ for (var i = 0; i < 4; i++) {
488
+ TOKEN += (mult * Math.random()).toString(16);
489
+ }
490
+ var startsWithToken = new RegExp('^' + TOKEN);
491
+
492
+ function matchAll(s, r) {
493
+ var origIndex = r.lastIndex;
494
+
495
+ var matches = [];
496
+ var matchObj;
497
+
498
+ while ((matchObj = r.exec(s))) {
499
+ matches.push(matchObj);
500
+ if (r.lastIndex === matchObj.index) {
501
+ r.lastIndex += 1;
502
+ }
503
+ }
504
+
505
+ r.lastIndex = origIndex;
506
+
507
+ return matches;
508
+ }
509
+
510
+ function getVar(env, pre, key) {
511
+ var r = typeof env === 'function' ? env(key) : env[key];
512
+ if (typeof r === 'undefined' && key != '') {
513
+ r = '';
514
+ } else if (typeof r === 'undefined') {
515
+ r = '$';
516
+ }
517
+
518
+ if (typeof r === 'object') {
519
+ return pre + TOKEN + JSON.stringify(r) + TOKEN;
520
+ }
521
+ return pre + r;
522
+ }
523
+
524
+ function parseInternal(string, env, opts) {
525
+ if (!opts) {
526
+ opts = {};
527
+ }
528
+ var BS = opts.escape || '\\';
529
+ var BAREWORD = '(\\' + BS + '[\'"' + META + ']|[^\\s\'"' + META + '])+';
530
+
531
+ var chunker = new RegExp([
532
+ '(' + CONTROL + ')', // control chars
533
+ '(' + BAREWORD + '|' + SINGLE_QUOTE + '|' + DOUBLE_QUOTE + ')+'
534
+ ].join('|'), 'g');
535
+
536
+ var matches = matchAll(string, chunker);
537
+
538
+ if (matches.length === 0) {
539
+ return [];
540
+ }
541
+ if (!env) {
542
+ env = {};
543
+ }
544
+
545
+ var commented = false;
546
+
547
+ return matches.map(function (match) {
548
+ var s = match[0];
549
+ if (!s || commented) {
550
+ return void undefined;
551
+ }
552
+ if (controlRE.test(s)) {
553
+ return { op: s };
554
+ }
555
+
556
+ // Hand-written scanner/parser for Bash quoting rules:
557
+ //
558
+ // 1. inside single quotes, all characters are printed literally.
559
+ // 2. inside double quotes, all characters are printed literally
560
+ // except variables prefixed by '$' and backslashes followed by
561
+ // either a double quote or another backslash.
562
+ // 3. outside of any quotes, backslashes are treated as escape
563
+ // characters and not printed (unless they are themselves escaped)
564
+ // 4. quote context can switch mid-token if there is no whitespace
565
+ // between the two quote contexts (e.g. all'one'"token" parses as
566
+ // "allonetoken")
567
+ var quote = false;
568
+ var esc = false;
569
+ var out = '';
570
+ var isGlob = false;
571
+ var i;
572
+
573
+ function parseEnvVar() {
574
+ i += 1;
575
+ var varend;
576
+ var varname;
577
+ var char = s.charAt(i);
578
+
579
+ if (char === '{') {
580
+ i += 1;
581
+ if (s.charAt(i) === '}') {
582
+ throw new Error('Bad substitution: ' + s.slice(i - 2, i + 1));
583
+ }
584
+ varend = s.indexOf('}', i);
585
+ if (varend < 0) {
586
+ throw new Error('Bad substitution: ' + s.slice(i));
587
+ }
588
+ varname = s.slice(i, varend);
589
+ i = varend;
590
+ } else if ((/[*@#?$!_-]/).test(char)) {
591
+ varname = char;
592
+ i += 1;
593
+ } else {
594
+ var slicedFromI = s.slice(i);
595
+ varend = slicedFromI.match(/[^\w\d_]/);
596
+ if (!varend) {
597
+ varname = slicedFromI;
598
+ i = s.length;
599
+ } else {
600
+ varname = slicedFromI.slice(0, varend.index);
601
+ i += varend.index - 1;
602
+ }
603
+ }
604
+ return getVar(env, '', varname);
605
+ }
606
+
607
+ for (i = 0; i < s.length; i++) {
608
+ var c = s.charAt(i);
609
+ isGlob = isGlob || (!quote && (c === '*' || c === '?'));
610
+ if (esc) {
611
+ out += c;
612
+ esc = false;
613
+ } else if (quote) {
614
+ if (c === quote) {
615
+ quote = false;
616
+ } else if (quote == SQ) {
617
+ out += c;
618
+ } else { // Double quote
619
+ if (c === BS) {
620
+ i += 1;
621
+ c = s.charAt(i);
622
+ if (c === DQ || c === BS || c === DS) {
623
+ out += c;
624
+ } else {
625
+ out += BS + c;
626
+ }
627
+ } else if (c === DS) {
628
+ out += parseEnvVar();
629
+ } else {
630
+ out += c;
631
+ }
632
+ }
633
+ } else if (c === DQ || c === SQ) {
634
+ quote = c;
635
+ } else if (controlRE.test(c)) {
636
+ return { op: s };
637
+ } else if (hash.test(c)) {
638
+ commented = true;
639
+ var commentObj = { comment: string.slice(match.index + i + 1) };
640
+ if (out.length) {
641
+ return [out, commentObj];
642
+ }
643
+ return [commentObj];
644
+ } else if (c === BS) {
645
+ esc = true;
646
+ } else if (c === DS) {
647
+ out += parseEnvVar();
648
+ } else {
649
+ out += c;
650
+ }
651
+ }
652
+
653
+ if (isGlob) {
654
+ return { op: 'glob', pattern: out };
655
+ }
656
+
657
+ return out;
658
+ }).reduce(function (prev, arg) { // finalize parsed arguments
659
+ // TODO: replace this whole reduce with a concat
660
+ return typeof arg === 'undefined' ? prev : prev.concat(arg);
661
+ }, []);
662
+ }
663
+
664
+ parse = function parse(s, env, opts) {
665
+ var mapped = parseInternal(s, env, opts);
666
+ if (typeof env !== 'function') {
667
+ return mapped;
668
+ }
669
+ return mapped.reduce(function (acc, s) {
670
+ if (typeof s === 'object') {
671
+ return acc.concat(s);
672
+ }
673
+ var xs = s.split(RegExp('(' + TOKEN + '.*?' + TOKEN + ')', 'g'));
674
+ if (xs.length === 1) {
675
+ return acc.concat(xs[0]);
676
+ }
677
+ return acc.concat(xs.filter(Boolean).map(function (x) {
678
+ if (startsWithToken.test(x)) {
679
+ return JSON.parse(x.split(TOKEN)[1]);
680
+ }
681
+ return x;
682
+ }));
683
+ }, []);
684
+ };
685
+ return parse;
686
+ }
687
+
688
+ var hasRequiredShellQuote;
689
+
690
+ function requireShellQuote () {
691
+ if (hasRequiredShellQuote) return shellQuote$1;
692
+ hasRequiredShellQuote = 1;
693
+
694
+ shellQuote$1.quote = requireQuote();
695
+ shellQuote$1.parse = requireParse();
696
+ return shellQuote$1;
697
+ }
698
+
699
+ var shellQuoteExports = requireShellQuote();
700
+ var shellQuote = /*@__PURE__*/getDefaultExportFromCjs(shellQuoteExports);
418
701
 
419
702
  // eslint-disable-next-line no-warning-comments
420
703
  // TODO: Use a better method when it's added to Node.js (https://github.com/nodejs/node/pull/40240)
@@ -549,18 +832,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
549
832
  yellowBright: yellowBright
550
833
  });
551
834
 
552
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
835
+ const isUnicodeSupported = y$1.platform !== 'win32'
836
+ || Boolean(y$1.env.WT_SESSION) // Windows Terminal
837
+ || y$1.env.TERM_PROGRAM === 'vscode';
553
838
 
554
839
  const isInteractive = stream => Boolean(
555
840
  stream.isTTY
556
- && h.env.TERM !== 'dumb'
557
- && !('CI' in h.env),
841
+ && y$1.env.TERM !== 'dumb'
842
+ && !('CI' in y$1.env),
558
843
  );
559
844
 
560
845
  const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
561
846
  const successSymbol = green(isUnicodeSupported ? '✔' : '√');
562
847
  const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
563
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
848
+ const errorSymbol = red(isUnicodeSupported ? '' : '×');
564
849
 
565
850
  const defaultSpinner = {
566
851
  frames: isUnicodeSupported
@@ -603,7 +888,7 @@ class YoctoSpinner {
603
888
  this.#frames = spinner.frames;
604
889
  this.#interval = spinner.interval;
605
890
  this.#text = options.text ?? '';
606
- this.#stream = options.stream ?? h.stderr;
891
+ this.#stream = options.stream ?? y$1.stderr;
607
892
  this.#color = options.color ?? 'cyan';
608
893
  this.#isInteractive = isInteractive(this.#stream);
609
894
  this.#exitHandlerBound = this.#exitHandler.bind(this);
@@ -675,8 +960,8 @@ class YoctoSpinner {
675
960
  return this.#text;
676
961
  }
677
962
 
678
- set text(value = '') {
679
- this.#text = value;
963
+ set text(value) {
964
+ this.#text = value ?? '';
680
965
  this.#render();
681
966
  }
682
967
 
@@ -740,7 +1025,7 @@ class YoctoSpinner {
740
1025
 
741
1026
  #lineCount(text) {
742
1027
  const width = this.#stream.columns ?? 80;
743
- const lines = text.split('\n');
1028
+ const lines = stripVTControlCharacters(text).split('\n');
744
1029
 
745
1030
  let lineCount = 0;
746
1031
  for (const line of lines) {
@@ -763,13 +1048,13 @@ class YoctoSpinner {
763
1048
  }
764
1049
 
765
1050
  #subscribeToProcessEvents() {
766
- h.once('SIGINT', this.#exitHandlerBound);
767
- h.once('SIGTERM', this.#exitHandlerBound);
1051
+ y$1.once('SIGINT', this.#exitHandlerBound);
1052
+ y$1.once('SIGTERM', this.#exitHandlerBound);
768
1053
  }
769
1054
 
770
1055
  #unsubscribeFromProcessEvents() {
771
- h.off('SIGINT', this.#exitHandlerBound);
772
- h.off('SIGTERM', this.#exitHandlerBound);
1056
+ y$1.off('SIGINT', this.#exitHandlerBound);
1057
+ y$1.off('SIGTERM', this.#exitHandlerBound);
773
1058
  }
774
1059
 
775
1060
  #exitHandler(signal) {
@@ -780,7 +1065,7 @@ class YoctoSpinner {
780
1065
  // SIGINT: 128 + 2
781
1066
  // SIGTERM: 128 + 15
782
1067
  const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
783
- h.exit(exitCode);
1068
+ y$1.exit(exitCode);
784
1069
  }
785
1070
  }
786
1071
 
@@ -789,46 +1074,86 @@ function yoctoSpinner(options) {
789
1074
  }
790
1075
 
791
1076
  var LogLevel = {
792
- INFO: "info"};
793
- var Logger = class {
794
- logger;
1077
+ INFO: "info",
1078
+ ERROR: "error"};
1079
+ var MastraLogger = class {
1080
+ name;
1081
+ level;
795
1082
  transports;
796
1083
  constructor(options = {}) {
797
- this.transports = options.transports || {};
798
- const transportsAry = Object.entries(this.transports);
799
- this.logger = pino(
800
- {
801
- name: options.name || "app",
802
- level: options.level || LogLevel.INFO,
803
- formatters: {
804
- level: (label) => {
805
- return {
806
- level: label
807
- };
808
- }
809
- }
810
- },
811
- options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? pretty({
1084
+ this.name = options.name || "Mastra";
1085
+ this.level = options.level || LogLevel.ERROR;
1086
+ this.transports = new Map(Object.entries(options.transports || {}));
1087
+ }
1088
+ getTransports() {
1089
+ return this.transports;
1090
+ }
1091
+ trackException(_error) {
1092
+ }
1093
+ async getLogs(transportId, params) {
1094
+ if (!transportId || !this.transports.has(transportId)) {
1095
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
1096
+ }
1097
+ return this.transports.get(transportId).getLogs(params) ?? {
1098
+ logs: [],
1099
+ total: 0,
1100
+ page: params?.page ?? 1,
1101
+ perPage: params?.perPage ?? 100,
1102
+ hasMore: false
1103
+ };
1104
+ }
1105
+ async getLogsByRunId({
1106
+ transportId,
1107
+ runId,
1108
+ fromDate,
1109
+ toDate,
1110
+ logLevel,
1111
+ filters,
1112
+ page,
1113
+ perPage
1114
+ }) {
1115
+ if (!transportId || !this.transports.has(transportId) || !runId) {
1116
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
1117
+ }
1118
+ return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
1119
+ logs: [],
1120
+ total: 0,
1121
+ page: page ?? 1,
1122
+ perPage: perPage ?? 100,
1123
+ hasMore: false
1124
+ };
1125
+ }
1126
+ };
1127
+
1128
+ var PinoLogger = class extends MastraLogger {
1129
+ logger;
1130
+ constructor(options = {}) {
1131
+ super(options);
1132
+ let prettyStream = void 0;
1133
+ if (!options.overrideDefaultTransports) {
1134
+ prettyStream = pretty({
812
1135
  colorize: true,
813
1136
  levelFirst: true,
814
1137
  ignore: "pid,hostname",
815
1138
  colorizeObjects: true,
816
1139
  translateTime: "SYS:standard",
817
1140
  singleLine: false
818
- }) : pino.multistream([
1141
+ });
1142
+ }
1143
+ const transportsAry = [...this.getTransports().entries()];
1144
+ this.logger = pino(
1145
+ {
1146
+ name: options.name || "app",
1147
+ level: options.level || LogLevel.INFO,
1148
+ formatters: options.formatters
1149
+ },
1150
+ options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
819
1151
  ...transportsAry.map(([, transport]) => ({
820
1152
  stream: transport,
821
1153
  level: options.level || LogLevel.INFO
822
1154
  })),
823
1155
  {
824
- stream: pretty({
825
- colorize: true,
826
- levelFirst: true,
827
- ignore: "pid,hostname",
828
- colorizeObjects: true,
829
- translateTime: "SYS:standard",
830
- singleLine: false
831
- }),
1156
+ stream: prettyStream,
832
1157
  level: options.level || LogLevel.INFO
833
1158
  }
834
1159
  ])
@@ -846,32 +1171,197 @@ var Logger = class {
846
1171
  error(message, args = {}) {
847
1172
  this.logger.error(args, message);
848
1173
  }
849
- // Stream creation for process output handling
850
- createStream() {
851
- return new Transform({
852
- transform: (chunk, _encoding, callback) => {
853
- const line = chunk.toString().trim();
854
- if (line) {
855
- this.info(line);
856
- }
857
- callback(null, chunk);
1174
+ };
1175
+
1176
+ function getPackageManager() {
1177
+ const userAgent = process.env.npm_config_user_agent || "";
1178
+ const execPath = process.env.npm_execpath || "";
1179
+ if (userAgent.includes("yarn")) {
1180
+ return "yarn";
1181
+ }
1182
+ if (userAgent.includes("pnpm")) {
1183
+ return "pnpm";
1184
+ }
1185
+ if (userAgent.includes("npm")) {
1186
+ return "npm";
1187
+ }
1188
+ if (execPath.includes("yarn")) {
1189
+ return "yarn";
1190
+ }
1191
+ if (execPath.includes("pnpm")) {
1192
+ return "pnpm";
1193
+ }
1194
+ if (execPath.includes("npm")) {
1195
+ return "npm";
1196
+ }
1197
+ return "npm";
1198
+ }
1199
+ function getPackageManagerInstallCommand(pm) {
1200
+ switch (pm) {
1201
+ case "npm":
1202
+ return "install";
1203
+ case "yarn":
1204
+ return "add";
1205
+ case "pnpm":
1206
+ return "add";
1207
+ default:
1208
+ return "install";
1209
+ }
1210
+ }
1211
+ var logger = new PinoLogger({
1212
+ name: "Mastra CLI",
1213
+ level: "info"
1214
+ });
1215
+ var exec = util.promisify(child_process.exec);
1216
+ async function cloneTemplate(options) {
1217
+ const { template, projectName, targetDir } = options;
1218
+ const projectPath = targetDir ? path3.resolve(targetDir, projectName) : path3.resolve(projectName);
1219
+ const spinner5 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
1220
+ try {
1221
+ if (await directoryExists(projectPath)) {
1222
+ spinner5.error(`Directory ${projectName} already exists`);
1223
+ throw new Error(`Directory ${projectName} already exists`);
1224
+ }
1225
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
1226
+ await updatePackageJson(projectPath, projectName);
1227
+ const envExamplePath = path3.join(projectPath, ".env.example");
1228
+ if (await fileExists(envExamplePath)) {
1229
+ await fs.copyFile(envExamplePath, path3.join(projectPath, ".env"));
1230
+ }
1231
+ spinner5.success(`Template "${template.title}" cloned successfully to ${projectName}`);
1232
+ return projectPath;
1233
+ } catch (error) {
1234
+ spinner5.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
1235
+ throw error;
1236
+ }
1237
+ }
1238
+ async function directoryExists(dirPath) {
1239
+ try {
1240
+ const stat = await fs.stat(dirPath);
1241
+ return stat.isDirectory();
1242
+ } catch {
1243
+ return false;
1244
+ }
1245
+ }
1246
+ async function fileExists(filePath) {
1247
+ try {
1248
+ const stat = await fs.stat(filePath);
1249
+ return stat.isFile();
1250
+ } catch {
1251
+ return false;
1252
+ }
1253
+ }
1254
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
1255
+ await fs.mkdir(targetPath, { recursive: true });
1256
+ try {
1257
+ const degitRepo = repoUrl.replace("https://github.com/", "");
1258
+ const degitCommand = shellQuote.quote(["npx", "degit", degitRepo, targetPath]);
1259
+ await exec(degitCommand, {
1260
+ cwd: process.cwd()
1261
+ });
1262
+ } catch {
1263
+ try {
1264
+ const gitCommand = shellQuote.quote(["git", "clone", repoUrl, targetPath]);
1265
+ await exec(gitCommand, {
1266
+ cwd: process.cwd()
1267
+ });
1268
+ const gitDir = path3.join(targetPath, ".git");
1269
+ if (await directoryExists(gitDir)) {
1270
+ await fs.rm(gitDir, { recursive: true, force: true });
858
1271
  }
1272
+ } catch (gitError) {
1273
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
1274
+ }
1275
+ }
1276
+ }
1277
+ async function updatePackageJson(projectPath, projectName) {
1278
+ const packageJsonPath = path3.join(projectPath, "package.json");
1279
+ try {
1280
+ const packageJsonContent = await fs.readFile(packageJsonPath, "utf-8");
1281
+ const packageJson = JSON.parse(packageJsonContent);
1282
+ packageJson.name = projectName;
1283
+ await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
1284
+ } catch (error) {
1285
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
1286
+ }
1287
+ }
1288
+ async function installDependencies(projectPath, packageManager) {
1289
+ const spinner5 = yoctoSpinner({ text: "Installing dependencies..." }).start();
1290
+ try {
1291
+ const pm = packageManager || getPackageManager();
1292
+ const installCommand = shellQuote.quote([pm, "install"]);
1293
+ await exec(installCommand, {
1294
+ cwd: projectPath
859
1295
  });
1296
+ spinner5.success("Dependencies installed successfully");
1297
+ } catch (error) {
1298
+ spinner5.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
1299
+ throw error;
860
1300
  }
861
- async getLogs(transportId) {
862
- if (!transportId || !this.transports[transportId]) {
863
- return [];
1301
+ }
1302
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
1303
+ async function loadTemplates() {
1304
+ try {
1305
+ const response = await fetch(TEMPLATES_API_URL);
1306
+ if (!response.ok) {
1307
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
864
1308
  }
865
- return this.transports[transportId].getLogs();
1309
+ const templates = await response.json();
1310
+ return templates;
1311
+ } catch (error) {
1312
+ console.error("Error loading templates:", error);
1313
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
866
1314
  }
867
- async getLogsByRunId({ runId, transportId }) {
868
- return this.transports[transportId]?.getLogsByRunId({ runId });
1315
+ }
1316
+ function pluralize(count, singular, plural) {
1317
+ return count === 1 ? singular : plural || `${singular}s`;
1318
+ }
1319
+ async function selectTemplate(templates) {
1320
+ const choices = templates.map((template) => {
1321
+ const parts = [];
1322
+ if (template.agents?.length) {
1323
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
1324
+ }
1325
+ if (template.tools?.length) {
1326
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
1327
+ }
1328
+ if (template.workflows?.length) {
1329
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
1330
+ }
1331
+ if (template.mcp?.length) {
1332
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
1333
+ }
1334
+ if (template.networks?.length) {
1335
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
1336
+ }
1337
+ return {
1338
+ value: template,
1339
+ label: template.title,
1340
+ hint: parts.join(", ") || "Template components"
1341
+ };
1342
+ });
1343
+ const selected = await ve({
1344
+ message: "Select a template:",
1345
+ options: choices
1346
+ });
1347
+ if (pD(selected)) {
1348
+ return null;
869
1349
  }
870
- };
871
- function createLogger(options) {
872
- return new Logger(options);
1350
+ return selected;
1351
+ }
1352
+ function findTemplateByName(templates, templateName) {
1353
+ let template = templates.find((t) => t.slug === templateName);
1354
+ if (template) return template;
1355
+ const slugWithPrefix = `template-${templateName}`;
1356
+ template = templates.find((t) => t.slug === slugWithPrefix);
1357
+ if (template) return template;
1358
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
1359
+ if (template) return template;
1360
+ return null;
1361
+ }
1362
+ function getDefaultProjectName(template) {
1363
+ return template.slug.replace(/^template-/, "");
873
1364
  }
874
-
875
1365
  var DepsService = class {
876
1366
  packageManager;
877
1367
  constructor() {
@@ -880,11 +1370,11 @@ var DepsService = class {
880
1370
  findLockFile(dir) {
881
1371
  const lockFiles = ["pnpm-lock.yaml", "package-lock.json", "yarn.lock", "bun.lock"];
882
1372
  for (const file of lockFiles) {
883
- if (fs3__default__default.existsSync(path.join(dir, file))) {
1373
+ if (fs4__default__default.existsSync(path3.join(dir, file))) {
884
1374
  return file;
885
1375
  }
886
1376
  }
887
- const parentDir = path.resolve(dir, "..");
1377
+ const parentDir = path3.resolve(dir, "..");
888
1378
  if (parentDir !== dir) {
889
1379
  return this.findLockFile(parentDir);
890
1380
  }
@@ -921,13 +1411,13 @@ var DepsService = class {
921
1411
  }
922
1412
  async checkDependencies(dependencies) {
923
1413
  try {
924
- const packageJsonPath = path.join(process.cwd(), "package.json");
1414
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
925
1415
  try {
926
- await fs4.access(packageJsonPath);
1416
+ await fs.access(packageJsonPath);
927
1417
  } catch {
928
1418
  return "No package.json file found in the current directory";
929
1419
  }
930
- const packageJson = JSON.parse(await fs4.readFile(packageJsonPath, "utf-8"));
1420
+ const packageJson = JSON.parse(await fs.readFile(packageJsonPath, "utf-8"));
931
1421
  for (const dependency of dependencies) {
932
1422
  if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {
933
1423
  return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;
@@ -941,8 +1431,8 @@ var DepsService = class {
941
1431
  }
942
1432
  async getProjectName() {
943
1433
  try {
944
- const packageJsonPath = path.join(process.cwd(), "package.json");
945
- const packageJson = await fs4.readFile(packageJsonPath, "utf-8");
1434
+ const packageJsonPath = path3.join(process.cwd(), "package.json");
1435
+ const packageJson = await fs.readFile(packageJsonPath, "utf-8");
946
1436
  const pkg = JSON.parse(packageJson);
947
1437
  return pkg.name;
948
1438
  } catch (err) {
@@ -952,105 +1442,98 @@ var DepsService = class {
952
1442
  async getPackageVersion() {
953
1443
  const __filename = fileURLToPath(import.meta.url);
954
1444
  const __dirname = dirname(__filename);
955
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
1445
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
956
1446
  const content = await fsExtra3.readJSON(pkgJsonPath);
957
1447
  return content.version;
958
1448
  }
959
1449
  async addScriptsToPackageJson(scripts) {
960
- const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
1450
+ const packageJson = JSON.parse(await fs.readFile("package.json", "utf-8"));
961
1451
  packageJson.scripts = {
962
1452
  ...packageJson.scripts,
963
1453
  ...scripts
964
1454
  };
965
- await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
1455
+ await fs.writeFile("package.json", JSON.stringify(packageJson, null, 2));
966
1456
  }
967
1457
  };
968
- function getPackageManager() {
969
- const userAgent = process.env.npm_config_user_agent || "";
970
- const execPath = process.env.npm_execpath || "";
971
- if (userAgent.includes("yarn")) {
972
- return "yarn";
973
- }
974
- if (userAgent.includes("pnpm")) {
975
- return "pnpm";
976
- }
977
- if (userAgent.includes("npm")) {
978
- return "npm";
979
- }
980
- if (execPath.includes("yarn")) {
981
- return "yarn";
982
- }
983
- if (execPath.includes("pnpm")) {
984
- return "pnpm";
985
- }
986
- if (execPath.includes("npm")) {
987
- return "npm";
988
- }
989
- return "npm";
990
- }
991
- function getPackageManagerInstallCommand(pm) {
992
- switch (pm) {
993
- case "npm":
994
- return "install";
995
- case "yarn":
996
- return "add";
997
- case "pnpm":
998
- return "add";
999
- default:
1000
- return "install";
1458
+ var args = ["-y", "@mastra/mcp-docs-server"];
1459
+ var createMcpConfig = (editor) => {
1460
+ if (editor === "vscode") {
1461
+ return {
1462
+ servers: {
1463
+ mastra: process.platform === `win32` ? {
1464
+ command: "cmd",
1465
+ args: ["/c", "npx", ...args],
1466
+ type: "stdio"
1467
+ } : {
1468
+ command: "npx",
1469
+ args,
1470
+ type: "stdio"
1471
+ }
1472
+ }
1473
+ };
1001
1474
  }
1002
- }
1003
- var args = ["-y", "@mastra/mcp-docs-server@latest"];
1004
- var mcpConfig = {
1005
- mcpServers: {
1006
- mastra: process.platform === `win32` ? {
1007
- command: "cmd",
1008
- args: ["/c", "npx", ...args]
1009
- } : {
1010
- command: "npx",
1011
- args
1475
+ return {
1476
+ mcpServers: {
1477
+ mastra: {
1478
+ command: "npx",
1479
+ args
1480
+ }
1012
1481
  }
1013
- }
1482
+ };
1014
1483
  };
1015
- function makeConfig(original) {
1484
+ function makeConfig(original, editor) {
1485
+ if (editor === "vscode") {
1486
+ return {
1487
+ ...original,
1488
+ servers: {
1489
+ ...original?.servers || {},
1490
+ ...createMcpConfig(editor).servers
1491
+ }
1492
+ };
1493
+ }
1016
1494
  return {
1017
1495
  ...original,
1018
1496
  mcpServers: {
1019
1497
  ...original?.mcpServers || {},
1020
- ...mcpConfig.mcpServers
1498
+ ...createMcpConfig(editor).mcpServers
1021
1499
  }
1022
1500
  };
1023
1501
  }
1024
- async function writeMergedConfig(configPath) {
1502
+ async function writeMergedConfig(configPath, editor) {
1025
1503
  const configExists = existsSync(configPath);
1026
- const config = makeConfig(configExists ? await readJSON(configPath) : {});
1504
+ const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
1027
1505
  await ensureFile(configPath);
1028
1506
  await writeJSON(configPath, config, {
1029
1507
  spaces: 2
1030
1508
  });
1031
1509
  }
1032
- var windsurfGlobalMCPConfigPath = path.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1033
- var cursorGlobalMCPConfigPath = path.join(os.homedir(), ".cursor", "mcp.json");
1034
- async function installMastraDocsMCPServer({
1035
- editor,
1036
- directory
1037
- }) {
1510
+ var windsurfGlobalMCPConfigPath = path3.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1511
+ var cursorGlobalMCPConfigPath = path3.join(os.homedir(), ".cursor", "mcp.json");
1512
+ path3.join(process.cwd(), ".vscode", "mcp.json");
1513
+ var vscodeGlobalMCPConfigPath = path3.join(
1514
+ os.homedir(),
1515
+ process.platform === "win32" ? path3.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path3.join("Library", "Application Support", "Code", "User", "settings.json") : path3.join(".config", "Code", "User", "settings.json")
1516
+ );
1517
+ async function installMastraDocsMCPServer({ editor, directory }) {
1038
1518
  if (editor === `cursor`) {
1039
- await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"));
1519
+ await writeMergedConfig(path3.join(directory, ".cursor", "mcp.json"), "cursor");
1520
+ }
1521
+ if (editor === `vscode`) {
1522
+ await writeMergedConfig(path3.join(directory, ".vscode", "mcp.json"), "vscode");
1040
1523
  }
1041
1524
  if (editor === `cursor-global`) {
1042
1525
  const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1043
1526
  if (alreadyInstalled) {
1044
1527
  return;
1045
1528
  }
1046
- await writeMergedConfig(cursorGlobalMCPConfigPath);
1529
+ await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
1047
1530
  }
1048
1531
  if (editor === `windsurf`) {
1049
1532
  const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1050
1533
  if (alreadyInstalled) {
1051
1534
  return;
1052
1535
  }
1053
- await writeMergedConfig(windsurfGlobalMCPConfigPath);
1536
+ await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
1054
1537
  }
1055
1538
  }
1056
1539
  async function globalMCPIsAlreadyInstalled(editor) {
@@ -1059,19 +1542,28 @@ async function globalMCPIsAlreadyInstalled(editor) {
1059
1542
  configPath = windsurfGlobalMCPConfigPath;
1060
1543
  } else if (editor === "cursor-global") {
1061
1544
  configPath = cursorGlobalMCPConfigPath;
1545
+ } else if (editor === "vscode") {
1546
+ configPath = vscodeGlobalMCPConfigPath;
1062
1547
  }
1063
1548
  if (!configPath || !existsSync(configPath)) {
1064
1549
  return false;
1065
1550
  }
1066
1551
  try {
1067
1552
  const configContents = await readJSON(configPath);
1553
+ if (!configContents) return false;
1554
+ if (editor === "vscode") {
1555
+ if (!configContents.servers) return false;
1556
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1557
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1558
+ );
1559
+ return hasMastraMCP2;
1560
+ }
1068
1561
  if (!configContents?.mcpServers) return false;
1069
1562
  const hasMastraMCP = Object.values(configContents.mcpServers).some(
1070
1563
  (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1071
1564
  );
1072
1565
  return hasMastraMCP;
1073
- } catch (e) {
1074
- console.error(e);
1566
+ } catch {
1075
1567
  return false;
1076
1568
  }
1077
1569
  }
@@ -1085,7 +1577,7 @@ var FileEnvService = class extends EnvService {
1085
1577
  }
1086
1578
  readFile(filePath) {
1087
1579
  return new Promise((resolve, reject) => {
1088
- fs3__default.readFile(filePath, "utf8", (err, data) => {
1580
+ fs4__default.readFile(filePath, "utf8", (err, data) => {
1089
1581
  if (err) reject(err);
1090
1582
  else resolve(data);
1091
1583
  });
@@ -1093,7 +1585,7 @@ var FileEnvService = class extends EnvService {
1093
1585
  }
1094
1586
  writeFile({ filePath, data }) {
1095
1587
  return new Promise((resolve, reject) => {
1096
- fs3__default.writeFile(filePath, data, "utf8", (err) => {
1588
+ fs4__default.writeFile(filePath, data, "utf8", (err) => {
1097
1589
  if (err) reject(err);
1098
1590
  else resolve();
1099
1591
  });
@@ -1146,10 +1638,10 @@ var FileService = class {
1146
1638
  */
1147
1639
  async copyStarterFile(inputFile, outputFilePath, replaceIfExists) {
1148
1640
  const __filename = fileURLToPath(import.meta.url);
1149
- const __dirname = path.dirname(__filename);
1150
- const filePath = path.resolve(__dirname, "starter-files", inputFile);
1151
- const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1152
- if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1641
+ const __dirname = path3.dirname(__filename);
1642
+ const filePath = path3.resolve(__dirname, "starter-files", inputFile);
1643
+ const fileString = fs4__default__default.readFileSync(filePath, "utf8");
1644
+ if (fs4__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1153
1645
  console.log(`${outputFilePath} already exists`);
1154
1646
  return false;
1155
1647
  }
@@ -1157,14 +1649,14 @@ var FileService = class {
1157
1649
  return true;
1158
1650
  }
1159
1651
  async setupEnvFile({ dbUrl }) {
1160
- const envPath = path.join(process.cwd(), ".env.development");
1652
+ const envPath = path3.join(process.cwd(), ".env.development");
1161
1653
  await fsExtra3.ensureFile(envPath);
1162
1654
  const fileEnvService = new FileEnvService(envPath);
1163
1655
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1164
1656
  }
1165
1657
  getFirstExistingFile(files) {
1166
1658
  for (const f of files) {
1167
- if (fs3__default__default.existsSync(f)) {
1659
+ if (fs4__default__default.existsSync(f)) {
1168
1660
  return f;
1169
1661
  }
1170
1662
  }
@@ -1174,18 +1666,22 @@ var FileService = class {
1174
1666
  filePath,
1175
1667
  replacements
1176
1668
  }) {
1177
- let fileContent = fs3__default__default.readFileSync(filePath, "utf8");
1669
+ let fileContent = fs4__default__default.readFileSync(filePath, "utf8");
1178
1670
  replacements.forEach(({ search, replace }) => {
1179
1671
  fileContent = fileContent.replaceAll(search, replace);
1180
1672
  });
1181
- fs3__default__default.writeFileSync(filePath, fileContent);
1673
+ fs4__default__default.writeFileSync(filePath, fileContent);
1674
+ }
1675
+ };
1676
+ var exec2 = util.promisify(child_process.exec);
1677
+ var getAISDKPackageVersion = (llmProvider) => {
1678
+ switch (llmProvider) {
1679
+ case "cerebras":
1680
+ return "^0.2.14";
1681
+ default:
1682
+ return "^1.0.0";
1182
1683
  }
1183
1684
  };
1184
- createLogger({
1185
- name: "Mastra CLI",
1186
- level: "debug"
1187
- });
1188
- var exec = util.promisify(child_process.exec);
1189
1685
  var getAISDKPackage = (llmProvider) => {
1190
1686
  switch (llmProvider) {
1191
1687
  case "openai":
@@ -1207,7 +1703,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
1207
1703
  let modelItem = "";
1208
1704
  if (llmProvider === "openai") {
1209
1705
  providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1210
- modelItem = `openai('gpt-4o')`;
1706
+ modelItem = `openai('gpt-4o-mini')`;
1211
1707
  } else if (llmProvider === "anthropic") {
1212
1708
  providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1213
1709
  modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
@@ -1216,7 +1712,7 @@ var getProviderImportAndModelItem = (llmProvider) => {
1216
1712
  modelItem = `groq('llama-3.3-70b-versatile')`;
1217
1713
  } else if (llmProvider === "google") {
1218
1714
  providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1219
- modelItem = `google('gemini-1.5-pro-latest')`;
1715
+ modelItem = `google('gemini-2.5-pro')`;
1220
1716
  } else if (llmProvider === "cerebras") {
1221
1717
  providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1222
1718
  modelItem = `cerebras('llama-3.3-70b')`;
@@ -1226,14 +1722,16 @@ var getProviderImportAndModelItem = (llmProvider) => {
1226
1722
  async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1227
1723
  const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1228
1724
  const instructions = `
1229
- You are a helpful weather assistant that provides accurate weather information.
1725
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1230
1726
 
1231
1727
  Your primary function is to help users get weather details for specific locations. When responding:
1232
1728
  - Always ask for a location if none is provided
1233
- - If the location name isn\u2019t in English, please translate it
1729
+ - If the location name isn't in English, please translate it
1234
1730
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1235
1731
  - Include relevant details like humidity, wind conditions, and precipitation
1236
1732
  - Keep responses concise but informative
1733
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1734
+ - If the user asks for activities, respond in the format they request.
1237
1735
 
1238
1736
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1239
1737
  `;
@@ -1241,7 +1739,8 @@ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1241
1739
  ${providerImport}
1242
1740
  import { Agent } from '@mastra/core/agent';
1243
1741
  import { Memory } from '@mastra/memory';
1244
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1742
+ import { LibSQLStore } from '@mastra/libsql';
1743
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1245
1744
 
1246
1745
  export const weatherAgent = new Agent({
1247
1746
  name: 'Weather Agent',
@@ -1249,13 +1748,9 @@ export const weatherAgent = new Agent({
1249
1748
  model: ${modelItem},
1250
1749
  ${addExampleTool ? "tools: { weatherTool }," : ""}
1251
1750
  memory: new Memory({
1252
- options: {
1253
- lastMessages: 10,
1254
- semanticRecall: false,
1255
- threads: {
1256
- generateTitle: false
1257
- }
1258
- }
1751
+ storage: new LibSQLStore({
1752
+ url: "file:../mastra.db", // path is relative to the .mastra/output directory
1753
+ })
1259
1754
  })
1260
1755
  });
1261
1756
  `;
@@ -1263,142 +1758,159 @@ export const weatherAgent = new Agent({
1263
1758
  parser: "typescript",
1264
1759
  singleQuote: true
1265
1760
  });
1266
- await fs4.writeFile(destPath, "");
1267
- await fs4.writeFile(destPath, formattedContent);
1761
+ await fs.writeFile(destPath, "");
1762
+ await fs.writeFile(destPath, formattedContent);
1268
1763
  }
1269
- async function writeWorkflowSample(destPath, llmProvider) {
1270
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1271
- const content = `${providerImport}
1272
- import { Agent } from '@mastra/core/agent';
1273
- import { Step, Workflow } from '@mastra/core/workflows';
1764
+ async function writeWorkflowSample(destPath) {
1765
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1274
1766
  import { z } from 'zod';
1275
1767
 
1276
- const llm = ${modelItem};
1277
-
1278
- const agent = new Agent({
1279
- name: 'Weather Agent',
1280
- model: llm,
1281
- instructions: \`
1282
- You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
1283
-
1284
- For each day in the forecast, structure your response exactly as follows:
1285
-
1286
- \u{1F4C5} [Day, Month Date, Year]
1287
- \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
1288
-
1289
- \u{1F321}\uFE0F WEATHER SUMMARY
1290
- \u2022 Conditions: [brief description]
1291
- \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1292
- \u2022 Precipitation: [X% chance]
1293
-
1294
- \u{1F305} MORNING ACTIVITIES
1295
- Outdoor:
1296
- \u2022 [Activity Name] - [Brief description including specific location/route]
1297
- Best timing: [specific time range]
1298
- Note: [relevant weather consideration]
1299
-
1300
- \u{1F31E} AFTERNOON ACTIVITIES
1301
- Outdoor:
1302
- \u2022 [Activity Name] - [Brief description including specific location/route]
1303
- Best timing: [specific time range]
1304
- Note: [relevant weather consideration]
1305
-
1306
- \u{1F3E0} INDOOR ALTERNATIVES
1307
- \u2022 [Activity Name] - [Brief description including specific venue]
1308
- Ideal for: [weather condition that would trigger this alternative]
1309
-
1310
- \u26A0\uFE0F SPECIAL CONSIDERATIONS
1311
- \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1312
-
1313
- Guidelines:
1314
- - Suggest 2-3 time-specific outdoor activities per day
1315
- - Include 1-2 indoor backup options
1316
- - For precipitation >50%, lead with indoor activities
1317
- - All activities must be specific to the location
1318
- - Include specific venues, trails, or locations
1319
- - Consider activity intensity based on temperature
1320
- - Keep descriptions concise but informative
1321
-
1322
- Maintain this exact formatting for consistency, using the emoji and section headers as shown.
1323
- \`,
1324
- });
1768
+ const forecastSchema = z.object({
1769
+ date: z.string(),
1770
+ maxTemp: z.number(),
1771
+ minTemp: z.number(),
1772
+ precipitationChance: z.number(),
1773
+ condition: z.string(),
1774
+ location: z.string(),
1775
+ })
1325
1776
 
1326
- const forecastSchema = z.array(
1327
- z.object({
1328
- date: z.string(),
1329
- maxTemp: z.number(),
1330
- minTemp: z.number(),
1331
- precipitationChance: z.number(),
1332
- condition: z.string(),
1333
- location: z.string(),
1334
- }),
1335
- );
1777
+ function getWeatherCondition(code: number): string {
1778
+ const conditions: Record<number, string> = {
1779
+ 0: 'Clear sky',
1780
+ 1: 'Mainly clear',
1781
+ 2: 'Partly cloudy',
1782
+ 3: 'Overcast',
1783
+ 45: 'Foggy',
1784
+ 48: 'Depositing rime fog',
1785
+ 51: 'Light drizzle',
1786
+ 53: 'Moderate drizzle',
1787
+ 55: 'Dense drizzle',
1788
+ 61: 'Slight rain',
1789
+ 63: 'Moderate rain',
1790
+ 65: 'Heavy rain',
1791
+ 71: 'Slight snow fall',
1792
+ 73: 'Moderate snow fall',
1793
+ 75: 'Heavy snow fall',
1794
+ 95: 'Thunderstorm',
1795
+ }
1796
+ return conditions[code] || 'Unknown'
1797
+ }
1336
1798
 
1337
- const fetchWeather = new Step({
1799
+ const fetchWeather = createStep({
1338
1800
  id: 'fetch-weather',
1339
1801
  description: 'Fetches weather forecast for a given city',
1340
1802
  inputSchema: z.object({
1341
1803
  city: z.string().describe('The city to get the weather for'),
1342
1804
  }),
1343
1805
  outputSchema: forecastSchema,
1344
- execute: async ({ context }) => {
1345
- const triggerData = context?.getStepResult<{ city: string }>('trigger');
1346
-
1347
- if (!triggerData) {
1348
- throw new Error('Trigger data not found');
1806
+ execute: async ({ inputData }) => {
1807
+ if (!inputData) {
1808
+ throw new Error('Input data not found');
1349
1809
  }
1350
1810
 
1351
- const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(triggerData.city)}&count=1\`;
1811
+ const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
1352
1812
  const geocodingResponse = await fetch(geocodingUrl);
1353
1813
  const geocodingData = (await geocodingResponse.json()) as {
1354
1814
  results: { latitude: number; longitude: number; name: string }[];
1355
1815
  };
1356
1816
 
1357
1817
  if (!geocodingData.results?.[0]) {
1358
- throw new Error(\`Location '\${triggerData.city}' not found\`);
1818
+ throw new Error(\`Location '\${inputData.city}' not found\`);
1359
1819
  }
1360
1820
 
1361
1821
  const { latitude, longitude, name } = geocodingData.results[0];
1362
1822
 
1363
- const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&daily=temperature_2m_max,temperature_2m_min,precipitation_probability_mean,weathercode&timezone=auto\`;
1823
+ const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&current=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
1364
1824
  const response = await fetch(weatherUrl);
1365
1825
  const data = (await response.json()) as {
1366
- daily: {
1367
- time: string[];
1368
- temperature_2m_max: number[];
1369
- temperature_2m_min: number[];
1370
- precipitation_probability_mean: number[];
1371
- weathercode: number[];
1372
- };
1373
- };
1826
+ current: {
1827
+ time: string
1828
+ precipitation: number
1829
+ weathercode: number
1830
+ }
1831
+ hourly: {
1832
+ precipitation_probability: number[]
1833
+ temperature_2m: number[]
1834
+ }
1835
+ }
1374
1836
 
1375
- const forecast = data.daily.time.map((date: string, index: number) => ({
1376
- date,
1377
- maxTemp: data.daily.temperature_2m_max[index],
1378
- minTemp: data.daily.temperature_2m_min[index],
1379
- precipitationChance: data.daily.precipitation_probability_mean[index],
1380
- condition: getWeatherCondition(data.daily.weathercode[index]!),
1381
- location: name,
1382
- }));
1837
+ const forecast = {
1838
+ date: new Date().toISOString(),
1839
+ maxTemp: Math.max(...data.hourly.temperature_2m),
1840
+ minTemp: Math.min(...data.hourly.temperature_2m),
1841
+ condition: getWeatherCondition(data.current.weathercode),
1842
+ precipitationChance: data.hourly.precipitation_probability.reduce(
1843
+ (acc, curr) => Math.max(acc, curr),
1844
+ 0
1845
+ ),
1846
+ location: name
1847
+ }
1383
1848
 
1384
1849
  return forecast;
1385
1850
  },
1386
1851
  });
1387
1852
 
1388
1853
 
1389
- const planActivities = new Step({
1854
+ const planActivities = createStep({
1390
1855
  id: 'plan-activities',
1391
1856
  description: 'Suggests activities based on weather conditions',
1392
- execute: async ({ context, mastra }) => {
1393
- const forecast = context?.getStepResult(fetchWeather);
1857
+ inputSchema: forecastSchema,
1858
+ outputSchema: z.object({
1859
+ activities: z.string(),
1860
+ }),
1861
+ execute: async ({ inputData, mastra }) => {
1862
+ const forecast = inputData
1394
1863
 
1395
- if (!forecast || forecast.length === 0) {
1396
- throw new Error('Forecast data not found');
1864
+ if (!forecast) {
1865
+ throw new Error('Forecast data not found')
1397
1866
  }
1398
1867
 
1399
- const prompt = \`Based on the following weather forecast for \${forecast[0]?.location}, suggest appropriate activities:
1868
+ const agent = mastra?.getAgent('weatherAgent');
1869
+ if (!agent) {
1870
+ throw new Error('Weather agent not found');
1871
+ }
1872
+
1873
+ const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1400
1874
  \${JSON.stringify(forecast, null, 2)}
1401
- \`;
1875
+ For each day in the forecast, structure your response exactly as follows:
1876
+
1877
+ \u{1F4C5} [Day, Month Date, Year]
1878
+ \u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550
1879
+
1880
+ \u{1F321}\uFE0F WEATHER SUMMARY
1881
+ \u2022 Conditions: [brief description]
1882
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1883
+ \u2022 Precipitation: [X% chance]
1884
+
1885
+ \u{1F305} MORNING ACTIVITIES
1886
+ Outdoor:
1887
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1888
+ Best timing: [specific time range]
1889
+ Note: [relevant weather consideration]
1890
+
1891
+ \u{1F31E} AFTERNOON ACTIVITIES
1892
+ Outdoor:
1893
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1894
+ Best timing: [specific time range]
1895
+ Note: [relevant weather consideration]
1896
+
1897
+ \u{1F3E0} INDOOR ALTERNATIVES
1898
+ \u2022 [Activity Name] - [Brief description including specific venue]
1899
+ Ideal for: [weather condition that would trigger this alternative]
1900
+
1901
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1902
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1903
+
1904
+ Guidelines:
1905
+ - Suggest 2-3 time-specific outdoor activities per day
1906
+ - Include 1-2 indoor backup options
1907
+ - For precipitation >50%, lead with indoor activities
1908
+ - All activities must be specific to the location
1909
+ - Include specific venues, trails, or locations
1910
+ - Consider activity intensity based on temperature
1911
+ - Keep descriptions concise but informative
1912
+
1913
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1402
1914
 
1403
1915
  const response = await agent.stream([
1404
1916
  {
@@ -1408,7 +1920,7 @@ const planActivities = new Step({
1408
1920
  ]);
1409
1921
 
1410
1922
  let activitiesText = '';
1411
-
1923
+
1412
1924
  for await (const chunk of response.textStream) {
1413
1925
  process.stdout.write(chunk);
1414
1926
  activitiesText += chunk;
@@ -1420,35 +1932,16 @@ const planActivities = new Step({
1420
1932
  },
1421
1933
  });
1422
1934
 
1423
- function getWeatherCondition(code: number): string {
1424
- const conditions: Record<number, string> = {
1425
- 0: 'Clear sky',
1426
- 1: 'Mainly clear',
1427
- 2: 'Partly cloudy',
1428
- 3: 'Overcast',
1429
- 45: 'Foggy',
1430
- 48: 'Depositing rime fog',
1431
- 51: 'Light drizzle',
1432
- 53: 'Moderate drizzle',
1433
- 55: 'Dense drizzle',
1434
- 61: 'Slight rain',
1435
- 63: 'Moderate rain',
1436
- 65: 'Heavy rain',
1437
- 71: 'Slight snow fall',
1438
- 73: 'Moderate snow fall',
1439
- 75: 'Heavy snow fall',
1440
- 95: 'Thunderstorm',
1441
- };
1442
- return conditions[code] || 'Unknown';
1443
- }
1444
-
1445
- const weatherWorkflow = new Workflow({
1446
- name: 'weather-workflow',
1447
- triggerSchema: z.object({
1935
+ const weatherWorkflow = createWorkflow({
1936
+ id: 'weather-workflow',
1937
+ inputSchema: z.object({
1448
1938
  city: z.string().describe('The city to get the weather for'),
1449
1939
  }),
1940
+ outputSchema: z.object({
1941
+ activities: z.string(),
1942
+ })
1450
1943
  })
1451
- .step(fetchWeather)
1944
+ .then(fetchWeather)
1452
1945
  .then(planActivities);
1453
1946
 
1454
1947
  weatherWorkflow.commit();
@@ -1459,7 +1952,7 @@ export { weatherWorkflow };`;
1459
1952
  semi: true,
1460
1953
  singleQuote: true
1461
1954
  });
1462
- await fs4.writeFile(destPath, formattedContent);
1955
+ await fs.writeFile(destPath, formattedContent);
1463
1956
  }
1464
1957
  async function writeToolSample(destPath) {
1465
1958
  const fileService = new FileService();
@@ -1472,7 +1965,7 @@ async function writeCodeSampleForComponents(llmprovider, component, destPath, im
1472
1965
  case "tools":
1473
1966
  return writeToolSample(destPath);
1474
1967
  case "workflows":
1475
- return writeWorkflowSample(destPath, llmprovider);
1968
+ return writeWorkflowSample(destPath);
1476
1969
  default:
1477
1970
  return "";
1478
1971
  }
@@ -1488,15 +1981,15 @@ var writeIndexFile = async ({
1488
1981
  addWorkflow
1489
1982
  }) => {
1490
1983
  const indexPath = dirPath + "/index.ts";
1491
- const destPath = path.join(indexPath);
1984
+ const destPath = path3.join(indexPath);
1492
1985
  try {
1493
- await fs4.writeFile(destPath, "");
1986
+ await fs.writeFile(destPath, "");
1494
1987
  const filteredExports = [
1495
1988
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1496
1989
  addAgent ? `agents: { weatherAgent },` : ""
1497
1990
  ].filter(Boolean);
1498
1991
  if (!addExample) {
1499
- await fs4.writeFile(
1992
+ await fs.writeFile(
1500
1993
  destPath,
1501
1994
  `
1502
1995
  import { Mastra } from '@mastra/core';
@@ -1506,14 +1999,14 @@ export const mastra = new Mastra()
1506
1999
  );
1507
2000
  return;
1508
2001
  }
1509
- await fs4.writeFile(
2002
+ await fs.writeFile(
1510
2003
  destPath,
1511
2004
  `
1512
2005
  import { Mastra } from '@mastra/core/mastra';
1513
- import { createLogger } from '@mastra/core/logger';
2006
+ import { PinoLogger } from '@mastra/loggers';
1514
2007
  import { LibSQLStore } from '@mastra/libsql';
1515
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1516
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
2008
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
2009
+ ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1517
2010
 
1518
2011
  export const mastra = new Mastra({
1519
2012
  ${filteredExports.join("\n ")}
@@ -1521,7 +2014,7 @@ export const mastra = new Mastra({
1521
2014
  // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1522
2015
  url: ":memory:",
1523
2016
  }),
1524
- logger: createLogger({
2017
+ logger: new PinoLogger({
1525
2018
  name: 'Mastra',
1526
2019
  level: 'info',
1527
2020
  }),
@@ -1557,13 +2050,15 @@ var writeAPIKey = async ({
1557
2050
  apiKey = "your-api-key"
1558
2051
  }) => {
1559
2052
  const key = await getAPIKey(provider);
1560
- await exec(`echo ${key}=${apiKey} >> .env.development`);
2053
+ const escapedKey = shellQuote.quote([key]);
2054
+ const escapedApiKey = shellQuote.quote([apiKey]);
2055
+ await exec2(`echo ${escapedKey}=${escapedApiKey} >> .env`);
1561
2056
  };
1562
2057
  var createMastraDir = async (directory) => {
1563
2058
  let dir = directory.trim().split("/").filter((item) => item !== "");
1564
- const dirPath = path.join(process.cwd(), ...dir, "mastra");
2059
+ const dirPath = path3.join(process.cwd(), ...dir, "mastra");
1565
2060
  try {
1566
- await fs4.access(dirPath);
2061
+ await fs.access(dirPath);
1567
2062
  return { ok: false };
1568
2063
  } catch {
1569
2064
  await fsExtra3.ensureDir(dirPath);
@@ -1571,7 +2066,7 @@ var createMastraDir = async (directory) => {
1571
2066
  }
1572
2067
  };
1573
2068
  var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1574
- const destPath = dirPath + `/${component}/index.ts`;
2069
+ const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
1575
2070
  try {
1576
2071
  await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1577
2072
  } catch (err) {
@@ -1579,29 +2074,15 @@ var writeCodeSample = async (dirPath, component, llmProvider, importComponents)
1579
2074
  }
1580
2075
  };
1581
2076
  var interactivePrompt = async () => {
1582
- pe(color2.inverse("Mastra Init"));
1583
- const mastraProject = await ve(
2077
+ Ie(color2.inverse(" Mastra Init "));
2078
+ const mastraProject = await Ce(
1584
2079
  {
1585
- directory: () => ae({
2080
+ directory: () => he({
1586
2081
  message: "Where should we create the Mastra files? (default: src/)",
1587
2082
  placeholder: "src/",
1588
2083
  defaultValue: "src/"
1589
2084
  }),
1590
- components: () => $e({
1591
- message: "Choose components to install:",
1592
- options: [
1593
- { value: "agents", label: "Agents", hint: "recommended" },
1594
- {
1595
- value: "workflows",
1596
- label: "Workflows"
1597
- }
1598
- ]
1599
- }),
1600
- shouldAddTools: () => ce({
1601
- message: "Add tools?",
1602
- initialValue: false
1603
- }),
1604
- llmProvider: () => le({
2085
+ llmProvider: () => ve({
1605
2086
  message: "Select default provider:",
1606
2087
  options: [
1607
2088
  { value: "openai", label: "OpenAI", hint: "recommended" },
@@ -1612,7 +2093,7 @@ var interactivePrompt = async () => {
1612
2093
  ]
1613
2094
  }),
1614
2095
  llmApiKey: async ({ results: { llmProvider } }) => {
1615
- const keyChoice = await le({
2096
+ const keyChoice = await ve({
1616
2097
  message: `Enter your ${llmProvider} API key?`,
1617
2098
  options: [
1618
2099
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1621,21 +2102,18 @@ var interactivePrompt = async () => {
1621
2102
  initialValue: "skip"
1622
2103
  });
1623
2104
  if (keyChoice === "enter") {
1624
- return ae({
2105
+ return he({
1625
2106
  message: "Enter your API key:",
1626
2107
  placeholder: "sk-..."
1627
2108
  });
1628
2109
  }
1629
2110
  return void 0;
1630
2111
  },
1631
- addExample: () => ce({
1632
- message: "Add example",
1633
- initialValue: false
1634
- }),
1635
2112
  configureEditorWithDocsMCP: async () => {
1636
2113
  const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
1637
2114
  const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
1638
- const editor = await le({
2115
+ const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
2116
+ const editor = await ve({
1639
2117
  message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
1640
2118
  options: [
1641
2119
  { value: "skip", label: "Skip for now", hint: "default" },
@@ -1653,24 +2131,34 @@ var interactivePrompt = async () => {
1653
2131
  value: "windsurf",
1654
2132
  label: "Windsurf",
1655
2133
  hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2134
+ },
2135
+ {
2136
+ value: "vscode",
2137
+ label: "VSCode",
2138
+ hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
1656
2139
  }
1657
2140
  ]
1658
2141
  });
1659
2142
  if (editor === `skip`) return void 0;
1660
2143
  if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1661
- v.message(`
2144
+ M.message(`
1662
2145
  Windsurf is already installed, skipping.`);
1663
2146
  return void 0;
1664
2147
  }
2148
+ if (editor === `vscode` && vscodeIsAlreadyInstalled) {
2149
+ M.message(`
2150
+ VSCode is already installed, skipping.`);
2151
+ return void 0;
2152
+ }
1665
2153
  if (editor === `cursor`) {
1666
- v.message(
2154
+ M.message(
1667
2155
  `
1668
2156
  Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1669
2157
  `
1670
2158
  );
1671
2159
  }
1672
2160
  if (editor === `cursor-global`) {
1673
- const confirm2 = await le({
2161
+ const confirm2 = await ve({
1674
2162
  message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
1675
2163
  options: [
1676
2164
  { value: "yes", label: "Yes, I understand" },
@@ -1682,7 +2170,7 @@ Note: you will need to go into Cursor Settings -> MCP Settings and manually enab
1682
2170
  }
1683
2171
  }
1684
2172
  if (editor === `windsurf`) {
1685
- const confirm2 = await le({
2173
+ const confirm2 = await ve({
1686
2174
  message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
1687
2175
  This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
1688
2176
  options: [
@@ -1699,17 +2187,15 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
1699
2187
  },
1700
2188
  {
1701
2189
  onCancel: () => {
1702
- he("Operation cancelled.");
2190
+ xe("Operation cancelled.");
1703
2191
  process.exit(0);
1704
2192
  }
1705
2193
  }
1706
2194
  );
1707
- const { shouldAddTools, components, ...rest } = mastraProject;
1708
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1709
- return { ...rest, components: mastraComponents };
2195
+ return mastraProject;
1710
2196
  };
1711
- var s = _();
1712
- var exec2 = util.promisify(child_process.exec);
2197
+ var s = Y();
2198
+ var exec3 = util.promisify(child_process.exec);
1713
2199
  var init = async ({
1714
2200
  directory,
1715
2201
  addExample = false,
@@ -1751,13 +2237,18 @@ var init = async ({
1751
2237
  if (needsMemory) {
1752
2238
  await depService.installPackages(["@mastra/memory"]);
1753
2239
  }
2240
+ const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2241
+ if (needsLoggers) {
2242
+ await depService.installPackages(["@mastra/loggers"]);
2243
+ }
1754
2244
  }
1755
2245
  const key = await getAPIKey(llmProvider || "openai");
1756
2246
  const aiSdkPackage = getAISDKPackage(llmProvider);
2247
+ const aiSdkPackageVersion = getAISDKPackageVersion(llmProvider);
1757
2248
  const depsService = new DepsService();
1758
2249
  const pm = depsService.packageManager;
1759
2250
  const installCommand = getPackageManagerInstallCommand(pm);
1760
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
2251
+ await exec3(`${pm} ${installCommand} ${aiSdkPackage}@${aiSdkPackageVersion}`);
1761
2252
  if (configureEditorWithDocsMCP) {
1762
2253
  await installMastraDocsMCPServer({
1763
2254
  editor: configureEditorWithDocsMCP,
@@ -1766,14 +2257,14 @@ var init = async ({
1766
2257
  }
1767
2258
  s.stop();
1768
2259
  if (!llmApiKey) {
1769
- me(`
2260
+ Me(`
1770
2261
  ${color2.green("Mastra initialized successfully!")}
1771
2262
 
1772
2263
  Add your ${color2.cyan(key)} as an environment variable
1773
- in your ${color2.cyan(".env.development")} file
2264
+ in your ${color2.cyan(".env")} file
1774
2265
  `);
1775
2266
  } else {
1776
- me(`
2267
+ Me(`
1777
2268
  ${color2.green("Mastra initialized successfully!")}
1778
2269
  `);
1779
2270
  }
@@ -1784,10 +2275,10 @@ var init = async ({
1784
2275
  return { success: false };
1785
2276
  }
1786
2277
  };
1787
- var exec3 = util.promisify(child_process.exec);
2278
+ var exec4 = util.promisify(child_process.exec);
1788
2279
  var execWithTimeout = async (command, timeoutMs) => {
1789
2280
  try {
1790
- const promise = exec3(command, { killSignal: "SIGTERM" });
2281
+ const promise = exec4(command, { killSignal: "SIGTERM" });
1791
2282
  if (!timeoutMs) {
1792
2283
  return await promise;
1793
2284
  }
@@ -1807,7 +2298,6 @@ var execWithTimeout = async (command, timeoutMs) => {
1807
2298
  throw error;
1808
2299
  }
1809
2300
  } catch (error) {
1810
- console.error(error);
1811
2301
  throw error;
1812
2302
  }
1813
2303
  };
@@ -1819,11 +2309,18 @@ async function installMastraDependency(pm, dependency, versionTag, isDev, timeou
1819
2309
  try {
1820
2310
  await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
1821
2311
  } catch (err) {
1822
- console.log("err", err);
1823
2312
  if (versionTag === "@latest") {
1824
- throw err;
2313
+ throw new Error(
2314
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2315
+ );
2316
+ }
2317
+ try {
2318
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2319
+ } catch (fallbackErr) {
2320
+ throw new Error(
2321
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2322
+ );
1825
2323
  }
1826
- await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
1827
2324
  }
1828
2325
  }
1829
2326
  var createMastraProject = async ({
@@ -1831,45 +2328,55 @@ var createMastraProject = async ({
1831
2328
  createVersionTag,
1832
2329
  timeout
1833
2330
  }) => {
1834
- pe(color2.inverse("Mastra Create"));
1835
- const projectName = name ?? await ae({
2331
+ Ie(color2.inverse(" Mastra Create "));
2332
+ const projectName = name ?? await he({
1836
2333
  message: "What do you want to name your project?",
1837
2334
  placeholder: "my-mastra-app",
1838
2335
  defaultValue: "my-mastra-app"
1839
2336
  });
1840
- if (lD(projectName)) {
1841
- he("Operation cancelled");
2337
+ if (pD(projectName)) {
2338
+ xe("Operation cancelled");
1842
2339
  process.exit(0);
1843
2340
  }
1844
- const s2 = _();
1845
- s2.start("Creating project");
2341
+ const s2 = Y();
1846
2342
  try {
1847
- await fs4.mkdir(projectName);
1848
- } catch (error) {
1849
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1850
- s2.stop(
1851
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
2343
+ s2.start("Creating project");
2344
+ try {
2345
+ await fs.mkdir(projectName);
2346
+ } catch (error) {
2347
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2348
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2349
+ process.exit(1);
2350
+ }
2351
+ throw new Error(
2352
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
1852
2353
  );
1853
- process.exit(1);
1854
2354
  }
1855
- throw error;
1856
- }
1857
- process.chdir(projectName);
1858
- const pm = getPackageManager();
1859
- const installCommand = getPackageManagerInstallCommand(pm);
1860
- s2.message("Creating project");
1861
- await exec3(`npm init -y`);
1862
- await exec3(`npm pkg set type="module"`);
1863
- const depsService = new DepsService();
1864
- await depsService.addScriptsToPackageJson({
1865
- dev: "mastra dev",
1866
- build: "mastra build"
1867
- });
1868
- s2.stop("Project created");
1869
- s2.start(`Installing ${pm} dependencies`);
1870
- await exec3(`${pm} ${installCommand} zod`);
1871
- await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
1872
- await exec3(`echo '{
2355
+ process.chdir(projectName);
2356
+ const pm = getPackageManager();
2357
+ const installCommand = getPackageManagerInstallCommand(pm);
2358
+ s2.message("Initializing project structure");
2359
+ try {
2360
+ await exec4(`npm init -y`);
2361
+ await exec4(`npm pkg set type="module"`);
2362
+ await exec4(`npm pkg set engines.node=">=20.9.0"`);
2363
+ const depsService = new DepsService();
2364
+ await depsService.addScriptsToPackageJson({
2365
+ dev: "mastra dev",
2366
+ build: "mastra build",
2367
+ start: "mastra start"
2368
+ });
2369
+ } catch (error) {
2370
+ throw new Error(
2371
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2372
+ );
2373
+ }
2374
+ s2.stop("Project structure created");
2375
+ s2.start(`Installing ${pm} dependencies`);
2376
+ try {
2377
+ await exec4(`${pm} ${installCommand} zod@^3`);
2378
+ await exec4(`${pm} ${installCommand} typescript @types/node --save-dev`);
2379
+ await exec4(`echo '{
1873
2380
  "compilerOptions": {
1874
2381
  "target": "ES2022",
1875
2382
  "module": "ES2022",
@@ -1885,31 +2392,60 @@ var createMastraProject = async ({
1885
2392
  "src/**/*"
1886
2393
  ]
1887
2394
  }' > tsconfig.json`);
1888
- s2.stop(`${pm} dependencies installed`);
1889
- s2.start("Installing mastra");
1890
- const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
1891
- await installMastraDependency(pm, "mastra", versionTag, true, timeout);
1892
- s2.stop("mastra installed");
1893
- s2.start("Installing dependencies");
1894
- await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
1895
- await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
1896
- await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
1897
- s2.stop("Dependencies installed");
1898
- s2.start("Adding .gitignore");
1899
- await exec3(`echo output.txt >> .gitignore`);
1900
- await exec3(`echo node_modules >> .gitignore`);
1901
- await exec3(`echo dist >> .gitignore`);
1902
- await exec3(`echo .mastra >> .gitignore`);
1903
- await exec3(`echo .env.development >> .gitignore`);
1904
- await exec3(`echo .env >> .gitignore`);
1905
- await exec3(`echo *.db >> .gitignore`);
1906
- await exec3(`echo *.db-* >> .gitignore`);
1907
- s2.stop(".gitignore added");
1908
- ge("Project created successfully");
1909
- console.log("");
1910
- return { projectName };
2395
+ } catch (error) {
2396
+ throw new Error(
2397
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2398
+ );
2399
+ }
2400
+ s2.stop(`${pm} dependencies installed`);
2401
+ s2.start("Installing mastra");
2402
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2403
+ try {
2404
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2405
+ } catch (error) {
2406
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2407
+ }
2408
+ s2.stop("mastra installed");
2409
+ s2.start("Installing dependencies");
2410
+ try {
2411
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2412
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2413
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2414
+ } catch (error) {
2415
+ throw new Error(
2416
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2417
+ );
2418
+ }
2419
+ s2.stop("Mastra dependencies installed");
2420
+ s2.start("Adding .gitignore");
2421
+ try {
2422
+ await exec4(`echo output.txt >> .gitignore`);
2423
+ await exec4(`echo node_modules >> .gitignore`);
2424
+ await exec4(`echo dist >> .gitignore`);
2425
+ await exec4(`echo .mastra >> .gitignore`);
2426
+ await exec4(`echo .env.development >> .gitignore`);
2427
+ await exec4(`echo .env >> .gitignore`);
2428
+ await exec4(`echo *.db >> .gitignore`);
2429
+ await exec4(`echo *.db-* >> .gitignore`);
2430
+ } catch (error) {
2431
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2432
+ }
2433
+ s2.stop(".gitignore added");
2434
+ Se("Project created successfully");
2435
+ console.log("");
2436
+ return { projectName };
2437
+ } catch (error) {
2438
+ s2.stop();
2439
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2440
+ xe(`Project creation failed: ${errorMessage}`);
2441
+ process.exit(1);
2442
+ }
1911
2443
  };
1912
2444
  var create = async (args2) => {
2445
+ if (args2.template !== void 0) {
2446
+ await createFromTemplate(args2);
2447
+ return;
2448
+ }
1913
2449
  const { projectName } = await createMastraProject({
1914
2450
  projectName: args2?.projectName,
1915
2451
  createVersionTag: args2?.createVersionTag,
@@ -1920,7 +2456,9 @@ var create = async (args2) => {
1920
2456
  const result = await interactivePrompt();
1921
2457
  await init({
1922
2458
  ...result,
1923
- llmApiKey: result?.llmApiKey
2459
+ llmApiKey: result?.llmApiKey,
2460
+ components: ["agents", "tools", "workflows"],
2461
+ addExample: true
1924
2462
  });
1925
2463
  postCreate({ projectName });
1926
2464
  return;
@@ -1931,23 +2469,174 @@ var create = async (args2) => {
1931
2469
  components,
1932
2470
  llmProvider,
1933
2471
  addExample,
1934
- llmApiKey
2472
+ llmApiKey,
2473
+ configureEditorWithDocsMCP: args2.mcpServer
1935
2474
  });
1936
2475
  postCreate({ projectName });
1937
2476
  };
1938
2477
  var postCreate = ({ projectName }) => {
1939
- ge(`
2478
+ const packageManager = getPackageManager();
2479
+ Se(`
1940
2480
  ${color2.green("To start your project:")}
1941
2481
 
1942
2482
  ${color2.cyan("cd")} ${projectName}
1943
- ${color2.cyan("npm run dev")}
2483
+ ${color2.cyan(`${packageManager} run dev`)}
1944
2484
  `);
1945
2485
  };
2486
+ function isGitHubUrl(url) {
2487
+ try {
2488
+ const parsedUrl = new URL(url);
2489
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2490
+ } catch {
2491
+ return false;
2492
+ }
2493
+ }
2494
+ async function validateGitHubProject(githubUrl) {
2495
+ const errors = [];
2496
+ try {
2497
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2498
+ const owner = urlParts[0];
2499
+ const repo = urlParts[1]?.replace(".git", "");
2500
+ if (!owner || !repo) {
2501
+ throw new Error("Invalid GitHub URL format");
2502
+ }
2503
+ const branches = ["main", "master"];
2504
+ let packageJsonContent = null;
2505
+ let indexContent = null;
2506
+ for (const branch of branches) {
2507
+ try {
2508
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2509
+ const packageJsonResponse = await fetch(packageJsonUrl);
2510
+ if (packageJsonResponse.ok) {
2511
+ packageJsonContent = await packageJsonResponse.text();
2512
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2513
+ const indexResponse = await fetch(indexUrl);
2514
+ if (indexResponse.ok) {
2515
+ indexContent = await indexResponse.text();
2516
+ }
2517
+ break;
2518
+ }
2519
+ } catch {
2520
+ }
2521
+ }
2522
+ if (!packageJsonContent) {
2523
+ errors.push("Could not fetch package.json from repository");
2524
+ return { isValid: false, errors };
2525
+ }
2526
+ try {
2527
+ const packageJson = JSON.parse(packageJsonContent);
2528
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2529
+ if (!hasMastraCore) {
2530
+ errors.push("Missing @mastra/core dependency in package.json");
2531
+ }
2532
+ } catch {
2533
+ errors.push("Invalid package.json format");
2534
+ }
2535
+ if (!indexContent) {
2536
+ errors.push("Missing src/mastra/index.ts file");
2537
+ } else {
2538
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2539
+ if (!hasMastraExport) {
2540
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2541
+ }
2542
+ }
2543
+ return { isValid: errors.length === 0, errors };
2544
+ } catch (error) {
2545
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2546
+ return { isValid: false, errors };
2547
+ }
2548
+ }
2549
+ async function createFromGitHubUrl(url) {
2550
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2551
+ const owner = urlParts[0] || "unknown";
2552
+ const repo = urlParts[1] || "unknown";
2553
+ return {
2554
+ githubUrl: url,
2555
+ title: `${owner}/${repo}`,
2556
+ slug: repo,
2557
+ agents: [],
2558
+ mcp: [],
2559
+ tools: [],
2560
+ networks: [],
2561
+ workflows: []
2562
+ };
2563
+ }
2564
+ async function createFromTemplate(args2) {
2565
+ let selectedTemplate;
2566
+ if (args2.template === true) {
2567
+ const templates = await loadTemplates();
2568
+ const selected = await selectTemplate(templates);
2569
+ if (!selected) {
2570
+ M.info("No template selected. Exiting.");
2571
+ return;
2572
+ }
2573
+ selectedTemplate = selected;
2574
+ } else if (args2.template && typeof args2.template === "string") {
2575
+ if (isGitHubUrl(args2.template)) {
2576
+ const spinner5 = Y();
2577
+ spinner5.start("Validating GitHub repository...");
2578
+ const validation = await validateGitHubProject(args2.template);
2579
+ if (!validation.isValid) {
2580
+ spinner5.stop("Validation failed");
2581
+ M.error("This does not appear to be a valid Mastra project:");
2582
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2583
+ throw new Error("Invalid Mastra project");
2584
+ }
2585
+ spinner5.stop("Valid Mastra project \u2713");
2586
+ selectedTemplate = await createFromGitHubUrl(args2.template);
2587
+ } else {
2588
+ const templates = await loadTemplates();
2589
+ const found = findTemplateByName(templates, args2.template);
2590
+ if (!found) {
2591
+ M.error(`Template "${args2.template}" not found. Available templates:`);
2592
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2593
+ throw new Error(`Template "${args2.template}" not found`);
2594
+ }
2595
+ selectedTemplate = found;
2596
+ }
2597
+ }
2598
+ if (!selectedTemplate) {
2599
+ throw new Error("No template selected");
2600
+ }
2601
+ let projectName = args2.projectName;
2602
+ if (!projectName) {
2603
+ const defaultName = getDefaultProjectName(selectedTemplate);
2604
+ const response = await he({
2605
+ message: "What is your project name?",
2606
+ defaultValue: defaultName,
2607
+ placeholder: defaultName
2608
+ });
2609
+ if (pD(response)) {
2610
+ M.info("Project creation cancelled.");
2611
+ return;
2612
+ }
2613
+ projectName = response;
2614
+ }
2615
+ try {
2616
+ const analytics = getAnalytics();
2617
+ if (analytics) ;
2618
+ const projectPath = await cloneTemplate({
2619
+ template: selectedTemplate,
2620
+ projectName
2621
+ });
2622
+ await installDependencies(projectPath);
2623
+ Me(`
2624
+ ${color2.green("Mastra template installed!")}
2625
+
2626
+ Add the necessary environment
2627
+ variables in your ${color2.cyan(".env")} file
2628
+ `);
2629
+ postCreate({ projectName });
2630
+ } catch (error) {
2631
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
2632
+ throw error;
2633
+ }
2634
+ }
1946
2635
 
1947
2636
  async function getPackageVersion() {
1948
2637
  const __filename = fileURLToPath(import.meta.url);
1949
2638
  const __dirname = dirname(__filename);
1950
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
2639
+ const pkgJsonPath = path3.join(__dirname, "..", "package.json");
1951
2640
  const content = await fsExtra.readJSON(pkgJsonPath);
1952
2641
  return content.version;
1953
2642
  }
@@ -1956,7 +2645,7 @@ async function getCreateVersionTag() {
1956
2645
  const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
1957
2646
  const json = await fsExtra.readJSON(pkgPath);
1958
2647
  const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
1959
- const tagLine = stdout.split("\n").find((distLine) => distLine.includes(`: ${json.version}`));
2648
+ const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
1960
2649
  const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
1961
2650
  return tag;
1962
2651
  } catch {
@@ -1985,16 +2674,22 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
1985
2674
  program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
1986
2675
  "-p, --project-name <string>",
1987
2676
  "Project name that will be used in package.json and as the project directory name."
1988
- ).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, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").action(async (projectNameArg, args) => {
2677
+ ).option("--default", "Quick start with defaults(src, OpenAI, examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-n, --no-example", "Do not include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").option("-d, --dir <directory>", "Target directory for Mastra source code (default: src/)").option("-m, --mcp <mcp>", "MCP Server for code editor (cursor, cursor-global, windsurf, vscode)").option(
2678
+ "--template [template-name]",
2679
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
2680
+ ).action(async (projectNameArg, args) => {
1989
2681
  const projectName = projectNameArg || args.projectName;
1990
2682
  const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
1991
2683
  if (args.default) {
1992
2684
  await create({
1993
2685
  components: ["agents", "tools", "workflows"],
1994
2686
  llmProvider: "openai",
1995
- addExample: false,
2687
+ addExample: true,
1996
2688
  createVersionTag,
1997
- timeout
2689
+ timeout,
2690
+ mcpServer: args.mcp,
2691
+ directory: "src/",
2692
+ template: args.template
1998
2693
  });
1999
2694
  return;
2000
2695
  }
@@ -2006,7 +2701,9 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
2006
2701
  createVersionTag,
2007
2702
  timeout,
2008
2703
  projectName,
2009
- directory: args.dir
2704
+ directory: args.dir,
2705
+ mcpServer: args.mcp,
2706
+ template: args.template
2010
2707
  });
2011
2708
  });
2012
2709
  program.parse(process.argv);