create-mastra 0.0.0-storage-20250225005900 → 0.0.0-vnext-inngest-20250506123700

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
@@ -5,21 +5,21 @@ import * as fs3__default from 'node:fs';
5
5
  import fs3__default__default, { existsSync, readFileSync, writeFileSync } from 'node:fs';
6
6
  import os from 'node:os';
7
7
  import path, { dirname } from 'node:path';
8
- import { PostHog } from 'posthog-node';
9
8
  import { fileURLToPath } from 'node:url';
9
+ import { PostHog } from 'posthog-node';
10
10
  import h, { stdin, stdout } from 'node:process';
11
11
  import * as f from 'node:readline';
12
12
  import f__default from 'node:readline';
13
13
  import tty, { WriteStream } from 'node:tty';
14
14
  import child_process from 'node:child_process';
15
15
  import util from 'node:util';
16
- import prettier from 'prettier';
17
- import fsExtra3 from 'fs-extra/esm';
18
16
  import fs4 from 'node:fs/promises';
19
17
  import { execa } from 'execa';
18
+ import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
19
+ import prettier from 'prettier';
20
+ import { Transform } from 'node:stream';
20
21
  import pino from 'pino';
21
22
  import pretty from 'pino-pretty';
22
- import { Transform } from 'node:stream';
23
23
  import fsExtra from 'fs-extra';
24
24
 
25
25
  var __filename = fileURLToPath(import.meta.url);
@@ -41,7 +41,7 @@ var PosthogAnalytics = class {
41
41
  const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, "utf-8"));
42
42
  this.distinctId = distinctId;
43
43
  this.sessionId = sessionId;
44
- } catch (e) {
44
+ } catch {
45
45
  this.sessionId = randomUUID();
46
46
  this.distinctId = this.getDistinctId();
47
47
  }
@@ -64,14 +64,15 @@ var PosthogAnalytics = class {
64
64
  writeCliConfig({ distinctId, sessionId }) {
65
65
  try {
66
66
  writeFileSync(path.join(__dirname, "mastra-cli.json"), JSON.stringify({ distinctId, sessionId }));
67
- } catch (e) {
67
+ } catch {
68
68
  }
69
69
  }
70
70
  initializePostHog(apiKey, host) {
71
71
  this.client = new PostHog(apiKey, {
72
72
  host,
73
73
  flushAt: 1,
74
- flushInterval: 0
74
+ flushInterval: 0,
75
+ disableGeoip: false
75
76
  });
76
77
  this.captureSessionStart();
77
78
  process.on("exit", () => {
@@ -80,7 +81,7 @@ var PosthogAnalytics = class {
80
81
  });
81
82
  }
82
83
  isTelemetryEnabled() {
83
- if (process.env.NO_MASTRA_TELEMETRY) {
84
+ if (process.env.MASTRA_TELEMETRY_DISABLED) {
84
85
  return false;
85
86
  }
86
87
  return true;
@@ -135,17 +136,19 @@ var PosthogAnalytics = class {
135
136
  event: "cli_command",
136
137
  properties: {
137
138
  ...this.getSystemProperties(),
138
- ...commandData
139
+ ...commandData,
140
+ origin: options?.origin || "oss"
139
141
  }
140
142
  });
141
- } catch (e) {
143
+ } catch {
142
144
  }
143
145
  }
144
146
  // Helper method to wrap command execution with timing
145
147
  async trackCommandExecution({
146
148
  command,
147
149
  args,
148
- execution
150
+ execution,
151
+ origin
149
152
  }) {
150
153
  const startTime = process.hrtime();
151
154
  try {
@@ -156,7 +159,8 @@ var PosthogAnalytics = class {
156
159
  command,
157
160
  args,
158
161
  durationMs,
159
- status: "success"
162
+ status: "success",
163
+ origin
160
164
  });
161
165
  return result;
162
166
  } catch (error) {
@@ -167,7 +171,8 @@ var PosthogAnalytics = class {
167
171
  args,
168
172
  durationMs,
169
173
  status: "error",
170
- error: error instanceof Error ? error.message : String(error)
174
+ error: error instanceof Error ? error.message : String(error),
175
+ origin
171
176
  });
172
177
  throw error;
173
178
  }
@@ -179,7 +184,7 @@ var PosthogAnalytics = class {
179
184
  }
180
185
  try {
181
186
  await this.client.shutdown();
182
- } catch (e) {
187
+ } catch {
183
188
  }
184
189
  }
185
190
  };
@@ -352,14 +357,14 @@ function q({onlyFirst:e=false}={}){const F=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(
352
357
  `).map(t=>oD(t,u,F)).join(`
353
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(`
354
359
  `),t=u.split(`
355
- `),s=[];for(let C=0;C<Math.max(F.length,t.length);C++)F[C]!==t[C]&&s.push(C);return s}const V$1=Symbol("clack:cancel");function lD(e){return e===V$1}function v(e,u){e.isTTY&&e.setRawMode(u);}const z=new Map([["k","up"],["j","down"],["h","left"],["l","right"]]),xD=new Set(["up","down","left","right","space","enter"]);class x{constructor({render:u,input:F=stdin,output:t=stdout,...s},C=true){a$1(this,"input"),a$1(this,"output"),a$1(this,"rl"),a$1(this,"opts"),a$1(this,"_track",false),a$1(this,"_render"),a$1(this,"_cursor",0),a$1(this,"state","initial"),a$1(this,"value"),a$1(this,"error",""),a$1(this,"subscribers",new Map),a$1(this,"_prevFrame",""),this.opts=s,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=u.bind(this),this._track=C,this.input=F,this.output=t;}prompt(){const u=new WriteStream(0);return u._write=(F,t,s)=>{this._track&&(this.value=this.rl.line.replace(/\t/g,""),this._cursor=this.rl.cursor,this.emit("value",this.value)),s();},this.input.pipe(u),this.rl=f__default.createInterface({input:this.input,output:u,tabSize:2,prompt:"",escapeCodeTimeout:50}),f__default.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v(this.input,true),this.output.on("resize",this.render),this.render(),new Promise((F,t)=>{this.once("submit",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(this.value);}),this.once("cancel",()=>{this.output.write(srcExports.cursor.show),this.output.off("resize",this.render),v(this.input,false),F(V$1);});})}on(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F}),this.subscribers.set(u,t);}once(u,F){const t=this.subscribers.get(u)??[];t.push({cb:F,once:true}),this.subscribers.set(u,t);}emit(u,...F){const t=this.subscribers.get(u)??[],s=[];for(const C of t)C.cb(...F),C.once&&s.push(()=>t.splice(t.indexOf(C),1));for(const C of s)C();}unsubscribe(){this.subscribers.clear();}onKeypress(u,F){if(this.state==="error"&&(this.state="active"),F?.name&&!this._track&&z.has(F.name)&&this.emit("cursor",z.get(F.name)),F?.name&&xD.has(F.name)&&this.emit("cursor",F.name),u&&(u.toLowerCase()==="y"||u.toLowerCase()==="n")&&this.emit("confirm",u.toLowerCase()==="y"),u===" "&&this.opts.placeholder&&(this.value||(this.rl.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),u&&this.emit("key",u.toLowerCase()),F?.name==="return"){if(this.opts.validate){const t=this.opts.validate(this.value);t&&(this.error=t,this.state="error",this.rl.write(this.value));}this.state!=="error"&&(this.state="submit");}u===""&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close();}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
356
- `),v(this.input,false),this.rl.close(),this.emit(`${this.state}`,this.value),this.unsubscribe();}restoreCursor(){const u=R$1(this._prevFrame,process.stdout.columns,{hard:true}).split(`
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(`
357
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(`
358
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(`
359
364
  `).slice(t);this.output.write(s.join(`
360
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();}}
361
366
 
362
- function K(){return h.platform!=="win32"?h.env.TERM!=="linux":!!h.env.CI||!!h.env.WT_SESSION||!!h.env.TERMINUS_SUBLIME||h.env.ConEmuTask==="{cmd::Cmder}"||h.env.TERM_PROGRAM==="Terminus-Sublime"||h.env.TERM_PROGRAM==="vscode"||h.env.TERM==="xterm-256color"||h.env.TERM==="alacritty"||h.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}const C=K(),u=(s,n)=>C?s:n,Y=u("\u25C6","*"),P=u("\u25A0","x"),V=u("\u25B2","x"),M=u("\u25C7","o"),Q=u("\u250C","T"),a=u("\u2502","|"),$=u("\u2514","\u2014"),I=u("\u25CF",">"),T=u("\u25CB"," "),j=u("\u25FB","[\u2022]"),b=u("\u25FC","[+]"),B=u("\u25FB","[ ]"),G=u("\u2500","-"),H=u("\u256E","+"),ee=u("\u251C","+"),te=u("\u256F","+"),y=s=>{switch(s){case "initial":case "active":return color2.cyan(Y);case "cancel":return color2.red(P);case "error":return color2.yellow(V);case "submit":return color2.green(M)}},E=s=>{const{cursor:n,options:t,style:i}=s,r=s.maxItems??1/0,o=Math.max(process.stdout.rows-4,0),c=Math.min(o,Math.max(r,5));let l=0;n>=l+c-3?l=Math.max(Math.min(n-c+3,t.length-c),0):n<l+2&&(l=Math.max(n-2,0));const d=c<t.length&&l>0,p=c<t.length&&l+c<t.length;return t.slice(l,l+c).map((S,f,x)=>{const g=f===0&&d,m=f===x.length-1&&p;return g||m?color2.dim("..."):i(S,f+l===n)})},ae=s=>new PD({validate:s.validate,placeholder:s.placeholder,defaultValue:s.defaultValue,initialValue:s.initialValue,render(){const n=`${color2.gray(a)}
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)}
363
368
  ${y(this.state)} ${s.message}
364
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()}
365
370
  ${color2.yellow(a)} ${i}
@@ -404,7 +409,10 @@ ${color2.gray(ee+G.repeat(r+2)+te)}
404
409
  `);},ge=(s="")=>{process.stdout.write(`${color2.gray(a)}
405
410
  ${color2.gray($)} ${s}
406
411
 
407
- `);},_=()=>{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)}
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(`
414
+ `)}
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)}
408
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}
409
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};
410
418
 
@@ -791,7 +799,14 @@ var Logger = class {
791
799
  this.logger = pino(
792
800
  {
793
801
  name: options.name || "app",
794
- level: options.level || LogLevel.INFO
802
+ level: options.level || LogLevel.INFO,
803
+ formatters: {
804
+ level: (label) => {
805
+ return {
806
+ level: label
807
+ };
808
+ }
809
+ }
795
810
  },
796
811
  options.overrideDefaultTransports ? options?.transports?.default : transportsAry.length === 0 ? pretty({
797
812
  colorize: true,
@@ -801,7 +816,7 @@ var Logger = class {
801
816
  translateTime: "SYS:standard",
802
817
  singleLine: false
803
818
  }) : pino.multistream([
804
- ...transportsAry.map(([_, transport]) => ({
819
+ ...transportsAry.map(([, transport]) => ({
805
820
  stream: transport,
806
821
  level: options.level || LogLevel.INFO
807
822
  })),
@@ -857,41 +872,6 @@ function createLogger(options) {
857
872
  return new Logger(options);
858
873
  }
859
874
 
860
- function getPackageManager() {
861
- const userAgent = process.env.npm_config_user_agent || "";
862
- const execPath = process.env.npm_execpath || "";
863
- if (userAgent.includes("yarn")) {
864
- return "yarn";
865
- }
866
- if (userAgent.includes("pnpm")) {
867
- return "pnpm";
868
- }
869
- if (userAgent.includes("npm")) {
870
- return "npm";
871
- }
872
- if (execPath.includes("yarn")) {
873
- return "yarn";
874
- }
875
- if (execPath.includes("pnpm")) {
876
- return "pnpm";
877
- }
878
- if (execPath.includes("npm")) {
879
- return "npm";
880
- }
881
- return "npm";
882
- }
883
- function getPackageManagerInstallCommand(pm) {
884
- switch (pm) {
885
- case "npm":
886
- return "install";
887
- case "yarn":
888
- return "add";
889
- case "pnpm":
890
- return "add";
891
- default:
892
- return "install";
893
- }
894
- }
895
875
  var DepsService = class {
896
876
  packageManager;
897
877
  constructor() {
@@ -985,6 +965,116 @@ var DepsService = class {
985
965
  await fs4.writeFile("package.json", JSON.stringify(packageJson, null, 2));
986
966
  }
987
967
  };
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
+ var cursorGlobalMCPConfigPath = path.join(os.homedir(), ".cursor", "mcp.json");
1034
+ async function installMastraDocsMCPServer({
1035
+ editor,
1036
+ directory
1037
+ }) {
1038
+ if (editor === `cursor`) {
1039
+ await writeMergedConfig(path.join(directory, ".cursor", "mcp.json"));
1040
+ }
1041
+ if (editor === `cursor-global`) {
1042
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1043
+ if (alreadyInstalled) {
1044
+ return;
1045
+ }
1046
+ await writeMergedConfig(cursorGlobalMCPConfigPath);
1047
+ }
1048
+ if (editor === `windsurf`) {
1049
+ const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor);
1050
+ if (alreadyInstalled) {
1051
+ return;
1052
+ }
1053
+ await writeMergedConfig(windsurfGlobalMCPConfigPath);
1054
+ }
1055
+ }
1056
+ async function globalMCPIsAlreadyInstalled(editor) {
1057
+ let configPath = ``;
1058
+ if (editor === "windsurf") {
1059
+ configPath = windsurfGlobalMCPConfigPath;
1060
+ } else if (editor === "cursor-global") {
1061
+ configPath = cursorGlobalMCPConfigPath;
1062
+ }
1063
+ if (!configPath || !existsSync(configPath)) {
1064
+ return false;
1065
+ }
1066
+ try {
1067
+ const configContents = await readJSON(configPath);
1068
+ if (!configContents?.mcpServers) return false;
1069
+ const hasMastraMCP = Object.values(configContents.mcpServers).some(
1070
+ (server) => server?.args?.find((arg) => arg?.includes(`@mastra/mcp-docs-server`))
1071
+ );
1072
+ return hasMastraMCP;
1073
+ } catch (e) {
1074
+ console.error(e);
1075
+ return false;
1076
+ }
1077
+ }
988
1078
  var EnvService = class {
989
1079
  };
990
1080
  var FileEnvService = class extends EnvService {
@@ -1104,6 +1194,10 @@ var getAISDKPackage = (llmProvider) => {
1104
1194
  return "@ai-sdk/anthropic";
1105
1195
  case "groq":
1106
1196
  return "@ai-sdk/groq";
1197
+ case "google":
1198
+ return "@ai-sdk/google";
1199
+ case "cerebras":
1200
+ return "@ai-sdk/cerebras";
1107
1201
  default:
1108
1202
  return "@ai-sdk/openai";
1109
1203
  }
@@ -1119,7 +1213,13 @@ var getProviderImportAndModelItem = (llmProvider) => {
1119
1213
  modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
1120
1214
  } else if (llmProvider === "groq") {
1121
1215
  providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
1122
- modelItem = `groq('llama3-groq-70b-8192-tool-use-preview')`;
1216
+ modelItem = `groq('llama-3.3-70b-versatile')`;
1217
+ } else if (llmProvider === "google") {
1218
+ providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
1219
+ modelItem = `google('gemini-1.5-pro-latest')`;
1220
+ } else if (llmProvider === "cerebras") {
1221
+ providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
1222
+ modelItem = `cerebras('llama-3.3-70b')`;
1123
1223
  }
1124
1224
  return { providerImport, modelItem };
1125
1225
  };
@@ -1130,6 +1230,7 @@ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1130
1230
 
1131
1231
  Your primary function is to help users get weather details for specific locations. When responding:
1132
1232
  - Always ask for a location if none is provided
1233
+ - If the location name isn\u2019t in English, please translate it
1133
1234
  - If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
1134
1235
  - Include relevant details like humidity, wind conditions, and precipitation
1135
1236
  - Keep responses concise but informative
@@ -1137,8 +1238,10 @@ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
1137
1238
  ${addExampleTool ? "Use the weatherTool to fetch current weather data." : ""}
1138
1239
  `;
1139
1240
  const content = `
1140
- ${providerImport}
1241
+ ${providerImport}
1141
1242
  import { Agent } from '@mastra/core/agent';
1243
+ import { Memory } from '@mastra/memory';
1244
+ import { LibSQLStore } from '@mastra/libsql';
1142
1245
  ${addExampleTool ? `import { weatherTool } from '../tools';` : ""}
1143
1246
 
1144
1247
  export const weatherAgent = new Agent({
@@ -1146,6 +1249,18 @@ export const weatherAgent = new Agent({
1146
1249
  instructions: \`${instructions}\`,
1147
1250
  model: ${modelItem},
1148
1251
  ${addExampleTool ? "tools: { weatherTool }," : ""}
1252
+ memory: new Memory({
1253
+ storage: new LibSQLStore({
1254
+ url: "file:../mastra.db", // path is relative to the .mastra/output directory
1255
+ }),
1256
+ options: {
1257
+ lastMessages: 10,
1258
+ semanticRecall: false,
1259
+ threads: {
1260
+ generateTitle: false
1261
+ }
1262
+ }
1263
+ })
1149
1264
  });
1150
1265
  `;
1151
1266
  const formattedContent = await prettier.format(content, {
@@ -1212,14 +1327,26 @@ const agent = new Agent({
1212
1327
  \`,
1213
1328
  });
1214
1329
 
1330
+ const forecastSchema = z.array(
1331
+ z.object({
1332
+ date: z.string(),
1333
+ maxTemp: z.number(),
1334
+ minTemp: z.number(),
1335
+ precipitationChance: z.number(),
1336
+ condition: z.string(),
1337
+ location: z.string(),
1338
+ }),
1339
+ );
1340
+
1215
1341
  const fetchWeather = new Step({
1216
1342
  id: 'fetch-weather',
1217
1343
  description: 'Fetches weather forecast for a given city',
1218
1344
  inputSchema: z.object({
1219
1345
  city: z.string().describe('The city to get the weather for'),
1220
1346
  }),
1347
+ outputSchema: forecastSchema,
1221
1348
  execute: async ({ context }) => {
1222
- const triggerData = context?.getStepPayload<{ city: string }>('trigger');
1349
+ const triggerData = context?.getStepResult<{ city: string }>('trigger');
1223
1350
 
1224
1351
  if (!triggerData) {
1225
1352
  throw new Error('Trigger data not found');
@@ -1262,23 +1389,12 @@ const fetchWeather = new Step({
1262
1389
  },
1263
1390
  });
1264
1391
 
1265
- const forecastSchema = z.array(
1266
- z.object({
1267
- date: z.string(),
1268
- maxTemp: z.number(),
1269
- minTemp: z.number(),
1270
- precipitationChance: z.number(),
1271
- condition: z.string(),
1272
- location: z.string(),
1273
- }),
1274
- );
1275
1392
 
1276
1393
  const planActivities = new Step({
1277
1394
  id: 'plan-activities',
1278
1395
  description: 'Suggests activities based on weather conditions',
1279
- inputSchema: forecastSchema,
1280
1396
  execute: async ({ context, mastra }) => {
1281
- const forecast = context?.getStepPayload<z.infer<typeof forecastSchema>>('fetch-weather');
1397
+ const forecast = context?.getStepResult(fetchWeather);
1282
1398
 
1283
1399
  if (!forecast || forecast.length === 0) {
1284
1400
  throw new Error('Forecast data not found');
@@ -1295,12 +1411,15 @@ const planActivities = new Step({
1295
1411
  },
1296
1412
  ]);
1297
1413
 
1414
+ let activitiesText = '';
1415
+
1298
1416
  for await (const chunk of response.textStream) {
1299
1417
  process.stdout.write(chunk);
1418
+ activitiesText += chunk;
1300
1419
  }
1301
1420
 
1302
1421
  return {
1303
- activities: response.text,
1422
+ activities: activitiesText,
1304
1423
  };
1305
1424
  },
1306
1425
  });
@@ -1396,11 +1515,16 @@ export const mastra = new Mastra()
1396
1515
  `
1397
1516
  import { Mastra } from '@mastra/core/mastra';
1398
1517
  import { createLogger } from '@mastra/core/logger';
1518
+ import { LibSQLStore } from '@mastra/libsql';
1399
1519
  ${addWorkflow ? `import { weatherWorkflow } from './workflows';` : ""}
1400
1520
  ${addAgent ? `import { weatherAgent } from './agents';` : ""}
1401
1521
 
1402
1522
  export const mastra = new Mastra({
1403
1523
  ${filteredExports.join("\n ")}
1524
+ storage: new LibSQLStore({
1525
+ // stores telemetry, evals, ... into memory storage, if it needs to persist, change to file:../mastra.db
1526
+ url: ":memory:",
1527
+ }),
1404
1528
  logger: createLogger({
1405
1529
  name: 'Mastra',
1406
1530
  level: 'info',
@@ -1422,6 +1546,12 @@ var getAPIKey = async (provider) => {
1422
1546
  case "groq":
1423
1547
  key = "GROQ_API_KEY";
1424
1548
  return key;
1549
+ case "google":
1550
+ key = "GOOGLE_GENERATIVE_AI_API_KEY";
1551
+ return key;
1552
+ case "cerebras":
1553
+ key = "CEREBRAS_API_KEY";
1554
+ return key;
1425
1555
  default:
1426
1556
  return key;
1427
1557
  }
@@ -1480,7 +1610,9 @@ var interactivePrompt = async () => {
1480
1610
  options: [
1481
1611
  { value: "openai", label: "OpenAI", hint: "recommended" },
1482
1612
  { value: "anthropic", label: "Anthropic" },
1483
- { value: "groq", label: "Groq" }
1613
+ { value: "groq", label: "Groq" },
1614
+ { value: "google", label: "Google" },
1615
+ { value: "cerebras", label: "Cerebras" }
1484
1616
  ]
1485
1617
  }),
1486
1618
  llmApiKey: async ({ results: { llmProvider } }) => {
@@ -1503,7 +1635,71 @@ var interactivePrompt = async () => {
1503
1635
  addExample: () => ce({
1504
1636
  message: "Add example",
1505
1637
  initialValue: false
1506
- })
1638
+ }),
1639
+ configureEditorWithDocsMCP: async () => {
1640
+ const windsurfIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`windsurf`);
1641
+ const cursorIsAlreadyInstalled = await globalMCPIsAlreadyInstalled(`cursor`);
1642
+ const editor = await le({
1643
+ message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
1644
+ options: [
1645
+ { value: "skip", label: "Skip for now", hint: "default" },
1646
+ {
1647
+ value: "cursor",
1648
+ label: "Cursor (project only)",
1649
+ hint: cursorIsAlreadyInstalled ? `Already installed globally` : void 0
1650
+ },
1651
+ {
1652
+ value: "cursor-global",
1653
+ label: "Cursor (global, all projects)",
1654
+ hint: cursorIsAlreadyInstalled ? `Already installed` : void 0
1655
+ },
1656
+ {
1657
+ value: "windsurf",
1658
+ label: "Windsurf",
1659
+ hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
1660
+ }
1661
+ ]
1662
+ });
1663
+ if (editor === `skip`) return void 0;
1664
+ if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
1665
+ v.message(`
1666
+ Windsurf is already installed, skipping.`);
1667
+ return void 0;
1668
+ }
1669
+ if (editor === `cursor`) {
1670
+ v.message(
1671
+ `
1672
+ Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
1673
+ `
1674
+ );
1675
+ }
1676
+ if (editor === `cursor-global`) {
1677
+ const confirm2 = await le({
1678
+ message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,
1679
+ options: [
1680
+ { value: "yes", label: "Yes, I understand" },
1681
+ { value: "skip", label: "No, skip for now" }
1682
+ ]
1683
+ });
1684
+ if (confirm2 !== `yes`) {
1685
+ return void 0;
1686
+ }
1687
+ }
1688
+ if (editor === `windsurf`) {
1689
+ const confirm2 = await le({
1690
+ message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
1691
+ This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
1692
+ options: [
1693
+ { value: "yes", label: "Yes, I understand" },
1694
+ { value: "skip", label: "No, skip for now" }
1695
+ ]
1696
+ });
1697
+ if (confirm2 !== `yes`) {
1698
+ return void 0;
1699
+ }
1700
+ }
1701
+ return editor;
1702
+ }
1507
1703
  },
1508
1704
  {
1509
1705
  onCancel: () => {
@@ -1523,7 +1719,8 @@ var init = async ({
1523
1719
  addExample = false,
1524
1720
  components,
1525
1721
  llmProvider = "openai",
1526
- llmApiKey
1722
+ llmApiKey,
1723
+ configureEditorWithDocsMCP
1527
1724
  }) => {
1528
1725
  s.start("Initializing Mastra");
1529
1726
  try {
@@ -1549,12 +1746,28 @@ var init = async ({
1549
1746
  (component) => writeCodeSample(dirPath, component, llmProvider, components)
1550
1747
  )
1551
1748
  ]);
1749
+ const depService = new DepsService();
1750
+ const needsLibsql = await depService.checkDependencies(["@mastra/libsql"]) !== `ok`;
1751
+ if (needsLibsql) {
1752
+ await depService.installPackages(["@mastra/libsql"]);
1753
+ }
1754
+ const needsMemory = components.includes(`agents`) && await depService.checkDependencies(["@mastra/memory"]) !== `ok`;
1755
+ if (needsMemory) {
1756
+ await depService.installPackages(["@mastra/memory"]);
1757
+ }
1552
1758
  }
1553
1759
  const key = await getAPIKey(llmProvider || "openai");
1554
1760
  const aiSdkPackage = getAISDKPackage(llmProvider);
1555
- const pm = getPackageManager();
1761
+ const depsService = new DepsService();
1762
+ const pm = depsService.packageManager;
1556
1763
  const installCommand = getPackageManagerInstallCommand(pm);
1557
1764
  await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
1765
+ if (configureEditorWithDocsMCP) {
1766
+ await installMastraDocsMCPServer({
1767
+ editor: configureEditorWithDocsMCP,
1768
+ directory: process.cwd()
1769
+ });
1770
+ }
1558
1771
  s.stop();
1559
1772
  if (!llmApiKey) {
1560
1773
  me(`
@@ -1576,9 +1789,12 @@ var init = async ({
1576
1789
  }
1577
1790
  };
1578
1791
  var exec3 = util.promisify(child_process.exec);
1579
- var execWithTimeout = async (command, timeoutMs = 18e4) => {
1792
+ var execWithTimeout = async (command, timeoutMs) => {
1580
1793
  try {
1581
1794
  const promise = exec3(command, { killSignal: "SIGTERM" });
1795
+ if (!timeoutMs) {
1796
+ return await promise;
1797
+ }
1582
1798
  let timeoutId;
1583
1799
  const timeout = new Promise((_, reject) => {
1584
1800
  timeoutId = setTimeout(() => reject(new Error("Command timed out")), timeoutMs);
@@ -1599,9 +1815,28 @@ var execWithTimeout = async (command, timeoutMs = 18e4) => {
1599
1815
  throw error;
1600
1816
  }
1601
1817
  };
1602
- var createMastraProject = async ({ createVersionTag }) => {
1818
+ async function installMastraDependency(pm, dependency, versionTag, isDev, timeout) {
1819
+ let installCommand = getPackageManagerInstallCommand(pm);
1820
+ if (isDev) {
1821
+ installCommand = `${installCommand} --save-dev`;
1822
+ }
1823
+ try {
1824
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);
1825
+ } catch (err) {
1826
+ console.log("err", err);
1827
+ if (versionTag === "@latest") {
1828
+ throw err;
1829
+ }
1830
+ await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);
1831
+ }
1832
+ }
1833
+ var createMastraProject = async ({
1834
+ projectName: name,
1835
+ createVersionTag,
1836
+ timeout
1837
+ }) => {
1603
1838
  pe(color2.inverse("Mastra Create"));
1604
- const projectName = await ae({
1839
+ const projectName = name ?? await ae({
1605
1840
  message: "What do you want to name your project?",
1606
1841
  placeholder: "my-mastra-app",
1607
1842
  defaultValue: "my-mastra-app"
@@ -1631,12 +1866,13 @@ var createMastraProject = async ({ createVersionTag }) => {
1631
1866
  await exec3(`npm pkg set type="module"`);
1632
1867
  const depsService = new DepsService();
1633
1868
  await depsService.addScriptsToPackageJson({
1634
- dev: "mastra dev"
1869
+ dev: "mastra dev",
1870
+ build: "mastra build"
1635
1871
  });
1636
1872
  s2.stop("Project created");
1637
1873
  s2.start(`Installing ${pm} dependencies`);
1638
1874
  await exec3(`${pm} ${installCommand} zod`);
1639
- await exec3(`${pm} ${installCommand} typescript tsx @types/node --save-dev`);
1875
+ await exec3(`${pm} ${installCommand} typescript @types/node --save-dev`);
1640
1876
  await exec3(`echo '{
1641
1877
  "compilerOptions": {
1642
1878
  "target": "ES2022",
@@ -1646,25 +1882,23 @@ var createMastraProject = async ({ createVersionTag }) => {
1646
1882
  "forceConsistentCasingInFileNames": true,
1647
1883
  "strict": true,
1648
1884
  "skipLibCheck": true,
1885
+ "noEmit": true,
1649
1886
  "outDir": "dist"
1650
1887
  },
1651
1888
  "include": [
1652
1889
  "src/**/*"
1653
- ],
1654
- "exclude": [
1655
- "node_modules",
1656
- "dist",
1657
- ".mastra"
1658
1890
  ]
1659
1891
  }' > tsconfig.json`);
1660
1892
  s2.stop(`${pm} dependencies installed`);
1661
1893
  s2.start("Installing mastra");
1662
1894
  const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
1663
- await execWithTimeout(`${pm} ${installCommand} mastra${versionTag}`);
1895
+ await installMastraDependency(pm, "mastra", versionTag, true, timeout);
1664
1896
  s2.stop("mastra installed");
1665
- s2.start("Installing @mastra/core");
1666
- await execWithTimeout(`${pm} ${installCommand} @mastra/core${versionTag}`);
1667
- s2.stop("@mastra/core installed");
1897
+ s2.start("Installing dependencies");
1898
+ await installMastraDependency(pm, "@mastra/core", versionTag, false, timeout);
1899
+ await installMastraDependency(pm, "@mastra/libsql", versionTag, false, timeout);
1900
+ await installMastraDependency(pm, "@mastra/memory", versionTag, false, timeout);
1901
+ s2.stop("Dependencies installed");
1668
1902
  s2.start("Adding .gitignore");
1669
1903
  await exec3(`echo output.txt >> .gitignore`);
1670
1904
  await exec3(`echo node_modules >> .gitignore`);
@@ -1673,17 +1907,20 @@ var createMastraProject = async ({ createVersionTag }) => {
1673
1907
  await exec3(`echo .env.development >> .gitignore`);
1674
1908
  await exec3(`echo .env >> .gitignore`);
1675
1909
  await exec3(`echo *.db >> .gitignore`);
1910
+ await exec3(`echo *.db-* >> .gitignore`);
1676
1911
  s2.stop(".gitignore added");
1677
1912
  ge("Project created successfully");
1678
1913
  console.log("");
1679
1914
  return { projectName };
1680
1915
  };
1681
- var create = async (args) => {
1916
+ var create = async (args2) => {
1682
1917
  const { projectName } = await createMastraProject({
1683
- createVersionTag: args?.createVersionTag
1918
+ projectName: args2?.projectName,
1919
+ createVersionTag: args2?.createVersionTag,
1920
+ timeout: args2?.timeout
1684
1921
  });
1685
- const directory = "/src";
1686
- if (!args.components || !args.llmProvider || !args.addExample) {
1922
+ const directory = args2.directory || "src/";
1923
+ if (args2.components === void 0 || args2.llmProvider === void 0 || args2.addExample === void 0) {
1687
1924
  const result = await interactivePrompt();
1688
1925
  await init({
1689
1926
  ...result,
@@ -1692,7 +1929,7 @@ var create = async (args) => {
1692
1929
  postCreate({ projectName });
1693
1930
  return;
1694
1931
  }
1695
- const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args;
1932
+ const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
1696
1933
  await init({
1697
1934
  directory,
1698
1935
  components,
@@ -1718,49 +1955,15 @@ async function getPackageVersion() {
1718
1955
  const content = await fsExtra.readJSON(pkgJsonPath);
1719
1956
  return content.version;
1720
1957
  }
1721
- async function tryReadPackageJson(paths) {
1722
- let lastError;
1723
- for (const path2 of paths) {
1724
- try {
1725
- const content = await fsExtra.readJSON(path2);
1726
- if (content.name === "create-mastra") {
1727
- return content;
1728
- }
1729
- } catch (err) {
1730
- lastError = err;
1731
- continue;
1732
- }
1733
- }
1734
- throw lastError || new Error("Could not find create-mastra package.json in any of the expected locations");
1735
- }
1736
1958
  async function getCreateVersionTag() {
1737
1959
  try {
1738
- const binPath = process.argv[1];
1739
- const binDir = dirname(binPath);
1740
- const possiblePaths = [
1741
- // Direct parent paths
1742
- path.join(binDir, "..", "package.json"),
1743
- path.join(binDir, "..", "..", "package.json"),
1744
- path.join(binDir, "..", "..", "..", "package.json"),
1745
- path.join(binDir, "..", "..", "..", "..", "package.json"),
1746
- // Standard node_modules paths
1747
- path.join(binDir, "..", "create-mastra", "package.json"),
1748
- path.join(binDir, "..", "..", "create-mastra", "package.json"),
1749
- path.join(binDir, "..", "..", "..", "create-mastra", "package.json"),
1750
- path.join(binDir, "..", "..", "..", "..", "create-mastra", "package.json"),
1751
- // pnpm specific paths (.pnpm directory)
1752
- path.join(binDir, "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
1753
- path.join(binDir, "..", "..", ".pnpm", "create-mastra@*", "node_modules", "create-mastra", "package.json"),
1754
- // pnpm dlx specific path
1755
- path.join(binDir, "..", "..", "package.json"),
1756
- path.join(binDir, "..", "..", "node_modules", "create-mastra", "package.json")
1757
- ];
1758
- const content = await tryReadPackageJson(possiblePaths);
1759
- if (content.version?.includes("-")) {
1760
- const tag = content.version.split("-")[1].split(".")[0];
1761
- return tag;
1762
- }
1763
- } catch (error) {
1960
+ const pkgPath = fileURLToPath(import.meta.resolve("create-mastra/package.json"));
1961
+ const json = await fsExtra.readJSON(pkgPath);
1962
+ const { stdout } = await execa("npm", ["dist-tag", "create-mastra"]);
1963
+ const tagLine = stdout.split("\n").find((distLine) => distLine.includes(`: ${json.version}`));
1964
+ const tag = tagLine ? tagLine.split(":")[0].trim() : "latest";
1965
+ return tag;
1966
+ } catch {
1764
1967
  console.error('We could not resolve the create-mastra version tag, falling back to "latest"');
1765
1968
  }
1766
1969
  return "latest";
@@ -1780,16 +1983,22 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
1780
1983
  command: "version"
1781
1984
  });
1782
1985
  console.log(`create-mastra ${version}`);
1783
- } catch (e) {
1986
+ } catch {
1784
1987
  }
1785
1988
  });
1786
- program.name("create-mastra").description("Create a new Mastra project").option("--default", "Quick start with defaults(src, OpenAI, no examples)").option("-c, --components <components>", "Comma-separated list of components (agents, tools, workflows)").option("-l, --llm <model-provider>", "Default model provider (openai, anthropic, or groq)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").action(async (args) => {
1989
+ program.name("create-mastra").description("Create a new Mastra project").argument("[project-name]", "Directory name of the project").option(
1990
+ "-p, --project-name <string>",
1991
+ "Project name that will be used in package.json and as the project directory name."
1992
+ ).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) => {
1993
+ const projectName = projectNameArg || args.projectName;
1994
+ const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
1787
1995
  if (args.default) {
1788
1996
  await create({
1789
1997
  components: ["agents", "tools", "workflows"],
1790
1998
  llmProvider: "openai",
1791
1999
  addExample: false,
1792
- createVersionTag
2000
+ createVersionTag,
2001
+ timeout
1793
2002
  });
1794
2003
  return;
1795
2004
  }
@@ -1798,7 +2007,10 @@ program.name("create-mastra").description("Create a new Mastra project").option(
1798
2007
  llmProvider: args.llm,
1799
2008
  addExample: args.example,
1800
2009
  llmApiKey: args["llm-api-key"],
1801
- createVersionTag
2010
+ createVersionTag,
2011
+ timeout,
2012
+ projectName,
2013
+ directory: args.dir
1802
2014
  });
1803
2015
  });
1804
2016
  program.parse(process.argv);