create-mastra 0.0.0-commonjs-20250227130920 → 0.0.0-commonjs-20250414101718
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/{LICENSE → LICENSE.md} +3 -1
- package/README.md +1 -1
- package/dist/index.js +234 -79
- package/dist/index.js.map +1 -1
- package/dist/templates/dev.entry.js +11 -7
- package/package.json +17 -16
package/{LICENSE → LICENSE.md}
RENAMED
package/README.md
CHANGED
|
@@ -32,7 +32,7 @@ pnpm create mastra
|
|
|
32
32
|
|
|
33
33
|
- `--default` - Quick start with defaults (src directory, OpenAI, no examples)
|
|
34
34
|
- `-c, --components <components>` - Comma-separated list of components (agents, tools, workflows)
|
|
35
|
-
- `-l, --llm <model-provider>` - Default model provider (openai, anthropic, or
|
|
35
|
+
- `-l, --llm <model-provider>` - Default model provider (openai, anthropic, groq, google, or cerebras)
|
|
36
36
|
- `-e, --example` - Include example code
|
|
37
37
|
|
|
38
38
|
## Examples
|
package/dist/index.js
CHANGED
|
@@ -14,9 +14,9 @@ import tty, { WriteStream } from 'node:tty';
|
|
|
14
14
|
import child_process from 'node:child_process';
|
|
15
15
|
import util from 'node:util';
|
|
16
16
|
import fs4 from 'node:fs/promises';
|
|
17
|
-
import fsExtra3 from 'fs-extra/esm';
|
|
18
|
-
import prettier from 'prettier';
|
|
19
17
|
import { execa } from 'execa';
|
|
18
|
+
import fsExtra3, { readJSON, ensureFile, writeJSON } from 'fs-extra/esm';
|
|
19
|
+
import prettier from 'prettier';
|
|
20
20
|
import { Transform } from 'node:stream';
|
|
21
21
|
import pino from 'pino';
|
|
22
22
|
import pretty from 'pino-pretty';
|
|
@@ -80,7 +80,7 @@ var PosthogAnalytics = class {
|
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
isTelemetryEnabled() {
|
|
83
|
-
if (process.env.
|
|
83
|
+
if (process.env.MASTRA_TELEMETRY_DISABLED) {
|
|
84
84
|
return false;
|
|
85
85
|
}
|
|
86
86
|
return true;
|
|
@@ -97,7 +97,8 @@ var PosthogAnalytics = class {
|
|
|
97
97
|
platform: process.arch,
|
|
98
98
|
session_id: this.sessionId,
|
|
99
99
|
cli_version: this.version || "unknown",
|
|
100
|
-
machine_id: os.hostname()
|
|
100
|
+
machine_id: os.hostname(),
|
|
101
|
+
geoip_disable: false
|
|
101
102
|
};
|
|
102
103
|
}
|
|
103
104
|
captureSessionStart() {
|
|
@@ -135,7 +136,8 @@ 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
143
|
} catch {
|
|
@@ -145,7 +147,8 @@ var PosthogAnalytics = class {
|
|
|
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
|
}
|
|
@@ -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
|
-
`);},
|
|
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(([
|
|
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,95 @@ 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
|
+
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
|
+
}
|
|
988
1057
|
var EnvService = class {
|
|
989
1058
|
};
|
|
990
1059
|
var FileEnvService = class extends EnvService {
|
|
@@ -1104,6 +1173,10 @@ var getAISDKPackage = (llmProvider) => {
|
|
|
1104
1173
|
return "@ai-sdk/anthropic";
|
|
1105
1174
|
case "groq":
|
|
1106
1175
|
return "@ai-sdk/groq";
|
|
1176
|
+
case "google":
|
|
1177
|
+
return "@ai-sdk/google";
|
|
1178
|
+
case "cerebras":
|
|
1179
|
+
return "@ai-sdk/cerebras";
|
|
1107
1180
|
default:
|
|
1108
1181
|
return "@ai-sdk/openai";
|
|
1109
1182
|
}
|
|
@@ -1119,7 +1192,13 @@ var getProviderImportAndModelItem = (llmProvider) => {
|
|
|
1119
1192
|
modelItem = `anthropic('claude-3-5-sonnet-20241022')`;
|
|
1120
1193
|
} else if (llmProvider === "groq") {
|
|
1121
1194
|
providerImport = `import { groq } from '${getAISDKPackage(llmProvider)}';`;
|
|
1122
|
-
modelItem = `groq('
|
|
1195
|
+
modelItem = `groq('llama-3.3-70b-versatile')`;
|
|
1196
|
+
} else if (llmProvider === "google") {
|
|
1197
|
+
providerImport = `import { google } from '${getAISDKPackage(llmProvider)}';`;
|
|
1198
|
+
modelItem = `google('gemini-1.5-pro-latest')`;
|
|
1199
|
+
} else if (llmProvider === "cerebras") {
|
|
1200
|
+
providerImport = `import { cerebras } from '${getAISDKPackage(llmProvider)}';`;
|
|
1201
|
+
modelItem = `cerebras('llama-3.3-70b')`;
|
|
1123
1202
|
}
|
|
1124
1203
|
return { providerImport, modelItem };
|
|
1125
1204
|
};
|
|
@@ -1130,6 +1209,7 @@ async function writeAgentSample(llmProvider, destPath, addExampleTool) {
|
|
|
1130
1209
|
|
|
1131
1210
|
Your primary function is to help users get weather details for specific locations. When responding:
|
|
1132
1211
|
- Always ask for a location if none is provided
|
|
1212
|
+
- If the location name isn\u2019t in English, please translate it
|
|
1133
1213
|
- If giving a location with multiple parts (e.g. "New York, NY"), use the most relevant part (e.g. "New York")
|
|
1134
1214
|
- Include relevant details like humidity, wind conditions, and precipitation
|
|
1135
1215
|
- Keep responses concise but informative
|
|
@@ -1212,12 +1292,24 @@ const agent = new Agent({
|
|
|
1212
1292
|
\`,
|
|
1213
1293
|
});
|
|
1214
1294
|
|
|
1295
|
+
const forecastSchema = z.array(
|
|
1296
|
+
z.object({
|
|
1297
|
+
date: z.string(),
|
|
1298
|
+
maxTemp: z.number(),
|
|
1299
|
+
minTemp: z.number(),
|
|
1300
|
+
precipitationChance: z.number(),
|
|
1301
|
+
condition: z.string(),
|
|
1302
|
+
location: z.string(),
|
|
1303
|
+
}),
|
|
1304
|
+
);
|
|
1305
|
+
|
|
1215
1306
|
const fetchWeather = new Step({
|
|
1216
1307
|
id: 'fetch-weather',
|
|
1217
1308
|
description: 'Fetches weather forecast for a given city',
|
|
1218
1309
|
inputSchema: z.object({
|
|
1219
1310
|
city: z.string().describe('The city to get the weather for'),
|
|
1220
1311
|
}),
|
|
1312
|
+
outputSchema: forecastSchema,
|
|
1221
1313
|
execute: async ({ context }) => {
|
|
1222
1314
|
const triggerData = context?.getStepResult<{ city: string }>('trigger');
|
|
1223
1315
|
|
|
@@ -1262,23 +1354,12 @@ const fetchWeather = new Step({
|
|
|
1262
1354
|
},
|
|
1263
1355
|
});
|
|
1264
1356
|
|
|
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
1357
|
|
|
1276
1358
|
const planActivities = new Step({
|
|
1277
1359
|
id: 'plan-activities',
|
|
1278
1360
|
description: 'Suggests activities based on weather conditions',
|
|
1279
|
-
inputSchema: forecastSchema,
|
|
1280
1361
|
execute: async ({ context, mastra }) => {
|
|
1281
|
-
const forecast = context?.getStepResult
|
|
1362
|
+
const forecast = context?.getStepResult(fetchWeather);
|
|
1282
1363
|
|
|
1283
1364
|
if (!forecast || forecast.length === 0) {
|
|
1284
1365
|
throw new Error('Forecast data not found');
|
|
@@ -1295,12 +1376,15 @@ const planActivities = new Step({
|
|
|
1295
1376
|
},
|
|
1296
1377
|
]);
|
|
1297
1378
|
|
|
1379
|
+
let activitiesText = '';
|
|
1380
|
+
|
|
1298
1381
|
for await (const chunk of response.textStream) {
|
|
1299
1382
|
process.stdout.write(chunk);
|
|
1383
|
+
activitiesText += chunk;
|
|
1300
1384
|
}
|
|
1301
1385
|
|
|
1302
1386
|
return {
|
|
1303
|
-
activities:
|
|
1387
|
+
activities: activitiesText,
|
|
1304
1388
|
};
|
|
1305
1389
|
},
|
|
1306
1390
|
});
|
|
@@ -1422,6 +1506,12 @@ var getAPIKey = async (provider) => {
|
|
|
1422
1506
|
case "groq":
|
|
1423
1507
|
key = "GROQ_API_KEY";
|
|
1424
1508
|
return key;
|
|
1509
|
+
case "google":
|
|
1510
|
+
key = "GOOGLE_GENERATIVE_AI_API_KEY";
|
|
1511
|
+
return key;
|
|
1512
|
+
case "cerebras":
|
|
1513
|
+
key = "CEREBRAS_API_KEY";
|
|
1514
|
+
return key;
|
|
1425
1515
|
default:
|
|
1426
1516
|
return key;
|
|
1427
1517
|
}
|
|
@@ -1480,7 +1570,9 @@ var interactivePrompt = async () => {
|
|
|
1480
1570
|
options: [
|
|
1481
1571
|
{ value: "openai", label: "OpenAI", hint: "recommended" },
|
|
1482
1572
|
{ value: "anthropic", label: "Anthropic" },
|
|
1483
|
-
{ value: "groq", label: "Groq" }
|
|
1573
|
+
{ value: "groq", label: "Groq" },
|
|
1574
|
+
{ value: "google", label: "Google" },
|
|
1575
|
+
{ value: "cerebras", label: "Cerebras" }
|
|
1484
1576
|
]
|
|
1485
1577
|
}),
|
|
1486
1578
|
llmApiKey: async ({ results: { llmProvider } }) => {
|
|
@@ -1503,7 +1595,49 @@ var interactivePrompt = async () => {
|
|
|
1503
1595
|
addExample: () => ce({
|
|
1504
1596
|
message: "Add example",
|
|
1505
1597
|
initialValue: false
|
|
1506
|
-
})
|
|
1598
|
+
}),
|
|
1599
|
+
configureEditorWithDocsMCP: async () => {
|
|
1600
|
+
const windsurfIsAlreadyInstalled = await globalWindsurfMCPIsAlreadyInstalled();
|
|
1601
|
+
const editor = await le({
|
|
1602
|
+
message: `Make your AI IDE into a Mastra expert? (installs Mastra docs MCP server)`,
|
|
1603
|
+
options: [
|
|
1604
|
+
{ value: "skip", label: "Skip for now", hint: "default" },
|
|
1605
|
+
{ value: "cursor", label: "Cursor" },
|
|
1606
|
+
{
|
|
1607
|
+
value: "windsurf",
|
|
1608
|
+
label: "Windsurf",
|
|
1609
|
+
hint: windsurfIsAlreadyInstalled ? `Already installed` : void 0
|
|
1610
|
+
}
|
|
1611
|
+
]
|
|
1612
|
+
});
|
|
1613
|
+
if (editor === `skip`) return void 0;
|
|
1614
|
+
if (editor === `windsurf` && windsurfIsAlreadyInstalled) {
|
|
1615
|
+
v.message(`
|
|
1616
|
+
Windsurf is already installed, skipping.`);
|
|
1617
|
+
return void 0;
|
|
1618
|
+
}
|
|
1619
|
+
if (editor === `cursor`) {
|
|
1620
|
+
v.message(
|
|
1621
|
+
`
|
|
1622
|
+
Note: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.
|
|
1623
|
+
`
|
|
1624
|
+
);
|
|
1625
|
+
}
|
|
1626
|
+
if (editor === `windsurf`) {
|
|
1627
|
+
const confirm2 = await le({
|
|
1628
|
+
message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?
|
|
1629
|
+
This means the Mastra docs MCP server will be available in all your Windsurf projects.`,
|
|
1630
|
+
options: [
|
|
1631
|
+
{ value: "yes", label: "Yes, I understand" },
|
|
1632
|
+
{ value: "skip", label: "No, skip for now" }
|
|
1633
|
+
]
|
|
1634
|
+
});
|
|
1635
|
+
if (confirm2 !== `yes`) {
|
|
1636
|
+
return void 0;
|
|
1637
|
+
}
|
|
1638
|
+
}
|
|
1639
|
+
return editor;
|
|
1640
|
+
}
|
|
1507
1641
|
},
|
|
1508
1642
|
{
|
|
1509
1643
|
onCancel: () => {
|
|
@@ -1523,7 +1657,8 @@ var init = async ({
|
|
|
1523
1657
|
addExample = false,
|
|
1524
1658
|
components,
|
|
1525
1659
|
llmProvider = "openai",
|
|
1526
|
-
llmApiKey
|
|
1660
|
+
llmApiKey,
|
|
1661
|
+
configureEditorWithDocsMCP
|
|
1527
1662
|
}) => {
|
|
1528
1663
|
s.start("Initializing Mastra");
|
|
1529
1664
|
try {
|
|
@@ -1552,9 +1687,16 @@ var init = async ({
|
|
|
1552
1687
|
}
|
|
1553
1688
|
const key = await getAPIKey(llmProvider || "openai");
|
|
1554
1689
|
const aiSdkPackage = getAISDKPackage(llmProvider);
|
|
1555
|
-
const
|
|
1690
|
+
const depsService = new DepsService();
|
|
1691
|
+
const pm = depsService.packageManager;
|
|
1556
1692
|
const installCommand = getPackageManagerInstallCommand(pm);
|
|
1557
1693
|
await exec2(`${pm} ${installCommand} ${aiSdkPackage}`);
|
|
1694
|
+
if (configureEditorWithDocsMCP) {
|
|
1695
|
+
await installMastraDocsMCPServer({
|
|
1696
|
+
editor: configureEditorWithDocsMCP,
|
|
1697
|
+
directory: process.cwd()
|
|
1698
|
+
});
|
|
1699
|
+
}
|
|
1558
1700
|
s.stop();
|
|
1559
1701
|
if (!llmApiKey) {
|
|
1560
1702
|
me(`
|
|
@@ -1576,9 +1718,12 @@ var init = async ({
|
|
|
1576
1718
|
}
|
|
1577
1719
|
};
|
|
1578
1720
|
var exec3 = util.promisify(child_process.exec);
|
|
1579
|
-
var execWithTimeout = async (command, timeoutMs
|
|
1721
|
+
var execWithTimeout = async (command, timeoutMs) => {
|
|
1580
1722
|
try {
|
|
1581
1723
|
const promise = exec3(command, { killSignal: "SIGTERM" });
|
|
1724
|
+
if (!timeoutMs) {
|
|
1725
|
+
return await promise;
|
|
1726
|
+
}
|
|
1582
1727
|
let timeoutId;
|
|
1583
1728
|
const timeout = new Promise((_, reject) => {
|
|
1584
1729
|
timeoutId = setTimeout(() => reject(new Error("Command timed out")), timeoutMs);
|
|
@@ -1599,9 +1744,13 @@ var execWithTimeout = async (command, timeoutMs = 18e4) => {
|
|
|
1599
1744
|
throw error;
|
|
1600
1745
|
}
|
|
1601
1746
|
};
|
|
1602
|
-
var createMastraProject = async ({
|
|
1747
|
+
var createMastraProject = async ({
|
|
1748
|
+
projectName: name,
|
|
1749
|
+
createVersionTag,
|
|
1750
|
+
timeout
|
|
1751
|
+
}) => {
|
|
1603
1752
|
pe(color2.inverse("Mastra Create"));
|
|
1604
|
-
const projectName = await ae({
|
|
1753
|
+
const projectName = name ?? await ae({
|
|
1605
1754
|
message: "What do you want to name your project?",
|
|
1606
1755
|
placeholder: "my-mastra-app",
|
|
1607
1756
|
defaultValue: "my-mastra-app"
|
|
@@ -1660,10 +1809,10 @@ var createMastraProject = async ({ createVersionTag }) => {
|
|
|
1660
1809
|
s2.stop(`${pm} dependencies installed`);
|
|
1661
1810
|
s2.start("Installing mastra");
|
|
1662
1811
|
const versionTag = createVersionTag ? `@${createVersionTag}` : "@latest";
|
|
1663
|
-
await execWithTimeout(`${pm} ${installCommand} mastra${versionTag}
|
|
1812
|
+
await execWithTimeout(`${pm} ${installCommand} mastra${versionTag}`, timeout);
|
|
1664
1813
|
s2.stop("mastra installed");
|
|
1665
1814
|
s2.start("Installing @mastra/core");
|
|
1666
|
-
await execWithTimeout(`${pm} ${installCommand} @mastra/core${versionTag}
|
|
1815
|
+
await execWithTimeout(`${pm} ${installCommand} @mastra/core${versionTag}`, timeout);
|
|
1667
1816
|
s2.stop("@mastra/core installed");
|
|
1668
1817
|
s2.start("Adding .gitignore");
|
|
1669
1818
|
await exec3(`echo output.txt >> .gitignore`);
|
|
@@ -1673,17 +1822,20 @@ var createMastraProject = async ({ createVersionTag }) => {
|
|
|
1673
1822
|
await exec3(`echo .env.development >> .gitignore`);
|
|
1674
1823
|
await exec3(`echo .env >> .gitignore`);
|
|
1675
1824
|
await exec3(`echo *.db >> .gitignore`);
|
|
1825
|
+
await exec3(`echo *.db-* >> .gitignore`);
|
|
1676
1826
|
s2.stop(".gitignore added");
|
|
1677
1827
|
ge("Project created successfully");
|
|
1678
1828
|
console.log("");
|
|
1679
1829
|
return { projectName };
|
|
1680
1830
|
};
|
|
1681
|
-
var create = async (
|
|
1831
|
+
var create = async (args2) => {
|
|
1682
1832
|
const { projectName } = await createMastraProject({
|
|
1683
|
-
|
|
1833
|
+
projectName: args2?.projectName,
|
|
1834
|
+
createVersionTag: args2?.createVersionTag,
|
|
1835
|
+
timeout: args2?.timeout
|
|
1684
1836
|
});
|
|
1685
1837
|
const directory = "/src";
|
|
1686
|
-
if (!
|
|
1838
|
+
if (!args2.components || !args2.llmProvider || !args2.addExample) {
|
|
1687
1839
|
const result = await interactivePrompt();
|
|
1688
1840
|
await init({
|
|
1689
1841
|
...result,
|
|
@@ -1692,7 +1844,7 @@ var create = async (args) => {
|
|
|
1692
1844
|
postCreate({ projectName });
|
|
1693
1845
|
return;
|
|
1694
1846
|
}
|
|
1695
|
-
const { components = [], llmProvider = "openai", addExample = false, llmApiKey } =
|
|
1847
|
+
const { components = [], llmProvider = "openai", addExample = false, llmApiKey } = args2;
|
|
1696
1848
|
await init({
|
|
1697
1849
|
directory,
|
|
1698
1850
|
components,
|
|
@@ -1783,13 +1935,15 @@ program.version(`${version}`, "-v, --version").description(`create-mastra ${vers
|
|
|
1783
1935
|
} catch {
|
|
1784
1936
|
}
|
|
1785
1937
|
});
|
|
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
|
|
1938
|
+
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, groq, google, or cerebras)").option("-k, --llm-api-key <api-key>", "API key for the model provider").option("-e, --example", "Include example code").option("-t, --timeout [timeout]", "Configurable timeout for package installation, defaults to 60000 ms").action(async (args) => {
|
|
1939
|
+
const timeout = args?.timeout ? args?.timeout === true ? 6e4 : parseInt(args?.timeout, 10) : void 0;
|
|
1787
1940
|
if (args.default) {
|
|
1788
1941
|
await create({
|
|
1789
1942
|
components: ["agents", "tools", "workflows"],
|
|
1790
1943
|
llmProvider: "openai",
|
|
1791
1944
|
addExample: false,
|
|
1792
|
-
createVersionTag
|
|
1945
|
+
createVersionTag,
|
|
1946
|
+
timeout
|
|
1793
1947
|
});
|
|
1794
1948
|
return;
|
|
1795
1949
|
}
|
|
@@ -1798,7 +1952,8 @@ program.name("create-mastra").description("Create a new Mastra project").option(
|
|
|
1798
1952
|
llmProvider: args.llm,
|
|
1799
1953
|
addExample: args.example,
|
|
1800
1954
|
llmApiKey: args["llm-api-key"],
|
|
1801
|
-
createVersionTag
|
|
1955
|
+
createVersionTag,
|
|
1956
|
+
timeout
|
|
1802
1957
|
});
|
|
1803
1958
|
});
|
|
1804
1959
|
program.parse(process.argv);
|