mastra 1.3.17 → 1.3.18-alpha.0
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/CHANGELOG.md +16 -0
- package/dist/{chunk-AHQGUAUB.js → chunk-3UDL5KL6.js} +7 -7
- package/dist/chunk-3UDL5KL6.js.map +1 -0
- package/dist/commands/create/create.js +1 -1
- package/dist/commands/dev/DevBundler.d.ts.map +1 -1
- package/dist/commands/start/start.d.ts.map +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +2 -2
- package/dist/index.js +24 -37
- package/dist/index.js.map +1 -1
- package/dist/studio/assets/{chunk-ZCJMLMGS-CHlK_IfI.js → chunk-ZCJMLMGS-BOT6bgil.js} +1 -1
- package/dist/studio/assets/{index-ssKSCgs7.js → index-B64-5jue.js} +1 -1
- package/dist/studio/assets/{index-CDScig7X.js → index-BezgZFGI.js} +1 -1
- package/dist/studio/assets/{index-Wktr2oyp.js → index-CID0b16u.js} +1 -1
- package/dist/studio/assets/{index-CiiWxC-N.js → index-CZG5qr-3.js} +1 -1
- package/dist/studio/assets/{index-CyYrzAD7.js → index-CjPwWeTx.js} +1 -1
- package/dist/studio/assets/{index-CAG-QPEg.js → index-Crx-MqOU.js} +1 -1
- package/dist/studio/assets/{index-BmWiBi1B.js → index-CtzCYwcg.js} +1 -1
- package/dist/studio/assets/{index-Bwjq9j4-.js → index-Cvo65e_R.js} +1 -1
- package/dist/studio/assets/{index-DWorcTNt.js → index-D00sN_1C.js} +1 -1
- package/dist/studio/assets/{index-DMwhoLmS.js → index-D4SwkxY_.js} +1 -1
- package/dist/studio/assets/{index-DAXXr3mH.js → index-D90AzDSo.js} +1 -1
- package/dist/studio/assets/{index-CZzbx7I0.js → index-DPfEXXRv.js} +1 -1
- package/dist/studio/assets/{index-CTZrmCZr.js → index-DyvT7iNM.js} +1 -1
- package/dist/studio/assets/{index-DYQIsCUK.js → index-ERyinF-d.js} +1 -1
- package/dist/studio/assets/{index-CfoqMBuV.js → index-Od8K49Pu.js} +1 -1
- package/dist/studio/assets/{index-Csaj9nPS.js → index-foCDKB2m.js} +1 -1
- package/dist/studio/assets/{index-CWIdfI0R.js → index-isiami2i.js} +1 -1
- package/dist/studio/assets/{index-BXj_biWM.js → index-vXYPjTQx.js} +1 -1
- package/dist/studio/assets/{main-Aki3Izz8.js → main-DVlJ9SBZ.js} +187 -185
- package/dist/studio/assets/style-Bhnsh01F.css +1 -0
- package/dist/studio/assets/{token-APYSY3BW-RPVF55TR-DkyYu-Nk.js → token-APYSY3BW-RPVF55TR-BA3-Qb7n.js} +1 -1
- package/dist/studio/assets/token-util-RMHT2CPJ-VVUHOXBL-B5joyNC2.js +1 -0
- package/dist/studio/index.html +2 -2
- package/package.json +4 -4
- package/dist/chunk-AHQGUAUB.js.map +0 -1
- package/dist/studio/assets/style-jz1fKdCV.css +0 -1
- package/dist/studio/assets/token-util-RMHT2CPJ-VVUHOXBL-CEm9fIht.js +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# mastra
|
|
2
2
|
|
|
3
|
+
## 1.3.18-alpha.0
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Added Logs page to Studio. Browse server logs with date range filtering, text search, and column-based filters. Click any log to see its full message, metadata, and navigate to related traces and spans. ([#14899](https://github.com/mastra-ai/mastra/pull/14899))
|
|
8
|
+
|
|
9
|
+
- Standardized all logger calls across the codebase to use static string messages with structured data objects. Dynamic values are now passed as key-value pairs in the second argument instead of being interpolated into template literal strings. This improves log filterability and searchability in observability storage. ([#14899](https://github.com/mastra-ai/mastra/pull/14899))
|
|
10
|
+
|
|
11
|
+
Removed ~150 redundant or noisy log calls including duplicate error logging after trackException and verbose in-memory storage CRUD traces.
|
|
12
|
+
|
|
13
|
+
- Added missing `/logs` route to the playground and wired up logs filtering with date presets and the new `SelectDataFilter` component. Removed experimental UI variant gating from sidebar. ([#14899](https://github.com/mastra-ai/mastra/pull/14899))
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [[`cbeec24`](https://github.com/mastra-ai/mastra/commit/cbeec24b3c97a1a296e7e461e66cc7f7d215dc50), [`cee146b`](https://github.com/mastra-ai/mastra/commit/cee146b5d858212e1df2b2730fc36d3ceda0e08d), [`aa0aeff`](https://github.com/mastra-ai/mastra/commit/aa0aeffa11efbef5e219fbd97bf43d263cfe3afe), [`2bcec65`](https://github.com/mastra-ai/mastra/commit/2bcec652d62b07eab15e9eb9822f70184526eede), [`ad9bded`](https://github.com/mastra-ai/mastra/commit/ad9bdedf86a824801f49928a8d40f6e31ff5450f), [`cbeec24`](https://github.com/mastra-ai/mastra/commit/cbeec24b3c97a1a296e7e461e66cc7f7d215dc50), [`208c0bb`](https://github.com/mastra-ai/mastra/commit/208c0bbacbf5a1da6318f2a0e0c544390e542ddc), [`f566ee7`](https://github.com/mastra-ai/mastra/commit/f566ee7d53a3da33a01103e2a5ac2070ddefe6b0)]:
|
|
16
|
+
- @mastra/core@1.20.0-alpha.0
|
|
17
|
+
- @mastra/deployer@1.20.0-alpha.0
|
|
18
|
+
|
|
3
19
|
## 1.3.17
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
|
@@ -15,7 +15,7 @@ import prettier from 'prettier';
|
|
|
15
15
|
// package.json
|
|
16
16
|
var package_default = {
|
|
17
17
|
name: "mastra",
|
|
18
|
-
version: "1.3.
|
|
18
|
+
version: "1.3.18-alpha.0",
|
|
19
19
|
license: "Apache-2.0",
|
|
20
20
|
description: "cli for mastra",
|
|
21
21
|
type: "module",
|
|
@@ -212,7 +212,7 @@ async function updatePackageJson(projectPath, projectName) {
|
|
|
212
212
|
packageJson.name = projectName;
|
|
213
213
|
await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), "utf-8");
|
|
214
214
|
} catch (error) {
|
|
215
|
-
logger.warn(
|
|
215
|
+
logger.warn("Could not update package.json", { error: error instanceof Error ? error.message : "Unknown error" });
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
218
|
async function updateEnvFile(envPath, llmProvider) {
|
|
@@ -220,15 +220,15 @@ async function updateEnvFile(envPath, llmProvider) {
|
|
|
220
220
|
const envContent = await fs.readFile(envPath, "utf-8");
|
|
221
221
|
const modelString = getModelIdentifier(llmProvider);
|
|
222
222
|
if (!modelString) {
|
|
223
|
-
logger.warn(
|
|
223
|
+
logger.warn("Could not get model identifier for provider", { provider: llmProvider });
|
|
224
224
|
return;
|
|
225
225
|
}
|
|
226
226
|
const modelValue = modelString.replace(/'/g, "");
|
|
227
227
|
const updatedContent = envContent.replace(/^MODEL=.*/m, `MODEL=${modelValue}`);
|
|
228
228
|
await fs.writeFile(envPath, updatedContent, "utf-8");
|
|
229
|
-
logger.info(
|
|
229
|
+
logger.info("Updated MODEL in .env", { model: modelValue });
|
|
230
230
|
} catch (error) {
|
|
231
|
-
logger.warn(
|
|
231
|
+
logger.warn("Could not update .env file", { error: error instanceof Error ? error.message : "Unknown error" });
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
async function installDependencies(projectPath, packageManager) {
|
|
@@ -1036,5 +1036,5 @@ async function createFromTemplate(args) {
|
|
|
1036
1036
|
}
|
|
1037
1037
|
|
|
1038
1038
|
export { create, createLogger, init, logger, package_default };
|
|
1039
|
-
//# sourceMappingURL=chunk-
|
|
1040
|
-
//# sourceMappingURL=chunk-
|
|
1039
|
+
//# sourceMappingURL=chunk-3UDL5KL6.js.map
|
|
1040
|
+
//# sourceMappingURL=chunk-3UDL5KL6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../package.json","../src/utils/logger.ts","../src/utils/clone-template.ts","../src/utils/template-utils.ts","../src/commands/init/skills-install.ts","../src/commands/init/init.ts","../src/commands/create/utils.ts","../src/commands/create/create.ts"],"names":["spinner","p","p2","exec","util","child_process","path","fs","p3","color","s","fsSync"],"mappings":"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","file":"chunk-3UDL5KL6.js","sourcesContent":["{\n \"name\": \"mastra\",\n \"version\": \"1.3.18-alpha.0\",\n \"license\": \"Apache-2.0\",\n \"description\": \"cli for mastra\",\n \"type\": \"module\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/index.d.ts\",\n \"bin\": {\n \"mastra\": \"./dist/index.js\"\n },\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./package.json\": \"./package.json\",\n \"./telemetry-loader\": \"./dist/commands/dev/telemetry-loader.js\",\n \"./dist/*\": [\n \"./dist/*\",\n \"./dist/*.js\"\n ]\n },\n \"files\": [\n \"dist\",\n \"CHANGELOG.md\"\n ],\n \"scripts\": {\n \"build:lib\": \"tsup --silent --config tsup.config.ts\",\n \"prepack\": \"pnpx tsx ../../scripts/generate-package-docs.ts\",\n \"test\": \"vitest run\",\n \"test:watch\": \"vitest watch\",\n \"clean\": \"rm -rf dist && rm -rf node_modules\",\n \"typecheck\": \"tsc --noEmit --incremental\",\n \"lint\": \"eslint .\"\n },\n \"keywords\": [\n \"mastra\",\n \"cli\",\n \"ai\",\n \"llm\",\n \"llms\",\n \"agent\",\n \"agents\",\n \"dev\",\n \"development\",\n \"deploy\",\n \"deployment\",\n \"build\",\n \"workflow\",\n \"typescript\",\n \"command-line\",\n \"devtools\"\n ],\n \"dependencies\": {\n \"@clack/prompts\": \"^1.1.0\",\n \"@expo/devcert\": \"^1.2.1\",\n \"@mastra/deployer\": \"workspace:^\",\n \"@mastra/loggers\": \"workspace:^\",\n \"commander\": \"^14.0.3\",\n \"dotenv\": \"^17.3.1\",\n \"execa\": \"^9.6.1\",\n \"fs-extra\": \"^11.3.4\",\n \"get-port\": \"^7.1.0\",\n \"local-pkg\": \"^1.1.2\",\n \"picocolors\": \"^1.1.1\",\n \"posthog-node\": \"5.17.2\",\n \"prettier\": \"^3.8.1\",\n \"semver\": \"^7.7.4\",\n \"serve\": \"^14.2.6\",\n \"serve-handler\": \"^6.1.7\",\n \"shell-quote\": \"^1.8.3\",\n \"strip-json-comments\": \"^5.0.3\",\n \"yocto-spinner\": \"^1.1.0\"\n },\n \"devDependencies\": {\n \"@commander-js/extra-typings\": \"^14.0.0\",\n \"@internal/lint\": \"workspace:*\",\n \"@internal/playground\": \"workspace:*\",\n \"@internal/types-builder\": \"workspace:*\",\n \"@mastra/core\": \"workspace:*\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/node\": \"22.19.15\",\n \"@types/semver\": \"^7.7.1\",\n \"@types/serve-handler\": \"^6.1.4\",\n \"@types/shell-quote\": \"^1.7.5\",\n \"@vitest/coverage-v8\": \"catalog:\",\n \"@vitest/ui\": \"catalog:\",\n \"eslint\": \"^9.39.4\",\n \"memfs\": \"^4.56.11\",\n \"rollup\": \"^4.59.0\",\n \"tsup\": \"^8.5.1\",\n \"type-fest\": \"^5.4.4\",\n \"typescript\": \"catalog:\",\n \"vitest\": \"catalog:\"\n },\n \"peerDependencies\": {\n \"@mastra/core\": \">=1.1.0-0 <2.0.0-0\",\n \"zod\": \"^3.25.0 || ^4.0.0\"\n },\n \"homepage\": \"https://mastra.ai\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/mastra-ai/mastra.git\",\n \"directory\": \"packages/cli\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/mastra-ai/mastra/issues\"\n },\n \"engines\": {\n \"node\": \">=22.13.0\"\n }\n}\n","import { PinoLogger } from '@mastra/loggers';\n\nexport const logger = createLogger(false);\n\nexport function createLogger(debug: boolean = false) {\n return new PinoLogger({\n name: 'Mastra CLI',\n level: debug ? 'debug' : 'info',\n });\n}\n","import child_process from 'node:child_process';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport util from 'node:util';\nimport shellQuote from 'shell-quote';\nimport yoctoSpinner from 'yocto-spinner';\n\nimport type { LLMProvider } from '../commands/init/utils';\nimport { getModelIdentifier } from '../commands/init/utils';\nimport { getPackageManager } from '../commands/utils';\n\nimport { logger } from './logger';\nimport type { Template } from './template-utils';\n\nconst exec = util.promisify(child_process.exec);\n\nexport interface CloneTemplateOptions {\n template: Template;\n projectName: string;\n targetDir?: string;\n branch?: string;\n llmProvider?: LLMProvider;\n}\n\nexport async function cloneTemplate(options: CloneTemplateOptions): Promise<string> {\n const { template, projectName, targetDir, branch, llmProvider } = options;\n const projectPath = targetDir ? path.resolve(targetDir, projectName) : path.resolve(projectName);\n\n const spinner = yoctoSpinner({ text: `Cloning template \"${template.title}\"...` }).start();\n\n try {\n // Check if directory already exists\n if (await directoryExists(projectPath)) {\n spinner.error(`Directory ${projectName} already exists`);\n throw new Error(`Directory ${projectName} already exists`);\n }\n\n // Clone the repository without git history\n await cloneRepositoryWithoutGit(template.githubUrl, projectPath, branch);\n\n // Update package.json with new project name\n await updatePackageJson(projectPath, projectName);\n\n // Copy .env.example to .env if it exists, and update MODEL if llmProvider is specified\n const envExamplePath = path.join(projectPath, '.env.example');\n if (await fileExists(envExamplePath)) {\n const envPath = path.join(projectPath, '.env');\n await fs.copyFile(envExamplePath, envPath);\n\n // Update MODEL in .env if llmProvider is specified\n if (llmProvider) {\n await updateEnvFile(envPath, llmProvider);\n }\n }\n\n spinner.success(`Template \"${template.title}\" cloned successfully to ${projectName}`);\n return projectPath;\n } catch (error) {\n spinner.error(`Failed to clone template: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n\nasync function directoryExists(dirPath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(dirPath);\n return stat.isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function fileExists(filePath: string): Promise<boolean> {\n try {\n const stat = await fs.stat(filePath);\n return stat.isFile();\n } catch {\n return false;\n }\n}\n\nasync function cloneRepositoryWithoutGit(repoUrl: string, targetPath: string, branch?: string): Promise<void> {\n // Create target directory\n await fs.mkdir(targetPath, { recursive: true });\n\n try {\n // First try using degit if available (similar to Next.js)\n const degitRepo = repoUrl.replace('https://github.com/', '');\n // If branch is specified, append it to the degit repo (format: owner/repo#branch)\n const degitRepoWithBranch = branch ? `${degitRepo}#${branch}` : degitRepo;\n const degitCommand = shellQuote.quote(['npx', 'degit', degitRepoWithBranch, targetPath]);\n await exec(degitCommand, {\n cwd: process.cwd(),\n });\n } catch {\n // Fallback to git clone + remove .git\n try {\n const gitArgs = ['git', 'clone'];\n // Add branch flag if specified\n if (branch) {\n gitArgs.push('--branch', branch);\n }\n gitArgs.push(repoUrl, targetPath);\n\n const gitCommand = shellQuote.quote(gitArgs);\n await exec(gitCommand, {\n cwd: process.cwd(),\n });\n\n // Remove .git directory\n const gitDir = path.join(targetPath, '.git');\n if (await directoryExists(gitDir)) {\n await fs.rm(gitDir, { recursive: true, force: true });\n }\n } catch (gitError) {\n throw new Error(`Failed to clone repository: ${gitError instanceof Error ? gitError.message : 'Unknown error'}`);\n }\n }\n}\n\nasync function updatePackageJson(projectPath: string, projectName: string): Promise<void> {\n const packageJsonPath = path.join(projectPath, 'package.json');\n\n try {\n const packageJsonContent = await fs.readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(packageJsonContent);\n\n // Update the name field\n packageJson.name = projectName;\n\n // Write back the updated package.json\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf-8');\n } catch (error) {\n // It's okay if package.json doesn't exist or can't be updated\n logger.warn('Could not update package.json', { error: error instanceof Error ? error.message : 'Unknown error' });\n }\n}\n\nasync function updateEnvFile(envPath: string, llmProvider: LLMProvider): Promise<void> {\n try {\n const envContent = await fs.readFile(envPath, 'utf-8');\n const modelString = getModelIdentifier(llmProvider);\n\n if (!modelString) {\n logger.warn('Could not get model identifier for provider', { provider: llmProvider });\n return;\n }\n\n // Remove quotes from modelString (it comes as 'provider/model')\n const modelValue = modelString.replace(/'/g, '');\n\n // Replace the MODEL line with the selected provider's model\n const updatedContent = envContent.replace(/^MODEL=.*/m, `MODEL=${modelValue}`);\n\n await fs.writeFile(envPath, updatedContent, 'utf-8');\n logger.info('Updated MODEL in .env', { model: modelValue });\n } catch (error) {\n // It's okay if .env can't be updated\n logger.warn('Could not update .env file', { error: error instanceof Error ? error.message : 'Unknown error' });\n }\n}\n\nexport async function installDependencies(projectPath: string, packageManager?: string): Promise<void> {\n const spinner = yoctoSpinner({ text: 'Installing dependencies...' }).start();\n\n try {\n // Use provided package manager or detect from environment/globally\n const pm = packageManager || getPackageManager();\n\n const installCommand = shellQuote.quote([pm, 'install']);\n\n await exec(installCommand, {\n cwd: projectPath,\n });\n\n spinner.success('Dependencies installed successfully');\n } catch (error) {\n spinner.error(`Failed to install dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n","import * as p from '@clack/prompts';\n\nexport interface Template {\n githubUrl: string;\n title: string;\n slug: string;\n agents: string[];\n mcp: string[];\n tools: string[];\n networks: string[];\n workflows: string[];\n}\n\nconst TEMPLATES_API_URL = process.env.MASTRA_TEMPLATES_API_URL || 'https://mastra.ai/api/templates.json';\n\nexport async function loadTemplates(): Promise<Template[]> {\n try {\n const response = await fetch(TEMPLATES_API_URL);\n if (!response.ok) {\n throw new Error(`Failed to fetch templates: ${response.statusText}`);\n }\n const templates = (await response.json()) as Template[];\n return templates;\n } catch (error) {\n console.error('Error loading templates:', error);\n throw new Error('Failed to load templates. Please check your internet connection and try again.');\n }\n}\n\nfunction pluralize(count: number, singular: string, plural?: string): string {\n return count === 1 ? singular : plural || `${singular}s`;\n}\n\nexport async function selectTemplate(templates: Template[]): Promise<Template | null> {\n const choices = templates.map(template => {\n const parts = [];\n if (template.agents?.length) {\n parts.push(`${template.agents.length} ${pluralize(template.agents.length, 'agent')}`);\n }\n if (template.tools?.length) {\n parts.push(`${template.tools.length} ${pluralize(template.tools.length, 'tool')}`);\n }\n if (template.workflows?.length) {\n parts.push(`${template.workflows.length} ${pluralize(template.workflows.length, 'workflow')}`);\n }\n if (template.mcp?.length) {\n parts.push(`${template.mcp.length} ${pluralize(template.mcp.length, 'MCP server')}`);\n }\n if (template.networks?.length) {\n parts.push(`${template.networks.length} ${pluralize(template.networks.length, 'agent network')}`);\n }\n\n return {\n value: template,\n label: template.title,\n hint: parts.join(', ') || 'Template components',\n };\n });\n\n const selected = await p.select({\n message: 'Select a template:',\n options: choices,\n });\n\n if (p.isCancel(selected)) {\n return null;\n }\n\n return selected as Template;\n}\n\nexport function findTemplateByName(templates: Template[], templateName: string): Template | null {\n // First try to find by exact slug match\n let template = templates.find(t => t.slug === templateName);\n if (template) return template;\n\n // Then try to find by slug without \"template-\" prefix\n const slugWithPrefix = `template-${templateName}`;\n template = templates.find(t => t.slug === slugWithPrefix);\n if (template) return template;\n\n // Finally try case-insensitive name match\n template = templates.find(t => t.title.toLowerCase() === templateName.toLowerCase());\n if (template) return template;\n\n return null;\n}\n\nexport function getDefaultProjectName(template: Template): string {\n // Remove \"template-\" prefix from slug if it exists\n return template.slug.replace(/^template-/, '');\n}\n","import { execa } from 'execa';\n\nexport async function installMastraSkills({\n directory,\n agents,\n}: {\n directory: string;\n agents: string[];\n}): Promise<{ success: boolean; error?: string; agents: string[] }> {\n try {\n // Build args: --agent takes space-separated agent names\n const args = ['skills', 'add', 'mastra-ai/skills', '--agent', ...agents, '-y'];\n\n await execa('npx', args, {\n cwd: directory,\n stdio: 'pipe', // Hide verbose output\n });\n\n return { success: true, agents };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Unknown error',\n agents,\n };\n }\n}\n","import * as p from '@clack/prompts';\nimport color from 'picocolors';\n\nimport { DepsService } from '../../services/service.deps';\n\nimport { gitInit } from '../utils';\nimport { installMastraDocsMCPServer } from './mcp-docs-server-install';\nimport type { Editor } from './mcp-docs-server-install';\nimport { installMastraSkills } from './skills-install';\nimport {\n createComponentsDir,\n createMastraDir,\n getAPIKey,\n writeAgentsMarkdown,\n writeAPIKey,\n writeClaudeMarkdown,\n writeCodeSample,\n writeIndexFile,\n} from './utils';\nimport type { Component, LLMProvider } from './utils';\n\nconst s = p.spinner();\n\nexport const init = async ({\n directory = 'src/',\n components,\n llmProvider = 'openai',\n llmApiKey,\n addExample = false,\n skills,\n mcpServer,\n versionTag,\n initGit = false,\n}: {\n directory?: string;\n components: Component[];\n llmProvider?: LLMProvider;\n llmApiKey?: string;\n addExample?: boolean;\n skills?: string[];\n mcpServer?: Editor;\n versionTag?: string;\n initGit?: boolean;\n}) => {\n s.start('Initializing Mastra');\n const packageVersionTag = versionTag ? `@${versionTag}` : '';\n\n try {\n const result = await createMastraDir(directory);\n\n if (!result.ok) {\n s.stop(color.inverse(' Mastra already initialized '));\n return { success: false };\n }\n\n const dirPath = result.dirPath;\n\n await Promise.all([\n writeIndexFile({\n dirPath,\n addExample,\n addWorkflow: components.includes('workflows'),\n addAgent: components.includes('agents'),\n addScorers: components.includes('scorers'),\n }),\n ...components.map(component => createComponentsDir(dirPath, component)),\n writeAPIKey({ provider: llmProvider, apiKey: llmApiKey }),\n ]);\n\n if (addExample) {\n await Promise.all([\n ...components.map(component =>\n writeCodeSample(dirPath, component as Component, llmProvider, components as Component[]),\n ),\n ]);\n\n const depService = new DepsService();\n\n const needsLibsql = (await depService.checkDependencies(['@mastra/libsql'])) !== `ok`;\n if (needsLibsql) {\n await depService.installPackages([`@mastra/libsql${packageVersionTag}`]);\n }\n const needsDuckDB = (await depService.checkDependencies(['@mastra/duckdb'])) !== `ok`;\n if (needsDuckDB) {\n await depService.installPackages([`@mastra/duckdb${packageVersionTag}`]);\n }\n const needsMemory =\n components.includes(`agents`) && (await depService.checkDependencies(['@mastra/memory'])) !== `ok`;\n if (needsMemory) {\n await depService.installPackages([`@mastra/memory${packageVersionTag}`]);\n }\n\n const needsLoggers = (await depService.checkDependencies(['@mastra/loggers'])) !== `ok`;\n if (needsLoggers) {\n await depService.installPackages([`@mastra/loggers${packageVersionTag}`]);\n }\n\n const needsObservability = (await depService.checkDependencies(['@mastra/observability'])) !== `ok`;\n if (needsObservability) {\n await depService.installPackages([`@mastra/observability${packageVersionTag}`]);\n }\n\n const needsEvals =\n components.includes(`scorers`) && (await depService.checkDependencies(['@mastra/evals'])) !== `ok`;\n if (needsEvals) {\n await depService.installPackages([`@mastra/evals${packageVersionTag}`]);\n }\n }\n\n const key = await getAPIKey(llmProvider || 'openai');\n\n s.stop('Mastra initialized');\n\n // Install skills if selected\n if (skills && skills.length > 0) {\n try {\n s.start('Installing Mastra agent skills');\n const skillsResult = await installMastraSkills({\n directory: process.cwd(),\n agents: skills,\n });\n if (skillsResult.success) {\n // Format agent names nicely\n const agentNames = skillsResult.agents\n .map(agent => {\n // Convert kebab-case to Title Case\n return agent\n .split('-')\n .map(word => word.charAt(0).toUpperCase() + word.slice(1))\n .join(' ');\n })\n .join(', ');\n s.stop(`Mastra agent skills installed (in ${agentNames})`);\n } else {\n s.stop('Skills installation failed');\n console.warn(color.yellow(`\\nWarning: ${skillsResult.error}`));\n }\n } catch (error) {\n s.stop('Skills installation failed');\n console.warn(color.yellow(`\\nWarning: ${error instanceof Error ? error.message : 'Unknown error'}`));\n }\n }\n\n // Install MCP if an editor was selected\n if (mcpServer) {\n await installMastraDocsMCPServer({\n editor: mcpServer,\n directory: process.cwd(),\n versionTag,\n });\n }\n\n // Write AGENTS.md and CLAUDE.md if skills or MCP were configured\n if ((skills && skills.length > 0) || mcpServer) {\n try {\n // Always write AGENTS.md\n await writeAgentsMarkdown({ skills, mcpServer });\n\n // Write CLAUDE.md only if claude-code is in skills list\n const shouldWriteClaudeMd = skills?.includes('claude-code');\n if (shouldWriteClaudeMd) {\n await writeClaudeMarkdown();\n }\n } catch (error) {\n // Don't fail initialization if markdown files fail to write\n console.warn(\n color.yellow(\n `\\nWarning: Failed to create agent guide files: ${error instanceof Error ? error.message : 'Unknown error'}`,\n ),\n );\n }\n }\n\n if (initGit) {\n s.start('Initializing git repository');\n try {\n await gitInit({ cwd: process.cwd() });\n s.stop('Git repository initialized');\n } catch {\n s.stop();\n }\n }\n\n if (!llmApiKey) {\n p.note(`\n ${color.green('Mastra initialized successfully!')}\n\n Add your ${color.cyan(key)} as an environment variable\n in your ${color.cyan('.env')} file\n `);\n } else {\n p.note(`\n ${color.green('Mastra initialized successfully!')}\n `);\n }\n return { success: true };\n } catch (err) {\n s.stop(color.inverse('An error occurred while initializing Mastra'));\n console.error(err);\n return { success: false };\n }\n};\n","import child_process from 'node:child_process';\nimport fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport util from 'node:util';\nimport * as p from '@clack/prompts';\nimport color from 'picocolors';\nimport prettier from 'prettier';\n\nimport { DepsService } from '../../services/service.deps.js';\nimport { getPackageManagerAddCommand } from '../../utils/package-manager.js';\nimport type { PackageManager } from '../../utils/package-manager.js';\nimport { interactivePrompt } from '../init/utils.js';\nimport type { LLMProvider } from '../init/utils.js';\nimport { getPackageManager, isGitInitialized } from '../utils.js';\n\nconst exec = util.promisify(child_process.exec);\n\nconst execWithTimeout = async (command: string, timeoutMs?: number) => {\n try {\n const promise = exec(command, { killSignal: 'SIGTERM' });\n\n if (!timeoutMs) {\n return await promise;\n }\n\n let timeoutId: NodeJS.Timeout;\n const timeout = new Promise((_, reject) => {\n timeoutId = setTimeout(() => reject(new Error('Command timed out')), timeoutMs);\n });\n\n try {\n const result = await Promise.race([promise, timeout]);\n clearTimeout(timeoutId!);\n return result;\n } catch (error) {\n clearTimeout(timeoutId!);\n if (error instanceof Error && error.message === 'Command timed out') {\n throw new Error('Something went wrong during installation, please try again.');\n }\n throw error;\n }\n } catch (error: unknown) {\n throw error;\n }\n};\n\nasync function getInitCommand(pm: PackageManager): Promise<string> {\n switch (pm) {\n case 'npm':\n return 'npm init -y';\n case 'pnpm':\n return 'pnpm init';\n case 'yarn':\n return 'yarn init -y';\n case 'bun':\n return 'bun init -y';\n default:\n return 'npm init -y';\n }\n}\n\nasync function initializePackageJson(pm: PackageManager): Promise<void> {\n // Run the init command\n const initCommand = await getInitCommand(pm);\n await exec(initCommand);\n\n // Read and update package.json directly (more reliable than pkg set)\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n const packageJson = JSON.parse(await fs.readFile(packageJsonPath, 'utf-8'));\n\n packageJson.type = 'module';\n packageJson.engines = {\n ...packageJson.engines,\n node: '>=22.13.0',\n };\n\n await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));\n}\n\nconst writeReadmeFile = async ({ dirPath, projectName }: { dirPath: string; projectName: string }) => {\n const packageManager = getPackageManager();\n const readmePath = path.join(dirPath, 'README.md');\n\n const content = `# ${projectName}\n\nWelcome to your new [Mastra](https://mastra.ai/) project! We're excited to see what you'll build.\n\n## Getting Started\n\nStart the development server:\n\n\\`\\`\\`shell\n${packageManager} run dev\n\\`\\`\\`\n\nOpen [http://localhost:4111](http://localhost:4111) in your browser to access [Mastra Studio](https://mastra.ai/docs/studio/overview). It provides an interactive UI for building and testing your agents, along with a REST API that exposes your Mastra application as a local service. This lets you start building without worrying about integration right away.\n\nYou can start editing files inside the \\`src/mastra\\` directory. The development server will automatically reload whenever you make changes.\n\n## Learn more\n\nTo learn more about Mastra, visit our [documentation](https://mastra.ai/docs/). Your bootstrapped project includes example code for [agents](https://mastra.ai/docs/agents/overview), [tools](https://mastra.ai/docs/agents/using-tools), [workflows](https://mastra.ai/docs/workflows/overview), [scorers](https://mastra.ai/docs/evals/overview), and [observability](https://mastra.ai/docs/observability/overview).\n\nIf you're new to AI agents, check out our [course](https://mastra.ai/course) and [YouTube videos](https://youtube.com/@mastra-ai). You can also join our [Discord](https://discord.gg/BTYqqHKUrf) community to get help and share your projects.\n\n## Deploy on Mastra Cloud\n\n[Mastra Cloud](https://cloud.mastra.ai/) gives you a serverless agent environment with atomic deployments. Access your agents from anywhere and monitor performance. Make sure they don't go off the rails with evals and tracing.\n\nCheck out the [deployment guide](https://mastra.ai/docs/deployment/overview) for more details.`;\n\n const formattedContent = await prettier.format(content, {\n parser: 'markdown',\n singleQuote: true,\n });\n\n await fs.writeFile(readmePath, formattedContent);\n};\n\nasync function installMastraDependency(\n pm: PackageManager,\n dependency: string,\n versionTag: string,\n isDev: boolean,\n timeout?: number,\n) {\n let installCommand = getPackageManagerAddCommand(pm);\n\n if (isDev) {\n /**\n * All our package managers support -D for devDependencies. We can't use --save-dev across the board because yarn and bun don't alias it.\n * npm: -D, --save-dev. pnpm: -D, --save-dev. yarn: -D, --dev. bun: -D, --dev\n */\n installCommand = `${installCommand} -D`;\n }\n\n try {\n await execWithTimeout(`${pm} ${installCommand} ${dependency}${versionTag}`, timeout);\n } catch (err) {\n if (versionTag === '@latest') {\n throw new Error(\n `Failed to install ${dependency}@latest: ${err instanceof Error ? err.message : 'Unknown error'}`,\n );\n }\n try {\n await execWithTimeout(`${pm} ${installCommand} ${dependency}@latest`, timeout);\n } catch (fallbackErr) {\n throw new Error(\n `Failed to install ${dependency} (tried ${versionTag} and @latest): ${fallbackErr instanceof Error ? fallbackErr.message : 'Unknown error'}`,\n );\n }\n }\n}\n\nexport const createMastraProject = async ({\n projectName: name,\n createVersionTag,\n timeout,\n llmProvider,\n llmApiKey,\n skills,\n mcpServer,\n needsInteractive,\n}: {\n projectName?: string;\n createVersionTag?: string;\n timeout?: number;\n llmProvider?: LLMProvider;\n llmApiKey?: string;\n skills?: string[];\n mcpServer?: string;\n needsInteractive?: boolean;\n}) => {\n p.intro(color.inverse(' Mastra Create '));\n\n const projectName =\n name ??\n (await p.text({\n message: 'What do you want to name your project?',\n placeholder: 'my-mastra-app',\n validate: value => {\n if (!value || value.length === 0) return 'Project name cannot be empty';\n if (fsSync.existsSync(value)) {\n return `A directory named \"${value}\" already exists. Please choose a different name.`;\n }\n },\n }));\n\n if (p.isCancel(projectName)) {\n p.cancel('Operation cancelled');\n process.exit(0);\n }\n\n let result: Awaited<ReturnType<typeof interactivePrompt>> | undefined = undefined;\n\n if (needsInteractive) {\n const skipGitInit = await isGitInitialized({ cwd: process.cwd() });\n\n result = await interactivePrompt({\n options: { showBanner: false },\n skip: {\n llmProvider: llmProvider !== undefined,\n llmApiKey: llmApiKey !== undefined,\n skills: skills !== undefined && skills.length > 0,\n mcpServer: mcpServer !== undefined,\n directory: true,\n gitInit: skipGitInit,\n },\n });\n }\n const s = p.spinner();\n const originalCwd = process.cwd();\n let projectPath: string | null = null;\n\n try {\n s.start('Creating project');\n try {\n await fs.mkdir(projectName);\n projectPath = path.resolve(originalCwd, projectName);\n } catch (error) {\n if (error instanceof Error && 'code' in error && error.code === 'EEXIST') {\n s.stop(`A directory named \"${projectName}\" already exists. Please choose a different name.`);\n process.exit(1);\n }\n throw new Error(\n `Failed to create project directory: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n process.chdir(projectName);\n const pm = getPackageManager();\n const installCommand = getPackageManagerAddCommand(pm);\n\n s.message('Initializing project structure');\n try {\n await initializePackageJson(pm);\n const depsService = new DepsService();\n await depsService.addScriptsToPackageJson({\n dev: 'mastra dev',\n build: 'mastra build',\n start: 'mastra start',\n });\n await writeReadmeFile({ dirPath: process.cwd(), projectName });\n } catch (error) {\n throw new Error(\n `Failed to initialize project structure: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n s.stop('Project structure created');\n\n s.start(`Installing ${pm} dependencies`);\n try {\n await exec(`${pm} ${installCommand} zod@^4`);\n await exec(`${pm} ${installCommand} -D typescript @types/node`);\n await exec(`echo '{\n \"compilerOptions\": {\n \"target\": \"ES2022\",\n \"module\": \"ES2022\",\n \"moduleResolution\": \"bundler\",\n \"esModuleInterop\": true,\n \"forceConsistentCasingInFileNames\": true,\n \"strict\": true,\n \"skipLibCheck\": true,\n \"noEmit\": true,\n \"outDir\": \"dist\"\n },\n \"include\": [\n \"src/**/*\"\n ]\n}' > tsconfig.json`);\n } catch (error) {\n throw new Error(\n `Failed to install basic dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n\n s.stop(`${pm} dependencies installed`);\n\n s.start('Installing Mastra CLI');\n const versionTag = createVersionTag ? `@${createVersionTag}` : '@latest';\n\n try {\n await installMastraDependency(pm, 'mastra', versionTag, true, timeout);\n } catch (error) {\n throw new Error(`Failed to install Mastra CLI: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n s.stop('Mastra CLI installed');\n\n s.start('Installing Mastra dependencies');\n try {\n await installMastraDependency(pm, '@mastra/core', versionTag, false, timeout);\n await installMastraDependency(pm, '@mastra/libsql', versionTag, false, timeout);\n await installMastraDependency(pm, '@mastra/memory', versionTag, false, timeout);\n } catch (error) {\n throw new Error(\n `Failed to install Mastra dependencies: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n }\n s.stop('Mastra dependencies installed');\n\n s.start('Adding .gitignore');\n try {\n await exec(`echo output.txt >> .gitignore`);\n await exec(`echo node_modules >> .gitignore`);\n await exec(`echo dist >> .gitignore`);\n await exec(`echo .mastra >> .gitignore`);\n await exec(`echo .env.development >> .gitignore`);\n await exec(`echo .env >> .gitignore`);\n await exec(`echo *.db >> .gitignore`);\n await exec(`echo *.db-* >> .gitignore`);\n await exec(`echo .netlify >> .gitignore`);\n await exec(`echo .vercel >> .gitignore`);\n } catch (error) {\n throw new Error(`Failed to create .gitignore: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n s.stop('.gitignore added');\n\n p.outro('Project created successfully');\n console.info('');\n\n return { projectName, result };\n } catch (error) {\n s.stop();\n\n const errorMessage = error instanceof Error ? error.message : 'An unexpected error occurred';\n p.cancel(`Project creation failed: ${errorMessage}`);\n\n // Clean up: remove the created directory on failure\n if (projectPath && fsSync.existsSync(projectPath)) {\n try {\n // Change back to original directory before cleanup\n process.chdir(originalCwd);\n await fs.rm(projectPath, { recursive: true, force: true });\n } catch (cleanupError) {\n // Log but don't throw - we want to exit with the original error\n console.error(\n `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : 'Unknown error'}`,\n );\n }\n }\n\n process.exit(1);\n }\n};\n","import fsSync from 'node:fs';\nimport fs from 'node:fs/promises';\nimport * as p from '@clack/prompts';\nimport color from 'picocolors';\nimport pkgJson from '../../../package.json';\nimport type { PosthogAnalytics } from '../../analytics/index';\nimport { getAnalytics } from '../../analytics/index';\nimport { cloneTemplate, installDependencies } from '../../utils/clone-template';\nimport { loadTemplates, selectTemplate, findTemplateByName, getDefaultProjectName } from '../../utils/template-utils';\nimport type { Template } from '../../utils/template-utils';\nimport { init } from '../init/init';\nimport type { Editor } from '../init/mcp-docs-server-install';\nimport type { Component, LLMProvider } from '../init/utils';\nimport { LLM_PROVIDERS } from '../init/utils';\nimport { getPackageManager, gitInit } from '../utils.js';\n\nimport { createMastraProject } from './utils';\n\nconst version = pkgJson.version;\n\nexport const create = async (args: {\n projectName?: string;\n components?: Component[];\n llmProvider?: LLMProvider;\n addExample?: boolean;\n llmApiKey?: string;\n createVersionTag?: string;\n timeout?: number;\n directory?: string;\n mcpServer?: Editor;\n skills?: string[];\n template?: string | boolean;\n analytics?: PosthogAnalytics;\n}) => {\n if (args.template !== undefined) {\n await createFromTemplate({\n projectName: args.projectName,\n template: args.template,\n timeout: args.timeout,\n injectedAnalytics: args.analytics,\n llmProvider: args.llmProvider,\n });\n return;\n }\n\n /**\n * We need to explicitly check for undefined instead of using the falsy (!) check because the user might have passed args that are explicitly set to false (in this case, no example code) and we need to distinguish between those and the case where the args were not passed at all.\n */\n const needsInteractive =\n args.components === undefined || args.llmProvider === undefined || args.addExample === undefined;\n\n const directory = args.directory || 'src/';\n\n const { projectName, result } = await createMastraProject({\n projectName: args?.projectName,\n createVersionTag: args?.createVersionTag,\n timeout: args?.timeout,\n llmProvider: args?.llmProvider,\n llmApiKey: args?.llmApiKey,\n skills: args?.skills,\n mcpServer: args?.mcpServer,\n needsInteractive,\n });\n\n if (needsInteractive && result) {\n // Track model provider selection from interactive prompt\n const analytics = getAnalytics();\n if (analytics && result?.llmProvider) {\n analytics.trackEvent('cli_model_provider_selected', {\n provider: result.llmProvider,\n selection_method: 'interactive',\n });\n }\n\n const interactiveComponents: Component[] = ['agents', 'tools', 'workflows', 'scorers'];\n\n if (analytics) {\n analytics.trackEvent('cli_components_selected', {\n components: interactiveComponents,\n selection_method: 'interactive',\n });\n }\n\n await init({\n ...result,\n llmApiKey: result?.llmApiKey as string | undefined,\n components: interactiveComponents,\n addExample: true,\n skills: result?.skills || args.skills,\n mcpServer: result?.mcpServer || args.mcpServer,\n versionTag: args.createVersionTag,\n });\n postCreate({ projectName });\n return;\n }\n\n const { components = [], llmProvider = 'openai', addExample = false, llmApiKey } = args;\n\n // Track model provider selection from CLI args\n const cliAnalytics = getAnalytics();\n if (cliAnalytics) {\n cliAnalytics.trackEvent('cli_model_provider_selected', {\n provider: llmProvider,\n selection_method: 'cli_args',\n });\n\n cliAnalytics.trackEvent('cli_components_selected', {\n components,\n has_agents: components.includes('agents'),\n has_tools: components.includes('tools'),\n has_workflows: components.includes('workflows'),\n has_scorers: components.includes('scorers'),\n selection_method: 'cli_args',\n });\n }\n\n await init({\n directory,\n components,\n llmProvider,\n addExample,\n llmApiKey,\n skills: args.skills,\n mcpServer: args.mcpServer,\n versionTag: args.createVersionTag,\n });\n\n postCreate({ projectName });\n};\n\nconst postCreate = ({ projectName }: { projectName: string }) => {\n const packageManager = getPackageManager();\n p.outro(`\n ${color.green('To start your project:')}\n\n ${color.cyan('cd')} ${projectName}\n ${color.cyan(`${packageManager} run dev`)}\n `);\n};\n\nfunction isGitHubUrl(url: string): boolean {\n try {\n const parsedUrl = new URL(url);\n return parsedUrl.hostname === 'github.com' && parsedUrl.pathname.split('/').length >= 3;\n } catch {\n return false;\n }\n}\n\nasync function validateGitHubProject(githubUrl: string): Promise<{ isValid: boolean; errors: string[] }> {\n const errors: string[] = [];\n\n try {\n // Extract owner and repo from GitHub URL\n const urlParts = new URL(githubUrl).pathname.split('/').filter(Boolean);\n const owner = urlParts[0];\n const repo = urlParts[1]?.replace('.git', ''); // Remove .git if present\n\n if (!owner || !repo) {\n throw new Error('Invalid GitHub URL format');\n }\n\n // Try to fetch from main branch first, fallback to master\n const branches = ['main', 'master'];\n let packageJsonContent: string | null = null;\n let indexContent: string | null = null;\n\n for (const branch of branches) {\n try {\n // Fetch package.json\n const packageJsonUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/package.json`;\n const packageJsonResponse = await fetch(packageJsonUrl);\n\n if (packageJsonResponse.ok) {\n packageJsonContent = await packageJsonResponse.text();\n\n // If package.json found, try to fetch index.ts from same branch\n const indexUrl = `https://raw.githubusercontent.com/${owner}/${repo}/${branch}/src/mastra/index.ts`;\n const indexResponse = await fetch(indexUrl);\n\n if (indexResponse.ok) {\n indexContent = await indexResponse.text();\n }\n\n break; // Found files, no need to check other branches\n }\n } catch {\n // Continue to next branch\n }\n }\n\n if (!packageJsonContent) {\n errors.push('Could not fetch package.json from repository');\n return { isValid: false, errors };\n }\n\n // Check for @mastra/core dependency\n try {\n const packageJson = JSON.parse(packageJsonContent);\n const hasMastraCore =\n packageJson.dependencies?.['@mastra/core'] ||\n packageJson.devDependencies?.['@mastra/core'] ||\n packageJson.peerDependencies?.['@mastra/core'];\n\n if (!hasMastraCore) {\n errors.push('Missing @mastra/core dependency in package.json');\n }\n } catch {\n errors.push('Invalid package.json format');\n }\n\n // Check for src/mastra/index.ts\n if (!indexContent) {\n errors.push('Missing src/mastra/index.ts file');\n } else {\n // Check if it exports a Mastra instance\n const hasMastraExport =\n indexContent.includes('export') && (indexContent.includes('new Mastra') || indexContent.includes('Mastra('));\n\n if (!hasMastraExport) {\n errors.push('src/mastra/index.ts does not export a Mastra instance');\n }\n }\n\n return { isValid: errors.length === 0, errors };\n } catch (error) {\n errors.push(`Failed to validate GitHub repository: ${error instanceof Error ? error.message : 'Unknown error'}`);\n return { isValid: false, errors };\n }\n}\n\nasync function createFromGitHubUrl(url: string): Promise<Template> {\n // Extract owner and repo from GitHub URL\n const urlParts = new URL(url).pathname.split('/').filter(Boolean);\n const owner = urlParts[0] || 'unknown';\n const repo = urlParts[1] || 'unknown';\n\n // Create a temporary Template object for GitHub URLs\n return {\n githubUrl: url,\n title: `${owner}/${repo}`,\n slug: repo,\n agents: [],\n mcp: [],\n tools: [],\n networks: [],\n workflows: [],\n };\n}\n\nasync function createFromTemplate(args: {\n projectName?: string;\n template?: string | boolean;\n timeout?: number;\n injectedAnalytics?: PosthogAnalytics;\n llmProvider?: LLMProvider;\n}) {\n let selectedTemplate: Template | undefined;\n\n if (args.template === true) {\n // Interactive template selection\n const templates = await loadTemplates();\n const selected = await selectTemplate(templates);\n if (!selected) {\n p.log.info('No template selected. Exiting.');\n return;\n }\n selectedTemplate = selected;\n } else if (args.template && typeof args.template === 'string') {\n // Check if it's a GitHub URL\n if (isGitHubUrl(args.template)) {\n // Validate GitHub project before cloning\n const spinner = p.spinner();\n spinner.start('Validating GitHub repository...');\n\n const validation = await validateGitHubProject(args.template);\n\n if (!validation.isValid) {\n spinner.stop('Validation failed');\n p.log.error('This does not appear to be a valid Mastra project:');\n validation.errors.forEach(error => p.log.error(` - ${error}`));\n throw new Error('Invalid Mastra project');\n }\n\n spinner.stop('Valid Mastra project ✓');\n selectedTemplate = await createFromGitHubUrl(args.template);\n } else {\n // Template name provided, find it from the list\n const templates = await loadTemplates();\n const found = findTemplateByName(templates, args.template);\n if (!found) {\n p.log.error(`Template \"${args.template}\" not found. Available templates:`);\n templates.forEach((t: Template) => p.log.info(` - ${t.title} (use: ${t.slug.replace('template-', '')})`));\n throw new Error(`Template \"${args.template}\" not found`);\n }\n selectedTemplate = found;\n }\n }\n\n if (!selectedTemplate) {\n throw new Error('No template selected');\n }\n\n // Get project name\n let projectName = args.projectName;\n if (!projectName) {\n const defaultName = getDefaultProjectName(selectedTemplate);\n const response = await p.text({\n message: 'What is your project name?',\n defaultValue: defaultName,\n placeholder: defaultName,\n });\n\n if (p.isCancel(response)) {\n p.log.info('Project creation cancelled.');\n return;\n }\n\n projectName = response as string;\n }\n\n // Get LLM provider if not specified\n let llmProvider = args.llmProvider;\n if (!llmProvider) {\n const providerResponse = await p.select({\n message: 'Select a default provider:',\n options: LLM_PROVIDERS,\n });\n\n if (p.isCancel(providerResponse)) {\n p.log.info('Project creation cancelled.');\n return;\n }\n\n llmProvider = providerResponse as LLMProvider;\n }\n\n // Handle git initialization for templates\n let initGit = false;\n const gitConfirmResult = await p.confirm({\n message: 'Initialize a new git repository?',\n initialValue: true,\n });\n\n if (!p.isCancel(gitConfirmResult)) {\n initGit = gitConfirmResult;\n }\n\n let projectPath: string | null = null;\n\n try {\n // Track template usage\n const analytics = args.injectedAnalytics || getAnalytics();\n if (analytics) {\n analytics.trackEvent('cli_template_used', {\n template_slug: selectedTemplate.slug,\n template_title: selectedTemplate.title,\n });\n\n // Track model provider selection\n if (llmProvider) {\n analytics.trackEvent('cli_model_provider_selected', {\n provider: llmProvider,\n selection_method: args.llmProvider ? 'cli_args' : 'interactive',\n });\n }\n }\n\n const isBeta = version?.includes('beta') ?? false;\n const isMastraTemplate = selectedTemplate.githubUrl.includes('github.com/mastra-ai/');\n const branch = isBeta && isMastraTemplate ? 'beta' : undefined;\n\n // Clone the template\n projectPath = await cloneTemplate({\n template: selectedTemplate,\n projectName,\n branch,\n llmProvider,\n });\n\n // Install dependencies\n await installDependencies(projectPath);\n\n if (initGit) {\n const s = p.spinner();\n try {\n s.start('Initializing git repository');\n\n await gitInit({ cwd: projectPath });\n\n s.stop('Git repository initialized');\n } catch {\n s.stop();\n }\n }\n\n p.note(`\n ${color.green('Mastra template installed!')}\n\n Add the necessary environment\n variables in your ${color.cyan('.env')} file\n `);\n\n // Show completion message\n postCreate({ projectName });\n } catch (error) {\n // Clean up: remove the created directory on failure\n if (projectPath) {\n try {\n if (fsSync.existsSync(projectPath)) {\n await fs.rm(projectPath, { recursive: true, force: true });\n }\n } catch (cleanupError) {\n // Log but don't throw - we want to exit with the original error\n console.error(\n `Warning: Failed to clean up project directory: ${cleanupError instanceof Error ? cleanupError.message : 'Unknown error'}`,\n );\n }\n }\n p.log.error(`Failed to create project from template: ${error instanceof Error ? error.message : 'Unknown error'}`);\n throw error;\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DevBundler.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/DevBundler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAA0B,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,aAAa,CAAC,EAAE,MAAM;IAOlC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB1B,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,GAChC,UAAU,CAAC,OAAO,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"DevBundler.d.ts","sourceRoot":"","sources":["../../../src/commands/dev/DevBundler.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,aAAa,EAA0B,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAOnD,qBAAa,UAAW,SAAQ,OAAO;IACrC,OAAO,CAAC,aAAa,CAAC,CAAS;gBAEnB,aAAa,CAAC,EAAE,MAAM;IAOlC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAuB1B,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY/C,KAAK,CACT,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,EACvB,UAAU,EAAE,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC,EAAE,GAChC,UAAU,CAAC,OAAO,aAAa,CAAC;IAqG7B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;CAG9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../../src/commands/start/start.ts"],"names":[],"mappings":"AAMA,UAAU,YAAY;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,KAAK,CAAC,OAAO,GAAE,YAAiB,iBAyErD"}
|
package/dist/docs/SKILL.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "1.3.
|
|
2
|
+
"version": "1.3.18-alpha.0",
|
|
3
3
|
"package": "mastra",
|
|
4
4
|
"exports": {
|
|
5
5
|
"create": {
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
-
"implementation": "dist/chunk-
|
|
7
|
+
"implementation": "dist/chunk-3UDL5KL6.js"
|
|
8
8
|
},
|
|
9
9
|
"PosthogAnalytics": {
|
|
10
10
|
"types": "dist/index.d.ts",
|
package/dist/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#! /usr/bin/env node
|
|
2
|
-
import { package_default, create, init, logger, createLogger } from './chunk-
|
|
3
|
-
export { create } from './chunk-
|
|
2
|
+
import { package_default, create, init, logger, createLogger } from './chunk-3UDL5KL6.js';
|
|
3
|
+
export { create } from './chunk-3UDL5KL6.js';
|
|
4
4
|
import { PosthogAnalytics, setAnalytics, COMPONENTS, parseComponents, LLMProvider, parseLlmProvider, parseMcp, parseSkills, checkForPkgJson, getVersionTag, isGitInitialized, checkAndInstallCoreDeps, interactivePrompt, FileService, shouldSkipDotenvLoading, DepsService, getAnalytics } from './chunk-36TBL5YC.js';
|
|
5
5
|
export { PosthogAnalytics } from './chunk-36TBL5YC.js';
|
|
6
6
|
import { Command } from 'commander';
|
|
@@ -689,13 +689,13 @@ async function build({
|
|
|
689
689
|
toolsPaths: discoveredTools2,
|
|
690
690
|
projectRoot: rootDir
|
|
691
691
|
});
|
|
692
|
-
logger2.info(
|
|
692
|
+
logger2.info("Build successful, you can now deploy the .mastra/output directory to your target platform.");
|
|
693
693
|
if (studio2) {
|
|
694
694
|
logger2.info(
|
|
695
|
-
|
|
695
|
+
"To start the server with studio, run: MASTRA_STUDIO_PATH=.mastra/output/studio node .mastra/output/index.mjs"
|
|
696
696
|
);
|
|
697
697
|
} else {
|
|
698
|
-
logger2.info(
|
|
698
|
+
logger2.info("To start the server, run: node .mastra/output/index.mjs");
|
|
699
699
|
}
|
|
700
700
|
return;
|
|
701
701
|
}
|
|
@@ -713,13 +713,13 @@ async function build({
|
|
|
713
713
|
const { MastraError } = await import('@mastra/core/error');
|
|
714
714
|
if (error instanceof MastraError) {
|
|
715
715
|
const { message, ...details } = error.toJSONDetails();
|
|
716
|
-
logger2.error(
|
|
716
|
+
logger2.error(message, details);
|
|
717
717
|
} else if (error instanceof Error) {
|
|
718
|
-
logger2.error(
|
|
718
|
+
logger2.error("Mastra Build failed", { error });
|
|
719
719
|
}
|
|
720
720
|
} catch {
|
|
721
721
|
if (error instanceof Error) {
|
|
722
|
-
logger2.error(
|
|
722
|
+
logger2.error("Mastra Build failed", { error });
|
|
723
723
|
}
|
|
724
724
|
}
|
|
725
725
|
process.exit(1);
|
|
@@ -945,7 +945,7 @@ function readPackageJson(dir2) {
|
|
|
945
945
|
return JSON.parse(packageJsonContent);
|
|
946
946
|
} catch (error) {
|
|
947
947
|
if (error instanceof Error) {
|
|
948
|
-
logger.error(
|
|
948
|
+
logger.error("Failed to read package.json", { error: error.message });
|
|
949
949
|
}
|
|
950
950
|
throw error;
|
|
951
951
|
}
|
|
@@ -1000,7 +1000,7 @@ async function lint({ dir: dir2, root, tools }) {
|
|
|
1000
1000
|
return allRulesPassed;
|
|
1001
1001
|
} catch (error) {
|
|
1002
1002
|
if (error instanceof Error) {
|
|
1003
|
-
logger.error(
|
|
1003
|
+
logger.error("Lint check failed", { error: error.message });
|
|
1004
1004
|
}
|
|
1005
1005
|
return false;
|
|
1006
1006
|
}
|
|
@@ -1239,13 +1239,13 @@ async function migrate({
|
|
|
1239
1239
|
} else {
|
|
1240
1240
|
logger2.info(pc4.green("\u2713 Migration completed successfully!"));
|
|
1241
1241
|
if (result.duplicatesRemoved > 0) {
|
|
1242
|
-
logger2.info(
|
|
1242
|
+
logger2.info("Removed duplicate entries", { count: result.duplicatesRemoved });
|
|
1243
1243
|
}
|
|
1244
1244
|
}
|
|
1245
|
-
logger2.info(
|
|
1245
|
+
logger2.info(result.message);
|
|
1246
1246
|
} else {
|
|
1247
1247
|
logger2.error(pc4.red("\u2717 Migration failed."));
|
|
1248
|
-
logger2.error(
|
|
1248
|
+
logger2.error(result.message);
|
|
1249
1249
|
process3.exit(1);
|
|
1250
1250
|
}
|
|
1251
1251
|
} else {
|
|
@@ -1267,7 +1267,7 @@ async function migrate({
|
|
|
1267
1267
|
logger2.error(pc4.red("Error: Could not find Mastra entry file."));
|
|
1268
1268
|
logger2.info("");
|
|
1269
1269
|
logger2.info("Make sure you have a mastra directory with an index.ts or index.js file.");
|
|
1270
|
-
logger2.info(
|
|
1270
|
+
logger2.info("Expected location", { path: mastraDir });
|
|
1271
1271
|
logger2.info("");
|
|
1272
1272
|
logger2.info("You can specify a custom directory:");
|
|
1273
1273
|
logger2.info(pc4.cyan(" npx mastra migrate --dir path/to/mastra"));
|
|
@@ -1501,8 +1501,9 @@ var DevBundler = class extends Bundler {
|
|
|
1501
1501
|
if (warning.ids?.[0]?.includes("node_modules")) {
|
|
1502
1502
|
return;
|
|
1503
1503
|
}
|
|
1504
|
-
this.logger.warn(
|
|
1505
|
-
|
|
1504
|
+
this.logger.warn("Circular dependency found", {
|
|
1505
|
+
dependency: warning.message.replace("Circular dependency: ", "")
|
|
1506
|
+
});
|
|
1506
1507
|
}
|
|
1507
1508
|
},
|
|
1508
1509
|
plugins: [
|
|
@@ -1979,21 +1980,7 @@ async function start(options = {}) {
|
|
|
1979
1980
|
if (!packageName) {
|
|
1980
1981
|
logger.error(stderrBuffer.trim());
|
|
1981
1982
|
} else {
|
|
1982
|
-
logger.error(
|
|
1983
|
-
This usually indicates that a transitive dependency could not be bundled correctly during the build process.
|
|
1984
|
-
Try adding \`${packageName}\` to your externals:
|
|
1985
|
-
|
|
1986
|
-
export const mastra = new Mastra({
|
|
1987
|
-
bundler: {
|
|
1988
|
-
externals: ["${packageName}"],
|
|
1989
|
-
}
|
|
1990
|
-
})
|
|
1991
|
-
|
|
1992
|
-
If this doesn't resolve the issue, investigate the dependencies you added to your package.json as one of them might use \`${packageName}\` internally. Add that particular dependency to the externals instead. Also consider opening an issue.
|
|
1993
|
-
|
|
1994
|
-
Original error:
|
|
1995
|
-
|
|
1996
|
-
${stderrBuffer.trim()}`);
|
|
1983
|
+
logger.error("Module not found while starting Mastra server", { package: packageName });
|
|
1997
1984
|
}
|
|
1998
1985
|
} else {
|
|
1999
1986
|
logger.error(stderrBuffer.trim());
|
|
@@ -2002,7 +1989,7 @@ ${stderrBuffer.trim()}`);
|
|
|
2002
1989
|
}
|
|
2003
1990
|
});
|
|
2004
1991
|
server.on("error", (err) => {
|
|
2005
|
-
logger.error(
|
|
1992
|
+
logger.error("Failed to start server", { error: err.message });
|
|
2006
1993
|
process.exit(1);
|
|
2007
1994
|
});
|
|
2008
1995
|
process.on("SIGINT", () => {
|
|
@@ -2014,7 +2001,7 @@ ${stderrBuffer.trim()}`);
|
|
|
2014
2001
|
process.exit(0);
|
|
2015
2002
|
});
|
|
2016
2003
|
} catch (error) {
|
|
2017
|
-
logger.error(
|
|
2004
|
+
logger.error("Failed to start Mastra server", { error: error.message });
|
|
2018
2005
|
process.exit(1);
|
|
2019
2006
|
}
|
|
2020
2007
|
}
|
|
@@ -2061,20 +2048,20 @@ async function studio(options = {
|
|
|
2061
2048
|
try {
|
|
2062
2049
|
requestContextPresetsJson2 = await loadAndValidatePresets(options.requestContextPresets);
|
|
2063
2050
|
} catch (error) {
|
|
2064
|
-
logger.error(
|
|
2051
|
+
logger.error("Failed to load request context presets", { error: error.message });
|
|
2065
2052
|
process.exit(1);
|
|
2066
2053
|
}
|
|
2067
2054
|
}
|
|
2068
2055
|
try {
|
|
2069
2056
|
const distPath = join(__dirname$1, "studio");
|
|
2070
2057
|
if (!existsSync(distPath)) {
|
|
2071
|
-
logger.error(
|
|
2058
|
+
logger.error("Studio distribution not found", { distPath });
|
|
2072
2059
|
process.exit(1);
|
|
2073
2060
|
}
|
|
2074
2061
|
const port = options.port || 3e3;
|
|
2075
2062
|
const server = createServer(distPath, options, requestContextPresetsJson2);
|
|
2076
2063
|
server.listen(port, () => {
|
|
2077
|
-
logger.info(
|
|
2064
|
+
logger.info("Mastra Studio running", { url: `http://localhost:${port}` });
|
|
2078
2065
|
});
|
|
2079
2066
|
process.on("SIGINT", () => {
|
|
2080
2067
|
server.close(() => {
|
|
@@ -2087,7 +2074,7 @@ async function studio(options = {
|
|
|
2087
2074
|
});
|
|
2088
2075
|
});
|
|
2089
2076
|
} catch (error) {
|
|
2090
|
-
logger.error(
|
|
2077
|
+
logger.error("Failed to start Mastra Studio", { error: error.message });
|
|
2091
2078
|
process.exit(1);
|
|
2092
2079
|
}
|
|
2093
2080
|
}
|