mastra 1.19.0-alpha.9 → 1.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +144 -0
- package/dist/analytics/index.js +1 -1
- package/dist/{chunk-5KEAONB6.js → chunk-I3ZAXMFJ.js} +6 -3
- package/dist/chunk-I3ZAXMFJ.js.map +1 -0
- package/dist/{chunk-QEEPVJW3.js → chunk-P6DWHJ3B.js} +6 -6
- package/dist/chunk-P6DWHJ3B.js.map +1 -0
- package/dist/commands/api/route-metadata.generated.d.ts +1 -1
- package/dist/commands/api/route-metadata.generated.d.ts.map +1 -1
- package/dist/commands/create/create.js +2 -2
- package/dist/commands/init/utils.d.ts.map +1 -1
- package/dist/docs/SKILL.md +1 -1
- package/dist/docs/assets/SOURCE_MAP.json +4 -4
- package/dist/index.js +5 -4
- package/dist/index.js.map +1 -1
- package/dist/studio/assets/{core-C2MMfFjv.js → core-rJnGu7dN.js} +1 -1
- package/dist/studio/assets/{index-zoaK3xyk.js → index-B9ZrQ3WU.js} +2 -2
- package/dist/studio/assets/{main-csjBuNTU.js → main-BMJMT8I-.js} +195 -195
- package/dist/studio/assets/{style-0PPJ5riO.css → style-BOO55eNy.css} +1 -1
- package/dist/studio/index.html +2 -2
- package/package.json +9 -9
- package/dist/chunk-5KEAONB6.js.map +0 -1
- package/dist/chunk-QEEPVJW3.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,149 @@
|
|
|
1
1
|
# mastra
|
|
2
2
|
|
|
3
|
+
## 1.19.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Added CLI commands to manage platform databases, environments, and deploys without leaving the terminal. ([#19199](https://github.com/mastra-ai/mastra/pull/19199))
|
|
8
|
+
|
|
9
|
+
The project is resolved automatically from `MASTRA_PROJECT_ID`, the `--project <name|slug|id>` flag, or the `.mastra-project.json` written by `mastra deploy` — run the commands from your project directory and you never need to name the project.
|
|
10
|
+
|
|
11
|
+
**Databases**
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
mastra env db list # kind, status, scope, injected env var names
|
|
15
|
+
mastra env db list staging # only databases feeding one environment
|
|
16
|
+
mastra env db create --kind turso # shared by all environments, polls until ready
|
|
17
|
+
mastra env db create staging --kind turso # scoped to one environment
|
|
18
|
+
mastra env db show <database> # detail + connection env vars (secrets masked)
|
|
19
|
+
mastra env db detach <database> # confirm prompt, admin only
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
`env db list` shows the attachment mapping: shared (project-scoped) databases feed all environments, environment-scoped databases feed only their environment. Provisioning failures are surfaced with the provider error instead of being swallowed.
|
|
23
|
+
|
|
24
|
+
**Environments and deploys**
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
mastra env list # now shows latest deploy status + managed env var names
|
|
28
|
+
mastra env create staging # explicit environment creation
|
|
29
|
+
mastra env restart <env> # push saved env vars and restart the running service
|
|
30
|
+
mastra env deploys # all deploys across environments, active marker
|
|
31
|
+
mastra env deploys staging # only one environment's deploys
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Breaking change to the existing `mastra env` commands: the `<project>` positional argument is replaced by the resolution above (`mastra env list <project>` → `mastra env list --project <project>`), and `mastra env create <project> -n <name>` is now `mastra env create <name>`.
|
|
35
|
+
|
|
36
|
+
- Added `mastra env vars pull [environment]` to download the full set of env vars an environment actually deploys with — vars stored on the environment (for example, added in the dashboard's environment editor) merged with project-level vars. Managed vars from attached databases are listed as comments (names only) since their values are platform-managed secrets. ([#19400](https://github.com/mastra-ai/mastra/pull/19400))
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
mastra env vars pull staging --output .env.staging
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Previously the only pull command, `mastra server env pull`, silently read project-level vars only, so vars added through the dashboard were missing from the pulled file. That command now prints a note about its scope and points to `mastra env vars pull`.
|
|
43
|
+
|
|
44
|
+
### Patch Changes
|
|
45
|
+
|
|
46
|
+
- Added an optional session scope to the agent controller API so clients can address independent sessions that share one resource (for example one session per git worktree). ([#19357](https://github.com/mastra-ai/mastra/pull/19357))
|
|
47
|
+
|
|
48
|
+
Session routes now accept a `sessionScope` query parameter, and `AgentController.session()` in the client accepts a scope that travels on every request:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
const controller = client.getAgentController('code');
|
|
52
|
+
|
|
53
|
+
// Address the worktree's own session instead of the shared one:
|
|
54
|
+
const session = controller.session('repo-123', '/worktrees/feature-a');
|
|
55
|
+
await session.create({ tags: { projectPath: '/worktrees/feature-a' } });
|
|
56
|
+
await session.sendMessage('hello');
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Requests without a scope behave exactly as before.
|
|
60
|
+
|
|
61
|
+
- Added image attachment support to agent controller chat. You can now send images (and other files) with a message, and the Mastra Code web chat lets you attach, paste, or drag-and-drop images which render inline in the transcript. ([#19368](https://github.com/mastra-ai/mastra/pull/19368))
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
await session.sendMessage({
|
|
65
|
+
content: 'What is in this screenshot?',
|
|
66
|
+
files: [{ data: base64Png, mediaType: 'image/png', filename: 'screenshot.png' }],
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
- Rename `mastra env db detach` to `mastra env db delete` and make the confirmation prompt state that the database and all of its data are permanently deleted with the provider. The old name described a non-destructive unlink, but the operation deprovisions the Turso/Neon database — data included. The `detach` name is reserved for a future true non-destructive detach. ([#19402](https://github.com/mastra-ai/mastra/pull/19402))
|
|
71
|
+
|
|
72
|
+
- Fixed .env file changes not triggering dev server reload by resolving env file paths to absolute paths before passing them to Rollup's file watcher ([#19051](https://github.com/mastra-ai/mastra/pull/19051))
|
|
73
|
+
|
|
74
|
+
- Fix file-based agent `instructions.md` hot reload in dev. ([#19359](https://github.com/mastra-ai/mastra/pull/19359))
|
|
75
|
+
|
|
76
|
+
- Fixed the default project scaffold failing the deploy preflight check. New projects now read the database URL from TURSO_DATABASE_URL when it is set (for example from a hosted database created with `mastra env db create`) and fall back to a local file during development, so the first `mastra deploy` is no longer blocked by a local storage path error. ([#19395](https://github.com/mastra-ai/mastra/pull/19395))
|
|
77
|
+
|
|
78
|
+
- Fixed `mastra deploy` preflight blocking deploys that are actually fine: ([#19071](https://github.com/mastra-ai/mastra/pull/19071))
|
|
79
|
+
|
|
80
|
+
**Env-guarded storage fallbacks** — code like `process.env.TURSO_DATABASE_URL || "file:./.mastra-demo.db"` no longer hard-errors when the environment variable is provided for the deploy. If the variable is missing from your env file you still get an error, and if no env file is available you get a warning instead.
|
|
81
|
+
|
|
82
|
+
**Library env-var false positives** — the missing environment variable check now only looks at variables your own code references, so variables read by bundled Mastra packages (like `AUTO_BLOCK_EXTERNAL_PROVIDERS`) no longer show up as warnings. They are listed as info instead.
|
|
83
|
+
|
|
84
|
+
**Platform-stored env vars** — `mastra deploy` and `mastra server deploy` preflight now merge the env vars already stored on the target environment / server project under your local env file (local wins, mirroring the platform's deploy-time merge). Vars stored only on the platform no longer trigger `MISSING_ENV_VAR` or `LOCAL_STORAGE_PATH` alarms.
|
|
85
|
+
|
|
86
|
+
**Platform-injected guards** — storage fallbacks guarded by variables the platform sets automatically (like `MASTRA_STORAGE_URL` on Mastra Cloud) are trusted and never flagged.
|
|
87
|
+
|
|
88
|
+
These deploys previously required `--skip-preflight` to get through.
|
|
89
|
+
|
|
90
|
+
- `mastra server deploy` and `mastra studio deploy` no longer fail with "No env file found for deploy" when the project has no `.env*` file (e.g. in CI). Like `mastra deploy`, they now proceed without uploading env vars so the vars stored on the platform are used, and preflight reports unverifiable env-guarded paths as warnings instead of errors. ([#19082](https://github.com/mastra-ai/mastra/pull/19082))
|
|
91
|
+
|
|
92
|
+
- Added run activity reporting to agent controller sessions. `session.state()` responses include a `running` flag so UIs can show a working indicator immediately when attaching to a session that is already mid-run, and each thread returned by `session.listThreads()` carries a `state` of `'active'` or `'idle'` (backed by the same per-thread run tracking that signal `ifIdle` delivery uses), so one listing can power activity indicators across every worktree or scope sharing a resource instead of polling each session: ([#19357](https://github.com/mastra-ai/mastra/pull/19357))
|
|
93
|
+
|
|
94
|
+
```ts
|
|
95
|
+
const session = client.getAgentController('code').session(resourceId);
|
|
96
|
+
|
|
97
|
+
const { running } = await session.state(); // is the session mid-run?
|
|
98
|
+
|
|
99
|
+
const threads = await session.listThreads({ tags: { projectPath } });
|
|
100
|
+
const busy = threads.filter(thread => thread.state === 'active');
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
- Fix three deploy/env usability papercuts: `mastra deploy staging` now fails fast with "Did you mean: mastra deploy --env staging" instead of silently deploying to production, the preflight block message names the exact unblock command (`mastra env db create --kind turso`/`neon` based on the missing variable), and 400 validation errors now show the field name and valid options instead of a bare "invalid fields". ([#19403](https://github.com/mastra-ai/mastra/pull/19403))
|
|
104
|
+
|
|
105
|
+
- Updated dependencies [[`bd6d240`](https://github.com/mastra-ai/mastra/commit/bd6d2402db93dddaef0721667e7e8a030e7c6e16), [`0111486`](https://github.com/mastra-ai/mastra/commit/01114867612593eef5cfa2fda6a1194dfedda841), [`96a3749`](https://github.com/mastra-ai/mastra/commit/96a37492235f5b8076b3e3177d83ed5a5e44a640), [`fe1bda0`](https://github.com/mastra-ai/mastra/commit/fe1bda06f6af92a694a51712db747cda1e7185f0), [`25e7c12`](https://github.com/mastra-ai/mastra/commit/25e7c126a770069ae7fb7ecf1d2adb40e017b009), [`1ce5121`](https://github.com/mastra-ai/mastra/commit/1ce512155d122bb21f47d98383e82ffbf84b39e8), [`fb8aea3`](https://github.com/mastra-ai/mastra/commit/fb8aea384291e77311be3a64ee1717320d5c3c73), [`4adc391`](https://github.com/mastra-ai/mastra/commit/4adc3911075249c352bb4832d2471922826344de), [`a5c6337`](https://github.com/mastra-ai/mastra/commit/a5c6337d23c7686c81a32ce62f550f610543a240), [`3cfc47a`](https://github.com/mastra-ai/mastra/commit/3cfc47a6b89940aadd0f46fb01ae9624a73a865d), [`2bb7817`](https://github.com/mastra-ai/mastra/commit/2bb78176112fde628483de2830528f7eee911e56), [`51d9870`](https://github.com/mastra-ai/mastra/commit/51d987032c689c2855374d0f244f5d654da809d1), [`5cab274`](https://github.com/mastra-ai/mastra/commit/5cab2744250e22d12fefa7b32637dce224233cee), [`7fa27d3`](https://github.com/mastra-ai/mastra/commit/7fa27d3b6f5ed68cd34e454a4d3ad9c482a0cfbc), [`8b97958`](https://github.com/mastra-ai/mastra/commit/8b979589f9aa59ba67cac565949475f2ffeb4ac3), [`8410541`](https://github.com/mastra-ai/mastra/commit/84105412c60ecd3bb33a9838146f59c4b588228f), [`a58dcbb`](https://github.com/mastra-ai/mastra/commit/a58dcbb546d7e1d65ebdc1f39e55f0908fcd9391), [`aa38805`](https://github.com/mastra-ai/mastra/commit/aa38805b878b827403be785eb90688d7172f5a40), [`153bd3b`](https://github.com/mastra-ai/mastra/commit/153bd3b396bdfed6b74cf43de12db8fd2d83c04a), [`45a8e65`](https://github.com/mastra-ai/mastra/commit/45a8e65e1556d1362cb3f25187023c36de26661d), [`e955965`](https://github.com/mastra-ai/mastra/commit/e955965dce575a903e37cf054d28ea99aa48785e), [`2d22570`](https://github.com/mastra-ai/mastra/commit/2d22570c7dfdd02123d0ecc529efb05ccba2d9fc), [`07bb863`](https://github.com/mastra-ai/mastra/commit/07bb8631919c6f7cf377dccd45b096e0f17fbed0), [`c8ed116`](https://github.com/mastra-ai/mastra/commit/c8ed11699f62bcac70102ab4ec84d80d20541da6), [`01b338c`](https://github.com/mastra-ai/mastra/commit/01b338c56271f0219606710e3e8b26dee27ac6c2), [`a99eae8`](https://github.com/mastra-ai/mastra/commit/a99eae8908e500c1b2d12f9d277be616b98617a5), [`860ef7e`](https://github.com/mastra-ai/mastra/commit/860ef7e77d92b63469cbe5857aa1e626197e43e9), [`17e818c`](https://github.com/mastra-ai/mastra/commit/17e818c51a958ba90641b1a959dc38faf8c034e9), [`edce8d2`](https://github.com/mastra-ai/mastra/commit/edce8d2769f19e27a05737c627af2d765472a4f8), [`8a586ec`](https://github.com/mastra-ai/mastra/commit/8a586eca9a4914f31dff6140d0d45ac375b00669), [`4451dfe`](https://github.com/mastra-ai/mastra/commit/4451dfe857428e7abcc0261a507a2e186dae6d47), [`8b7361d`](https://github.com/mastra-ai/mastra/commit/8b7361d35de68b80d05d30a74e0c69e7218fd612), [`1d39058`](https://github.com/mastra-ai/mastra/commit/1d39058e548efd691799985d5c8af2737f1c3bd2), [`3927473`](https://github.com/mastra-ai/mastra/commit/392747323ddb10c643d12be7b9ae913159dfaeed), [`dce50dc`](https://github.com/mastra-ai/mastra/commit/dce50dc9a1c1fcd0f427bb5f6250ec74910cb04b), [`19ac158`](https://github.com/mastra-ai/mastra/commit/19ac158584b34b3ff3e3e6f7ad640c8cb65e30f5), [`fd13f8e`](https://github.com/mastra-ai/mastra/commit/fd13f8e21990f9904c3eedba3a626bb4a929cdb8), [`634caff`](https://github.com/mastra-ai/mastra/commit/634caff29a9200ad058b67d53f96d9e5832fb8a2), [`f703f87`](https://github.com/mastra-ai/mastra/commit/f703f878de072d51fda557f9c50867d8252bef05), [`3e26c87`](https://github.com/mastra-ai/mastra/commit/3e26c87de0c5bc2583b795ce6ca5889b6b161acb), [`33f2b88`](https://github.com/mastra-ai/mastra/commit/33f2b88842c09a567f906fac4cb61cd5277ced59), [`177010f`](https://github.com/mastra-ai/mastra/commit/177010ff096d2e4b28d89803be5b1a4cad2a0d6b), [`0ad646f`](https://github.com/mastra-ai/mastra/commit/0ad646f71a530f2454664299e5e01bfd13fa12e5), [`b486abf`](https://github.com/mastra-ai/mastra/commit/b486abfa2a7528c6f527e4015c819ea9fa54aaad), [`54a51e0`](https://github.com/mastra-ai/mastra/commit/54a51e0a484fe1ebad3fb1f7ef5282a075709eb7), [`c43f3a9`](https://github.com/mastra-ai/mastra/commit/c43f3a9d1efde99b38789364ba4d0ba670f430e3), [`a5008f2`](https://github.com/mastra-ai/mastra/commit/a5008f22ae710ad9402ea9f2547d8c02f74d384b), [`e2d5f37`](https://github.com/mastra-ai/mastra/commit/e2d5f373bd289be534d5f8694d34465010533df6), [`19ac158`](https://github.com/mastra-ai/mastra/commit/19ac158584b34b3ff3e3e6f7ad640c8cb65e30f5), [`4ce0163`](https://github.com/mastra-ai/mastra/commit/4ce0163dc86e675a86809685c8ce6c49f1aeb87e), [`4378341`](https://github.com/mastra-ai/mastra/commit/43783412df5ea3dd35f5b1f6e4851e79c346fc89)]:
|
|
106
|
+
- @mastra/core@1.51.0
|
|
107
|
+
- @mastra/deployer@1.51.0
|
|
108
|
+
|
|
109
|
+
## 1.19.0-alpha.14
|
|
110
|
+
|
|
111
|
+
### Patch Changes
|
|
112
|
+
|
|
113
|
+
- Updated dependencies [[`a99eae8`](https://github.com/mastra-ai/mastra/commit/a99eae8908e500c1b2d12f9d277be616b98617a5), [`fd13f8e`](https://github.com/mastra-ai/mastra/commit/fd13f8e21990f9904c3eedba3a626bb4a929cdb8), [`f703f87`](https://github.com/mastra-ai/mastra/commit/f703f878de072d51fda557f9c50867d8252bef05), [`0ad646f`](https://github.com/mastra-ai/mastra/commit/0ad646f71a530f2454664299e5e01bfd13fa12e5)]:
|
|
114
|
+
- @mastra/core@1.51.0-alpha.13
|
|
115
|
+
- @mastra/deployer@1.51.0-alpha.13
|
|
116
|
+
|
|
117
|
+
## 1.19.0-alpha.13
|
|
118
|
+
|
|
119
|
+
### Patch Changes
|
|
120
|
+
|
|
121
|
+
- Updated dependencies [[`aa38805`](https://github.com/mastra-ai/mastra/commit/aa38805b878b827403be785eb90688d7172f5a40), [`2d22570`](https://github.com/mastra-ai/mastra/commit/2d22570c7dfdd02123d0ecc529efb05ccba2d9fc), [`4378341`](https://github.com/mastra-ai/mastra/commit/43783412df5ea3dd35f5b1f6e4851e79c346fc89)]:
|
|
122
|
+
- @mastra/core@1.51.0-alpha.12
|
|
123
|
+
- @mastra/deployer@1.51.0-alpha.12
|
|
124
|
+
|
|
125
|
+
## 1.19.0-alpha.12
|
|
126
|
+
|
|
127
|
+
### Patch Changes
|
|
128
|
+
|
|
129
|
+
- Updated dependencies [[`45a8e65`](https://github.com/mastra-ai/mastra/commit/45a8e65e1556d1362cb3f25187023c36de26661d), [`c8ed116`](https://github.com/mastra-ai/mastra/commit/c8ed11699f62bcac70102ab4ec84d80d20541da6), [`33f2b88`](https://github.com/mastra-ai/mastra/commit/33f2b88842c09a567f906fac4cb61cd5277ced59)]:
|
|
130
|
+
- @mastra/core@1.51.0-alpha.11
|
|
131
|
+
- @mastra/deployer@1.51.0-alpha.11
|
|
132
|
+
|
|
133
|
+
## 1.19.0-alpha.11
|
|
134
|
+
|
|
135
|
+
### Patch Changes
|
|
136
|
+
|
|
137
|
+
- Updated dependencies [[`4adc391`](https://github.com/mastra-ai/mastra/commit/4adc3911075249c352bb4832d2471922826344de), [`b486abf`](https://github.com/mastra-ai/mastra/commit/b486abfa2a7528c6f527e4015c819ea9fa54aaad)]:
|
|
138
|
+
- @mastra/core@1.51.0-alpha.10
|
|
139
|
+
- @mastra/deployer@1.51.0-alpha.10
|
|
140
|
+
|
|
141
|
+
## 1.19.0-alpha.10
|
|
142
|
+
|
|
143
|
+
### Patch Changes
|
|
144
|
+
|
|
145
|
+
- Fixed the default project scaffold failing the deploy preflight check. New projects now read the database URL from TURSO_DATABASE_URL when it is set (for example from a hosted database created with `mastra env db create`) and fall back to a local file during development, so the first `mastra deploy` is no longer blocked by a local storage path error. ([#19395](https://github.com/mastra-ai/mastra/pull/19395))
|
|
146
|
+
|
|
3
147
|
## 1.19.0-alpha.9
|
|
4
148
|
|
|
5
149
|
### Minor Changes
|
package/dist/analytics/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { PosthogAnalytics, bucketApiHost, getAnalytics, setAnalytics } from '../chunk-
|
|
1
|
+
export { PosthogAnalytics, bucketApiHost, getAnalytics, setAnalytics } from '../chunk-I3ZAXMFJ.js';
|
|
2
2
|
import '../chunk-EGDDF6K2.js';
|
|
3
3
|
import '../chunk-YWEV457P.js';
|
|
4
4
|
import '../chunk-DBERXPFF.js';
|
|
@@ -919,7 +919,10 @@ export const mastra = new Mastra({
|
|
|
919
919
|
id: 'composite-storage',
|
|
920
920
|
default: new LibSQLStore({
|
|
921
921
|
id: "mastra-storage",
|
|
922
|
-
|
|
922
|
+
// Uses a hosted database when deployed (mastra env db create --kind turso),
|
|
923
|
+
// and a local file during development.
|
|
924
|
+
url: process.env.TURSO_DATABASE_URL ?? "file:./mastra.db",
|
|
925
|
+
authToken: process.env.TURSO_AUTH_TOKEN,
|
|
923
926
|
}),
|
|
924
927
|
domains: {
|
|
925
928
|
observability: await new DuckDBStore().getStore('observability'),
|
|
@@ -1669,5 +1672,5 @@ var PosthogAnalytics = class _PosthogAnalytics {
|
|
|
1669
1672
|
};
|
|
1670
1673
|
|
|
1671
1674
|
export { COMPONENTS, DepsService, FileService, LLMProvider, LLM_PROVIDERS, PosthogAnalytics, bucketApiHost, checkAndInstallCoreDeps, checkForPkgJson, createComponentsDir, createMastraDir, getAPIKey, getAnalytics, getModelIdentifier, getPackageManager, getPackageManagerAddCommand, getVersionTag, gitInit, installMastraDocsMCPServer, interactivePrompt, isGitInitialized, listOrgsAction, parseComponents, parseLlmProvider, parseMcp, parseSkills, readPackageName, resolveCurrentOrg, setAnalytics, shouldSkipDotenvLoading, switchOrgAction, wrapAction, writeAPIKey, writeAgentsMarkdown, writeClaudeMarkdown, writeCodeSample, writeIndexFile, writeObservabilityEnv };
|
|
1672
|
-
//# sourceMappingURL=chunk-
|
|
1673
|
-
//# sourceMappingURL=chunk-
|
|
1675
|
+
//# sourceMappingURL=chunk-I3ZAXMFJ.js.map
|
|
1676
|
+
//# sourceMappingURL=chunk-I3ZAXMFJ.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-I3ZAXMFJ.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 showInstructions: false,\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 // Uses a hosted database when deployed (mastra env db create --kind turso),\n // and a local file during development.\n url: process.env.TURSO_DATABASE_URL ?? \"file:./mastra.db\",\n authToken: process.env.TURSO_AUTH_TOKEN,\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 model provider:',\n options: LLM_PROVIDERS,\n showInstructions: false,\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 showInstructions: false,\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: `Select tooling for your coding assistant:`,\n options: [\n { value: 'skills', label: 'Skills', hint: 'recommended' },\n { value: 'mcp', label: 'MCP Docs Server' },\n ],\n initialValue: 'skills',\n showInstructions: false,\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 coding assistant:`,\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 coding assistant:`,\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: `Select your coding assistant:`,\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\n/**\n * Wrap an async commander action so failures print a clean error message\n * (never a stack trace) and exit non-zero.\n */\nexport function wrapAction(fn: (...args: any[]) => Promise<void>): (...args: any[]) => void {\n return (...args: any[]) => {\n fn(...args).catch((err: Error) => {\n console.error(`Error: ${err.message}`);\n process.exit(1);\n });\n };\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\n/**\n * Bucket the Mastra platform API host into coarse labels for analytics.\n *\n * We report the *category* of API surface a deploy is talking to (cloud,\n * staging, localhost, custom, unknown) rather than the raw host, so\n * self-hosted or internal domains are never leaked to telemetry.\n */\nexport function bucketApiHost(apiUrl: string): 'cloud' | 'staging' | 'localhost' | 'custom' | 'unknown' {\n try {\n const { host, hostname } = new URL(apiUrl);\n if (hostname === 'localhost' || hostname === '127.0.0.1') return 'localhost';\n if (host === 'staging.mastra.cloud' || host.endsWith('.staging.mastra.cloud')) return 'staging';\n if (host === 'platform.mastra.ai' || host === 'mastra.cloud' || host.endsWith('.mastra.cloud')) return 'cloud';\n return 'custom';\n } catch {\n return 'unknown';\n }\n}\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-I3ZAXMFJ.js';
|
|
2
2
|
import { getToken } from './chunk-YWEV457P.js';
|
|
3
3
|
import { MASTRA_PLATFORM_API_URL, platformFetch, authHeaders } from './chunk-DBERXPFF.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.0
|
|
19
|
+
version: "1.19.0",
|
|
20
20
|
license: "Apache-2.0",
|
|
21
21
|
description: "cli for mastra",
|
|
22
22
|
type: "module",
|
|
@@ -98,7 +98,7 @@ var package_default = {
|
|
|
98
98
|
"@mastra/core": "workspace:*",
|
|
99
99
|
"@types/archiver": "^8.0.0",
|
|
100
100
|
"@types/fs-extra": "^11.0.4",
|
|
101
|
-
"@types/node": "22.
|
|
101
|
+
"@types/node": "22.20.1",
|
|
102
102
|
"@types/semver": "^7.7.1",
|
|
103
103
|
"@types/serve-handler": "^6.1.4",
|
|
104
104
|
"@types/shell-quote": "^1.7.5",
|
|
@@ -106,7 +106,7 @@ var package_default = {
|
|
|
106
106
|
"@vitest/ui": "catalog:",
|
|
107
107
|
eslint: "^10.4.1",
|
|
108
108
|
memfs: "^4.56.11",
|
|
109
|
-
rollup: "^4.
|
|
109
|
+
rollup: "^4.62.2",
|
|
110
110
|
tsup: "^8.5.1",
|
|
111
111
|
tsx: "catalog:",
|
|
112
112
|
"type-fest": "^5.4.4",
|
|
@@ -1257,5 +1257,5 @@ async function createFromTemplate(args) {
|
|
|
1257
1257
|
}
|
|
1258
1258
|
|
|
1259
1259
|
export { create, createLogger, init, logger, package_default };
|
|
1260
|
-
//# sourceMappingURL=chunk-
|
|
1261
|
-
//# sourceMappingURL=chunk-
|
|
1260
|
+
//# sourceMappingURL=chunk-P6DWHJ3B.js.map
|
|
1261
|
+
//# sourceMappingURL=chunk-P6DWHJ3B.js.map
|