mastra 1.17.1-alpha.2 → 1.18.0-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 +28 -0
- package/dist/analytics/index.js +1 -1
- package/dist/{chunk-NGAJT6UU.js → chunk-3IE5RD25.js} +3 -5
- package/dist/chunk-3IE5RD25.js.map +1 -0
- package/dist/{chunk-3CZOUDHA.js → chunk-EWGNLUNU.js} +7 -4
- package/dist/chunk-EWGNLUNU.js.map +1 -0
- package/dist/commands/create/create.js +2 -2
- package/dist/commands/create/utils.d.ts.map +1 -1
- package/dist/commands/dev/DevBundler.d.ts.map +1 -1
- package/dist/commands/studio/studio.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 -0
- package/dist/docs/references/reference-mastra-platform-api.md +2 -0
- package/dist/index.js +24 -13
- package/dist/index.js.map +1 -1
- package/dist/services/service.deps.d.ts +0 -1
- package/dist/services/service.deps.d.ts.map +1 -1
- package/dist/studio/assets/{core-QCZ49Nb8.js → core-BmHvey77.js} +1 -1
- package/dist/studio/assets/{index-DYw7YJl_.js → index-DNCgs_Xt.js} +2 -2
- package/dist/studio/assets/{main-I19LYtBC.js → main-CgDS-TZ9.js} +236 -236
- package/dist/studio/assets/style-CrFUJQoS.css +1 -0
- package/dist/studio/index.html +5 -2
- package/package.json +6 -6
- package/dist/chunk-3CZOUDHA.js.map +0 -1
- package/dist/chunk-NGAJT6UU.js.map +0 -1
- package/dist/studio/assets/style-CgRW9NKo.css +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# mastra
|
|
2
2
|
|
|
3
|
+
## 1.18.0-alpha.3
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Hardened child-process invocations against shell command injection. Package installs and codemod runs now pass arguments as arrays instead of interpolating them into shell strings, the deployer's shared child-process logger rejects arguments containing shell metacharacters, and the login dialog validates auth URLs and opens the browser without a shell. As a side effect, `mastra codemod` now works on project paths containing spaces. ([#18804](https://github.com/mastra-ai/mastra/pull/18804))
|
|
8
|
+
|
|
9
|
+
- Fixed observability CLI commands (trace, log, score, metric) ignoring `--server-api-prefix` when `--url` is provided. Previously, all `/observability/` routes were unconditionally routed through the hosted observability endpoint, dropping the custom API prefix. Now, when `--url` is explicitly set, observability commands correctly use the provided URL and prefix, matching the behavior of agent, workflow, and thread commands. ([#18787](https://github.com/mastra-ai/mastra/pull/18787))
|
|
10
|
+
|
|
11
|
+
- Added minimumReleaseAgeExclude for mastra packages in CLI pnpm-workspace.yaml template to resolve pnpm v11 upgrade issues. ([#18779](https://github.com/mastra-ai/mastra/pull/18779))
|
|
12
|
+
|
|
13
|
+
- **Signals now show live Entity-Learning data** ([#18699](https://github.com/mastra-ai/mastra/pull/18699))
|
|
14
|
+
|
|
15
|
+
The Signals page is no longer static. Select an agent reported by the platform and Signals fetches that agent's signals and their clusters live from the Entity-Learning API, replacing the previous hardcoded mock data. Each available signal loads its real clusters (topics) and traces, with a scatter-plot chart for the selected topics.
|
|
16
|
+
|
|
17
|
+
**What changed**
|
|
18
|
+
- Added an agent filter at the top of the Signals page, mirroring the traces filter, so you can inspect signals for any agent on the server.
|
|
19
|
+
- The Signals overview and details pages now render live Entity-Learning topics, examples, and points directly, with shape-matching skeletons while data loads, centered empty states, and explicit error states.
|
|
20
|
+
- Clicking a cluster card opens its topic by default, and the Signals breadcrumbs preserve the selected entity and topic query params on back-navigation.
|
|
21
|
+
- Signals detail navigation keeps selected clusters, trace examples, and chart filters in sync when moving between signals or entities.
|
|
22
|
+
|
|
23
|
+
**Gating**
|
|
24
|
+
|
|
25
|
+
Studio's served HTML exposes `MASTRA_ORGANIZATION_ID`, `MASTRA_PLATFORM_PROJECT_ID`, and `MASTRA_PLATFORM_OBSERVABILITY_ENDPOINT` to the browser so the Signals page can call the Entity-Learning API. The route is gated on the platform observability config, and the `MASTRA_SIGNALS_UI` flag guards the sidebar Signals nav link.
|
|
26
|
+
|
|
27
|
+
- Updated dependencies [[`700619b`](https://github.com/mastra-ai/mastra/commit/700619b61d572e592cbaaf758121d168844ca4d2), [`d4c0641`](https://github.com/mastra-ai/mastra/commit/d4c06417e07513daad6ea9d22ef689ff5df73d83), [`0c3d4bc`](https://github.com/mastra-ai/mastra/commit/0c3d4bcae13ea3699d379403e6f350d5cf4efe9f), [`17369b2`](https://github.com/mastra-ai/mastra/commit/17369b25250561e9ed994ae509be1d15bfb33bcb), [`bcae929`](https://github.com/mastra-ai/mastra/commit/bcae929945cbf265bd9f327cc715ecafa072b5b9), [`b33822e`](https://github.com/mastra-ai/mastra/commit/b33822e8d470884954b02f7b0745407ee4ef74b1), [`5b1dcc5`](https://github.com/mastra-ai/mastra/commit/5b1dcc5899f672c6db141c85a8f59a4a11973034), [`d5c11e3`](https://github.com/mastra-ai/mastra/commit/d5c11e3ba5045969caa7272a7bd1fd141c93ab6c), [`ff80671`](https://github.com/mastra-ai/mastra/commit/ff8067185e208b27198b4e5b71803013175c3643), [`dab1257`](https://github.com/mastra-ai/mastra/commit/dab1257b64e4ed576dc5038bb7a3f7072338bc9f), [`705ff39`](https://github.com/mastra-ai/mastra/commit/705ff3969e57214ff2fdaf3815d751dd558886ed), [`e6fbd5b`](https://github.com/mastra-ai/mastra/commit/e6fbd5bfdc28e92c0c0433f29aa1bc152d3430f6), [`484d401`](https://github.com/mastra-ai/mastra/commit/484d40138383cb9eb629a02722e559c9b8157ee9), [`6f2026c`](https://github.com/mastra-ai/mastra/commit/6f2026cdf114ff1e21e49133ca774ec7d5085059), [`e8eee50`](https://github.com/mastra-ai/mastra/commit/e8eee5087937c9db1a57167119813861328e22ce), [`f890eda`](https://github.com/mastra-ai/mastra/commit/f890eda2c8a2ae83d9b30bc6d85842f93b6c266b)]:
|
|
28
|
+
- @mastra/core@1.49.0-alpha.3
|
|
29
|
+
- @mastra/deployer@1.49.0-alpha.3
|
|
30
|
+
|
|
3
31
|
## 1.17.1-alpha.2
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
package/dist/analytics/index.js
CHANGED
|
@@ -209,10 +209,8 @@ var DepsService = class {
|
|
|
209
209
|
async installPackages(packages) {
|
|
210
210
|
const pm = this.packageManager;
|
|
211
211
|
const installCommand = getPackageManagerAddCommand(pm);
|
|
212
|
-
|
|
213
|
-
return execa(`${pm} ${installCommand} ${packageList}`, {
|
|
212
|
+
return execa(pm, [...installCommand.split(" "), ...packages], {
|
|
214
213
|
all: true,
|
|
215
|
-
shell: true,
|
|
216
214
|
stdio: "pipe"
|
|
217
215
|
});
|
|
218
216
|
}
|
|
@@ -1648,5 +1646,5 @@ var PosthogAnalytics = class _PosthogAnalytics {
|
|
|
1648
1646
|
};
|
|
1649
1647
|
|
|
1650
1648
|
export { COMPONENTS, DepsService, FileService, LLMProvider, LLM_PROVIDERS, PosthogAnalytics, checkAndInstallCoreDeps, checkForPkgJson, createComponentsDir, createMastraDir, getAPIKey, getAnalytics, getModelIdentifier, getPackageManager, getPackageManagerAddCommand, getVersionTag, gitInit, installMastraDocsMCPServer, interactivePrompt, isGitInitialized, listOrgsAction, parseComponents, parseLlmProvider, parseMcp, parseSkills, readPackageName, resolveCurrentOrg, setAnalytics, shouldSkipDotenvLoading, switchOrgAction, writeAPIKey, writeAgentsMarkdown, writeClaudeMarkdown, writeCodeSample, writeIndexFile, writeObservabilityEnv };
|
|
1651
|
-
//# sourceMappingURL=chunk-
|
|
1652
|
-
//# sourceMappingURL=chunk-
|
|
1649
|
+
//# sourceMappingURL=chunk-3IE5RD25.js.map
|
|
1650
|
+
//# sourceMappingURL=chunk-3IE5RD25.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.file.ts","../src/commands/auth/orgs.ts","../src/commands/init/utils.ts","../src/commands/utils.ts","../src/analytics/index.ts"],"names":["hasMastraMCP","fs","path","fsPromises","fs2","p","fsExtra","confirm","fileURLToPath","execa","os","existsSync","config"],"mappings":"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","file":"chunk-3IE5RD25.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 // Pass arguments as an array (no shell) so package names can't be used\n // for command injection (CodeQL js/shell-command-constructed-from-input).\n return execa(pm, [...installCommand.split(' '), ...packages], {\n all: 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","import * as fs from 'node:fs/promises';\n\nexport abstract class EnvService {\n abstract getEnvValue(key: string): Promise<string | null>;\n abstract setEnvValue(key: string, value: string): Promise<void>;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n}\n\nexport class FileEnvService extends EnvService {\n private static readonly ENV_KEY_REGEX = /^[A-Za-z_][A-Za-z0-9_]*$/;\n\n private readonly filePath: string;\n\n private validateEnvEntry(key: string, value: string): void {\n if (!FileEnvService.ENV_KEY_REGEX.test(key)) {\n throw new Error(`Invalid ENV key: ${key}`);\n }\n if (/[\\r\\n]/.test(value)) {\n throw new Error(`Invalid ENV value for ${key}: multiline values are not supported.`);\n }\n }\n\n constructor(filePath: string) {\n super();\n this.filePath = filePath;\n }\n\n private envLineRegex(key: string, captureValue = false): RegExp {\n const pattern = captureValue ? `^${escapeRegExp(key)}=(.*)$` : `^${escapeRegExp(key)}=.*$`;\n return new RegExp(pattern, 'm');\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 this.validateEnvEntry(key, value);\n\n const lineRegex = this.envLineRegex(key);\n const updated = lineRegex.test(data)\n ? data.replace(lineRegex, () => `${key}=${value}`)\n : `${data}\\n${key}=${value}`;\n\n await fs.writeFile(filePath, updated, 'utf8');\n console.info(`${key} set in ENV file.`);\n return updated;\n }\n\n async getEnvValue(key: string): Promise<string | null> {\n try {\n const data = await fs.readFile(this.filePath, 'utf8');\n const match = data.match(this.envLineRegex(key, true));\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 fs.readFile(this.filePath, 'utf8');\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.env';\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 * as p from '@clack/prompts';\nimport { fetchOrgs } from './api.js';\nimport { getToken, getCurrentOrgId, setCurrentOrgId } from './credentials.js';\n\nexport interface ResolveCurrentOrgOptions {\n /**\n * If true and the user belongs to multiple orgs, always show the picker\n * (with the persisted current org pre-selected) instead of silently\n * reusing the persisted choice. Useful for \"create a new project\"-style\n * flows where the user should consciously choose the target org.\n *\n * Ignored if MASTRA_ORG_ID is set or the user only belongs to one org.\n */\n forcePrompt?: boolean;\n}\n\nfunction isInteractive(): boolean {\n return Boolean(process.stdin.isTTY && process.stdout.isTTY) && !process.env.CI;\n}\n\n/**\n * Resolve the current org, auto-selecting if only one exists.\n * If multiple orgs exist and none is currently set, prompts the user.\n * Pass `{ forcePrompt: true }` to always prompt when there's more than one\n * org, even if a current org is persisted. In non-interactive environments,\n * a persisted current org is reused and otherwise a clear setup error is\n * thrown instead of starting a prompt that cannot be answered.\n */\nexport async function resolveCurrentOrg(\n token: string,\n opts: ResolveCurrentOrgOptions = {},\n): Promise<{ orgId: string; orgName: string }> {\n const orgs = await fetchOrgs(token);\n\n if (orgs.length === 0) {\n throw new Error('No organizations found.');\n }\n\n if (orgs.length === 1) {\n return { orgId: orgs[0]!.id, orgName: orgs[0]!.name };\n }\n\n // MASTRA_ORG_ID always wins; never prompt in headless/CI mode.\n const envOrgId = process.env.MASTRA_ORG_ID;\n if (envOrgId) {\n const match = orgs.find(o => o.id === envOrgId);\n if (match) return { orgId: match.id, orgName: match.name };\n }\n\n const currentOrgId = await getCurrentOrgId();\n\n if (currentOrgId && (!opts.forcePrompt || !isInteractive())) {\n const match = orgs.find(o => o.id === currentOrgId);\n if (match) return { orgId: match.id, orgName: match.name };\n }\n\n if (!isInteractive()) {\n throw new Error('Multiple organizations found. Run `mastra auth orgs switch` interactively or set MASTRA_ORG_ID.');\n }\n\n const selected = await p.select({\n message: 'Select an organization',\n initialValue: currentOrgId ?? undefined,\n options: orgs.map(o => ({\n value: o.id,\n label: `${o.name}${o.id === currentOrgId ? ' (current)' : ''}`,\n hint: o.id,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel('Cancelled.');\n process.exit(0);\n }\n\n const org = orgs.find(o => o.id === selected)!;\n\n // Persist the choice so subsequent CLI commands stay in the same org.\n if (org.id !== currentOrgId) {\n await setCurrentOrgId(org.id);\n }\n\n return { orgId: org.id, orgName: org.name };\n}\n\nexport async function listOrgsAction() {\n const token = await getToken();\n const currentOrgId = await getCurrentOrgId();\n const orgs = await fetchOrgs(token);\n\n if (orgs.length === 0) {\n console.info('\\nNo organizations found.\\n');\n return;\n }\n\n console.info('\\nOrganizations:\\n');\n for (const org of orgs) {\n const marker = org.id === currentOrgId ? ' (current)' : '';\n const role = org.role ? ` [${org.role}]` : '';\n console.info(` ${org.name}${role}${marker}`);\n console.info(` ID: ${org.id}`);\n }\n console.info('');\n}\n\nexport async function switchOrgAction() {\n if (process.env.MASTRA_API_TOKEN) {\n console.error('\\nCannot switch org when using MASTRA_API_TOKEN. Unset it and log in with: mastra auth login\\n');\n process.exit(1);\n }\n if (process.env.MASTRA_ORG_ID) {\n console.error('\\nCannot switch org when MASTRA_ORG_ID is set. Unset it to use persistent org selection.\\n');\n process.exit(1);\n }\n\n const token = await getToken();\n const currentOrgId = await getCurrentOrgId();\n const orgs = await fetchOrgs(token);\n\n if (orgs.length === 0) {\n console.info('\\nNo organizations found.\\n');\n return;\n }\n\n if (orgs.length === 1) {\n console.info(`\\nYou only have one organization: ${orgs[0]!.name}\\n`);\n return;\n }\n\n const selected = await p.select({\n message: 'Switch to organization',\n options: orgs.map(o => ({\n value: o.id,\n label: `${o.name}${o.id === currentOrgId ? ' (current)' : ''}`,\n })),\n });\n\n if (p.isCancel(selected)) {\n p.cancel('Cancelled.');\n process.exit(0);\n }\n\n await setCurrentOrgId(selected as string);\n const org = orgs.find(o => o.id === selected)!;\n console.info(`\\nSwitched to ${org.name} (${org.id})\\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 { resolveCurrentOrg } from '../auth/orgs.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 orgId?: string;\n orgName?: 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 const org = await resolveCurrentOrg(token, { forcePrompt: true });\n return { enabled: true, token, orgId: org.orgId, orgName: org.orgName };\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_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 observabilityOrgId: observability?.orgId,\n observabilityOrgName: observability?.orgName,\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`;\n\n // Add critical Mastra skill section if skills were installed\n if (hasSkills) {\n content += `\n## CRITICAL: Load \\`mastra\\` skill first\n\nLoad the \\`mastra\\` skill BEFORE any Mastra work. Never rely on cached knowledge — APIs change between versions.\n`;\n }\n\n content += `\n## Rules\n\n- Register all agents, tools, workflows, and scorers in \\`src/mastra/index.ts\\`\n- Use the \\`dev\\` and \\`build\\` scripts from \\`package.json\\` instead of running \\`mastra dev\\` / \\`mastra build\\` directly\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\nMastra MCP Docs Server is configured for ${editorName}. Restart your editor to load it.\n`;\n }\n\n // Add resources section\n content += `\n## Resources\n\n- [Mastra Documentation](https://mastra.ai/llms.txt)\n- [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, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { PostHog } from 'posthog-node';\nimport { getPackageManager } from '../commands/utils.js';\n\nconst ANALYTICS_CONFIG_PATH = path.join(os.homedir(), '.mastra', 'analytics.json');\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\n if (!PosthogAnalytics.isTelemetryEnabled()) {\n return;\n }\n\n this.packageManager = getPackageManager();\n const { distinctId, sessionId } = this.getOrCreateAnalyticsConfig();\n this.distinctId = distinctId;\n this.sessionId = sessionId;\n\n this.initializePostHog(apiKey, host);\n }\n\n private getOrCreateAnalyticsConfig(configPath = ANALYTICS_CONFIG_PATH): { distinctId: string; sessionId: string } {\n try {\n if (existsSync(configPath)) {\n const { distinctId, sessionId } = JSON.parse(readFileSync(configPath, 'utf-8')) as {\n distinctId?: string;\n sessionId?: string;\n };\n if (distinctId && !this.isHostnameDerivedDistinctId(distinctId)) {\n const config = {\n distinctId,\n sessionId: sessionId || randomUUID(),\n };\n if (config.sessionId !== sessionId) {\n this.writeCliConfig(config, configPath);\n }\n return config;\n }\n }\n } catch {\n // regenerate below\n }\n\n const config = {\n distinctId: this.createDistinctId(),\n sessionId: randomUUID(),\n };\n this.writeCliConfig(config, configPath);\n return config;\n }\n\n private writeCliConfig(\n { distinctId, sessionId }: { distinctId: string; sessionId: string },\n configPath = ANALYTICS_CONFIG_PATH,\n ): void {\n try {\n mkdirSync(path.dirname(configPath), { recursive: true });\n writeFileSync(configPath, 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 static isTelemetryEnabled(): boolean {\n const value = process.env.MASTRA_TELEMETRY_DISABLED;\n if (value && ['1', 'true', 'yes'].includes(value.trim().toLowerCase())) {\n return false;\n }\n return true;\n }\n\n private createDistinctId(): string {\n return `mastra-${randomUUID()}`;\n }\n\n private isHostnameDerivedDistinctId(distinctId: string): boolean {\n return distinctId === `mastra-${os.hostname()}`;\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 getDistinctId(): string {\n return this.distinctId;\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, resolveCurrentOrg, 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, resolveCurrentOrg, isGitInitialized, interactivePrompt, getPackageManagerAddCommand, getModelIdentifier } from './chunk-3IE5RD25.js';
|
|
2
2
|
import { getToken } from './chunk-EXG3XKBK.js';
|
|
3
3
|
import { MASTRA_PLATFORM_API_URL, platformFetch, authHeaders } from './chunk-L2SGSIJI.js';
|
|
4
4
|
import fsSync from 'fs';
|
|
@@ -16,7 +16,7 @@ import { execa } from 'execa';
|
|
|
16
16
|
// package.json
|
|
17
17
|
var package_default = {
|
|
18
18
|
name: "mastra",
|
|
19
|
-
version: "1.
|
|
19
|
+
version: "1.18.0-alpha.3",
|
|
20
20
|
license: "Apache-2.0",
|
|
21
21
|
description: "cli for mastra",
|
|
22
22
|
type: "module",
|
|
@@ -847,6 +847,9 @@ var createMastraProject = async ({
|
|
|
847
847
|
"pnpm-workspace.yaml",
|
|
848
848
|
`packages:
|
|
849
849
|
- '.'
|
|
850
|
+
minimumReleaseAgeExclude:
|
|
851
|
+
- mastra
|
|
852
|
+
- "@mastra/*"
|
|
850
853
|
allowBuilds:
|
|
851
854
|
esbuild: true
|
|
852
855
|
sharp: true
|
|
@@ -1254,5 +1257,5 @@ async function createFromTemplate(args) {
|
|
|
1254
1257
|
}
|
|
1255
1258
|
|
|
1256
1259
|
export { create, createLogger, init, logger, package_default };
|
|
1257
|
-
//# sourceMappingURL=chunk-
|
|
1258
|
-
//# sourceMappingURL=chunk-
|
|
1260
|
+
//# sourceMappingURL=chunk-EWGNLUNU.js.map
|
|
1261
|
+
//# sourceMappingURL=chunk-EWGNLUNU.js.map
|