mastra 1.9.2-alpha.2 → 1.9.2-alpha.3
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 +30 -0
- package/dist/analytics/index.js +1 -1
- package/dist/{chunk-X3CD6TSG.js → chunk-MVHERJCK.js} +14 -6
- package/dist/chunk-MVHERJCK.js.map +1 -0
- package/dist/{chunk-7P7J7HCD.js → chunk-QXKEKQIM.js} +9 -7
- package/dist/chunk-QXKEKQIM.js.map +1 -0
- package/dist/commands/actions/create-project.d.ts.map +1 -1
- package/dist/commands/actions/init-project.d.ts.map +1 -1
- package/dist/commands/api/index.d.ts.map +1 -1
- package/dist/commands/api/route-metadata.generated.d.ts +14 -0
- package/dist/commands/api/route-metadata.generated.d.ts.map +1 -1
- package/dist/commands/create/create.d.ts.map +1 -1
- package/dist/commands/create/create.js +2 -2
- package/dist/commands/create/utils.d.ts +7 -1
- package/dist/commands/create/utils.d.ts.map +1 -1
- package/dist/commands/init/utils.d.ts +9 -1
- package/dist/commands/init/utils.d.ts.map +1 -1
- package/dist/commands/server/deploy.d.ts.map +1 -1
- package/dist/commands/studio/deploy.d.ts.map +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +4 -4
- package/dist/docs/references/reference-cli-mastra.md +2 -1
- package/dist/index.js +149 -15
- package/dist/index.js.map +1 -1
- package/dist/studio/assets/{index-DVeNgWKz.js → index--7LEjF6l.js} +1 -1
- package/dist/studio/assets/{index-DMol6fsb.js → index-2Vmfw4Jm.js} +1 -1
- package/dist/studio/assets/{index-QHvMhU_K.js → index-B-hzNmOq.js} +1 -1
- package/dist/studio/assets/{index-ByTje4Bn.js → index-BDQh3FqY.js} +1 -1
- package/dist/studio/assets/{index-Bam0E0TT.js → index-BO4ibj4P.js} +1 -1
- package/dist/studio/assets/{index-B24oOxHS.js → index-BaHYDitn.js} +1 -1
- package/dist/studio/assets/{index-QfN3P6Mp.js → index-C5vMhoAp.js} +1 -1
- package/dist/studio/assets/{index-BHuOCO43.js → index-C9gQktNL.js} +1 -1
- package/dist/studio/assets/{index-C-89c9VE.js → index-CdXosD80.js} +1 -1
- package/dist/studio/assets/{index-B5JiNrav.js → index-Ckl45hPZ.js} +1 -1
- package/dist/studio/assets/{index-DwgQJh00.js → index-CoRYLqvj.js} +1 -1
- package/dist/studio/assets/{index-CxoAr1EP.js → index-CovQVWVF.js} +1 -1
- package/dist/studio/assets/{index-DXhJ16KZ.js → index-CvNd6kE5.js} +1 -1
- package/dist/studio/assets/{index-CFILG-d5.js → index-D-8QNHXf.js} +1 -1
- package/dist/studio/assets/{index-Bs5zE_pf.js → index-DL2IPdFK.js} +1 -1
- package/dist/studio/assets/{index-Fju80PoZ.js → index-DvtFbbeo.js} +1 -1
- package/dist/studio/assets/{index-DKHpHjJ7.js → index-FWNL7j7u.js} +1 -1
- package/dist/studio/assets/{index-B60s3NFS.js → index-HW6HZjfW.js} +1 -1
- package/dist/studio/assets/{main-DGlYsN7R.js → main-DU8RSAN2.js} +135 -135
- package/dist/studio/index.html +1 -1
- package/package.json +6 -6
- package/dist/chunk-7P7J7HCD.js.map +0 -1
- package/dist/chunk-X3CD6TSG.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# mastra
|
|
2
2
|
|
|
3
|
+
## 1.9.2-alpha.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Update observability trace listing so `mastra api trace list` uses lightweight trace rows by default and supports `--verbose` to fetch the full root span payloads. ([#16608](https://github.com/mastra-ai/mastra/pull/16608))
|
|
8
|
+
|
|
9
|
+
- Track Mastra Observability choices in CLI telemetry. ([#16524](https://github.com/mastra-ai/mastra/pull/16524))
|
|
10
|
+
|
|
11
|
+
- Fixed `mastra studio deploy --project <name>` and `mastra server deploy --project <name>` so that passing a project name now works as documented. ([#16569](https://github.com/mastra-ai/mastra/pull/16569))
|
|
12
|
+
|
|
13
|
+
**What changed**
|
|
14
|
+
- The `--project` flag now matches projects by name, in addition to id and slug.
|
|
15
|
+
- When no project matches, the CLI creates a new project (after a confirmation prompt, or immediately with `--yes`).
|
|
16
|
+
|
|
17
|
+
**Why**
|
|
18
|
+
|
|
19
|
+
Previously, passing a name that didn't match an existing slug or id silently wrote the raw string into `.mastra-project.json` as the project ID. The deploy then failed against a project ID that does not exist, and `.mastra-project.json` had to be hand-edited before retrying.
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# Before: silently wrote { projectId: 'my-app' } and failed
|
|
23
|
+
mastra server deploy --project my-app --yes
|
|
24
|
+
|
|
25
|
+
# After: matches an existing project named 'my-app', or creates it
|
|
26
|
+
mastra server deploy --project my-app --yes
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- Updated dependencies [[`090a647`](https://github.com/mastra-ai/mastra/commit/090a647ba5a66d36f203f9f49457e03a1ff4e6fb), [`090a647`](https://github.com/mastra-ai/mastra/commit/090a647ba5a66d36f203f9f49457e03a1ff4e6fb), [`f84447d`](https://github.com/mastra-ai/mastra/commit/f84447d6c80f3471836a9b300d246b331fb47e0d), [`a1a5b3e`](https://github.com/mastra-ai/mastra/commit/a1a5b3e42ab2ca5161ea21db59ebf28442680fa7), [`af84f57`](https://github.com/mastra-ai/mastra/commit/af84f571ed762e92e8e61c5f9a72363520914274), [`8b3c6f9`](https://github.com/mastra-ai/mastra/commit/8b3c6f90f7879833ba7d1bc70937e1d8f69d0804)]:
|
|
30
|
+
- @mastra/core@1.34.0-alpha.3
|
|
31
|
+
- @mastra/deployer@1.34.0-alpha.3
|
|
32
|
+
|
|
3
33
|
## 1.9.2-alpha.2
|
|
4
34
|
|
|
5
35
|
### Patch Changes
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PosthogAnalytics, getAnalytics, setAnalytics } from '../chunk-
|
|
1
|
+
export { PosthogAnalytics, getAnalytics, setAnalytics } from '../chunk-MVHERJCK.js';
|
|
2
2
|
import '../chunk-EXG3XKBK.js';
|
|
3
3
|
import '../chunk-L2SGSIJI.js';
|
|
4
4
|
//# sourceMappingURL=index.js.map
|
|
@@ -371,7 +371,7 @@ var FileService = class {
|
|
|
371
371
|
var exec = util.promisify(child_process.exec);
|
|
372
372
|
var LLMProvider = ["openai", "anthropic", "groq", "google", "cerebras", "mistral"];
|
|
373
373
|
var COMPONENTS = ["agents", "workflows", "tools", "scorers"];
|
|
374
|
-
async function promptForObservability() {
|
|
374
|
+
async function promptForObservability(command, onObservabilitySelected) {
|
|
375
375
|
while (true) {
|
|
376
376
|
const choice = await p.select({
|
|
377
377
|
message: "Enable Mastra Observability? (will open auth flow)",
|
|
@@ -382,7 +382,15 @@ async function promptForObservability() {
|
|
|
382
382
|
initialValue: "yes"
|
|
383
383
|
});
|
|
384
384
|
if (p.isCancel(choice)) return {};
|
|
385
|
-
|
|
385
|
+
const answer = choice === "yes" ? "yes" : "no";
|
|
386
|
+
const enabled = answer === "yes";
|
|
387
|
+
onObservabilitySelected?.({
|
|
388
|
+
command,
|
|
389
|
+
enabled,
|
|
390
|
+
answer,
|
|
391
|
+
selection_method: "interactive"
|
|
392
|
+
});
|
|
393
|
+
if (!enabled) return { enabled: false };
|
|
386
394
|
const hadCachedCreds = await loadCredentials() !== null;
|
|
387
395
|
try {
|
|
388
396
|
const token = await getToken();
|
|
@@ -960,7 +968,7 @@ var LLM_PROVIDERS = [
|
|
|
960
968
|
{ value: "mistral", label: "Mistral" }
|
|
961
969
|
];
|
|
962
970
|
var interactivePrompt = async (args = {}) => {
|
|
963
|
-
const { skip = {}, options: { showBanner = true } = {} } = args;
|
|
971
|
+
const { skip = {}, options: { command, showBanner = true, onObservabilitySelected } = {} } = args;
|
|
964
972
|
if (showBanner) {
|
|
965
973
|
p.intro(color.inverse(" Mastra Init "));
|
|
966
974
|
}
|
|
@@ -1000,7 +1008,7 @@ var interactivePrompt = async (args = {}) => {
|
|
|
1000
1008
|
},
|
|
1001
1009
|
observability: async () => {
|
|
1002
1010
|
if (skip?.observability) return void 0;
|
|
1003
|
-
return promptForObservability();
|
|
1011
|
+
return promptForObservability(command, onObservabilitySelected);
|
|
1004
1012
|
},
|
|
1005
1013
|
configureMastraToolingForAgents: async () => {
|
|
1006
1014
|
if (skip?.skills && skip?.mcpServer) return { skills: void 0, mcpServer: void 0 };
|
|
@@ -1593,5 +1601,5 @@ var PosthogAnalytics = class {
|
|
|
1593
1601
|
};
|
|
1594
1602
|
|
|
1595
1603
|
export { COMPONENTS, DepsService, FileService, LLMProvider, LLM_PROVIDERS, PosthogAnalytics, checkAndInstallCoreDeps, checkForPkgJson, createComponentsDir, createMastraDir, getAPIKey, getAnalytics, getModelIdentifier, getPackageManager, getPackageManagerAddCommand, getVersionTag, gitInit, installMastraDocsMCPServer, interactivePrompt, isGitInitialized, parseComponents, parseLlmProvider, parseMcp, parseSkills, readPackageName, setAnalytics, shouldSkipDotenvLoading, writeAPIKey, writeAgentsMarkdown, writeClaudeMarkdown, writeCodeSample, writeIndexFile, writeObservabilityEnv };
|
|
1596
|
-
//# sourceMappingURL=chunk-
|
|
1597
|
-
//# sourceMappingURL=chunk-
|
|
1604
|
+
//# sourceMappingURL=chunk-MVHERJCK.js.map
|
|
1605
|
+
//# sourceMappingURL=chunk-MVHERJCK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/init/mcp-docs-server-install.ts","../src/utils/package-manager.ts","../src/services/service.deps.ts","../src/services/service.env.ts","../src/services/service.fileEnv.ts","../src/services/service.file.ts","../src/commands/init/utils.ts","../src/commands/utils.ts","../src/analytics/index.ts"],"names":["hasMastraMCP","fs","path","fsPromises","fs2","__filename","__dirname","fsExtra","p","confirm","fileURLToPath","execa","existsSync","os"],"mappings":"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","file":"chunk-MVHERJCK.js","sourcesContent":["import { existsSync } from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { ensureFile, readJSON, writeJSON } from 'fs-extra/esm';\n\nconst createArgs = (versionTag?: string) => {\n const packageName = versionTag ? `@mastra/mcp-docs-server@${versionTag}` : '@mastra/mcp-docs-server';\n return ['-y', packageName];\n};\n\nconst createMcpConfig = (editor: Editor, versionTag?: string) => {\n const args = createArgs(versionTag);\n if (editor === 'vscode') {\n return {\n servers: {\n mastra:\n process.platform === `win32`\n ? {\n command: 'cmd',\n args: ['/c', 'npx', ...args],\n type: 'stdio',\n }\n : {\n command: 'npx',\n args,\n type: 'stdio',\n },\n },\n };\n }\n return {\n mcpServers: {\n mastra: {\n command: 'npx',\n args,\n },\n },\n };\n};\n\nfunction makeConfig(\n original: { mcpServers?: Record<string, unknown>; servers?: Record<string, unknown> },\n editor: Editor,\n versionTag?: string,\n) {\n if (editor === 'vscode') {\n return {\n ...original,\n servers: {\n ...(original?.servers || {}),\n ...createMcpConfig(editor, versionTag).servers,\n },\n };\n }\n return {\n ...original,\n mcpServers: {\n ...(original?.mcpServers || {}),\n ...createMcpConfig(editor, versionTag).mcpServers,\n },\n };\n}\n\nasync function writeMergedConfig(configPath: string, editor: Editor, versionTag?: string) {\n const configExists = existsSync(configPath);\n const config = makeConfig(configExists ? await readJSON(configPath) : {}, editor, versionTag);\n await ensureFile(configPath);\n await writeJSON(configPath, config, {\n spaces: 2,\n });\n}\n\nexport const windsurfGlobalMCPConfigPath = path.join(os.homedir(), '.codeium', 'windsurf', 'mcp_config.json');\nexport const antigravityGlobalMCPConfigPath = path.join(os.homedir(), '.gemini', 'antigravity', 'mcp_config.json');\nexport const cursorGlobalMCPConfigPath = path.join(os.homedir(), '.cursor', 'mcp.json');\nexport const vscodeMCPConfigPath = path.join(process.cwd(), '.vscode', 'mcp.json');\nexport const vscodeGlobalMCPConfigPath = path.join(\n os.homedir(),\n process.platform === 'win32'\n ? path.join('AppData', 'Roaming', 'Code', 'User', 'settings.json')\n : process.platform === 'darwin'\n ? path.join('Library', 'Application Support', 'Code', 'User', 'settings.json')\n : path.join('.config', 'Code', 'User', 'settings.json'),\n);\n\nexport const EDITOR = ['cursor', 'cursor-global', 'windsurf', 'vscode', 'antigravity'] as const;\nexport type Editor = (typeof EDITOR)[number];\n\nexport const MCP_SERVER = ['cursor', 'cursor-global', 'windsurf', 'antigravity'] as const;\nexport type MCPServer = (typeof MCP_SERVER)[number];\n\n/**\n * Type-guard to check if a string is a valid MCPServer\n */\nexport function isValidMCPServer(value: string): value is MCPServer {\n return MCP_SERVER.includes(value as MCPServer);\n}\n\n/**\n * Type-guard to check if a string is a valid Editor\n */\nexport function isValidEditor(value: string): value is Editor {\n return EDITOR.includes(value as Editor);\n}\n\nexport async function installMastraDocsMCPServer({\n editor,\n directory,\n versionTag,\n}: {\n editor?: Editor;\n directory: string;\n versionTag?: string;\n}) {\n if (editor === `cursor`) {\n await writeMergedConfig(path.join(directory, '.cursor', 'mcp.json'), 'cursor', versionTag);\n }\n if (editor === `vscode`) {\n await writeMergedConfig(path.join(directory, '.vscode', 'mcp.json'), 'vscode', versionTag);\n }\n if (editor === `cursor-global`) {\n const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);\n if (alreadyInstalled) {\n return;\n }\n await writeMergedConfig(cursorGlobalMCPConfigPath, 'cursor-global', versionTag);\n }\n\n if (editor === `windsurf`) {\n const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);\n if (alreadyInstalled) {\n return;\n }\n await writeMergedConfig(windsurfGlobalMCPConfigPath, editor, versionTag);\n }\n\n if (editor === `antigravity`) {\n const alreadyInstalled = await globalMCPIsAlreadyInstalled(editor, versionTag);\n if (alreadyInstalled) {\n return;\n }\n await writeMergedConfig(antigravityGlobalMCPConfigPath, editor, versionTag);\n }\n}\n\nexport async function globalMCPIsAlreadyInstalled(editor: Editor, versionTag?: string) {\n let configPath: string = ``;\n\n if (editor === 'windsurf') {\n configPath = windsurfGlobalMCPConfigPath;\n } else if (editor === 'antigravity') {\n configPath = antigravityGlobalMCPConfigPath;\n } else if (editor === 'cursor-global') {\n configPath = cursorGlobalMCPConfigPath;\n } else if (editor === 'vscode') {\n configPath = vscodeGlobalMCPConfigPath;\n }\n\n if (!configPath || !existsSync(configPath)) {\n return false;\n }\n\n try {\n const configContents = await readJSON(configPath);\n\n if (!configContents) return false;\n\n // Construct the expected package string based on versionTag\n const expectedPackage = versionTag ? `@mastra/mcp-docs-server@${versionTag}` : '@mastra/mcp-docs-server';\n\n if (editor === 'vscode') {\n if (!configContents.servers) return false;\n const hasMastraMCP = Object.values(configContents.servers).some((server?: any) =>\n server?.args?.find((arg?: string) => arg === expectedPackage),\n );\n return hasMastraMCP;\n }\n\n if (!configContents?.mcpServers) return false;\n const hasMastraMCP = Object.values(configContents.mcpServers).some((server?: any) =>\n server?.args?.find((arg?: string) => arg === expectedPackage),\n );\n\n return hasMastraMCP;\n } catch {\n return false;\n }\n}\n","export type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'bun';\n\nexport function getPackageManagerAddCommand(pm: PackageManager): string {\n switch (pm) {\n case 'npm':\n return 'install --audit=false --fund=false --loglevel=error --progress=false --update-notifier=false';\n case 'yarn':\n return 'add';\n case 'pnpm':\n return 'add --loglevel=error';\n case 'bun':\n return 'add';\n default:\n return 'add';\n }\n}\n","import fs from 'node:fs';\nimport fsPromises from 'node:fs/promises';\nimport path from 'node:path';\nimport { execa } from 'execa';\nimport { getPackageManagerAddCommand } from '../utils/package-manager';\nimport type { PackageManager } from '../utils/package-manager';\n\nexport class DepsService {\n readonly packageManager: PackageManager;\n\n constructor() {\n this.packageManager = this.getPackageManager();\n }\n\n private findLockFile(dir: string): string | null {\n const lockFiles = ['pnpm-lock.yaml', 'package-lock.json', 'yarn.lock', 'bun.lock', 'bun.lockb'];\n for (const file of lockFiles) {\n if (fs.existsSync(path.join(dir, file))) {\n return file;\n }\n }\n const parentDir = path.resolve(dir, '..');\n if (parentDir !== dir) {\n return this.findLockFile(parentDir);\n }\n return null;\n }\n\n private getPackageManager(): PackageManager {\n const lockFile = this.findLockFile(process.cwd());\n switch (lockFile) {\n case 'pnpm-lock.yaml':\n return 'pnpm';\n case 'package-lock.json':\n return 'npm';\n case 'yarn.lock':\n return 'yarn';\n case 'bun.lock':\n case 'bun.lockb':\n return 'bun';\n default:\n return 'npm';\n }\n }\n\n public async installPackages(packages: string[]) {\n const pm = this.packageManager;\n const installCommand = getPackageManagerAddCommand(pm);\n\n const packageList = packages.join(' ');\n return execa(`${pm} ${installCommand} ${packageList}`, {\n all: true,\n shell: true,\n stdio: 'pipe',\n });\n }\n\n public async checkDependencies(dependencies: string[]): Promise<string> {\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n\n try {\n await fsPromises.access(packageJsonPath);\n } catch {\n return 'No package.json file found in the current directory';\n }\n\n const packageJson = JSON.parse(await fsPromises.readFile(packageJsonPath, 'utf-8'));\n for (const dependency of dependencies) {\n if (!packageJson.dependencies || !packageJson.dependencies[dependency]) {\n return `Please install ${dependency} before running this command (${this.packageManager} install ${dependency})`;\n }\n }\n\n return 'ok';\n } catch (err) {\n console.error(err);\n return 'Could not check dependencies';\n }\n }\n\n public async getProjectName() {\n try {\n const packageJsonPath = path.join(process.cwd(), 'package.json');\n const packageJson = await fsPromises.readFile(packageJsonPath, 'utf-8');\n const pkg = JSON.parse(packageJson);\n return pkg.name;\n } catch (err) {\n throw err;\n }\n }\n\n public async addScriptsToPackageJson(scripts: Record<string, string>) {\n const packageJson = JSON.parse(await fsPromises.readFile('package.json', 'utf-8'));\n packageJson.scripts = {\n ...packageJson.scripts,\n ...scripts,\n };\n await fsPromises.writeFile('package.json', JSON.stringify(packageJson, null, 2));\n }\n}\n","export abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n","import * as fs from 'node:fs';\n\nimport { EnvService } from './service.env';\n\n// TODO: Refactor (copied from admin)\nexport class FileEnvService extends EnvService {\n private filePath: string;\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private readFile(filePath: string): Promise<string> {\n return new Promise((resolve, reject) => {\n fs.readFile(filePath, 'utf8', (err: NodeJS.ErrnoException | null, data: string) => {\n if (err) reject(err);\n else resolve(data);\n });\n });\n }\n\n private writeFile({ filePath, data }: { filePath: string; data: string }): Promise<void> {\n return new Promise((resolve, reject) => {\n fs.writeFile(filePath, data, 'utf8', (err: NodeJS.ErrnoException | null) => {\n if (err) reject(err);\n else resolve();\n });\n });\n }\n\n private async updateEnvData({\n key,\n value,\n filePath = this.filePath,\n data,\n }: {\n key: string;\n value: string;\n filePath?: string;\n data: string;\n }): Promise<string> {\n const regex = new RegExp(`^${key}=.*$`, 'm');\n if (data.match(regex)) {\n data = data.replace(regex, `${key}=${value}`);\n } else {\n data += `\\n${key}=${value}`;\n }\n await this.writeFile({ filePath, data });\n console.info(`${key} set to ${value} in ENV file.`);\n return data;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await this.readFile(this.filePath);\n const regex = new RegExp(`^${key}=(.*)$`, 'm');\n const match = data.match(regex);\n return match?.[1] || null;\n } catch (err) {\n console.error(`Error reading ENV value: ${err}`);\n return null;\n }\n }\n\n async setEnvValue(key: string, value: string): Promise<void> {\n try {\n const data = await this.readFile(this.filePath);\n await this.updateEnvData({ key, value, data });\n } catch (err) {\n console.error(`Error writing ENV value: ${err}`);\n }\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nimport fsExtra from 'fs-extra/esm';\n\nimport { FileEnvService } from './service.fileEnv';\n\nexport class FileService {\n /**\n *\n * @param inputFile the file in the starter files directory to copy\n * @param outputFilePath the destination path\n * @param replaceIfExists flag to replace if it exists\n * @returns\n */\n public async copyStarterFile(inputFile: string, outputFilePath: string, replaceIfExists?: boolean) {\n const __filename = fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n const filePath = path.resolve(__dirname, 'starter-files', inputFile);\n const fileString = fs.readFileSync(filePath, 'utf8');\n\n if (fs.existsSync(outputFilePath) && !replaceIfExists) {\n console.info(`${outputFilePath} already exists`);\n return false;\n }\n\n await fsExtra.outputFile(outputFilePath, fileString);\n\n return true;\n }\n\n public async setupEnvFile({ dbUrl }: { dbUrl: string }) {\n const envPath = path.join(process.cwd(), '.env.development');\n\n await fsExtra.ensureFile(envPath);\n\n const fileEnvService = new FileEnvService(envPath);\n await fileEnvService.setEnvValue('DB_URL', dbUrl);\n }\n\n public getFirstExistingFile(files: string[]): string {\n for (const f of files) {\n if (fs.existsSync(f)) {\n return f;\n }\n }\n\n throw new Error('Missing required file, checked the following paths: ' + files.join(', '));\n }\n\n public replaceValuesInFile({\n filePath,\n replacements,\n }: {\n filePath: string;\n replacements: { search: string; replace: string }[];\n }) {\n let fileContent = fs.readFileSync(filePath, 'utf8');\n replacements.forEach(({ search, replace }) => {\n fileContent = fileContent.replaceAll(search, replace);\n });\n\n fs.writeFileSync(filePath, fileContent);\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 * as p from '@clack/prompts';\nimport type { ModelRouterModelId } from '@mastra/core/llm';\nimport fsExtra from 'fs-extra/esm';\nimport color from 'picocolors';\nimport shellQuote from 'shell-quote';\nimport yoctoSpinner from 'yocto-spinner';\n\nimport { DepsService } from '../../services/service.deps';\nimport { FileService } from '../../services/service.file';\nimport { getToken, loadCredentials } from '../auth/credentials.js';\nimport {\n cursorGlobalMCPConfigPath,\n windsurfGlobalMCPConfigPath,\n antigravityGlobalMCPConfigPath,\n} from './mcp-docs-server-install';\nimport type { Editor } from './mcp-docs-server-install';\n\nconst exec = util.promisify(child_process.exec);\n\nexport const LLMProvider = ['openai', 'anthropic', 'groq', 'google', 'cerebras', 'mistral'] as const;\nexport const COMPONENTS = ['agents', 'workflows', 'tools', 'scorers'] as const;\n\nexport type LLMProvider = (typeof LLMProvider)[number];\nexport type Component = (typeof COMPONENTS)[number];\n\nexport interface ObservabilityPromptResult {\n enabled?: boolean;\n token?: string;\n}\n\ninterface ObservabilitySelectionEvent {\n command?: 'create' | 'init';\n enabled: boolean;\n answer: 'yes' | 'no';\n selection_method: 'interactive';\n}\n\nexport async function promptForObservability(\n command?: 'create' | 'init',\n onObservabilitySelected?: (event: ObservabilitySelectionEvent) => void,\n): Promise<ObservabilityPromptResult> {\n // Loop so that if the browser-based auth flow fails (user closed the browser\n // tab, timed out, network error, …) we re-ask the same question instead of\n // leaving the user stuck. Picking \"No\" is always a clean escape hatch.\n while (true) {\n const choice = await p.select({\n message: 'Enable Mastra Observability? (will open auth flow)',\n options: [\n { value: 'yes', label: 'Yes' },\n { value: 'no', label: 'No' },\n ],\n initialValue: 'yes',\n });\n\n if (p.isCancel(choice)) return {};\n\n const answer = choice === 'yes' ? 'yes' : 'no';\n const enabled = answer === 'yes';\n onObservabilitySelected?.({\n command,\n enabled,\n answer,\n selection_method: 'interactive',\n });\n\n if (!enabled) return { enabled: false };\n\n // Only surface the logged-in user when creds already existed before getToken().\n // If they didn't, getToken() ran the browser login() flow which prints its own\n // \"Logged in as <email>\" message — printing again here would duplicate it.\n // Re-read creds after getToken() so the email reflects the actual logged-in\n // account, even when stale creds forced a browser re-login as a different user.\n const hadCachedCreds = (await loadCredentials()) !== null;\n try {\n const token = await getToken();\n if (hadCachedCreds) {\n const creds = await loadCredentials();\n if (creds) p.log.info(`Logged in as ${creds.user.email}`);\n }\n return { enabled: true, token };\n } catch (err) {\n const message = err instanceof Error ? err.message : String(err);\n p.log.warn(`Could not sign in to Mastra: ${message}`);\n // Fall through and re-prompt the same question so the user can retry\n // or pick \"No\" to continue without observability.\n }\n }\n}\n\n/**\n * Type-guard to check if a value is a valid LLMProvider\n */\nexport function isValidLLMProvider(value: string): value is LLMProvider {\n return LLMProvider.includes(value as LLMProvider);\n}\n\n/**\n * Type-guard to check if a value contains only valid Components\n */\nexport function areValidComponents(values: string[]): values is Component[] {\n return values.every(value => COMPONENTS.includes(value as Component));\n}\n\nexport const getModelIdentifier = (llmProvider: LLMProvider): ModelRouterModelId => {\n let model: ModelRouterModelId = 'openai/gpt-5-mini';\n\n if (llmProvider === 'anthropic') {\n model = 'anthropic/claude-sonnet-4-5';\n } else if (llmProvider === 'groq') {\n model = 'groq/llama-3.3-70b-versatile';\n } else if (llmProvider === 'google') {\n model = 'google/gemini-2.5-pro';\n } else if (llmProvider === 'cerebras') {\n model = 'cerebras/llama-3.3-70b';\n } else if (llmProvider === 'mistral') {\n model = 'mistral/mistral-medium-2508';\n }\n\n return model;\n};\n\nexport async function writeAgentSample(\n llmProvider: LLMProvider,\n destPath: string,\n addExampleTool: boolean,\n addScorers: boolean,\n) {\n const modelString = getModelIdentifier(llmProvider);\n\n const instructions = `You are a helpful weather assistant that provides accurate weather information and can help planning activities based on the weather.\n\nYour primary function is to help users get weather details for specific locations. When responding:\n- Always ask for a location if none is provided\n- If the location name isn't in English, please translate it\n- If giving a location with multiple parts (e.g. \"New York, NY\"), use the most relevant part (e.g. \"New York\")\n- Include relevant details like humidity, wind conditions, and precipitation\n- Keep responses concise but informative\n- If the user asks for activities and provides the weather forecast, suggest activities based on the weather forecast.\n- If the user asks for activities, respond in the format they request.${addExampleTool ? '\\n\\nUse the weatherTool to fetch current weather data.' : ''}`;\n const imports = [\n `import { Agent } from '@mastra/core/agent';`,\n `import { Memory } from '@mastra/memory';`,\n addExampleTool ? `import { weatherTool } from '../tools/weather-tool';` : undefined,\n addScorers ? `import { scorers } from '../scorers/weather-scorer';` : undefined,\n ]\n .filter(Boolean)\n .join('\\n');\n const toolsConfig = addExampleTool ? ` tools: { weatherTool },\\n` : '';\n const scorersConfig = addScorers\n ? ` scorers: {\n toolCallAppropriateness: {\n scorer: scorers.toolCallAppropriatenessScorer,\n sampling: {\n type: 'ratio',\n rate: 1,\n },\n },\n completeness: {\n scorer: scorers.completenessScorer,\n sampling: {\n type: 'ratio',\n rate: 1,\n },\n },\n translation: {\n scorer: scorers.translationScorer,\n sampling: {\n type: 'ratio',\n rate: 1,\n },\n },\n },\n`\n : '';\n const content = `${imports}\n\nexport const weatherAgent = new Agent({\n id: 'weather-agent',\n name: 'Weather Agent',\n instructions: \\`${instructions}\\`,\n model: '${modelString}',\n${toolsConfig}${scorersConfig} memory: new Memory(),\n});\n`;\n\n await fs.writeFile(destPath, content);\n}\n\nexport async function writeWorkflowSample(destPath: string) {\n const content = `import { createStep, createWorkflow } from '@mastra/core/workflows';\nimport { z } from 'zod';\n\nconst forecastSchema = z.object({\n date: z.string(),\n maxTemp: z.number(),\n minTemp: z.number(),\n precipitationChance: z.number(),\n condition: z.string(),\n location: z.string(),\n})\n\nfunction getWeatherCondition(code: number): string {\n const conditions: Record<number, string> = {\n 0: 'Clear sky',\n 1: 'Mainly clear',\n 2: 'Partly cloudy',\n 3: 'Overcast',\n 45: 'Foggy',\n 48: 'Depositing rime fog',\n 51: 'Light drizzle',\n 53: 'Moderate drizzle',\n 55: 'Dense drizzle',\n 61: 'Slight rain',\n 63: 'Moderate rain',\n 65: 'Heavy rain',\n 71: 'Slight snow fall',\n 73: 'Moderate snow fall',\n 75: 'Heavy snow fall',\n 95: 'Thunderstorm',\n }\n return conditions[code] || 'Unknown'\n}\n\nconst fetchWeather = createStep({\n id: 'fetch-weather',\n description: 'Fetches weather forecast for a given city',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: forecastSchema,\n execute: async ({ inputData }) => {\n if (!inputData) {\n throw new Error('Input data not found');\n }\n\n const geocodingUrl = \\`https://geocoding-api.open-meteo.com/v1/search?name=\\${encodeURIComponent(inputData.city)}&count=1\\`;\n const geocodingResponse = await fetch(geocodingUrl);\n const geocodingData = (await geocodingResponse.json()) as {\n results: { latitude: number; longitude: number; name: string }[];\n };\n\n if (!geocodingData.results?.[0]) {\n throw new Error(\\`Location '\\${inputData.city}' not found\\`);\n }\n\n const { latitude, longitude, name } = geocodingData.results[0];\n\n const weatherUrl = \\`https://api.open-meteo.com/v1/forecast?latitude=\\${latitude}&longitude=\\${longitude}¤t=precipitation,weathercode&timezone=auto,&hourly=precipitation_probability,temperature_2m\\`;\n const response = await fetch(weatherUrl);\n const data = (await response.json()) as {\n current: {\n time: string\n precipitation: number\n weathercode: number\n }\n hourly: {\n precipitation_probability: number[]\n temperature_2m: number[]\n }\n }\n\n const forecast = {\n date: new Date().toISOString(),\n maxTemp: Math.max(...data.hourly.temperature_2m),\n minTemp: Math.min(...data.hourly.temperature_2m),\n condition: getWeatherCondition(data.current.weathercode),\n precipitationChance: data.hourly.precipitation_probability.reduce(\n (acc, curr) => Math.max(acc, curr),\n 0\n ),\n location: name\n }\n\n return forecast;\n },\n});\n\n\nconst planActivities = createStep({\n id: 'plan-activities',\n description: 'Suggests activities based on weather conditions',\n inputSchema: forecastSchema,\n outputSchema: z.object({\n activities: z.string(),\n }),\n execute: async ({ inputData, mastra }) => {\n const forecast = inputData\n\n if (!forecast) {\n throw new Error('Forecast data not found')\n }\n\n const agent = mastra?.getAgent('weatherAgent');\n if (!agent) {\n throw new Error('Weather agent not found');\n }\n\n const prompt = \\`Based on the following weather forecast for \\${forecast.location}, suggest appropriate activities:\n \\${JSON.stringify(forecast, null, 2)}\n For each day in the forecast, structure your response exactly as follows:\n\n 📅 [Day, Month Date, Year]\n ═══════════════════════════\n\n 🌡️ WEATHER SUMMARY\n • Conditions: [brief description]\n • Temperature: [X°C/Y°F to A°C/B°F]\n • Precipitation: [X% chance]\n\n 🌅 MORNING ACTIVITIES\n Outdoor:\n • [Activity Name] - [Brief description including specific location/route]\n Best timing: [specific time range]\n Note: [relevant weather consideration]\n\n 🌞 AFTERNOON ACTIVITIES\n Outdoor:\n • [Activity Name] - [Brief description including specific location/route]\n Best timing: [specific time range]\n Note: [relevant weather consideration]\n\n 🏠 INDOOR ALTERNATIVES\n • [Activity Name] - [Brief description including specific venue]\n Ideal for: [weather condition that would trigger this alternative]\n\n ⚠️ SPECIAL CONSIDERATIONS\n • [Any relevant weather warnings, UV index, wind conditions, etc.]\n\n Guidelines:\n - Suggest 2-3 time-specific outdoor activities per day\n - Include 1-2 indoor backup options\n - For precipitation >50%, lead with indoor activities\n - All activities must be specific to the location\n - Include specific venues, trails, or locations\n - Consider activity intensity based on temperature\n - Keep descriptions concise but informative\n\n Maintain this exact formatting for consistency, using the emoji and section headers as shown.\\`;\n\n const response = await agent.stream([\n {\n role: 'user',\n content: prompt,\n },\n ]);\n\n let activitiesText = '';\n\n for await (const chunk of response.textStream) {\n process.stdout.write(chunk);\n activitiesText += chunk;\n }\n\n return {\n activities: activitiesText,\n };\n },\n});\n\nconst weatherWorkflow = createWorkflow({\n id: 'weather-workflow',\n inputSchema: z.object({\n city: z.string().describe('The city to get the weather for'),\n }),\n outputSchema: z.object({\n activities: z.string(),\n })\n})\n .then(fetchWeather)\n .then(planActivities);\n\nweatherWorkflow.commit();\n\nexport { weatherWorkflow };`;\n\n await fs.writeFile(destPath, content);\n}\n\nexport async function writeToolSample(destPath: string) {\n const fileService = new FileService();\n await fileService.copyStarterFile('tools.ts', destPath);\n}\n\nexport async function writeScorersSample(llmProvider: LLMProvider, destPath: string) {\n const modelString = getModelIdentifier(llmProvider);\n const content = `import { z } from 'zod';\nimport { createToolCallAccuracyScorerCode } from '@mastra/evals/scorers/prebuilt';\nimport { createCompletenessScorer } from '@mastra/evals/scorers/prebuilt';\nimport { getAssistantMessageFromRunOutput, getUserMessageFromRunInput } from '@mastra/evals/scorers/utils';\nimport { createScorer } from '@mastra/core/evals';\n\nexport const toolCallAppropriatenessScorer = createToolCallAccuracyScorerCode({\n expectedTool: 'weatherTool',\n strictMode: false,\n});\n\nexport const completenessScorer = createCompletenessScorer();\n\n// Custom LLM-judged scorer: evaluates if non-English locations are translated appropriately\nexport const translationScorer = createScorer({\n id: 'translation-quality-scorer',\n name: 'Translation Quality',\n description: 'Checks that non-English location names are translated and used correctly',\n type: 'agent',\n judge: {\n model: '${modelString}',\n instructions:\n 'You are an expert evaluator of translation quality for geographic locations. ' +\n 'Determine whether the user text mentions a non-English location and whether the assistant correctly uses an English translation of that location. ' +\n 'Be lenient with transliteration differences and diacritics. ' +\n 'Return only the structured JSON matching the provided schema.',\n },\n})\n .preprocess(({ run }) => {\n const userText = getUserMessageFromRunInput(run.input) || '';\n const assistantText = getAssistantMessageFromRunOutput(run.output) || '';\n return { userText, assistantText };\n })\n .analyze({\n description: 'Extract location names and detect language/translation adequacy',\n outputSchema: z.object({\n nonEnglish: z.boolean(),\n translated: z.boolean(),\n confidence: z.number().min(0).max(1).default(1),\n explanation: z.string().default(''),\n }),\n createPrompt: ({ results }) => \\`\n You are evaluating if a weather assistant correctly handled translation of a non-English location.\n User text:\n \"\"\"\n \\${results.preprocessStepResult.userText}\n \"\"\"\n Assistant response:\n \"\"\"\n \\${results.preprocessStepResult.assistantText}\n \"\"\"\n Tasks:\n 1) Identify if the user mentioned a location that appears non-English.\n 2) If non-English, check whether the assistant used a correct English translation of that location in its response.\n 3) Be lenient with transliteration differences (e.g., accents/diacritics).\n Return JSON with fields:\n {\n \"nonEnglish\": boolean,\n \"translated\": boolean,\n \"confidence\": number, // 0-1\n \"explanation\": string\n }\n \\`,\n })\n .generateScore(({ results }) => {\n const r = (results as any)?.analyzeStepResult || {};\n if (!r.nonEnglish) return 1; // If not applicable, full credit\n if (r.translated) return Math.max(0, Math.min(1, 0.7 + 0.3 * (r.confidence ?? 1)));\n return 0; // Non-English but not translated\n })\n .generateReason(({ results, score }) => {\n const r = (results as any)?.analyzeStepResult || {};\n return \\`Translation scoring: nonEnglish=\\${r.nonEnglish ?? false}, translated=\\${r.translated ?? false}, confidence=\\${r.confidence ?? 0}. Score=\\${score}. \\${r.explanation ?? ''}\\`;\n });\n\nexport const scorers = {\n toolCallAppropriatenessScorer,\n completenessScorer,\n translationScorer,\n};`;\n\n await fs.writeFile(destPath, content);\n}\n\nexport async function writeCodeSampleForComponents(\n llmprovider: LLMProvider,\n component: Component,\n destPath: string,\n importComponents: Component[],\n) {\n switch (component) {\n case 'agents':\n return writeAgentSample(\n llmprovider,\n destPath,\n importComponents.includes('tools'),\n importComponents.includes('scorers'),\n );\n case 'tools':\n return writeToolSample(destPath);\n case 'workflows':\n return writeWorkflowSample(destPath);\n case 'scorers':\n return writeScorersSample(llmprovider, destPath);\n default:\n return '';\n }\n}\n\nexport const createComponentsDir = async (dirPath: string, component: string) => {\n const componentPath = dirPath + `/${component}`;\n\n await fsExtra.ensureDir(componentPath);\n};\n\nexport const writeIndexFile = async ({\n dirPath,\n addAgent,\n addExample,\n addWorkflow,\n addScorers,\n}: {\n dirPath: string;\n addExample: boolean;\n addWorkflow: boolean;\n addAgent: boolean;\n addScorers: boolean;\n}) => {\n const indexPath = dirPath + '/index.ts';\n const destPath = path.join(indexPath);\n try {\n await fs.writeFile(destPath, '');\n const filteredExports = [\n addWorkflow ? `workflows: { weatherWorkflow },` : '',\n addAgent ? `agents: { weatherAgent },` : '',\n addScorers ? `scorers: { toolCallAppropriatenessScorer, completenessScorer, translationScorer },` : '',\n ].filter(Boolean);\n if (!addExample) {\n await fs.writeFile(\n destPath,\n `\nimport { Mastra } from '@mastra/core/mastra';\n\nexport const mastra = new Mastra()\n `,\n );\n\n return;\n }\n await fs.writeFile(\n destPath,\n `\nimport { Mastra } from '@mastra/core/mastra';\nimport { PinoLogger } from '@mastra/loggers';\nimport { LibSQLStore } from '@mastra/libsql';\nimport { DuckDBStore } from \"@mastra/duckdb\";\nimport { MastraCompositeStore } from '@mastra/core/storage';\nimport { Observability, MastraStorageExporter, MastraPlatformExporter, SensitiveDataFilter } from '@mastra/observability';\n${addWorkflow ? `import { weatherWorkflow } from './workflows/weather-workflow';` : ''}\n${addAgent ? `import { weatherAgent } from './agents/weather-agent';` : ''}\n${addScorers ? `import { toolCallAppropriatenessScorer, completenessScorer, translationScorer } from './scorers/weather-scorer';` : ''}\n\nexport const mastra = new Mastra({\n ${filteredExports.join('\\n ')}\n storage: new MastraCompositeStore({\n id: 'composite-storage',\n default: new LibSQLStore({\n id: \"mastra-storage\",\n url: \"file:./mastra.db\",\n }),\n domains: {\n observability: await new DuckDBStore().getStore('observability'),\n }\n }),\n logger: new PinoLogger({\n name: 'Mastra',\n level: 'info',\n }),\n observability: new Observability({\n configs: {\n default: {\n serviceName: 'mastra',\n exporters: [\n new MastraStorageExporter(), // Persists observability events to Mastra Storage\n new MastraPlatformExporter(), // Sends observability events to Mastra Platform (if MASTRA_PLATFORM_ACCESS_TOKEN is set)\n ],\n spanOutputProcessors: [\n new SensitiveDataFilter(), // Redacts sensitive data like passwords, tokens, keys\n ],\n },\n },\n }),\n});\n`,\n );\n } catch (err) {\n throw err;\n }\n};\n\nexport const checkInitialization = async (dirPath: string) => {\n try {\n await fs.access(dirPath);\n return true;\n } catch {\n return false;\n }\n};\n\nexport const checkAndInstallCoreDeps = async (addExample: boolean, versionTag?: string) => {\n const spinner = yoctoSpinner({ text: 'Installing Mastra core dependencies' });\n let packages: Array<{ name: string; version: string }> = [];\n const mastraVersionTag = versionTag || 'latest';\n\n try {\n const depService = new DepsService();\n\n spinner.start();\n\n const needsCore = (await depService.checkDependencies(['@mastra/core'])) !== `ok`;\n const needsCli = (await depService.checkDependencies(['mastra'])) !== `ok`;\n const needsZod = (await depService.checkDependencies(['zod'])) !== `ok`;\n\n if (needsCore) {\n packages.push({ name: '@mastra/core', version: mastraVersionTag });\n }\n\n if (needsCli) {\n packages.push({ name: 'mastra', version: mastraVersionTag });\n }\n\n if (needsZod) {\n packages.push({ name: 'zod', version: '^4' });\n }\n\n if (addExample) {\n const needsLibsql = (await depService.checkDependencies(['@mastra/libsql'])) !== `ok`;\n\n if (needsLibsql) {\n packages.push({ name: '@mastra/libsql', version: mastraVersionTag });\n }\n }\n\n if (packages.length > 0) {\n await depService.installPackages(packages.map(pkg => `${pkg.name}@${pkg.version}`));\n }\n\n spinner.success('Successfully installed Mastra core dependencies');\n } catch (err) {\n spinner.error(`Failed to install core dependencies: ${err instanceof Error ? err.message : 'Unknown error'}`);\n }\n};\n\nexport const getAPIKey = async (provider: LLMProvider) => {\n let key = 'OPENAI_API_KEY';\n switch (provider) {\n case 'anthropic':\n key = 'ANTHROPIC_API_KEY';\n return key;\n case 'groq':\n key = 'GROQ_API_KEY';\n return key;\n case 'google':\n key = 'GOOGLE_GENERATIVE_AI_API_KEY';\n return key;\n case 'cerebras':\n key = 'CEREBRAS_API_KEY';\n return key;\n case 'mistral':\n key = 'MISTRAL_API_KEY';\n return key;\n default:\n return key;\n }\n};\n\nexport const writeAPIKey = async ({ provider, apiKey }: { provider: LLMProvider; apiKey?: string }) => {\n /**\n * If people skip entering an API key (because they e.g. have it in their environment already), we write to .env.example instead of .env so that they can immediately run Mastra without having to delete an .env file with an invalid key.\n */\n const envFileName = apiKey ? '.env' : '.env.example';\n\n const key = await getAPIKey(provider);\n const escapedKey = shellQuote.quote([key]);\n const escapedApiKey = shellQuote.quote([apiKey ? apiKey : 'your-api-key']);\n await exec(`echo ${escapedKey}=${escapedApiKey} >> ${envFileName}`);\n};\n\n/**\n * Append Mastra Observability credentials to the project's `.env` file.\n *\n * The generated `src/mastra/index.ts` template already registers a\n * `MastraPlatformExporter` which no-ops unless `MASTRA_PLATFORM_ACCESS_TOKEN`\n * is set, so enabling Observability is a pure env-var concern from the\n * scaffolder's side.\n *\n * When called with no token, writes empty placeholders so the user can paste\n * a key minted manually from the dashboard.\n */\nexport const writeObservabilityEnv = async ({\n token,\n projectId,\n endpoint,\n}: { token?: string; projectId?: string; endpoint?: string } = {}) => {\n const envFilePath = path.join(process.cwd(), '.env');\n const lines = [\n '',\n '# Mastra Observability — https://projects.mastra.ai',\n '# Access token and project id wired up automatically when you ran',\n '# `mastra init` / `create-mastra` with Observability enabled.',\n `MASTRA_PLATFORM_ACCESS_TOKEN=${token ?? ''}`,\n `MASTRA_PROJECT_ID=${projectId ?? ''}`,\n ];\n // Only emit the traces endpoint when caller provided one (e.g. local dev or\n // staging). In production the MastraPlatformExporter falls back to its\n // built-in https://observability.mastra.ai default and per-project URLs are\n // derived from MASTRA_PROJECT_ID.\n if (endpoint) {\n lines.push(`MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT=${endpoint}`);\n }\n lines.push('');\n await fs.appendFile(envFilePath, lines.join('\\n'));\n};\nexport const createMastraDir = async (directory: string): Promise<{ ok: true; dirPath: string } | { ok: false }> => {\n let dir = directory\n .trim()\n .split('/')\n .filter(item => item !== '');\n\n const dirPath = path.join(process.cwd(), ...dir, 'mastra');\n\n try {\n await fs.access(dirPath);\n return { ok: false };\n } catch {\n await fsExtra.ensureDir(dirPath);\n return { ok: true, dirPath };\n }\n};\n\nexport const writeCodeSample = async (\n dirPath: string,\n component: Component,\n llmProvider: LLMProvider,\n importComponents: Component[],\n) => {\n const destPath = dirPath + `/${component}/weather-${component.slice(0, -1)}.ts`;\n\n try {\n await writeCodeSampleForComponents(llmProvider, component, destPath, importComponents);\n } catch (err) {\n throw err;\n }\n};\n\nexport const LLM_PROVIDERS: { value: LLMProvider; label: string; hint?: string }[] = [\n { value: 'openai', label: 'OpenAI', hint: 'recommended' },\n { value: 'anthropic', label: 'Anthropic' },\n { value: 'groq', label: 'Groq' },\n { value: 'google', label: 'Google' },\n { value: 'cerebras', label: 'Cerebras' },\n { value: 'mistral', label: 'Mistral' },\n];\n\ninterface InteractivePromptArgs {\n options?: {\n command?: 'create' | 'init';\n showBanner?: boolean;\n onObservabilitySelected?: (event: ObservabilitySelectionEvent) => void;\n };\n skip?: {\n directory?: boolean;\n llmProvider?: boolean;\n llmApiKey?: boolean;\n gitInit?: boolean;\n skills?: boolean;\n mcpServer?: boolean;\n observability?: boolean;\n };\n}\n\nexport const interactivePrompt = async (args: InteractivePromptArgs = {}) => {\n const { skip = {}, options: { command, showBanner = true, onObservabilitySelected } = {} } = args;\n\n if (showBanner) {\n p.intro(color.inverse(' Mastra Init '));\n }\n const mastraProject = await p.group(\n {\n directory: () =>\n skip?.directory\n ? undefined\n : p.text({\n message: 'Where should we create the Mastra files? (default: src/)',\n placeholder: 'src/',\n defaultValue: 'src/',\n }),\n llmProvider: () =>\n skip?.llmProvider\n ? undefined\n : p.select({\n message: 'Select a default provider:',\n options: LLM_PROVIDERS,\n }),\n llmApiKey: async ({ results: { llmProvider } }) => {\n if (skip?.llmApiKey) return undefined;\n\n const llmName = LLM_PROVIDERS.find(p => p.value === llmProvider)?.label || 'provider';\n const keyChoice = await p.select({\n message: `Enter your ${llmName} API key?`,\n options: [\n { value: 'skip', label: 'Skip for now', hint: 'default' },\n { value: 'enter', label: 'Enter API key' },\n ],\n initialValue: 'skip',\n });\n\n if (keyChoice === 'enter') {\n return p.password({\n message: 'Enter your API key:',\n mask: '*',\n clearOnError: true,\n validate: value => {\n if (!value || value.length === 0) return 'API key cannot be empty';\n },\n });\n }\n return undefined;\n },\n observability: async () => {\n if (skip?.observability) return undefined;\n return promptForObservability(command, onObservabilitySelected);\n },\n configureMastraToolingForAgents: async () => {\n if (skip?.skills && skip?.mcpServer) return { skills: undefined, mcpServer: undefined };\n\n const choice = await p.select({\n message: `Configure Mastra tooling for agents?`,\n options: [\n { value: 'skills', label: 'Skills', hint: 'recommended' },\n { value: 'mcp', label: 'MCP Docs Server' },\n ],\n initialValue: 'skills',\n });\n\n if (p.isCancel(choice)) {\n return { skills: undefined, mcpServer: undefined };\n }\n\n if (choice === 'skills') {\n // Popular agents\n const POPULAR_AGENTS: { value: string; label: string }[] = [\n { value: 'universal', label: 'Universal (Codex, Cursor, Gemini, GitHub, OpenCode)' },\n { value: 'claude-code', label: 'Claude Code' },\n ];\n\n // All agents (alphabetically)\n const ALL_AGENTS: { value: string; label: string }[] = [\n ...POPULAR_AGENTS,\n { value: 'adal', label: 'AdaL' },\n { value: 'antigravity', label: 'Antigravity' },\n { value: 'augment', label: 'Augment' },\n { value: 'codebuddy', label: 'CodeBuddy' },\n { value: 'command-code', label: 'Command Code' },\n { value: 'crush', label: 'Crush' },\n { value: 'droid', label: 'Droid' },\n { value: 'goose', label: 'Goose' },\n { value: 'iflow-cli', label: 'iFlow CLI' },\n { value: 'junie', label: 'Junie' },\n { value: 'kilo', label: 'Kilo Code' },\n { value: 'kiro-cli', label: 'Kiro CLI' },\n { value: 'kode', label: 'Kode' },\n { value: 'mcpjam', label: 'MCPJam' },\n { value: 'mistral-vibe', label: 'Mistral Vibe' },\n { value: 'mux', label: 'Mux' },\n { value: 'neovate', label: 'Neovate' },\n { value: 'openclaude', label: 'OpenClaude IDE' },\n { value: 'openclaw', label: 'OpenClaw' },\n { value: 'openhands', label: 'OpenHands' },\n { value: 'pi', label: 'Pi' },\n { value: 'pochi', label: 'Pochi' },\n { value: 'qoder', label: 'Qoder' },\n { value: 'qwen-code', label: 'Qwen Code' },\n { value: 'replit', label: 'Replit' },\n { value: 'roo', label: 'Roo Code' },\n { value: 'trae', label: 'Trae' },\n { value: 'trae-cn', label: 'Trae CN' },\n { value: 'windsurf', label: 'Windsurf' },\n { value: 'zencoder', label: 'Zencoder' },\n ];\n\n // Show popular agents first with \"Show all\" option\n const initialSelection = await p.select({\n message: `Select your agent:`,\n options: [...POPULAR_AGENTS, { value: '__show_all__', label: '+ Show all agents' }],\n initialValue: 'universal',\n });\n\n if (p.isCancel(initialSelection)) {\n return { skills: undefined, mcpServer: undefined };\n }\n\n let selectedAgents = new Set<string>();\n\n // If user selected \"Show all\", show full list\n if (initialSelection === '__show_all__') {\n const followUpSelection = await p.select({\n message: `Select your agent:`,\n options: ALL_AGENTS,\n });\n\n if (p.isCancel(followUpSelection)) {\n return { skills: undefined, mcpServer: undefined };\n }\n\n selectedAgents.add(followUpSelection);\n } else {\n selectedAgents.add(initialSelection);\n }\n\n // Always add \"universal\" type so that the definition there gets symlinked to the proprietary agent folders\n selectedAgents.add('universal');\n\n return { skills: Array.from(selectedAgents), mcpServer: undefined };\n }\n\n // If MCP selected, show editor sub-selection\n if (choice === 'mcp') {\n const editor = await p.select({\n message: `Which editor?`,\n options: [\n {\n value: 'cursor',\n label: 'Cursor (project only)',\n },\n {\n value: 'cursor-global',\n label: 'Cursor (global, all projects)',\n },\n {\n value: 'windsurf',\n label: 'Windsurf',\n },\n {\n value: 'vscode',\n label: 'VSCode',\n },\n {\n value: 'antigravity',\n label: 'Antigravity',\n },\n ] satisfies { value: Editor; label: string }[],\n });\n\n if (p.isCancel(editor)) {\n return { skills: undefined, mcpServer: undefined };\n }\n\n // Handle MCP editor selections with confirmations\n if (editor === `cursor`) {\n p.log.message(\n `\\nNote: you will need to go into Cursor Settings -> MCP Settings and manually enable the installed Mastra MCP server.\\n`,\n );\n }\n\n if (editor === `cursor-global`) {\n const confirm = await p.select({\n message: `Global install will add/update ${cursorGlobalMCPConfigPath} and make the Mastra docs MCP server available in all your Cursor projects. Continue?`,\n options: [\n { value: 'yes', label: 'Yes, I understand' },\n { value: 'no', label: 'No, cancel' },\n ],\n });\n if (confirm !== `yes`) {\n return { skills: undefined, mcpServer: undefined };\n }\n }\n\n if (editor === `windsurf`) {\n const confirm = await p.select({\n message: `Windsurf only supports a global MCP config (at ${windsurfGlobalMCPConfigPath}) is it ok to add/update that global config?\\nThis means the Mastra docs MCP server will be available in all your Windsurf projects.`,\n options: [\n { value: 'yes', label: 'Yes, I understand' },\n { value: 'no', label: 'No, cancel' },\n ],\n });\n if (confirm !== `yes`) {\n return { skills: undefined, mcpServer: undefined };\n }\n }\n\n if (editor === `antigravity`) {\n const confirm = await p.select({\n message: `Antigravity only supports a global MCP config (at ${antigravityGlobalMCPConfigPath}). Is it ok to add/update that global config?\\nThis will make the Mastra docs MCP server available in all Antigravity projects.`,\n options: [\n { value: 'yes', label: 'Yes, I understand' },\n { value: 'no', label: 'No, cancel' },\n ],\n });\n\n if (confirm !== `yes`) {\n return { skills: undefined, mcpServer: undefined };\n }\n }\n return { skills: undefined, mcpServer: editor };\n }\n\n return { skills: undefined, mcpServer: undefined };\n },\n initGit: async () => {\n if (skip?.gitInit) return false;\n\n return p.confirm({\n message: 'Initialize a new git repository?',\n initialValue: true,\n });\n },\n },\n {\n onCancel: () => {\n p.cancel('Operation cancelled.');\n process.exit(0);\n },\n },\n );\n\n // Flatten grouped prompt return values\n const { configureMastraToolingForAgents, observability, ...rest } = mastraProject;\n return {\n ...rest,\n observability: observability?.enabled,\n observabilityToken: observability?.token,\n skills: configureMastraToolingForAgents?.skills as string[] | undefined,\n mcpServer: configureMastraToolingForAgents?.mcpServer as Editor | undefined,\n };\n};\n\n/**\n * Check if the current directory has a package.json file. If not, we should alert the user to create one or run \"mastra create\" to create a new project. The package.json file is required to install dependencies in the next steps.\n */\nexport const checkForPkgJson = async () => {\n const cwd = process.cwd();\n const pkgJsonPath = path.join(cwd, 'package.json');\n\n try {\n await fs.access(pkgJsonPath);\n\n // Do nothing\n } catch {\n p.log.error(\n 'No package.json file found in the current directory. Please run \"npm init -y\" to create one, or run \"npx create-mastra@latest\" to create a new Mastra project.',\n );\n\n process.exit(1);\n }\n};\n\n/**\n * Read the `name` field from the project's `package.json`, returning `undefined`\n * if the file is missing or unparseable.\n */\nexport const readPackageName = async (): Promise<string | undefined> => {\n try {\n const raw = await fs.readFile(path.join(process.cwd(), 'package.json'), 'utf8');\n const parsed = JSON.parse(raw) as { name?: unknown };\n return typeof parsed.name === 'string' && parsed.name.trim().length > 0 ? parsed.name : undefined;\n } catch {\n return undefined;\n }\n};\n\n/**\n * Generate content for AGENTS.md file\n */\nexport function generateAgentsMarkdown({ skills, mcpServer }: { skills?: string[]; mcpServer?: Editor }): string {\n const hasSkills = skills && skills.length > 0;\n const hasMcp = !!mcpServer;\n\n let content = `# AGENTS.md\n\nYou are a TypeScript developer experienced with the Mastra framework. You build AI agents, tools, workflows, and scorers. You follow strict TypeScript practices and always consult up-to-date Mastra documentation before making changes.\n\n`;\n\n // Add critical Mastra skill section if skills were installed\n if (hasSkills) {\n content += `\n## CRITICAL: Load \\`mastra\\` skill\n\n**BEFORE doing ANYTHING with Mastra, load the \\`mastra\\` skill FIRST.** Never rely on cached knowledge as Mastra's APIs change frequently between versions. Use the skill to read up-to-date documentation from \\`node_modules\\`.\n`;\n }\n\n content += `\n## Project Overview\n\nThis is a **Mastra** project written in TypeScript. Mastra is a framework for building AI-powered applications and agents with a modern TypeScript stack. The Node.js runtime is \\`>=22.13.0\\`.\n\n## Commands\n\n\\`\\`\\`bash\nnpm run dev # Start Mastra Studio at localhost:4111 (long-running, use a separate terminal)\nnpm run build # Build a production-ready server\n\\`\\`\\`\n\n## Project Structure\n\n| Folder | Description |\n| ---------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |\n| \\`src/mastra\\` | Entry point for all Mastra-related code and configuration. |\n| \\`src/mastra/agents\\` | Define and configure your agents - their behavior, goals, and tools. |\n| \\`src/mastra/workflows\\` | Define multi-step workflows that orchestrate agents and tools together. |\n| \\`src/mastra/tools\\` | Create reusable tools that your agents can call |\n| \\`src/mastra/mcp\\` | (Optional) Implement custom MCP servers to share your tools with external agents |\n| \\`src/mastra/scorers\\` | (Optional) Define scorers for evaluating agent performance over time |\n| \\`src/mastra/public\\` | (Optional) Contents are copied into the \\`.build/output\\` directory during the build process, making them available for serving at runtime |\n\n### Top-level files\n\nTop-level files define how your Mastra project is configured, built, and connected to its environment.\n\n| File | Description |\n| --------------------- | ----------------------------------------------------------------------------------------------------------------- |\n| \\`src/mastra/index.ts\\` | Central entry point where you configure and initialize Mastra. |\n| \\`.env.example\\` | Template for environment variables - copy and rename to \\`.env\\` to add your secret [model provider](/models) keys. |\n| \\`package.json\\` | Defines project metadata, dependencies, and available npm scripts. |\n| \\`tsconfig.json\\` | Configures TypeScript options such as path aliases, compiler settings, and build output. |\n\n## Boundaries\n\n### Always do\n\n- Load the \\`mastra\\` skill before any Mastra-related work\n- Register new agents, tools, workflows, and scorers in \\`src/mastra/index.ts\\`\n- Use schemas for tool inputs and outputs\n- Run \\`npm run build\\` to verify changes compile\n\n### Never do\n\n- Never commit \\`.env\\` files or secrets\n- Never modify \\`node_modules\\` or Mastra's database files directly\n- Never hardcode API keys (always use environment variables)\n`;\n\n // Add MCP section if MCP server was configured\n if (hasMcp) {\n const editorName =\n mcpServer === 'cursor-global' ? 'Cursor (global)' : mcpServer!.charAt(0).toUpperCase() + mcpServer!.slice(1);\n\n content += `## MCP Docs Server\n\nThis project has the Mastra MCP Docs Server configured for ${editorName}.\n\n### Using MCP Docs\n\nThe MCP server provides embedded documentation access within your editor:\n\n1. The server was automatically configured during project creation\n2. Restart your editor to load the MCP server\n3. Use the Mastra docs tools in your editor to access:\n - API references\n - Code examples\n - Integration guides\n\nLearn more in the [MCP Documentation](https://mastra.ai/docs/mcp/overview).\n\n`;\n }\n\n // Add resources section\n content += `## Resources\n\n- [Mastra Documentation](https://mastra.ai/llms.txt)\n- [Mastra .well-known skills discovery](https://mastra.ai/.well-known/skills/index.json)\n`;\n\n return content;\n}\n\n/**\n * Write AGENTS.md file to project root\n */\nexport async function writeAgentsMarkdown(options: { skills?: string[]; mcpServer?: Editor }): Promise<void> {\n const content = generateAgentsMarkdown(options);\n const filePath = path.join(process.cwd(), 'AGENTS.md');\n await fs.writeFile(filePath, content);\n}\n\n/**\n * Write CLAUDE.md file to project root\n */\nexport async function writeClaudeMarkdown(): Promise<void> {\n const filePath = path.join(process.cwd(), 'CLAUDE.md');\n await fs.writeFile(filePath, '@AGENTS.md');\n}\n","import { fileURLToPath } from 'node:url';\nimport { InvalidArgumentError } from 'commander';\nimport { execa } from 'execa';\nimport fsExtra from 'fs-extra';\nimport type { PackageManager } from '../utils/package-manager';\nimport { EDITOR, isValidEditor } from './init/mcp-docs-server-install';\nimport { areValidComponents, COMPONENTS, isValidLLMProvider, LLMProvider } from './init/utils';\n\nexport function getPackageManager(): PackageManager {\n const userAgent = process.env.npm_config_user_agent || '';\n const execPath = process.env.npm_execpath || '';\n\n // Check user agent first\n if (userAgent.includes('bun')) {\n return 'bun';\n }\n if (userAgent.includes('yarn')) {\n return 'yarn';\n }\n if (userAgent.includes('pnpm')) {\n return 'pnpm';\n }\n if (userAgent.includes('npm')) {\n return 'npm';\n }\n\n // Fallback to execpath check\n if (execPath.includes('bun')) {\n return 'bun';\n }\n if (execPath.includes('yarn')) {\n return 'yarn';\n }\n if (execPath.includes('pnpm')) {\n return 'pnpm';\n }\n if (execPath.includes('npm')) {\n return 'npm';\n }\n\n return 'npm'; // Default fallback\n}\n\nexport function parseMcp(value: string) {\n if (!isValidEditor(value)) {\n throw new InvalidArgumentError(`Choose a valid value: ${EDITOR.join(', ')}`);\n }\n return value;\n}\n\nexport function parseSkills(value: string) {\n // Skills flag accepts comma-separated agent names\n return value\n .split(',')\n .map(s => s.trim())\n .filter(Boolean);\n}\n\nexport function parseComponents(value: string) {\n const parsedValue = value.split(',');\n\n if (!areValidComponents(parsedValue)) {\n throw new InvalidArgumentError(`Choose valid components: ${COMPONENTS.join(', ')}`);\n }\n\n return parsedValue;\n}\n\nexport function parseLlmProvider(value: string) {\n if (!isValidLLMProvider(value)) {\n throw new InvalidArgumentError(`Choose a valid provider: ${LLMProvider.join(', ')}`);\n }\n return value;\n}\n\nexport function shouldSkipDotenvLoading(): boolean {\n return process.env.MASTRA_SKIP_DOTENV === 'true' || process.env.MASTRA_SKIP_DOTENV === '1';\n}\n\n/**\n * Get the version tag (e.g., 'beta', 'latest') for the currently running mastra CLI.\n * This queries npm dist-tags to find which tag corresponds to the current version.\n */\nexport async function getVersionTag(): Promise<string | undefined> {\n try {\n const pkgPath = fileURLToPath(import.meta.resolve('mastra/package.json'));\n const json = await fsExtra.readJSON(pkgPath);\n const currentVersion = json.version;\n\n const { stdout } = await execa('npm', ['dist-tag', 'ls', 'mastra'], {\n cwd: import.meta.dirname,\n });\n const tagLine = stdout.split('\\n').find((distLine: string) => distLine.endsWith(`: ${currentVersion}`));\n const tag = tagLine ? tagLine.split(':')[0]?.trim() : undefined;\n\n return tag;\n } catch {\n // If we can't determine the tag, return undefined (will use default/latest)\n return undefined;\n }\n}\n\n/**\n * Check if the current directory already has git initialized.\n */\nexport async function isGitInitialized({ cwd }: { cwd: string }): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--is-inside-work-tree'], { cwd, stdio: 'ignore' });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialize a git repository in the specified directory.\n */\nexport async function gitInit({ cwd }: { cwd: string }) {\n await execa('git', ['init'], { cwd, stdio: 'ignore' });\n await execa('git', ['add', '-A'], { cwd, stdio: 'ignore' });\n await execa(\n 'git',\n [\n 'commit',\n '-m',\n '\"Initial commit from Mastra\"',\n '--author=\"dane-ai-mastra[bot] <dane-ai-mastra[bot]@users.noreply.github.com>\"',\n ],\n { cwd, stdio: 'ignore' },\n );\n}\n","import { randomUUID } from 'node:crypto';\nimport { existsSync, readFileSync, writeFileSync } from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport { PostHog } from 'posthog-node';\nimport { getPackageManager } from '../commands/utils.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\ninterface CommandData {\n command: string;\n args?: Record<string, unknown>;\n durationMs?: number;\n status: 'success' | 'error';\n error?: string;\n}\n\nexport type CLI_ORIGIN = 'mastra-cloud' | 'oss';\n\nlet analyticsInstance: PosthogAnalytics | null = null;\n\nexport function getAnalytics(): PosthogAnalytics | null {\n return analyticsInstance;\n}\n\nexport function setAnalytics(instance: PosthogAnalytics): void {\n analyticsInstance = instance;\n}\n\nexport class PosthogAnalytics {\n private sessionId: string;\n private client?: PostHog;\n private distinctId: string;\n private version: string;\n private packageManager: string;\n\n constructor({\n version,\n apiKey,\n host = 'https://app.posthog.com',\n }: {\n version: string;\n apiKey: string;\n host: string;\n }) {\n this.version = version;\n this.packageManager = getPackageManager();\n const cliConfigPath = path.join(__dirname, 'mastra-cli.json');\n if (existsSync(cliConfigPath)) {\n try {\n const { distinctId, sessionId } = JSON.parse(readFileSync(cliConfigPath, 'utf-8'));\n this.distinctId = distinctId;\n this.sessionId = sessionId;\n } catch {\n this.sessionId = randomUUID();\n this.distinctId = this.getDistinctId();\n }\n\n this.writeCliConfig({\n distinctId: this.distinctId,\n sessionId: this.sessionId,\n });\n } else {\n this.sessionId = randomUUID();\n this.distinctId = this.getDistinctId();\n this.writeCliConfig({\n distinctId: this.distinctId,\n sessionId: this.sessionId,\n });\n }\n\n if (this.isTelemetryEnabled()) {\n this.initializePostHog(apiKey, host);\n }\n }\n\n private writeCliConfig({ distinctId, sessionId }: { distinctId: string; sessionId: string }): void {\n try {\n writeFileSync(path.join(__dirname, 'mastra-cli.json'), JSON.stringify({ distinctId, sessionId }));\n } catch {\n //swallow\n }\n }\n\n private initializePostHog(apiKey: string, host: string): void {\n this.client = new PostHog(apiKey, {\n host,\n flushAt: 1,\n flushInterval: 0,\n disableGeoip: false,\n });\n\n this.captureSessionStart();\n\n process.on('exit', () => {\n this.client?.flush().catch(() => {});\n });\n }\n\n private isTelemetryEnabled(): boolean {\n // Check environment variable first\n if (process.env.MASTRA_TELEMETRY_DISABLED) {\n return false;\n }\n // Default to enabled\n return true;\n }\n\n private getDistinctId(): string {\n // Use machine-id or generate a persistent ID\n // This helps track unique CLI installations\n const machineId = os.hostname();\n return `mastra-${machineId}`;\n }\n\n private getSystemProperties(): Record<string, any> {\n return {\n os: process.platform,\n os_version: os.release(),\n node_version: process.version,\n platform: process.arch,\n session_id: this.sessionId,\n cli_version: this.version || 'unknown',\n machine_id: os.hostname(),\n package_manager: this.packageManager,\n };\n }\n private getDurationMs(startTime: [number, number]): number {\n const [seconds, nanoseconds] = process.hrtime(startTime);\n return seconds * 1000 + nanoseconds / 1_000_000;\n }\n\n private captureSessionStart(): void {\n if (!this.client) {\n return;\n }\n\n this.client.capture({\n distinctId: this.distinctId,\n event: 'cli_session_start',\n properties: {\n ...this.getSystemProperties(),\n },\n });\n }\n\n trackEvent(eventName: string, properties?: Record<string, any>): void {\n try {\n if (!this.client) {\n return;\n }\n\n this.client.capture({\n distinctId: this.distinctId,\n event: eventName,\n properties: {\n ...this.getSystemProperties(),\n ...properties,\n },\n });\n } catch {\n //swallow\n }\n }\n\n trackCommand(options: {\n command: string;\n args?: Record<string, unknown>;\n durationMs?: number;\n status?: 'success' | 'error';\n error?: string;\n origin?: CLI_ORIGIN;\n }): void {\n try {\n if (!this.client) {\n return;\n }\n\n const commandData: CommandData = {\n command: options.command,\n status: options.status || 'success',\n };\n\n if (options.args) {\n commandData.args = options.args;\n }\n\n if (options.durationMs) {\n commandData.durationMs = options.durationMs;\n }\n\n if (options.error) {\n commandData.error = options.error;\n }\n\n this.client.capture({\n distinctId: this.distinctId,\n event: 'cli_command',\n properties: {\n ...this.getSystemProperties(),\n ...commandData,\n origin: options?.origin || 'oss',\n },\n });\n } catch {\n //swallow\n }\n }\n\n // Helper method to wrap command execution with timing\n async trackCommandExecution<T>({\n command,\n args,\n execution,\n origin,\n }: {\n command: string;\n args: Record<string, unknown>;\n execution: () => Promise<T>;\n origin?: CLI_ORIGIN;\n }): Promise<T> {\n const startTime = process.hrtime();\n\n try {\n const result = await execution();\n const durationMs = this.getDurationMs(startTime);\n this.trackCommand({\n command,\n args,\n durationMs,\n status: 'success',\n origin,\n });\n\n return result;\n } catch (error) {\n const durationMs = this.getDurationMs(startTime);\n this.trackCommand({\n command,\n args,\n durationMs,\n status: 'error',\n error: error instanceof Error ? error.message : String(error),\n origin,\n });\n\n throw error;\n }\n }\n\n // Ensure PostHog client is shutdown properly\n async shutdown(timeoutMs?: number): Promise<void> {\n if (!this.client) {\n return;\n }\n try {\n await this.client.shutdown(timeoutMs);\n } catch {\n //swallow\n }\n }\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createMastraDir, writeIndexFile, createComponentsDir, writeAPIKey, writeCodeSample, DepsService, getAPIKey, installMastraDocsMCPServer, writeAgentsMarkdown, writeClaudeMarkdown, gitInit, readPackageName, writeObservabilityEnv, getAnalytics, getPackageManager, LLM_PROVIDERS, isGitInitialized, interactivePrompt, getPackageManagerAddCommand, getModelIdentifier } from './chunk-
|
|
1
|
+
import { createMastraDir, writeIndexFile, createComponentsDir, writeAPIKey, writeCodeSample, DepsService, getAPIKey, installMastraDocsMCPServer, writeAgentsMarkdown, writeClaudeMarkdown, gitInit, readPackageName, writeObservabilityEnv, getAnalytics, getPackageManager, LLM_PROVIDERS, isGitInitialized, interactivePrompt, getPackageManagerAddCommand, getModelIdentifier } from './chunk-MVHERJCK.js';
|
|
2
2
|
import { fetchOrgs } from './chunk-4Z57PBTZ.js';
|
|
3
3
|
import { getCurrentOrgId, setCurrentOrgId, getToken } from './chunk-EXG3XKBK.js';
|
|
4
4
|
import { MASTRA_PLATFORM_API_URL, platformFetch, authHeaders } from './chunk-L2SGSIJI.js';
|
|
@@ -17,7 +17,7 @@ import { execa } from 'execa';
|
|
|
17
17
|
// package.json
|
|
18
18
|
var package_default = {
|
|
19
19
|
name: "mastra",
|
|
20
|
-
version: "1.9.2-alpha.
|
|
20
|
+
version: "1.9.2-alpha.3",
|
|
21
21
|
license: "Apache-2.0",
|
|
22
22
|
description: "cli for mastra",
|
|
23
23
|
type: "module",
|
|
@@ -857,7 +857,8 @@ var createMastraProject = async ({
|
|
|
857
857
|
skills,
|
|
858
858
|
mcpServer,
|
|
859
859
|
observability,
|
|
860
|
-
needsInteractive
|
|
860
|
+
needsInteractive,
|
|
861
|
+
onObservabilitySelected
|
|
861
862
|
}) => {
|
|
862
863
|
p6.intro(color.inverse(" Mastra Create "));
|
|
863
864
|
const projectName = name ?? await p6.text({
|
|
@@ -878,7 +879,7 @@ var createMastraProject = async ({
|
|
|
878
879
|
if (needsInteractive) {
|
|
879
880
|
const skipGitInit = await isGitInitialized({ cwd: process.cwd() });
|
|
880
881
|
result = await interactivePrompt({
|
|
881
|
-
options: { showBanner: false },
|
|
882
|
+
options: { command: "create", showBanner: false, onObservabilitySelected },
|
|
882
883
|
skip: {
|
|
883
884
|
llmProvider: llmProvider !== void 0,
|
|
884
885
|
llmApiKey: llmApiKey !== void 0,
|
|
@@ -1036,7 +1037,8 @@ var create = async (args) => {
|
|
|
1036
1037
|
skills: args?.skills,
|
|
1037
1038
|
mcpServer: args?.mcpServer,
|
|
1038
1039
|
observability: args?.observability,
|
|
1039
|
-
needsInteractive
|
|
1040
|
+
needsInteractive,
|
|
1041
|
+
onObservabilitySelected: (event) => getAnalytics()?.trackEvent("cli_observability_selected", event)
|
|
1040
1042
|
});
|
|
1041
1043
|
if (needsInteractive && result) {
|
|
1042
1044
|
const analytics = getAnalytics();
|
|
@@ -1318,5 +1320,5 @@ async function createFromTemplate(args) {
|
|
|
1318
1320
|
}
|
|
1319
1321
|
|
|
1320
1322
|
export { create, createLogger, init, listOrgsAction, logger, package_default, resolveCurrentOrg, switchOrgAction };
|
|
1321
|
-
//# sourceMappingURL=chunk-
|
|
1322
|
-
//# sourceMappingURL=chunk-
|
|
1323
|
+
//# sourceMappingURL=chunk-QXKEKQIM.js.map
|
|
1324
|
+
//# sourceMappingURL=chunk-QXKEKQIM.js.map
|