create-mastra 0.0.0-pg-pool-options-20250428183821 → 0.0.0-playground-studio-cloud-20251031080052

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -7,23 +7,27 @@ import os from 'node:os';
7
7
  import path, { 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';
14
- import child_process from 'node:child_process';
15
- import util from 'node:util';
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';
16
15
  import fs4 from 'node:fs/promises';
17
- import { execa } from 'execa';
18
- import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
16
+ import child_process from 'node:child_process';
17
+ import tty from 'node:tty';
18
+ import fsExtra, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
19
19
  import prettier from 'prettier';
20
- import { Transform } from 'node:stream';
20
+ import { execa } from 'execa';
21
21
  import pino from 'pino';
22
22
  import pretty from 'pino-pretty';
23
- import fsExtra from 'fs-extra';
23
+ import fsExtra$1 from 'fs-extra';
24
24
 
25
25
  var __filename = fileURLToPath(import.meta.url);
26
26
  var __dirname = path.dirname(__filename);
27
+ var analyticsInstance = null;
28
+ function getAnalytics() {
29
+ return analyticsInstance;
30
+ }
27
31
  var PosthogAnalytics = class {
28
32
  sessionId;
29
33
  client;
@@ -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 = {};
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;
692
+ hasRequiredShellQuote = 1;
693
+
694
+ shellQuote.quote = requireQuote();
695
+ shellQuote.parse = requireParse();
696
+ return shellQuote;
697
+ }
698
+
699
+ var shellQuoteExports = requireShellQuote();
700
+ var shellQuote2 = /*@__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)
@@ -441,13 +724,18 @@ const format = (open, close) => {
441
724
  // Handle nested colors.
442
725
 
443
726
  // We could have done this, but it's too slow (as of Node.js 22).
444
- // return openCode + string.replaceAll(closeCode, openCode) + closeCode;
727
+ // return openCode + string.replaceAll(closeCode, (close === 22 ? closeCode : '') + openCode) + closeCode;
445
728
 
446
729
  let result = openCode;
447
730
  let lastIndex = 0;
448
731
 
732
+ // SGR 22 resets both bold (1) and dim (2). When we encounter a nested
733
+ // close for styles that use 22, we need to re-open the outer style.
734
+ const reopenOnNestedClose = close === 22;
735
+ const replaceCode = (reopenOnNestedClose ? closeCode : '') + openCode;
736
+
449
737
  while (index !== -1) {
450
- result += string.slice(lastIndex, index) + openCode;
738
+ result += string.slice(lastIndex, index) + replaceCode;
451
739
  lastIndex = index + closeCode.length;
452
740
  index = string.indexOf(closeCode, lastIndex);
453
741
  }
@@ -549,18 +837,20 @@ var yoctocolors = /*#__PURE__*/Object.freeze({
549
837
  yellowBright: yellowBright
550
838
  });
551
839
 
552
- const isUnicodeSupported = h.platform !== 'win32' || Boolean(h.env.WT_SESSION);
840
+ const isUnicodeSupported = y$1.platform !== 'win32'
841
+ || Boolean(y$1.env.WT_SESSION) // Windows Terminal
842
+ || y$1.env.TERM_PROGRAM === 'vscode';
553
843
 
554
844
  const isInteractive = stream => Boolean(
555
845
  stream.isTTY
556
- && h.env.TERM !== 'dumb'
557
- && !('CI' in h.env),
846
+ && y$1.env.TERM !== 'dumb'
847
+ && !('CI' in y$1.env),
558
848
  );
559
849
 
560
850
  const infoSymbol = blue(isUnicodeSupported ? 'ℹ' : 'i');
561
851
  const successSymbol = green(isUnicodeSupported ? '✔' : '√');
562
852
  const warningSymbol = yellow(isUnicodeSupported ? '⚠' : '‼');
563
- const errorSymbol = red(isUnicodeSupported ? '✖️' : '×');
853
+ const errorSymbol = red(isUnicodeSupported ? '' : '×');
564
854
 
565
855
  const defaultSpinner = {
566
856
  frames: isUnicodeSupported
@@ -603,7 +893,7 @@ class YoctoSpinner {
603
893
  this.#frames = spinner.frames;
604
894
  this.#interval = spinner.interval;
605
895
  this.#text = options.text ?? '';
606
- this.#stream = options.stream ?? h.stderr;
896
+ this.#stream = options.stream ?? y$1.stderr;
607
897
  this.#color = options.color ?? 'cyan';
608
898
  this.#isInteractive = isInteractive(this.#stream);
609
899
  this.#exitHandlerBound = this.#exitHandler.bind(this);
@@ -675,8 +965,8 @@ class YoctoSpinner {
675
965
  return this.#text;
676
966
  }
677
967
 
678
- set text(value = '') {
679
- this.#text = value;
968
+ set text(value) {
969
+ this.#text = value ?? '';
680
970
  this.#render();
681
971
  }
682
972
 
@@ -740,7 +1030,7 @@ class YoctoSpinner {
740
1030
 
741
1031
  #lineCount(text) {
742
1032
  const width = this.#stream.columns ?? 80;
743
- const lines = text.split('\n');
1033
+ const lines = stripVTControlCharacters(text).split('\n');
744
1034
 
745
1035
  let lineCount = 0;
746
1036
  for (const line of lines) {
@@ -763,13 +1053,13 @@ class YoctoSpinner {
763
1053
  }
764
1054
 
765
1055
  #subscribeToProcessEvents() {
766
- h.once('SIGINT', this.#exitHandlerBound);
767
- h.once('SIGTERM', this.#exitHandlerBound);
1056
+ y$1.once('SIGINT', this.#exitHandlerBound);
1057
+ y$1.once('SIGTERM', this.#exitHandlerBound);
768
1058
  }
769
1059
 
770
1060
  #unsubscribeFromProcessEvents() {
771
- h.off('SIGINT', this.#exitHandlerBound);
772
- h.off('SIGTERM', this.#exitHandlerBound);
1061
+ y$1.off('SIGINT', this.#exitHandlerBound);
1062
+ y$1.off('SIGTERM', this.#exitHandlerBound);
773
1063
  }
774
1064
 
775
1065
  #exitHandler(signal) {
@@ -780,7 +1070,7 @@ class YoctoSpinner {
780
1070
  // SIGINT: 128 + 2
781
1071
  // SIGTERM: 128 + 15
782
1072
  const exitCode = signal === 'SIGINT' ? 130 : (signal === 'SIGTERM' ? 143 : 1);
783
- h.exit(exitCode);
1073
+ y$1.exit(exitCode);
784
1074
  }
785
1075
  }
786
1076
 
@@ -789,46 +1079,86 @@ function yoctoSpinner(options) {
789
1079
  }
790
1080
 
791
1081
  var LogLevel = {
792
- INFO: "info"};
793
- var Logger = class {
794
- logger;
1082
+ INFO: "info",
1083
+ ERROR: "error"};
1084
+ var MastraLogger = class {
1085
+ name;
1086
+ level;
795
1087
  transports;
796
1088
  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({
1089
+ this.name = options.name || "Mastra";
1090
+ this.level = options.level || LogLevel.ERROR;
1091
+ this.transports = new Map(Object.entries(options.transports || {}));
1092
+ }
1093
+ getTransports() {
1094
+ return this.transports;
1095
+ }
1096
+ trackException(_error) {
1097
+ }
1098
+ async getLogs(transportId, params) {
1099
+ if (!transportId || !this.transports.has(transportId)) {
1100
+ return { logs: [], total: 0, page: params?.page ?? 1, perPage: params?.perPage ?? 100, hasMore: false };
1101
+ }
1102
+ return this.transports.get(transportId).getLogs(params) ?? {
1103
+ logs: [],
1104
+ total: 0,
1105
+ page: params?.page ?? 1,
1106
+ perPage: params?.perPage ?? 100,
1107
+ hasMore: false
1108
+ };
1109
+ }
1110
+ async getLogsByRunId({
1111
+ transportId,
1112
+ runId,
1113
+ fromDate,
1114
+ toDate,
1115
+ logLevel,
1116
+ filters,
1117
+ page,
1118
+ perPage
1119
+ }) {
1120
+ if (!transportId || !this.transports.has(transportId) || !runId) {
1121
+ return { logs: [], total: 0, page: page ?? 1, perPage: perPage ?? 100, hasMore: false };
1122
+ }
1123
+ return this.transports.get(transportId).getLogsByRunId({ runId, fromDate, toDate, logLevel, filters, page, perPage }) ?? {
1124
+ logs: [],
1125
+ total: 0,
1126
+ page: page ?? 1,
1127
+ perPage: perPage ?? 100,
1128
+ hasMore: false
1129
+ };
1130
+ }
1131
+ };
1132
+
1133
+ var PinoLogger = class extends MastraLogger {
1134
+ logger;
1135
+ constructor(options = {}) {
1136
+ super(options);
1137
+ let prettyStream = void 0;
1138
+ if (!options.overrideDefaultTransports) {
1139
+ prettyStream = pretty({
812
1140
  colorize: true,
813
1141
  levelFirst: true,
814
1142
  ignore: "pid,hostname",
815
1143
  colorizeObjects: true,
816
1144
  translateTime: "SYS:standard",
817
1145
  singleLine: false
818
- }) : pino.multistream([
1146
+ });
1147
+ }
1148
+ const transportsAry = [...this.getTransports().entries()];
1149
+ this.logger = pino(
1150
+ {
1151
+ name: options.name || "app",
1152
+ level: options.level || LogLevel.INFO,
1153
+ formatters: options.formatters
1154
+ },
1155
+ options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? prettyStream : pino.multistream([
819
1156
  ...transportsAry.map(([, transport]) => ({
820
1157
  stream: transport,
821
1158
  level: options.level || LogLevel.INFO
822
1159
  })),
823
1160
  {
824
- stream: pretty({
825
- colorize: true,
826
- levelFirst: true,
827
- ignore: "pid,hostname",
828
- colorizeObjects: true,
829
- translateTime: "SYS:standard",
830
- singleLine: false
831
- }),
1161
+ stream: prettyStream,
832
1162
  level: options.level || LogLevel.INFO
833
1163
  }
834
1164
  ])
@@ -846,32 +1176,134 @@ var Logger = class {
846
1176
  error(message, args = {}) {
847
1177
  this.logger.error(args, message);
848
1178
  }
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);
1179
+ };
1180
+
1181
+ var args = ["-y", "@mastra/mcp-docs-server"];
1182
+ var createMcpConfig = (editor) => {
1183
+ if (editor === "vscode") {
1184
+ return {
1185
+ servers: {
1186
+ mastra: process.platform === `win32` ? {
1187
+ command: "cmd",
1188
+ args: ["/c", "npx", ...args],
1189
+ type: "stdio"
1190
+ } : {
1191
+ command: "npx",
1192
+ args,
1193
+ type: "stdio"
856
1194
  }
857
- callback(null, chunk);
858
1195
  }
859
- });
1196
+ };
860
1197
  }
861
- async getLogs(transportId) {
862
- if (!transportId || !this.transports[transportId]) {
863
- return [];
1198
+ return {
1199
+ mcpServers: {
1200
+ mastra: {
1201
+ command: "npx",
1202
+ args
1203
+ }
864
1204
  }
865
- return this.transports[transportId].getLogs();
1205
+ };
1206
+ };
1207
+ function makeConfig(original, editor) {
1208
+ if (editor === "vscode") {
1209
+ return {
1210
+ ...original,
1211
+ servers: {
1212
+ ...original?.servers || {},
1213
+ ...createMcpConfig(editor).servers
1214
+ }
1215
+ };
866
1216
  }
867
- async getLogsByRunId({ runId, transportId }) {
868
- return this.transports[transportId]?.getLogsByRunId({ runId });
1217
+ return {
1218
+ ...original,
1219
+ mcpServers: {
1220
+ ...original?.mcpServers || {},
1221
+ ...createMcpConfig(editor).mcpServers
1222
+ }
1223
+ };
1224
+ }
1225
+ async function writeMergedConfig(configPath, editor) {
1226
+ const configExists = existsSync(configPath);
1227
+ const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor);
1228
+ await ensureFile(configPath);
1229
+ await writeJSON(configPath, config, {
1230
+ spaces: 2
1231
+ });
1232
+ }
1233
+ var windsurfGlobalMCPConfigPath = path.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1234
+ var cursorGlobalMCPConfigPath = path.join(os.homedir(), ".cursor", "mcp.json");
1235
+ path.join(process.cwd(), ".vscode", "mcp.json");
1236
+ var vscodeGlobalMCPConfigPath = path.join(
1237
+ os.homedir(),
1238
+ process.platform === "win32" ? path.join("AppData", "Roaming", "Code", "User", "settings.json") : process.platform === "darwin" ? path.join("Library", "Application Support", "Code", "User", "settings.json") : path.join(".config", "Code", "User", "settings.json")
1239
+ );
1240
+ async function installMastraDocsMCPServer({ editor, directory }) {
1241
+ if (editor === `cursor`) {
1242
+ await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"), "cursor");
1243
+ }
1244
+ if (editor === `vscode`) {
1245
+ await writeMergedConfig(path.join(directory, ".vscode", "mcp.json"), "vscode");
1246
+ }
1247
+ if (editor === `cursor-global`) {
1248
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1249
+ if (alreadyInstalled) {
1250
+ return;
1251
+ }
1252
+ await writeMergedConfig(cursorGlobalMCPConfigPath, "cursor-global");
1253
+ }
1254
+ if (editor === `windsurf`) {
1255
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1256
+ if (alreadyInstalled) {
1257
+ return;
1258
+ }
1259
+ await writeMergedConfig(windsurfGlobalMCPConfigPath, editor);
1260
+ }
1261
+ }
1262
+ async function globalMCPIsAlreadyInstalled(editor) {
1263
+ let configPath = ``;
1264
+ if (editor === "windsurf") {
1265
+ configPath = windsurfGlobalMCPConfigPath;
1266
+ } else if (editor === "cursor-global") {
1267
+ configPath = cursorGlobalMCPConfigPath;
1268
+ } else if (editor === "vscode") {
1269
+ configPath = vscodeGlobalMCPConfigPath;
1270
+ }
1271
+ if (!configPath || !existsSync(configPath)) {
1272
+ return false;
1273
+ }
1274
+ try {
1275
+ const configContents = await readJSON(configPath);
1276
+ if (!configContents) return false;
1277
+ if (editor === "vscode") {
1278
+ if (!configContents.servers) return false;
1279
+ const hasMastraMCP2 = Object.values(configContents.servers).some(
1280
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1281
+ );
1282
+ return hasMastraMCP2;
1283
+ }
1284
+ if (!configContents?.mcpServers) return false;
1285
+ const hasMastraMCP = Object.values(configContents.mcpServers).some(
1286
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1287
+ );
1288
+ return hasMastraMCP;
1289
+ } catch {
1290
+ return false;
1291
+ }
1292
+ }
1293
+ function getPackageManagerAddCommand(pm) {
1294
+ switch (pm) {
1295
+ case "npm":
1296
+ return "install --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false";
1297
+ case "yarn":
1298
+ return "add";
1299
+ case "pnpm":
1300
+ return "add --loglevel=error";
1301
+ case "bun":
1302
+ return "add";
1303
+ default:
1304
+ return "add";
869
1305
  }
870
- };
871
- function createLogger(options) {
872
- return new Logger(options);
873
1306
  }
874
-
875
1307
  var DepsService = class {
876
1308
  packageManager;
877
1309
  constructor() {
@@ -906,14 +1338,10 @@ var DepsService = class {
906
1338
  }
907
1339
  }
908
1340
  async installPackages(packages) {
909
- let runCommand = this.packageManager;
910
- if (this.packageManager === "npm") {
911
- runCommand = `${this.packageManager} i`;
912
- } else {
913
- runCommand = `${this.packageManager} add`;
914
- }
1341
+ const pm = this.packageManager;
1342
+ const installCommand = getPackageManagerAddCommand(pm);
915
1343
  const packageList = packages.join(" ");
916
- return execa(`${runCommand} ${packageList}`, {
1344
+ return execa(`${pm} ${installCommand} ${packageList}`, {
917
1345
  all: true,
918
1346
  shell: true,
919
1347
  stdio: "inherit"
@@ -949,13 +1377,6 @@ var DepsService = class {
949
1377
  throw err;
950
1378
  }
951
1379
  }
952
- async getPackageVersion() {
953
- const __filename = fileURLToPath(import.meta.url);
954
- const __dirname = dirname(__filename);
955
- const pkgJsonPath = path.join(__dirname, "..", "package.json");
956
- const content = await fsExtra3.readJSON(pkgJsonPath);
957
- return content.version;
958
- }
959
1380
  async addScriptsToPackageJson(scripts) {
960
1381
  const packageJson = JSON.parse(await fs4.readFile("package.json", "utf-8"));
961
1382
  packageJson.scripts = {
@@ -965,95 +1386,6 @@ var DepsService = class {
965
1386
  await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
966
1387
  }
967
1388
  };
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";
1001
- }
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
1012
- }
1013
- }
1014
- };
1015
- function makeConfig(original) {
1016
- return {
1017
- ...original,
1018
- mcpServers: {
1019
- ...original?.mcpServers || {},
1020
- ...mcpConfig.mcpServers
1021
- }
1022
- };
1023
- }
1024
- async function writeMergedConfig(configPath) {
1025
- const configExists = existsSync(configPath);
1026
- const config = makeConfig(configExists ? await readJSON(configPath) : {});
1027
- await ensureFile(configPath);
1028
- await writeJSON(configPath, config, {
1029
- spaces: 2
1030
- });
1031
- }
1032
- var windsurfGlobalMCPConfigPath = path.join(os.homedir(), ".codeium", "windsurf", "mcp_config.json");
1033
- async function installMastraDocsMCPServer({
1034
- editor,
1035
- directory
1036
- }) {
1037
- if (editor === `cursor`) await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"));
1038
- const windsurfIsInstalled = await globalWindsurfMCPIsAlreadyInstalled();
1039
- if (editor === `windsurf` && !windsurfIsInstalled) await writeMergedConfig(windsurfGlobalMCPConfigPath);
1040
- }
1041
- async function globalWindsurfMCPIsAlreadyInstalled() {
1042
- if (!existsSync(windsurfGlobalMCPConfigPath)) {
1043
- return false;
1044
- }
1045
- try {
1046
- const configContents = await readJSON(windsurfGlobalMCPConfigPath);
1047
- if (!configContents?.mcpServers) return false;
1048
- const hasMastraMCP = Object.values(configContents.mcpServers).some(
1049
- (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1050
- );
1051
- return hasMastraMCP;
1052
- } catch (e) {
1053
- console.error(e);
1054
- return false;
1055
- }
1056
- }
1057
1389
  var EnvService = class {
1058
1390
  };
1059
1391
  var FileEnvService = class extends EnvService {
@@ -1092,7 +1424,7 @@ var FileEnvService = class extends EnvService {
1092
1424
  ${key}=${value}`;
1093
1425
  }
1094
1426
  await this.writeFile({ filePath, data });
1095
- console.log(`${key} set to ${value} in ENV file.`);
1427
+ console.info(`${key} set to ${value} in ENV file.`);
1096
1428
  return data;
1097
1429
  }
1098
1430
  async getEnvValue(key) {
@@ -1129,15 +1461,15 @@ var FileService = class {
1129
1461
  const filePath = path.resolve(__dirname, "starter-files", inputFile);
1130
1462
  const fileString = fs3__default__default.readFileSync(filePath, "utf8");
1131
1463
  if (fs3__default__default.existsSync(outputFilePath) && !replaceIfExists) {
1132
- console.log(`${outputFilePath} already exists`);
1464
+ console.info(`${outputFilePath} already exists`);
1133
1465
  return false;
1134
1466
  }
1135
- await fsExtra3.outputFile(outputFilePath, fileString);
1467
+ await fsExtra.outputFile(outputFilePath, fileString);
1136
1468
  return true;
1137
1469
  }
1138
1470
  async setupEnvFile({ dbUrl }) {
1139
1471
  const envPath = path.join(process.cwd(), ".env.development");
1140
- await fsExtra3.ensureFile(envPath);
1472
+ await fsExtra.ensureFile(envPath);
1141
1473
  const fileEnvService = new FileEnvService(envPath);
1142
1474
  await fileEnvService.setEnvValue("DB_URL", dbUrl);
1143
1475
  }
@@ -1160,81 +1492,77 @@ var FileService = class {
1160
1492
  fs3__default__default.writeFileSync(filePath, fileContent);
1161
1493
  }
1162
1494
  };
1163
- createLogger({
1164
- name: "Mastra CLI",
1165
- level: "debug"
1166
- });
1167
1495
  var exec = util.promisify(child_process.exec);
1168
- var getAISDKPackage = (llmProvider) => {
1169
- switch (llmProvider) {
1170
- case "openai":
1171
- return "@ai-sdk/openai";
1172
- case "anthropic":
1173
- return "@ai-sdk/anthropic";
1174
- case "groq":
1175
- return "@ai-sdk/groq";
1176
- case "google":
1177
- return "@ai-sdk/google";
1178
- case "cerebras":
1179
- return "@ai-sdk/cerebras";
1180
- default:
1181
- return "@ai-sdk/openai";
1182
- }
1183
- };
1184
- var getProviderImportAndModelItem = (llmProvider) => {
1185
- let providerImport = "";
1186
- let modelItem = "";
1496
+ var getModelIdentifier = (llmProvider) => {
1187
1497
  if (llmProvider === "openai") {
1188
- providerImport = `import { openai } from '${getAISDKPackage(llmProvider)}';`;
1189
- modelItem = `openai('gpt-4o')`;
1498
+ return `'openai/gpt-4o-mini'`;
1190
1499
  } else if (llmProvider === "anthropic") {
1191
- providerImport = `import { anthropic } from '${getAISDKPackage(llmProvider)}';`;
1192
- modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
1500
+ return `'anthropic/claude-sonnet-4-5-20250929'`;
1193
1501
  } else if (llmProvider === "groq") {
1194
- providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
1195
- modelItem = `groq('llama-3.3-70b-versatile')`;
1502
+ return `'groq/llama-3.3-70b-versatile'`;
1196
1503
  } else if (llmProvider === "google") {
1197
- providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1198
- modelItem = `google('gemini-1.5-pro-latest')`;
1504
+ return `'google/gemini-2.5-pro'`;
1199
1505
  } else if (llmProvider === "cerebras") {
1200
- providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1201
- modelItem = `cerebras('llama-3.3-70b')`;
1506
+ return `'cerebras/llama-3.3-70b'`;
1507
+ } else if (llmProvider === "mistral") {
1508
+ return `'mistral/mistral-medium-2508'`;
1202
1509
  }
1203
- return { providerImport, modelItem };
1204
1510
  };
1205
- async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1206
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1511
+ async function writeAgentSample(llmProvider, destPath, addExampleTool, addScorers) {
1512
+ const modelString = getModelIdentifier(llmProvider);
1207
1513
  const instructions = `
1208
- You are a helpful weather assistant that provides accurate weather information.
1514
+ You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.
1209
1515
 
1210
1516
  Your primary function is to help users get weather details for specific locations. When responding:
1211
1517
  - Always ask for a location if none is provided
1212
- - If the location name isn\u2019t in English, please translate it
1518
+ - If the location name isn't in English, please translate it
1213
1519
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1214
1520
  - Include relevant details like humidity, wind conditions, and precipitation
1215
1521
  - Keep responses concise but informative
1522
+ - If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.
1523
+ - If the user asks for activities, respond in the format they request.
1216
1524
 
1217
1525
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1218
1526
  `;
1219
1527
  const content = `
1220
- ${providerImport}
1221
1528
  import { Agent } from '@mastra/core/agent';
1222
1529
  import { Memory } from '@mastra/memory';
1223
- ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1530
+ import { LibSQLStore } from '@mastra/libsql';
1531
+ ${addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : ""}
1532
+ ${addScorers ? `import { scorers } from '../scorers/weather-scorer';` : ""}
1224
1533
 
1225
1534
  export const weatherAgent = new Agent({
1226
1535
  name: 'Weather Agent',
1227
1536
  instructions: \`${instructions}\`,
1228
- model: ${modelItem},
1537
+ model: ${modelString},
1229
1538
  ${addExampleTool ? "tools: { weatherTool }," : ""}
1539
+ ${addScorers ? `scorers: {
1540
+ toolCallAppropriateness: {
1541
+ scorer: scorers.toolCallAppropriatenessScorer,
1542
+ sampling: {
1543
+ type: 'ratio',
1544
+ rate: 1,
1545
+ },
1546
+ },
1547
+ completeness: {
1548
+ scorer: scorers.completenessScorer,
1549
+ sampling: {
1550
+ type: 'ratio',
1551
+ rate: 1,
1552
+ },
1553
+ },
1554
+ translation: {
1555
+ scorer: scorers.translationScorer,
1556
+ sampling: {
1557
+ type: 'ratio',
1558
+ rate: 1,
1559
+ },
1560
+ },
1561
+ },` : ""}
1230
1562
  memory: new Memory({
1231
- options: {
1232
- lastMessages: 10,
1233
- semanticRecall: false,
1234
- threads: {
1235
- generateTitle: false
1236
- }
1237
- }
1563
+ storage: new LibSQLStore({
1564
+ url: "file:../mastra.db", // path is relative to the .mastra/output directory
1565
+ })
1238
1566
  })
1239
1567
  });
1240
1568
  `;
@@ -1245,139 +1573,156 @@ export const weatherAgent = new Agent({
1245
1573
  await fs4.writeFile(destPath, "");
1246
1574
  await fs4.writeFile(destPath, formattedContent);
1247
1575
  }
1248
- async function writeWorkflowSample(destPath, llmProvider) {
1249
- const { providerImport, modelItem } = getProviderImportAndModelItem(llmProvider);
1250
- const content = `${providerImport}
1251
- import { Agent } from '@mastra/core/agent';
1252
- import { Step, Workflow } from '@mastra/core/workflows';
1576
+ async function writeWorkflowSample(destPath) {
1577
+ const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';
1253
1578
  import { z } from 'zod';
1254
1579
 
1255
- const llm = ${modelItem};
1256
-
1257
- const agent = new Agent({
1258
- name: 'Weather Agent',
1259
- model: llm,
1260
- instructions: \`
1261
- You are a local activities and travel expert who excels at weather-based planning. Analyze the weather data and provide practical activity recommendations.
1262
-
1263
- For each day in the forecast, structure your response exactly as follows:
1264
-
1265
- \u{1F4C5} [Day, Month Date, Year]
1266
- \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
1267
-
1268
- \u{1F321}\uFE0F WEATHER SUMMARY
1269
- \u2022 Conditions: [brief description]
1270
- \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1271
- \u2022 Precipitation: [X% chance]
1272
-
1273
- \u{1F305} MORNING ACTIVITIES
1274
- Outdoor:
1275
- \u2022 [Activity Name] - [Brief description including specific location/route]
1276
- Best timing: [specific time range]
1277
- Note: [relevant weather consideration]
1278
-
1279
- \u{1F31E} AFTERNOON ACTIVITIES
1280
- Outdoor:
1281
- \u2022 [Activity Name] - [Brief description including specific location/route]
1282
- Best timing: [specific time range]
1283
- Note: [relevant weather consideration]
1284
-
1285
- \u{1F3E0} INDOOR ALTERNATIVES
1286
- \u2022 [Activity Name] - [Brief description including specific venue]
1287
- Ideal for: [weather condition that would trigger this alternative]
1288
-
1289
- \u26A0\uFE0F SPECIAL CONSIDERATIONS
1290
- \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1291
-
1292
- Guidelines:
1293
- - Suggest 2-3 time-specific outdoor activities per day
1294
- - Include 1-2 indoor backup options
1295
- - For precipitation >50%, lead with indoor activities
1296
- - All activities must be specific to the location
1297
- - Include specific venues, trails, or locations
1298
- - Consider activity intensity based on temperature
1299
- - Keep descriptions concise but informative
1300
-
1301
- Maintain this exact formatting for consistency, using the emoji and section headers as shown.
1302
- \`,
1303
- });
1304
-
1305
- const forecastSchema = z.array(
1306
- z.object({
1307
- date: z.string(),
1308
- maxTemp: z.number(),
1309
- minTemp: z.number(),
1310
- precipitationChance: z.number(),
1311
- condition: z.string(),
1312
- location: z.string(),
1313
- }),
1314
- );
1580
+ const forecastSchema = z.object({
1581
+ date: z.string(),
1582
+ maxTemp: z.number(),
1583
+ minTemp: z.number(),
1584
+ precipitationChance: z.number(),
1585
+ condition: z.string(),
1586
+ location: z.string(),
1587
+ })
1315
1588
 
1316
- const fetchWeather = new Step({
1317
- id: 'fetch-weather',
1318
- description: 'Fetches weather forecast for a given city',
1319
- inputSchema: z.object({
1320
- city: z.string().describe('The city to get the weather for'),
1321
- }),
1322
- outputSchema: forecastSchema,
1323
- execute: async ({ context }) => {
1324
- const triggerData = context?.getStepResult<{ city: string }>('trigger');
1589
+ function getWeatherCondition(code: number): string {
1590
+ const conditions: Record<number, string> = {
1591
+ 0: 'Clear sky',
1592
+ 1: 'Mainly clear',
1593
+ 2: 'Partly cloudy',
1594
+ 3: 'Overcast',
1595
+ 45: 'Foggy',
1596
+ 48: 'Depositing rime fog',
1597
+ 51: 'Light drizzle',
1598
+ 53: 'Moderate drizzle',
1599
+ 55: 'Dense drizzle',
1600
+ 61: 'Slight rain',
1601
+ 63: 'Moderate rain',
1602
+ 65: 'Heavy rain',
1603
+ 71: 'Slight snow fall',
1604
+ 73: 'Moderate snow fall',
1605
+ 75: 'Heavy snow fall',
1606
+ 95: 'Thunderstorm',
1607
+ }
1608
+ return conditions[code] || 'Unknown'
1609
+ }
1325
1610
 
1326
- if (!triggerData) {
1327
- throw new Error('Trigger data not found');
1611
+ const fetchWeather = createStep({
1612
+ id: 'fetch-weather',
1613
+ description: 'Fetches weather forecast for a given city',
1614
+ inputSchema: z.object({
1615
+ city: z.string().describe('The city to get the weather for'),
1616
+ }),
1617
+ outputSchema: forecastSchema,
1618
+ execute: async ({ inputData }) => {
1619
+ if (!inputData) {
1620
+ throw new Error('Input data not found');
1328
1621
  }
1329
1622
 
1330
- const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(triggerData.city)}&count=1\`;
1623
+ const geocodingUrl = \`https://geocoding-api.open-meteo.com/v1/search?name=\${encodeURIComponent(inputData.city)}&count=1\`;
1331
1624
  const geocodingResponse = await fetch(geocodingUrl);
1332
1625
  const geocodingData = (await geocodingResponse.json()) as {
1333
1626
  results: { latitude: number; longitude: number; name: string }[];
1334
1627
  };
1335
1628
 
1336
1629
  if (!geocodingData.results?.[0]) {
1337
- throw new Error(\`Location '\${triggerData.city}' not found\`);
1630
+ throw new Error(\`Location '\${inputData.city}' not found\`);
1338
1631
  }
1339
1632
 
1340
1633
  const { latitude, longitude, name } = geocodingData.results[0];
1341
1634
 
1342
- 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\`;
1635
+ const weatherUrl = \`https://api.open-meteo.com/v1/forecast?latitude=\${latitude}&longitude=\${longitude}&current=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\`;
1343
1636
  const response = await fetch(weatherUrl);
1344
1637
  const data = (await response.json()) as {
1345
- daily: {
1346
- time: string[];
1347
- temperature_2m_max: number[];
1348
- temperature_2m_min: number[];
1349
- precipitation_probability_mean: number[];
1350
- weathercode: number[];
1351
- };
1352
- };
1638
+ current: {
1639
+ time: string
1640
+ precipitation: number
1641
+ weathercode: number
1642
+ }
1643
+ hourly: {
1644
+ precipitation_probability: number[]
1645
+ temperature_2m: number[]
1646
+ }
1647
+ }
1353
1648
 
1354
- const forecast = data.daily.time.map((date: string, index: number) => ({
1355
- date,
1356
- maxTemp: data.daily.temperature_2m_max[index],
1357
- minTemp: data.daily.temperature_2m_min[index],
1358
- precipitationChance: data.daily.precipitation_probability_mean[index],
1359
- condition: getWeatherCondition(data.daily.weathercode[index]!),
1360
- location: name,
1361
- }));
1649
+ const forecast = {
1650
+ date: new Date().toISOString(),
1651
+ maxTemp: Math.max(...data.hourly.temperature_2m),
1652
+ minTemp: Math.min(...data.hourly.temperature_2m),
1653
+ condition: getWeatherCondition(data.current.weathercode),
1654
+ precipitationChance: data.hourly.precipitation_probability.reduce(
1655
+ (acc, curr) => Math.max(acc, curr),
1656
+ 0
1657
+ ),
1658
+ location: name
1659
+ }
1362
1660
 
1363
1661
  return forecast;
1364
1662
  },
1365
1663
  });
1366
1664
 
1367
1665
 
1368
- const planActivities = new Step({
1666
+ const planActivities = createStep({
1369
1667
  id: 'plan-activities',
1370
1668
  description: 'Suggests activities based on weather conditions',
1371
- execute: async ({ context, mastra }) => {
1372
- const forecast = context?.getStepResult(fetchWeather);
1669
+ inputSchema: forecastSchema,
1670
+ outputSchema: z.object({
1671
+ activities: z.string(),
1672
+ }),
1673
+ execute: async ({ inputData, mastra }) => {
1674
+ const forecast = inputData
1675
+
1676
+ if (!forecast) {
1677
+ throw new Error('Forecast data not found')
1678
+ }
1373
1679
 
1374
- if (!forecast || forecast.length === 0) {
1375
- throw new Error('Forecast data not found');
1680
+ const agent = mastra?.getAgent('weatherAgent');
1681
+ if (!agent) {
1682
+ throw new Error('Weather agent not found');
1376
1683
  }
1377
1684
 
1378
- const prompt = \`Based on the following weather forecast for \${forecast[0]?.location}, suggest appropriate activities:
1685
+ const prompt = \`Based on the following weather forecast for \${forecast.location}, suggest appropriate activities:
1379
1686
  \${JSON.stringify(forecast, null, 2)}
1380
- \`;
1687
+ For each day in the forecast, structure your response exactly as follows:
1688
+
1689
+ \u{1F4C5} [Day, Month Date, Year]
1690
+ \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
1691
+
1692
+ \u{1F321}\uFE0F WEATHER SUMMARY
1693
+ \u2022 Conditions: [brief description]
1694
+ \u2022 Temperature: [X\xB0C/Y\xB0F to A\xB0C/B\xB0F]
1695
+ \u2022 Precipitation: [X% chance]
1696
+
1697
+ \u{1F305} MORNING ACTIVITIES
1698
+ Outdoor:
1699
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1700
+ Best timing: [specific time range]
1701
+ Note: [relevant weather consideration]
1702
+
1703
+ \u{1F31E} AFTERNOON ACTIVITIES
1704
+ Outdoor:
1705
+ \u2022 [Activity Name] - [Brief description including specific location/route]
1706
+ Best timing: [specific time range]
1707
+ Note: [relevant weather consideration]
1708
+
1709
+ \u{1F3E0} INDOOR ALTERNATIVES
1710
+ \u2022 [Activity Name] - [Brief description including specific venue]
1711
+ Ideal for: [weather condition that would trigger this alternative]
1712
+
1713
+ \u26A0\uFE0F SPECIAL CONSIDERATIONS
1714
+ \u2022 [Any relevant weather warnings, UV index, wind conditions, etc.]
1715
+
1716
+ Guidelines:
1717
+ - Suggest 2-3 time-specific outdoor activities per day
1718
+ - Include 1-2 indoor backup options
1719
+ - For precipitation >50%, lead with indoor activities
1720
+ - All activities must be specific to the location
1721
+ - Include specific venues, trails, or locations
1722
+ - Consider activity intensity based on temperature
1723
+ - Keep descriptions concise but informative
1724
+
1725
+ Maintain this exact formatting for consistency, using the emoji and section headers as shown.\`;
1381
1726
 
1382
1727
  const response = await agent.stream([
1383
1728
  {
@@ -1387,7 +1732,7 @@ const planActivities = new Step({
1387
1732
  ]);
1388
1733
 
1389
1734
  let activitiesText = '';
1390
-
1735
+
1391
1736
  for await (const chunk of response.textStream) {
1392
1737
  process.stdout.write(chunk);
1393
1738
  activitiesText += chunk;
@@ -1399,35 +1744,16 @@ const planActivities = new Step({
1399
1744
  },
1400
1745
  });
1401
1746
 
1402
- function getWeatherCondition(code: number): string {
1403
- const conditions: Record<number, string> = {
1404
- 0: 'Clear sky',
1405
- 1: 'Mainly clear',
1406
- 2: 'Partly cloudy',
1407
- 3: 'Overcast',
1408
- 45: 'Foggy',
1409
- 48: 'Depositing rime fog',
1410
- 51: 'Light drizzle',
1411
- 53: 'Moderate drizzle',
1412
- 55: 'Dense drizzle',
1413
- 61: 'Slight rain',
1414
- 63: 'Moderate rain',
1415
- 65: 'Heavy rain',
1416
- 71: 'Slight snow fall',
1417
- 73: 'Moderate snow fall',
1418
- 75: 'Heavy snow fall',
1419
- 95: 'Thunderstorm',
1420
- };
1421
- return conditions[code] || 'Unknown';
1422
- }
1423
-
1424
- const weatherWorkflow = new Workflow({
1425
- name: 'weather-workflow',
1426
- triggerSchema: z.object({
1747
+ const weatherWorkflow = createWorkflow({
1748
+ id: 'weather-workflow',
1749
+ inputSchema: z.object({
1427
1750
  city: z.string().describe('The city to get the weather for'),
1428
1751
  }),
1752
+ outputSchema: z.object({
1753
+ activities: z.string(),
1754
+ })
1429
1755
  })
1430
- .step(fetchWeather)
1756
+ .then(fetchWeather)
1431
1757
  .then(planActivities);
1432
1758
 
1433
1759
  weatherWorkflow.commit();
@@ -1444,27 +1770,121 @@ async function writeToolSample(destPath) {
1444
1770
  const fileService = new FileService();
1445
1771
  await fileService.copyStarterFile("tools.ts", destPath);
1446
1772
  }
1773
+ async function writeScorersSample(llmProvider, destPath) {
1774
+ const modelString = getModelIdentifier(llmProvider);
1775
+ const content = `import { z } from 'zod';
1776
+ import { createToolCallAccuracyScorerCode } from '@mastra/evals/scorers/code';
1777
+ import { createCompletenessScorer } from '@mastra/evals/scorers/code';
1778
+ import { createScorer } from '@mastra/core/scores';
1779
+
1780
+ export const toolCallAppropriatenessScorer = createToolCallAccuracyScorerCode({
1781
+ expectedTool: 'weatherTool',
1782
+ strictMode: false,
1783
+ });
1784
+
1785
+ export const completenessScorer = createCompletenessScorer();
1786
+
1787
+ // Custom LLM-judged scorer: evaluates if non-English locations are translated appropriately
1788
+ export const translationScorer = createScorer({
1789
+ name: 'Translation Quality',
1790
+ description: 'Checks that non-English location names are translated and used correctly',
1791
+ type: 'agent',
1792
+ judge: {
1793
+ model: ${modelString},
1794
+ instructions:
1795
+ 'You are an expert evaluator of translation quality for geographic locations. ' +
1796
+ 'Determine whether the user text mentions a non-English location and whether the assistant correctly uses an English translation of that location. ' +
1797
+ 'Be lenient with transliteration differences and diacritics. ' +
1798
+ 'Return only the structured JSON matching the provided schema.',
1799
+ },
1800
+ })
1801
+ .preprocess(({ run }) => {
1802
+ const userText = (run.input?.inputMessages?.[0]?.content as string) || '';
1803
+ const assistantText = (run.output?.[0]?.content as string) || '';
1804
+ return { userText, assistantText };
1805
+ })
1806
+ .analyze({
1807
+ description: 'Extract location names and detect language/translation adequacy',
1808
+ outputSchema: z.object({
1809
+ nonEnglish: z.boolean(),
1810
+ translated: z.boolean(),
1811
+ confidence: z.number().min(0).max(1).default(1),
1812
+ explanation: z.string().default(''),
1813
+ }),
1814
+ createPrompt: ({ results }) => \`
1815
+ You are evaluating if a weather assistant correctly handled translation of a non-English location.
1816
+ User text:
1817
+ """
1818
+ \${results.preprocessStepResult.userText}
1819
+ """
1820
+ Assistant response:
1821
+ """
1822
+ \${results.preprocessStepResult.assistantText}
1823
+ """
1824
+ Tasks:
1825
+ 1) Identify if the user mentioned a location that appears non-English.
1826
+ 2) If non-English, check whether the assistant used a correct English translation of that location in its response.
1827
+ 3) Be lenient with transliteration differences (e.g., accents/diacritics).
1828
+ Return JSON with fields:
1829
+ {
1830
+ "nonEnglish": boolean,
1831
+ "translated": boolean,
1832
+ "confidence": number, // 0-1
1833
+ "explanation": string
1834
+ }
1835
+ \`,
1836
+ })
1837
+ .generateScore(({ results }) => {
1838
+ const r = (results as any)?.analyzeStepResult || {};
1839
+ if (!r.nonEnglish) return 1; // If not applicable, full credit
1840
+ if (r.translated) return Math.max(0, Math.min(1, 0.7 + 0.3 * (r.confidence ?? 1)));
1841
+ return 0; // Non-English but not translated
1842
+ })
1843
+ .generateReason(({ results, score }) => {
1844
+ const r = (results as any)?.analyzeStepResult || {};
1845
+ return \`Translation scoring: nonEnglish=\${r.nonEnglish ?? false}, translated=\${r.translated ?? false}, confidence=\${r.confidence ?? 0}. Score=\${score}. \${r.explanation ?? ''}\`;
1846
+ });
1847
+
1848
+ export const scorers = {
1849
+ toolCallAppropriatenessScorer,
1850
+ completenessScorer,
1851
+ translationScorer,
1852
+ };`;
1853
+ const formattedContent = await prettier.format(content, {
1854
+ parser: "typescript",
1855
+ singleQuote: true
1856
+ });
1857
+ await fs4.writeFile(destPath, formattedContent);
1858
+ }
1447
1859
  async function writeCodeSampleForComponents(llmprovider, component, destPath, importComponents) {
1448
1860
  switch (component) {
1449
1861
  case "agents":
1450
- return writeAgentSample(llmprovider, destPath, importComponents.includes("tools"));
1862
+ return writeAgentSample(
1863
+ llmprovider,
1864
+ destPath,
1865
+ importComponents.includes("tools"),
1866
+ importComponents.includes("scorers")
1867
+ );
1451
1868
  case "tools":
1452
1869
  return writeToolSample(destPath);
1453
1870
  case "workflows":
1454
- return writeWorkflowSample(destPath, llmprovider);
1871
+ return writeWorkflowSample(destPath);
1872
+ case "scorers":
1873
+ return writeScorersSample(llmprovider, destPath);
1455
1874
  default:
1456
1875
  return "";
1457
1876
  }
1458
1877
  }
1459
1878
  var createComponentsDir = async (dirPath, component) => {
1460
1879
  const componentPath = dirPath + `/${component}`;
1461
- await fsExtra3.ensureDir(componentPath);
1880
+ await fsExtra.ensureDir(componentPath);
1462
1881
  };
1463
1882
  var writeIndexFile = async ({
1464
1883
  dirPath,
1465
1884
  addAgent,
1466
1885
  addExample,
1467
- addWorkflow
1886
+ addWorkflow,
1887
+ addScorers
1468
1888
  }) => {
1469
1889
  const indexPath = dirPath + "/index.ts";
1470
1890
  const destPath = path.join(indexPath);
@@ -1472,7 +1892,8 @@ var writeIndexFile = async ({
1472
1892
  await fs4.writeFile(destPath, "");
1473
1893
  const filteredExports = [
1474
1894
  addWorkflow ? `workflows: { weatherWorkflow },` : "",
1475
- addAgent ? `agents: { weatherAgent },` : ""
1895
+ addAgent ? `agents: { weatherAgent },` : "",
1896
+ addScorers ? `scorers: { toolCallAppropriatenessScorer, completenessScorer, translationScorer },` : ""
1476
1897
  ].filter(Boolean);
1477
1898
  if (!addExample) {
1478
1899
  await fs4.writeFile(
@@ -1489,21 +1910,26 @@ export const mastra = new Mastra()
1489
1910
  destPath,
1490
1911
  `
1491
1912
  import { Mastra } from '@mastra/core/mastra';
1492
- import { createLogger } from '@mastra/core/logger';
1913
+ import { PinoLogger } from '@mastra/loggers';
1493
1914
  import { LibSQLStore } from '@mastra/libsql';
1494
- ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1495
- ${addAgent ? `import { weatherAgent } from './agents';` : ""}
1915
+ ${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ""}
1916
+ ${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ""}
1917
+ ${addScorers ? `import { toolCallAppropriatenessScorer, completenessScorer, translationScorer } from './scorers/weather-scorer';` : ""}
1496
1918
 
1497
1919
  export const mastra = new Mastra({
1498
1920
  ${filteredExports.join("\n ")}
1499
1921
  storage: new LibSQLStore({
1500
- // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1922
+ // stores observability, scores, ... into memory storage, if it needs to persist, change to file:../mastra.db
1501
1923
  url: ":memory:",
1502
1924
  }),
1503
- logger: createLogger({
1925
+ logger: new PinoLogger({
1504
1926
  name: 'Mastra',
1505
1927
  level: 'info',
1506
1928
  }),
1929
+ observability: {
1930
+ // Enables DefaultExporter and CloudExporter for AI tracing
1931
+ default: { enabled: true },
1932
+ },
1507
1933
  });
1508
1934
  `
1509
1935
  );
@@ -1511,7 +1937,6 @@ export const mastra = new Mastra({
1511
1937
  throw err;
1512
1938
  }
1513
1939
  };
1514
- yoctoSpinner({ text: "Installing Mastra core dependencies\n" });
1515
1940
  var getAPIKey = async (provider) => {
1516
1941
  let key = "OPENAI_API_KEY";
1517
1942
  switch (provider) {
@@ -1527,16 +1952,19 @@ var getAPIKey = async (provider) => {
1527
1952
  case "cerebras":
1528
1953
  key = "CEREBRAS_API_KEY";
1529
1954
  return key;
1955
+ case "mistral":
1956
+ key = "MISTRAL_API_KEY";
1957
+ return key;
1530
1958
  default:
1531
1959
  return key;
1532
1960
  }
1533
1961
  };
1534
- var writeAPIKey = async ({
1535
- provider,
1536
- apiKey = "your-api-key"
1537
- }) => {
1962
+ var writeAPIKey = async ({ provider, apiKey }) => {
1963
+ const envFileName = apiKey ? ".env" : ".env.example";
1538
1964
  const key = await getAPIKey(provider);
1539
- await exec(`echo ${key}=${apiKey} >> .env.development`);
1965
+ const escapedKey = shellQuote2.quote([key]);
1966
+ const escapedApiKey = shellQuote2.quote([apiKey ? apiKey : "your-api-key"]);
1967
+ await exec(`echo ${escapedKey}=${escapedApiKey} >> ${envFileName}`);
1540
1968
  };
1541
1969
  var createMastraDir = async (directory) => {
1542
1970
  let dir = directory.trim().split("/").filter((item) => item !== "");
@@ -1545,54 +1973,47 @@ var createMastraDir = async (directory) => {
1545
1973
  await fs4.access(dirPath);
1546
1974
  return { ok: false };
1547
1975
  } catch {
1548
- await fsExtra3.ensureDir(dirPath);
1976
+ await fsExtra.ensureDir(dirPath);
1549
1977
  return { ok: true, dirPath };
1550
1978
  }
1551
1979
  };
1552
1980
  var writeCodeSample = async (dirPath, component, llmProvider, importComponents) => {
1553
- const destPath = dirPath + `/${component}/index.ts`;
1981
+ const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;
1554
1982
  try {
1555
1983
  await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);
1556
1984
  } catch (err) {
1557
1985
  throw err;
1558
1986
  }
1559
1987
  };
1560
- var interactivePrompt = async () => {
1561
- pe(color2.inverse("Mastra Init"));
1562
- const mastraProject = await ve(
1988
+ var LLM_PROVIDERS = [
1989
+ { value: "openai", label: "OpenAI", hint: "recommended" },
1990
+ { value: "anthropic", label: "Anthropic" },
1991
+ { value: "groq", label: "Groq" },
1992
+ { value: "google", label: "Google" },
1993
+ { value: "cerebras", label: "Cerebras" },
1994
+ { value: "mistral", label: "Mistral" }
1995
+ ];
1996
+ var interactivePrompt = async (args2 = {}) => {
1997
+ const { skip = {}, options: { showBanner = true } = {} } = args2;
1998
+ if (showBanner) {
1999
+ Ie(color2.inverse(" Mastra Init "));
2000
+ }
2001
+ const mastraProject = await Ce(
1563
2002
  {
1564
- directory: () => ae({
2003
+ directory: () => he({
1565
2004
  message: "Where should we create the Mastra files? (default: src/)",
1566
2005
  placeholder: "src/",
1567
2006
  defaultValue: "src/"
1568
2007
  }),
1569
- components: () => $e({
1570
- message: "Choose components to install:",
1571
- options: [
1572
- { value: "agents", label: "Agents", hint: "recommended" },
1573
- {
1574
- value: "workflows",
1575
- label: "Workflows"
1576
- }
1577
- ]
1578
- }),
1579
- shouldAddTools: () => ce({
1580
- message: "Add tools?",
1581
- initialValue: false
1582
- }),
1583
- llmProvider: () => le({
1584
- message: "Select default provider:",
1585
- options: [
1586
- { value: "openai", label: "OpenAI", hint: "recommended" },
1587
- { value: "anthropic", label: "Anthropic" },
1588
- { value: "groq", label: "Groq" },
1589
- { value: "google", label: "Google" },
1590
- { value: "cerebras", label: "Cerebras" }
1591
- ]
2008
+ llmProvider: () => skip?.llmProvider ? void 0 : ve({
2009
+ message: "Select a default provider:",
2010
+ options: LLM_PROVIDERS
1592
2011
  }),
1593
2012
  llmApiKey: async ({ results: { llmProvider } }) => {
1594
- const keyChoice = await le({
1595
- message: `Enter your ${llmProvider} API key?`,
2013
+ if (skip?.llmApiKey) return void 0;
2014
+ const llmName = LLM_PROVIDERS.find((p6) => p6.value === llmProvider)?.label || "provider";
2015
+ const keyChoice = await ve({
2016
+ message: `Enter your ${llmName} API key?`,
1596
2017
  options: [
1597
2018
  { value: "skip", label: "Skip for now", hint: "default" },
1598
2019
  { value: "enter", label: "Enter API key" }
@@ -1600,46 +2021,78 @@ var interactivePrompt = async () => {
1600
2021
  initialValue: "skip"
1601
2022
  });
1602
2023
  if (keyChoice === "enter") {
1603
- return ae({
2024
+ return he({
1604
2025
  message: "Enter your API key:",
1605
- placeholder: "sk-..."
2026
+ placeholder: "sk-...",
2027
+ validate: (value) => {
2028
+ if (value.length === 0) return "API key cannot be empty";
2029
+ }
1606
2030
  });
1607
2031
  }
1608
2032
  return void 0;
1609
2033
  },
1610
- addExample: () => ce({
1611
- message: "Add example",
1612
- initialValue: false
1613
- }),
1614
2034
  configureEditorWithDocsMCP: async () => {
1615
- const windsurfIsAlreadyInstalled = await globalWindsurfMCPIsAlreadyInstalled();
1616
- const editor = await le({
1617
- message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
2035
+ const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
2036
+ const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
2037
+ const vscodeIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`vscode`);
2038
+ const editor = await ve({
2039
+ message: `Make your IDE into a Mastra expert? (Installs Mastra's MCP server)`,
1618
2040
  options: [
1619
2041
  { value: "skip", label: "Skip for now", hint: "default" },
1620
- { value: "cursor", label: "Cursor" },
2042
+ {
2043
+ value: "cursor",
2044
+ label: "Cursor (project only)",
2045
+ hint: cursorIsAlreadyInstalled ? `Already installed globally` : void 0
2046
+ },
2047
+ {
2048
+ value: "cursor-global",
2049
+ label: "Cursor (global, all projects)",
2050
+ hint: cursorIsAlreadyInstalled ? `Already installed` : void 0
2051
+ },
1621
2052
  {
1622
2053
  value: "windsurf",
1623
2054
  label: "Windsurf",
1624
2055
  hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
2056
+ },
2057
+ {
2058
+ value: "vscode",
2059
+ label: "VSCode",
2060
+ hint: vscodeIsAlreadyInstalled ? `Already installed` : void 0
1625
2061
  }
1626
2062
  ]
1627
2063
  });
1628
2064
  if (editor === `skip`) return void 0;
1629
2065
  if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1630
- v.message(`
2066
+ M.message(`
1631
2067
  Windsurf is already installed, skipping.`);
1632
2068
  return void 0;
1633
2069
  }
2070
+ if (editor === `vscode` && vscodeIsAlreadyInstalled) {
2071
+ M.message(`
2072
+ VSCode is already installed, skipping.`);
2073
+ return void 0;
2074
+ }
1634
2075
  if (editor === `cursor`) {
1635
- v.message(
2076
+ M.message(
1636
2077
  `
1637
2078
  Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1638
2079
  `
1639
2080
  );
1640
2081
  }
2082
+ if (editor === `cursor-global`) {
2083
+ const confirm = await ve({
2084
+ message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
2085
+ options: [
2086
+ { value: "yes", label: "Yes, I understand" },
2087
+ { value: "skip", label: "No, skip for now" }
2088
+ ]
2089
+ });
2090
+ if (confirm !== `yes`) {
2091
+ return void 0;
2092
+ }
2093
+ }
1641
2094
  if (editor === `windsurf`) {
1642
- const confirm2 = await le({
2095
+ const confirm = await ve({
1643
2096
  message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
1644
2097
  This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
1645
2098
  options: [
@@ -1647,7 +2100,7 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
1647
2100
  { value: "skip", label: "No, skip for now" }
1648
2101
  ]
1649
2102
  });
1650
- if (confirm2 !== `yes`) {
2103
+ if (confirm !== `yes`) {
1651
2104
  return void 0;
1652
2105
  }
1653
2106
  }
@@ -1656,23 +2109,200 @@ This means the Mastra docs MCP server will be available in all your Windsurf pro
1656
2109
  },
1657
2110
  {
1658
2111
  onCancel: () => {
1659
- he("Operation cancelled.");
2112
+ xe("Operation cancelled.");
1660
2113
  process.exit(0);
1661
2114
  }
1662
2115
  }
1663
2116
  );
1664
- const { shouldAddTools, components, ...rest } = mastraProject;
1665
- const mastraComponents = shouldAddTools ? [...components, "tools"] : components;
1666
- return { ...rest, components: mastraComponents };
2117
+ return mastraProject;
1667
2118
  };
1668
- var s = _();
2119
+ function getPackageManager() {
2120
+ const userAgent = process.env.npm_config_user_agent || "";
2121
+ const execPath = process.env.npm_execpath || "";
2122
+ if (userAgent.includes("yarn")) {
2123
+ return "yarn";
2124
+ }
2125
+ if (userAgent.includes("pnpm")) {
2126
+ return "pnpm";
2127
+ }
2128
+ if (userAgent.includes("npm")) {
2129
+ return "npm";
2130
+ }
2131
+ if (execPath.includes("yarn")) {
2132
+ return "yarn";
2133
+ }
2134
+ if (execPath.includes("pnpm")) {
2135
+ return "pnpm";
2136
+ }
2137
+ if (execPath.includes("npm")) {
2138
+ return "npm";
2139
+ }
2140
+ return "npm";
2141
+ }
2142
+ var logger = createLogger(false);
2143
+ function createLogger(debug = false) {
2144
+ return new PinoLogger({
2145
+ name: "Mastra CLI",
2146
+ level: debug ? "debug" : "info"
2147
+ });
2148
+ }
1669
2149
  var exec2 = util.promisify(child_process.exec);
2150
+ async function cloneTemplate(options) {
2151
+ const { template, projectName, targetDir } = options;
2152
+ const projectPath = targetDir ? path.resolve(targetDir, projectName) : path.resolve(projectName);
2153
+ const spinner4 = yoctoSpinner({ text: `Cloning template "${template.title}"...` }).start();
2154
+ try {
2155
+ if (await directoryExists(projectPath)) {
2156
+ spinner4.error(`Directory ${projectName} already exists`);
2157
+ throw new Error(`Directory ${projectName} already exists`);
2158
+ }
2159
+ await cloneRepositoryWithoutGit(template.githubUrl, projectPath);
2160
+ await updatePackageJson(projectPath, projectName);
2161
+ const envExamplePath = path.join(projectPath, ".env.example");
2162
+ if (await fileExists(envExamplePath)) {
2163
+ await fs4.copyFile(envExamplePath, path.join(projectPath, ".env"));
2164
+ }
2165
+ spinner4.success(`Template "${template.title}" cloned successfully to ${projectName}`);
2166
+ return projectPath;
2167
+ } catch (error) {
2168
+ spinner4.error(`Failed to clone template: ${error instanceof Error ? error.message : "Unknown error"}`);
2169
+ throw error;
2170
+ }
2171
+ }
2172
+ async function directoryExists(dirPath) {
2173
+ try {
2174
+ const stat = await fs4.stat(dirPath);
2175
+ return stat.isDirectory();
2176
+ } catch {
2177
+ return false;
2178
+ }
2179
+ }
2180
+ async function fileExists(filePath) {
2181
+ try {
2182
+ const stat = await fs4.stat(filePath);
2183
+ return stat.isFile();
2184
+ } catch {
2185
+ return false;
2186
+ }
2187
+ }
2188
+ async function cloneRepositoryWithoutGit(repoUrl, targetPath) {
2189
+ await fs4.mkdir(targetPath, { recursive: true });
2190
+ try {
2191
+ const degitRepo = repoUrl.replace("https://github.com/", "");
2192
+ const degitCommand = shellQuote2.quote(["npx", "degit", degitRepo, targetPath]);
2193
+ await exec2(degitCommand, {
2194
+ cwd: process.cwd()
2195
+ });
2196
+ } catch {
2197
+ try {
2198
+ const gitCommand = shellQuote2.quote(["git", "clone", repoUrl, targetPath]);
2199
+ await exec2(gitCommand, {
2200
+ cwd: process.cwd()
2201
+ });
2202
+ const gitDir = path.join(targetPath, ".git");
2203
+ if (await directoryExists(gitDir)) {
2204
+ await fs4.rm(gitDir, { recursive: true, force: true });
2205
+ }
2206
+ } catch (gitError) {
2207
+ throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : "Unknown error"}`);
2208
+ }
2209
+ }
2210
+ }
2211
+ async function updatePackageJson(projectPath, projectName) {
2212
+ const packageJsonPath = path.join(projectPath, "package.json");
2213
+ try {
2214
+ const packageJsonContent = await fs4.readFile(packageJsonPath, "utf-8");
2215
+ const packageJson = JSON.parse(packageJsonContent);
2216
+ packageJson.name = projectName;
2217
+ await fs4.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
2218
+ } catch (error) {
2219
+ logger.warn(`Could not update package.json: ${error instanceof Error ? error.message : "Unknown error"}`);
2220
+ }
2221
+ }
2222
+ async function installDependencies(projectPath, packageManager) {
2223
+ const spinner4 = yoctoSpinner({ text: "Installing dependencies..." }).start();
2224
+ try {
2225
+ const pm = packageManager || getPackageManager();
2226
+ const installCommand = shellQuote2.quote([pm, "install"]);
2227
+ await exec2(installCommand, {
2228
+ cwd: projectPath
2229
+ });
2230
+ spinner4.success("Dependencies installed successfully");
2231
+ } catch (error) {
2232
+ spinner4.error(`Failed to install dependencies: ${error instanceof Error ? error.message : "Unknown error"}`);
2233
+ throw error;
2234
+ }
2235
+ }
2236
+ var TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || "https://mastra.ai/api/templates.json";
2237
+ async function loadTemplates() {
2238
+ try {
2239
+ const response = await fetch(TEMPLATES_API_URL);
2240
+ if (!response.ok) {
2241
+ throw new Error(`Failed to fetch templates: ${response.statusText}`);
2242
+ }
2243
+ const templates = await response.json();
2244
+ return templates;
2245
+ } catch (error) {
2246
+ console.error("Error loading templates:", error);
2247
+ throw new Error("Failed to load templates. Please check your internet connection and try again.");
2248
+ }
2249
+ }
2250
+ function pluralize(count, singular, plural) {
2251
+ return count === 1 ? singular : plural || `${singular}s`;
2252
+ }
2253
+ async function selectTemplate(templates) {
2254
+ const choices = templates.map((template) => {
2255
+ const parts = [];
2256
+ if (template.agents?.length) {
2257
+ parts.push(`${template.agents.length} ${pluralize(template.agents.length, "agent")}`);
2258
+ }
2259
+ if (template.tools?.length) {
2260
+ parts.push(`${template.tools.length} ${pluralize(template.tools.length, "tool")}`);
2261
+ }
2262
+ if (template.workflows?.length) {
2263
+ parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, "workflow")}`);
2264
+ }
2265
+ if (template.mcp?.length) {
2266
+ parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, "MCP server")}`);
2267
+ }
2268
+ if (template.networks?.length) {
2269
+ parts.push(`${template.networks.length} ${pluralize(template.networks.length, "agent network")}`);
2270
+ }
2271
+ return {
2272
+ value: template,
2273
+ label: template.title,
2274
+ hint: parts.join(", ") || "Template components"
2275
+ };
2276
+ });
2277
+ const selected = await ve({
2278
+ message: "Select a template:",
2279
+ options: choices
2280
+ });
2281
+ if (pD(selected)) {
2282
+ return null;
2283
+ }
2284
+ return selected;
2285
+ }
2286
+ function findTemplateByName(templates, templateName) {
2287
+ let template = templates.find((t) => t.slug === templateName);
2288
+ if (template) return template;
2289
+ const slugWithPrefix = `template-${templateName}`;
2290
+ template = templates.find((t) => t.slug === slugWithPrefix);
2291
+ if (template) return template;
2292
+ template = templates.find((t) => t.title.toLowerCase() === templateName.toLowerCase());
2293
+ if (template) return template;
2294
+ return null;
2295
+ }
2296
+ function getDefaultProjectName(template) {
2297
+ return template.slug.replace(/^template-/, "");
2298
+ }
2299
+ var s = Y();
1670
2300
  var init = async ({
1671
- directory,
1672
- addExample = false,
2301
+ directory = "src/",
1673
2302
  components,
1674
2303
  llmProvider = "openai",
1675
2304
  llmApiKey,
2305
+ addExample = false,
1676
2306
  configureEditorWithDocsMCP
1677
2307
  }) => {
1678
2308
  s.start("Initializing Mastra");
@@ -1688,7 +2318,8 @@ var init = async ({
1688
2318
  dirPath,
1689
2319
  addExample,
1690
2320
  addWorkflow: components.includes("workflows"),
1691
- addAgent: components.includes("agents")
2321
+ addAgent: components.includes("agents"),
2322
+ addScorers: components.includes("scorers")
1692
2323
  }),
1693
2324
  ...components.map((component) => createComponentsDir(dirPath, component)),
1694
2325
  writeAPIKey({ provider: llmProvider, apiKey: llmApiKey })
@@ -1708,13 +2339,20 @@ var init = async ({
1708
2339
  if (needsMemory) {
1709
2340
  await depService.installPackages(["@mastra/memory"]);
1710
2341
  }
2342
+ const needsLoggers = await depService.checkDependencies(["@mastra/loggers"]) !== `ok`;
2343
+ if (needsLoggers) {
2344
+ await depService.installPackages(["@mastra/loggers"]);
2345
+ }
2346
+ const needsObservability = await depService.checkDependencies(["@mastra/observability"]) !== `ok`;
2347
+ if (needsObservability) {
2348
+ await depService.installPackages(["@mastra/observability"]);
2349
+ }
2350
+ const needsEvals = components.includes(`scorers`) && await depService.checkDependencies(["@mastra/evals"]) !== `ok`;
2351
+ if (needsEvals) {
2352
+ await depService.installPackages(["@mastra/evals"]);
2353
+ }
1711
2354
  }
1712
2355
  const key = await getAPIKey(llmProvider || "openai");
1713
- const aiSdkPackage = getAISDKPackage(llmProvider);
1714
- const depsService = new DepsService();
1715
- const pm = depsService.packageManager;
1716
- const installCommand = getPackageManagerInstallCommand(pm);
1717
- await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
1718
2356
  if (configureEditorWithDocsMCP) {
1719
2357
  await installMastraDocsMCPServer({
1720
2358
  editor: configureEditorWithDocsMCP,
@@ -1723,14 +2361,14 @@ var init = async ({
1723
2361
  }
1724
2362
  s.stop();
1725
2363
  if (!llmApiKey) {
1726
- me(`
2364
+ Me(`
1727
2365
  ${color2.green("Mastra initialized successfully!")}
1728
2366
 
1729
2367
  Add your ${color2.cyan(key)} as an environment variable
1730
- in your ${color2.cyan(".env.development")} file
2368
+ in your ${color2.cyan(".env")} file
1731
2369
  `);
1732
2370
  } else {
1733
- me(`
2371
+ Me(`
1734
2372
  ${color2.green("Mastra initialized successfully!")}
1735
2373
  `);
1736
2374
  }
@@ -1764,69 +2402,101 @@ var execWithTimeout = async (command, timeoutMs) => {
1764
2402
  throw error;
1765
2403
  }
1766
2404
  } catch (error) {
1767
- console.error(error);
1768
2405
  throw error;
1769
2406
  }
1770
2407
  };
1771
2408
  async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
1772
- let installCommand = getPackageManagerInstallCommand(pm);
2409
+ let installCommand = getPackageManagerAddCommand(pm);
1773
2410
  if (isDev) {
1774
- installCommand = `${installCommand} --save-dev`;
2411
+ installCommand = `${installCommand} -D`;
1775
2412
  }
1776
2413
  try {
1777
2414
  await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
1778
2415
  } catch (err) {
1779
- console.log("err", err);
1780
2416
  if (versionTag === "@latest") {
1781
- throw err;
2417
+ throw new Error(
2418
+ `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : "Unknown error"}`
2419
+ );
2420
+ }
2421
+ try {
2422
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
2423
+ } catch (fallbackErr) {
2424
+ throw new Error(
2425
+ `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : "Unknown error"}`
2426
+ );
1782
2427
  }
1783
- await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
1784
2428
  }
1785
2429
  }
1786
2430
  var createMastraProject = async ({
1787
2431
  projectName: name,
1788
2432
  createVersionTag,
1789
- timeout
2433
+ timeout,
2434
+ llmProvider,
2435
+ llmApiKey,
2436
+ needsInteractive
1790
2437
  }) => {
1791
- pe(color2.inverse("Mastra Create"));
1792
- const projectName = name ?? await ae({
2438
+ Ie(color2.inverse(" Mastra Create "));
2439
+ const projectName = name ?? await he({
1793
2440
  message: "What do you want to name your project?",
1794
2441
  placeholder: "my-mastra-app",
1795
- defaultValue: "my-mastra-app"
2442
+ defaultValue: "my-mastra-app",
2443
+ validate: (value) => {
2444
+ if (value.length === 0) return "Project name cannot be empty";
2445
+ if (fs3__default__default.existsSync(value)) {
2446
+ return `A directory named "${value}" already exists. Please choose a different name.`;
2447
+ }
2448
+ }
1796
2449
  });
1797
- if (lD(projectName)) {
1798
- he("Operation cancelled");
2450
+ if (pD(projectName)) {
2451
+ xe("Operation cancelled");
1799
2452
  process.exit(0);
1800
2453
  }
1801
- const s2 = _();
1802
- s2.start("Creating project");
2454
+ let result;
2455
+ if (needsInteractive) {
2456
+ result = await interactivePrompt({
2457
+ options: { showBanner: false },
2458
+ skip: { llmProvider: llmProvider !== void 0, llmApiKey: llmApiKey !== void 0 }
2459
+ });
2460
+ }
2461
+ const s2 = Y();
1803
2462
  try {
1804
- await fs4.mkdir(projectName);
1805
- } catch (error) {
1806
- if (error instanceof Error && "code" in error && error.code === "EEXIST") {
1807
- s2.stop(
1808
- `A directory named "${projectName}" already exists. Please choose a different name or delete the existing directory.`
2463
+ s2.start("Creating project");
2464
+ try {
2465
+ await fs4.mkdir(projectName);
2466
+ } catch (error) {
2467
+ if (error instanceof Error && "code" in error && error.code === "EEXIST") {
2468
+ s2.stop(`A directory named "${projectName}" already exists. Please choose a different name.`);
2469
+ process.exit(1);
2470
+ }
2471
+ throw new Error(
2472
+ `Failed to create project directory: ${error instanceof Error ? error.message : "Unknown error"}`
1809
2473
  );
1810
- process.exit(1);
1811
2474
  }
1812
- throw error;
1813
- }
1814
- process.chdir(projectName);
1815
- const pm = getPackageManager();
1816
- const installCommand = getPackageManagerInstallCommand(pm);
1817
- s2.message("Creating project");
1818
- await exec3(`npm init -y`);
1819
- await exec3(`npm pkg set type="module"`);
1820
- const depsService = new DepsService();
1821
- await depsService.addScriptsToPackageJson({
1822
- dev: "mastra dev",
1823
- build: "mastra build"
1824
- });
1825
- s2.stop("Project created");
1826
- s2.start(`Installing ${pm} dependencies`);
1827
- await exec3(`${pm} ${installCommand} zod`);
1828
- await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
1829
- await exec3(`echo '{
2475
+ process.chdir(projectName);
2476
+ const pm = getPackageManager();
2477
+ const installCommand = getPackageManagerAddCommand(pm);
2478
+ s2.message("Initializing project structure");
2479
+ try {
2480
+ await exec3(`npm init -y`);
2481
+ await exec3(`npm pkg set type="module"`);
2482
+ await exec3(`npm pkg set engines.node=">=20.9.0"`);
2483
+ const depsService = new DepsService();
2484
+ await depsService.addScriptsToPackageJson({
2485
+ dev: "mastra dev",
2486
+ build: "mastra build",
2487
+ start: "mastra start"
2488
+ });
2489
+ } catch (error) {
2490
+ throw new Error(
2491
+ `Failed to initialize project structure: ${error instanceof Error ? error.message : "Unknown error"}`
2492
+ );
2493
+ }
2494
+ s2.stop("Project structure created");
2495
+ s2.start(`Installing ${pm} dependencies`);
2496
+ try {
2497
+ await exec3(`${pm} ${installCommand} zod@^4`);
2498
+ await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
2499
+ await exec3(`echo '{
1830
2500
  "compilerOptions": {
1831
2501
  "target": "ES2022",
1832
2502
  "module": "ES2022",
@@ -1842,42 +2512,76 @@ var createMastraProject = async ({
1842
2512
  "src/**/*"
1843
2513
  ]
1844
2514
  }' > tsconfig.json`);
1845
- s2.stop(`${pm} dependencies installed`);
1846
- s2.start("Installing mastra");
1847
- const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
1848
- await installMastraDependency(pm, "mastra", versionTag, true, timeout);
1849
- s2.stop("mastra installed");
1850
- s2.start("Installing dependencies");
1851
- await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
1852
- await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
1853
- await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
1854
- s2.stop("Dependencies installed");
1855
- s2.start("Adding .gitignore");
1856
- await exec3(`echo output.txt >> .gitignore`);
1857
- await exec3(`echo node_modules >> .gitignore`);
1858
- await exec3(`echo dist >> .gitignore`);
1859
- await exec3(`echo .mastra >> .gitignore`);
1860
- await exec3(`echo .env.development >> .gitignore`);
1861
- await exec3(`echo .env >> .gitignore`);
1862
- await exec3(`echo *.db >> .gitignore`);
1863
- await exec3(`echo *.db-* >> .gitignore`);
1864
- s2.stop(".gitignore added");
1865
- ge("Project created successfully");
1866
- console.log("");
1867
- return { projectName };
2515
+ } catch (error) {
2516
+ throw new Error(
2517
+ `Failed to install basic dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2518
+ );
2519
+ }
2520
+ s2.stop(`${pm} dependencies installed`);
2521
+ s2.start("Installing Mastra CLI");
2522
+ const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
2523
+ try {
2524
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
2525
+ } catch (error) {
2526
+ throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : "Unknown error"}`);
2527
+ }
2528
+ s2.stop("Mastra CLI installed");
2529
+ s2.start("Installing Mastra dependencies");
2530
+ try {
2531
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
2532
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
2533
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
2534
+ } catch (error) {
2535
+ throw new Error(
2536
+ `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : "Unknown error"}`
2537
+ );
2538
+ }
2539
+ s2.stop("Mastra dependencies installed");
2540
+ s2.start("Adding .gitignore");
2541
+ try {
2542
+ await exec3(`echo output.txt >> .gitignore`);
2543
+ await exec3(`echo node_modules >> .gitignore`);
2544
+ await exec3(`echo dist >> .gitignore`);
2545
+ await exec3(`echo .mastra >> .gitignore`);
2546
+ await exec3(`echo .env.development >> .gitignore`);
2547
+ await exec3(`echo .env >> .gitignore`);
2548
+ await exec3(`echo *.db >> .gitignore`);
2549
+ await exec3(`echo *.db-* >> .gitignore`);
2550
+ } catch (error) {
2551
+ throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : "Unknown error"}`);
2552
+ }
2553
+ s2.stop(".gitignore added");
2554
+ Se("Project created successfully");
2555
+ console.info("");
2556
+ return { projectName, result };
2557
+ } catch (error) {
2558
+ s2.stop();
2559
+ const errorMessage = error instanceof Error ? error.message : "An unexpected error occurred";
2560
+ xe(`Project creation failed: ${errorMessage}`);
2561
+ process.exit(1);
2562
+ }
1868
2563
  };
1869
2564
  var create = async (args2) => {
1870
- const { projectName } = await createMastraProject({
2565
+ if (args2.template !== void 0) {
2566
+ await createFromTemplate({ ...args2, injectedAnalytics: args2.analytics });
2567
+ return;
2568
+ }
2569
+ const needsInteractive = args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0;
2570
+ const { projectName, result } = await createMastraProject({
1871
2571
  projectName: args2?.projectName,
1872
2572
  createVersionTag: args2?.createVersionTag,
1873
- timeout: args2?.timeout
2573
+ timeout: args2?.timeout,
2574
+ llmProvider: args2?.llmProvider,
2575
+ llmApiKey: args2?.llmApiKey,
2576
+ needsInteractive
1874
2577
  });
1875
2578
  const directory = args2.directory || "src/";
1876
- if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
1877
- const result = await interactivePrompt();
2579
+ if (needsInteractive && result) {
1878
2580
  await init({
1879
2581
  ...result,
1880
- llmApiKey: result?.llmApiKey
2582
+ llmApiKey: result?.llmApiKey,
2583
+ components: ["agents", "tools", "workflows", "scorers"],
2584
+ addExample: true
1881
2585
  });
1882
2586
  postCreate({ projectName });
1883
2587
  return;
@@ -1888,32 +2592,188 @@ var create = async (args2) => {
1888
2592
  components,
1889
2593
  llmProvider,
1890
2594
  addExample,
1891
- llmApiKey
2595
+ llmApiKey,
2596
+ configureEditorWithDocsMCP: args2.mcpServer
1892
2597
  });
1893
2598
  postCreate({ projectName });
1894
2599
  };
1895
2600
  var postCreate = ({ projectName }) => {
1896
- ge(`
2601
+ const packageManager = getPackageManager();
2602
+ Se(`
1897
2603
  ${color2.green("To start your project:")}
1898
2604
 
1899
2605
  ${color2.cyan("cd")} ${projectName}
1900
- ${color2.cyan("npm run dev")}
2606
+ ${color2.cyan(`${packageManager} run dev`)}
1901
2607
  `);
1902
2608
  };
2609
+ function isGitHubUrl(url) {
2610
+ try {
2611
+ const parsedUrl = new URL(url);
2612
+ return parsedUrl.hostname === "github.com" && parsedUrl.pathname.split("/").length >= 3;
2613
+ } catch {
2614
+ return false;
2615
+ }
2616
+ }
2617
+ async function validateGitHubProject(githubUrl) {
2618
+ const errors = [];
2619
+ try {
2620
+ const urlParts = new URL(githubUrl).pathname.split("/").filter(Boolean);
2621
+ const owner = urlParts[0];
2622
+ const repo = urlParts[1]?.replace(".git", "");
2623
+ if (!owner || !repo) {
2624
+ throw new Error("Invalid GitHub URL format");
2625
+ }
2626
+ const branches = ["main", "master"];
2627
+ let packageJsonContent = null;
2628
+ let indexContent = null;
2629
+ for (const branch of branches) {
2630
+ try {
2631
+ const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;
2632
+ const packageJsonResponse = await fetch(packageJsonUrl);
2633
+ if (packageJsonResponse.ok) {
2634
+ packageJsonContent = await packageJsonResponse.text();
2635
+ const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;
2636
+ const indexResponse = await fetch(indexUrl);
2637
+ if (indexResponse.ok) {
2638
+ indexContent = await indexResponse.text();
2639
+ }
2640
+ break;
2641
+ }
2642
+ } catch {
2643
+ }
2644
+ }
2645
+ if (!packageJsonContent) {
2646
+ errors.push("Could not fetch package.json from repository");
2647
+ return { isValid: false, errors };
2648
+ }
2649
+ try {
2650
+ const packageJson = JSON.parse(packageJsonContent);
2651
+ const hasMastraCore = packageJson.dependencies?.["@mastra/core"] || packageJson.devDependencies?.["@mastra/core"] || packageJson.peerDependencies?.["@mastra/core"];
2652
+ if (!hasMastraCore) {
2653
+ errors.push("Missing @mastra/core dependency in package.json");
2654
+ }
2655
+ } catch {
2656
+ errors.push("Invalid package.json format");
2657
+ }
2658
+ if (!indexContent) {
2659
+ errors.push("Missing src/mastra/index.ts file");
2660
+ } else {
2661
+ const hasMastraExport = indexContent.includes("export") && (indexContent.includes("new Mastra") || indexContent.includes("Mastra("));
2662
+ if (!hasMastraExport) {
2663
+ errors.push("src/mastra/index.ts does not export a Mastra instance");
2664
+ }
2665
+ }
2666
+ return { isValid: errors.length === 0, errors };
2667
+ } catch (error) {
2668
+ errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : "Unknown error"}`);
2669
+ return { isValid: false, errors };
2670
+ }
2671
+ }
2672
+ async function createFromGitHubUrl(url) {
2673
+ const urlParts = new URL(url).pathname.split("/").filter(Boolean);
2674
+ const owner = urlParts[0] || "unknown";
2675
+ const repo = urlParts[1] || "unknown";
2676
+ return {
2677
+ githubUrl: url,
2678
+ title: `${owner}/${repo}`,
2679
+ slug: repo,
2680
+ agents: [],
2681
+ mcp: [],
2682
+ tools: [],
2683
+ networks: [],
2684
+ workflows: []
2685
+ };
2686
+ }
2687
+ async function createFromTemplate(args2) {
2688
+ let selectedTemplate;
2689
+ if (args2.template === true) {
2690
+ const templates = await loadTemplates();
2691
+ const selected = await selectTemplate(templates);
2692
+ if (!selected) {
2693
+ M.info("No template selected. Exiting.");
2694
+ return;
2695
+ }
2696
+ selectedTemplate = selected;
2697
+ } else if (args2.template && typeof args2.template === "string") {
2698
+ if (isGitHubUrl(args2.template)) {
2699
+ const spinner4 = Y();
2700
+ spinner4.start("Validating GitHub repository...");
2701
+ const validation = await validateGitHubProject(args2.template);
2702
+ if (!validation.isValid) {
2703
+ spinner4.stop("Validation failed");
2704
+ M.error("This does not appear to be a valid Mastra project:");
2705
+ validation.errors.forEach((error) => M.error(` - ${error}`));
2706
+ throw new Error("Invalid Mastra project");
2707
+ }
2708
+ spinner4.stop("Valid Mastra project \u2713");
2709
+ selectedTemplate = await createFromGitHubUrl(args2.template);
2710
+ } else {
2711
+ const templates = await loadTemplates();
2712
+ const found = findTemplateByName(templates, args2.template);
2713
+ if (!found) {
2714
+ M.error(`Template "${args2.template}" not found. Available templates:`);
2715
+ templates.forEach((t) => M.info(` - ${t.title} (use: ${t.slug.replace("template-", "")})`));
2716
+ throw new Error(`Template "${args2.template}" not found`);
2717
+ }
2718
+ selectedTemplate = found;
2719
+ }
2720
+ }
2721
+ if (!selectedTemplate) {
2722
+ throw new Error("No template selected");
2723
+ }
2724
+ let projectName = args2.projectName;
2725
+ if (!projectName) {
2726
+ const defaultName = getDefaultProjectName(selectedTemplate);
2727
+ const response = await he({
2728
+ message: "What is your project name?",
2729
+ defaultValue: defaultName,
2730
+ placeholder: defaultName
2731
+ });
2732
+ if (pD(response)) {
2733
+ M.info("Project creation cancelled.");
2734
+ return;
2735
+ }
2736
+ projectName = response;
2737
+ }
2738
+ try {
2739
+ const analytics = args2.injectedAnalytics || getAnalytics();
2740
+ if (analytics) {
2741
+ analytics.trackEvent("cli_template_used", {
2742
+ template_slug: selectedTemplate.slug,
2743
+ template_title: selectedTemplate.title
2744
+ });
2745
+ }
2746
+ const projectPath = await cloneTemplate({
2747
+ template: selectedTemplate,
2748
+ projectName
2749
+ });
2750
+ await installDependencies(projectPath);
2751
+ Me(`
2752
+ ${color2.green("Mastra template installed!")}
2753
+
2754
+ Add the necessary environment
2755
+ variables in your ${color2.cyan(".env")} file
2756
+ `);
2757
+ postCreate({ projectName });
2758
+ } catch (error) {
2759
+ M.error(`Failed to create project from template: ${error instanceof Error ? error.message : "Unknown error"}`);
2760
+ throw error;
2761
+ }
2762
+ }
1903
2763
 
1904
2764
  async function getPackageVersion() {
1905
2765
  const __filename = fileURLToPath(import.meta.url);
1906
2766
  const __dirname = dirname(__filename);
1907
2767
  const pkgJsonPath = path.join(__dirname, "..", "package.json");
1908
- const content = await fsExtra.readJSON(pkgJsonPath);
2768
+ const content = await fsExtra$1.readJSON(pkgJsonPath);
1909
2769
  return content.version;
1910
2770
  }
1911
2771
  async function getCreateVersionTag() {
1912
2772
  try {
1913
2773
  const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
1914
- const json = await fsExtra.readJSON(pkgPath);
2774
+ const json = await fsExtra$1.readJSON(pkgPath);
1915
2775
  const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
1916
- const tagLine = stdout.split("\n").find((distLine) => distLine.includes(`: ${json.version}`));
2776
+ const tagLine = stdout.split("\n").find((distLine) => distLine.endsWith(`: ${json.version}`));
1917
2777
  const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
1918
2778
  return tag;
1919
2779
  } catch {
@@ -1935,23 +2795,30 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
1935
2795
  analytics.trackCommand({
1936
2796
  command: "version"
1937
2797
  });
1938
- console.log(`create-mastra ${version}`);
2798
+ console.info(`create-mastra ${version}`);
1939
2799
  } catch {
1940
2800
  }
1941
2801
  });
1942
2802
  program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
1943
2803
  "-p, --project-name <string>",
1944
2804
  "Project name that will be used in package.json and as the project directory name."
1945
- ).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) => {
2805
+ ).option("--default", "Quick start with defaults (src, OpenAI, examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows, scorers)").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(
2806
+ "--template [template-name]",
2807
+ "Create project from a template (use template name, public GitHub URL, or leave blank to select from list)"
2808
+ ).action(async (projectNameArg, args) => {
1946
2809
  const projectName = projectNameArg || args.projectName;
1947
2810
  const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
1948
2811
  if (args.default) {
1949
2812
  await create({
1950
- components: ["agents", "tools", "workflows"],
2813
+ components: ["agents", "tools", "workflows", "scorers"],
1951
2814
  llmProvider: "openai",
1952
- addExample: false,
2815
+ addExample: true,
1953
2816
  createVersionTag,
1954
- timeout
2817
+ timeout,
2818
+ mcpServer: args.mcp,
2819
+ directory: "src/",
2820
+ template: args.template,
2821
+ analytics
1955
2822
  });
1956
2823
  return;
1957
2824
  }
@@ -1959,11 +2826,14 @@ program.name("create-mastra").description("Create a new Mastra project").argumen
1959
2826
  components: args.components ? args.components.split(",") : [],
1960
2827
  llmProvider: args.llm,
1961
2828
  addExample: args.example,
1962
- llmApiKey: args["llm-api-key"],
2829
+ llmApiKey: args.llmApiKey,
1963
2830
  createVersionTag,
1964
2831
  timeout,
1965
2832
  projectName,
1966
- directory: args.dir
2833
+ directory: args.dir,
2834
+ mcpServer: args.mcp,
2835
+ template: args.template,
2836
+ analytics
1967
2837
  });
1968
2838
  });
1969
2839
  program.parse(process.argv);